diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 01b2ee73..c5ad1178 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -152,6 +152,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] ; diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index d3bc9127..0b247c57 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -107,6 +107,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] ; diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 6d669358..20f54fb2 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -110,6 +110,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] ; diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index f834039d..0e751225 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -111,6 +111,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] +TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 65c4dbff..cc7fda0c 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -986,6 +986,10 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK ; ; MAKE SURE IM1 INT VECTOR IS RIGHT #IF (INTMODE == 1) + #IF (TMSTIMENABLE) + CALL TMS_INT_DIS ; SPECIAL CASE - NEED TO STOP TMS9918 FROM FIRING INTERRUPTS + #ENDIF ; WHEN DRIVER IS LOADED - IT WILL BE RELOADED + ; JP INT_IM1 IF INTERRUPT MODE ACTIVE LD A,$C3 LD ($0038),A diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 32b1739a..15dfdb34 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -186,6 +186,7 @@ AYMODE_RCZ180 .EQU 4 ; RC2014 SOUND MODULE BY ED BRINDLEY ON Z180 TMSMODE_NONE .EQU 0 TMSMODE_SCG .EQU 1 ; SCG ECB BOARD TMSMODE_N8 .EQU 2 ; N8 BUILT-IN VIDEO +TMSMODE_RC2014 .EQU 3 ; RC2014 BUILT-IN VIDEO ; ; SERIAL DEVICE CONFIGURATION CONSTANTS ; diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 35497a64..e6c05c0c 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -14,6 +14,24 @@ ; TMS DRIVER - CONSTANTS ;====================================================================== ; + +TMSCTRL1: .EQU 1 ; CONTROL BITS +TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT + +#IF TMSTIMENABLE + .ECHO "TMS INTERRUPTS ENABLED" +#ENDIF + +#IF (TMSMODE == TMSMODE_RC2014) +TMS_DATREG .EQU $BE ; READ/WRITE DATA +TMS_CMDREG .EQU $BF ; READ STATUS / WRITE REG SEL +TMS_PPIA .EQU 0 ; PPI PORT A +TMS_PPIB .EQU 0 ; PPI PORT B +TMS_PPIC .EQU 0 ; PPI PORT C +TMS_PPIX .EQU 0 ; PPI CONTROL PORT + +#ENDIF + #IF (TMSMODE == TMSMODE_N8) TMS_DATREG .EQU $98 ; READ/WRITE DATA @@ -93,6 +111,17 @@ TMS_INIT1: #IF (TMSMODE == TMSMODE_N8) CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER #ENDIF +#IF (INTMODE == 1 & TMSTIMENABLE) + ; ADD IM1 INT CALL LIST ENTRY + LD HL, TMS_TSTINT ; GET INT VECTOR + CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST + + LD A, (TMS_INIT9918_REG_1) + SET TMSINTEN, A ; SET INTERRUPT ENABLE BIT + LD (TMS_INIT9918_REG_1), A + LD C, TMSCTRL1 + CALL TMS_SET +#ENDIF ; ; ADD OURSELVES TO VDA DISPATCH TABLE LD BC,TMS_FNTBL ; BC := FUNCTION TABLE ADDRESS @@ -107,6 +136,23 @@ TMS_INIT1: ; XOR A ; SIGNAL SUCCESS RET + +#IFDEF APPBOOT +#IF TMSTIMENABLE + ; SPECIAL CASE FOR APPBOOT - NEEDING TO DISABLE INTERRUPT GENERATOR + ; ISSUE: + ; IF THE CURRENT ROMBOOT HAD LOADED THE TMS DRIVER + ; THEN THE ROMLOADER MAY START RECEIVING INTERRUPTS + ; FROM THE CHIP BEFORE THE TMS DRIVER HAS BEEN RE- + ; INITALISED, AND CAUSING BAD INT PANICS +TMS_INT_DIS: + LD A, (TMS_INIT9918_REG_1) + RES TMSINTEN, A ; RESET INTERRUPT ENABLE BIT + LD (TMS_INIT9918_REG_1), A + LD C, TMSCTRL1 + JP TMS_SET +#ENDIF +#ENDIF ; ;====================================================================== ; TMS DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS @@ -745,6 +791,20 @@ TMS_Z180IOX: RET ; DONE ; #ENDIF + +#IF (INTMODE == 1 & TMSTIMENABLE) +TMS_TSTINT: + IN A, (TMS_CMDREG) ; TEST FOR INT FLAG + AND $80 + JR NZ, TMS_INTHNDL + AND $00 ; RETURN Z - NOT HANDLED + RET + +TMS_INTHNDL: + CALL HB_TIMINT ; RETURN NZ - HANDLED + OR $FF + RET +#ENDIF ; ;================================================================================================== ; TMS DRIVER - DATA @@ -798,6 +858,7 @@ TMS_BUF .FILL 256,0 ; COPY BUFFER ; TMS_INIT9918: .DB $00 ; REG 0 - NO EXTERNAL VID +TMS_INIT9918_REG_1: .DB $50 ; REG 1 - ENABLE SCREEN, SET MODE 1 .DB $00 ; REG 2 - PATTERN NAME TABLE := 0 .DB $00 ; REG 3 - NO COLOR TABLE