home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol074
/
u2651.asm
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
6KB
|
247 lines
;****************************************************************
;* *
;* 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