From e8ecdd0fac84d4a1f6d3cd075c86aa98f2d3bc78 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Fri, 10 Dec 2021 16:34:15 -0800 Subject: [PATCH] Support MBC VDC --- Source/Fonts/Build.cmd | 5 ++ Source/Fonts/Makefile | 9 ++- Source/Fonts/fonts.txt | 3 +- Source/HBIOS/Makefile | 2 +- Source/HBIOS/cfg_master.asm | 2 + Source/HBIOS/cfg_mbc.asm | 4 +- Source/HBIOS/cfg_mk4.asm | 2 + Source/HBIOS/cfg_n8.asm | 2 + Source/HBIOS/cfg_sbc.asm | 2 + Source/HBIOS/cvdu.asm | 110 ++++++++++++++++++++++-------------- Source/HBIOS/hbios.asm | 10 ++++ Source/HBIOS/std.asm | 12 ++++ Source/ver.inc | 2 +- Source/ver.lib | 2 +- 14 files changed, 117 insertions(+), 50 deletions(-) diff --git a/Source/Fonts/Build.cmd b/Source/Fonts/Build.cmd index cd878409..d41f7a41 100644 --- a/Source/Fonts/Build.cmd +++ b/Source/Fonts/Build.cmd @@ -12,9 +12,14 @@ lzsa -f2 -r font8x8u.bin font8x8c.bin || exit /b lzsa -f2 -r font8x11u.bin font8x11c.bin || exit /b lzsa -f2 -r font8x16u.bin font8x16c.bin || exit /b +lzsa -f2 -r fontcgau.bin fontcgac.bin || exit /b + fonttool font8x8u.bin > font8x8u.asm || exit /b fonttool font8x11u.bin > font8x11u.asm || exit /b fonttool font8x16u.bin > font8x16u.asm || exit /b fonttool font8x8c.bin > font8x8c.asm || exit /b fonttool font8x11c.bin > font8x11c.asm || exit /b fonttool font8x16c.bin > font8x16c.asm || exit /b + +fonttool fontcgau.bin > fontcgau.asm || exit /b +fonttool fontcgac.bin > fontcgac.asm || exit /b diff --git a/Source/Fonts/Makefile b/Source/Fonts/Makefile index 0a3ddf78..dae4a305 100644 --- a/Source/Fonts/Makefile +++ b/Source/Fonts/Makefile @@ -1,8 +1,8 @@ OBJECTS = \ - font8x8u.asm font8x11u.asm font8x16u.asm \ - font8x8c.asm font8x11c.asm font8x16c.asm + font8x8u.asm font8x11u.asm font8x16u.asm fontcgau.asm \ + font8x8c.asm font8x11c.asm font8x16c.asm fontcgac.asm -OTHERS = font8x8c.bin font8x11c.bin font8x16c.bin +OTHERS = font8x8c.bin font8x11c.bin font8x16c.bin fontcgac.bin TOOLS = ../../Tools @@ -23,5 +23,8 @@ font8x11c.bin: font8x11u.bin font8x16c.bin: font8x16u.bin $(BINDIR)/lzsa -f2 -r $< $@ +fontcgac.bin: fontcgau.bin + $(BINDIR)/lzsa -f2 -r $< $@ + %.asm: %.bin $(BINDIR)/bin2asm $< > $@ diff --git a/Source/Fonts/fonts.txt b/Source/Fonts/fonts.txt index 2f720b44..19b46dd5 100644 --- a/Source/Fonts/fonts.txt +++ b/Source/Fonts/fonts.txt @@ -6,7 +6,8 @@ Name Format Size Board & Display Mode ------------------------------------------------------------------------------------ font8x8u.bin 8x8 2048 ECB-SCG, ECB-VGA3 (80x60) font8x11u.bin 8x11 2816 ECB-VGA3 (80x43) -font8x16u.bin 8x16 4096 ECB-CVDU (80x25), ECB-VGA3 (80x24, 80x25, 80x30) +font8x16u.bin 8x16 4096 ECB-CVDU (80x25), ECB-VGA3 (80x24, 80x25, 80x30), MBC-VDC +fontcgau.bin 8x8 4096 ECB-CVDU (80x25), MBC-VDC For inclusion in HBIOS the .bin format files must be convert to assembler .asm format. This is acheived using the fonttool utility and is completed automatically as part of the build process. diff --git a/Source/HBIOS/Makefile b/Source/HBIOS/Makefile index b1dc4abf..f1c5ef01 100644 --- a/Source/HBIOS/Makefile +++ b/Source/HBIOS/Makefile @@ -10,7 +10,7 @@ TOOLS =../../Tools OTHERS = *.img *.rom *.com *.upd *.bin *.z80 cpm.sys zsys.sys Build.inc font*.asm *.dat include $(TOOLS)/Makefile.inc -FONTS := font8x11c.asm font8x11u.asm font8x16c.asm font8x16u.asm font8x8c.asm font8x8u.asm +FONTS := font8x11c.asm font8x11u.asm font8x16c.asm font8x16u.asm font8x8c.asm font8x8u.asm fontcgac.asm fontcgau.asm ifneq ($(findstring $(ROM_PLATFORM), N8 MK4 RCZ180 SCZ180 DYNO),) TASM=$(BINDIR)/uz80as -t hd64180 diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 0c38bef2..f527e76f 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -202,6 +202,8 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index 54f277bf..ec23472c 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -137,7 +137,9 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUENABLE .EQU TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .EQU CVDUMODE_MBC ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 5e5ea085..157e1134 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -137,6 +137,8 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 86569b96..d9aa64c6 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -139,6 +139,8 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 19508f59..1fe35342 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -138,6 +138,8 @@ XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|RC|RCV9958|RCKBD] diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index 7f5b6cd1..7c68ac72 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -18,17 +18,34 @@ ; CVDU_BASE .EQU $E0 ; +#IF (CVDUMODE == CVDUMODE_ECB) CVDU_KBDDATA .EQU CVDU_BASE + $02 ; KBD CTLR DATA PORT CVDU_KBDST .EQU CVDU_BASE + $0A ; KBD CTLR STATUS/CMD PORT CVDU_STAT .EQU CVDU_BASE + $04 ; READ M8563 STATUS CVDU_REG .EQU CVDU_BASE + $04 ; SELECT M8563 REGISTER CVDU_DATA .EQU CVDU_BASE + $0C ; READ/WRITE M8563 DATA +#ENDIF +; +#IF (CVDUMODE == CVDUMODE_MBC) +CVDU_KBDDATA .EQU CVDU_BASE + $02 ; KBD CTLR DATA PORT +CVDU_KBDST .EQU CVDU_BASE + $03 ; KBD CTLR STATUS/CMD PORT +CVDU_STAT .EQU CVDU_BASE + $04 ; READ M8563 STATUS +CVDU_REG .EQU CVDU_BASE + $04 ; SELECT M8563 REGISTER +CVDU_DATA .EQU CVDU_BASE + $05 ; READ/WRITE M8563 DATA +#ENDIF ; CVDU_ROWS .EQU 25 CVDU_COLS .EQU 80 ; -#DEFINE USEFONT8X16 -#DEFINE CVDU_FONT FONT8X16 +#IF (CVDUMON == CVDUMON_CGA) + #DEFINE USEFONTCGA + #DEFINE CVDU_FONT FONTCGA +#ENDIF +; +#IF (CVDUMON == CVDUMON_EGA) + #DEFINE USEFONT8X16 + #DEFINE CVDU_FONT FONT8X16 +#ENDIF ; TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER ; @@ -775,9 +792,56 @@ CVDU_POS .DW 0 ; CURRENT DISPLAY POSITION ; ; CVDU_INIT8563: -#IF 1 -; EGA 720X368 9-BIT CHARACTERS +; +#IF (CVDUMON == CVDUMON_CGA) +; +; CGA 640x200 8-BIT CHARACTERS +; - requires 16.000Mhz oscillator frequency +; + .DB $7E ; 0: hor. total - 1 + .DB $50 ; 1: hor. displayed + .DB $66 ; 2: hor. sync position 85 + .DB $49 ; 3: vert/hor sync width or 0x4F -- MDA + .DB $20 ; 4: vert total + .DB $E0 ; 5: vert total adjust + .DB $19 ; 6: vert. displayed + .DB $1D ; 7: vert. sync postition + .DB $FC ; 8: interlace mode + .DB $E7 ; 9: char height - 1 + .DB $A0 ; 10: cursor mode, start line + .DB $E7 ; 11: cursor end line + .DB $00 ; 12: display start addr hi + .DB $00 ; 13: display start addr lo + .DB $07 ; 14: cursor position hi + .DB $80 ; 15: cursor position lo + .DB $12 ; 16: light pen vertical + .DB $17 ; 17: light pen horizontal + .DB $0F ; 18: update address hi + .DB $D0 ; 19: update address lo + .DB $08 ; 20: attribute start addr hi + .DB $20 ; 21: attribute start addr lo + .DB $78 ; 22: char hor size cntrl 0x78 + .DB $E8 ; 23: vert char pixel space - 1, increase to 13 with new font + .DB $20 ; 24: copy/fill, reverse, blink rate; vertical scroll + .DB $47 ; 25: gr/txt, color/mono, pxl-rpt, dbl-wide; horiz. scroll + .DB $F0 ; 26: fg/bg colors (monochr) + .DB $00 ; 27: row addr display incr + .DB $2F ; 28: char set addr; RAM size (64/16) + .DB $E7 ; 29: underline position + .DB $4F ; 30: word count - 1 + .DB $07 ; 31: data + .DB $0F ; 32: block copy src hi + .DB $D0 ; 33: block copy src lo + .DB $7D ; 34: display enable begin + .DB $64 ; 35: display enable end + .DB $F5 ; 36: refresh rate +#ENDIF +; +#IF (CVDUMON == CVDUMON_EGA) +; +; EGA 720X350 9-BIT CHARACTERS ; - requires 16.257Mhz oscillator frequency +; .DB $61 ; 0: hor. total - 1 .DB $50 ; 1: hor. displayed .DB $5A ; 2: hor. sync position 85 @@ -815,44 +879,6 @@ CVDU_INIT8563: .DB $06 ; 34: display enable begin .DB $56 ; 35: display enable end .DB $00 ; 36: refresh rate -#ELSE - .DB $7E ; 0: hor. total - 1 - .DB $50 ; 1: hor. displayed - .DB $66 ; 2: hor. sync position 85 - .DB $49 ; 3: vert/hor sync width or 0x4F -- MDA - .DB $20 ; 4: vert total - .DB $E0 ; 5: vert total adjust - .DB $19 ; 6: vert. displayed - .DB $1D ; 7: vert. sync postition - .DB $FC ; 8: interlace mode - .DB $E7 ; 9: char height - 1 - .DB $A0 ; 10: cursor mode, start line - .DB $E7 ; 11: cursor end line - .DB $00 ; 12: display start addr hi - .DB $00 ; 13: display start addr lo - .DB $07 ; 14: cursor position hi - .DB $80 ; 15: cursor position lo - .DB $12 ; 16: light pen vertical - .DB $17 ; 17: light pen horizontal - .DB $0F ; 18: update address hi - .DB $D0 ; 19: update address lo - .DB $08 ; 20: attribute start addr hi - .DB $20 ; 21: attribute start addr lo - .DB $78 ; 22: char hor size cntrl 0x78 - .DB $E8 ; 23: vert char pixel space - 1, increase to 13 with new font - .DB $20 ; 24: copy/fill, reverse, blink rate; vertical scroll - .DB $47 ; 25: gr/txt, color/mono, pxl-rpt, dbl-wide; horiz. scroll - .DB $F0 ; 26: fg/bg colors (monochr) - .DB $00 ; 27: row addr display incr - .DB $2F ; 28: char set addr; RAM size (64/16) - .DB $E7 ; 29: underline position - .DB $4F ; 30: word count - 1 - .DB $07 ; 31: data - .DB $0F ; 32: block copy src hi - .DB $D0 ; 33: block copy src lo - .DB $7D ; 34: display enable begin - .DB $64 ; 35: display enable end - .DB $F5 ; 36: refresh rate #ENDIF ; ;================================================================================================== diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 7d86d711..7ed0e96e 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -5023,6 +5023,16 @@ FONT8X16: .ECHO " 8X16" #ENDIF ; +#IFDEF USEFONTCGA +FONTCGA: + #IF USELZSA2 + #INCLUDE "fontcgac.asm" + #ELSE + #INCLUDE "fontcgau.asm" + #ENDIF + .ECHO " CGA" +#ENDIF +; SIZ_FONTS .EQU $ - ORG_FONTS .ECHO " occupy " .ECHO SIZ_FONTS diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 8aee5ca4..500c4fea 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -225,6 +225,18 @@ TMSMODE_RC .EQU 3 ; RC2014 TMS9918 VIDEO BOARD TMSMODE_RCV9958 .EQU 4 ; RC2014 V9958 VIDEO BOARD TMSMODE_RCKBD .EQU 5 ; RC2014 TMS9918 + PS2 KEYBOARD ; +; CVDU VIDEO MODE SELECTIONS +; +CVDUMODE_NONE .EQU 0 +CVDUMODE_ECB .EQU 1 ; SCG ECB BOARD +CVDUMODE_MBC .EQU 2 ; MBC VDC BOARD +; +; CVDU MONITOR SELECTIONS +; +CVDUMON_NONE .EQU 0 +CVDUMON_CGA .EQU 1 ; CGA MONITOR TIMING (16.000 MHZ OSC) +CVDUMON_EGA .EQU 2 ; EGA MONITOR TIMING (16.257 MHZ OSC) +; ; DMA MODE SELECTIONS ; DMAMODE_NONE .EQU 0 diff --git a/Source/ver.inc b/Source/ver.inc index 77402c1e..69e8e59f 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.143" +#DEFINE BIOSVER "3.1.1-pre.144" diff --git a/Source/ver.lib b/Source/ver.lib index 28719bac..0e84f405 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.143" + db "3.1.1-pre.144" endm