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 / NUZB-3.IQS / nuzb-3.ins
Text File  |  1986-04-26  |  4KB  |  166 lines

  1. ; NUZB-1.INS -- NUBYE insert for ZORBA computers -- 04/21/86
  2. ;
  3. ; 8251A and Intel 8254-2 timer 3.9936 MHz
  4. ;
  5. ; Note:  This is an insert, not an overlay
  6. ;
  7. ; ========
  8. ;
  9. ; 04/21/86  Modified for NUBYE
  10. ; 12/17/85  Rewrote baudrate selection area to better handle 300 baud.
  11. ;        Tested by John Maclean.    - Irv Hoff
  12. ; 12/11/85  Corrected a MVI to a MOV which ASM.COM and MAC.COM missed
  13. ;        reporting as an error.    - Irv Hoff
  14. ; 07/17/85  Written to work with BYE5    - Irv Hoff
  15. ;
  16. ; ========
  17. ;
  18. ; The following define the port addresses to use
  19. ;
  20. PORT    EQU    20H        ; Modem base port
  21. MDCTL1    EQU    PORT+1        ; Modem control port
  22. RCVPORT    EQU    20H        ; Receive speed 8254 port
  23. XMTPORT    EQU    1AH        ; Transmit speed 8254 port
  24. ;
  25. MDRCV    EQU    2        ; Modem receive ready bit
  26. MDSND    EQU    1        ; Modem send ready bit
  27. RESET    EQU    38H        ; Framing, overrun and parity errors
  28. ;
  29. MDMODE    EQU    82H        ; Insures 8251 is out of mode, DTR high
  30. MDRSET    EQU    42H        ; Resets USART for additional commands
  31. MDSET1    EQU    4EH        ; 1 stop bit, no parity, 8 bits, x16
  32. MDSET2    EQU    0CEH        ; 2 stop bits, no parity, 8 bits, x16
  33. COMMND    EQU    3        ; 8254 Timer control/status
  34. BRPORT    EQU    0        ; Baudrate generator timer 0 (port A)
  35. LSB300    EQU    83H
  36. MSB300    EQU    6
  37. ;
  38. ; Baudrate table
  39. ;
  40. BD300:    DW    1667        ; 300 baud
  41. BD1200:    DW    417        ; 1200 bps
  42. BD2400:    DW    208        ; 2400 bps
  43. BD9600:    DW    52        ; 9600 bps
  44. ;
  45. ; See if we still have a carrier - if not, return with the zero flag set
  46. ;
  47. MDCARCK:IN    MDCTL1        ; Get status
  48.     ANI    80H        ; Check DSR for carrier from modem
  49.     RET
  50. ;
  51. ; Disconnect and wait for an incoming call.
  52. ;
  53. MDINIT:    MVI    A,10H        ; Clear DTR
  54.     OUT    MDCTL1        ; Causing hangup
  55.     PUSH    B        ; Preserve in case we need it
  56.     MVI    B,20        ; 2 seconds to drop DTR
  57. ;
  58. OFFTI:    CALL    DELAY        ; 0.1 second delay
  59.     DCR    B
  60.     JNZ    OFFTI        ; Keep waiting until carrier drops
  61.     POP    B        ; Restore BC
  62.     MVI    A,MDMODE    ; Insure 8251 is out of mode
  63.     OUT    MDCTL1
  64.     XTHL            ; Delay a little
  65.     XTHL            ; Delay a little
  66.     MVI    A,MDRSET    ; Reset the 8251A for new command
  67.     OUT    MDCTL1
  68.     XTHL
  69.     XTHL
  70.     MVI    A,MDSET1    ; Set stop pulse, no parity 8 bits, x16
  71.     OUT    MDCTL1
  72.     XTHL
  73.     XTHL
  74.     MVI    A,17H        ; Reset error flags, RCV, DTR, TX ready
  75.     OUT    MDCTL1
  76.     XTHL
  77.     XTHL
  78. ;
  79.      IF    IMODEM
  80.     CALL    IMINIT        ; Initialize smartmodem
  81.      ENDIF            ; IMODEM
  82. ;
  83.     RET
  84. ;
  85. ; Input a character from the modem port
  86. ;
  87. MDINP:    IN    PORT        ; Get character
  88.     RET
  89. ;
  90. ; Check the status to see if a character is available.    if not, return
  91. ; with the zero flag set.  If yes, use 0FFH to clear the flag.
  92. ;
  93. MDINST:    IN    MDCTL1        ; Get status
  94.     ANI    MDRCV        ; Got a character?
  95.     RZ            ; Return if none
  96.     IN    MDCTL1        ; Get status again
  97.     ANI    RESET        ; Check for framing and overrun
  98.     JZ    MDINST1        ; No errors
  99.     MVI    A,17H        ; Reset error flags
  100.     OUT    MDCTL1
  101.     XRA    A        ; Return false
  102.     RET
  103. ;
  104. MDINST1:ORI    0FFH        ; We have a character
  105.     RET
  106. ;
  107. ; Send a character to the modem
  108. ;
  109. MDOUTP:    OUT    PORT        ; Send it
  110.     RET
  111. ;
  112. ; See if the output is ready for another character
  113. ;
  114. MDOUTST:IN    MDCTL1
  115.     ANI    MDSND
  116.     RET
  117. ;
  118. ; Renitialize the modem and hang up the phone by dropping DTR and
  119. ; leaving it inactive.
  120. ;
  121. MDQUIT:     IF    IMODEM
  122.     CALL    IMQUIT
  123.      ENDIF            ; IMODEM
  124. ;
  125. ; Called by the main program after caller types BYE
  126. ;
  127. MDSTOP:    MVI    A,10H        ; DTR low hangs up phone, keep DTR low
  128.     OUT    MDCTL1        ; So will not auto-answer at any time
  129.     RET
  130. ;
  131. ; The following routine sets the baudrate.  NUBYE asks for the maximum
  132. ; speed you have available.
  133. ;
  134. SETINV:    MVI    A,0FFH
  135.     ORA    A        ; Make sure the Zero flag isn't set
  136.     RET
  137. ;
  138. SET300: DI            ; Disable interrupts
  139.     LHLD    BD300          ; Get value for 300 bps
  140.     JMP     LOADBD        ; Load it
  141. ;
  142. SET1200:DI            ; Disable interrupts
  143.     LHLD    BD1200        ; Get value for 1200 bps
  144.     JMP    LOADBD        ; Load it
  145. ;
  146. SET2400:DI            ; Disable interrupts
  147.     LHLD    BD2400        ; Get value for 1200 bps
  148.     JMP    LOADBD        
  149. ;
  150. LOADBD:    MOV    A,L
  151.     STA    LSBD+1
  152.     MOV    A,H
  153.     STA    MSBD+1
  154.     MVI    A,36H
  155.     OUT    COMMND
  156. ;
  157. LSBD:    MVI    A,LSB300
  158.     OUT    BRPORT
  159. ;
  160. MSBD:    MVI    A,MSB300
  161.     OUT    BRPORT
  162.     EI            ; Enable interrupts
  163.     RET
  164. ;
  165. ; end of insert
  166. ; -------------