home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / nubye / nuby-ins.lbr / NUAN-1.IQS / nuan-1.ins
Text File  |  1986-04-25  |  6KB  |  258 lines

  1. ; NUAN-1.INS - Apple // with PCPI Applicard and MTN CPS Serial Card
  2. ;
  3. ;        2651 with internal baudrate generator
  4. ;
  5. ; This insert version is for the Apple ][+ with the Mountain Computer
  6. ; CPS Serial Interface Card and PCPI Applicard.
  7. ;
  8. ; Thanks to Norman Beeler for previous versions of this insert.
  9. ;
  10. ; --------
  11. ;
  12. ; 04/21/86  Modified for NUBYE
  13. ; 12/23/85  Written for BYE5        - H. Middlebrook
  14. ;
  15. ; --------
  16. ;
  17. ; CPS Serial Interface Routines
  18. ;
  19. SLOT    EQU    2            ; CPS card slot number
  20. ;
  21. ; CPS Serial Port and Register Equates
  22. ;
  23. DATREG    EQU    0C0FAH + SLOT *    100H    ;Serial Data Register
  24. STAREG    EQU    0C0FBH + SLOT *    100H    ;Serial Status Register
  25. SCRCTL    EQU    0C0FEH + SLOT *    100H    ;CPS Serial Ctl Register
  26. CLKREG    EQU    0C0F9H + SLOT *    100H    ;CPS Clock Data Register
  27. ;
  28. RDBYTEAPPL    EQU    0FFE0H        ;Read byte from Apple
  29. WRBYTEAPPL    EQU    0FFE3H        ;Write byte to Apple
  30. RDWORD        EQU    0FFE6H        ;Read 2 bytes  (DE = Bytes)
  31. WRWORD        EQU    0FFE9H        ;Write 2 bytes (DE = Bytes)
  32. ;
  33. PEEK1BYTE    EQU    6        ;Command to Peek 1 byte to Apple
  34. POKE1BYTE    EQU    7        ;Command to Poke 1 byte to Apple
  35. ;
  36. ; The following routines communicate with hardware in Apple Slots
  37. ; directly from Applicard.
  38. ;
  39. ; Read the UART Status Register
  40. ;
  41. RD$STAREG:
  42.     PUSH    D
  43.     LXI    D,STAREG
  44.     CALL    PEEK
  45.     POP    D
  46.     RET
  47. ;
  48. ; Write to the UART Status Register
  49. ;
  50. WR$STAREG:
  51.     PUSH    D
  52.     LXI    D,STAREG
  53.     CALL    POKE
  54.     POP    D
  55.     RET
  56. ;
  57. ; Write to the UART Command Port
  58. ;
  59. WR$SCRCTL:
  60.     PUSH    D
  61.     LXI    D,SCRCTL
  62.     CALL    POKE
  63.     POP    D
  64.     RET
  65. ;
  66. ; Read the UART Data Register
  67. ;
  68. RD$DATREG:
  69.     PUSH    D
  70.     LXI    D,DATREG
  71.     CALL    PEEK
  72.     POP    D
  73.     RET
  74. ;
  75. ; Write to the UART Data Register
  76. ;
  77. WR$DATREG: PUSH    D
  78.     LXI    D,DATREG
  79.     CALL    POKE
  80.     POP    D
  81.     RET
  82. ;
  83. ; Read a byte from CPS clock register
  84. ;
  85. RD$CLKDATA:
  86.     PUSH    D
  87.     LXI    D,CLKREG    ; Select clock data
  88.     CALL    PEEK
  89.     POP    D
  90.     RET
  91. ;
  92. ; PEEK at 1 byte in Apple address space
  93. ;    ENTRY  DE = Address in 6502 RAM/ROM
  94. ;    EXIT   A  = Data from 6502
  95. ;
  96. PEEK:    PUSH    B
  97.     MVI    C,PEEK1BYTE
  98.     CALL    WRBYTEAPPL
  99.     CALL    WRWORD
  100.     CALL    RDBYTEAPPL
  101.     POP    B
  102.     RET
  103. ;
  104. ; POKE 1 byte to Apple address space
  105. ;    ENTRY  DE = Address in 6502 RAM/ROM
  106. ;    EXIT   A  = data to 6502
  107. ;
  108. POKE:    PUSH    B
  109.     MOV    B,A
  110.     MVI    C,POKE1BYTE
  111.     CALL    WRBYTEAPPL
  112.     CALL    WRWORD
  113.     MOV    C,B
  114.     CALL    WRBYTEAPPL
  115.     POP    B
  116.     RET
  117. ;
  118. ; This routine intializes Serial Port of CPS card and (optionally)
  119. ; initializes ASCII commanded modem.  NOTE: PSW and BAUD must be set
  120. ; by two sequential writes to DATREG with SCRCTL access open.
  121. ;
  122. MDINIT:    MVI    A,80H
  123.     CALL    WR$SCRCTL
  124.     MVI    A,15H        ; Drop DTR and reset serial I/O
  125.     CALL    WR$STAREG
  126.     MVI    B,20
  127. ;
  128. MDDLOP:    CALL    DELAY        ; 2 second delay
  129.     DCR    B
  130.     JNZ    MDDLOP
  131.     MVI    A,27H        ; Now re-enable serial port
  132.     CALL    WR$STAREG
  133.     MVI    A,4EH        ; Set PSW = 8N1  (1st DATREG write)
  134.     CALL    WR$DATREG
  135.     MVI    A,3AH        ; Default to 2400 baud
  136. ;
  137.      IF    HS1200
  138.     MVI    A,37H
  139.      ENDIF            ; HS1200
  140. ;
  141.      IF    HS300
  142.     MVI    A,35H
  143.      ENDIF            ; HS300
  144. ;
  145.     CALL    WR$DATREG    ; Set baud (2nd DATREG write)
  146.     XRA    A        ; Close BAUD/PSW access
  147.     CALL    WR$SCRCTL
  148. ;
  149.      IF    IMODEM
  150.     CALL    IMINIT        ; Initialize smartmodem
  151.      ENDIF            ; IMODEM
  152. ;
  153.     RET
  154. ;
  155. ; This routine is called when NUBYE is to go off the air
  156. ;
  157. MDQUIT:     IF    IMODEM
  158.     CALL    IMQUIT
  159.      ENDIF            ; IMODEM
  160. ;
  161. ; This routine will shut everything down permanently.
  162. ;
  163. MDSTOP:    MVI    A,80H        ; Enable UART command register
  164.     CALL    WR$SCRCTL
  165.     MVI    A,5        ; Disable DTR and RTS (UART Cmd Reg)
  166.     CALL    WR$STAREG
  167.     XRA    A        ; Enable CPS status register
  168.     CALL    WR$SCRCTL
  169.     CALL    DELAY        ; 100 msec delay
  170.     RET
  171. ;
  172. ; The following is a routine to determine if there is a character wait-
  173. ; ing to be received.  If none are there, the Zero flag will be set,
  174. ; otherwise, 255 will be returned in register A.
  175. ;
  176. MDINST:    CALL    RD$STAREG    ; Read UART command register
  177.     ANI    2        ; Mask everything but RxRDY, char ready?
  178.     RZ            ; No, then return
  179.     ORI    0FFH        ; Yes, be sure to set flag and A reg
  180.     RET
  181. ;
  182. ; The following is a routine to determine if the transmit buffer is
  183. ; empty.  If it is empty, it will return with the Zero flag clear.  If
  184. ; the transmitter is busy, then it will return with the Zero flag set.
  185. ;
  186. ;
  187. MDOUTST:CALL    RD$STAREG    ; Read status register
  188.     ANI    1        ; Mask everything but TxRDY and...
  189.     RET            ; Return with flags set
  190. ;
  191. ; The following is a routine that will check to make sure we still have
  192. ; carrier.  If there is no carrier, it will return with the Zero flag
  193. ; set.    There are two entry points to this section: the 1st MDCRDL delays
  194. ; for 2 seconds or until carrier is detected.  The second is the normal
  195. ; entry for carrier check.
  196. ;
  197. MDCRDL:    PUSH    B
  198.     MVI    B,20        ; Set for 2 sec delay max
  199. ;
  200. MDCK2:    CALL    DELAY        ; Wait 100 msecs
  201.     CALL    MDCARCK
  202.     JNZ    MDCK1        ; If carrier, then return
  203.     DCR    B
  204.     JNZ    MDCK2        ; If not 2 secs, then continue timing
  205. ;
  206. MDCK1:    POP    B        ; When done fall thru to carrier check
  207. ;
  208. ;
  209. ; This is normal carrier check routine.
  210. ;
  211. MDCARCK:CALL    RD$STAREG    ; Read status register
  212.     ANI    080H        ; Use DSR bit instead of DTR bit
  213.     RET
  214. ;
  215. ; The following is a routine that will input one character from the
  216. ; CPS UART register.
  217. ;
  218. MDINP:    CALL    RD$DATREG    ; Get character
  219.     RET
  220. ;
  221. ; The following is a routine that will output one character in register
  222. ; A to the CPS UART data register.
  223. ;
  224. MDOUTP:    CALL    WR$DATREG    ; Send character to CPS UART
  225.     RET
  226. ;
  227. ; The following routines set the CPS card to a specified baud rate. A
  228. ; common setup routine is jumped to after baud setup byte in local
  229. ; storage.
  230. ;
  231. SET300:    MVI    A,35H        ; 300 baud setup byte
  232.     STA    MBSET
  233.     JMP    BPSET        ; Jump to psw/baud set routine
  234. ;
  235. SET1200:MVI    A,37H        ; 1200 bps byte
  236.     STA    MBSET
  237.     JMP    BPSET
  238. ;
  239. SET2400:MVI    A,3AH        ; 2400 bps byte
  240.     STA    MBSET
  241. ;
  242. BPSET:    MVI    A,80H        ; Open command register
  243.     CALL    WR$SCRCTL    ; By storing 80H in SCRCTL
  244.     MVI    A,27H        ; Initialize the serial chip
  245.     CALL    WR$STAREG    ; By storing 27H in STAREG
  246.     MVI    A,4EH        ; Set default format 8N1
  247.     CALL    WR$DATREG
  248.     LDA    MBSET        ; Get baud rate byte from local storage
  249.     CALL    WR$DATREG
  250.     XRA    A
  251.     CALL    WR$SCRCTL    ; Close command port by storing 0
  252.     RET
  253. ;
  254. MBSET:    DB    0        ; Storage for baud setup byte
  255. ;
  256. ; end of insert
  257. ; -------------
  258.