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 / TRS-80 / BYTRS4AN.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  5KB  |  186 lines

  1. ;******************************************************************************
  2. ;        TRS-80 Model 4 RS-232 routines
  3. ;        Version 1.0 for TRS-80 Mod 1 by John A. McKown
  4. ;                     Revised for mod4 by Ed Richter
  5. ;These routines will allow the easy patching of BYEII
  6. ;for any type of MODEM/serial port combination. Certain
  7. ;routines must return status flags, so please be care-
  8. ;ful to set the flags as directed.
  9. ;
  10. ;This version is for the TRS-80 Model 4 RS-232 port
  11. ;hooked up to an external modem.
  12. ;
  13. ;Modification History
  14. ;
  15. ;07/14/84: Added Anchor equate to use Signalman Mark XII. This requires
  16. ;          the updated BY2+SMAN.ASM overlay also. This code will also
  17. ;          work with the Smartmodem or any external modem. To use the
  18. ;          Smartmodem set the equate SMODEM in BYEII to true. To use
  19. ;          the Anchor the SMODEM equate in BYEII and the ANCHOR equate 
  20. ;       here must be true. Will work with any external "DUMB" modem 
  21. ;       with these equates set false.
  22. ;                                                           <epr>
  23. ;
  24. ;01/01/84: Added MDQUIT routine and modified for the TRS-80 Mod IV. 
  25. ;                                                           <epr> 
  26. ;
  27. ;10/01/83: Routines added, no fuss, mess, or frills
  28. ;
  29. ;******************************************************************************
  30. ;
  31. ;Option to use with 300/1200 SmartModem
  32. ;If YES, also append BY2+SMDM.ASM just after this code.
  33. ;
  34. ANCHOR  EQU    TRUE    ;TRUE IF USING ANCHOR SIGNALMAN MARK XII
  35. MSPORT    EQU    0E8H    ;OUT MASTER RESET UART/IN MODEM STATUS PORT
  36. BPORT    EQU    0E9H    ;BAUD RATE PORT
  37. USPORT    EQU    0EAH    ;UART STATUS PORT
  38. DPORT    EQU    0EBH    ;DATA PORT
  39. ;
  40. MDINIT    EQU    $+OFFSET
  41.     MVI    A,0FFH
  42.     OUT    MSPORT        ;RESET MODEM (DATA IRRELEVANT)
  43.     CALL    MDHANG        ;TURN-OFF DTR, HANG-UP, SET 300 BAUD
  44.     IF     NOT ANCHOR    ;ANCHOR DOESN'T NEED THIS DELAY
  45.     PUSH    B
  46.     MVI    B,150    ;15 SECOND DELAY
  47. ;
  48. OFFTI    EQU    $+OFFSET
  49.     CALL    DELAY    ;0.1 SECOND DELAY
  50.     DCR    B
  51.     JNZ    OFFTI
  52.     POP    B
  53.     ENDIF    ;NOT ANCHOR
  54. ;...    
  55.     MVI    A,0ECH        ;TURN ON UART 8,NO,1,DTR,RTS
  56.     OUT    USPORT        ;SET UART
  57.     IF    SMODEM        ;IF USING 300/1200 SMARTMODEM
  58.     CALL    SMINIT
  59.     ENDIF    ;SMODEM
  60.     RET
  61. ;
  62. ;CHECK TO SEE IF PHONE IS RINGING
  63. ;
  64. MDRING    EQU    $+OFFSET
  65.     IN    MSPORT
  66.     CMA            ;INVERT THE RESPONSE.
  67.     ANI    10H        ;RING INDIC ON?
  68.     RET            ;YES
  69. ;
  70. ;RESET MODEM TO DEFAULT (300,8,NO,1,DTR ON)
  71. ;
  72. MDQUIT  EQU     $+OFFSET
  73.     CALL    MDANSW        ;SET 300 BAUD
  74.         MVI     A,02H       ;RESET UART ENABLE
  75.         OUT     MSPORT
  76.         MVI     A,0ECH       ;SET MODEM TO STANDARD DEFAULT VALUE
  77.         OUT     USPORT
  78.         RET
  79. ;
  80. ;HANGUP PHONE BY TURNING OFF DTR
  81. ;
  82. MDHANG    EQU    $+OFFSET
  83.     MVI    A,0FFH        ;TURN OFF DTR & RTS (BITS 0 & 1 TRUE)
  84.     OUT    USPORT
  85. ;
  86. ;THE FOLLOWING ROUTINE WILL RESET THE UART TO 300 BAUD
  87. ;AND ALLOW THE MODEM TO ANSWER THE PHONE WHEN DTR IS SET
  88. ;
  89. MDANSW    EQU    $+OFFSET
  90.     CALL    SET300        ;SET 300 BAUD
  91.     IN    DPORT        ;CLEAR OUT GARBAGE
  92.     IN    DPORT        ;DITTO
  93.     RET
  94. ;
  95. ;THE FOLLOWING ROUTINE CHECKS TO MAKE SURE WE STILL
  96. ;HAVE CARRIER. IF THERE IS NO CARRIER, IT WILL RETURN
  97. ;WITH THE ZERO FLAG SET.
  98. ;
  99. MDCARCK    EQU    $+OFFSET
  100.     IN    MSPORT        ;GET MODEM STATUS
  101.     CMA            ;INVERT THE RESPONSE
  102.     ANI    20H        ;CHECK CARRIER
  103.     RET            ;RETURN
  104. ;
  105. ;THE FOLLOWING ROUTINE DETERMINES IF THERE IS A CHARACTER WAITING
  106. ;TO BE RECEIVED. IF NO CHARACTER IS WAITING, THE ZERO FLAG WILL BE SET,
  107. ;OTHERWISE, 255 WILL BE RETURNED IN REGINSTER A.
  108. ;
  109. MDINST    EQU    $+OFFSET
  110.     IN    USPORT        ;CHECK UART
  111.     ANI    80H        ;ANY DATA
  112.     RZ            ;NO, RETURN
  113.     ORI    0FFH        ;SET PROPER DATA
  114.     RET
  115. ;
  116. ;THE FOLLOWING IS A ROUTINE THAT WILL INPUT ONE
  117. ;CHARACTER FROM THE MODEM PORT. IF THERE IS NOTHING
  118. ;THERE, IT WILL RETURN THE PREVIOUS CHARACTER RECEIVED.
  119. ;THEREFORE, USE MDINST ROUTINE TO TEST FOR A CHARACTER
  120. ;BEING AVAILABLE
  121. ;
  122. MDINP    EQU    $+OFFSET
  123.     IN    DPORT
  124.     ANI    7FH
  125.     RET
  126. ;
  127. ;THE FOLLOWING IS A ROUTINE TO DETERMINE IF THE TRANSMIT
  128. ;BUFFER IS EMPTY. IF IT IS, IT WILL RETURN WITH THE ZERO
  129. ;FLAG CLEAR. IF THE TRANSMITTER IS BUSY, THEN IT WILL
  130. ;RETURN WITH THE ZERO FLAG SET.
  131. ;
  132. MDOUTST  EQU     $+OFFSET
  133.          IN      USPORT
  134.          ANI     40H               ;EMPTY
  135.          RET
  136. ;
  137. ;THE FOLLOWING IS A ROUTINE THAT WILL OUTPUT ONE CHARACTER
  138. ;IN REGISTER A TO THE MODEM. REMEMBER THAT IS REGISTER  
  139. ;A NOT REGISTER C.
  140. ; *** USE MDOUTST FIRST TO SEE IF BUFFER IS EMPTY *** 
  141. ;
  142. MDOUTP  EQU      $+OFFSET
  143.         OUT      DPORT
  144.         RET
  145. ;
  146. ;THESE NEXT ROUTINES SET THE PROPER BAUD RATES FOR THE
  147. ;MODEM. IF YOU DO NOT SUPPORT THE PARTICULAR RATE, THEN
  148. ;SIMPLY PUT THE LABEL IN FRONT OF THE SETINV ROUTINE.
  149. ;IF THE BAUD RATE CHANGE WAS SUCCESSFUL, MAKE SURE THE
  150. ;ZERO FLAG IS SET.
  151. ;
  152. ;SET UP FOR 300 BAUD
  153. ;
  154. SET300  EQU     $+OFFSET
  155.         MVI     A,55H
  156.         OUT     BPORT             ;SET 300 BAUD
  157.         XRA     A                 ;ZERO THE A REG
  158.         RET
  159. ;
  160. SET1200  EQU    $+OFFSET
  161.          MVI    A,77H
  162.          OUT    BPORT
  163.          XRA    A
  164.          RET
  165. ;
  166. ;THE FOLLOWING ROUTINE RETURNS A 255 BECAUSE 
  167. ;THE SERIAL PORT OR THE MODEM CAN'T HANDLE THE BAUD RATE.
  168. ;
  169. SET110   EQU     $+OFFSET
  170. SET450   EQU     $+OFFSET
  171. SET600   EQU     $+OFFSET
  172. SET710   EQU     $+OFFSET
  173. SETINV   EQU     $+OFFSET
  174.          ORI     0FFH
  175.          RET
  176. ;OK, THAT'S ALL OF THE MODEM DEPENDANT ROUTINES THAT
  177. ;BYEII USES, SO IF YOU PATCH THIS FILE INTO YOUR COPY
  178. ;OF BYEII, THEN IT SHOULD WORK OUT WELL.
  179. ;
  180. ;                    Ed Richter
  181. ;
  182. ;         END BY2-TRS4  (BUT NOT THE PROGRAM)
  183. ;
  184. ;******************************************************************************
  185. ;<NOTE>  INSERT BY2+SMDM.ASM AFTER THIS STATEMENT IF NEEDED
  186.