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 / CPM / MEX / MXO-CZ10.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  10KB  |  363 lines

  1. ;    MEX OVERLAY FOR INTERCONTINENTAL MICROSYSTEMS CPZ-4800X
  2. ;
  3. REV    EQU    10
  4. ;
  5. ; MXO-CZ10.ASM -- MEX Overlay for CPZ-48000    01/04/86
  6. ;
  7. ; This overlay will set baud rate from set command and from the phone
  8. ; library, disconnect the modem, and send break.  The overlay assumes
  9. ; the terminal is on channel 1 and the modem is on channel 0.
  10. ;
  11. ; Calling conventions for the various overlay entry points are detailed more
  12. ; fully in the PMMI overlay (MXO-PMxx.ASM, where xx=revision number)
  13. ;
  14. ; 01/04/86    INITIALLY WRITTEN [ESKAY]  (template used was MXO-SS10)
  15. ;
  16. ; MEX service processor functions:
  17. ;
  18. MEX    EQU    0D00H        ;address of the service processor
  19. INMDM    EQU    255        ;get char from port to A, CY=no more in 100 ms
  20. TIMER    EQU    254        ;delay 100ms * reg B
  21. TMDINP    EQU    253        ;B=# secs to wait for char, cy=no char
  22. CHEKCC    EQU    252        ;check for ^C from KBD, Z=present
  23. SNDRDY    EQU    251        ;test for modem-send ready
  24. RCVRDY    EQU    250        ;test for modem-receive ready
  25. SNDCHR    EQU    249        ;send a character to the modem (after sndrdy)
  26. RCVCHR    EQU    248        ;recv a char from modem (after rcvrdy)
  27. LOOKUP    EQU    247        ;table search: see CMDTBL comments for info
  28. PARSFN    EQU    246        ;parse filename from input stream
  29. BDPARS    EQU    245        ;parse baud-rate from input stream
  30. SBLANK    EQU    244        ;scan input stream to next non-blank
  31. EVALA    EQU    243        ;evaluate numeric from input stream
  32. LKAHED    EQU    242        ;get nxt char w/o removing from input
  33. GNC    EQU    241        ;get char from input, cy=1 if none
  34. ILP    EQU    240        ;inline print
  35. DECOUT    EQU    239        ;decimal output
  36. PRBAUD    EQU    238        ;print baud rate
  37. ;
  38. PRINT    EQU    9        ;BDOS/MEX print-string function call
  39. ;
  40. BELL    EQU    7        ;bell
  41. TAB    EQU    9
  42. CR    EQU    13        ;carriage return
  43. LF    EQU    10        ;linefeed
  44. ESC    EQU    1BH        ;escape
  45. YES    EQU    0FFH
  46. NO    EQU    0
  47. ;
  48. ;
  49. ; DEFINE WHICH PORT TO USE FOR MEX - DEFINE ONLY ONE!!!!
  50. PORT0    EQU    YES
  51. PORT1    EQU    NO
  52. ;
  53. ; port equates
  54. ;
  55. CMNDA    EQU    81H        ; COMMAND PORT CHANNEL 0
  56. CMNDB    EQU    83H        ; COMMAND PORT CHANNEL 1
  57. ;
  58.     IF    PORT0
  59. SPORT    EQU    CMNDA        ; STATUS PORT
  60. DPORT    EQU    CMNDA-1        ; DATA PORT
  61.     ENDIF
  62.     IF    PORT1
  63. SPORT    EQU    CMNDB        ; STATUS PORT
  64. DPORT    EQU    CMNDB-1        ; DATA PORT
  65.     ENDIF
  66. ;
  67. RDA    EQU    1        ; RECEIVE DATA AVAILABLE
  68. TBE    EQU    4        ; TRANSMIT BUFFER EMPTY
  69. ;
  70. ; Baud rate parameters
  71. ;
  72. TCH0    EQU    0B0H        ; TIMER CHANNEL 0
  73. TCH1    EQU    0B1H        ; TIMER CHANNEL 1
  74. TCMND    EQU    0B3H        ; TIMER COMMAND PORT
  75. CHAMD    EQU    36H        ; CHANNEL 0 MODE
  76. CHBMD    EQU    76H        ; CHANNEL 1 MODE
  77. ;
  78.     IF    PORT0
  79. CHMD    EQU    CHAMD
  80. TCHN    EQU    TCH0
  81.     ENDIF
  82.     IF    PORT1
  83. CHMD    EQU    CHBMD
  84. TCHN    EQU    TCH1
  85.     ENDIF
  86. ;
  87. CLK    EQU    24576/16    ; CRYSTAL FREQUENCY DIV 16
  88. B38400    EQU    CLK/384        ; 38K BAUD
  89. B19200    EQU    CLK/192        ; 19K BAUD
  90. B9600    EQU    CLK/96        ; 9600 BAUD
  91. B4800    EQU    CLK/48        ; 4800 BAUD
  92. B2400    EQU    CLK/24        ; 2400 BAUD
  93. B1200    EQU    CLK/12        ; 1200 BAUD
  94. B600    EQU    CLK/6        ; 600 BAUD
  95. B300    EQU    CLK/3        ; 300 BAUD
  96. ;
  97.     ORG    100H
  98. ;
  99. ; Change the clock speed to suit your system
  100. ;
  101.     DS    3        ;(for  "JMP   START" instruction)
  102.  
  103.     DB    NO        ;yes=PMMI S-100 Modem            103H
  104.     DB    NO        ;yes=HAYES Smartmodem, no=non-PMMI    104H
  105.     DB    'T'        ;T=touch, P=pulse (Smartmodem-only)    105H
  106. CLOCK:    DB    60        ;clock speed in MHz x10, 25.5 MHz max.    106H
  107.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  108. MSPEED:    DB    5        ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  109.                 ;6=2400 7=4800 8=9600 9=19200 default
  110. BYTDLY:    DB    5        ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  111.                 ;default time to send character in ter-
  112.                 ;minal mode file transfer for slow BBS.
  113. CRDLY:    DB    5        ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  114.                 ;default time for extra wait after CRLF
  115.                 ;in terminal mode file transfer
  116. COLUMS:    DB    5        ;number of DIR columns shown        10AH
  117. SETFLG:    DB    YES        ;yes=user-added Setup routine        10BH
  118. SCRTST:    DB    NO        ;Cursor control routine         10CH
  119.     DB    YES        ;yes=resend a record after any non-ACK    10DH
  120.                 ;no=resend a record after a valid-NAK
  121. BAKFLG:    DB    YES        ;yes=change any file same name to .BAK    10EH
  122. CRCDFL:    DB    YES        ;yes=default to CRC checking        10FH
  123. TOGCRC:    DB    YES        ;yes=allow toggling of CRC to Checksum    110H
  124. CVTBS:    DB    NO        ;yes=convert backspace to rub        111H
  125. TOGLBK:    DB    YES        ;yes=allow toggling of bksp to rub    112H
  126. ADDLF:    DB    NO        ;no=no LF after CR to send file in    113H
  127.                 ;terminal mode (added by remote echo)
  128. TOGLF:    DB    YES        ;yes=allow toggling of LF after CR    114H
  129.     DB    YES        ;yes=allow transmission of logon    115H
  130.                 ;write logon sequence at location LOGON
  131. SAVCCP:    DB    YES        ;yes=do not overwrite CCP        116H
  132.     DB    NO        ;yes=local command if EXTCHR precedes    117H
  133.                 ;no=external command if EXTCHR precedes
  134.     DB    YES        ;yes=allow toggling of LOCONEXTCHR    118H
  135. LSTTST:    DB    YES        ;yes=printer available on printer port    119H
  136. XOFTST:    DB    NO        ;yes=checks for XOFF from remote while    11AH
  137.                 ;sending a file in terminal mode
  138. XONWT:    DB    NO        ;yes=wait for XON after CR while    11BH
  139.                 ;sending a file in terminal mode
  140. TOGXOF:    DB    YES        ;yes=allow toggling of XOFF checking    11CH
  141. IGNCTL:    DB    YES        ;yes=CTL-chars above ^M not displayed    11DH
  142. EXTRA1:    DB    0        ;for future expansion            11EH
  143. EXITCHR    DB    'E'-40H        ;^E = Exit to main menu            11FH
  144. BRKCHR:    DB    '@'-40H        ;^@ = Send 300 ms. break tone        120H
  145. NOCONN:    DB    'N'-40H        ;^N = Disconnect from the phone line    121H
  146. LOGCHR:    DB    'L'-40H        ;^L = Send logon            122H
  147. LSTCHR:    DB    'P'-40H        ;^P = Toggle printer            123H
  148. UNSAVE:    DB    'R'-40H        ;^R = Close input text buffer        124H
  149. TRNCHR:    DB    'T'-40H        ;^T = Transmit file to remote        125H
  150. SAVCHR:    DB    'Y'-40H        ;^Y = Open input text buffer        126H
  151. EXTCHR:    DB    '^'-40H        ;^^ = Send next character        127H
  152.     DS    2        ;unused by MEX                128H
  153. ;
  154. INCTL1:    IN    SPORT
  155.     RET
  156.     DS    7
  157. ;
  158. OTDATA:    OUT    DPORT
  159.     RET
  160.     DS    7
  161. ;
  162. INPORT:    IN    DPORT        ;input data port            13EH
  163.     RET
  164.     DS    7
  165. ;
  166. MASKR:    ANI    RDA    ! RET    ;bit to test for receive ready        148H
  167. TESTR:    CPI    RDA    ! RET    ;value of rcv. bit when ready        14BH
  168. MASKS:    ANI    TBE    ! RET    ;bit to test for send ready        14EH
  169. TESTS:    CPI    TBE    ! RET    ;value of send bit when ready        151H
  170.     DS    14        ;                    156H
  171. ;
  172. ;
  173.     DS    3        ;DIALV: not done here (maybe MXO-SM)    162H
  174. DISCV:    JMP    DISCON        ;disconnect
  175. GOODBV:    JMP    GOODBY        ;                    168H
  176. INMODV:    JMP    NITMOD        ;go to user written routine        16BH
  177.     JMP    PBAUD        ;NEWBDV                    16EH
  178.     RET ! NOP ! NOP        ;NOPARV                    171H
  179.     RET ! NOP ! NOP        ;PARITV                    174H
  180. SETUPV:    JMP    SETCMD        ;                    177H
  181.     DS    3        ;not used by MEX            17AH
  182. VERSNV:    JMP    SYSVER        ;                    17DH
  183. BREAKV:    JMP    SBREAK        ;                    180H
  184. ;
  185. ; Do not change the following six lines (they provide access to routines
  186. ; in MEX that are present to support MDM7 overlays -- they will likely
  187. ; be gone by MEX v2.0).
  188. ;
  189. ILPRTV:    DS    3        ;                    183H
  190. INBUFV    DS    3        ;                    186H
  191. ILCMPV:    DS    3        ;                    189H
  192. INMDMV:    DS    3        ;                    18CH
  193.     DS    3        ;                    18FH
  194. TIMERV    DS    3        ;                    192H
  195. ;
  196. ; Routine to clear to end of screen.  If using CLREOS and CLRSCRN, set
  197. ; SCRTEST to YES at 010AH (above).
  198. ;
  199. CLREOS:    LXI    D,EOSMSG    ;                    195H
  200.     MVI    C,PRINT
  201.     CALL    MEX
  202.     RET
  203. ;
  204. CLS:    LXI    D,CLSMSG    ;                    19EH
  205.     MVI    C,PRINT
  206.     CALL    MEX
  207.     RET
  208. ;                                    1A7H
  209. ;
  210. ; end of fixed area
  211. ;
  212. SYSVER:    MVI    C,ILP        ;in-line print
  213.     CALL    MEX
  214.     DB    'ICM CPZ-4800x [ESKAY]  V'
  215.     DB    REV/10+'0'
  216.     DB    '.'
  217.     DB    REV MOD 10+'0'
  218.     DB    CR,LF,0
  219.     RET
  220. ;
  221. ; Routine to exit just prior to exit-to-cpm
  222. ;
  223. GOODBY:    RET            ;not done here
  224. ;
  225. ; Send break to remote
  226. ;
  227. SBREAK:    RET            ; NOT IMPLEMENTED
  228. ;
  229. ; INITIALIZE PORT
  230. ;
  231. NITMOD:    LXI    H,NITTB0
  232.     MVI    B,7        ; 7 BYTES
  233.     CALL    SETMOD
  234.     LDA    MSPEED
  235.     JMP    PBAUD
  236. ;
  237. ; Disconnect the modem
  238. ;
  239. DISCON:    LXI    H,DTROFF
  240.     MVI    B,2
  241.     CALL    SETMOD
  242.     MVI    B,3        ;turn off DTR for 300 ms.
  243.     MVI    C,TIMER
  244.     CALL    MEX
  245.     LXI    H,DTRON
  246.     MVI    B,2
  247. ;
  248. SETMOD:    MVI    C,SPORT
  249.     DB    0EDH,0B3H    ; OTIR
  250.     RET
  251. ;
  252. DTROFF:    DB    05H,06AH
  253. DTRON:    DB    05H,0EAH
  254. NITTB0:    DB    18H,04H,4CH,03H,0C1H,05H,0EAH
  255. ;
  256. SETCMD:    MVI    C,SBLANK    ;any arguments?
  257.     CALL    MEX
  258.     JC    BDSHOW        ;if not, go display baud
  259.     LXI    D,CMDTBL
  260.     MVI    C,LOOKUP
  261.     CALL    MEX        ;parse argument
  262.     PUSH    H        ;save any parsed argument adrs on stack
  263.     RNC            ;if we have one, return to it
  264.     POP    H        ;oops, input not found in table
  265. SETERR:    MVI    C,ILP        ;inline print
  266.     CALL    MEX
  267.     DB    CR,LF,'SET command error',CR,LF,0
  268.     RET
  269. ;
  270. ; Argument table
  271. ;
  272. CMDTBL:    DB    '?'+80H        ;help
  273.     DW    STHELP
  274.     DB    'BAU','D'+80H    ;"set baud"
  275.     DW    STBAUD
  276.     DB    0        ;<<=== table terminator
  277. ;
  278. ; "SET ?" processor
  279. ;
  280. STHELP:    MVI    C,ILP        ;inline print
  281.     CALL    MEX
  282.     DB    CR,LF,'SET BAUD <rate>'
  283.     DB    CR,LF
  284.     DB    CR,LF,'Baud rate is one of:'
  285.     DB    CR,LF,'   300 600 1200 2400 4800 9600 19200 38400'
  286.     DB    CR,LF,0
  287.     RET
  288. ;
  289. ; "SET BAUD" processor
  290. ;
  291. STBAUD:    MVI    C,BDPARS    ;function code: parse a baudrate
  292.     CALL    MEX        ;let MEX look up code
  293.     JC    SETERR        ;jump if invalid code
  294.     CALL    PBAUD        ;no, try to set it
  295.     JC    SETERR        ;if not one of ours, bomb out
  296. BDSHOW:    MVI    C,ILP        ;inline print
  297.     CALL    MEX        ;display baud
  298.     DB    'Baud: ',0
  299.     LDA    MSPEED        ;get current baud rate
  300.     MVI    C,PRBAUD    ;let MEX print it
  301.     JMP    MEX
  302. ;
  303. ;
  304. ; This routine sets baud rate passed as MSPEED code in A.
  305. ; Returns CY=1 if baud rate not supported (if supported,
  306. ; this routine must set the new MSPEED code).
  307. ;
  308. PBAUD:    PUSH    H        ;don't alter anybody
  309.     PUSH    D
  310.     PUSH    B
  311.     MOV    E,A        ;MSPEED code to DE
  312.     MVI    D,0
  313.     LXI    H,BAUDTB    ;offset into table
  314.     DAD    D
  315.     DAD    D
  316.     MOV    A,M        ;fetch code
  317.     INX    H
  318.     MOV    H,M
  319.     MOV    L,A
  320.     ORA    H        ;0? (means unsupported code)
  321.     STC            ;prep carry in case unsupported
  322.     JZ    PBEXIT        ;exit if bad
  323.     IF    PORT0
  324.     MVI    A,CHMD
  325.     OUT    TCMND
  326.     MOV    A,L
  327.     OUT    TCHN
  328.     MOV    A,H
  329.     OUT    TCHN
  330.     MOV    A,E
  331.     STA    MSPEED        ;set it
  332.     ORA    A        ;return no-errors
  333. PBEXIT:    POP    B
  334.     POP    D
  335.     POP    H
  336.     RET
  337. ;
  338. BAUDTB:    DW    0        ;110 (not supported)
  339.     DW    B300        ;300
  340.     DW    0        ;450 (not supported)
  341.     DW    B600        ;600
  342.     DW    0        ;710 (not supported)
  343.     DW    B1200        ;1200
  344.     DW    B2400        ;2400
  345.     DW    B4800        ;4800
  346.     DW    B9600        ;9600
  347.     DW    B19200        ;19200
  348.     DW    B38400        ;38400
  349. ;
  350. ;
  351. ; Clear-to-end-of-screen and clear-screen sequences
  352. ;
  353. EOSMSG:    DB    ESC,'Y','$'
  354. CLSMSG:    DB    26,'$'
  355. ;
  356. ;
  357.     END
  358. int it
  359.     JMP    MEX
  360. ;
  361. ;
  362. ; This routine sets baud rate passed as MSPEED code in A.
  363. ; Returns CY=1 if baud rate no