forked from MirrorRepos/RomWBW
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.
119 lines
2.6 KiB
119 lines
2.6 KiB
;
|
|
;==================================================================================================
|
|
; NABU INTERRUPT INTERCEPTOR
|
|
;==================================================================================================
|
|
;
|
|
NABU_INT1CLR .EQU $68
|
|
NABU_TICCNT .EQU $FFEA ; TICCNT AT $FFEA IS COPIED DOWN TO $000B
|
|
;
|
|
; NABU INTERRUPT ENABLE PORT AND STATUS PORTS ARE MANAGED BY THE
|
|
; PSG IO PORTS.
|
|
;
|
|
; INTERRUPT ENABLE (OUTPUT) - PSG PORT A
|
|
;
|
|
; D7 - HCCA Receive
|
|
; D6 - HCCA Send
|
|
; D5 - Keyboard
|
|
; D4 - Video Frame Sync
|
|
; D3 - Option Card 0 (J9)
|
|
; D2 - Option Card 1 (J10)
|
|
; D1 - Option Card 2 (J11)
|
|
; DO - Option Card 3 (J12)
|
|
;
|
|
; STATUS BYTE (INPUT) - PSG PORT B
|
|
;
|
|
; D7 - N.C.
|
|
; D6 - Overrun Error (HCCA UART)
|
|
; D5 - Framing Error (HCCA UART)
|
|
; D4 - Printer Busy
|
|
; D3 - A2 Priority
|
|
; D2 - A1 Priority
|
|
; D1 - AO Priority
|
|
; DO - Interrupt Request
|
|
;
|
|
; PORTS TO MANAGE PSG
|
|
;
|
|
NABU_RSEL .EQU $41 ; SELECT PSG REGISTER
|
|
NABU_RDAT .EQU $40 ; WRITE TO SELECTED REGISTER
|
|
NABU_RIN .EQU $40 ; READ FROM SELECTED REGISTER
|
|
;
|
|
DEVECHO "NABU: IO="
|
|
DEVECHO NABU_INT1CLR
|
|
DEVECHO "\n"
|
|
;
|
|
;
|
|
; HARDWARE RESET PRIOR TO ROMWBW CONSOLE INITIALIZATION
|
|
;
|
|
NABU_PREINIT:
|
|
; INITIALIZE THE NABU PSG I/O PORTS
|
|
; PORT A IN WRITE MODE AND SET ALL BITS TO ZERO
|
|
; PORT B IN READ MODE
|
|
;
|
|
CALL NABU_SETPSG
|
|
;
|
|
;#IF (INTMODE == 1)
|
|
; ; ADD TO INTERRUPT CHAIN
|
|
; LD HL,NABU_STAT
|
|
; CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
|
|
;#ENDIF
|
|
;
|
|
;#IF (INTMODE == 2)
|
|
; LD HL,NABU_STAT
|
|
; LD (IVT(INT_NABUKB)),HL ; IVT INDEX
|
|
;#ENDIF
|
|
; RET
|
|
;
|
|
NABU_INIT:
|
|
CALL NEWLINE ; FORMATTING
|
|
PRTS("NABU: INT1$")
|
|
; XOR A
|
|
; OUT (NABU_INT1CLR),A
|
|
RET ; DONE
|
|
;
|
|
NABU_SETPSG:
|
|
; SET I/O PORT MODES
|
|
LD A,7 ; PSG R7 (ENABLE REG)
|
|
OUT (NABU_RSEL),A ; SELECT IT
|
|
LD A,%01111111 ; PORT B INPUT, PORT A OUPUT
|
|
OUT (NABU_RDAT),A ; SET IT
|
|
;
|
|
; SET PORT A TO VALUE 0
|
|
LD A,14 ; PSG R14 (PORT A DATA)
|
|
OUT (NABU_RSEL),A ; SELECT IT
|
|
#IF (INTMODE > 0)
|
|
LD A,%00100000 ; ENABLE NABU KB INTS
|
|
#ELSE
|
|
XOR A
|
|
#ENDIF
|
|
OUT (NABU_RDAT),A ; SET IT
|
|
;
|
|
LD A,15
|
|
OUT (NABU_RSEL),A
|
|
IN A,(NABU_RIN)
|
|
RET
|
|
;
|
|
; INTERRUPT ENTRY POINT
|
|
;
|
|
NABU_STAT:
|
|
; CALL NABU_SETPSG
|
|
; XOR A
|
|
; OUT (NABU_INT1CLR),A ; CLEAR THE INTERRUPT
|
|
LD HL,(NABU_TICCNT) ; INCREMENT NABU TICK COUNTER
|
|
|
|
|
|
INC HL ; ... IN HBIOS PROXY
|
|
LD (NABU_TICCNT),HL
|
|
; LD A,(NABU_HBTICK) ; INCREMENT INTERNAL TICK CTR
|
|
; INC A
|
|
; LD (NABU_HBTICK),A
|
|
; CP $0A ; CALL HB_TICK EVERY 10 INTERRUPTS (50HZ)
|
|
; RET NZ ; NOT TIME THEN JUST RETURN
|
|
CALL HB_TICK ; DO NORMAL HBIOS TICK
|
|
XOR A
|
|
; LD (NABU_HBTICK),A ; RESET HBTICK COUNTER
|
|
INC A ; INTERRUPT HANDLED
|
|
RET
|
|
;
|
|
NABU_HBTICK:
|
|
.DB 0 ; INTERNAL TICK CTR
|
|
;
|
|
|