Browse Source

NABU Code Cleanup

pull/409/head v3.5.0-dev.42
Wayne Warthen 2 years ago
parent
commit
1cb5f0b3b4
  1. 12
      Source/HBIOS/hbios.asm
  2. 116
      Source/HBIOS/nabu.asm
  3. 58
      Source/HBIOS/nabukb.asm
  4. 2
      Source/HBIOS/sd.asm
  5. 55
      Source/HBIOS/tms.asm
  6. 2
      Source/ver.inc
  7. 2
      Source/ver.lib

12
Source/HBIOS/hbios.asm

@ -1167,13 +1167,6 @@ HBX_RETI:
PUSH BC ; SAVE BC
PUSH DE ; SAVE DE
PUSH IY ; SAVE IY
;
#IF (PLATFORM == PLT_NABU)
PUSH HL
LD HL,($FFEA) ; TICCNT COPIED TO...
LD ($000B),HL ; ...LOW MEMORY FOR CP/M
POP HL
#ENDIF
;
LD A,BID_BIOS ; HBIOS BANK
CALL HBX_BNKSEL_INT ; SELECT IT
@ -3019,6 +3012,11 @@ HB_Z280BUS1:
LDCTL HL,(C)
CALL PRTHEXWORDHL
CALL PC_SPACE
PRTS("ISR=$")
LD C,Z280_ISR ; INTERRUPT STATUS REGISTER
LDCTL HL,(C)
CALL PRTHEXWORDHL
CALL PC_SPACE
PRTS("BTCR=$")
LD C,Z280_BTCR ; BUS TIMING AND CONTROL REGISTER
LDCTL HL,(C)

116
Source/HBIOS/nabu.asm

@ -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

58
Source/HBIOS/nabukb.asm

@ -21,28 +21,6 @@
; WILL TRANSLATE SPECIAL KEYS ($E0-$FF) TO ROMWBW EQUIVALENTS. ALL
; OTHER KEYS WILL BE PASSED THROUGH AS IS.
;
; KBPORT EQU $90
;
; POLL FOR INPUT
; KBLOOP:
; IN A,(KBPORT+1)
; BIT 1,A
; JR Z,KBLOOP
; IN A,(KBPORT)
;
; INIT:
; XOR A
; CALL SUB12
; CALL SUB12
; CALL SUB12
; CALL SUB12
; CALL SUB12
; LD A,40H
; CALL SUB12
; LD A,4EH
; CALL SUB12
; LD A,04H
; CALL SUB12
;
NABUKB_IODAT .EQU $90 ; KEYBOARD DATA (READ)
NABUKB_IOSTAT .EQU $91 ; STATUS (READ), CMD (WRITE)
@ -51,22 +29,6 @@ NABUKB_IOSTAT .EQU $91 ; STATUS (READ), CMD (WRITE)
DEVECHO NABUKB_IODAT
DEVECHO "\n"
;
; SETUP INTERRUPT HANDLING, IF ENABLED
;
NABUKB_PREINIT:
#IF (INTMODE == 1)
; ADD TO INTERRUPT CHAIN
LD HL,NABUKB_INT
CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
#ENDIF
;
#IF (INTMODE == 2)
; INSTALL VECTOR
LD HL,NABUKB_INT
LD (IVT(INT_NABUKB)),HL ; IVT INDEX
#ENDIF
RET
;
; INITIALZIZE THE KEYBOARD CONTROLLER.
;
NABUKB_INIT:
@ -87,6 +49,26 @@ NABUKB_INIT:
CALL NABUKB_PUT
LD A,$04 ; ENABLE RECV
CALL NABUKB_PUT
;
#IF (INTMODE == 1)
; ADD TO INTERRUPT CHAIN
LD HL,NABUKB_INT
CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
#ENDIF
;
#IF (INTMODE == 2)
; INSTALL VECTOR
LD HL,NABUKB_INT
LD (IVT(INT_NABUKB)),HL ; IVT INDEX
#ENDIF
;
; ENABLE KEYBOARD INTERRUPTS ON NABU INTERRUPT CONTROLLER
LD A,14 ; PSG R14 (PORT A DATA)
OUT (NABU_RSEL),A ; SELECT IT
LD A,(NABU_CTLVAL) ; GET NABU CTL PORT SHADOW REG
SET 5,A ; ENABLE VDP INTERRUPTS
LD (NABU_CTLVAL),A ; UPDATE SHADOW REG
OUT (NABU_RDAT),A ; WRITE TO HARDWARE
;
XOR A
RET

2
Source/HBIOS/sd.asm

@ -294,7 +294,7 @@ SD_CS1 .EQU %00010000 ; IN/OUT:SD_OPREG:4 = CS1, SDCARD1 CS, IN=1 Card present
#ENDIF
SD_IOBASE .EQU SD_BASE ; IOBASE
SD_INVCS .EQU FALSE ; INVERT CS
DEVECHO "DUO"
DEVECHO "MT"
#ENDIF
;
;

55
Source/HBIOS/tms.asm

@ -179,10 +179,8 @@ NABUKBENABLE .SET TRUE ; INCLUDE NABU KEYBOARD SUPPORT
;======================================================================
;
TMS_PREINIT:
#IF (NABUKBENABLE == TRUE)
CALL NABUKB_PREINIT
#ENDIF
; DISABLE INTERRUPT GENERATION
; DISABLE INTERRUPT GENERATION UNTIL AFTER INTERRUPT HANDLER
; HAS BEEN INSTALLED.
LD A, (TMS_INITVDU_REG_1)
RES TMSINTEN, A ; RESET INTERRUPT ENABLE BIT
LD (TMS_INITVDU_REG_1), A
@ -228,10 +226,10 @@ TMS_INIT:
PRTS("COLECO$")
#ENDIF
#IF (TMSMODE == TMSMODE_MSXKBD)
PRTS("RCKBD$")
PRTS("MSXKBD$")
#ENDIF
#IF (TMSMODE == TMSMODE_MSX9958)
PRTS("RC_V9958$")
PRTS("MSXV9958$")
#ENDIF
#IF (TMSMODE == TMSMODE_NABU40)
PRTS("NABU-40$")
@ -255,16 +253,16 @@ TMS_INIT1:
CALL TMS_CRTINIT ; SETUP THE TMS CHIP REGISTERS
CALL TMS_LOADFONT ; LOAD FONT DATA FROM ROM TO TMS STRORAGE
CALL TMS_CLEAR ; CLEAR SCREEN, HOME CURSOR
#IF (TMSMODE == TMSMODE_N8)
#IF (PPKENABLE)
CALL PPK_INIT ; INITIALIZE PPI KEYBOARD DRIVER
#ENDIF
#IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO))
#IF (KBDENABLE)
CALL KBD_INIT ; INITIALIZE 8242 KEYBOARD DRIVER
#ENDIF
#IF MKYENABLE
#IF (MKYENABLE)
CALL MKY_INIT ; INITIALIZE MKY KEYBOARD DRIVER
#ENDIF
#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80))
#IF (NABUKBENABLE)
CALL NABUKB_INIT ; INITIALIZE NABU KEYBOARD DRIVER
#ENDIF
@ -280,14 +278,24 @@ TMS_INIT1:
LD (IVT(INT_VDP)),HL ; IVT INDEX
#ENDIF
;
; ENABLE VDP INTERRUPTS NOW
LD A, (TMS_INITVDU_REG_1)
SET TMSINTEN,A ; SET INTERRUPT ENABLE BIT
LD (TMS_INITVDU_REG_1),A
LD C, TMSCTRL1
CALL TMS_SET
;
#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80))
; ENABLE VDP INTERRUPTS ON NABU INTERRUPT CONTROLLER
LD A,14 ; PSG R14 (PORT A DATA)
OUT (NABU_RSEL),A ; SELECT IT
LD A,(NABU_CTLVAL) ; GET NABU CTL PORT SHADOW REG
SET 4,A ; ENABLE VDP INTERRUPTS
LD (NABU_CTLVAL),A ; UPDATE SHADOW REG
OUT (NABU_RDAT),A ; WRITE TO HARDWARE
#ENDIF
;
#ENDIF
;
; ADD OURSELVES TO VDA DISPATCH TABLE
LD BC,TMS_FNTBL ; BC := FUNCTION TABLE ADDRESS
@ -320,38 +328,37 @@ TMS_FNTBL:
.DW TMS_VDAFIL
.DW TMS_VDACPY
.DW TMS_VDASCR
#IF (TMSMODE == TMSMODE_N8)
#IF (PPKENABLE)
.DW PPK_STAT
.DW PPK_FLUSH
.DW PPK_READ
#ENDIF
#IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO))
#IF (KBDENABLE)
.DW KBD_STAT
.DW KBD_FLUSH
.DW KBD_READ
#ENDIF
#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80))
#IF (MKYENABLE)
.DW MKY_STAT
.DW MKY_FLUSH
.DW MKY_READ
#ENDIF
#IF (NABUKBENABLE)
.DW NABUKB_STAT
.DW NABUKB_FLUSH
.DW NABUKB_READ
#ENDIF
#IF ((TMSMODE == TMSMODE_MSX) | (TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_SCG) | (TMSMODE == TMSMODE_COLECO))
#IF MKYENABLE
.DW MKY_STAT
.DW MKY_FLUSH
.DW MKY_READ
#ELSE
#IF ((!PPKENABLE) & (!KBDENABLE) & (!NABUKBENABLE) & (!MKYENABLE))
.DW TMS_STAT
.DW TMS_FLUSH
.DW TMS_READ
#ENDIF
#ENDIF
.DW TMS_VDARDC
#IF (($ - TMS_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID TMS FUNCTION TABLE ***\n"
!!!!!
#ENDIF
;
TMS_VDAINI:
; RESET VDA
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
@ -359,7 +366,7 @@ TMS_VDAINI:
CALL TMS_CLEAR ; CLEAR SCREEN
XOR A ; SIGNAL SUCCESS
RET
;
TMS_VDAQRY:
LD C,$00 ; MODE ZERO IS ALL WE KNOW
LD D,TMS_ROWS ; ROWS
@ -367,7 +374,7 @@ TMS_VDAQRY:
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
XOR A ; SIGNAL SUCCESS
RET
;
TMS_VDARES:
#IF (CPUFAM == CPU_Z180)
CALL TMS_Z180IO

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 5
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.5.0-dev.41"
#DEFINE BIOSVER "3.5.0-dev.42"
#define rmj RMJ
#define rmn RMN
#define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 5
rup equ 0
rtp equ 0
biosver macro
db "3.5.0-dev.41"
db "3.5.0-dev.42"
endm

Loading…
Cancel
Save