home *** CD-ROM | disk | FTP | other *** search
- ;------------------------------------------------------------------------------
- ;
- ; "HITE" Hardware Dependant Code Module for "2651" Family UARTS
- ;
- ; Version 1.0 , March 10, 1982 - By Software Tools
- ;
- ;------------------------------------------------------------------------------
- ;
- ; By Bill Bolton
- ; Software Tools,
- ; P.O. Box 80,
- ; Newport Beach,
- ; NSW, 2106
- ; AUSTRALIA
- ;
- TITLE '2651 UART Interface for HITE, Software Tools'
- ;
- ;DESCRIPTION:
- ;
- ; This code is generally applicable to any 2561 based port. Conditional
- ; assembly options are available for bank selected type ports such as
- ; found on the Godbout Interfacer 3 IEEE-696 card. The code has been
- ; extensively tested on both Godbout System Support and Interfacer 3
- ; Cards. The code as presented here is set up for assembly with the
- ; MAC or MACRO-80 assemblers. If you wish to assemble it with ASM the
- ; 'TITLE' line must be removed and the 'hexnum' macro must be eliminated
- ; and the port numbers in the signon message must be expanded by hand
- ; (i.e. you'll have to plug the ASCII values for the port addresses
- ; into the message yourself).
- ;
- ; See the additional notes near the INIT, EXIT and HEXNUM routines.
- ;
- ;************************************************
- ;* *
- ;* 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 108H
- SDRIVE:
- DB 0 ;SET NON-ZERO FOR SINGLE DRIVE SITE.
- BEEP:
- DB 0 ;SET NON-ZERO TO BEEP WHEN DONE.
- TIMEOUT:
- DB 6 ;COUNT-DOWN VALUE FOR TIMEOUT (ABOUT 30 SECS.)
- ;WITH A 4MHZ Z80, 1 = 5 SEC. (SORT OF).
- ; HENCE ZERO = 21.25 MINUTES.
- ;THE SELECTED VALUE IS A TRADE-OFF, SINCE A LOW
- ;VALUE MAY TIME-OUT WHILE THE RECEIVER IS
- ;WRITING TO DISC (WHICH DOES NO HARM BUT CLOGGS
- ;UP THE SCREEN WITH DISPLAYS) AND A HIGH VALUE
- ;CAUSES THE KEYBOARD TH BE CHECKED LESS OFTEN.
- ;
- ;------------------------------------------------------------------------------
- ;
- ;
- HINIT: JMP INIT ;UART/USART INITIALATION ENTRY POINT
- HEXIT: JMP EXIT ;SPECIAL USER EXIT ROUTINE
- HSTAT: JMP STAT ;STATUS PORT READ ENTRY POINT
- HRES: JMP RES ;UART/USART ERROR RESET ENTRY POINT
- HRX: JMP RX ;READ DATA PORT ENTRY POINT
- HTX: JMP TX ;WRITE DATA PORT ENTRY POINT
- ;
- ;
- ;------------------------------------------------------------------------------
- ; THIS IS THE UART/USART INITIALISATION ROUTINE.
- ; TO ENSURE COMPATIBILITY WITH OTHER USERS, THE
- ; FOLLOWING STANDARD IS RECCOMENDED :
- ; 1. USE 1 STOP BIT (OPTIONAL - 2)
- ; 2. USE 8 DATA BITS (MANDATORY)
- ; 3. USE 1 START BIT (MANDATORY)
- ; 4. USE ASYNC MODE ONLY (MANDATORY)
- ;
- ; For the 2651, the UART operating parameters
- ; (which are under software control) are read and stored.
- ; On exit from HITE these entry paramters will be
- ; restored to the UART. This allows HITE to
- ; transparently use different UART parameters from
- ; other programs that may utilise the port.
- ;
- INIT:
-
- if inter3
- MVI A,UNUM
- OUT USER ;Select UART
- endif ;inter3
-
- IN MODE ;Get first mode byte from entry format
- STA SMODE1 ;Save for exit
- IN MODE ;Get second mode byte
- STA SMODE2 ;Save for exit
- IN CMMD ;Get command byte
- STA SCMMDB ;Save for exit
- INIT1:
- MVI A,MODE1 ;Put first mode word for HITE format
- OUT MODE
- MVI A,MODE2 ;Put second mode word
- OUT MODE
- MVI A,CMMDB ;Put command byte
- OUT CMMD
- SIGNON:
- LXI D,MESSGE ;Message is at the end of this module
- MVI C,9 ;BDOS display string command
- JMP BDOS ;Announce version to user and return
- ;to HITE via BDOS RET instruction
- ;
- SMODE1 DB 0 ;Storage for first entry mode byte
- SMODE2 DB 0 ;Storage for second entry mode word
- SCMMDB DB 0 ;Storage for entry command byte
- ;
- ;------------------------------------------------------------------------------
- ; THIS SECTION IS INCLUDED FOR ANY "SPECIAL" USER
- ; EXIT CODE. (EG. RESTORING INTERRUPT VECTORS).
- ; IF UNUSED, A <RETURN> IS THE ONLY CODE NEEDED.
- ; AS THIS IS THE LAST ROUTINE OBEYED BEFORE THE TEST
- ; FOR "SINGLE DRIVE SITES" IS MADE, NO REGISTERS NEED
- ; TO BE PRESERVED.
- ;
- ;
- ; For the 2651, the UART operating parameters
- ; (entry parameters) will be restored to the UART.
- ; This allows HITE to transparently use different
- ; UART parameters from other programs that may utilise
- ; the port. This is particularly handy if the same
- ; port has to double for another function such as a
- ; printer port etc. It is also useful if a dedicated
- ; communications port must use different parameters
- ; (i.e number of stop bits) when communicating with
- ; a variety of other computers in text or binary
- ; modes.
- ;
- EXIT:
- LDA SMODE1 ;Get first mode byte of entry format
- OUT MODE
- LDA SMODE2 ;Get second mode byte of entry format
- OUT MODE
- LDA SCMMDB ;Get command byte of entry format
- JMP RES ;Do an error reset
- ;
- ;
- ;------------------------------------------------------------------------------
- ; THIS IS THE STATUS READ PORT ROUTINE.
- ; IT MUST EMULATE THE STATUS BITS FOR
- ; AN 8251 USART. I.E.
- ;
- ; BIT 00 SET IF TRANSMITTER READY
- ; BIT 01 SET IF RECEIVER READY
- ; BIT 02 SET IF TRANSMITTER EMPTY
- ; BIT 03 SET IF PARITY ERROR
- ; BIT 04 SET IF OVERRUN ERROR
- ; BIT 05 SET IF FRAMING ERROR
- ; BITS 06 AND 07 RESET (I.E. 0)
- ;
- ; *** NOTE: ONLY THE "A" REGISTER SHOULD BE ALTERED. ***
- ;
- ;
- STAT:
- if inter3
- MVI A,UNUM
- OUT USER ;Select UART
- endif ;inter3
-
- IN STATUS ;Get status
- ORI 4 ;Force Tx empty high
- RET
- ;
- ;
- ;------------------------------------------------------------------------------
- ; THIS IS THE ERROR RESET FOR UART/USART ROUTINE.
- ; IF YOUR UART/USART DOES NOT NEED TO BE RESET ON
- ; ERROR, WE RECCOMEND THAT YOU DO AN "IN DATA" TO
- ; CLEAR THE AIR AND RETURN.
- ;
- RES:
- 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 RECEIVE DATA ROUTINE.
- ; BEFORE THIS ROUTINE IS ENTERED BIT 02 OF THE
- ; STATUS READ ROUTINE MUST HAVE BEEN SET.
- ; DO NOT CLEAR THE TOP (MOST SIGNIFICANT) BIT.
- ; RETURN WITH REGISTER A LOADED WITH INPUT DATA.
- ;
- ;
- ;
- RX:
- if inter3
- MVI A,UNUM
- OUT USER ;Select UART
- endif ;inter3
-
- IN DATA ;Get data
- RET
- ;
- ;
- ;
- ;------------------------------------------------------------------------------
- ; THIS IS THE TRANSMIT DATA ROUTINE.
- ; BEFORE THIS ROUTINE IS ENTERED BIT 00
- ; AND BIT 3 OF STATUS READ MUST BE SET.
- ; DO NOT CLEAR THE TOP BIT BEFORE OUUDATUT.
- ; REGISTER A CONTAINS THE DATA.
- ;
- TX:
- if inter3
- PUSH PSW
- MVI A,UNUM
- OUT USER ;Select UART
- POP PSW
- endif ;inter3
-
- OUT DATA ;Send data
- RET
- ;
- ;
- ;
- ;------------------------------------------------------------------------------
- ;
- ; THE PURPOSE OF THIS MEASSGE IS TO SHOW
- ; (OR REMIND) YOU OF THE ACTUAL HARDWARE
- ; THAT THIS VERSION OF HITE IS SET UP FOR.
- ;
- ; Note that only one level of the stack
- ; is used on entry to the initialisation routine.
- ; The rest of the "reserved" stack space
- ; may be used for the signon message as this is only
- ; needed once near the start of HITE. Once the message
- ; has been displayed it can be safely overwritten by
- ; the stack.
- ;
- ;
- 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 'For 2651 UART'
-
- if sysspt
- DB ' on System Support 1 Board'
- endif ;sysspt
-
- if inter3
- DB ' on Interfacer 3 Board'
- endif ;sysspt
-
- DB ',',ACR,ALF
- DB 'at port '
- hexnum %BASE
- DB 'H, 300 bps, 1 stop, no parity.',ACR,ALF
-
- if inter3
- DB 'UART Offset '
- hexnum %UNUM
- DB ', '
- endif ;inter3
-
- DB 'Version 1.0, 10/May/82',ACR,ALF
- DB '$'
- ;
- ;
- ;
- ;
- ;------------------------------------------------------------------------------
- ;
- ;
- END
-