|
|
|
@ -101,7 +101,7 @@ ACIA_INITUNIT: |
|
|
|
LD HL,ACIA_DEV ; POINT TO CURRENT UART DEVICE NUM |
|
|
|
LD A,(HL) ; PUT IN ACCUM |
|
|
|
INC (HL) ; INCREMENT IT (FOR NEXT LOOP) |
|
|
|
LD (IY),A ; UDPATE UNIT NUM |
|
|
|
LD (IY),A ; UPDATE UNIT NUM |
|
|
|
; |
|
|
|
#IF (INTMODE == 1) |
|
|
|
; ADD IM1 INT CALL LIST ENTRY |
|
|
|
@ -171,11 +171,10 @@ ACIAA_INT00: |
|
|
|
LD E,A ; SAVE BYTE READ |
|
|
|
LD A,(ACIAA_BUFCNT) ; GET CURRENT BUFFER USED COUNT |
|
|
|
CP ACIAA_BUFSZ ; COMPARE TO BUFFER SIZE |
|
|
|
;RET Z ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED |
|
|
|
JR Z,ACIAA_INT2 ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED |
|
|
|
INC A ; INCREMENT THE COUNT |
|
|
|
LD (ACIAA_BUFCNT),A ; AND SAVE IT |
|
|
|
CP ACIAA_BUFSZ - 5 ; BUFFER GETTING FULL? |
|
|
|
CP ACIAA_BUFSZ / 2 ; BUFFER GETTING FULL? |
|
|
|
JR NZ,ACIAA_INT0 ; IF NOT, BYPASS DEASSERTING RTS |
|
|
|
LD A,ACIA_RTSOFF ; VALUE TO DEASSERT RTS |
|
|
|
OUT (C),A ; DO IT |
|
|
|
@ -216,11 +215,10 @@ ACIAB_INT00: |
|
|
|
LD E,A ; SAVE BYTE READ |
|
|
|
LD A,(ACIAB_BUFCNT) ; GET CURRENT BUFFER USED COUNT |
|
|
|
CP ACIAB_BUFSZ ; COMPARE TO BUFFER SIZE |
|
|
|
;RET Z ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED |
|
|
|
JR Z,ACIAB_INT2 ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED |
|
|
|
INC A ; INCREMENT THE COUNT |
|
|
|
LD (ACIAB_BUFCNT),A ; AND SAVE IT |
|
|
|
CP ACIAB_BUFSZ - 5 ; BUFFER GETTING FULL? |
|
|
|
CP ACIAB_BUFSZ / 2 ; BUFFER GETTING FULL? |
|
|
|
JR NZ,ACIAB_INT0 ; IF NOT, BYPASS DEASSERTING RTS |
|
|
|
LD A,ACIA_RTSOFF ; VALUE TO DEASSERT RTS |
|
|
|
OUT (C),A ; DO IT |
|
|
|
@ -291,9 +289,8 @@ ACIAA_IN: |
|
|
|
LD A,(ACIAA_BUFCNT) ; GET COUNT |
|
|
|
DEC A ; DECREMENT COUNT |
|
|
|
LD (ACIAA_BUFCNT),A ; SAVE SAVE IT |
|
|
|
CP 5 ; BUFFER LOW THRESHOLD |
|
|
|
CP ACIAA_BUFSZ / 4 ; BUFFER LOW THRESHOLD |
|
|
|
JR NZ,ACIAA_IN0 ; IF NOT, BYPASS SETTING RTS |
|
|
|
|
|
|
|
LD C,(IY+3) ; C := ACIA CMD PORT |
|
|
|
LD A,ACIA_RTSON ; ASSERT RTS |
|
|
|
OUT (C),A ; DO IT |
|
|
|
@ -318,9 +315,8 @@ ACIAB_IN: |
|
|
|
LD A,(ACIAB_BUFCNT) ; GET COUNT |
|
|
|
DEC A ; DECREMENT COUNT |
|
|
|
LD (ACIAB_BUFCNT),A ; SAVE SAVE IT |
|
|
|
CP 5 ; BUFFER LOW THRESHOLD |
|
|
|
CP ACIAB_BUFSZ / 4 ; BUFFER LOW THRESHOLD |
|
|
|
JR NZ,ACIAB_IN0 ; IF NOT, BYPASS SETTING RTS |
|
|
|
|
|
|
|
LD C,(IY+3) ; C := ACIA CMD PORT |
|
|
|
LD A,ACIA_RTSON ; ASSERT RTS |
|
|
|
OUT (C),A ; DO IT |
|
|
|
@ -458,46 +454,40 @@ ACIA_QUERY: |
|
|
|
; |
|
|
|
; |
|
|
|
ACIA_DEVICE: |
|
|
|
LD D,CIODEV_ACIA ; D := DEVICE TYPE |
|
|
|
LD E,(IY) ; E := PHYSICAL UNIT |
|
|
|
LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232 |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
LD D,CIODEV_ACIA ; D := DEVICE TYPE |
|
|
|
LD E,(IY) ; E := PHYSICAL UNIT |
|
|
|
LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232 |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; ACIA DETECTION ROUTINE |
|
|
|
; |
|
|
|
ACIA_DETECT: |
|
|
|
;LD C,ACIA_BASE ; BASE PORT ADDRESS |
|
|
|
LD C,(IY+3) ; BASE PORT ADDRESS |
|
|
|
CALL ACIA_DETECT2 ; CHECK IT |
|
|
|
JR Z,ACIA_DETECT1 ; FOUND IT, RECORD IT |
|
|
|
;LD C,ACIA_ALTBASE ; ALT BASE PORT ADDRESS |
|
|
|
;CALL ACIA_DETECT2 ; CHECK IT |
|
|
|
;JR Z,ACIA_DETECT1 ; FOUND IT, RECORD IT |
|
|
|
LD A,ACIA_NONE ; NOTHING FOUND |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
ACIA_DETECT1: |
|
|
|
; ACIA FOUND, RECORD IT |
|
|
|
;LD A,C ; BASE PORT ADDRESS TO A |
|
|
|
;LD (IY+3),A ; SAVE ACTIVE BASE PORT |
|
|
|
LD A,ACIA_ACIA ; RETURN CHIP TYPE |
|
|
|
RET ; DONE |
|
|
|
LD C,(IY+3) ; BASE PORT ADDRESS |
|
|
|
CALL ACIA_DETECT2 ; CHECK IT |
|
|
|
JR Z,ACIA_DETECT1 ; FOUND IT, RECORD IT |
|
|
|
LD A,ACIA_NONE ; NOTHING FOUND |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
ACIA_DETECT1: |
|
|
|
; ACIA FOUND, RECORD IT |
|
|
|
LD A,ACIA_ACIA ; RETURN CHIP TYPE |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
ACIA_DETECT2: |
|
|
|
; LOOK FOR ACIA AT PORT ADDRESS IN C |
|
|
|
LD A,$03 ; MASTER RESET |
|
|
|
OUT (C),A ; DO IT |
|
|
|
IN A,(C) ; GET STATUS |
|
|
|
OR A ; CHECK FOR ZERO |
|
|
|
RET NZ ; RETURN IF NOT ZERO |
|
|
|
LD A,$02 ; CLEAR MASTER RESET |
|
|
|
OUT (C),A ; DO IT |
|
|
|
LD A,$03 ; MASTER RESET |
|
|
|
OUT (C),A ; DO IT |
|
|
|
IN A,(C) ; GET STATUS |
|
|
|
OR A ; CHECK FOR ZERO |
|
|
|
RET NZ ; RETURN IF NOT ZERO |
|
|
|
LD A,$02 ; CLEAR MASTER RESET |
|
|
|
OUT (C),A ; DO IT |
|
|
|
; CHECK FOR EXPECTED BITS: |
|
|
|
; TDRE=1, DCD & CTS = 0 |
|
|
|
AND %00001110 ; BIT MASK FOR "STABLE" BITS |
|
|
|
CP %00000010 ; EXPECTED VALUE |
|
|
|
RET ; RETURN RESULT, Z = CHIP FOUND |
|
|
|
AND %00001110 ; BIT MASK FOR "STABLE" BITS |
|
|
|
CP %00000010 ; EXPECTED VALUE |
|
|
|
RET ; RETURN RESULT, Z = CHIP FOUND |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
|