home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / mex / mxh-na13.aqm / MXH-NA13.ASM
Assembly Source File  |  1986-11-02  |  13KB  |  445 lines

  1. ; MXH-NA13.ASM -- MEXPLUS overlay for North Star Advantage Ver 1.3 - 86/01/14
  2.  
  3. VER:        EQU    13        ;Version number
  4.  
  5. ; NOTE:  This overlay is designed for use with MEXPLUS (version 1.2 or
  6. ;        greater) but it is fully compatible with the public domain
  7. ;        versions of MEX (version 1.1x)
  8.  
  9. ; Edit this file for your preferences then follow the "TO USE:" example
  10. ; shown below.
  11.  
  12. ; Use the MEX "SET" command to change the baudrate when desired.  Use
  13. ; "SET" to see the current baud rate and "SET xxxx" to set to xxxx.  It
  14. ; starts out at the value specified for the MSPEED equate.  To change
  15. ; the default baud rate, use "SET" to set the desired rate, then "CLONE"
  16. ; MEX.
  17.  
  18.  
  19. ;    TO USE: First edit this file filling in answers for your own
  20. ;        equipment.  Then assemble with ASM.COM or equivalent
  21. ;        assembler.  
  22.  
  23. ;    For MEX V 1.1x, use MLOAD (version 2.3 or greater)to
  24. ;        overlay the the results of this program to the
  25. ;        original .COM file:
  26. ;
  27. ;        A>MLOAD MEX.COM=MEXxxx.COM,[MXO-SMxx,]MXO-NAxx
  28. ;            where MXO-SMxx is an optional modem overlay.
  29.  
  30. ;    For MEXPLUS V 1.2 or greater, use MLOAD to create an overlay
  31. ;        file (.OVR) and boot MEXPLUS and use its built in 
  32. ;        LOAD command to install the overlay:
  33.  
  34. ;        A>MLOAD MXH-NA13.OVR=MXH.NA13.HEX
  35.  
  36. ;        Load MEXPLUS and type:
  37.  
  38. ;        [MEX] A0>>LOAD MXH-NA13.OVR
  39.  
  40. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  41.  
  42. ; 86/01/14 - Version 1.3 - upgraded to MEXPLUS
  43. ;            compatibility - MEXified labels    - Ian Cottrell
  44. ;                          Sysop
  45. ;                          Info Centre BBS
  46. ;                          Ottawa, Ontario
  47. ;                          Canada
  48. ;                          (613)-990-9774
  49.  
  50. ; 85/09/30 - Version 1.2 - corrected minor bugs    - Ian Cottrell
  51. ; 85/03/27 - Version 1.1 - added ability to change
  52. ;            default baud rate through "CLONE"
  53. ;         command                       - Ian Cottrell
  54. ; 84/11/26 - Version 1.0 -  MEXified overlay    - Ian Cottrell
  55. ; 84/07/26 - Added default baud rate and slot # - Ian Cottrell
  56. ; 83/11/11 - Renamed to M7NA-1.ASM, no changes    - Irv Hoff
  57. ; 83/09/14 - Changed M712HZ.ASM TO M712AF.ASM    - Robert Lehman
  58. ; 83/07/27 - Renamed to work with MDM712    - Irv Hoff
  59. ; 83/02/17 - 1st version of M712HZ.ASM        - Irv Hoff
  60.  
  61. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  62.  
  63. YES:    EQU    0FFH
  64. NO:    EQU    0
  65.  
  66. MEXP:    EQU    YES        ; Set to NO for MEX version 1.1x
  67.  
  68. SLOT:    EQU    6        ; Slot used for modem port
  69. PORT:    EQU    (6-SLOT)*16    ; Addr for selected slot
  70. BPORT:    EQU    PORT+8          ; Baud rate port for Advantage
  71. DPORT:    EQU    PORT        ; Data port for Advantage
  72. SPORT:    EQU    PORT+1        ; Status port for Advantage
  73. CPORT:    EQU    PORT+1        ; Control port for Advantage
  74. DAV:    EQU    2        ; Data available
  75. TBMT:    EQU    1        ; Transmit buffer empty
  76.  
  77. ; MEX Service Processor
  78.  
  79. MEX:    EQU    0D00H        ; Address of the service processor
  80. INMDM:    EQU    255        ; Get char from port to A, CY=no more in 100 ms
  81. TIMER:    EQU    254        ; Delay 100ms * reg B
  82. TMDINP:    EQU    253        ; B=# secs to wait for char, cy=no char
  83. CHEKCC:    EQU    252        ; Check for ^C from KBD, Z=present
  84. SNDRDY:    EQU    251        ; Test for modem-send ready
  85. RCVRDY:    EQU    250        ; Test for modem-receive ready
  86. SNDCHR:    EQU    249        ; Send a character to the modem (after sndrdy)
  87. RCVCHR:    EQU    248        ; Recv a char from modem (after rcvrdy)
  88. LOOKUP:    EQU    247        ; Table search: see CMDTBL comments for info
  89. PARSFN:    EQU    246        ; Parse filename from input stream
  90. BDPARS:    EQU    245        ; Parse baud-rate from input stream
  91. SBLANK:    EQU    244        ; Scan input stream to next non-blank
  92. EVALA:    EQU    243        ; Evaluate numeric from input stream
  93. LKAHED:    EQU    242        ; Get nxt char w/o removing from input
  94. GNC:    EQU    241        ; Get char from input, cy=1 if none
  95. ILP:    EQU    240        ; Inline print
  96. DECOUT:    EQU    239        ; Decimal output
  97. PRBAUD:    EQU    238        ; Print baud rate
  98.  
  99. CONOUT:    EQU    2        ; Simulated BDOS function 2: console char out
  100. PRINT:    EQU    9        ; Simulated BDOS function 9: print string
  101. INBUF:    EQU    10        ; Input buffer, same structure as BDOS 10
  102.  
  103. BELL:    EQU    07H        ; Bell
  104. CR:    EQU    0DH        ; Carriage return
  105. ESC:    EQU    1BH        ; Escape
  106. LF:    EQU    0AH        ; Linefeed
  107. RON:    EQU    01H        ; Reverse video on
  108. ROFF:    EQU    02H        ; Reverse video off
  109.  
  110. ; The Advantage uses the 8251
  111.  
  112.  
  113.         ORG    100H
  114.  
  115.     DB    0C3H        ; Show that we're an 8080/Z-80 overlay
  116.     DS    2        ; For rest of the "JMP   START" instruction
  117.  
  118.     DS    2        ; Unused by MEX
  119.  
  120.     DB    'P'        ; T=touch, P=pulse (Smartmodem-only)    105H
  121. CLOCK:    DB    40        ; Clock speed in MHz x10, 25.5 MHz max.    106H
  122.                 ;   20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  123. MSPEED:    DB    5        ; 0=110 1=300 2=450 3=600 4=710 5=1200    107H
  124.                 ;   6=2400 7=4800 8=9600 9=19200 default
  125. BYTDLY:    DB    5        ; 0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  126.                 ;   default time to send char in terinal
  127.                 ;     mode file transfer for slow BBS.
  128. CRDLY:    DB    5        ; 0=0 delay 1=100 ms 5=500 ms-9=900 ms  109H
  129.                 ;   default time for extra wait after CRLF
  130.                 ;     in terminal mode file transfer
  131. COLUMS:    DB    5        ; Number of DIR columns shown        10AH
  132. SETFLG:    DB    YES        ; Yes=user-added Setup routine        10BH
  133. SCRTST:    DB    YES        ; Cursor control routine         10CH
  134.     DS    1        ; Unused by MEX                10DH
  135. BAKFLG:    DB    YES        ; Yes=change any file same name to .BAK    10EH
  136. CRCDFL:    DB    YES        ; Yes=default to CRC checking        10FH
  137. TOGCRC:    DB    YES        ; Yes=allow toggling of CRC to Checksum    110H
  138. CVTBS:    DB    NO        ; Yes=convert backspace to rub        111H
  139. TOGLBK:    DB    YES        ; Yes=allow toggling of bksp to rub    112H
  140. ADDLF:    DB    NO        ; No=no LF after CR to send file in    113H
  141.                 ;   terminal mode (added by remote echo)
  142. TOGLF:    DB    YES        ; Yes=allow toggling of LF after CR    114H
  143.     DB    YES        ; Yes=allow transmission of logon    115H
  144.                 ;   write logon sequence at location LOGON
  145. SAVCCP:    DB    YES        ; Yes=do not overwrite CCP        116H
  146.     DB    NO        ; Yes=local command if EXTCHR precedes    117H
  147.                 ;   no=external command if EXTCHR precedes
  148.     DB    YES        ; Yes=allow toggling of LOCONEXTCHR    118H
  149. LSTST:    DB    YES        ; Yes=printer available on printer port    119H
  150. XOFTST:    DB    YES        ; Yes=checks for XOFF from remote while    11AH
  151.                 ;   sending a file in terminal mode
  152. XONWT:    DB    NO        ; Yes=wait for XON after CR while    11BH
  153.                 ;   sending a file in terminal mode
  154. TOGF:    DB    YES        ; Yes=allow toggling of XOFF checking    11CH
  155. IGNCTL:    DB    YES        ; Tes=CTL-chars above ^M not displayed    11DH
  156. EXTRA1:    DB    0        ; For future expansion            11EH
  157. EXITCHR:DB    'E'        ; E = Exit to main menu            11FH
  158. BRKCHR:    DB    '@'        ; @ = Send a 300 ms. break tone        120H
  159. NOCONN:    DB    'N'        ; N = Disconnect from the phone line    121H
  160. LOGCHR:    DB    'L'        ; L = Send logon            122H
  161. LSTCHR:    DB    'P'        ; P = Toggle printer            123H
  162. UNSAVE:    DB    'R'        ; R = Close input text buffer        124H
  163. TRANCHR:DB    'T'        ; T = Transmit file to remote        125H
  164. SAVECHR:DB    'Y'        ; Y = Open input text buffer        125H
  165. EXTCHR:    DB    '^'        ; ^ = Send next character        126H
  166.  
  167.  
  168.     DS    2        ;                    128H
  169.  
  170. INCTL1:    IN    CPORT        ; In modem control port            12AH
  171.     RET
  172.  
  173.     DS    7
  174.  
  175. OTDATA:    OUT    DPORT        ; Out modem data port            134H
  176.     RET
  177.  
  178.     DS    7
  179.  
  180. INPORT:    IN    DPORT        ; In modem data port            13EH
  181.     RET
  182.  
  183.     DS    7
  184.  
  185. MASKR:    ANI    DAV        ; Bit to test for receive ready      148H
  186.     RET
  187.  
  188. TESTR:    CPI    DAV        ; Value of rcv. bit when ready       14BH
  189.     RET
  190.  
  191. MASKS:    ANI    TBMT        ; Bit to test for send ready         14EH
  192.     RET
  193.  
  194. TESTS:    CPI    TBMT        ; Value of send bit when ready       151H
  195.     RET
  196.  
  197. DCDTST:    JMP    DCDVEC        ; Data carrier detect            154H
  198. RNGDET:    JMP    RNGVEC        ; Ring detect                157H
  199.  
  200.     DB    0,0,0,0,0    ; Reserved space, assumed 0        15AH
  201.  
  202. SMDISC:    DS    3        ; Smart modem disconnect (not here)    15FH
  203. DIALV:    DS    3        ; DIALV:  not done here (maybe MXM-xx)    162H
  204.  
  205. DISCV:    JMP    DISCON        ; Disconnect modem (with DTR)        165H
  206. GOODBV:    JMP    GOODBY        ; Call just before exit to CP/M        168H
  207. INMODV:    JMP    NITMOD        ; Initialize port            16BH
  208. NEWBDV:    JMP    NEWBD        ; Set new baud rate            16EH
  209.  
  210.     RET              ; NOPARV                171H
  211.     NOP
  212.     NOP
  213.  
  214.     RET              ; PARITV                174H
  215.     NOP
  216.     NOP
  217.  
  218. SETUPV:    JMP    SETCMD        ;                    177H
  219.  
  220.     DS    3        ; Not used by MEX            17AH
  221.  
  222. VERSNV:    JMP    SYSVER        ;                    17DH
  223. BREAKV:    JMP    SBREAK        ;                    180H
  224.  
  225. ; Do not change the following line.
  226.  
  227.     DS    18        ;                    183H
  228.  
  229. ; Routines to clear screen and clear to end of screen
  230. ; If using these routines, set SCRTST to YES at 10AH (above)
  231.  
  232. CLREOS:    LXI    D,EOSMSG    ;                    195H
  233.     MVI     C,PRINT
  234.     CALL    MEX
  235.     RET
  236.  
  237. CLS:    LXI    D,CLSMSG    ;                    19EH
  238.     JMP    CLREOS+3
  239.  
  240. ; End of fixed area ... from here to 1FFH is reserved
  241.  
  242.     ORG    200H        ; New boundary for MEXPLUS
  243.  
  244. SYSVER:    MVI    C,ILP
  245.     CALL    MEX
  246.  
  247.      IF    MEXP
  248.     DB    'MEXPLUS '
  249.      ENDIF            ;MEXP
  250.  
  251.     DB    'Version '
  252.     DB    VER/10+'0'
  253.     DB    '.'
  254.     DB    VER MOD 10+'0'
  255.     DB    ' for North Star Advantage - Slot ',SLOT+30H
  256.     DB    CR,LF
  257.     DB    'Default Baud Rate:  ',RON,0
  258.     LDA    MSPEED
  259.     MVI    C,PRBAUD
  260.     CALL    MEX
  261.     MVI    C,ILP
  262.     CALL    MEX
  263.     DB    ROFF
  264.     DB    CR,LF,0
  265.     RET
  266.  
  267. ; Routine called just prior to exit to CP/M
  268.  
  269. GOODBY:    RET
  270.  
  271. ; Return data carrier detect (DCD) status
  272. ;    0   = no carrier
  273. ;    255 = carrier present
  274. ;    254 = we don't know (DCD not supported)
  275.  
  276. DCDVEC:    MVI    A,254        ; Return 'we don't know'
  277.     RET
  278.  
  279. ; Return ring indicator status
  280. ;    0   = not ringing
  281. ;    255 = ring detected
  282. ;    254 = we don't know (RI not supported)
  283.  
  284. RNGVEC:    MVI    A,254        ; Return 'we don't know'
  285.     RET
  286.  
  287. ; This routine allows a 300 ms. break tone to be send to reset some
  288. ; time-share computers.
  289.  
  290. SBREAK: MVI    A,08H        ;send a break tone for 300 ms.
  291.     JMP    DISCON1
  292.  
  293. ; This routine sends a 300 ms. break tone and sets DTR low for the same
  294. ; length of time to disconnect some modems such as the Bell 212a, etc.
  295.  
  296. DISCON:    MVI    A,0AH        ;set break, DTR low
  297.  
  298. DISCON1:OUT    CPORT        ;put command register out of mode
  299.     IN    SPORT        ;make sure it is now clear
  300.     IN    SPORT        ;try once more
  301.     MVI    B,3        ;delay for 300 ms.
  302.     MVI    C,TIMER
  303.     CALL    MEX
  304.     MVI    A,37H        ;reset RTS, flags, DTR low, enable R/T
  305.     OUT    CPORT        ;send to command register
  306.     IN    DPORT        ;clear any incoming chars.
  307.     IN    DPORT        ;try once more
  308.     XRA    A        ;clear the 'A' reg.
  309.     RET
  310.  
  311. ; The following are used in setting up the modem port.
  312. ; Since N/S Bios only initializes the first 3 ports, the
  313. ; 8251 for the selected slot is initialized.
  314.  
  315. NITMOD:    LXI    H,NITSTR    ; Point to initialization string
  316.     LXI    B,5*256+PORT+1    ; B=count, C=UART cmd port
  317.     DB    0EDH,0B3H    ; Z-80 OTIR instruction
  318.     LDA    MSPEED        ; Get MSPEED value
  319.     CALL    SBAUD        ; Go set baud rate
  320.     JZ    NITERR        ; If zero, error
  321.     RET            ; No error, normal return
  322.  
  323. NITERR:    MVI    C,ILP
  324.     CALL    MEX
  325.     DB    'Default baud rate not supported',CR,LF
  326.     DB    'Now set to:  '
  327.     DB    RON,'1200 baud.',ROFF,0
  328.     MVI    A,5        ; Set baud rate
  329.     STA    MSPEED        ;   to 1200
  330.     CALL    SBAUD        ;     baud
  331.     RET
  332.  
  333. NITSTR:    DB    80H,80H        ; Fillers to ensure known state
  334.     DB    040H        ; Internal reset
  335.     DB    04EH        ; 1 stop bit, 8 data bits, no parity
  336.                 ; 16x clock
  337.     DB    037H        ; TX on, RX on, DTR low, RTS low
  338.                 ; Reset errors
  339.  
  340. ; The following changes the baud rate with the set command.
  341.  
  342. SETCMD:    MVI    C,SBLANK    ;any arguments?
  343.     CALL    MEX
  344.     JC    TELL        ;if not, go display baud rate
  345.     LXI    D,CMDTBL
  346.     MVI    C,LOOKUP
  347.     CALL    MEX        ;parse agrument
  348.     PUSH    H        ;save any arg addrs on stack
  349.     RNC            ;if we have one, return to it
  350.     POP    H        ;oops, input not found in table
  351.     MVI    C,ILP
  352.     CALL    MEX        ;tell user input not valid
  353. SETERR:    DB    '++ SET command error ++',CR,LF,BELL,0
  354.     RET
  355.  
  356. CMDTBL:    DB    '30','0'+80H
  357.     DW    OK300    
  358.     DB    '60','0'+80H
  359.     DW    OK600
  360.     DB    '120','0'+80H
  361.     DW    OK1200
  362.     DB    '240','0'+80H
  363.     DW    OK2400
  364.     DB    '480','0'+80H
  365.     DW    OK4800
  366.     DB    '960','0'+80H
  367.     DW    OK9600
  368.     DB    '1920','0'+80H
  369.     DW    OK19200
  370.     DB    0
  371.  
  372. TELL:    MVI    C,ILP
  373.     CALL    MEX
  374.     DB    CR,LF,'Baud rate is now: '
  375.     DB    RON,0
  376.     LDA    MSPEED
  377.     MVI    C,PRBAUD
  378.     CALL    MEX
  379.     MVI    C,ILP
  380.     CALL    MEX
  381.     DB    ROFF,0
  382.     RET
  383.  
  384. OK300:    MVI    A,1
  385.     JMP    LOADBD
  386.  
  387. OK600:    MVI    A,3
  388.     JMP    LOADBD
  389.  
  390. OK1200:    MVI    A,5
  391.     JMP    LOADBD
  392.  
  393. OK2400:    MVI    A,6
  394.     JMP    LOADBD
  395.  
  396. OK4800:    MVI    A,7
  397.     JMP    LOADBD
  398.  
  399. OK9600:    MVI    A,8
  400.     JMP    LOADBD
  401.  
  402. OK19200:MVI    A,9
  403.  
  404. LOADBD:    STA    MSPEED        ; Set xfer time
  405.     CALL    SBAUD        ; Go set baud rate
  406.     JZ    SETERR        ; If zero, error
  407.     CALL    TELL        ; No error, so tell us new rate
  408.     RET
  409.     
  410. SBAUD:    LXI    H,BRTBL        ; Calculate required value
  411.     MVI    D,0        ;   to send to baud
  412.     MOV    E,A        ;     rate register
  413.     DAD    D
  414.     MOV    A,M        ; Reg A now contain correct value
  415.     ORA    A        ; Zero?
  416.     RZ            ; If so, error - return with Z set
  417.     OUT    BPORT        ; Else, send to baud rate port
  418.     IN    DPORT        ; Clear any incoming chars.
  419.     IN    DPORT        ; Try once more
  420.     RET
  421.  
  422. NEWBD:    CALL    SBAUD        ; Go set baud rate
  423.     JZ    SETERR        ; If Z, error
  424.     RET            ; No error, normal return
  425.  
  426. ; Table of baudrate parameters for N/S SIO board 
  427.  
  428. BRTBL:    EQU    $
  429.  
  430. BD110:    DB    00H        ;110 baud not supported
  431. BD300:    DB    40H
  432. BD450:    DB    00H        ;450 baud not supported
  433. BD600:    DB    60H
  434. BD710:    DB    00H        ;710 baud not supported
  435. BD1200:    DB    70H
  436. BD2400:    DB    78H
  437. BD4800:    DB    7CH
  438. BD9600:    DB    7EH
  439. BD19200:DB    7FH
  440.  
  441. EOSMSG:      DB    15,0,0,0,0,'$'    ;clear to eos for N/S Advantage
  442. CLSMSG:      DB    30,15,0,0,0,'$'    ;clear screen (home and clear eos)
  443.  
  444.       END
  445.