You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

116 lines
2.1 KiB

;
;==================================================================================================
; SIMPLE SERIAL DRIVER
;==================================================================================================
;
; TODO:
;
DEVECHO "SSER: IO="
DEVECHO SSERSTATUS
DEVECHO "\n"
;
;
;
SSER_PREINIT:
;
; ADD OURSELVES TO CIO DISPATCH TABLE
;
LD D,0 ; PHYSICAL UNIT IS ZERO
LD E,CIODEV_SSER ; DEVICE TYPE
LD BC,SSER_FNTBL ; BC := FUNCTION TABLE ADDRESS
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
;
XOR A
RET
;
;
;
SSER_INIT:
CALL NEWLINE
PRTS("SSER:$")
PRTS(" IO=0x$") ; FORMATTING
LD A,SSERSTATUS
CALL PRTHEXBYTE
;
XOR A ; SIGNAL SUCCESS
RET
;
; DRIVER FUNCTION TABLE
;
SSER_FNTBL:
.DW SSER_IN
.DW SSER_OUT
.DW SSER_IST
.DW SSER_OST
.DW SSER_INITDEV
.DW SSER_QUERY
.DW SSER_DEVICE
#IF (($ - SSER_FNTBL) != (CIO_FNCNT * 2))
.ECHO "*** INVALID SSER FUNCTION TABLE ***\n"
#ENDIF
;
;
;
SSER_IN:
CALL SSER_IST ; CHECK FOR CHAR PENDING
JR Z,SSER_IN ; WAIT FOR IT IF NECESSARY
IN A,(SSERDATA) ; READ THE CHAR
LD E,A
RET
;
;
;
SSER_IST:
IN A,(SSERSTATUS) ; READ LINE STATUS REGISTER
#IF (SSERIINV)
CPL
#ENDIF
AND SSERIRDY ; ISOLATE DATA READY
JP Z,CIO_IDLE ; RETURN VIA IDLE PROCESSING
OR $FF ; SET A=$FF TO SIGNAL READY
RET ; RETURN
;
;
;
SSER_OUT:
CALL SSER_OST ; CHECK FOR OUTPUT READY
JR Z,SSER_OUT ; WAIT IF NECESSARY
LD A,E ; RECOVER THE CHAR TO WRITE
OUT (SSERDATA),A ; WRITE THE CHAR
RET
;
;
;
SSER_OST:
IN A,(SSERSTATUS) ; READ LINE STATUS REGISTER
#IF (SSEROINV)
CPL
#ENDIF
AND SSERORDY ; ISOLATE OUTPUT RDY
JP Z,CIO_IDLE ; RETURN VIA IDLE PROCESSING
OR $FF ; SET A=$FF TO SIGNAL READY
RET ; RETURN
;
;
;
SSER_INITDEV:
SYSCHKERR(ERR_NOTIMPL)
RET
;
;
;
SSER_QUERY:
LD DE,SSERCFG
XOR A
RET
;
;
;
SSER_DEVICE:
LD D,CIODEV_SSER ; D := DEVICE TYPE
LD E,0 ; E := DEVICE NUM, ALWAYS 0
LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,SSERSTATUS ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET