diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 1ee476ad..5f0a302e 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -321,22 +321,25 @@ TMS_INIT: RET ; TMS_INIT1: - CALL TMS_CRTINIT ; SETUP THE TMS/V99x8 CHIP REGISTERS - ; THIS IS BEST DONE BEFORE DETECTION OF TYPE - ; AND VRAM SIZE - CALL PRTSTRD .TEXT " VDP=$" CALL TMS_GETTYP ; A <- 0: TMS9918A, 1: V9938, 2: V9958, x: VDP ID + PUSH AF + CALL TMS_CRTINIT ; SETUP THE TMS/V99x8 CHIP REGISTERS + ; THIS IS BEST DONE BEFORE DETECTION OF TYPE + ; AND VRAM SIZE + POP AF + + INC A DEC A JR NZ, TMS_NOT9918 CALL PRTSTRD .TEXT "TMS9918 VRAM=16KB INTERRUPT=60HZ$" - JR TMS_INIT3 + JR TMS_INIT4 TMS_NOT9918: DEC A @@ -347,9 +350,18 @@ TMS_NOT9918: JR TMS_INIT2 TMS_NOT9938: - ; ASSUME V9958 + DEC A + JR NZ, TMS_NOTV9958 + CALL PRTSTRD .TEXT "V9958$" + JR TMS_INIT2 + +TMS_NOTV9958: + ; ASSUME SUPER V9958 + CALL PRTSTRD + .TEXT "SUPER V9958 VRAM=8MB$" + JR TMS_INIT3 TMS_INIT2: CALL PRTSTRD @@ -361,18 +373,19 @@ TMS_INIT2: JR NZ, NOT_64K PRTS("64KB$") - JR TMS_INIT3 + JR TMS_INIT4 NOT_64K: DEC A JR NZ, NOT_128K PRTS("128KB$") - JR TMS_INIT3 + JR TMS_INIT4 NOT_128K: PRTS("192KB$") +TMS_INIT3: #IF (TMSTIMENABLE) CALL PRTSTRD #IF (TICKFREQ == 50) @@ -382,7 +395,7 @@ NOT_128K: #ENDIF #ENDIF -TMS_INIT3: +TMS_INIT4: CALL PC_SPACE LD A,TMS_COLS CALL PRTDEC8 @@ -799,7 +812,7 @@ TMS_PROBE: ; ; ASSUMES INTERRUPTS ARE DISABLED (DI) ; -; A <- 0: TMS9918A, 1: V9938, 2: V9958, x: VDP ID +; A <- 0: TMS9918A, 1: V9938, 2: V9958, 3: Super V9958 ; F <- z: TMS9918A, nz: other ; TMS_GETTYP: @@ -815,7 +828,9 @@ TMS_GETTYP: EZ80_IO IN A,(TMS_CMDREG) ; READ S#1 AND 00111110B ; GET VDP ID - RRCA + RRCA ; 00000 - V9938 1 + ; 00010 - V9958 2 + ; 10010 - v9958 3 EX AF,AF' XOR A ; RESTORE SELECT REGISTER TO S#0 FOR INT HANDLER @@ -826,7 +841,14 @@ TMS_GETTYP: OUT (TMS_CMDREG),A EX AF,AF' - RET NZ ; RETURN VDP ID FOR V9958 OR HIGHER + JR Z, TMS_ISV9938 + CP 2 + RET Z ; RETURN 2 FOR V9958 + + LD A, 3 + RET ; RETURN 3 FOR SUPER V9958 + +TMS_ISV9938: INC A ; RETURN 1 FOR V9938 RET ;