home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / mex / mxo-ss10.aqm / MXO-SS10.ASM
Assembly Source File  |  1985-08-05  |  10KB  |  334 lines

  1.     title    'Advanced Digital Super Six Overlay'
  2. ;
  3. REV    EQU    10
  4. ;
  5. ; MXO-SS10.ASM -- MEX Overlay for Super Six.  9/10/84
  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 A and the modem is on channel B.
  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. ; 09/10/84 - Adapted from MXO-GB11.ASM        - Robert Connolly
  15. ;
  16. ; MEX service processor stuff
  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. ; port equates
  49. ;
  50. DPORT    EQU    2        ;data port
  51. SPORT    EQU    3        ;status port
  52. BPORT    EQU    18H        ;baud rate port (set)
  53. RBPORT    EQU    15H        ;baud rate port (read)
  54. ;
  55. TBMT    EQU    04H        ;transmit buffer empty
  56. DAV    EQU    01H        ;data available
  57. ;
  58. ; Baud rate parameters
  59. ;
  60. BD50    EQU    000H
  61. BD75    EQU    010H
  62. BD110    EQU    020H
  63. BD134    EQU    030H
  64. BD150    EQU    040H        ;150 baud
  65. BD300    EQU    050H        ;300 baud
  66. BD600    EQU    060H        ;600 baud
  67. BD1200    EQU    070H        ;1200 baud
  68. BD1800    EQU    080H
  69. BD2000    EQU    090H
  70. BD2400    EQU    0A0H        ;2400 baud
  71. BD3600    EQU    0B0H
  72. BD4800    EQU    0C0H        ;4800 baud
  73. BD7200    EQU    0D0H
  74. BD9600    EQU    0E0H        ;9600 baud
  75. BD19200    EQU    0F0H        ;19200 baud
  76. ;
  77.     ORG    100H
  78. ;
  79. ; Change the clock speed to suit your system
  80. ;
  81.     DS    3        ;(for  "JMP   START" instruction)
  82.  
  83.     DB    NO        ;yes=PMMI S-100 Modem            103H
  84.     DB    NO        ;yes=HAYES Smartmodem, no=non-PMMI    104H
  85.     DB    'P'        ;T=touch, P=pulse (Smartmodem-only)    105H
  86. CLOCK:    DB    60        ;clock speed in MHz x10, 25.5 MHz max.    106H
  87.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  88. MSPEED:    DB    5        ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  89.                 ;6=2400 7=4800 8=9600 9=19200 default
  90. BYTDLY:    DB    5        ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  91.                 ;default time to send character in ter-
  92.                 ;minal mode file transfer for slow BBS.
  93. CRDLY:    DB    5        ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  94.                 ;default time for extra wait after CRLF
  95.                 ;in terminal mode file transfer
  96. COLUMS:    DB    5        ;number of DIR columns shown        10AH
  97. SETFLG:    DB    YES        ;yes=user-added Setup routine        10BH
  98. SCRTST:    DB    YES        ;Cursor control routine         10CH
  99.     DB    YES        ;yes=resend a record after any non-ACK    10DH
  100.                 ;no=resend a record after a valid-NAK
  101. BAKFLG:    DB    YES        ;yes=change any file same name to .BAK    10EH
  102. CRCDFL:    DB    YES        ;yes=default to CRC checking        10FH
  103. TOGCRC:    DB    YES        ;yes=allow toggling of CRC to Checksum    110H
  104. CVTBS:    DB    NO        ;yes=convert backspace to rub        111H
  105. TOGLBK:    DB    YES        ;yes=allow toggling of bksp to rub    112H
  106. ADDLF:    DB    NO        ;no=no LF after CR to send file in    113H
  107.                 ;terminal mode (added by remote echo)
  108. TOGLF:    DB    YES        ;yes=allow toggling of LF after CR    114H
  109.     DB    YES        ;yes=allow transmission of logon    115H
  110.                 ;write logon sequence at location LOGON
  111. SAVCCP:    DB    YES        ;yes=do not overwrite CCP        116H
  112.     DB    NO        ;yes=local command if EXTCHR precedes    117H
  113.                 ;no=external command if EXTCHR precedes
  114.     DB    YES        ;yes=allow toggling of LOCONEXTCHR    118H
  115. LSTTST:    DB    YES        ;yes=printer available on printer port    119H
  116. XOFTST:    DB    NO        ;yes=checks for XOFF from remote while    11AH
  117.                 ;sending a file in terminal mode
  118. XONWT:    DB    NO        ;yes=wait for XON after CR while    11BH
  119.                 ;sending a file in terminal mode
  120. TOGXOF:    DB    YES        ;yes=allow toggling of XOFF checking    11CH
  121. IGNCTL:    DB    YES        ;yes=CTL-chars above ^M not displayed    11DH
  122. EXTRA1:    DB    0        ;for future expansion            11EH
  123. EXITCHR    DB    'E'-40H        ;^E = Exit to main menu            11FH
  124. BRKCHR:    DB    '@'-40H        ;^@ = Send 300 ms. break tone        120H
  125. NOCONN:    DB    'N'-40H        ;^N = Disconnect from the phone line    121H
  126. LOGCHR:    DB    'L'-40H        ;^L = Send logon            122H
  127. LSTCHR:    DB    'P'-40H        ;^P = Toggle printer            123H
  128. UNSAVE:    DB    'R'-40H        ;^R = Close input text buffer        124H
  129. TRNCHR:    DB    'T'-40H        ;^T = Transmit file to remote        125H
  130. SAVCHR:    DB    'Y'-40H        ;^Y = Open input text buffer        126H
  131. EXTCHR:    DB    '^'-40H        ;^^ = Send next character        127H
  132.     DS    2        ;unused by MEX                128H
  133. ;
  134. INCTL1:    IN    SPORT
  135.     RET
  136.     DS    7
  137. ;
  138. OTDATA:    OUT    DPORT        ;output data port            134H
  139.     RET
  140.     DS    7
  141. ;
  142. INPORT:    IN    DPORT        ;input data port            13EH
  143.     RET
  144.     DS    7
  145. ;
  146. MASKR:    ANI    DAV    ! RET    ;bit to test for receive ready        148H
  147. TESTR:    CPI    DAV    ! RET    ;value of rcv. bit when ready        14BH
  148. MASKS:    ANI    TBMT    ! RET    ;bit to test for send ready        14EH
  149. TESTS:    CPI    TBMT    ! RET    ;value of send bit when ready        151H
  150.     DS    14        ;                    156H
  151. ;
  152. ;
  153.     DS    3        ;DIALV: not done here (maybe MXO-SM)    162H
  154. DISCV:    JMP    DISCON        ;disconnect
  155. GOODBV:    JMP    GOODBY        ;                    168H
  156. INMODV:    JMP    NITMOD        ;go to user written routine        16BH
  157.     JMP    PBAUD        ;NEWBDV                    16EH
  158.     RET ! NOP ! NOP        ;NOPARV                    171H
  159.     RET ! NOP ! NOP        ;PARITV                    174H
  160. SETUPV:    JMP    SETCMD        ;                    177H
  161.     DS    3        ;not used by MEX            17AH
  162. VERSNV:    JMP    SYSVER        ;                    17DH
  163. BREAKV:    JMP    SBREAK        ;                    180H
  164. ;
  165. ; Do not change the following six lines (they provide access to routines
  166. ; in MEX that are present to support MDM7 overlays -- they will likely
  167. ; be gone by MEX v2.0).
  168. ;
  169. ILPRTV:    DS    3        ;                    183H
  170. INBUFV    DS    3        ;                    186H
  171. ILCMPV:    DS    3        ;                    189H
  172. INMDMV:    DS    3        ;                    18CH
  173.     DS    3        ;                    18FH
  174. TIMERV    DS    3        ;                    192H
  175. ;
  176. ; Routine to clear to end of screen.  If using CLREOS and CLRSCRN, set
  177. ; SCRTEST to YES at 010AH (above).
  178. ;
  179. CLREOS:    LXI    D,EOSMSG    ;                    195H
  180.     MVI    C,PRINT
  181.     CALL    MEX
  182.     RET
  183. ;
  184. CLS:    LXI    D,CLSMSG    ;                    19EH
  185.     MVI    C,PRINT
  186.     CALL    MEX
  187.     RET
  188. ;                                    1A7H
  189. ;
  190. ; end of fixed area
  191. ;
  192. SYSVER:    MVI    C,ILP        ;in-line print
  193.     CALL    MEX
  194.     DB    'Advanced Digital Super Six V.'
  195.     DB    REV/10+'0'
  196.     DB    '.'
  197.     DB    REV MOD 10+'0'
  198.     DB    CR,LF,0
  199.     RET
  200. ;
  201. ; Routine to exit just prior to exit-to-cpm
  202. ;
  203. GOODBY:    RET            ;not done here
  204. ;
  205. ; Send break to remote
  206. ;
  207. SBREAK:    MVI    A,11111010B    ;DTR, 8 BITS, BRK, TxE, RTS
  208.     JMP    DISC1
  209. ;
  210. ; Initialize the port; either set an initial baud rate, or (if
  211. ; your system is capable of it) query the current rate and set
  212. ; MSPEED value.  We can do neither here, so we assume a value
  213. ; for MSPEED -- if it's not the current value, the user must
  214. ; execute a SET command to bring MSPEED into agreement with the
  215. ; current baud rate.
  216. ;
  217. NITMOD:    MVI    A,5
  218.     STA    MSPEED
  219. ;
  220. ; Disconnect the modem
  221. ;
  222. DISCON:    MVI    A,0        ;clear DTR
  223. DISC1:    PUSH    PSW
  224.     MVI    A,5        ;write register 5
  225.     OUT    SPORT
  226.     POP    PSW
  227.     OUT    SPORT
  228.     MVI    B,3        ;turn off DTR for 300 ms.
  229.     MVI    C,TIMER
  230.     CALL    MEX
  231.     MVI    A,5
  232.     OUT    SPORT
  233.     MVI    A,0EAH        ;turn DTR back on
  234.     OUT    SPORT
  235.     RET
  236. ;
  237. ;
  238. SETCMD:    MVI    C,SBLANK    ;any arguments?
  239.     CALL    MEX
  240.     JC    BDSHOW        ;if not, go display baud
  241.     LXI    D,CMDTBL
  242.     MVI    C,LOOKUP
  243.     CALL    MEX        ;parse argument
  244.     PUSH    H        ;save any parsed argument adrs on stack
  245.     RNC            ;if we have one, return to it
  246.     POP    H        ;oops, input not found in table
  247. SETERR:    MVI    C,ILP        ;inline print
  248.     CALL    MEX
  249.     DB    CR,LF,'SET command error',CR,LF,0
  250.     RET
  251. ;
  252. ; Argument table
  253. ;
  254. CMDTBL:    DB    '?'+80H        ;help
  255.     DW    STHELP
  256.     DB    'BAU','D'+80H    ;"set baud"
  257.     DW    STBAUD
  258.     DB    0        ;<<=== table terminator
  259. ;
  260. ; "SET ?" processor
  261. ;
  262. STHELP:    MVI    C,ILP        ;inline print
  263.     CALL    MEX
  264.     DB    CR,LF,'SET BAUD <rate>'
  265.     DB    CR,LF
  266.     DB    CR,LF,'Baud rate is one of:'
  267.     DB    CR,LF,'   300 600 1200 2400 4800 9600 19200'
  268.     DB    CR,LF,0
  269.     RET
  270. ;
  271. ; "SET BAUD" processor
  272. ;
  273. STBAUD:    MVI    C,BDPARS    ;function code: parse a baudrate
  274.     CALL    MEX        ;let MEX look up code
  275.     JC    SETERR        ;jump if invalid code
  276.     CALL    PBAUD        ;no, try to set it
  277.     JC    SETERR        ;if not one of ours, bomb out
  278. BDSHOW:    MVI    C,ILP        ;inline print
  279.     CALL    MEX        ;display baud
  280.     DB    'Baud: ',0
  281.     LDA    MSPEED        ;get current baud rate
  282.     MVI    C,PRBAUD    ;let MEX print it
  283.     CALL    MEX
  284.     RET
  285. ;
  286. ;
  287. ; This routine sets baud rate passed as MSPEED code in A.
  288. ; Returns CY=1 if baud rate not supported (if supported,
  289. ; this routine must set the new MSPEED code).
  290. ;
  291. PBAUD:    PUSH    H        ;don't alter anybody
  292.     PUSH    D
  293.     PUSH    B
  294.     MOV    E,A        ;MSPEED code to DE
  295.     MVI    D,0
  296.     LXI    H,BAUDTB    ;offset into table
  297.     DAD    D
  298.     MOV    A,M        ;fetch code
  299.     ORA    A        ;0? (means unsupported code)
  300.     STC            ;prep carry in case unsupported
  301.     JZ    PBEXIT        ;exit if bad
  302.     MOV    C,A        ;save new speed
  303.     IN    RBPORT        ;get current serial speeds
  304.     ANI    0FH        ;save terminal speed
  305.     ORA    C        ;new modem speed
  306.     OUT    BPORT        ;set serial speeds
  307.     MOV    A,E        ;get MSPEED code back
  308.     STA    MSPEED        ;set it
  309.     ORA    A        ;return no-errors
  310. PBEXIT:    POP    B
  311.     POP    D
  312.     POP    H
  313.     RET
  314. ;
  315. BAUDTB:    DB    0        ;110 (not supported)
  316.     DB    BD300        ;300
  317.     DB    0        ;450 (not supported)
  318.     DB    BD600        ;600
  319.     DB    0        ;710 (not supported)
  320.     DB    BD1200        ;1200
  321.     DB    BD2400        ;2400
  322.     DB    BD4800        ;4800
  323.     DB    BD9600        ;9600
  324.     DB    BD19200        ;19200
  325. ;
  326. ;
  327. ; Clear-to-end-of-screen and clear-screen sequences
  328. ;
  329. EOSMSG:    DB    ESC,'Y','$'
  330. CLSMSG:    DB    26,'$'
  331. ;
  332. ;
  333.     END
  334.