|
|
|
@ -1,15 +1,12 @@ |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; NABU INTERRUPT INTERCEPTOR |
|
|
|
; NABU HARDWARE DRIVER |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
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 |
|
|
|
; NABU CONTROL PORT - INTERRUPT ENABLE (OUTPUT) - PSG PORT A |
|
|
|
; |
|
|
|
; D7 - HCCA Receive |
|
|
|
; D6 - HCCA Send |
|
|
|
@ -20,7 +17,13 @@ NABU_TICCNT .EQU $FFEA ; TICCNT AT $FFEA IS COPIED DOWN TO $000B |
|
|
|
; D1 - Option Card 2 (J11) |
|
|
|
; DO - Option Card 3 (J12) |
|
|
|
; |
|
|
|
; STATUS BYTE (INPUT) - PSG PORT B |
|
|
|
; THE CONTROL PORT IS WRITE ONLY AND THE BITS NEED TO BE MANAGED IN |
|
|
|
; MULTIPLE DRIVERS. BELOW, WE ALLOCATE NBAU_CTLVAL AS A SHADOW |
|
|
|
; REGISTER FOR THE CONTROL PORT. IT IS INITIALIZED TO ZERO HERE |
|
|
|
; (ALL INTS DISABLED). THE INDIVIDUAL BITS ARE SET AS APPROPIATE IN |
|
|
|
; THE DRIVERS THAT WANT THE INTERRUPTS ENABLED (NABUKB, TMS). |
|
|
|
; |
|
|
|
; NABU STATUS PORT - STATUS BYTE (INPUT) - PSG PORT B |
|
|
|
; |
|
|
|
; D7 - N.C. |
|
|
|
; D6 - Overrun Error (HCCA UART) |
|
|
|
@ -33,91 +36,54 @@ NABU_TICCNT .EQU $FFEA ; TICCNT AT $FFEA IS COPIED DOWN TO $000B |
|
|
|
; |
|
|
|
; 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 |
|
|
|
NABU_BASE .EQU $40 ; BASE PORT FOR NABU PSG |
|
|
|
NABU_RSEL .EQU NABU_BASE + 1 ; SELECT PSG REGISTER |
|
|
|
NABU_RDAT .EQU NABU_BASE + 0 ; WRITE TO SELECTED REGISTER |
|
|
|
NABU_RIN .EQU NABU_BASE + 0 ; READ FROM SELECTED REGISTER |
|
|
|
; |
|
|
|
DEVECHO "NABU: IO=" |
|
|
|
DEVECHO NABU_INT1CLR |
|
|
|
DEVECHO NABU_BASE |
|
|
|
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 |
|
|
|
; RESET SHADOW REGISTER IN CASE WE ARE DOING AN HBIOS |
|
|
|
; RESTART IN PLACE |
|
|
|
XOR A ; ALL INTERRUPTS DISABLED |
|
|
|
LD (NABU_CTLVAL),A ; SAVE IT |
|
|
|
; |
|
|
|
;#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 |
|
|
|
; INITIALIZE THE NABU PSG I/O PORTS |
|
|
|
; PORT A (CONTROL PORT) IN WRITE MODE |
|
|
|
; PORT B (STATUS PORT) IN READ MODE |
|
|
|
; INITIALIZE THE CONTROL REGISTER |
|
|
|
; |
|
|
|
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 |
|
|
|
LD A,%01111111 ; PORT B INPUT, PORT A OUPUT, AUDIO CHANNELS DISABLED |
|
|
|
OUT (NABU_RDAT),A ; SET IT |
|
|
|
; |
|
|
|
; SET PORT A TO VALUE 0 |
|
|
|
; INITIALIZE PORT A VALUE |
|
|
|
LD A,14 ; PSG R14 (PORT A DATA) |
|
|
|
OUT (NABU_RSEL),A ; SELECT IT |
|
|
|
#IF (INTMODE > 0) |
|
|
|
#IF (TMSTIMENABLE == TRUE) |
|
|
|
LD A,%00110000 ; ENABLE NABU KB & VDP INTS |
|
|
|
#ELSE |
|
|
|
LD A,%00100000 ; ENABLE NABU KB INTS |
|
|
|
#ENDIF |
|
|
|
#ELSE |
|
|
|
XOR A |
|
|
|
#ENDIF |
|
|
|
OUT (NABU_RDAT),A ; SET IT |
|
|
|
LD A,(NABU_CTLVAL) ; GET CTL VALUE SHADOW REG |
|
|
|
OUT (NABU_RDAT),A ; WRITE TO HARDWARE |
|
|
|
; |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
; POST CONSOLE INITIALIZATION |
|
|
|
; |
|
|
|
NABU_INIT: |
|
|
|
CALL NEWLINE ; FORMATTING |
|
|
|
PRTS("NABU: IO=$") |
|
|
|
LD A,NABU_BASE |
|
|
|
CALL PRTHEXBYTE |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
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 |
|
|
|
; DATA STORAGE |
|
|
|
; |
|
|
|
NABU_CTLVAL .DB 0 ; SHADOW VAL FOR NABU CONTROL REGISTER |
|
|
|
|