home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / NUBYE / NUBY-INS.LBR / NUMD-1.IQS / numd-1.ins
Text File  |  1986-04-26  |  5KB  |  200 lines

  1. ; NUMD-1.INS - NUBYE insert for Morrow Micro Decision Computers    - 04/21/86
  2. ;
  3. ; 8251A and Intel 8253 timer for Rev 2.x only
  4. ;
  5. ; Pin 8 (DCD) from the modem must be connected to the USART's DSR input,
  6. ; either on the internal jumper block or in the modem connecting cable.
  7. ;
  8. ; Note:  This is an insert, not an overlay.
  9. ;
  10. ; ========
  11. ;
  12. ; 04/21/86  Modified for NUBYE
  13. ; 07/17/85  Written to work with BYE5            - Irv Hoff
  14. ; 03/30/85  Written for Rev 1.x and Rev 2.x boards    - Jim Sinning
  15. ;
  16. ; ========
  17. ;
  18. ; The following equate will be YES if using a later Micr Decision with
  19. ; Intel 8253 timer chip and Centronics Port.  Set NO for rev 1.x board.
  20. ;
  21. REV2X    EQU    YES        ; Yes if Centronix port and 8253 chip
  22.                 ; No if Rev 1.x board
  23. ;
  24. ; The following define the port address to use
  25. ;
  26. PORT    EQU    0FEH        ; Data port
  27. MDCTL1    EQU    PORT+1        ; Status/control port
  28. ;
  29. ; NOTE: The DIP switches for Serial 2 Port must be set for 1200 baud for
  30. ; this to work.
  31. ;
  32.      IF    REV2X
  33. BPORT    EQU    0F2H        ; Serial 2 Port on Intel 8253 timer
  34. CPORT    EQU    0F3H        ; 8253 control port
  35. MODINS1    EQU    4EH        ; 8 bits, 1 stop, 16x, no parity
  36.      ENDIF            ; REV2X
  37. ;
  38.      IF    NOT REV2X
  39. BPORT    EQU    MDCTL1        ; Baud rate port=8251 control
  40. CPORT    EQU    MDCTL1        ; Control port=8251 control
  41. MODINS1    EQU    4FH        ; 8 bits, 1 stop, 64x, no parity
  42.      ENDIF            ; NOT REV2X
  43. ;
  44. ; The following byte selects the proper mode for the Intel 8253 timer.
  45. ; Selects counter 2, reads least significant byte then most significant
  46. ; byte, sets the square wave generator and count is binary.
  47. ;
  48.      IF    REV2X
  49. CNTR2    EQU    0BEH
  50.      ENDIF            ; REV2X
  51. ;
  52. ; See if we still have a carrier - if not, return with the zero flag set
  53. ;
  54. MDCARCK:IN    MDCTL1        ; Get status
  55.     ANI    80H        ; Check DSR bit for a carrier
  56.     RET
  57. ;
  58. ; Disconnect and wait for an incoming call
  59. ;
  60. MDINIT:    MVI    A,10H        ; Clear DTR
  61.     OUT    MDCTL1        ; Causing hangup
  62.     PUSH    B        ; Preserve in case we need it
  63.     MVI    B,20        ; 2 second delay
  64. ;
  65. OFFTI:    CALL    DELAY        ; 0.1 second delay
  66.     DCR    B
  67.     JNZ    OFFTI        ; Keep looping until finnished
  68.     POP    B        ; Restore BC
  69.     MVI    A,17H        ; Assert DTR so that modem
  70.     OUT    MDCTL1        ; Can answer phone
  71.     CALL    UDELAY        ; Added to be safe
  72. ;
  73.      IF    IMODEM
  74.     CALL    IMINIT
  75.      ENDIF            ; IMODEM
  76. ;
  77.     RET
  78. ;
  79. ; Input a character from the modem port
  80. ;
  81. MDINP:    IN    PORT        ; Get character
  82.     RET
  83. ;
  84. ; Check the status to see if a character is available.    If not, return
  85. ; with the zero flag set.  If yes, use 0FFH to clear the flag.
  86. ;
  87. MDINST:    IN    MDCTL1        ; Get status
  88.     ANI    2        ; Check the receive ready bit
  89.     RZ            ; Return if none
  90.     ORI    0FFH        ; We have a character
  91.     RET
  92. ;
  93. ; Send a character to the modem
  94. ;
  95. MDOUTP:    OUT    PORT        ; Send it
  96.     RET
  97. ;
  98. ; See if the output is ready for another character
  99. ;
  100. MDOUTST:IN    MDCTL1
  101.     ANI    1        ; Check the transmit ready bit
  102.     RET
  103. ;
  104. ; Reinitialize the modem and hang up the phone by dropping DTR and
  105. ; leaving it inactive.
  106. ;
  107. MDQUIT:     IF    IMODEM
  108.     CALL    IMQUIT        ; Tell smartmodem to quit
  109.      ENDIF            ; IMODEM
  110. ;
  111. ; Called by the main program after caller types BYE
  112. ;
  113. MDSTOP:    MVI    A,10H        ; Turn off DTR
  114.     OUT    MDCTL1
  115.     RET
  116. ;
  117. ; Start of rev 1.x speeds
  118. ;
  119. ; The following routine sets the baudrate.  NUBYE asks for the maximum
  120. ; speed you have available.
  121. ;
  122.      IF    NOT REV2X
  123. SET2400    EQU    $        ; Only supports 300/1200
  124. ;
  125. SETINV:    ORI    0FFH        ; Make sure zero flag not set
  126.     RET
  127. ;
  128. SET300:    MVI    B,BD300
  129.     JMP    SETBAUD
  130. ;
  131. SET1200:MVI    B,BD1200
  132. ;
  133. SETBAUD:MVI    A,47H        ; Reset, enable Rx, DTR, Tx
  134.     OUT    MDCTL1        ; Rx,Tx enabled
  135.     CALL    UDELAY
  136.     MOV    A,B        ; Recover Baud Rate Word
  137.     OUT    BPORT
  138.     CALL    UDELAY        ; Wait for USART
  139.     MVI    A,17H        ; ERR reset, DTR, Rx, Tx all on
  140.     OUT    MDCTL1
  141.     CALL    UDELAY
  142.     XRA    A        ; Say rate OK
  143.     RET
  144. ;
  145. ; Values to switch the 8251 between x16 and x64 for rev 1.x boards
  146. ;
  147. BD300    EQU    4FH        ; 300 baud
  148. BD1200    EQU    4EH        ; 1200 bps
  149.      ENDIF            ; NOT REV2X
  150. ;
  151. ; End of rev 1.x speeds
  152. ; ---------------------
  153. ; Start of rev 2.x speeds
  154. ;
  155.      IF    REV2X        ; 300/1200/2400 baud supported
  156. SET300:    PUSH    H        ; Save HL just in case
  157.     LXI    H,BD300        ; Point Divisor word
  158.     JMP    SETBAUD
  159. ;
  160. SET1200:PUSH    H
  161.     LXI    H,BD1200
  162.     JMP    SETBAUD
  163. ;
  164. SET2400:PUSH    H
  165.     LXI    H,BD2400
  166. ;
  167. SETBAUD:MVI    A,CNTR2        ; Select Serial 2 Counter
  168.     OUT    CPORT
  169.     CALL    UDELAY
  170.     MOV    A,L        ; Send Least significant byte
  171.     OUT    BPORT
  172.     CALL    UDELAY
  173.     MOV    A,H
  174.     OUT    BPORT
  175.     CALL    UDELAY
  176.     MVI    A,17H        ; ERR reset, Rx, DTR, Tx all on
  177.     OUT    MDCTL1
  178.     CALL    UDELAY
  179.     XRA    A        ; Say baud rate is OK
  180.     POP    H        ; Recover HL
  181.     RET
  182. ;
  183. ; The following data words are the Intel 8253 divisors for BPORT
  184. ;
  185. BD300    EQU    416        ; 300 baud
  186. BD1200    EQU    104        ; 1200 bps
  187. BD2400    EQU    52        ; 2400 bps
  188. BD9600    EQU    13        ; 9600 bps
  189.      ENDIF            ; REV2X
  190. ;
  191. ; IN8251 specific USART delay
  192. ;
  193. UDELAY:    NOP
  194.     NOP
  195.     NOP
  196.     RET
  197. ;
  198. ; end of insert
  199. ; -------------
  200.