home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / COMMS / QTO-OVL0.ARC / QTO-HP1B.ASM < prev    next >
Assembly Source File  |  1991-08-11  |  9KB  |  290 lines

  1. ; QTO-HP1B.ASM - QTERM Overlay for Hewlett-Packard HP-125 Computer
  2. ;
  3. ; Author: Mike Freeman 17-Apr-89
  4. ; 301 N.E. 107th Street; Vancouver, Wa 98685; (206)574-8221
  5. ;
  6. ; See QTERM.PAT for documentation of QTERM's patch area
  7. ;
  8. ; I claim no copyright on this overlay; as a road-sign in Oklahoma
  9. ; once said:  "No Speed Limit -- Do Your Damnedest"
  10. ;
  11. ; The program QTERM is Copyright 1989 by DPG (David Goodenough)
  12. ;
  13. ; Revised 04/19-89 to save/restore all Z80 registers (including IX and IY)
  14. ; during BDOS calls; Ymodem Batch transfers now work -- Mike Freeman
  15. ; Revised 04/25/89 to home cursor/clear screen upon QTERM entry/exit
  16. ; Also made Z80-specific code more obvious by commenting in Zilog instructions
  17. ; -- Mike Freeman --
  18. ; Revised 04/26/89 to map/unmap RDR/PUN last to avoid escape sequences
  19. ; showing up/not being interpreted properly after QTERM exits if the HP-125
  20. ; has been placed in Remote Mode -- Mike Freeman
  21. ;
  22. ;This overlay adapts QTERM.COM from QTERMxxx.LBR to run on the Hewlett-Packard
  23. ;HP-125 Series 100 Business Computer running a HP-modified CP/M Version 2.2
  24. ;operating system.  This overlay is a full QTERM implementation except that:
  25. ;(1) Break is not implemented (a Break can be sent from the Keyboard only);
  26. ;(2) The DTR-manipulation/modem hangup routines are not implemented; (3) The
  27. ;routine to change Baud-rate is not implemented (this is changed from the
  28. ;Keyboard's Configuration Menu); (4) Stop-bit manipulation is not implemented
  29. ;(HP gives the user no way to do this) and (5) changing of parity is not
  30. ;implemented (this is also changed from the Configuration Menu).  The Hp-125
  31. ;consists of 2 Z80 processors: one is the CPU and the other handles terminal
  32. ;I/O.  HP does not allow the user to access the Z80 I/O ports directly.
  33. ;However, HP does provide the CP/M Reader and Punch BDOS calls along with
  34. ;a "subfunction" call (passed in BC) to get Reader status.  When properly
  35. ;mapped, the Reader takes input from Datacomm Port 1 and the Punch sends output
  36. ;to Datacomm Port 1.  All data is in the form 8N1 and special provisions must
  37. ;be made to insure that all 8 bits of data are sent/received by DAtacomm 1.
  38. ;(Datacomm 2, the Printer Port, can only accommodate 7-bit data).  Device
  39. ;mapping of Reader/Punch to Datacomm Port 1 is accomplished by sending a series
  40. ;of escape sequences to the HP-125's Console (rather than using the IO byte).
  41. ;
  42. ;To assemble QTO-HP1B.ASM using ASM:
  43. ;A>ASM QTO-HP1B
  44.  
  45. ;To produce the modified QTERM.COM ready for use with the HP-125 using MLOAD:
  46. ;A>MLOAD QTO-HP1=QTERM.COM,QTO-HP1B.HEX
  47. ;
  48. ;
  49. ; Parameters
  50. ;
  51. HAYES    EQU    000H        ;Nonzero means HAYES-style hang-up string
  52. ;
  53. ;BDOS equates
  54. ;
  55. BOOT    EQU    0        ;CP/M Warm-start
  56. RDR    EQU    3        ; Reader input
  57. PUN    EQU    4        ; Punch output
  58. BDOS    EQU    5        ; BDOS entry
  59. DCONIO    EQU    6        ;Direct Console I/O
  60. PRT    EQU    9        ; Print "$"-terminated string to Console
  61. ;
  62. ;Special HP subfunctions
  63. ;
  64. RDRSTS    EQU    70FFH        ; Get Reader status (A nonzero if char ready)
  65. BITS8    EQU    73FFH        ; Set Datacomm 1 to pass 8-bit data
  66. BITS7    EQU    74FFH        ; Set Datacomm 1 to allow only 7-bit data
  67. JVT    EQU    7EFFH        ; Jump-vector (BIOS routine address) transfer
  68. ;
  69. ;Ascii equates
  70. ;
  71. ESC    EQU    1BH        ; <ESC>
  72. ;
  73. ;Routine addresses
  74. ;
  75. CONOUT    EQU    0109H        ; Character in C to Console
  76. DECOUT    EQU    010CH        ; Number in HL to Console in decimal
  77. ;
  78.     ORG    0110H        ; Overlay starts here
  79. ;
  80. ;Get modem (Reader) status
  81. ;
  82.     PUSH    B        ;Protect BC
  83.     LXI    B,RDRSTS    ; Set subfunction call to
  84.     CALL    ENTRY        ; Get Reader status
  85.     POP    B        ;Restore registers
  86.     RET            ; And return
  87.     DS    120H-$ AND 0FFH
  88. ;
  89. ;Get modem character into A
  90. ;
  91.     PUSH    B        ;Save BC
  92.     MVI    C,RDR        ; Set function call to
  93.     CALL    ENTRY        ;Get character
  94.     POP    B        ;Restore BC
  95.     RET            ;and return
  96.     DS    130H-$ AND 0FFH
  97. ;
  98. ;Get Punch status (always true)
  99. ;
  100.     XRA    A        ;Set Z
  101.     INR    A        ;Clear Z
  102.     RET            ; And return
  103.     DS    140H-$ AND 0FFH
  104. ;
  105. ;Send character in A to Punch
  106. ;
  107.     PUSH    PSW        ;Save registers
  108.     PUSH    B        ;...
  109.     PUSH    D        ;...
  110.     MOV    E,A        ; Put character in E
  111.     MVI    C,PUN        ; Set function call to
  112.     CALL    ENTRY        ;Send character
  113.     POP    D        ;Restore registers
  114.     POP    B        ;...
  115.     POP    PSW        ;...
  116.     RET            ;and return
  117.     DS    150H-$ AND 0FFH
  118. ;
  119. ;Set Break (not implemented)
  120. ;
  121.     RET            ; ...
  122.     DS    160H-$ AND 0FFH
  123. ;
  124. ;Clear break (not implemented)
  125. ;
  126.     RET            ; ...
  127.     DS    170H-$ AND 0FFH
  128. ;
  129. ;Kill DTR routines/modem hang-up string (not implemented)
  130. IF HAYES
  131. ;
  132.     RET            ;Modem hangup string follows
  133.     DB    10,0FEH,'+++',0FEH,'ATH0',0DH
  134. ;
  135. ENDIF ; HAYES
  136. ;
  137. IF NOT HAYES
  138. ;
  139. ;
  140.     DB    0,0C9H        ; ...
  141. ;
  142. ENDIF ;NOT HAYES
  143. ;
  144.     DS    180H-$ AND 0FFH
  145. ;
  146. ;Restore DTR (not implemented)
  147. ;
  148.     RET            ; ...
  149.     DS    190H-$ AND 0FFH
  150. ;
  151. ;Baud-rate setting routine (not implemented
  152. ;
  153.     RET            ; ...
  154.     DS    1B0H-$ AND 0FFH
  155. ;
  156. ;Set Parity/Stop-bits (not implemented)
  157. ;
  158.     RET            ; ...
  159.     DS    1CCH-$ AND 0FFH
  160. ;
  161.     DS    1        ;Reserved for future use
  162. ;
  163.     DS    1        ; Transfer size
  164. ;
  165.     DB    4        ; Processor speed in mHz
  166. ;
  167.     DB    '\'-40H        ; Escape character
  168. ;
  169.     DB    'HP-125 Series 100',0 ; Sign-on id
  170.     DS    1F0H-$ AND 0FFH
  171. ;
  172. HOMCLR:    DB    ESC,'H',ESC,'J',0 ; Home cursor/clear screen
  173.     DS    200H-$ AND 0FFH
  174. ;
  175. ;MOVETO - Place cursor in row/column H/L
  176. ;
  177. MOVETO:    PUSH    H        ; Save row/column
  178.     MVI    C,ESC        ; Send cursor leadin
  179.     CALL    CONOUT        ; ...
  180.     MVI    C,'&'        ; ...
  181.     CALL    CONOUT        ; ...
  182.     MVI    C,'A'+20H    ; ...
  183.     CALL    CONOUT        ; ...
  184.     POP    H        ; Get row/column
  185.     PUSH    H        ; Save again
  186.     MOV    L,H        ; Get row
  187.     MVI    H,0        ; Make 16-bit integer
  188.     CALL    DECOUT        ; Type in decimal to Console
  189.     MVI    C,'R'+20H    ; Say it was a row
  190.     CALL    CONOUT        ; ...
  191.     POP    H        ; Get row/column
  192.     MVI    H,0        ; Isolate column as 16-bit integer
  193.     CALL    DECOUT        ; Type in decimal
  194.     MVI    C,'C'        ; Terminate sequence - column
  195.     JMP    CONOUT        ; And return
  196.     DS    22FH-$ AND 0FFH
  197. ;
  198.     DB    0FFH        ; Terminal capabilities (all)
  199. ;
  200.     DB    ESC,'&@',0,0,0,0,0 ; Enhancement off
  201.     DB    ESC,'&F',0,0,0,0,0 ; Enhancement on
  202.     DB    ESC,'M',0,0,0,0,0,0 ; Delete line
  203.     DB    ESC,'L',0,0,0,0,0,0 ; Insert line
  204.     DB    ESC,'P',0,0,0,0,0,0 ; Delete character
  205.     DB    ESC,'R',20H,ESC,'Q',08H,0,0 ; Insert character
  206.     DB    ESC,'K',0,0,0,0,0,0 ; Clear to end-of-line
  207.     DB    ESC,'J',0,0,0,0,0,0 ; Clear to end-of-screen
  208. ;
  209. ;
  210.     JMP    INIT        ; Initialization
  211.     JMP    FINISH        ; Termination
  212. ;
  213. ;Initialization code
  214. ;
  215. INIT:    LXI    D,JBUF        ; Point to dispatch vector address arg block
  216.     LXI    B,JVT        ; Set subfunction call to
  217.     CALL    BDOS        ; Get Reader input routine address
  218.     LHLD    JBUF+3        ; Remember this address
  219.     SHLD    READ8+1        ; For 8-bit Reader routine
  220.     LXI    H,READ8        ; Put this address in BIOS dispatch table
  221.     LXI    B,BITS8        ; Set up to set 8-bit passthru
  222.                 ; And fall into common code
  223. ;
  224. COMCOD:    PUSH    B        ; Save passthru function code
  225.     SHLD    JBUF+3        ; Put BIOS dispatch address in arg block
  226.     MVI    A,1        ; Say we want to write into dispatch table
  227.     STA    JBUF+1        ; ...
  228.     LXI    D,JBUF        ; Point to jump vector argument block
  229.     LXI    B,JVT        ; Set subfunction call to
  230.     CALL    BDOS        ; Write routine address into dispatch table
  231.     LXI    H,HOMCLR    ;Start/end with a clean screen
  232. COMCO0:    MOV    A,M        ;Get character from escape sequence
  233.     ORA    A        ;Done yet?
  234. ;    JR    Z,COMCO1    ;Yes - finish up
  235.     DB    28H,COMCO1-$-1 AND 0FFH;...
  236.     INX    H        ;Else increment pointer
  237.     MOV    E,A        ;and send character to Console
  238.     MVI    C,DCONIO    ;via direct Console I/O
  239.     CALL    ENTRY        ;...
  240. ;    JR    COMCO0        ;Get all characters
  241.     DB    18H,COMCO0-$-1 AND 0FFH;...
  242. COMCO1:    POP    B        ; Get passthru code
  243.     CALL    BDOS        ;Set Passthru
  244.     LXI    D,MAPSEQ    ; Send mapping escape sequences
  245.     MVI    C,PRT        ; To the Console
  246.     JMP    BDOS        ; To do/undo Reader/Datacomm Port 1 mappings
  247.                 ;and return
  248. ;
  249. ;Final (exit) code
  250. ;
  251. FINISH:    LHLD    READ8+1        ; Point to real Reader input address
  252.     LXI    B,BITS7        ; Set for 7-bit terminal passthru
  253.     MVI    A,'9'        ; Set to turn off Datacomm mappings
  254.     STA    MAPSEQ+8    ; ...
  255.     STA    MAPSEQ+19    ; ...
  256. ;    JR    COMCOD        ; And branch to common code
  257.     DB    18H,COMCOD-$-1 AND 0FFH;...
  258. ;
  259. ;Routine to read 8-bit data from Datacomm Port 1
  260. ;
  261. READ8:    CALL    $-$        ; Read data
  262.     MOV    A,B        ; Get 8-bit data
  263.     RET            ; And return
  264. ;
  265. ;Put BIOS routine address vector block here
  266. ;
  267. JBUF:    DB    7,0,0C3H,0,0    ; ...
  268. ;
  269. ;Escape sequence string to map Reader/Punch to Datacomm Port 1
  270. ;
  271. MAPSEQ:    DB    ESC,'&i0s25d2M'    ; Map Datacomm 1 to Reader
  272.     DB    ESC,'&i10s16d2M$' ; And Punch to Datacomm 1
  273. ;
  274. ;ENTRY - Save/restore registers BC-IY and call BDOS
  275. ;
  276. ENTRY:    PUSH    B        ;Save registers
  277.     PUSH    D        ;...
  278.     PUSH    H        ;...
  279.     DB    0DDH,0E5H    ;PUSH IX
  280.     DB    0FDH,0E5H    ;PUSH IY
  281.     CALL    BDOS        ;Do BDOS call
  282.     DB    0FDH,0E1H    ;Restore registers - POP IY
  283.     DB    0DDH,0E1H    ;POP IX
  284.     POP    H        ;...
  285.     POP    D        ;...
  286.     POP    B        ;...
  287.     RET            ;and return
  288. ;
  289.     END            ; End of overlay
  290.