@ -24,13 +24,13 @@ SIO_SIO .EQU 1
SIO_RTSON .EQU $ EA
SIO_RTSOFF .EQU $ E8
;
# IF ( INTMODE = = 0 )
SIO_WR1VAL .EQU $ 00 ; WR1 VALUE FOR NO INTS
# ELSE
# IF (( SI OINTS ) & ( INTMODE > 0 ))
SIO_WR1VAL .EQU $ 18 ; WR1 VALUE FOR INT ON RECEIVED CHARS
# ELSE
SIO_WR1VAL .EQU $ 00 ; WR1 VALUE FOR NO INTS
# ENDIF
;
# IF (( INTMODE = = 2 ) | ( INTMODE = = 3 ))
# IF (( SI OINTS ) & ( INTMODE > = 2 ))
;
SIO0_IVT .EQU IVT ( INT_SIO0 )
SIO1_IVT .EQU IVT ( INT_SIO1 )
@ -146,7 +146,7 @@ SIO_PREINIT2:
ADD IY , DE ; BUMP IY TO NEXT ENTRY
DJNZ SI O_PREINIT0 ; LOOP UNTIL DONE
;
# IF ( INTMODE > = 1 )
# IF (( SI OINTS ) & ( INTMODE > 0 ) )
; SETUP INT VECTORS AS APPROPRIATE
LD A ,( SI O_DEV ) ; GET DEVICE COUNT
OR A ; SET FLAGS
@ -223,7 +223,7 @@ SIO_INIT1:
;
; RECEIVE INTERRUPT HANDLER
;
# IF ( INTMODE > 0 )
# IF (( SI OINTS ) & ( INTMODE > 0 ) )
;
; IM1 ENTRY POINT
;
@ -354,17 +354,7 @@ SIO_FNTBL:
;
;
;
# IF ( INTMODE = = 0 )
;
SIO_IN:
CALL SI O_IST ; CHAR WAITING?
JR Z , SI O_IN ; LOOP IF NOT
LD C ,( IY + 4 ) ; DATA PORT
IN E ,( C ) ; GET CHAR
XOR A ; SIGNAL SUCCESS
RET
;
# ELSE
# IF (( SI OINTS ) & ( INTMODE > 0 ))
;
SIO_IN:
CALL SI O_IST ; SEE IF CHAR AVAILABLE
@ -411,6 +401,17 @@ SIO_IN2:
HB_EI ; INTERRUPTS OK AGAIN
XOR A ; SIGNAL SUCCESS
RET ; AND DONE
;
# ELSE
;
SIO_IN:
CALL SI O_IST ; CHAR WAITING?
JR Z , SI O_IN ; LOOP IF NOT
LD C ,( IY + 4 ) ; DATA PORT
IN E ,( C ) ; GET CHAR
XOR A ; SIGNAL SUCCESS
RET
;
# ENDIF
;
;
@ -425,7 +426,17 @@ SIO_OUT:
;
;
;
# IF ( INTMODE = = 0 )
# IF (( SI OINTS ) & ( INTMODE > 0 ))
;
SIO_IST:
LD L ,( IY + 7 ) ; GET ADDRESS
LD H ,( IY + 8 ) ; ... OF RECEIVE BUFFER
LD A ,( HL ) ; BUFFER UTILIZATION COUNT
OR A ; SET FLAGS
JP Z , CIO_IDLE ; NOT READY, RETURN VIA IDLE PROCESSING
RET
;
# ELSE
;
SIO_IST:
LD C ,( IY + 3 ) ; CMD PORT
@ -438,16 +449,6 @@ SIO_IST:
INC A ; ASCCUM := 1 TO SIGNAL 1 CHAR WAITING
RET ; DONE
;
# ELSE
;
SIO_IST:
LD L ,( IY + 7 ) ; GET ADDRESS
LD H ,( IY + 8 ) ; ... OF RECEIVE BUFFER
LD A ,( HL ) ; BUFFER UTILIZATION COUNT
OR A ; SET FLAGS
JP Z , CIO_IDLE ; NOT READY, RETURN VIA IDLE PROCESSING
RET
;
# ENDIF
;
;
@ -853,7 +854,7 @@ SIO_INITGO:
;
; SET INTERRUPT VECTOR OFFSET WR2
;
# IF (( INTMODE = = 2 ) | ( INTMODE = = 3 ))
# IF (( SI OINTS ) & ( INTMODE > = 2 ))
LD A ,( IY + 2 ) ; CHIP / CHANNEL
SRL A ; SHIFT AWAY CHANNEL BIT
LD L , SI O0_VEC ; ASSUME CHIP 0
@ -893,7 +894,7 @@ SIO_INITPRT:
LD B , SI O_INITLEN ; COUNT OF BYTES TO WRITE
OTIR ; WRITE ALL VALUES
;
# IF ( INTMODE > 0 )
# IF (( SI OINTS ) & ( INTMODE > 0 ) )
;
; RESET THE RECEIVE BUFFER
LD E ,( IY + 7 )
@ -1108,17 +1109,7 @@ SIO_STR_SIO .DB "SIO$"
SIO_DEV .DB 0 ; DEVICE NUM USED DURING INIT
SIO_MAP .DB 0 ; CHIP PRESENCE BITMAP
;
# IF ( INTMODE = = 0 )
;
SIO0A_RCVBUF .EQU 0
SIO0B_RCVBUF .EQU 0
;
# IF ( SI OCNT > = 2 )
SIO1A_RCVBUF .EQU 0
SIO1B_RCVBUF .EQU 0
# ENDIF
;
# ELSE
# IF (( SI OINTS ) & ( INTMODE > 0 ))
;
; SIO0 CHANNEL A RECEIVE BUFFER
SIO0A_RCVBUF:
@ -1152,6 +1143,16 @@ SIO1B_BUF .FILL SIO_BUFSZ,0 ; RECEIVE RING BUFFER
;
# ENDIF
;
# ELSE
;
SIO0A_RCVBUF .EQU 0
SIO0B_RCVBUF .EQU 0
;
# IF ( SI OCNT > = 2 )
SIO1A_RCVBUF .EQU 0
SIO1B_RCVBUF .EQU 0
# ENDIF
;
# ENDIF
;
; SIO PORT TABLE
@ -1191,7 +1192,7 @@ SIO0A_CFG:
DEVECHO ", IO="
DEVECHO SI O0BASE
DEVECHO ", CHANNEL A"
# IF ( INTMODE > 0 )
# IF (( SI OINTS ) & ( INTMODE > 0 ) )
DEVECHO ", INTERRUPTS ENABLED"
# ENDIF
DEVECHO "\n"
@ -1231,7 +1232,7 @@ SIO0B_CFG:
DEVECHO ", IO="
DEVECHO SI O0BASE
DEVECHO ", CHANNEL B"
# IF ( INTMODE > 0 )
# IF (( SI OINTS ) & ( INTMODE > 0 ) )
DEVECHO ", INTERRUPTS ENABLED"
# ENDIF
DEVECHO "\n"
@ -1259,7 +1260,7 @@ SIO1A_CFG:
# IF ( SI O1MODE = = SI OMODE_RC )
DEVECHO "RC"
# ENDIF
;
# IF ( SI O1MODE = = SI OMODE_SMB )
DEVECHO "SMB"
# ENDIF
@ -1272,7 +1273,7 @@ SIO1A_CFG:
DEVECHO ", IO="
DEVECHO SI O1BASE
DEVECHO ", CHANNEL A"
# IF ( INTMODE > 0 )
# IF (( SI OINTS ) & ( INTMODE > 0 ) )
DEVECHO ", INTERRUPTS ENABLED"
# ENDIF
DEVECHO "\n"
@ -1310,7 +1311,7 @@ SIO1B_CFG:
DEVECHO ", IO="
DEVECHO SI O1BASE
DEVECHO ", CHANNEL B"
# IF ( INTMODE > 0 )
# IF (( SI OINTS ) & ( INTMODE > 0 ) )
DEVECHO ", INTERRUPTS ENABLED"
# ENDIF
DEVECHO "\n"