home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol175 / 2651sys.a86 < prev    next >
Encoding:
Text File  |  1984-07-15  |  7.5 KB  |  439 lines

  1. ;        SYS.A86
  2. ;
  3. ;
  4. ;        For Godbout/Compupro Interfacer 3/4 
  5. ;
  6. ;Change the clock speed to suit your system.
  7. CLKRATE    EQU    8        ;clock speed in MHz, 8 MHz maximum
  8. ;
  9. ;Do not change the next three equates.
  10. SETUP    EQU    TRUE
  11. DISCON    EQU    TRUE
  12. CARDET    EQU    TRUE
  13. SCRNCLR    EQU    TRUE
  14. ;
  15. ;2651 equates
  16. ;
  17. MODRCVB    EQU    02H        ;bit to test for received data
  18. MODRCVR    EQU    MODRCVB        ;change to 0 if bit is 0 when
  19.                 ;data received
  20. MODSNDB    EQU    01H        ;bit to test for ready to send
  21. MODSNDR    EQU    MODSNDB        ;change to 0 if bit is 0 when
  22.                 ;ready to send
  23. ;
  24. MODDATP    EQU    010H        ;Serial data port
  25. MODCTLP    EQU    MODDATP+1    ;Serial status port
  26. MODMODP    EQU    MODDATP+2    ;Serial mode port
  27. MODCMDP    EQU    MODDATP+3    ;Serial command port
  28. MODUSRP    EQU    MODDATP+7    ;Serial bank port
  29. MODUSRN    EQU    6        ;Serial bank number
  30. ;
  31. ESCAPE    EQU    1BH
  32. NULL    EQU    0
  33. ;
  34. CLR1    EQU    ESCAPE        ;Lear Siegler clear from cursor to end of screen
  35. CLR2    EQU    'Y'
  36. CLR3    EQU    0
  37. CLR4    EQU    0
  38. ;
  39. SCLR1    EQU    ESCAPE        ;Lear Siegler clear/home
  40. SCLR2    EQU    '*'
  41. SCLR3    EQU    0
  42. SCLR4    EQU    0
  43. SCLR5    EQU    0
  44. SCLR6    EQU    0
  45. SCLR7    EQU    0
  46. ;
  47. CLREOS:
  48.     CALL    ILPRT
  49. ;
  50.     DB    CLR1,CLR2,CLR3,CLR4,0
  51.     RET
  52. ;
  53. CLRSCRN:
  54.     CALL    ILPRT
  55. ;
  56.     DB    SCLR1,SCLR2,SCLR3,SCLR4,SCLR5,SCLR6,SCLR7,0
  57.     RET
  58. ;
  59. SELECT:
  60.     PUSH    AX
  61.     MOV    AL,MODUSRN
  62.     OUT    MODUSRP,AL    ;Select USART
  63.     POP    AX
  64.     RET
  65. ;
  66. INMODCTLP:
  67.     CALL    SELECT
  68.     IN    AL,MODCTLP    ;in modem status port
  69.     RET
  70.     RB    OFFSET INMODCTLP-(offset $)+16  ;extra space
  71.  
  72. OUTMODDATP:
  73.     CALL    SELECT
  74.     OUT    MODDATP,AL    ;out modem data port
  75.     RET
  76.     RB    OFFSET OUTMODDATP-(offset $)+16 ;extra space
  77.  
  78. INMODDATP:
  79.     CALL    SELECT
  80.     IN    AL,MODDATP    ;in modem data port
  81.     RET
  82.     RB    OFFSET INMODDATP-(offset $)+16  ;extra space
  83.  
  84. ANIMODSNDB:
  85.     AND    AL,MODSNDB    ;bit to test for send ready
  86.     RET
  87.     RB    OFFSET ANIMODSNDB-(offset $)+16 ;extra space
  88.  
  89. CPIMODSNDR:
  90.     CMP    AL,MODSNDR    ;value of send bit when ready
  91.     RET
  92.     RB    OFFSET CPIMODSNDR-(offset $)+16 ;extra space
  93.  
  94. ANIMODRCVB:
  95.     AND    AL,MODRCVB    ;bit to test for receive ready
  96.     RET
  97.     RB    OFFSET ANIMODRCVB-(offset $)+16 ;extra space
  98.  
  99. CPIMODRCVR:
  100.     CMP    AL,MODRCVR    ;value of receive ready bit
  101.     RET
  102. ;
  103. ;This is where the message goes giving the system for
  104. ;which MODEM9 has been customized.
  105. ;
  106. SYSVER:
  107.     CALL    ILPRT
  108.     DB    'Set Up for: Godbout 816 System with Interfacer 3',CR,LF,LF,0
  109.     RET
  110. ;
  111. ;The following are used in setting up the 2651
  112. ;No need to change for another micro if INIT and SETUP are FALSE.
  113. ;
  114. ;control bytes
  115. RSTERR    EQU    37H    ;reset parity and overrun flags
  116. MODEIN1    EQU    4EH    ;16x, 8 bits, no parity, 1 stop
  117. MODEIN2    EQU    35H    ;Baudrate
  118. CMDINS    EQU    27H    ;DTR, RTS, Tx enable, RX enable
  119. CLK16    EQU    02H    ;16x clock
  120. STSPEED    EQU    1    ;300bps
  121. ;End of 2651 specific equates for initialization.
  122. ;
  123. ;
  124. ;The following is used to initialize the 2651 on execution
  125. ;of MODEM9.
  126. ;
  127. INITMOD:
  128.     MOV    AL,STSPEED
  129. INITSPD    EQU    Offset $ - 1
  130.     MOV    MSPEED,AL
  131.     CALL    SELECT
  132.     MOV    AL,MODEIN1    ;2651 Mode 2 byte
  133. PARM1    EQU    Offset $ - 1
  134.     OUT    MODMODP,AL
  135.     MOV    AL,MSPEED
  136.     MOV    BX,Offset BDTABL
  137.     MOV    AH,0
  138.     ADD    BX,AX
  139.     MOV    AL,Byte Ptr [BX]
  140.     OUT    MODMODP,AL    ;2651 Mode 2 byte
  141.     MOV    AL,CMDINS    ;2651 Command byte
  142. PARM2    EQU    Offset $ - 1
  143.     OUT    MODCMDP,AL
  144.     RET
  145. ;
  146. ;The following routine changes the baud rate, stop bits and parity on
  147. ;the 2651 from the command level. Note the routine MUST modify the
  148. ;parameters used by the INITMOD routine.
  149. ;
  150. ;The following are parameters/masks used in setting word length
  151. ;stop bits and parity for the 2651
  152. ;
  153. MSKWD    EQU    0CH    ;word length mask
  154. SEVEN    EQU    08H    ;receive seven bit word
  155. EIGHT    EQU    0CH    ;receive eight bit word
  156. MSKST    EQU    0C0H    ;stop bit mask
  157. ONE    EQU    040H    ;one stop bit
  158. TWO    EQU    0C0H    ;two stop bits
  159. MSKPA    EQU    030H    ;mask for parity bits
  160. NONE    EQU    00H    ;no parity
  161. ODD    EQU    010H    ;odd parity
  162. EVEN    EQU    030H    ;even parity
  163. ;
  164. ;
  165. SETUPR:
  166.     PUSH    BX
  167.     CALL    CLRTST
  168.     CALL    ILPRT
  169.     DB    '                 USART/Modem Control',CR,LF,LF,LF
  170.     DB    'Current settings -',CR,LF,0
  171.     CALL    SETTIM2
  172.     CALL    GIVEPRM
  173.     CALL    ILPRT
  174.     DB    CR,LF
  175.     DB    'Enter choices below - <CR> for no change',CR,LF,0
  176. AGAIN:
  177.     MOV    DX,OFFSET BAUDBUF    ;point to input buffer for ILCOMP
  178.     CALL    ILPRT
  179.     DB    'Baud Rate (110, 300, 600, 1200, 2400, 4800, 9600, 19200): ',0
  180.     CALL    INBUFF
  181.     MOV    DX,OFFSET BAUDBUF+2
  182.     CALL    ILCOMP        ;compare BAUDBUF+2 with characters below
  183.     DB    '110',0
  184.     MOV    AL,0
  185.     JNC    OK        ;go if got match
  186.     CALL    ILCOMP
  187.     DB    '300',0
  188.     MOV    AL,1
  189.     JNC    OK
  190.     CALL    ILCOMP
  191.     DB    '600',0
  192.     MOV    AL,2
  193.     JNC    OK
  194.     CALL    ILCOMP
  195.     DB    '1200',0
  196.     MOV    AL,3
  197.     JNC    OK
  198.     CALL    ILCOMP
  199.     DB    '2400',0
  200.     MOV    AL,4
  201.     JNC    OK
  202.     CALL    ILCOMP
  203.     DB    '4800',0
  204.     MOV    AL,5
  205.     JNC    OK
  206.     CALL    ILCOMP
  207.     DB    '9600',0
  208.     MOV    AL,6
  209.     JNC    OK
  210.     CALL    ILCOMP
  211.     DB    '19200',0
  212.     MOV    AL,7
  213.     JNC    OK
  214.     CALL    ILCOMP
  215.     DB    ' ',0
  216.     JNC    AGAIN2
  217.     CALL    WRONG
  218.     JMP    AGAIN        ;try again
  219. ;
  220. OK:
  221.     MOV    CS: BYTE PTR .INITSPD,AL
  222.     MOV    MSPEED,AL
  223. ;
  224. AGAIN2:
  225.     MOV    DX,OFFSET BAUDBUF    ;point to input buffer for ILCOMP
  226.     CALL    ILPRT
  227.     DB    CR,LF
  228.     DB    'Word Length (7, 8): ',0
  229.     CALL    INBUFF
  230.     MOV    DX,OFFSET BAUDBUF+2
  231.     CALL    ILCOMP    ;compare BAUDBUF+2 with characters below
  232.     DB    '7',0
  233.     MOV    AL,SEVEN
  234.     JNC    OK2
  235.     CALL    ILCOMP
  236.     DB    '8',0
  237.     MOV    AL,EIGHT
  238.     JNC    OK2
  239.     CALL    ILCOMP
  240.     DB    ' ',0
  241.     JNC    AGAIN3
  242.     CALL    WRONG
  243.     JMP    AGAIN2
  244. ;
  245. OK2:
  246.     MOV    WDLEN,AL
  247. ;
  248. AGAIN3:
  249.     MOV    DX,OFFSET BAUDBUF ;point to input buffer for ILCOMP
  250.     CALL    ILPRT
  251.     DB    CR,LF
  252.     DB    'Stop Bits (1, 2): ',0
  253.     CALL    INBUFF
  254.     MOV    DX,OFFSET BAUDBUF+2
  255.     CALL    ILCOMP        ;compare BAUDBUF+2 with characters below
  256.     DB    '1',0
  257.     MOV    AL,ONE
  258.     JNC    OK3
  259.     CALL    ILCOMP
  260.     DB    '2',0
  261.     MOV    AL,TWO
  262.     JNC    OK3
  263.     CALL    ILCOMP
  264.     DB    ' ',0
  265.     JNC    AGAIN4
  266.     CALL    WRONG
  267.     JMP    AGAIN3
  268. ;
  269. OK3:
  270.     MOV    STPLN,AL
  271. ;
  272. AGAIN4:
  273.     MOV    DX,OFFSET BAUDBUF ;point to input buffer for ILCOMP
  274.     CALL    ILPRT
  275.     DB    CR,LF
  276.     DB    'Parity (None, Even, Odd): ',0
  277.     CALL    INBUFF
  278.     MOV    DX,OFFSET BAUDBUF+2
  279.     CALL    ILCOMP        ;compare BAUDBUF+2 with characters below
  280.     DB    'NONE',0
  281.     MOV    AL,NONE
  282.     JNC    OK4        ;go if got match
  283.     CALL    ILCOMP
  284.     DB    'EVEN',0
  285.     MOV    AL,EVEN
  286.     JNC    OK4
  287.     CALL    ILCOMP
  288.     DB    'ODD',0
  289.     MOV    AL,ODD
  290.     JNC    OK4
  291.     CALL    ILCOMP
  292.     DB    ' ',0
  293.     JNC    GOSET
  294.     CALL    WRONG
  295.     JMP    AGAIN4        ;try again
  296. ;
  297. OK4:
  298.     MOV    PARIT,AL
  299. ;
  300. GOSET:
  301.     MOV    AL,0
  302.     OR    AL,WDLEN
  303.     OR    AL,PARIT
  304.     OR    AL,STPLN
  305.     OR    AL,CLK16
  306.     MOV    CS: BYTE PTR .PARM1,AL
  307.     CALL    ILPRT
  308.     DB    CR,LF
  309.     DB    'New settings -',CR,LF,0
  310.     CALL    SETTIM2
  311.     CALL    GIVEPRM
  312.     POP    BX
  313.     JMP    INITMOD        ;reset 2651
  314. ;
  315. GIVEPRM:
  316.     CALL    GETPRM
  317.     CALL    ILPRT
  318.     DB    'Word length is ',0
  319.     MOV    AL,WDLEN
  320.     CMP    AL,SEVEN
  321.     JNZ    NOTSEV
  322.     CALL    ILPRT
  323.     DB    'seven',0
  324.     JMP    GIVEST
  325.  
  326. NOTSEV:
  327.     CALL    ILPRT
  328.     DB    'eight',0
  329. GIVEST:
  330.     CALL    ILPRT
  331.     DB    ', number of stop bits is ',0
  332.     MOV    AL,STPLN
  333.     CMP    AL,ONE
  334.     JNZ    NOTONE
  335.     CALL    ILPRT
  336.     DB    'one',0
  337.     JMP    GIVEPA
  338.  
  339. NOTONE:
  340.     CALL    ILPRT
  341.     DB    'two',0
  342. GIVEPA:
  343.     CALL    ILPRT
  344.     DB    ', parity is ',0
  345.     MOV    AL,PARIT
  346.     CMP    AL,NONE
  347.     JNZ    NOTNON
  348.     CALL    ILPRT
  349.     DB    'none',CR,LF,0
  350.     RET
  351.  
  352. NOTNON:
  353.     MOV    AL,PARIT
  354.     CMP    AL,ODD
  355.     JNZ    NOTODD
  356.     CALL    ILPRT
  357.     DB    'odd',CR,LF,0
  358.     RET
  359. NOTODD:
  360.     CALL    ILPRT
  361.     DB    'even',CR,LF,0
  362.     RET
  363. ;
  364. GETPRM:
  365.     MOV    AL,CS: BYTE PTR .PARM1    ;get present word length
  366.     AND    AL,MSKWD    
  367.     MOV    WDLEN,AL
  368.     MOV    AL,CS: BYTE PTR .PARM1    ;get stop bits and parity
  369.     MOV    CH,AL
  370.     AND    AL,MSKST
  371.     MOV    STPLN,AL
  372.     MOV    AL,CH
  373.     AND    AL,MSKPA
  374.     MOV    PARIT,AL
  375.     RET
  376. ;
  377. WRONG:
  378.     CALL    ILPRT    ;all matches failed - tell operator
  379.     DB    '++ Incorrect entry ++',CR,LF,BELL,0
  380.     RET
  381. ;
  382. ;Table of baud rate parameters
  383. ;
  384. BDTABL    EQU    BYTE PTR $
  385.     DB      32H        ; 110 baud
  386.     DB    35H        ; 300 baud
  387.     DB    36H        ; 600 baud
  388.     DB    37H        ; 1200 baud
  389.     DB    3AH        ; 2400 baud
  390.     DB    3CH        ; 4800 baud
  391.     DB    3EH        ; 9600 baud
  392.     DB    3FH        ; 19200 baud
  393. ;
  394. WDLEN    DB    EIGHT
  395. STPLN    DB    ONE
  396. PARIT    DB    NONE
  397. ;
  398. BAUDBUF:
  399.     DB    10,0
  400.     RB    10
  401. ;
  402. ;
  403. ;For MODEMs which disconnect from the telephone line when data terminal
  404. ;ready (DTR) drops, the following routine will disconnect.
  405. ;
  406. HANGUP    EQU    0        ;HANG UP THE TELEPHONE
  407. ;
  408. DISCR:
  409.     CALL    SELECT        ;Select USART
  410.     IN    AL,MODCMDP
  411.     AND    AL,25H        ;Mask out DTR
  412.     OUT    MODCMDP,AL
  413.     RET
  414. ;
  415. ;
  416. ;The following routine will give the carrier detect status
  417. ;
  418. ;
  419. RLSD    EQU    40H
  420. ;
  421. DETCAR:
  422.     MOV    AL,CARDETFLG
  423.     OR    AL,AL
  424.     JZ    DETCARRET    ;RETURN IF FALSE
  425.     CALL    ILPRT
  426.     DB    'Carrier ',0
  427.     CALL    SELECT
  428.     IN    AL,MODCTLP
  429.     AND    AL,RLSD
  430.     JNZ    DETCAR1
  431.     CALL    ILPRT
  432.     DB    'not ',0
  433. DETCAR1:
  434.     CALL    ILPRT
  435.     DB    'present',CR,LF,0
  436. DETCARRET:
  437.     RET
  438. ;
  439.