home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / mex / mxo-zb11.aqm / MXO-ZB11.ASM
Assembly Source File  |  1985-08-05  |  9KB  |  348 lines

  1. ;     MXO-ZB11.ASM -- Telcon Zorba overlay file for MEX10 - 05/24/84
  2. ;
  3. ;
  4. ; Use the MEX "SET" command to change the baudrate when desired.  It
  5. ; starts out at 300 baud when the program is first called up.
  6. ;
  7. ;  TO USE: First edit this file filling in answers for your own
  8. ;        equipment.  Then assemble with ASM.COM or equivalent
  9. ;        assembler.  Then use MLOAD to overlay the the results
  10. ;        of this program to the original .COM file.
  11. ;
  12. ;    <modified 12/8/84 Bill Pechter, added additional baud rates>
  13. ;
  14. ;
  15. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  16. BELL:        EQU    07H        ;bell
  17. CR:        EQU    0DH        ;carriage return
  18. ESC:        EQU    1BH        ;escape
  19. LF:        EQU    0AH        ;linefeed
  20. ;
  21. YES:        EQU    0FFH
  22. NO:        EQU    0
  23. ;
  24. ; MEX service processor stuff
  25. ;
  26. MEX    EQU    0D00H        ;address of the service processor
  27. INMDM    EQU    255        ;get char from port to A, CY=no more in 100 ms
  28. TIMER    EQU    254        ;delay 100ms * reg B
  29. TMDINP    EQU    253        ;B=# secs to wait for char, cy=no char
  30. CHEKCC    EQU    252        ;check for ^C from KBD, Z=present
  31. SNDRDY    EQU    251        ;test for modem-send ready
  32. RCVRDY    EQU    250        ;test for modem-receive ready
  33. SNDCHR    EQU    249        ;send a character to the modem (after sndrdy)
  34. RCVCHR    EQU    248        ;recv a char from modem (after rcvrdy)
  35. LOOKUP    EQU    247        ;table search: see CMDTBL comments for info
  36. PARSFN    EQU    246        ;parse filename from input stream
  37. BDPARS    EQU    245        ;parse baud-rate from input stream
  38. SBLANK    EQU    244        ;scan input stream to next non-blank
  39. EVALA    EQU    243        ;evaluate numeric from input stream
  40. LKAHED    EQU    242        ;get nxt char w/o removing from input
  41. GNC    EQU    241        ;get char from input, cy=1 if none
  42. ILP    EQU    240        ;inline print
  43. DECOUT    EQU    239        ;decimal output
  44. PRBAUD    EQU    238        ;print baud rate
  45. ;
  46. PRINT    EQU    9        ;MEX/BDOS print-string function call
  47.  
  48. ;
  49. DPORT:        EQU    020H        ;ZORBA Modem Data Port
  50. MODCT1:        EQU    DPORT+1        ;Modem status port
  51. MODCT2:        EQU    DPORT+1        ;Modem control port
  52. MODDAT:        EQU    DPORT        ;Modem data port
  53. ;
  54. ;
  55.         ORG    100H
  56. ;
  57.         DS    3    ;(for  "JMP   START" instruction)
  58. ;
  59.  
  60. PMODEM:        DB    NO    ;yes=PMMI S-100 Modem            103H
  61. SMODEM:        DB    YES    ;yes=HAYES Smartmodem            104H
  62. TPULSE:        DB    'T'    ;T=tone, P=Pulse (Smartmodem-only)    105H
  63. CLOCK:        DB    40    ;clock speed in MHz x10, 25.5 MHz max.    106H
  64.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  65. MSPEED:        DB    1    ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  66.                 ;6=2400 7=4800 8=9600 9=19200 default
  67. BYTDLY:        DB    3    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  68.                 ;default time to send character in ter-
  69.                 ;minal mode file transfer for slow BBS.
  70. CRDLY:        DB    5    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  71.                 ;default time for extra wait after CRLF
  72.                 ;in terminal mode file transfer
  73. COLUMS:        DB    5    ;number of DIR columns shown        10AH
  74. SETFLG:        DB    YES    ;yes=user-added Setup routine        10BH
  75. SCRTST:        DB    YES    ;cursor control routine         10CH
  76.         DB    YES    ;yes=resend a record after a non-ACK    10DH
  77.                 ;no=resend a record only after NAK
  78. BAKFLG:        DB    YES    ;yes=change any file same name to .BAK    10EH
  79. CRCDFL:        DB    YES    ;yes=default to CRC checking        10FH
  80. TOGCRC:        DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  81. CVTBS:        DB    NO    ;yes=convert backspace to rub        111H
  82. TOGLBK:        DB    YES    ;yes=allow toggling of bksp to rub    112H
  83. ADDLF:        DB    NO    ;no=no LF after CR to send file in    113H
  84.                 ;terminal mode (added by remote echo)
  85. TOGLF:        DB    YES    ;yes=allow toggling of LF after CR    114H
  86.         DB    NO    ;yes=allow transmission of logon    115H
  87.                 ;write logon sequence at location LOGON
  88. SAVCCP:        DB    YES    ;yes=do not overwrite CCP        116H
  89.         DB    NO    ;yes=local command if EXTCHR precedes    117H
  90.                 ;no=external command if EXTCHR precedes
  91.         DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  92. LSTTST:        DB    YES    ;yes=printer available on printer port    19H
  93. XOFTST:        DB    NO    ;yes=chcks for XOFF from remote    while    11AH
  94.                  ;sending a file in terminal mode
  95. XONWT:        DB    NO    ;yes=wait for XON after CR while    11BH
  96.                 ;sending a file in terminal mode
  97. TOGXOF:        DB    YES    ;yes=allow toggling of XOFF checking    11CH
  98. IGNCTL:        DB    YES    ;yes=CTL-chars above ^M not displayed    11DH
  99. EXTRA1:        DB    0    ;for future expansion            11EH
  100. EXITCHR:    DB    'E'-40H    ;'E'= Exit to main menu            11FH
  101. BRKCHR        DB    '@'-40H    ;Send a 300 ms. break tone        120H
  102. NOCONN:        DB    'N'-40H    ;^N = Disconnect from phone line    121H
  103. LOGCHR:        DB    'L'-40H    ;^L = Send logon            122H
  104. LSTCHR:        DB    'P'-40H    ;^P = Toggle printer            123H
  105. UNSAVE:        DB    'R'-40H    ;^R = Close input text buffer        124H
  106. TRNCHR:        DB    'T'-40H ;^T = Transmit file to remote        125H
  107. SAVCHR:        DB    'Y'-40H    ;^Y = Open input text buffer        126H
  108. EXTCHR:        DB    '\'-40H    ;^\ = Send next character        127H
  109. ;
  110. ;
  111.         DS    2        ;                128H
  112. ;
  113. INCTL1:        IN    MODCT1 ! RET    ;in modem control port        12AH
  114.         DS    7
  115. OTDATA:        OUT    MODDAT ! RET    ;out modem data port        134H
  116.         DS    7
  117. INPORT:        IN    MODDAT ! RET    ;in modem data port        13EH
  118.         DS    7
  119. MASKR:        ANI    2      ! RET
  120. TESTR:        CPI    2      ! RET
  121. MASKS:        ANI    1      ! RET
  122. TESTS:        CPI    1      ! RET
  123.         DS    12        
  124. ;
  125.         DS    2        ;Not used by MEX        160H
  126.         DS    6        ;                162H
  127. GOODBV:        JMP    GOODBY        ;                168H
  128. INMODV:        JMP    NITMOD        ;go to user written routine    16BH
  129. NEWBDV:        JMP    NEWBAUD        ;Change baudrate        16EH
  130.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    171H
  131.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    174H
  132. SETUPV:        JMP    SETCMD        ;                177H
  133.         DS    3        ;                17AH
  134. VERSNV:        JMP    SYSVER        ;                17DH
  135. BREAKV:        JMP    SBREAK        ;                180H
  136. ;
  137. ;
  138. ; Do not change the following six lines.
  139. ;
  140. ILPRTV:        DS    3        ;                183H
  141. INBUFV:        DS    3        ;                186H
  142. ILCMPV:        DS    3        ;                189H
  143. INMDMV:        DS    3        ;                18CH
  144.         DS    3        ;                18FH
  145. TIMERV:        DS    3        ;                192H
  146. ;
  147. ; Clear sequences -- CLREOS is clear to end of screen, CLRSCRN is clear
  148. ; entire screen.  Last entry must be 0.  Any other 0's act as NOP's.
  149. ;
  150. ;
  151. CLREOS:        LXI    D,EOSMSG
  152.         MVI    C,PRINT
  153.         CALL    MEX
  154.         RET            
  155. ;
  156. CLRSCRN:    LXI    D,CLSMSG
  157.         MVI    C,PRINT
  158.         CALL    MEX
  159.         RET            
  160. ;
  161. SYSVER:        MVI    C,ILP        ;                1A7H
  162.         CALL    MEX
  163.         DB    '*** Version for Gemini/Telcon ZORBA ***'    
  164.         DB    CR,LF,0
  165.         RET
  166. ;
  167. ; This routine allows a 300 ms. break tone to be sent to reset some
  168. ; time-share computers.
  169. ;
  170. SBREAK:   MVI    A,1FH
  171.       JMP    GOODBY1
  172. ;.....
  173. ;
  174. ;
  175. ; This routine sends a 300 ms. break tone and sets DTR low for the same
  176. ; length of time to disconnect some modems such as the Bell 212A, etc.
  177. ;
  178. GOODBY:  MVI    A,07H        ;SEND BREAK, TURN OFF DTR
  179. ;
  180. ;    disabled to avoid dropping line when leaving mex
  181. ;
  182. ;
  183. GOODBY1:  OUT    MODCT1        ;SEND TO STATUS DPORT
  184.       MVI    B,3        ;DELAY ABOUT 300 MS.
  185.       MVI    C,TIMER
  186.       CALL    MEX
  187.       MVI    A,07H        ;NORMAL SEND/RECEIVE WITH DTR
  188.       OUT    MODCT1        ;SEND TO STATUS DPORT
  189.       RET
  190. ;
  191. ;
  192. ; ZORBA initialization -- sets CTC timer 0 for baudrate in/out.
  193. ;
  194. ; ZORBA specific equates for initialization.
  195. ;
  196. CTCCMD:      EQU    03H        ;8253 Timer control/status
  197. CTC0:      EQU    00H        ;Timer 0 (port A)
  198. LSB300      EQU    83H        ;Default 300 baud
  199. MSB300      EQU    06H
  200. ;
  201. ;
  202. NITMOD:   MVI    A,1        ;DEFAULT TRANSFER TIME TO 300 BAUD
  203.       STA    MSPEED
  204. ;
  205. NITMOD1:  MVI    A,36H        ;SQUARE WAVE MODE, PORT A
  206.       OUT    CTCCMD
  207. ;
  208. LSBD:      MVI    A,LSB300
  209.       OUT    CTC0
  210. ;
  211. MSBD:      MVI    A,MSB300
  212.       OUT    CTC0
  213.       RET
  214. ;.....
  215. ;
  216. ;
  217. ;
  218. SETCMD:      MVI    C,SBLANK    ;Any arguments?
  219.       CALL    MEX
  220.       JC    TELL        ;If not, go display baud
  221.       LXI    D,CMDTBL
  222.       MVI    C,LOOKUP
  223.       CALL    MEX        ;Parse argument
  224.       PUSH    H        ;Save any parsed argument addrs on stack
  225.       RNC            ;If we have one, return to it
  226.       POP    H        ;Oops, input not found in table
  227.       MVI    C,ILP
  228.       CALL    MEX        ;Tell user input not valid
  229.       DB    '++(Only 300,450,600,1200,2400,9600,19200 supported)++',CR,LF,0 
  230.       RET
  231. ;
  232. CMDTBL:      DB    '30','0'+80H
  233.       DW    OK300
  234.       ;
  235.       DB    '45','0'+80H
  236.       DW    OK450
  237.       ;
  238.       DB    '60','0'+80H
  239.       DW    OK600
  240.       ;
  241.       DB    '120','0'+80H
  242.       DW    OK1200
  243.       ;
  244.       DB    '240','0'+80H
  245.       DW    OK2400
  246.       ;                        
  247.       DB    '480','0'+80H
  248.       DW    OK4800
  249.       ;
  250.       DB    '960','0'+80H
  251.       DW    OK9600
  252.       ;
  253.       DB    '1920','0'+80H
  254.       DW    OK19200
  255.       ;
  256.       DB    '30','0'+80H
  257.       DW    OK300
  258.       DB    0
  259. ;
  260. ;
  261. TELL:      MVI    C,ILP
  262.       CALL    MEX        ;Print current baud rate
  263.       DB    CR,LF,'Baud rate is now: ',0
  264.       LDA    MSPEED
  265.       MVI    C,PRBAUD
  266.       CALL    MEX
  267.       RET
  268. ;
  269. ;
  270. OK300:      MVI    A,1        ;MSPEED 300 BAUD VALUE
  271.       LHLD    BD300        ;GET 300 BAUD PARAMETERS IN 'HL'
  272.       JMP    LOADBD        ;GO LOAD THEM
  273. ;
  274. OK450:      MVI    A,2
  275.       LHLD    BD450
  276.       JMP    LOADBD
  277. ;
  278. OK600:      MVI    A,3
  279.       LHLD    BD600
  280.       JMP    LOADBD
  281. ;
  282. OK1200:      MVI    A,5
  283.       LHLD    BD1200
  284.       JMP    LOADBD
  285. ;
  286. OK2400:      MVI    A,6
  287.       LHLD    BD2400
  288.       JMP    LOADBD
  289. ;
  290. OK4800:      MVI    A,7
  291.       LHLD    BD4800
  292.       JMP    LOADBD
  293. ;
  294. OK9600:      MVI    A,8
  295.       LHLD    BD9600
  296.       JMP    LOADBD
  297. ;
  298. OK19200:  MVI    A,9
  299.       LHLD    BD19200        ;FALL THRU.....
  300. ;
  301. LOADBD:      STA    NITMOD+1    ;CHANGE TIME-TO-SEND TO MATCH BAUDRATE
  302.       MOV    A,L        ;GET LEAST SIGNIFICANT BAUDRATE BYTE
  303.       STA    LSBD+1        ;STORE IN NITMOD
  304.       MOV    A,H        ;GET MOST SIGNIFICANT BAUDRATE BYTE
  305.       STA    MSBD+1        ;STORE IN NITMOD
  306.       JMP    NITMOD        ;REINITIALIZE TO NEW BAUDRATE, THEN DONE
  307. ;
  308. ;
  309. NEWBAUD:  CPI    1
  310.       JZ    OK300
  311.       CPI    2
  312.       JZ    OK450
  313.       CPI    5
  314.       JZ    OK1200
  315.       CPI    6
  316.       JZ    OK2400
  317.       CPI    7
  318.       JZ    OK4800
  319.       CPI    8
  320.       JZ    OK9600
  321.       CPI    9
  322.       JZ    OK19200
  323.       RET
  324. ;
  325. ;
  326. ; TABLE OF BAUDRATE PARAMETERS
  327. ;
  328. BD300:      DW    0683H        ;  300 BAUD
  329. BD450:      DW    0457H        ;  450 BAUD
  330. BD600:      DW    0341H        ;  600 BAUD
  331. BD1200:      DW    01A1H        ; 1200 BAUD
  332. BD2400:      DW    00D0H        ; 2400 BAUD
  333. BD4800:      DW    0068H        ; 4800 BAUD
  334. BD9600:      DW    0034H        ; 9600 BAUD
  335. BD19200:  DW    001AH        ;19200 BAUD
  336. ;
  337. BAUDBUF:  DB    10,0
  338.       DS    10
  339. ;
  340. EOSMSG:      DB    ESC,'J',0,0,0,'$'              
  341. CLSMSG:      DB    ESC,'E',0,0,0,'$'
  342. ;           (END OF NITMOD AND SETUP ROUTINES)
  343. ;
  344. ; NOTE:  MUST TERMINATE PRIOR TO 0B00H (with Smartmodem)
  345. ;                 0D00H (without Smartmodem)
  346. ;
  347.       END
  348. ;