Browse Source

Support for VGARC

Initial support for Bill Shen's VGARC video/keyboard module for RCBus.
pull/351/head v3.3.0-dev.8
Wayne Warthen 3 years ago
parent
commit
7ac88efac1
  1. BIN
      Doc/RomWBW Applications.pdf
  2. BIN
      Doc/RomWBW Disk Catalog.pdf
  3. BIN
      Doc/RomWBW Errata.pdf
  4. BIN
      Doc/RomWBW ROM Applications.pdf
  5. BIN
      Doc/RomWBW System Guide.pdf
  6. BIN
      Doc/RomWBW User Guide.pdf
  7. 2
      ReadMe.md
  8. 2
      ReadMe.txt
  9. 1
      Source/Doc/UserGuide.md
  10. 2
      Source/HBIOS/Config/RCZ180_ext.asm
  11. 3
      Source/HBIOS/Config/RCZ180_nat.asm
  12. 2
      Source/HBIOS/Config/RCZ280_ext.asm
  13. 2
      Source/HBIOS/Config/RCZ280_nat.asm
  14. 2
      Source/HBIOS/Config/RCZ280_zz80mb.asm
  15. 2
      Source/HBIOS/Config/RCZ280_zzrc.asm
  16. 2
      Source/HBIOS/Config/RCZ80_easy.asm
  17. 2
      Source/HBIOS/Config/RCZ80_kio.asm
  18. 2
      Source/HBIOS/Config/RCZ80_skz.asm
  19. 2
      Source/HBIOS/Config/RCZ80_std.asm
  20. 2
      Source/HBIOS/Config/RCZ80_tiny.asm
  21. 2
      Source/HBIOS/Config/RCZ80_zrc.asm
  22. 2
      Source/HBIOS/Config/RCZ80_zrc_ram.asm
  23. 1
      Source/HBIOS/Config/SCZ180_sc126.asm
  24. 1
      Source/HBIOS/Config/SCZ180_sc130.asm
  25. 5
      Source/HBIOS/ansi.asm
  26. 1
      Source/HBIOS/cfg_dyno.asm
  27. 1
      Source/HBIOS/cfg_master.asm
  28. 1
      Source/HBIOS/cfg_mbc.asm
  29. 1
      Source/HBIOS/cfg_mk4.asm
  30. 1
      Source/HBIOS/cfg_n8.asm
  31. 1
      Source/HBIOS/cfg_rcz180.asm
  32. 1
      Source/HBIOS/cfg_rcz280.asm
  33. 3
      Source/HBIOS/cfg_rcz80.asm
  34. 1
      Source/HBIOS/cfg_rph.asm
  35. 1
      Source/HBIOS/cfg_sbc.asm
  36. 1
      Source/HBIOS/cfg_scz180.asm
  37. 1
      Source/HBIOS/cfg_z80retro.asm
  38. 1
      Source/HBIOS/cfg_zeta.asm
  39. 1
      Source/HBIOS/cfg_zeta2.asm
  40. 1
      Source/HBIOS/cvdu.asm
  41. 1
      Source/HBIOS/gdc.asm
  42. 17
      Source/HBIOS/hbios.asm
  43. 2
      Source/HBIOS/hbios.inc
  44. 13
      Source/HBIOS/kbd.asm
  45. 6
      Source/HBIOS/std.asm
  46. 2
      Source/HBIOS/tms.asm
  47. 1
      Source/HBIOS/vga.asm
  48. 643
      Source/HBIOS/vrc.asm
  49. 2
      Source/ver.inc
  50. 2
      Source/ver.lib

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Disk Catalog.pdf

Binary file not shown.

BIN
Doc/RomWBW Errata.pdf

Binary file not shown.

BIN
Doc/RomWBW ROM Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW System Guide.pdf

Binary file not shown.

BIN
Doc/RomWBW User Guide.pdf

Binary file not shown.

2
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

2
ReadMe.txt

@ -1,6 +1,6 @@
RomWBW ReadMe
Wayne Warthen (wwarthen@gmail.com)
16 Apr 2023
02 May 2023

1
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 |

2
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
;
;

3
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

2
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

2
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

2
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

2
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

2
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

2
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

2
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

2
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

2
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

2
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

2
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

1
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

1
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

5
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

1
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

1
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

1
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

1
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

1
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

1
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

1
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

3
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

1
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

1
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

1
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

1
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

1
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

1
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

1
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

1
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

17
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
;

2
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
;

13
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
;

6
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

2
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

1
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

643
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

2
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

2
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

Loading…
Cancel
Save