|
|
|
@ -47,6 +47,8 @@ SIOB_DAT .EQU SIOBASE + $05 |
|
|
|
SIO_PREINIT: |
|
|
|
; |
|
|
|
; SETUP THE DISPATCH TABLE ENTRIES |
|
|
|
; NOTE: INTS WILL BE DISABLED WHEN PREINIT IS CALLED AND THEY MUST REMIAIN |
|
|
|
; DISABLED. |
|
|
|
; |
|
|
|
LD B,SIO_CNT ; LOOP CONTROL |
|
|
|
LD C,0 ; PHYSICAL UNIT INDEX |
|
|
|
@ -115,7 +117,9 @@ SIO_INITUNIT: |
|
|
|
|
|
|
|
; SET DEFAULT CONFIG |
|
|
|
LD DE,-1 ; LEAVE CONFIG ALONE |
|
|
|
JP SIO_INITDEV ; IMPLEMENT IT AND RETURN |
|
|
|
; CALL INITDEVX TO IMPLEMENT CONFIG, BUT NOTE THAT WE CALL |
|
|
|
; THE INITDEVX ENTRY POINT THAT DOES NOT ENABLE/DISABLE INTS! |
|
|
|
JP SIO_INITDEVX ; IMPLEMENT IT AND RETURN |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
@ -164,7 +168,8 @@ SIOA_INT00: |
|
|
|
LD E,A ; SAVE BYTE READ |
|
|
|
LD A,(SIOA_CNT) ; GET CURRENT BUFFER USED COUNT |
|
|
|
CP SIOA_BUFSZ ; COMPARE TO BUFFER SIZE |
|
|
|
RET Z ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED |
|
|
|
;RET Z ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED |
|
|
|
JR Z,SIOA_INT2 ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED |
|
|
|
INC A ; INCREMENT THE COUNT |
|
|
|
LD (SIOA_CNT),A ; AND SAVE IT |
|
|
|
CP SIOA_BUFSZ - 5 ; BUFFER GETTING FULL? |
|
|
|
@ -185,6 +190,7 @@ SIOA_INT1: |
|
|
|
INC HL ; INCREMENT HEAD POINTER |
|
|
|
LD (SIOA_HD),HL ; SAVE IT |
|
|
|
; |
|
|
|
SIOA_INT2: |
|
|
|
; CHECK FOR MORE PENDING... |
|
|
|
XOR A ; A := 0 |
|
|
|
OUT (SIOA_CMD),A ; ADDRESS RD0 |
|
|
|
@ -208,7 +214,8 @@ SIOB_INT00: |
|
|
|
LD E,A ; SAVE BYTE READ |
|
|
|
LD A,(SIOB_CNT) ; GET CURRENT BUFFER USED COUNT |
|
|
|
CP SIOB_BUFSZ ; COMPARE TO BUFFER SIZE |
|
|
|
RET Z ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED |
|
|
|
;RET Z ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED |
|
|
|
JR Z,SIOB_INT2 ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED |
|
|
|
INC A ; INCREMENT THE COUNT |
|
|
|
LD (SIOB_CNT),A ; AND SAVE IT |
|
|
|
CP SIOB_BUFSZ - 5 ; BUFFER GETTING FULL? |
|
|
|
@ -229,6 +236,7 @@ SIOB_INT1: |
|
|
|
INC HL ; INCREMENT HEAD POINTER |
|
|
|
LD (SIOB_HD),HL ; SAVE IT |
|
|
|
; |
|
|
|
SIOB_INT2: |
|
|
|
; CHECK FOR MORE PENDING... |
|
|
|
XOR A ; A := 0 |
|
|
|
OUT (SIOB_CMD),A ; ADDRESS RD0 |
|
|
|
@ -418,7 +426,20 @@ SIO_OST: |
|
|
|
; MARK & SPACE PARITY AND 1.5 STOP BITS IS NOT SUPPORTED BY THE SIO. |
|
|
|
; INITIALIZATION WILL NOT BE COMPLETED IF AN INVALID SETTING IS DETECTED. |
|
|
|
; |
|
|
|
; NOTE THAT THERE ARE TWO ENTRY POINTS. INITDEV WILL DISABLE/ENABLE INTS |
|
|
|
; AND INITDEVX WILL NOT. THIS IS DONE SO THAT THE PREINIT ROUTINE ABOVE |
|
|
|
; CAN AVOID ENABLING/DISABLING INTS. |
|
|
|
; |
|
|
|
SIO_INITDEV: |
|
|
|
HB_DI ; DISABLE INTS |
|
|
|
CALL SIO_INITDEVX ; DO THE WORK |
|
|
|
HB_EI ; INTS BACK ON |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
SIO_INITDEVX: |
|
|
|
; |
|
|
|
; THIS ENTRY POINT BYPASSES DISABLING/ENABLING INTS WHICH IS REQUIRED BY |
|
|
|
; PREINIT ABOVE. PREINIT IS NOT ALLOWED TO ENABLE INTS! |
|
|
|
; |
|
|
|
; TEST FOR -1 WHICH MEANS USE CURRENT CONFIG (JUST REINIT) |
|
|
|
LD A,D ; TEST DE FOR |
|
|
|
@ -547,8 +568,6 @@ BROK: |
|
|
|
|
|
|
|
LD (IY+4),E ; SAVE LOW WORD |
|
|
|
LD (IY+5),D ; SAVE HI WORD |
|
|
|
|
|
|
|
HB_DI ; AVOID CONFLICTS |
|
|
|
; |
|
|
|
; PROGRAM THE SIO CHIP CHANNEL |
|
|
|
LD C,(IY+3) ; COMMAND PORT |
|
|
|
@ -580,7 +599,6 @@ BROK: |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
HB_EI ; READY FOR INTS AGAIN |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; RETURN |
|
|
|
; |
|
|
|
|