home *** CD-ROM | disk | FTP | other *** search
- ;****************************************************************
- ;* *
- ;* BSTAM/BSTMS Interface routines for 2651 UART. *
- ;* on Godbout System Support 1 Board *
- ;* or Godbout Interfacer 3/4 Board *
- ;* *
- ;****************************************************************
- ;
- ; By Bill Bolton
- ; Software Tools,
- ; P.O. Box 80,
- ; Newport Beach,
- ; NSW, 2106
- ; AUSTRALIA
- ;
- TITLE '2651 UART Interface for BSTAM, Software Tools'
- ;
- ;************************************************
- ;* *
- ;* Miscellaneous Equates *
- ;* *
- ;************************************************
- ;
- TRUE EQU 0FFFFH
- FALSE EQU NOT TRUE
-
- BDOS EQU 0005 ;CP/M BDOS entry point
- ALF EQU 0AH ;ASCII line feed
- ACR EQU 0DH ;ASCII carriage return
- ;
- ;************************************************
- ;* *
- ;* 2651 Baud Rate Table *
- ;* *
- ;************************************************
- ;
- B50 EQU 0000B ;50 bps
- B75 EQU 0001B ;75 bps
- B110 EQU 0010B ;110 bps
- B134 EQU 0011B ;134.5 bps
- B150 EQU 0100B ;150 bps
- B300 EQU 0101B ;300 bps
- B600 EQU 0110B ;600 bps
- B1200 EQU 0111B ;1200 bps
- B1800 EQU 1000B ;1800 bps
- B2000 EQU 1001B ;2000 bps
- B2400 EQU 1010B ;2400 bps
- B3600 EQU 1011B ;3600 bps
- B4800 EQU 1100B ;4800 bps
- B7200 EQU 1101B ;7200 bps
- B9600 EQU 1110B ;9600 bps
- B19200 EQU 1111B ;19200 bps
- ;
- ;************************************************
- ;* *
- ;* 2651 Equates *
- ;* *
- ;************************************************
- ;
- BASE EQU 5CH ;UART base register
- DATA EQU BASE+0 ;Data port
- STATUS EQU BASE+1 ;Status port
- MODE EQU BASE+2 ;Mode register
- CMMD EQU BASE+3 ;Command register
- USER EQU BASE+7 ;User select port
- UNUM EQU 6 ;Modem user number
- MODE1 EQU 01101110B ;Asynch,16x,8 data bits,
- ; no parity, even, 1 stop bit
- MODE2 EQU 01110000B + B300 ;Baud rate
- CMMDB EQU 00100111B ;Tx enabled, RX enabled, no break
- ; DTR high, RTS high
- ERESET EQU CMMDB+8 ;Error reset
- ;
- SYSSPT EQU TRUE ;True for Godbout system support
- INTER3 EQU NOT SYSSPT ;True for Godbout Interfacer 3
- ;
- ORG 103H
- ;
- BEGIN:
- INITIL:
- JMP INITIU ;UART/USART INITIALATION ENTRY POINT
- INSPORT:
- JMP INSPRU ;STATUS PORT READ ENTRY POINT
- ERRSET:
- JMP ERRSTU ;UART/USART ERROR RESET ENTRY POINT
- INPORT:
- JMP INPRTU ;READ DATA PORT ENTRY POINT
- OUTPORT:
- JMP OUTPRU ;WRITE DATA PORT ENTRY POINT
- ;
- ;
- ; THIS IS THE UART/USART INITIALATION ROUTINE.
- ; TO BE COMPATIBLE WITH MOST BSTAM USERS USE FOLLOWING
- ; INITIALISATION GUIDE LINES:
- ; 1. USE 1 STOP BIT (OPTIONAL - 2)
- ; 2. USE 8 DATA BITS (MUST)
- ; 3. USE 1 START BIT (MUST)
- ; 4. USE 16X FOR CLOCK RATE (MUST)
- ; 5. USE ASYNCHRONOUS MODE ONLY (MUST)
- ;
- INITIU:
- CALL SIGNON ;Announce version
-
- if inter3
- MVI A,UNUM
- OUT USER ;Select UART
- endif ;inter3
-
- MVI A,MODE1 ;Get first mode word
- OUT MODE
- MVI A,MODE2 ;Get second mode word
- OUT MODE
- MVI A,CMMDB ;Get command byte
- OUT CMMD
- RET ;RETURN TO BSTAM
- ;
- ;
- ; THIS IS THE STATUS READ PORT ROUTINE.
- ; WHEN EXITING THIS ROUTINE BSTAM EXPECTS IN REGISTER A
- ; THE FOLLOWING BITS TO BE SET IF NEEDED:
- ; 1. 20 BIT SET IF FRAMING ERROR
- ; 2. 10 BIT SET IF OVERRUN ERROR
- ; 3. 08 BIT SET IF PARITY ERROR
- ; 4. 04 BIT SET IF TRANSMITTER EMPTY
- ; IF YOUR UART/USART DOES NOT HAVE TRANSMITTER
- ; EMPTY FEATURE, THEN ALWAYS SET THIS BIT ON.
- ; 5. 02 BIT SET IF RECEIVER READY
- ; 6. 01 BIT SET IF TRANSMITTER READY
- ; 7. DO NOT SET THE 80 BIT OR 40 BIT
- ;
- ;
- ;
- INSPRU:
- if inter3
- MVI A,UNUM
- OUT USER ;Select UART
- endif ;inter3
-
- IN STATUS ;Get status
- ORI 4 ;Force Tx empty high
- RET
- ;
- ;
- ; YOUR UART/USART MAY NOT NEED TO BE RESET IF FRAMING,
- ; OVERRUN, OR PARITY ERROR IS FOUND. IF THIS IS YOUR
- ; CASE, JUST DO A RETURN.
- ;
- ;
- ;
- ;
- ERRSTU:
- if inter3
- MVI A,UNUM
- OUT USER ;Select UART
- endif ;inter3
-
- MVI A,ERESET ;Reset error flags in 2651
- OUT CMMD
- MVI A,CMMDB ;Restore normal operation
- OUT CMMD
- RET
- ;
- ; THIS IS THE READ DATA PORT ROUTINE.
- ; BEFORE THIS ROUTINE IS ENTERED THE 02 BIT OF
- ; STATUS READ ROUTINE MUST HAVE BEEN SET.
- ; DO NOT CLEAR THE 80 BIT FROM THE DATA INPUT PORT.
- ; RETURN WITH REGISTER A LOADED WITH INPUT DATA.
- ;
- ;
- INPRTU:
- if inter3
- MVI A,UNUM
- OUT USER ;Select UART
- endif ;inter3
-
- IN DATA ;Get data
- RET
- ;
- ; THIS IS THE WRITE DATA PORT ROUTINE.
- ; BEFORE THIS ROUTINE IS ENTERED THE 04 BIT AND 01 BIT
- ; OF STATUS READ MUST BE SET.
- ; DO NOT CLEAR THE 80 BIT FROM THE DATA OUTPUT PORT.
- ; REGISTER A CONTAINS THE OUTPUT DATA.
- ;
- OUTPRU:
- if inter3
- PUSH PSW
- MVI A,UNUM
- OUT USER ;Select UART
- POP PSW
- endif ;inter3
-
- OUT DATA ;Send data
- RET
- ;
- ;
- SIGNON: PUSH B ;Save the environment
- PUSH D
- PUSH H
- LXI D,MESSGE
- MVI C,9 ;BDOS display string command
- CALL BDOS ;Announce version to user
- POP H ;Restore the enviroment
- POP D
- POP B
- RET
- ;
- hexnum macro num
- if (num/16) > 9
- db (num/16 and 0fh) + 'A' - 10
- else
- db (num/16 and 0fh) + '0'
- endif
- if (num and 0fh) > 9
- db (num and 0fh) + 'A' - 10
- else
- db (num and 0fh) + '0'
- endif
- endm
-
- MESSGE: DB ACR,ALF,ALF
- DB 'Version 4.5, March 29, 1982 by Software Tools',ACR,ALF
- DB '2651 UART on '
-
- if sysspt
- DB 'Godbout System Support 1 Board'
- endif ;sysspt
-
- if inter3
- DB 'Godbout Interfacer 3 Board'
- endif ;sysspt
-
- DB ACR,ALF
- DB 'UART Addressed at '
- hexnum %BASE
- DB 'H, 300 bps, no parity.',ACR,ALF
-
- if inter3
- DB 'UART Relative User '
- hexnum %UNUM
- DB ',',ACR,ALF
- endif ;inter3
-
- DB '$'
- ;
- END BEGIN
-