Browse Source

TMS: Enable support for using VSYNC interrupt

Use the VSYNC interrupt to trigger the sys timer event
pull/113/head
Dean Netherton 6 years ago
parent
commit
ff2ebbb09f
  1. 1
      Source/HBIOS/cfg_master.asm
  2. 1
      Source/HBIOS/cfg_mk4.asm
  3. 1
      Source/HBIOS/cfg_n8.asm
  4. 1
      Source/HBIOS/cfg_sbc.asm
  5. 4
      Source/HBIOS/hbios.asm
  6. 1
      Source/HBIOS/std.asm
  7. 61
      Source/HBIOS/tms.asm

1
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) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] 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) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
; ;

1
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) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] 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) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
; ;

1
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) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] 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) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
; ;

1
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) NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG/N8] 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) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
; ;

4
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 ; MAKE SURE IM1 INT VECTOR IS RIGHT
#IF (INTMODE == 1) #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 ; JP INT_IM1 IF INTERRUPT MODE ACTIVE
LD A,$C3 LD A,$C3
LD ($0038),A LD ($0038),A

1
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_NONE .EQU 0
TMSMODE_SCG .EQU 1 ; SCG ECB BOARD TMSMODE_SCG .EQU 1 ; SCG ECB BOARD
TMSMODE_N8 .EQU 2 ; N8 BUILT-IN VIDEO TMSMODE_N8 .EQU 2 ; N8 BUILT-IN VIDEO
TMSMODE_RC2014 .EQU 3 ; RC2014 BUILT-IN VIDEO
; ;
; SERIAL DEVICE CONFIGURATION CONSTANTS ; SERIAL DEVICE CONFIGURATION CONSTANTS
; ;

61
Source/HBIOS/tms.asm

@ -14,6 +14,24 @@
; TMS DRIVER - CONSTANTS ; 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) #IF (TMSMODE == TMSMODE_N8)
TMS_DATREG .EQU $98 ; READ/WRITE DATA TMS_DATREG .EQU $98 ; READ/WRITE DATA
@ -93,6 +111,17 @@ TMS_INIT1:
#IF (TMSMODE == TMSMODE_N8) #IF (TMSMODE == TMSMODE_N8)
CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER
#ENDIF #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 ; ADD OURSELVES TO VDA DISPATCH TABLE
LD BC,TMS_FNTBL ; BC := FUNCTION TABLE ADDRESS LD BC,TMS_FNTBL ; BC := FUNCTION TABLE ADDRESS
@ -107,6 +136,23 @@ TMS_INIT1:
; ;
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET 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 ; TMS DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS
@ -745,6 +791,20 @@ TMS_Z180IOX:
RET ; DONE RET ; DONE
; ;
#ENDIF #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 ; TMS DRIVER - DATA
@ -798,6 +858,7 @@ TMS_BUF .FILL 256,0 ; COPY BUFFER
; ;
TMS_INIT9918: TMS_INIT9918:
.DB $00 ; REG 0 - NO EXTERNAL VID .DB $00 ; REG 0 - NO EXTERNAL VID
TMS_INIT9918_REG_1:
.DB $50 ; REG 1 - ENABLE SCREEN, SET MODE 1 .DB $50 ; REG 1 - ENABLE SCREEN, SET MODE 1
.DB $00 ; REG 2 - PATTERN NAME TABLE := 0 .DB $00 ; REG 2 - PATTERN NAME TABLE := 0
.DB $00 ; REG 3 - NO COLOR TABLE .DB $00 ; REG 3 - NO COLOR TABLE

Loading…
Cancel
Save