home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / mex / mxo-na1.aqm / MXO-NA1.ASM
Assembly Source File  |  1985-08-05  |  13KB  |  467 lines

  1. ; MXO-NA1.ASM -- North Star Advantage overlay for MEX - 84/11/26
  2. ;
  3. ; Edit this file for your preferences then follow the "TO USE:" example
  4. ; shown below.
  5. ;
  6. ; Use the MEX "SET" command to change the baudrate when desired.  Use
  7. ; "SET" to see the current baud rate and "SET xxxx" to set to xxxx.  It
  8. ; starts out at the value selected from the "DBDRTx" equates.
  9. ;
  10. ;
  11. ;    TO USE: First edit this file filling in answers for your own
  12. ;        equipment.  Then assemble with ASM.COM or equivalent
  13. ;        assembler.  Then use MLOAD to overlay the the results
  14. ;        of this program to the original .COM file:
  15. ;
  16. ;        A>MLOAD MEX.COM=MEX112.COM,MXO-NA1.ASM
  17. ;
  18. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  19. ;
  20. ; 11/26/84 - MEXified overlay                   - Ian Cottrell
  21. ; 07/26/84 - Added default baud rate and slot # - Ian Cottrell
  22. ; 11/11/83 - Renamed to M7NA-1.ASM, no changes    - Irv Hoff
  23. ; 09/14/83 - Changed M712HZ.ASM TO M712AF.ASM    - Robert Lehman
  24. ; 07/27/83 - Renamed to work with MDM712    - Irv Hoff
  25. ; 02/17/83 - 1st version of M712HZ.ASM        - Irv Hoff
  26. ;
  27. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  28. ;
  29. ; MEX Service Processor
  30. ;
  31. MEX    EQU    0D00H        ;address of the service processor
  32. INMDM    EQU    255        ;get char from port to A, CY=no more in 100 ms
  33. TIMER    EQU    254        ;delay 100ms * reg B
  34. TMDINP    EQU    253        ;B=# secs to wait for char, cy=no char
  35. CHEKCC    EQU    252        ;check for ^C from KBD, Z=present
  36. SNDRDY    EQU    251        ;test for modem-send ready
  37. RCVRDY    EQU    250        ;test for modem-receive ready
  38. SNDCHR    EQU    249        ;send a character to the modem (after sndrdy)
  39. RCVCHR    EQU    248        ;recv a char from modem (after rcvrdy)
  40. LOOKUP    EQU    247        ;table search: see CMDTBL comments for info
  41. PARSFN    EQU    246        ;parse filename from input stream
  42. BDPARS    EQU    245        ;parse baud-rate from input stream
  43. SBLANK    EQU    244        ;scan input stream to next non-blank
  44. EVALA    EQU    243        ;evaluate numeric from input stream
  45. LKAHED    EQU    242        ;get nxt char w/o removing from input
  46. GNC    EQU    241        ;get char from input, cy=1 if none
  47. ILP    EQU    240        ;inline print
  48. DECOUT    EQU    239        ;decimal output
  49. PRBAUD    EQU    238        ;print baud rate
  50. ;
  51. CONOUT    EQU    2        ;simulated BDOS function 2: console char out
  52. PRINT    EQU    9        ;simulated BDOS function 9: print string
  53. INBUF    EQU    10        ;input buffer, same structure as BDOS 10
  54. ;
  55. BELL:        EQU    07H        ;bell
  56. CR:        EQU    0DH        ;carriage return
  57. ESC:        EQU    1BH        ;escape
  58. LF:        EQU    0AH        ;linefeed
  59. RON:        EQU    01H        ;reverse video on
  60. ROFF:        EQU    02H        ;reverse video off
  61. ;
  62. YES:        EQU    0FFH
  63. NO:        EQU    0
  64. ;
  65. ;
  66. SLOT:        EQU    6        ;slot used for modem port
  67. PORT:        EQU    (6-SLOT)*16    ;addr for selected slot
  68. BAUDRP:        EQU    PORT+8          ;baud rate port for Advantage
  69. MODDATP:    EQU    PORT        ;data port for Advantage
  70. MODCTL1:    EQU    PORT+1        ;status port for Advantage
  71. MODRCVB:    EQU    2        ;bit to test for received data
  72. MODRCVR:    EQU    2        ;modem receive ready
  73. MODSNDB:    EQU    1        ;bit to test for ready to send
  74. MODSNDR:    EQU    1        ;modem send ready bit
  75. ;
  76.                     ;110 baud not supported
  77. DBDRT1:        EQU    NO        ;default to 300 baud
  78.                     ;450 baud not supported
  79. DBDRT3:        EQU    NO        ;default to 600 baud
  80.                     ;710 baud not supported
  81. DBDRT5:        EQU    NO        ;default to 1200 baud
  82. DBDRT6:        EQU    NO        ;default to 2400 baud
  83. DBDRT7:        EQU    YES        ;default to 4800 baud
  84. DBDRT8:        EQU    NO        ;default to 9600 baud
  85. DBDRT9:        EQU    NO        ;default to 19,200 baud
  86. ;
  87.         IF    DBDRT1
  88. DEFBD:        EQU    40H        ;baud rate register value for 300
  89. DEFMSPD:    EQU    1        ;MSPEED value for 300
  90.         ENDIF            ;DBDRT1
  91. ;
  92.         IF    DBDRT3
  93. DEFBD:        EQU    60H        ;baud rate register value for 600
  94. DEFMSPD:    EQU    3        ;MSPEED value for 600
  95.         ENDIF            ;DBDRT3
  96. ;
  97.         IF    DBDRT5
  98. DEFBD:        EQU    70H        ;baud rate register value for 1200
  99. DEFMSPD:    EQU    5        ;MSPEED value for 1200
  100.         ENDIF            ;DBDRT5
  101. ;
  102.         IF    DBDRT6
  103. DEFBD:        EQU    78H        ;baud rate register value for 2400
  104. DEFMSPD:    EQU    6        ;MSPEED value for 2400
  105.         ENDIF            ;DBDRT6
  106. ;
  107.         IF    DBDRT7
  108. DEFBD:        EQU    7CH        ;baud rate register value for 4800
  109. DEFMSPD:    EQU    7        ;MSPEED value for 4800
  110.         ENDIF            ;DBDRT7
  111. ;
  112.         IF    DBDRT8
  113. DEFBD:        EQU    7EH        ;baud rate register value for 9600
  114. DEFMSPD:    EQU    8        ;MSPEED value for 9600
  115.         ENDIF            ;DBDRT8
  116. ;
  117.         IF    DBDRT9
  118. DEFBD:        EQU    7FH        ;baud rate register value for 19,200
  119. DEFMSPD:    EQU    9        ;MSPEED value for 19,200
  120.         ENDIF            ;DBDRT9
  121. ;
  122. SMODEM        EQU    YES        ;if using Smartmodem
  123. ;
  124. ;
  125. ;
  126. ; The Advantage uses the 8251
  127. ;
  128. ;
  129.         ORG    100H
  130. ;
  131.         DS    3    ;(for  "JMP   START" instruction)
  132. ;
  133. PMMIMODEM:    DB    NO    ;yes=PMMI S-100 Modem            103H
  134.  
  135.         IF    SMODEM
  136. SMARTMODEM:    DB    YES    ;yes=HAYES Smartmodem, no=non-Hayes    104H
  137.         ENDIF        ;SMODEM
  138.  
  139.         IF    NOT SMODEM
  140. SMARTMODEM:    DB    NO    ;yes=Hayes Smartmodem, no=non-Hayes    104H
  141.         ENDIF        ;SMODEM
  142.  
  143. TOUCHPULSE:    DB    'P'    ;T=touch, P=pulse (Smartmodem-only)    105H
  144. CLOCK:        DB    40    ;clock speed in MHz x10, 25.5 MHz max.    106H
  145.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  146. MSPEED:        DB    5    ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  147.                 ;6=2400 7=4800 8=9600 9=19200 default
  148. BYTDLY:        DB    5    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  149.                 ;default time to send character in ter-
  150.                 ;minal mode file transfer for slow BBS.
  151. CRDLY:        DB    5    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  152.                 ;default time for extra wait after CRLF
  153.                 ;in terminal mode file transfer
  154. NOOFCOL:    DB    5    ;number of DIR columns shown        10AH
  155. SETUPTST:    DB    YES    ;yes=user-added Setup routine        10BH
  156. SCRNTEST:    DB    YES    ;Cursor control routine         10CH
  157. ACKNAK:        DB    YES    ;yes=resend a record after any non-ACK    10DH
  158.                 ;no=resend a record after a valid NAK
  159. BAKUPBYTE:    DB    YES    ;yes=change any file same name to .BAK    10EH
  160. CRCDFLT:    DB    YES    ;yes=default to CRC checking        10FH
  161. TOGGLECRC:    DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  162. CONVBKSP:    DB    NO    ;yes=convert backspace to rub        111H
  163. TOGGLEBK:    DB    YES    ;yes=allow toggling of bksp to rub    112H
  164. ADDLF:        DB    NO    ;no=no LF after CR to send file in    113H
  165.                 ;terminal mode (added by remote echo)
  166. TOGGLELF:    DB    YES    ;yes=allow toggling of LF after CR    114H
  167. TRANLOGON:    DB    YES    ;yes=allow transmission of logon    115H
  168.                 ;write logon sequence at location LOGON
  169. SAVCCP:        DB    YES    ;yes=do not overwrite CCP        116H
  170. LOCONEXTCHR:    DB    NO    ;yes=local command if EXTCHR precedes    117H
  171.                 ;no=external command if EXTCHR precedes
  172. TOGGLELOC:    DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  173. LSTTST:        DB    YES    ;yes=printer available on printer port    119H
  174. XOFFTST:    DB    YES    ;yes=checks for XOFF from remote while    11AH
  175.                 ;sending a file in terminal mode
  176. XONWAIT:    DB    NO    ;yes=wait for XON after CR while    11BH
  177.                 ;sending a file in terminal mode
  178. TOGXOFF:    DB    YES    ;yes=allow toggling of XOFF checking    11CH
  179. IGNORCTL:    DB    YES    ;yes=CTL-chars above ^M not displayed    11DH
  180. EXTRA1:        DB    0    ;for future expansion            11EH
  181. EXTRA2:        DB    0    ;for future expansion            11FH
  182. BRKCHR:        DB    '@'-40H    ;^@ = Send a 300 ms. break tone        120H
  183. NOCONNCT:    DB    'N'-40H    ;^N = Disconnect from the phone line    121H
  184. LOGCHR:        DB    'L'-40H    ;^L = Send logon            122H
  185. LSTCHR:        DB    'P'-40H    ;^P = Toggle printer            123H
  186. UNSAVE:        DB    'R'-40H    ;^R = Close input text buffer        124H
  187. TRANCHR:    DB    'T'-40H ;^T = Transmit file to remote        125H
  188. SAVECHR:    DB    'Y'-40H    ;^Y = Open input text buffer        125H
  189. EXTCHR:        DB    '^'-40H    ;^^ = Send next character        126H
  190. ;
  191. ;
  192.         DS    2        ;                128H
  193. ;
  194. IN$MODCTL1:    IN    MODCTL1     ;in modem control port        12AH
  195.         RET
  196.         DS    7
  197. OUT$MODDATP:    OUT    MODDATP     ;out modem data port        134H
  198.         RET
  199.         DS    7
  200. IN$MODDATP:    IN    MODDATP     ;in modem data port        13EH
  201.         RET
  202.         DS    7
  203. ANI$MODRCVB:    ANI    MODRCVB     ;bit to test for receive ready  148H
  204.         RET
  205. ;
  206. CPI$MODRCVR:    CPI    MODRCVR     ;value of rcv. bit when ready   14BH
  207.         RET
  208. ;
  209. ANI$MODSNDB:    ANI    MODSNDB     ;bit to test for send ready     14EH
  210.         RET
  211. ;
  212. CPI$MODSNDR:    CPI    MODSNDR     ;value of send bit when ready   151H
  213.         RET
  214.         DS    12
  215. ;
  216.         DS    2        ;not used by MEX        160H
  217.         DS    6        ;                162H
  218. JMP$GOODBYE:    JMP    GOODBYE        ;                168H
  219. JMP$INITMOD:    JMP    INITMOD        ;go to user written routine    16BH
  220. JMP$NEWBAUD:    JMP    NEWBAUD        ;change baud rate        16EH
  221.         RET              ;(by-passes PMMI routine)    171H
  222.         NOP
  223.         NOP
  224.         RET              ;(by-passes PMMI routine)    174H
  225.         NOP
  226.         NOP
  227. JMP$SETUPR:    JMP    SETUPR        ;                177H
  228.         DS    3        ;not used by MEX        17AH
  229. JMP$SYSVER:    JMP    SYSVER        ;                17DH
  230. JMP$BREAK:    JMP    SENDBRK        ;                180H
  231. ;
  232. ;
  233. ; Do not change the following six lines.
  234. ;
  235. JMP$ILPRT:    DS    3        ;                183H
  236. JMP$INBUF    DS    3        ;                186H
  237. JMP$INLNCOMP:    DS    3        ;                189H
  238. JMP$INMODEM    DS    3        ;                18CH
  239. JMP$NXTSCRN:    DS    3        ;                18FH
  240. JMP$TIMER:    DS    3        ;                192H
  241. ;
  242. ;
  243. CLREOS:        LXI    D,EOSMSG
  244.         MVI     C,PRINT
  245.         CALL    MEX
  246.         RET
  247. ;
  248. CLRSCRN:    LXI    D,CLSMSG
  249.         JMP    CLREOS+3
  250. ;
  251. ;
  252. SYSVER:        MVI    C,ILP
  253.         CALL    MEX
  254.         DB    'Version for North Star Advantage - Slot ',SLOT+30H
  255.         DB    CR,LF
  256.         IF SMODEM
  257.         DB    'with Hayes Smartmodem'
  258.         DB    CR,LF
  259.         ENDIF
  260.         DB    'Default Baud Rate:  '
  261.         IF    DBDRT1
  262.         DB    RON,'300',ROFF
  263.         ENDIF
  264.         IF    DBDRT3
  265.         DB    RON,'600',ROFF
  266.         ENDIF
  267.         IF    DBDRT5
  268.         DB    RON,'1200',ROFF
  269.         ENDIF
  270.         IF    DBDRT6
  271.         DB    RON,'2400',ROFF
  272.         ENDIF
  273.         IF    DBDRT7
  274.         DB    RON,'4800',ROFF
  275.         ENDIF
  276.         IF    DBDRT8
  277.         DB    RON,'9600',ROFF
  278.         ENDIF
  279.         DB    ' baud'
  280.         DB    CR,LF,0
  281.         RET
  282. ;.....
  283. ;
  284. ;
  285. ;-----------------------------------------------------------------------
  286. ;
  287. ; NOTE:  You can change the SYSVER message to be longer or shorter.  The
  288. ;     end of your last routine should terminate by 0400H (601 bytes
  289. ;     available after start of SYSVER) if using the Hayes Smartmodem
  290. ;     or by address 0C00H (2659 bytes available) otherwise.
  291. ;
  292. ;-----------------------------------------------------------------------
  293. ; This routine allows a 300 ms. break tone to be send to reset some
  294. ; time-share computers.
  295. ;
  296. SENDBRK:  MVI    A,08H        ;send a break tone for 300 ms.
  297.       JMP    GOODBYE1
  298. ;.....
  299. ;
  300. ;
  301. ; This routine sends a 300 ms. break tone and sets DTR low for the same
  302. ; length of time to disconnect some modems such as the Bell 212a, etc.
  303. ;
  304. GOODBYE:  MVI    A,0AH        ;set break, DTR low
  305. ;
  306. GOODBYE1: OUT    MODCTL1        ;put command register out of mode
  307.       IN    MODCTL1        ;make sure it is now clear
  308.       IN    MODCTL1        ;try once more
  309.       MVI    B,3        ;delay for 300 ms.
  310.       MVI    C,TIMER
  311.       CALL    MEX
  312.       MVI    A,37H        ;reset RTS, flags, DTR low, enable R/T
  313.       OUT    MODCTL1        ;send to command register
  314.       IN    MODCTL1        ;clear any incoming chars.
  315.       IN    MODCTL1        ;try once more
  316.       XRA    A        ;clear the 'A' reg.
  317.       RET
  318. ;.....
  319. ;
  320. ;
  321. ; The following are used in setting up the modem port.
  322. ; Since N/S Bios only initializes the first 3 ports, the
  323. ; 8251 for the selected slot is initialized.
  324. ;
  325. INITMOD:  LXI    H,INITSTR    ;point to initialization string
  326.       LXI    B,5*256+PORT+1    ;B=count, C=UART cmd port
  327.       DB    0EDH,0B3H    ;Z-80 OTIR instruction
  328.       MVI    A,DEFBD        ;start at default baud rate
  329.       OUT    BAUDRP        ;send to baud rate port
  330.       MVI    A,DEFMSPD    ;default xfer time to default baud rate
  331.       STA    MSPEED
  332.       IN    MODCTL1        ;clear any incoming chars.
  333.       IN    MODCTL1        ;try once more
  334.       XRA    A        ;clear the 'A' reg.
  335.       RET
  336.  
  337. INITSTR:  DB    80H,80H        ;fillers to ensure known state
  338.       DB    040H        ;internal reset
  339.       DB    04EH        ;1 stop bit, 8 data bits, no parity
  340.                 ;16x clock
  341.       DB    037H        ;TX on, RX on, DTR low, RTS low
  342.                 ;reset errors
  343. ;.....
  344. ;
  345. ;
  346. ; The following changes the baud rate with the set command.
  347. ;
  348. SETUPR:      MVI    C,SBLANK    ;any arguments?
  349.       CALL    MEX
  350.       JC    TELL        ;if not, go display baud rate
  351.       LXI    D,CMDTBL
  352.       MVI    C,LOOKUP
  353.       CALL    MEX        ;parse agrument
  354.       PUSH    H        ;save any arg addrs on stack
  355.       RNC            ;if we have one, return to it
  356.       POP    H        ;oops, input not found in table
  357.       MVI    C,ILP
  358.       CALL    MEX        ;tell user input not valid
  359.       DB    '++ Incorrect Entry ++',CR,LF,BELL,0
  360.       RET
  361.  
  362. CMDTBL:      DB    '30','0'+80H
  363.       DW    OK300    
  364.       DB    '60','0'+80H
  365.       DW    OK600
  366.       DB    '120','0'+80H
  367.       DW    OK1200
  368.       DB    '240','0'+80H
  369.       DW    OK2400
  370.       DB    '480','0'+80H
  371.       DW    OK4800
  372.       DB    '960','0'+80H
  373.       DW    OK9600
  374.       DB    '1920','0'+80H
  375.       DW    OK19200
  376. ;
  377. TELL:      MVI    C,ILP
  378.       CALL    MEX
  379.       DB    CR,LF,'Baud rate is now: ',0
  380.       LDA    MSPEED
  381.       MVI    C,PRBAUD
  382.       CALL    MEX
  383.       RET
  384.  
  385. OK300:      MVI    A,1
  386.       LHLD    BD300
  387.       JMP    LOADBD
  388.  
  389. OK600:      MVI    A,3
  390.       LHLD    BD600
  391.       JMP    LOADBD
  392.  
  393. OK1200:      MVI    A,5
  394.       LHLD    BD1200
  395.       JMP    LOADBD
  396.  
  397. OK2400:      MVI    A,6
  398.       LHLD    BD2400
  399.       JMP    LOADBD
  400.  
  401. OK4800:      MVI    A,7
  402.       LHLD    BD4800
  403.       JMP    LOADBD
  404.  
  405. OK9600:      MVI    A,8
  406.       LHLD    BD9600
  407.       JMP    LOADBD
  408.  
  409. OK19200:  MVI    A,9
  410.       LHLD    BD19200
  411.     
  412. LOADBD:      STA    MSPEED        ;set xfer time
  413.       MOV    A,L        ;get least significant baud rate byte
  414.       OUT    BAUDRP        ;set baud rate
  415.       RET
  416.  
  417. NEWBAUD:  CPI    1
  418.       JZ    OK300
  419.       CPI    3
  420.       JZ    OK600
  421.       CPI    5
  422.       JZ    OK1200
  423.       CPI    6
  424.       JZ    OK2400
  425.       CPI    7
  426.       JZ    OK4800
  427.       CPI    8
  428.       JZ    OK9600
  429.       CPI    9
  430.       JZ    OK19200
  431.       RET
  432. ;.....
  433. ;
  434. ;
  435. ; Table of baudrate parameters for N/S SIO board 
  436. ;
  437. BD300:      DW    0040H
  438. BD600:      DW    0060H
  439. BD1200:      DW    0070H
  440. BD2400:      DW    0078H
  441. BD4800:      DW    007CH
  442. BD9600:      DW    007EH
  443. BD19200:  DW    007FH
  444.     ;
  445. BAUDBUF:  DB    10,0
  446.       DS    10
  447. ;
  448. ;-----------------------------------------------------------------------
  449. ;
  450. ; The following routine could be used to display selections of interest
  451. ; to owners of this computer.  If using the Hayes Smartmodem this is
  452. ; unavailable without a special change.
  453. ;
  454. SPCLMENU: RET
  455. ;
  456. EOSMSG:      DB    15,0,0,0,0,'$'    ;clear to eos for N/S Advantage
  457. CLSMSG:      DB    30,15,0,0,0,'$'    ;clear screen (home and clear eos)
  458.  
  459. ;-----------------------------------------------------------------------
  460. ;
  461. ;
  462. ; NOTE:  MUST TERMINATE PRIOR TO 0400H (with Smartmodem)
  463. ;                 0C00H (without Smartmodem)
  464. ;
  465.       END
  466. ;
  467.