diff --git a/Source/Apps/Test/ps2info/ps2info.asm b/Source/Apps/Test/ps2info/ps2info.asm index 092d8706..c11d8fb7 100644 --- a/Source/Apps/Test/ps2info/ps2info.asm +++ b/Source/Apps/Test/ps2info/ps2info.asm @@ -9,6 +9,7 @@ ; WBW 2022-03-28: Add menu driven port selection ; Add support for RHYOPHYRE ; WBW 2022-04-01: Add menu for test functions +; WBW 2022-04-02: Fix prtchr register saving/recovery ; ;======================================================================= ; @@ -1116,7 +1117,8 @@ err_ret: ; Print character in A without destroying any registers ; prtchr: - push bc ; save registers + push af ; save registers + push bc push de push hl ld e,a ; character to print in E @@ -1125,6 +1127,7 @@ prtchr: pop hl ; restore registers pop de pop bc + pop af ret ; prtdot: @@ -1341,7 +1344,7 @@ delay1: ; Constants ;======================================================================= ; -str_banner .db "PS/2 Keyboard/Mouse Information v0.6, 1-Apr-2022",0 +str_banner .db "PS/2 Keyboard/Mouse Information v0.6a, 2-Apr-2022",0 str_hwmenu .db "PS/2 Controller Port Options:\r\n\r\n" .db " 1 - MBC\r\n" .db " 2 - RHYOPHYRE\r\n" diff --git a/Source/HBIOS/Config/RPH_std.asm b/Source/HBIOS/Config/RPH_std.asm index 8a3d4b22..ce191500 100644 --- a/Source/HBIOS/Config/RPH_std.asm +++ b/Source/HBIOS/Config/RPH_std.asm @@ -38,4 +38,4 @@ RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) ; CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; -PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index d9421fea..bf106d46 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -116,9 +116,9 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_ezz80.asm b/Source/HBIOS/cfg_ezz80.asm index d5339255..8547b7aa 100644 --- a/Source/HBIOS/cfg_ezz80.asm +++ b/Source/HBIOS/cfg_ezz80.asm @@ -153,9 +153,9 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index abc83e15..fcf194c1 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -211,9 +211,11 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +GDCMODE .EQU GDCMODE_RPH ; GDC: GDC MODE: GDCMODE_[NONE|ECB|RPH] +GDCMON .EQU GDCMON_EGA ; GDC: GDC MONITOR SETUP: GDCMON_[NONE|CGA|EGA] TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) 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_mbc.asm b/Source/HBIOS/cfg_mbc.asm index 7a7f80f8..b6e0becf 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -141,9 +141,9 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] CVDUENABLE .EQU TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) CVDUMODE .EQU CVDUMODE_MBC ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -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|RC|RCV9958|RCKBD] +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .EQU TMSMODE_MBC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) 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 73aaa8e2..2c8b2854 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -141,9 +141,9 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) 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 acc3aaa5..a49c971e 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -143,9 +143,9 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) 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_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 4c0ee626..7d0eda26 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -160,9 +160,9 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index cfe8bbff..c0ff8a93 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -175,9 +175,9 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 3628aae0..f135ac21 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -164,9 +164,9 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index a6d8fe5d..c94677bc 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -141,9 +141,11 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU TRUE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +GDCMODE .EQU GDCMODE_RPH ; GDC: GDC MODE: GDCMODE_[NONE|ECB|RPH] +GDCMON .EQU GDCMON_EGA ; GDC: GDC MONITOR SETUP: GDCMON_[NONE|CGA|EGA] TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) 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 1df79bc0..0e59c183 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -141,9 +141,9 @@ VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) 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_scz180.asm b/Source/HBIOS/cfg_scz180.asm index a801d14d..3a7e4149 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -155,9 +155,9 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_RC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 1e6a3f80..3b16bca2 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -114,9 +114,9 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index a0cc2896..27f5bbb3 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -125,9 +125,9 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/gdc.asm b/Source/HBIOS/gdc.asm new file mode 100644 index 00000000..1bd57ce4 --- /dev/null +++ b/Source/HBIOS/gdc.asm @@ -0,0 +1,331 @@ +;====================================================================== +; UPD7220 GRAPHICS DEVICE CONTROLLER +;====================================================================== +; +;====================================================================== +; GDC DRIVER - CONSTANTS +;====================================================================== +; +#IF (GDCMODE == GDCMODE_ECB) +GDC_BASE .EQU $?? ; GDC BASE I/O PORT +GDC_DAC_BASE .EQU $?? ; RAMDAC BASE I/O PORT +#ENDIF +; +#IF (GDCMODE == GDCMODE_RPH) +GDC_KBDDATA .EQU $8C ; KBD CTLR DATA PORT +GDC_KBDST .EQU $8D ; KBD CTLR STATUS/CMD PORT +GDC_BASE .EQU $90 ; GDC BASE I/O PORT +GDC_DAC_BASE .EQU $98 ; RAMDAC BASE I/O PORT +#ENDIF +; +GDC_STAT .EQU GDC_BASE + 0 ; STATUS PORT +GDC_CMD .EQU GDC_BASE + 1 ; COMMAND PORT +GDC_PARAM .EQU GDC_BASE + 0 ; PARAM PORT +GDC_READ .EQU GDC_BASE + 1 ; READ PORT +GDC_DAC_WR .EQU GDC_DAC_BASE + 0 ; RAMDAC ADR WRITE +GDC_DAC_RD .EQU GDC_DAC_BASE + 3 ; RAMDAC ADR READ +GDC_DAC_PALRAM .EQU GDC_DAC_BASE + 1 ; RAMDAC PALETTE RAM +GDC_DAC_PIXMSK .EQU GDC_DAC_BASE + 2 ; RAMDAC PIXEL READ MASK +GDC_DAC_OVL_WR .EQU GDC_DAC_BASE + 4 ; RAMDAC OVERLAY WRITE +GDC_DAC_OVL_RD .EQU GDC_DAC_BASE + 7 ; RAMDAC OVERLAY READ +GDC_DAC_OVL_RAM .EQU GDC_DAC_BASE + 5 ; RAMDAC OVERLAY RAM +; +GDC_ROWS .EQU 25 +GDC_COLS .EQU 80 +; +; *** TODO: CGA AND EGA ARE PLACEHOLDERS. THESE EQUATES SHOULD +; BE USED TO ALLOW FOR MULTIPLE MONITOR TIMINGS AND/OR FONT +; DEFINITIONS. +; +#IF (GDCMON == GDCMON_CGA) + #DEFINE USEFONTCGA + #DEFINE GDC_FONT FONTCGA +#ENDIF +; +#IF (GDCMON == GDCMON_EGA) + #DEFINE USEFONT8X16 + #DEFINE GDC_FONT FONT8X16 +#ENDIF +; +TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER +; +;====================================================================== +; GDC DRIVER - INITIALIZATION +;====================================================================== +; +GDC_INIT: + LD IY,GDC_IDAT ; POINTER TO INSTANCE DATA + + CALL NEWLINE + PRTS("GDC: MODE=$") +#IF (GDCMODE == GDCMODE_ECB) + PRTS("ECB$") +#ENDIF +#IF (GDCMODE == GDCMODE_RPH) + PRTS("RPH$") +#ENDIF +; +#IF (GDCMON == GDCMON_CGA) + PRTS(" CGA$") +#ENDIF +#IF (GDCMON == GDCMON_EGA) + PRTS(" EGA$") +#ENDIF +; + PRTS(" IO=0x$") + LD A,GDC_BASE + CALL PRTHEXBYTE + CALL GDC_PROBE ; CHECK FOR HW PRESENCE + JR Z,GDC_INIT1 ; CONTINUE IF HW PRESENT +; + ; HARDWARE NOT PRESENT + PRTS(" NOT PRESENT$") + OR $FF ; SIGNAL FAILURE + RET +; +GDC_INIT1: + CALL GDC_CRTINIT ; SETUP THE GDC CHIP REGISTERS + CALL GDC_VDARES ; RESET GDC + CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER + + ; ADD OURSELVES TO VDA DISPATCH TABLE + LD BC,GDC_FNTBL ; BC := FUNCTION TABLE ADDRESS + LD DE,GDC_IDAT ; DE := GDC INSTANCE DATA PTR + CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED + + ; INITIALIZE EMULATION + LD C,A ; C := ASSIGNED VIDEO DEVICE NUM + LD DE,GDC_FNTBL ; DE := FUNCTION TABLE ADDRESS + LD HL,GDC_IDAT ; HL := GDC INSTANCE DATA PTR + CALL TERM_ATTACH ; DO IT + + XOR A ; SIGNAL SUCCESS + RET +; +;====================================================================== +; GDC DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS +;====================================================================== +; +GDC_FNTBL: + .DW GDC_VDAINI + .DW GDC_VDAQRY + .DW GDC_VDARES + .DW GDC_VDADEV + .DW GDC_VDASCS + .DW GDC_VDASCP + .DW GDC_VDASAT + .DW GDC_VDASCO + .DW GDC_VDAWRC + .DW GDC_VDAFIL + .DW GDC_VDACPY + .DW GDC_VDASCR + .DW KBD_STAT + .DW KBD_FLUSH + .DW KBD_READ + .DW GDC_VDARDC +#IF (($ - GDC_FNTBL) != (VDA_FNCNT * 2)) + .ECHO "*** INVALID GDC FUNCTION TABLE ***\n" + !!!!! +#ENDIF +; +GDC_VDAINI: + ; RESET VDA + CALL GDC_VDARES ; RESET VDA + XOR A ; SIGNAL SUCCESS + RET +; +GDC_VDAQRY: ; VIDEO INFORMATION QUERY + LD C,$00 ; MODE ZERO IS ALL WE KNOW + LD D,GDC_ROWS ; ROWS + LD E,GDC_COLS ; COLS + LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET + XOR A ; SIGNAL SUCCESS + RET +; +GDC_VDARES: ; VIDEO SYSTEM RESET + ; *** TODO: RESET VIDEO SYSTEM HERE, CLEAR SCREEN, + ; CURSOR TO TOP LEFT, CLEAR ATTRIBUTES + XOR A + RET +; +GDC_VDADEV: ; VIDEO DEVICE INFORMATION + LD D,VDADEV_GDC ; D := DEVICE TYPE + LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,GDC_BASE ; L := BASE I/O ADDRESS + XOR A ; SIGNAL SUCCESS + RET +; +GDC_VDASCS: ; SET CURSOR STYLE + CALL SYSCHK ; NOT IMPLEMENTED (YET) + LD A,ERR_NOTIMPL + OR A + RET + +GDC_VDASCP: ; SET CURSOR POSITION + CALL GDC_XY ; SET CURSOR POSITION + XOR A ; SIGNAL SUCCESS + RET + +GDC_VDASAT: ; SET ATTRIBUTES + LD A,E ; GET THE INCOMING ATTRIBUTE + LD (GDC_ATTR),A ; AND SAVE FOR LATER + XOR A ; SIGNAL SUCCESS + RET + +GDC_VDASCO: ; SET COLOR + LD A,E ; GET THE INCOMING COLOR + LD (GDC_COLOR),A ; AND SAVE FOR LATER + XOR A ; SIGNAL SUCCESS + RET + +GDC_VDAWRC: ; WRITE CHARACTER + LD A,E ; CHARACTER TO WRITE GOES IN A + CALL GDC_PUTCHAR ; PUT IT ON THE SCREEN + XOR A ; SIGNAL SUCCESS + RET + +GDC_VDAFIL: ; FILL WITH CHARACTER + LD A,E ; FILL CHARACTER GOES IN A + EX DE,HL ; FILL LENGTH GOES IN DE + CALL GDC_FILL ; DO THE FILL + XOR A ; SIGNAL SUCCESS + RET + +GDC_VDACPY: ; COPY CHARACTERS/ATTRIBUTES + ; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS GDC_POS + ; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT + PUSH HL ; SAVE LENGTH + CALL GDC_XY2IDX ; ROW/COL IN DE -> SOURCE ADR IN HL + POP BC ; RECOVER LENGTH IN BC + LD DE,(GDC_POS) ; PUT DEST IN DE + JP GDC_BLKCPY ; DO A BLOCK COPY + +GDC_VDASCR: ; SCROLL ENTIRE SCREEN + LD A,E ; LOAD E INTO A + OR A ; SET FLAGS + RET Z ; IF ZERO, WE ARE DONE + PUSH DE ; SAVE E + JP M,GDC_VDASCR1 ; E IS NEGATIVE, REVERSE SCROLL + CALL GDC_SCROLL ; SCROLL FORWARD ONE LINE + POP DE ; RECOVER E + DEC E ; DECREMENT IT + JR GDC_VDASCR ; LOOP +GDC_VDASCR1: + CALL GDC_RSCROLL ; SCROLL REVERSE ONE LINE + POP DE ; RECOVER E + INC E ; INCREMENT IT + JR GDC_VDASCR ; LOOP +; +GDC_VDARDC: ; READ CHAR/ATTR VALUE FROM VIDEO BUFFER + OR $FF ; UNSUPPORTED FUNCTION + RET +; +;====================================================================== +; GDC DRIVER - PRIVATE DRIVER FUNCTIONS +;====================================================================== +; +;---------------------------------------------------------------------- +; PROBE FOR GDC HARDWARE +;---------------------------------------------------------------------- +; +; ON RETURN, ZF SET INDICATES HARDWARE FOUND +; +; *** TODO: IMPLEMENT THIS +; +GDC_PROBE: + XOR A ; SIGNAL SUCCESS + RET ; RETURN WITH ZF SET BASED ON CP +; +;---------------------------------------------------------------------- +; DISPLAY CONTROLLER CHIP INITIALIZATION +;---------------------------------------------------------------------- +; +; *** TODO: IMPLEMENT THIS +; +GDC_CRTINIT: + XOR A ; SIGNAL SUCCESS + RET +; +;---------------------------------------------------------------------- +; SET CURSOR POSITION TO ROW IN D AND COLUMN IN E +;---------------------------------------------------------------------- +; +GDC_XY: + CALL GDC_XY2IDX ; CONVERT ROW/COL TO BUF IDX + LD (GDC_POS),HL ; SAVE THE RESULT (DISPLAY POSITION) + ; *** TODO: MOVE THE CURSOR + RET +; +;---------------------------------------------------------------------- +; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL +; D=ROW, E=COL +;---------------------------------------------------------------------- +; +GDC_XY2IDX: + LD A,E ; SAVE COLUMN NUMBER IN A + LD H,D ; SET H TO ROW NUMBER + LD E,GDC_COLS ; SET E TO ROW LENGTH + CALL MULT8 ; MULTIPLY TO GET ROW OFFSET + LD E,A ; GET COLUMN BACK + ADD HL,DE ; ADD IT IN + RET ; RETURN +; +;---------------------------------------------------------------------- +; WRITE VALUE IN A TO CURRENT VDU BUFFER POSITION, ADVANCE CURSOR +;---------------------------------------------------------------------- +; +GDC_PUTCHAR: + ; *** TODO: IMPLEMENT THIS + RET +; +;---------------------------------------------------------------------- +; FILL AREA IN BUFFER WITH SPECIFIED CHARACTER AND CURRENT COLOR/ATTRIBUTE +; STARTING AT THE CURRENT FRAME BUFFER POSITION +; A: FILL CHARACTER +; DE: NUMBER OF CHARACTERS TO FILL +;---------------------------------------------------------------------- +; +GDC_FILL: + ; *** TODO: IMPLEMENT THIS + RET +; +;---------------------------------------------------------------------- +; SCROLL ENTIRE SCREEN FORWARD BY ONE LINE (CURSOR POSITION UNCHANGED) +;---------------------------------------------------------------------- +; +GDC_SCROLL: + ; *** TODO: IMPLEMENT THIS + RET +; +;---------------------------------------------------------------------- +; REVERSE SCROLL ENTIRE SCREEN BY ONE LINE (CURSOR POSITION UNCHANGED) +;---------------------------------------------------------------------- +; +GDC_RSCROLL: + ; *** TODO: IMPLEMENT THIS + RET +; +;---------------------------------------------------------------------- +; BLOCK COPY BC BYTES FROM HL TO DE +;---------------------------------------------------------------------- +; +GDC_BLKCPY: + ; *** TODO: IMPLEMENT THIS + RET +; +;================================================================================================== +; GDC DRIVER - DATA +;================================================================================================== +; +GDC_ATTR .DB 0 ; CURRENT ATTRIBUTES +GDC_COLOR .DB 0 ; CURRENT COLOR +GDC_POS .DW 0 ; CURRENT DISPLAY POSITION +; +;================================================================================================== +; GDC DRIVER - INSTANCE DATA +;================================================================================================== +; +GDC_IDAT: + .DB GDC_KBDST + .DB GDC_KBDDATA diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index b2e8ed35..8fcc5a53 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2987,8 +2987,8 @@ HB_INITTBL: #IF (VGAENABLE) .DW VGA_INIT #ENDIF -#IF (NECENABLE) - .DW NEC_INIT +#IF (GDCENABLE) + .DW GDC_INIT #ENDIF #IF (TMSENABLE) .DW TMS_INIT @@ -5839,12 +5839,12 @@ SIZ_TMS .EQU $ - ORG_TMS .ECHO " bytes.\n" #ENDIF ; -#IF (NECENABLE) -ORG_NEC .EQU $ - ;#INCLUDE "nec.asm" -SIZ_NEC .EQU $ - ORG_NEC - .ECHO "NEC occupies " - .ECHO SIZ_NEC +#IF (GDCENABLE) +ORG_GDC .EQU $ + #INCLUDE "gdc.asm" +SIZ_GDC .EQU $ - ORG_GDC + .ECHO "GDC occupies " + .ECHO SIZ_GDC .ECHO " bytes.\n" #ENDIF ; @@ -5908,7 +5908,7 @@ SIZ_FONTS .EQU $ - ORG_FONTS .ECHO SIZ_FONTS .ECHO " bytes.\n" ; -#IF (CVDUENABLE | VGAENABLE) | (TMSENABLE & (TMSMODE == TMSMODE_RCKBD)) +#IF (CVDUENABLE | VGAENABLE) | GDCENABLE | (TMSENABLE & (TMSMODE == TMSMODE_RCKBD)) ORG_KBD .EQU $ #INCLUDE "kbd.asm" SIZ_KBD .EQU $ - ORG_KBD @@ -6133,7 +6133,7 @@ SIZ_AY38910 .EQU $ - ORG_AY38910 ; ; INCLUDE LZSA2 decompression engine if required. ; -#IF ((VGAENABLE | CVDUENABLE | TMSENABLE) & USELZSA2) +#IF ((VGAENABLE | CVDUENABLE | TMSENABLE | GDCENABLE) & USELZSA2) #INCLUDE "unlzsa2s.asm" #ENDIF ; @@ -6927,11 +6927,11 @@ PIO_MODE_STR: .TEXT "Output$" ; VIDEO DEVICE STRINGS ; PS_VDSTRREF: - .DW PS_VDVDU, PS_VDCVDU, PS_VDNEC, PS_VDTMS, PS_VDVGA + .DW PS_VDVDU, PS_VDCVDU, PS_VDGDC, PS_VDTMS, PS_VDVGA ; PS_VDVDU .TEXT "VDU$" PS_VDCVDU .TEXT "CVDU$" -PS_VDNEC .TEXT "NEC$" +PS_VDGDC .TEXT "GDC$" PS_VDTMS .TEXT "TMS$" PS_VDVGA .TEXT "VGA$" ; diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index bce5c5ff..93a9ef4a 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -218,7 +218,7 @@ RTCDEV_RP5 .EQU $50 ; RP5C01 ; VDADEV_VDU .EQU $00 ; ECB VDU - MOTOROLA 6545 VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563 -VDADEV_NEC .EQU $20 ; ECB UPD7220 - NEC UPD7220 +VDADEV_GDC .EQU $20 ; GRAPHICS DISPLAY CTLR - UPD7220 VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918 VDADEV_VGA .EQU $40 ; ECB VGA3 - HITACHI HD6445 ;VDADEV_V9958 .EQU $50 ; V9958 VDU diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 3b51c666..e32a6fac 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -199,7 +199,7 @@ AYMODE_LINC .EQU 6 ; LINC Z50 AY SOUND CARD AYMODE_MBC .EQU 7 ; MBC SOUND BOARD ; ; SN SOUND CHIP MODE SELECTIONS -; +; SNMODE_NONE .EQU 0 SNMODE_RCZ80 .EQU 1 ; RC2014 SOUND MODULE SNMODE_VGM .EQU 2 ; VGM ECB BOARD @@ -212,6 +212,7 @@ TMSMODE_N8 .EQU 2 ; N8 BUILT-IN VIDEO TMSMODE_RC .EQU 3 ; RC2014 TMS9918 VIDEO BOARD TMSMODE_RCV9958 .EQU 4 ; RC2014 V9958 VIDEO BOARD TMSMODE_RCKBD .EQU 5 ; RC2014 TMS9918 + PS2 KEYBOARD +TMSMODE_MBC .EQU 6 ; MBC V9938/58 VIDEO BOARD ; ; CVDU VIDEO MODE SELECTIONS ; @@ -225,6 +226,18 @@ CVDUMON_NONE .EQU 0 CVDUMON_CGA .EQU 1 ; CGA MONITOR TIMING (16.000 MHZ OSC) CVDUMON_EGA .EQU 2 ; EGA MONITOR TIMING (16.257 MHZ OSC) ; +; GDC VIDEO MODE SELECTIONS +; +GDCMODE_NONE .EQU 0 +GDCMODE_ECB .EQU 1 ; ECB GDC +GDCMODE_RPH .EQU 2 ; RPH GDC +; +; GDC MONITOR SELECTIONS +; +GDCMON_NONE .EQU 0 +GDCMON_CGA .EQU 1 ; CGA MONITOR TIMING (16.000 MHZ OSC) +GDCMON_EGA .EQU 2 ; EGA MONITOR TIMING (16.257 MHZ OSC) +; ; DMA MODE SELECTIONS ; DMAMODE_NONE .EQU 0 @@ -555,22 +568,22 @@ BID_ROMDN .SET $FF ; ROM DRIVE DISABLED .ECHO "BID_BIOS: " \ .ECHO BID_BIOS \ .ECHO "\n" .ECHO "BID_USR: " \ .ECHO BID_USR \ .ECHO "\n" .ECHO "BID_COM: " \ .ECHO BID_COM \ .ECHO "\n" - + .ECHO "BID_BOOT: " \ .ECHO BID_BOOT \ .ECHO "\n" .ECHO "BID_IMG0: " \ .ECHO BID_IMG0 \ .ECHO "\n" .ECHO "BID_IMG1: " \ .ECHO BID_IMG1 \ .ECHO "\n" .ECHO "BID_IMG2: " \ .ECHO BID_IMG2 \ .ECHO "\n" - + .ECHO "BID_ROMD0: " \ .ECHO BID_ROMD0 \ .ECHO "\n" .ECHO "BID_ROMDN: " \ .ECHO BID_ROMDN \ .ECHO "\n" .ECHO "BID_RAMD0: " \ .ECHO BID_RAMD0 \ .ECHO "\n" .ECHO "BID_RAMDN: " \ .ECHO BID_RAMDN \ .ECHO "\n" - + .ECHO "BID_ROM0: " \ .ECHO BID_ROM0 \ .ECHO "\n" .ECHO "BID_ROMN: " \ .ECHO BID_ROMN \ .ECHO "\n" .ECHO "BID_RAM0: " \ .ECHO BID_RAM0 \ .ECHO "\n" .ECHO "BID_RAMN: " \ .ECHO BID_RAMN \ .ECHO "\n" -#ENDIF +#ENDIF ; ; MEMORY LAYOUT ; @@ -708,7 +721,7 @@ INT_CTC0D .EQU 15 ; ZILOG CTC 0, CHANNEL D ;INT_PIO0B .EQU 10 ; ZILOG PIO 0, CHANNEL B ;INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A ;INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B - + #ELSE INT_CTC0A .EQU 0 ; ZILOG CTC 0, CHANNEL A diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 2a585634..d1978a41 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -63,9 +63,22 @@ TMS_PPIX .EQU 0 ; PPI CONTROL PORT #ENDIF ; +#IF (TMSMODE == TMSMODE_MBC) + +TMS_DATREG .EQU $98 ; READ/WRITE DATA +TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL +TMS_ACR .EQU $9C ; AUX CONTROL REGISTER +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 +TMS_KBDDATA .EQU $E2 ; KBD CTLR DATA PORT +TMS_KBDST .EQU $E3 ; KBD CTLR STATUS/CMD PORT +#ENDIF + TMS_ROWS .EQU 24 -#IF (TMSMODE == TMSMODE_RCV9958) +#IF ((TMSMODE == TMSMODE_RCV9958) | (TMSMODE == TMSMODE_MBC)) TMS_FNTVADDR .EQU $1000 ; VRAM ADDRESS OF FONT DATA TMS_COLS .EQU 80 #ELSE @@ -86,7 +99,7 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER #DEFINE TMS_IODELAY EX (SP),HL \ EX (SP),HL ; 38 W/S #ELSE ; BELOW WAS TUNED FOR SBC AT 8MHZ -#IF (TMSMODE == TMSMODE_RCV9958) +#IF ((TMSMODE == TMSMODE_RCV9958) | (TMSMODE == TMSMODE_MBC)) #DEFINE TMS_IODELAY NOP \ NOP \ NOP \ NOP \ NOP \ NOP \ NOP ; V9958 NEEDS AT WORST CASE, APPROX 4us (28T) DELAY BETWEEN I/O (WHEN IN TEXT MODE) #ELSE #DEFINE TMS_IODELAY NOP \ NOP ; 8 W/S @@ -110,18 +123,28 @@ TMS_INIT: CALL TMS_Z180IO #ENDIF ; -#IF (TMSMODE == TMSMODE_SCG) +#IF ((TMSMODE == TMSMODE_SCG) | (TMSMODE == TMSMODE_MBC)) LD A,$FF OUT (TMS_ACR),A ; INIT AUX CONTROL REG #ENDIF -; - LD IY,TMS_IDAT ; POINTER TO INSTANCE DATA ; CALL NEWLINE ; FORMATTING PRTS("TMS: MODE=$") + +#IF ((TMSMODE == TMSMODE_MBC)) + LD A,$FE + OUT (TMS_ACR),A ; INIT AUX CONTROL REG +#ENDIF + + + LD IY,TMS_IDAT ; POINTER TO INSTANCE DATA +; #IF (TMSMODE == TMSMODE_SCG) PRTS("SCG$") #ENDIF +#IF (TMSMODE == TMSMODE_MBC) + PRTS("MBC$") +#ENDIF #IF (TMSMODE == TMSMODE_N8) PRTS("N8$") #ENDIF @@ -153,7 +176,7 @@ TMS_INIT1: #IF (TMSMODE == TMSMODE_N8) CALL PPK_INIT ; INITIALIZE PPI KEYBOARD DRIVER #ENDIF -#IF (TMSMODE == TMSMODE_RCKBD) +#IF ((TMSMODE == TMSMODE_RCKBD) | (TMSMODE == TMSMODE_MBC)) CALL KBD_INIT ; INITIALIZE 8242 KEYBOARD DRIVER #ENDIF #IF MKYENABLE @@ -208,7 +231,7 @@ TMS_FNTBL: .DW PPK_FLUSH .DW PPK_READ #ELSE - #IF (TMSMODE == TMSMODE_RCKBD) + #IF ((TMSMODE == TMSMODE_RCKBD) | (TMSMODE == TMSMODE_MBC)) .DW KBD_STAT .DW KBD_FLUSH .DW KBD_READ @@ -217,7 +240,7 @@ TMS_FNTBL: .DW MKY_STAT .DW MKY_FLUSH .DW MKY_READ - + #ELSE .DW TMS_STAT .DW TMS_FLUSH @@ -412,7 +435,7 @@ TMS_SET: ;---------------------------------------------------------------------- ; TMS_WR: -#IF (TMSMODE == TMSMODE_RCV9958) +#IF ((TMSMODE == TMSMODE_RCV9958) | (TMSMODE == TMSMODE_MBC)) ; CLEAR R#14 FOR V9958 XOR A OUT (TMS_CMDREG), A @@ -903,7 +926,7 @@ TMS_IDAT: .DB TMS_PPIC ; PPI PORT C .DB TMS_PPIX ; PPI CONTROL PORT #ENDIF -#IF (TMSMODE == TMSMODE_RCKBD) +#IF ((TMSMODE == TMSMODE_RCKBD) | (TMSMODE == TMSMODE_MBC)) .DB TMS_KBDST ; 8242 CMD/STATUS PORT .DB TMS_KBDDATA ; 8242 DATA PORT #ENDIF @@ -954,7 +977,7 @@ TMS_PORTS: ; 5S Fifth sprite (not displayed) detected. Value in FS* is valid. ; INT Set at each screen update, used for interrupts. ; -#IF (TMSMODE == TMSMODE_RCV9958) +#IF ((TMSMODE == TMSMODE_RCV9958) | (TMSMODE == TMSMODE_MBC)) TMS_INITVDU: .DB $04 ; REG 0 - NO EXTERNAL VID, SET M4 = 1 TMS_INITVDU_REG_1: diff --git a/Source/ver.inc b/Source/ver.inc index a7451543..14eda264 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.168" +#DEFINE BIOSVER "3.1.1-pre.170" diff --git a/Source/ver.lib b/Source/ver.lib index dc0185e8..2d68ff32 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.168" + db "3.1.1-pre.170" endm