diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 81825a1f..84ff7afe 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index bb1fc47d..e4cd8f44 100644 Binary files a/Doc/RomWBW Disk Catalog.pdf and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index b7a78e03..61e9fedb 100644 Binary files a/Doc/RomWBW Errata.pdf and b/Doc/RomWBW Errata.pdf differ diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 41a763f0..74aa7b2e 100644 Binary files a/Doc/RomWBW ROM Applications.pdf and b/Doc/RomWBW ROM Applications.pdf differ diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index 49a28f87..131d2fc0 100644 Binary files a/Doc/RomWBW System Guide.pdf and b/Doc/RomWBW System Guide.pdf differ diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index 4d969fc3..14a0b503 100644 Binary files a/Doc/RomWBW User Guide.pdf and b/Doc/RomWBW User Guide.pdf differ diff --git a/ReadMe.md b/ReadMe.md index 965a73cf..da3b2fcc 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ **RomWBW ReadMe** \ Version 3.3 \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -16 Apr 2023 +02 May 2023 # Overview diff --git a/ReadMe.txt b/ReadMe.txt index 9a70f421..bf49e224 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -16 Apr 2023 +02 May 2023 diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index 9088eac6..294c7cf4 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -3923,5 +3923,6 @@ may be discovered by RomWBW in your system. | USB-FIFO | Char | FT232H-based ECB USB FIFO | | VDU | Video | MC6845 Family Video Display Controller | | VGA | Video | HD6445CP4-based Video Display Controller | +| VRC | Video | VGARC Video Display Controller s | | YM | Audio | YM2612 Programmable Sound Generator | | Z2U | Char | Zilog Z280 CPU Built-in Serial Ports | diff --git a/Source/HBIOS/Config/RCZ180_ext.asm b/Source/HBIOS/Config/RCZ180_ext.asm index b888160c..b6b178c6 100644 --- a/Source/HBIOS/Config/RCZ180_ext.asm +++ b/Source/HBIOS/Config/RCZ180_ext.asm @@ -30,6 +30,7 @@ CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] ; @@ -48,6 +49,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; ; diff --git a/Source/HBIOS/Config/RCZ180_nat.asm b/Source/HBIOS/Config/RCZ180_nat.asm index 3cead301..41282a9b 100644 --- a/Source/HBIOS/Config/RCZ180_nat.asm +++ b/Source/HBIOS/Config/RCZ180_nat.asm @@ -30,6 +30,7 @@ CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] ; @@ -48,9 +49,9 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; -; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ280_ext.asm b/Source/HBIOS/Config/RCZ280_ext.asm index e994df2e..6947aec8 100644 --- a/Source/HBIOS/Config/RCZ280_ext.asm +++ b/Source/HBIOS/Config/RCZ280_ext.asm @@ -31,6 +31,7 @@ INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] ; @@ -47,6 +48,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ280_nat.asm b/Source/HBIOS/Config/RCZ280_nat.asm index a22f9793..cb5bf87a 100644 --- a/Source/HBIOS/Config/RCZ280_nat.asm +++ b/Source/HBIOS/Config/RCZ280_nat.asm @@ -31,6 +31,7 @@ INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] ; @@ -47,6 +48,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ280_zz80mb.asm b/Source/HBIOS/Config/RCZ280_zz80mb.asm index 0cc3f3c8..f5d2edc2 100644 --- a/Source/HBIOS/Config/RCZ280_zz80mb.asm +++ b/Source/HBIOS/Config/RCZ280_zz80mb.asm @@ -33,6 +33,7 @@ INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] ; @@ -53,6 +54,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ280_zzrc.asm b/Source/HBIOS/Config/RCZ280_zzrc.asm index 492af9a3..f64ba6a3 100644 --- a/Source/HBIOS/Config/RCZ280_zzrc.asm +++ b/Source/HBIOS/Config/RCZ280_zzrc.asm @@ -33,6 +33,7 @@ INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] ; @@ -61,6 +62,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_easy.asm b/Source/HBIOS/Config/RCZ80_easy.asm index b2361a17..1c558c15 100644 --- a/Source/HBIOS/Config/RCZ80_easy.asm +++ b/Source/HBIOS/Config/RCZ80_easy.asm @@ -34,6 +34,7 @@ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] WDOGIO .SET $6F ; WATCHDOG REGISTER ADR @@ -62,6 +63,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_kio.asm b/Source/HBIOS/Config/RCZ80_kio.asm index 8194f00d..2d24669a 100644 --- a/Source/HBIOS/Config/RCZ80_kio.asm +++ b/Source/HBIOS/Config/RCZ80_kio.asm @@ -31,6 +31,7 @@ INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) @@ -57,6 +58,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_skz.asm b/Source/HBIOS/Config/RCZ80_skz.asm index e3fad45e..e4a0a4d7 100644 --- a/Source/HBIOS/Config/RCZ80_skz.asm +++ b/Source/HBIOS/Config/RCZ80_skz.asm @@ -35,6 +35,7 @@ SKZENABLE .SET TRUE ; ENABLE SERGEY'S Z80-512K FEATURES SKZDIV .SET DIV_12 ; UART CLK (CLK2) DIVIDER FOR Z80-512K WDOGMODE .SET WDOG_SKZ ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) LEDPORT .SET $6E ; STATUS LED PORT ADDRESS ; @@ -52,6 +53,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_std.asm b/Source/HBIOS/Config/RCZ80_std.asm index 3d759f28..d4abee6d 100644 --- a/Source/HBIOS/Config/RCZ80_std.asm +++ b/Source/HBIOS/Config/RCZ80_std.asm @@ -30,6 +30,7 @@ CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) @@ -43,6 +44,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_tiny.asm b/Source/HBIOS/Config/RCZ80_tiny.asm index 81189cb1..fee4b13b 100644 --- a/Source/HBIOS/Config/RCZ80_tiny.asm +++ b/Source/HBIOS/Config/RCZ80_tiny.asm @@ -34,6 +34,7 @@ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; EIPCENABLE .SET TRUE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] @@ -67,6 +68,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_zrc.asm b/Source/HBIOS/Config/RCZ80_zrc.asm index 00020ada..bd186695 100644 --- a/Source/HBIOS/Config/RCZ80_zrc.asm +++ b/Source/HBIOS/Config/RCZ80_zrc.asm @@ -31,6 +31,7 @@ CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; RAMSIZE .SET 1536 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] @@ -44,6 +45,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_zrc_ram.asm b/Source/HBIOS/Config/RCZ80_zrc_ram.asm index efbc7746..0c2d14b4 100644 --- a/Source/HBIOS/Config/RCZ80_zrc_ram.asm +++ b/Source/HBIOS/Config/RCZ80_zrc_ram.asm @@ -32,6 +32,7 @@ CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; RAMSIZE .SET 2048 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) @@ -48,6 +49,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/SCZ180_sc126.asm b/Source/HBIOS/Config/SCZ180_sc126.asm index 5fa11435..acf443c7 100644 --- a/Source/HBIOS/Config/SCZ180_sc126.asm +++ b/Source/HBIOS/Config/SCZ180_sc126.asm @@ -51,6 +51,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/SCZ180_sc130.asm b/Source/HBIOS/Config/SCZ180_sc130.asm index 59203b42..9304ee8b 100644 --- a/Source/HBIOS/Config/SCZ180_sc130.asm +++ b/Source/HBIOS/Config/SCZ180_sc130.asm @@ -52,6 +52,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/ansi.asm b/Source/HBIOS/ansi.asm index a761542d..cc9c6a68 100644 --- a/Source/HBIOS/ansi.asm +++ b/Source/HBIOS/ansi.asm @@ -634,9 +634,10 @@ ANSI_BEL: ANSI_BS: LD A,(ANSI_COL) ; GET CURRENT COLUMN DEC A ; BACK IT UP BY ONE - RET C ; IF CARRY, MARGIN EXCEEDED, ABORT + ;RET C ; IF CARRY, MARGIN EXCEEDED, ABORT + RET M ; IF CARRY, MARGIN EXCEEDED, ABORT LD (ANSI_COL),A ; SAVE NEW COLUMN - JP ANSI_XY ; UDPATE CUSROR AND RETURN + JP ANSI_XY ; UDPATE CURSOR AND RETURN ; ANSI_CR: XOR A ; ZERO ACCUM diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index add2c405..11b4aec9 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -174,6 +174,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 88c1cb8c..70f67b1f 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -228,6 +228,7 @@ TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|M 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] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index f548495c..e9d445ed 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -156,6 +156,7 @@ TMSMODE .EQU TMSMODE_MBC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MS 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] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 5ebf710b..9d4a2647 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -167,6 +167,7 @@ TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MS 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] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 93cf1206..e866beff 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -169,6 +169,7 @@ TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSX 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] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 032bcd8a..f46c3b69 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -174,6 +174,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 1726fc6f..fba9880d 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -184,6 +184,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 2c937128..1f03d235 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -86,8 +86,8 @@ VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] ; @@ -178,6 +178,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index a6ddcc73..ecb505ad 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -158,6 +158,7 @@ TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSX 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] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 00c6dff2..b9b93475 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -156,6 +156,7 @@ TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MS 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] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index f534ccd4..172462b8 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -174,6 +174,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_z80retro.asm b/Source/HBIOS/cfg_z80retro.asm index 4a58c255..7bb3bdea 100644 --- a/Source/HBIOS/cfg_z80retro.asm +++ b/Source/HBIOS/cfg_z80retro.asm @@ -158,6 +158,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 66099dc4..8b6d9eaa 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -128,6 +128,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 90e104e1..4198abd1 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -139,6 +139,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index b0dd0b7b..b5daa791 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -902,5 +902,6 @@ CVDU_INIT8563: ;================================================================================================== ; CVDU_IDAT: + .DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER .DB CVDU_KBDST .DB CVDU_KBDDATA diff --git a/Source/HBIOS/gdc.asm b/Source/HBIOS/gdc.asm index 8ddd7603..be5f3f2d 100644 --- a/Source/HBIOS/gdc.asm +++ b/Source/HBIOS/gdc.asm @@ -325,5 +325,6 @@ GDC_POS .DW 0 ; CURRENT DISPLAY POSITION ;================================================================================================== ; GDC_IDAT: + .DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER .DB GDC_KBDST .DB GDC_KBDDATA diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index f8cdf4f4..af182d1e 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -3232,6 +3232,9 @@ HB_INITTBL: #IF (TMSENABLE) .DW TMS_INIT #ENDIF +#IF (VRCENABLE) + .DW VRC_INIT +#ENDIF ;#IF (DSKYENABLE) ; .DW DSKY_INIT ;#ENDIF @@ -6181,6 +6184,15 @@ SIZ_GDC .EQU $ - ORG_GDC .ECHO " bytes.\n" #ENDIF ; +#IF (VRCENABLE) +ORG_VRC .EQU $ + #INCLUDE "vrc.asm" +SIZ_VRC .EQU $ - ORG_VRC + .ECHO "VRC occupies " + .ECHO SIZ_VRC + .ECHO " bytes.\n" +#ENDIF +; #IF (DMAENABLE) ORG_DMA .EQU $ #INCLUDE "dma.asm" @@ -6241,7 +6253,7 @@ SIZ_FONTS .EQU $ - ORG_FONTS .ECHO SIZ_FONTS .ECHO " bytes.\n" ; -#IF (CVDUENABLE | VGAENABLE) | GDCENABLE | (TMSENABLE & ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC))) +#IF (CVDUENABLE | VGAENABLE | GDCENABLE | VRCENABLE | (TMSENABLE & ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC)))) ORG_KBD .EQU $ #INCLUDE "kbd.asm" SIZ_KBD .EQU $ - ORG_KBD @@ -6438,7 +6450,7 @@ SIZ_YM2612 .EQU $ - ORG_YM2612 ; ; INCLUDE LZSA2 decompression engine if required. ; -#IF ((VGAENABLE | CVDUENABLE | TMSENABLE | GDCENABLE) & USELZSA2) +#IF ((VGAENABLE | CVDUENABLE | TMSENABLE | GDCENABLE | VRCENABLE) & USELZSA2) #INCLUDE "unlzsa2s.asm" #ENDIF ; @@ -7221,6 +7233,7 @@ PS_VDCVDU .TEXT "CVDU$" PS_VDGDC .TEXT "GDC$" PS_VDTMS .TEXT "TMS$" PS_VDVGA .TEXT "VGA$" +PS_VDVRC .TEXT "VRC$" ; ; VIDEO TYPE STRINGS ; diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index ba09f728..5ba100d3 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -338,7 +338,7 @@ VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563 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 +VDADEV_VRC .EQU $50 ; VGARC ; ; SOUND DEVICE IDS ; diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index 4ae36c51..b6954c3f 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -14,9 +14,10 @@ ; ; DRIVER DATA OFFSETS (FROM IY) ; -KBD_ST .EQU 0 ; BYTE, STATUS PORT NUM (R) +KBD_MODE .EQU 0 ; BYTE, KEYBOARD MODE (STD OR VRC) +KBD_ST .EQU 1 ; BYTE, STATUS PORT NUM (R) KBD_CMD .EQU KBD_ST ; BYTE, CMD PORT NUM (W) -KBD_DAT .EQU 1 ; BYTE, DATA PORT NUM (R/W) +KBD_DAT .EQU 2 ; BYTE, DATA PORT NUM (R/W) ; ; TIMING CONSTANTS ; @@ -177,6 +178,9 @@ KBD_PUTCMD: ; PUT A CMD BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT ; LD E,A ; SAVE INCOMING VALUE IN E + LD A,(KBD_MODE) ; GET MODE BYTE + CP KBDMODE_VRC ; VGARC KEYBOARD? + JR Z,KBD_PUTCMD2 ; BAIL OUT LD B,KBD_WAITTO ; SETUP TO LOOP KBD_PUTCMD0: CALL KBD_OST ; GET OUTPUT REGISTER STATUS @@ -194,6 +198,7 @@ KBD_PUTCMD1: #ENDIF LD C,(IY+KBD_CMD) ; COMMAND PORT OUT (C),A ; WRITE IT +KBD_PUTCMD2: XOR A ; SIGNAL SUCCESS RET ; @@ -203,6 +208,9 @@ KBD_PUTDATA: ; PUT A DATA BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT ; LD E,A ; SAVE INCOMING VALUE IN E + LD A,(KBD_MODE) ; GET MODE BYTE + CP KBDMODE_VRC ; VGARC KEYBOARD? + JR Z,KBD_PUTDATA2 ; BAIL OUT LD B,KBD_WAITTO ; SETUP TO LOOP KBD_PUTDATA0: CALL KBD_OST ; GET OUTPUT REGISTER STATUS @@ -219,6 +227,7 @@ KBD_PUTDATA1: #ENDIF LD C,(IY+KBD_DAT) ; DATA PORT OUT (C),A ; WRITE IT +KBD_PUTDATA2: XOR A ; SIGNAL SUCCESS RET ; diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index aa97107a..29d985e4 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -257,6 +257,12 @@ DMAMODE_Z280 .EQU 3 ; Z280 INTEGRATED DMA DMAMODE_RC .EQU 4 ; RCBUS Z80 DMA DMAMODE_MBC .EQU 5 ; MBC ; +; KEYBOARD MODE SELECTIONS +; +KBDMODE_NONE .EQU 0 +KBDMODE_PS2 .EQU 1 ; PS/2 KEYBOARD CONTROLLER +KBDMODE_VRC .EQU 2 ; VGARC KEYBOARD CONTROLLER +; ; SERIAL DEVICE CONFIGURATION CONSTANTS ; SER_DATA5 .EQU 0 << 0 diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 2dcc6253..48205e5e 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -942,10 +942,10 @@ TMS_IDAT: .DB TMS_PPIX ; PPI CONTROL PORT #ENDIF #IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC)) + .DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER .DB TMS_KBDST ; 8242 CMD/STATUS PORT .DB TMS_KBDDATA ; 8242 DATA PORT .DB 0 ; FILLER - .DB 0 ; FILER #ENDIF ; .DB TMS_DATREG diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index d072711b..039a1445 100644 --- a/Source/HBIOS/vga.asm +++ b/Source/HBIOS/vga.asm @@ -1039,5 +1039,6 @@ REGS_VGA: ;================================================================================================== ; VGA_IDAT: + .DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER .DB VGA_KBDST .DB VGA_KBDDATA diff --git a/Source/HBIOS/vrc.asm b/Source/HBIOS/vrc.asm new file mode 100644 index 00000000..f9134547 --- /dev/null +++ b/Source/HBIOS/vrc.asm @@ -0,0 +1,643 @@ +;====================================================================== +; VIDEO DRIVER FOR VGARC +; https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:vgarc1:vgarc1home +; +; WRITTEN BY: WAYNE WARTHEN -- 5/1/2023 +;====================================================================== +; +; TODO: +; +;====================================================================== +; VGARC DRIVER - CONSTANTS +;====================================================================== +; +VRC_BASE .EQU $00 ; FIRST CHAR DATA PORT +VRC_FONTBASE .EQU VRC_BASE + $0C ; FIRST FONT PORT +VRC_SCROLLIO .EQU $F5 ; SCROLL REG PORT +; +VRC_KBDDATA .EQU $F4 +VRC_KBDST .EQU $F5 +; +VRC_ROWS .EQU 48 +VRC_COLS .EQU 64 +; +#DEFINE USEFONT8X8 +#DEFINE VRC_FONT FONT8X8 +; +TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER +; +;====================================================================== +; VRC DRIVER - INITIALIZATION +;====================================================================== +; +VRC_INIT: + LD IY,VRC_IDAT ; POINTER TO INSTANCE DATA +; + CALL NEWLINE ; FORMATTING + PRTS("VRC: IO=0x$") + LD A,VRC_BASE + CALL PRTHEXBYTE + CALL VRC_PROBE ; CHECK FOR HW PRESENCE + JR Z,VRC_INIT1 ; CONTINUE IF HW PRESENT +; + ; HARDWARE NOT PRESENT + PRTS(" NOT PRESENT$") + OR $FF ; SIGNAL FAILURE + RET +; +VRC_INIT1: + ; DISPLAY CONSOLE DIMENSIONS + LD A,VRC_COLS + CALL PC_SPACE + CALL PRTDECB + LD A,'X' + CALL COUT + LD A,VRC_ROWS + CALL PRTDECB + PRTS(" TEXT$") + + ; HARDWARE INITIALIZATION + CALL VRC_CRTINIT ; SETUP THE VGARC CHIP REGISTERS + CALL VRC_LOADFONT ; LOAD FONT DATA FROM ROM TO VGARC STORAGE + CALL VRC_VDARES ; RESET + ;CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER + + ; ADD OURSELVES TO VDA DISPATCH TABLE + LD BC,VRC_FNTBL ; BC := FUNCTION TABLE ADDRESS + LD DE,VRC_IDAT ; DE := VGARC INSTANCE DATA PTR + CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED + + ; INITIALIZE EMULATION + LD C,A ; C := ASSIGNED VIDEO DEVICE NUM + LD DE,VRC_FNTBL ; DE := FUNCTION TABLE ADDRESS + LD HL,VRC_IDAT ; HL := VGARC INSTANCE DATA PTR + CALL TERM_ATTACH ; DO IT + + XOR A ; SIGNAL SUCCESS + RET +; +;====================================================================== +; VGARC DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS +;====================================================================== +; +VRC_FNTBL: + .DW VRC_VDAINI + .DW VRC_VDAQRY + .DW VRC_VDARES + .DW VRC_VDADEV + .DW VRC_VDASCS + .DW VRC_VDASCP + .DW VRC_VDASAT + .DW VRC_VDASCO + .DW VRC_VDAWRC + .DW VRC_VDAFIL + .DW VRC_VDACPY + .DW VRC_VDASCR + .DW KBD_STAT + .DW KBD_FLUSH + .DW KBD_READ + .DW VRC_VDARDC +#IF (($ - VRC_FNTBL) != (VDA_FNCNT * 2)) + .ECHO "*** INVALID VRC FUNCTION TABLE ***\n" + !!!!! +#ENDIF + +VRC_VDAINI: + ; RESET VDA + ; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA + CALL VRC_VDARES ; RESET VDA + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDAQRY: + LD C,$00 ; MODE ZERO IS ALL WE KNOW + LD D,VRC_ROWS ; ROWS + LD E,VRC_COLS ; COLS + LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDARES: + XOR A ; CLEAR ATTRIBUTES (REV VIDEO OFF) + LD (VRC_ATTR),A ; SAVE IT + DEC A ; INIT CUR NESTING, INIT TO HIDDEN + LD (VRC_CURSOR),A ; SAVE IT + LD HL,0 ; ZERO THE SCROLL OFFSET + LD (VRC_OFF),HL ; SAVE VALUE + XOR A ; ZERO + LD (VRC_LOFF),A ; SCROLL OFFSET (LINES) + LD A,' ' ; BLANK THE SCREEN + LD DE,VRC_ROWS*VRC_COLS ; FILL ENTIRE BUFFER + CALL VRC_FILL ; DO IT + LD DE,0 ; ROW = 0, COL = 0 + CALL VRC_XY ; SEND CURSOR TO TOP LEFT + CALL VRC_SHOWCUR ; NOW SHOW THE CURSOR +; + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDADEV: + LD D,VDADEV_VRC ; D := DEVICE TYPE + LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,VRC_BASE ; L := BASE I/O ADDRESS + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDASCS: + SYSCHKERR(ERR_NOTIMPL) ; NOT IMPLEMENTED (YET) + RET + +VRC_VDASCP: + CALL VRC_XY ; SET CURSOR POSITION + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDASAT: + ; INCOMING IS: -----RUB (R=REVERSE, U=UNDERLINE, B=BLINK) + ; + ; ALL WE SUPPORT IS REVERSE. MOVE BIT TO BIT 7 OF ATTR BYTE + LD A,E ; GET ATTR VALUE + RRCA ; ROTATE TO BIT 7 + RRCA + RRCA + AND $80 ; ENSURE ONLY BIT 7 + LD (VRC_ATTR),A ; SAVE IT + XOR A ; SIGNAL SUCCESS + RET ; DONE + +VRC_VDASCO: + ; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED) + ; + ; NONE SUPPORTED, IGNORE + XOR A ; SIGNAL SUCCESS + RET ; DONE + +VRC_VDAWRC: + LD A,E ; CHARACTER TO WRITE GOES IN A + CALL VRC_PUTCHAR ; PUT IT ON THE SCREEN + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDAFIL: + LD A,E ; FILL CHARACTER GOES IN A + EX DE,HL ; FILL LENGTH GOES IN DE + CALL VRC_FILL ; DO THE FILL + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDACPY: + ; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS VRC_POS + ; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT + PUSH HL ; SAVE LENGTH + CALL VRC_XY2IDX ; ROW/COL IN DE -> SOURCE ADR IN HL + POP BC ; RECOVER LENGTH IN BC + LD DE,(VRC_POS) ; PUT DEST IN DE + JP VRC_BLKCPY ; DO A BLOCK COPY + +VRC_VDASCR: + LD A,E ; LOAD E INTO A + OR A ; SET FLAGS + RET Z ; IF ZERO, WE ARE DONE + PUSH DE ; SAVE E + JP M,VRC_VDASCR1 ; E IS NEGATIVE, REVERSE SCROLL + CALL VRC_SCROLL ; SCROLL FORWARD ONE LINE + POP DE ; RECOVER E + DEC E ; DECREMENT IT + JR VRC_VDASCR ; LOOP +VRC_VDASCR1: + CALL VRC_RSCROLL ; SCROLL REVERSE ONE LINE + POP DE ; RECOVER E + INC E ; INCREMENT IT + JR VRC_VDASCR ; LOOP + +;---------------------------------------------------------------------- +; READ VALUE AT CURRENT VDU BUFFER POSITION +; RETURN E = CHARACTER, B = COLOUR, C = ATTRIBUTES +;---------------------------------------------------------------------- + +VRC_VDARDC: + OR $FF ; UNSUPPORTED FUNCTION + RET +; +;====================================================================== +; VGARC DRIVER - PRIVATE DRIVER FUNCTIONS +;====================================================================== +; +; +;---------------------------------------------------------------------- +; PROBE FOR VGARC HARDWARE +;---------------------------------------------------------------------- +; +; ON RETURN, ZF SET INDICATES HARDWARE FOUND +; +VRC_PROBE: + LD C,VRC_BASE + LD B,0 + LD A,$AA + OUT (C),A + INC B + LD A,$55 + OUT (C),A + DEC B + IN A,(C) + CP $AA + RET NZ + INC B + IN A,(C) + CP $55 + RET +; +;---------------------------------------------------------------------- +; CRTC DISPLAY CONTROLLER CHIP INITIALIZATION +;---------------------------------------------------------------------- +; +VRC_CRTINIT: + XOR A ; ZERO ACCUM + LD A,$80 ; ACTIVATE AND ZERO HW SCROLL + OUT (VRC_SCROLLIO),A ; RESET HW SCROLL + RET ; DONE +; +;---------------------------------------------------------------------- +; LOAD FONT DATA +;---------------------------------------------------------------------- +; +VRC_LOADFONT: +; +#IF USELZSA2 + LD (VRC_STACK),SP ; SAVE STACK + LD HL,(VRC_STACK) ; AND SHIFT IT + LD DE,$2000 ; DOWN 4KB TO + OR A ; CREATE A + SBC HL,DE ; DECOMPRESSION BUFFER + LD SP,HL ; HL POINTS TO BUFFER + EX DE,HL ; START OF STACK BUFFER + PUSH DE ; SAVE IT + LD HL,VRC_FONT ; START OF FONT DATA + CALL DLZSA2 ; DECOMPRESS TO DE + POP HL ; RECALL STACK BUFFER POSITION +#ELSE + LD HL,VRC_FONT ; START OF FONT DATA +#ENDIF +; + LD DE,0+(128*8)-1 ; LENGTH OF FONT DATA - 1 + ADD HL,DE ; ADD TO HL +; LD HL,ENDFONT-1 + LD BC,VRC_FONTBASE+3 ; WORK BACKWARDS + OTDR ; DO 4 PAGES + DEC C + OTDR + DEC C + OTDR + DEC C + OTDR + DEC C +; +#IF USELZSA2 + LD HL,(VRC_STACK) ; ERASE DECOMPRESS BUFFER + LD SP,HL ; BY RESTORING THE STACK + RET ; DONE +VRC_STACK .DW 0 +#ELSE + RET +#ENDIF +; +;---------------------------------------------------------------------- +; SET CURSOR POSITION TO ROW IN D AND COLUMN IN E +;---------------------------------------------------------------------- +; +VRC_XY: + PUSH DE ; SAVE NEW POSITION FOR NOW + CALL VRC_HIDECUR ; HIDE THE CURSOR + POP DE ; RECOVER INCOMING ROW/COL + CALL VRC_XY2IDX ; CONVERT ROW/COL TO BUF IDX + LD (VRC_POS),HL ; SAVE THE RESULT (DISPLAY POSITION) + JP VRC_SHOWCUR ; SHOW THE CURSOR AND EXIT +; +;---------------------------------------------------------------------- +; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL +; D=ROW, E=COL +;---------------------------------------------------------------------- +; +VRC_XY2IDX: + LD A,E ; SAVE COLUMN NUMBER IN A + LD H,D ; SET H TO ROW NUMBER + LD E,VRC_COLS ; SET E TO ROW LENGTH + CALL MULT8 ; MULTIPLY TO GET ROW OFFSET, H * E = HL, E=0, B=0 + LD E,A ; GET COLUMN BACK + ADD HL,DE ; ADD IT IN + + LD DE,(VRC_OFF) ; SCREEN OFFSET + ADD HL,DE ; ADJUST +; + PUSH HL ; SAVE IT + LD DE,VRC_ROWS * VRC_COLS ; DE := BUF SIZE + OR A ; CLEAR CARRY + SBC HL,DE ; SUBTRACT FROM HL + JR C,VRC_XY2IDX1 ; BYPASS IF NO WRAP + POP DE ; THROW AWAY TOS + RET ; DONE +VRC_XY2IDX1: + POP HL ; NO WRAP, RESTORE + RET ; RETURN +; +;---------------------------------------------------------------------- +; SHOW OR HIDE CURSOR +;---------------------------------------------------------------------- +; +; VGARC USES HIGH BIT OF CHAR VALUE FOR INVERSE VIDEO. WE HAVE NO +; HARDWARE CURSOR, SO WE LEVERAGE THE INVERSE VIDEO TO SHOW A CURSOR. +; SINCE ANY OPERATION THAT POTENTIALLY OVERWERITES THE CURSOR POSITION +; COULD DESTROY THE CURSOR, WE HAVE A COUPLE FUNCTIONS TO SHOW AND +; HIDE THE CURSOR. A VARIABLE IS USED TO TRACK THE SHOW/HIDE +; OPERATIONS BECAUSE WE MAY HAVE NESTED CALLS. ZERO MEANS SHOW +; REAL CURSOR. ANY VALUE LESS THAN ZERO MEANS HIDDEN. +; +VRC_SHOWCUR: + LD A,(VRC_CURSOR) ; GET CURRENT NESTING VALUE + INC A ; INCREMENT TO SHOW + LD (VRC_CURSOR),A ; SAVE IT + RET NZ ; ALREADY SHOWN, NOTHING TO DO +; + ; WE TRANSITIONED FROM NON-ZERO TO ZERO. NEED TO ACTUALLY + ; SHOW THE CURSOR NOW. +; + JR VRC_FLIPCUR +; +VRC_HIDECUR: + LD A,(VRC_CURSOR) ; GET CURRENT NESTING VALUE + DEC A ; DECREMENT TO HIDE + LD (VRC_CURSOR),A ; SAVE IT + INC A ; BACK TO ORIGINAL VALUE + RET NZ ; ALREADY HIDDEN, NOTHING TO DO +; + ; WE TRANSITIONED FROM ZERO TO NEGATIVE. NEED TO ACTUALLY + ; HIDE THE CURSOR NOW. SINCE SHOWING AND HIDING ARE THE + ; SAME OPERATION (FLIP REV VID BIT), WE REUSE CODE ABOVE. +; + JR VRC_FLIPCUR +; +VRC_FLIPCUR: + ; SHOWING OR HIDING THE CURSOR IS THE SAME OPERATION. + ; SO WE USE COMMON CODE TO FLIP THE REV VID BIT. + LD HL,(VRC_POS) ; CURSOR POSITION + LD B,L ; INVERT FOR I/O + LD C,H + IN A,(C) ; GET VALUE + XOR $80 ; FLIP REV VID BIT + OUT (C),A ; WRITE NEW VALUE + RET +; +;---------------------------------------------------------------------- +; WRITE VALUE IN A TO CURRENT VDU BUFFER POSITION, ADVANCE CURSOR +;---------------------------------------------------------------------- +; +VRC_PUTCHAR: + ; WRITE CHAR AT CURRENT CURSOR POSITION. SINCE THE CURSOR + ; IS JUST THE HIGH BIT (REV VIDEO), WE FIRST TURN OFF THE + ; CURSOR, WRITE THE CHAR, UPDATE THE CURSOR POSITION, AND + ; FINALLY TURN THE CURSOR BACK ON AT THE NEW POSITION. +; + PUSH AF ; SAVE INCOMING CHAR + CALL VRC_HIDECUR ; HIDE CURSOR + POP AF + LD HL,(VRC_POS) ; GET CUR BUF POSITION + LD B,L ; INVERT FOR I/O + LD C,H + AND $7F ; SUPPRESS ATTRIBUTE (HI BIT) + LD L,A ; PUT VALUE IN L + LD A,(VRC_ATTR) ; GET CURRENT ATTRIBUTE + OR L ; COMBINE WITH CHAR VALUE + OUT (C),A ; WRITE VALUE TO BUFFER +; + ; SET CURSOR AT NEW POSITION + LD HL,(VRC_POS) ; GET CURRENT BUF OFFSET + INC HL ; INCREMENT + PUSH HL ; SAVE IT + LD DE,VRC_ROWS * VRC_COLS ; DE := BUF SIZE + OR A ; CLEAR CARRY + SBC HL,DE ; SUBTRACT FROM HL + JR C,VRC_PUTCHAR1 ; BYPASS IF NO WRAP + POP DE ; THROW AWAY TOS + LD HL,0 ; BACK TO START + JR VRC_PUTCHAR2 ; CONTINUE +VRC_PUTCHAR1: + POP HL ; NO WRAP, RESTORE +VRC_PUTCHAR2: + LD (VRC_POS),HL ; SAVE NEW POSITION + JP VRC_SHOWCUR ; SHOW IT AND RETURN +; +;---------------------------------------------------------------------- +; 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 +;---------------------------------------------------------------------- +; +VRC_FILL: + LD (VRC_FILL1+1),A ; SAVE FILL CHAR + PUSH DE ; SAVE INCOMING DE + CALL VRC_HIDECUR ; HIDE CURSOR + POP DE ; RESTORE INCOMING DE + LD HL,(VRC_POS) ; STARTING POSITION +; +VRC_FILL1: + LD A,$FF ; FILL CHAR + LD B,L ; INVERT FOR I/O + LD C,H + OUT (C),A ; PUT CHAR TO BUF +; + DEC DE ; DECREMENT COUNT + LD A,D ; TEST FOR ZERO + OR E + JP Z,VRC_SHOWCUR ; EXIT VIA SHOW CURSOR IF DONE +; + INC HL ; INCREMENT + PUSH HL ; SAVE IT + LD BC,VRC_ROWS * VRC_COLS ; BC := BUF SIZE + OR A ; CLEAR CARRY + SBC HL,BC ; SUBTRACT FROM HL + JR C,VRC_FILL2 ; BYPASS IF NO WRAP + POP BC ; THROW AWAY TOS + LD HL,0 ; BACK TO START + JR VRC_FILL3 ; CONTINUE +VRC_FILL2: + POP HL ; NO WRAP, RESTORE +VRC_FILL3: + LD (VRC_POS),HL ; SAVE NEW POSITION + JR VRC_FILL1 ; LOOP TILL DONE +; +;---------------------------------------------------------------------- +; SCROLL ENTIRE SCREEN FORWARD BY ONE LINE (CURSOR POSITION UNCHANGED) +;---------------------------------------------------------------------- +; +VRC_SCROLL: + ; SCROLL DOWN 1 LINE VIA HARDWARE + CALL VRC_HIDECUR ; SUPPRESS CURSOR + LD A,(VRC_LOFF) ; GET LINE OFFSET + INC A ; BUMP + CP VRC_ROWS ; OVERFLOW? + JR C,VRC_SCROLL1 ; IF NOT, SKIP + XOR A ; ELSE, BACK TO ZERO +VRC_SCROLL1: + LD (VRC_LOFF),A ; SAVE NEW VALUE + OR $80 ; SET HW SCROLL ENABLE BIT + OUT (VRC_SCROLLIO),A ; DO IT +; + ; ADJUST BUFFER OFFSET + LD HL,(VRC_OFF) ; BUFFER OFFSET + LD DE,VRC_COLS ; COLUMNS + ADD HL,DE ; ADD TO GET NEW OFFSET + PUSH HL ; SAVE IT + LD DE,VRC_ROWS * VRC_COLS ; DE := BUF SIZE + OR A ; CLEAR CARRY + SBC HL,DE ; SUBTRACT FROM HL + JR C,VRC_SCROLL2 ; BYPASS IF NO WRAP + POP DE ; BURN TOS + JR VRC_SCROLL3 ; CONTINUE +VRC_SCROLL2: + POP HL ; NO WRAP, RESTORE HL +VRC_SCROLL3: + LD (VRC_OFF),HL ; SAVE NEW OFFSET +; + ; FILL EXPOSED LINE + LD HL,(VRC_POS) ; GET CURSOR POS + PUSH HL ; SAVE IT + LD D,VRC_ROWS - 1 ; LAST ROW + LD E,0 ; FIRST COLUMN + CALL VRC_XY2IDX ; HL = START OF LAST LINE + LD (VRC_POS),HL ; SET FILL POSITION + LD A,' ' ; FILL WITH BLANKS + LD DE,VRC_COLS ; FILL ONE LINE + CALL VRC_FILL ; FILL LAST LINE + POP HL ; RECOVER CURSOR POS + LD (VRC_POS),HL ; PUT VALUE BACK +; + ; ADJUST CURSOR POSITION + LD HL,(VRC_POS) ; CURSOR POSITION + LD DE,VRC_COLS ; COLUMNS + ADD HL,DE ; NEW CURSOR POS + PUSH HL ; SAVE IT + LD DE,VRC_ROWS * VRC_COLS ; DE := DISPLAY SIZE + OR A ; CLEAR CARRY + SBC HL,DE ; SUBTRACT FROM HL + JR C,VRC_SCROLL4 ; BYPASS IF NO WRAP + POP DE ; BURN TOS + JR VRC_SCROLL5 ; CONTINUE +VRC_SCROLL4: + POP HL ; NO WRAP, RESTORE HL +VRC_SCROLL5: + LD (VRC_POS),HL ; SAVE NEW CURSOR POS + JP VRC_SHOWCUR ; EXIT VIA SHOW CURSOR +; +;---------------------------------------------------------------------- +; REVERSE SCROLL ENTIRE SCREEN BY ONE LINE (CURSOR POSITION UNCHANGED) +;---------------------------------------------------------------------- +; +VRC_RSCROLL: + ; SCROLL UP 1 LINE VIA HARDWARE + CALL VRC_HIDECUR ; SUPPRESS CURSOR + LD A,(VRC_LOFF) ; GET LINE OFFSET + DEC A ; BUMP + CP $FF ; OVERFLOW? + JR NZ,VRC_RSCROLL1 ; IF NOT, SKIP + LD A,VRC_ROWS - 1 ; ELSE, BACK TO LAST ROW +VRC_RSCROLL1: + LD (VRC_LOFF),A ; SAVE NEW VALUE + OR $80 ; SET HW SCROLL ENABLE BIT + OUT (VRC_SCROLLIO),A ; DO IT +; + ; ADJUST BUFFER OFFSET + LD HL,(VRC_OFF) ; BUFFER OFFSET + LD DE,VRC_COLS ; COLUMNS + OR A ; CLEAR CARRY + SBC HL,DE ; SUBTRACT TO GET NEW OFFSET + PUSH HL ; SAVE IT + JR NC,VRC_RSCROLL2 ; BYPASS IF NO WRAP + LD DE,VRC_ROWS * VRC_COLS ; DISPLAY SIZE + ADD HL,DE ; HANDLE WRAP + POP DE ; BURN TOS + JR VRC_RSCROLL3 ; CONTINUE +VRC_RSCROLL2: + POP HL ; NO WRAP, RESTORE HL +VRC_RSCROLL3: + LD (VRC_OFF),HL ; SAVE NEW OFFSET +; + ; FILL EXPOSED LINE + LD HL,(VRC_POS) ; GET CURSOR POS + PUSH HL ; SAVE IT + LD D,0 ; FIRST ROW + LD E,0 ; FIRST COLUMN + CALL VRC_XY2IDX ; HL = START OF FIRST LINE + LD (VRC_POS),HL ; SET FILL POSITION + LD A,' ' ; FILL WITH BLANKS + LD DE,VRC_COLS ; FILL ONE LINE + CALL VRC_FILL ; FILL FIRST LINE + POP HL ; RECOVER CURSOR POS + LD (VRC_POS),HL ; PUT VALUE BACK +; + ; ADJUST CURSOR POSITION + LD HL,(VRC_POS) ; CURSOR POSITION + LD DE,VRC_COLS ; COLUMNS + OR A ; CLEAR CARRY + SBC HL,DE ; NEW CURSOR POS + PUSH HL ; SAVE IT + JR NC,VRC_RSCROLL4 ; BYPASS IF NO WRAP + LD DE,VRC_ROWS * VRC_COLS ; DISPLAY SIZE + ADD HL,DE ; HANDLE WRAP + POP DE ; BURN TOS + JR VRC_RSCROLL5 ; CONTINUE +VRC_RSCROLL4: + POP HL ; NO WRAP, RESTORE HL +VRC_RSCROLL5: + LD (VRC_POS),HL ; SAVE NEW CURSOR POS + JP VRC_SHOWCUR ; EXIT VIA SHOW CURSOR +; +;---------------------------------------------------------------------- +; BLOCK COPY BC BYTES FROM HL TO DE +;---------------------------------------------------------------------- +; +VRC_BLKCPY: + PUSH BC + PUSH HL + CALL VRC_HIDECUR + POP HL + POP BC +; +VRC_BLKCPY1: + LD A,B + OR C + JP Z,VRC_SHOWCUR ; EXIT VIA SHOW CURSOR +; + PUSH BC ; SAVE LOOP CTL + LD B,L ; INVERT FOR I/O + LD C,H + IN A,(C) ; GET SOURCE CHAR + LD B,E ; INVERT FOR I/O + LD C,D + OUT (C),A ; WRITE DEST CHAR + POP BC ; RESTORE LOOP CTL +; + INC HL ; NEXT SRC CHAR + INC DE ; NEXT DEST CHAR + DEC BC ; DEC COUNT + JR VRC_BLKCPY1 ; LOOP TILL DONE +; +;================================================================================================== +; VGARC DRIVER - DATA +;================================================================================================== +; +VRC_ATTR .DB 0 ; CURRENT COLOR +VRC_POS .DW 0 ; CURRENT DISPLAY POSITION +VRC_OFF .DW 0 ; SCREEN START OFFSET INTO DISP BUF +VRC_LOFF .DB 0 ; LINE OFFSET INTO DISP BUF +VRC_CURSOR .DB 0 ; CURSOR NESTING LEVEL +; +;================================================================================================== +; VGA DRIVER - INSTANCE DATA +;================================================================================================== +; +VRC_IDAT: + .DB KBDMODE_VRC ; VGARC KEYBOARD CONTROLLER + .DB VRC_KBDST + .DB VRC_KBDDATA diff --git a/Source/ver.inc b/Source/ver.inc index e90eda31..a8d14463 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 3 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.3.0-dev.7" +#DEFINE BIOSVER "3.3.0-dev.8" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 96dcd00e..e3963be0 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 3 rup equ 0 rtp equ 0 biosver macro - db "3.3.0-dev.7" + db "3.3.0-dev.8" endm