home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / bye3 / b3r2-2.ins < prev    next >
Text File  |  1994-07-13  |  4KB  |  165 lines

  1. ; B3R2-2.INS - BYE3 Insert for TRS-80 2/12/16/16B - 08/01/85
  2. ;
  3. ;         SIO I/O and CTC 8430 timer
  4. ;
  5. ; This version adapted for use with TRS-80 Models 2/12/16 & 16B.
  6. ;
  7. ; This works with the TRS-80 Model II & 12 with versions of CP/M 2.2
  8. ; except Pickles and Trout 2.2m.  Will work on P&T 2.2m ONLY if running
  9. ; ZCPR3.
  10. ;
  11. ; NOTE:  This is an insert, not an overlay.
  12. ;
  13. ;
  14. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  15. ;
  16. ; 08/01/85  Upgraded for bye337                - pst
  17. ; 12/23/84  Written for TRS-80 Models II//16/ and 16B    - Ken Brown
  18. ;
  19. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  20. ;
  21. ;
  22. ; Set ports for SIO & CTC chips for TRS-80 Models 2/12/16/16B
  23. ;
  24. ; The following define the port addresses to use.
  25. ;
  26. DPORT    EQU    0F4H        ; Data port
  27. SPORT    EQU    DPORT+2        ; Status/control port
  28. BPORT    EQU    0F0H        ; Baud rate port
  29. BPORT1    EQU    BPORT+1        ; Port for TRS-80 Models 2/12/16/16B
  30. ;
  31. DCD    EQU    00001000B    ; Data carrier detect
  32. TBMT    EQU    00000100B    ; Transmitt buffer empty
  33. DAV    EQU    00000001B    ; Data available
  34. ;
  35. ; Changed BDCMD1 & BDCMD2 EQU'S for TRS-80 Models 2/12/16/16B
  36. ;
  37. BDCMD1    EQU    07H        ; 110,300,600 & 1200 baud
  38. BDCMD2    EQU    47H        ; 2400 4800 9600 baud
  39. ;
  40. ; CTC baud rate divisors
  41. ;
  42. BD300    EQU    52        ; 300 baud
  43. BD1200    EQU    104        ; 1200 baud
  44. BD2400    EQU    52        ; 2400 baud
  45. ;
  46. ;-----------------------------------------------------------------------
  47. ;
  48. ; See if we still have a carrier - if not, return with the zero flag set
  49. ;
  50. MDCARCK:MVI    A,10H        ; Reset status
  51.     OUT    STPORT
  52.     IN    STPORT        ; Get status
  53.     ANI    DCD        ; Check for data carrier
  54.     RZ
  55.     ORI    255
  56.     RET
  57. ;
  58. ; Disconnect and wait for an incoming call
  59. ;
  60. MDINIT:    MVI    A,18H        ; Reset channel
  61.     OUT    STPORT
  62.     MVI    A,4        ; Setup to write register 4
  63.     OUT    STPORT
  64.     MVI    A,44H        ; 1 stop, 8 bits, no parity
  65.     OUT    STPORT
  66.     MVI    A,1        ; Setup to write register 1
  67.     OUT    STPORT
  68.     MVI    A,00H
  69.     OUT    STPORT
  70.     MVI    A,5        ; Setup to write register 5
  71.     OUT    STPORT
  72.     MVI    A,68H        ; Clear DTR causing hangup
  73.     OUT    STPORT
  74. ;
  75.     PUSH    B
  76.     MVI    B,20        ; 2 second delay
  77. OFFTI:    CALL    DELAY        ; 0.1 second delay
  78.     DCR    B
  79.     JNZ    OFFTI        ; Keep looping until finished
  80.     POP    B        ; Restore BC
  81. ;
  82.     MVI    A,3        ; Setup to write register 3
  83.     OUT    STPORT
  84.     MVI    A,0C1H        ; Initialize receive register
  85.     OUT    STPORT
  86.     MVI    A,5        ; Setup to write register 5
  87.     OUT    STPORT
  88.     MVI    A,0EAH        ; Turn on DTR so modem can answer phone
  89.     OUT    STPORT
  90. ;
  91.      IF    IMODEM        ; If using hayes 300/1200 smartmodem
  92.     CALL    IMINIT        ; Go initialize smartmodem now
  93.      ENDIF            ; Smodem
  94. ;
  95.     RET            ; Return
  96. ;
  97. ; Input a character from the modem port
  98. ;
  99. MDINP:    IN    PORT        ; Get character
  100.     RET            ; Return
  101. ;
  102. ; Check the status to see if a character is available.    If not, return
  103. ; with the zero flag set.  If yes, use 0FFH to clear the flag.
  104. ;
  105. MDINST:    IN    STPORT        ; Get status
  106.     ANI    DAV        ; Check the receive ready bit
  107.     RZ            ; Return if none
  108.     ORI    255        ; Otherwise, set the proper flag
  109.     RET            ; And return
  110. ;
  111. ; Send a character to the modem
  112. ;
  113. MDOUTP:    OUT    PORT        ; Send it
  114.     RET
  115. ;
  116. ; See if the output is ready for another character
  117. ;
  118. MDOUTST:IN    STPORT
  119.     ANI    TBMT        ; Check the transmit ready bit
  120.     RZ
  121.     ORI    255
  122.     RET
  123. ;
  124. ; Reinitialize the modem and hang up the phone by dropping DTR and
  125. ; leaving it inactive.
  126. ;
  127. MDQUIT:     IF    IMODEM        ; If using a smartmodem
  128.     CALL    IMQUIT        ; Tell it to shut down
  129.      ENDIF            ; IMODEM
  130. ;
  131. ;
  132. ; Called by the main program after caller types BYE
  133. ;
  134. MDSTOP:    MVI    A,5        ; Setup to write register 5
  135.     OUT    STPORT
  136.     MVI    A,68H        ; Clear DTR causing shutdown
  137.     OUT    STPORT
  138.     XCHG            ; Give it time to react
  139.     XCHG
  140.     RET
  141. ;
  142. ; The following routine sets the baudrate.  BYE3 asks for the maximum
  143. ; speed you have available.
  144. ;
  145. SET300:    MVI    B,BD300        ; Load rate
  146.     MVI    A,BDCMD1    ; Get first byte of command
  147.     JMP    SETBAUD
  148. ;
  149. SET1200:MVI    B,BD1200
  150.     MVI    A,BDCMD2
  151.     JMP    SETBAUD
  152. ;
  153. SET2400:MVI    B,BD2400
  154.     MVI    A,BDCMD2
  155. ;
  156. SETBAUD:OUT    BPORT        ; Send CTC command word
  157.     OUT    BPORT1
  158.     MOV    A,B        ; Get the baudrate value
  159.     OUT    BPORT        ; Send rate
  160.     OUT    BPORT1
  161.     XRA    A        ; Say rate is ok
  162.     RET
  163. ;                   end
  164. ;------------------------------------------------------------------------
  165.