From def84eded94aeae55d473bdc98fdf001f5306806 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Fri, 22 Dec 2023 16:09:33 -0800 Subject: [PATCH] Integrate Jose Collado's Screen Color Enhancements Credit and thanks to Jose Collado - This change enhances both the TMS driver and ANSI emulation to handle setting of screen foreground/background. --- Doc/RomWBW Applications.pdf | Bin 240354 -> 240354 bytes Doc/RomWBW Disk Catalog.pdf | Bin 123538 -> 123538 bytes Doc/RomWBW Errata.pdf | Bin 28481 -> 28481 bytes Doc/RomWBW ROM Applications.pdf | Bin 155013 -> 155013 bytes Doc/RomWBW System Guide.pdf | Bin 544337 -> 546756 bytes Doc/RomWBW User Guide.pdf | Bin 768729 -> 768729 bytes Source/Doc/SystemGuide.md | 15 ++-- Source/HBIOS/ansi.asm | 126 +++++++++++++++++++++++++++++++- Source/HBIOS/cvdu.asm | 6 ++ Source/HBIOS/gdc.asm | 5 ++ Source/HBIOS/tms.asm | 97 ++++++++++++++++++------ Source/HBIOS/vga.asm | 4 + Source/ver.inc | 2 +- Source/ver.lib | 2 +- 14 files changed, 223 insertions(+), 34 deletions(-) diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 6b08ec9b5b040e6c68dde44be443a2d149503b20..b5e2f6650efc3cb77c90952977be8c82d8a627a9 100644 GIT binary patch delta 136 zcmaEKmG9A2zJ?aY7N#xCo<*!?2Bs!P)BTE=AxrK?jk%6CMu?lu}T*W1cMI{wQscBq>hL#5ACS0njuKsRZ0RM<1 AS^xk5 delta 132 zcmbPqlzq}s_J%Et6ECnD8e5o}PM>yxQ4Ye~zViZOgCMu?lu}T*W1cMI{wQscBq>hL#5ACS0njuKsRZ0OOY< A1ONa4 diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index 32362ce6235268d83b962df6ff42b109890ce06d..22fdae855ddf05c3813f181ea5ffc1cb551bbac4 100644 GIT binary patch delta 152 zcmX?jkMZC=#tm;XHOvfvP}jgh-M~OyQ$gQ1KgA`nBvnDf#mdOQ$k@=x$jA_^WV2}2 z8I}YKGc!v=Aa*o0u(WV7G%`;!Oo7WxFoTtq@pM_ SjmyZ~$jpdKRn^tsjSB!~#3twf delta 152 zcmX?jkMZC=#tm;XH4Kd{4UBaSEYuAQ)HN0Kee+XX5=&AQG+eBV42+Bojf{*8!AdrZ zW}RV4a51(pG&ZwzGqEr)z#mP3jm0iCwu?^ diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 3ba748a7ad55e9b36701e73dd03fe426a56bd2ad..9899e6648c36efb2ecc86b742dd9628a736c956c 100644 GIT binary patch delta 109 zcmZqO&Dpw}v!R7?3zLW)tC@kRsljwfJ0>{@bGwZl(+fFgCpRE+Gj??{F?BX@c6D+# dcXcv0bT&6}baQiaG<334upy*mdU`CA8~`$Q8}9%B delta 109 zcmZqO&Dpw}v!R7?3zLW)tD&)liTQL%J0>{@bGwZl(+fFg14~mUCsQX!Hy1-!GglWw fLklNE14CyMLuVIP14maEI|Um;N~WjBGRXk|7E2pJ diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index a5ee26a3556f3f820ae2e0e3fd23793e092ada1b..453303031af064ec27cf466b5613cc8c6e82a5af 100644 GIT binary patch delta 59245 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 F{{Yl+mm&ZF diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index a8b1addc7c732c31a885656c70876333897cbd88..4f832ea2d462669b89dc583102e25ff049e948e2 100644 GIT binary patch delta 151 zcmcclRqy6ky@nRX7N!>F7M2#)7Pc1l7LFFq7OpMa1qK>s2BwB)x&{{N1_tVy3i`hJ zDK3d6sR|k{Rz?O!#)d{lMuuP|+h-VXKj?IJG;uMp0764oXLC~{ODAJ9BST{Y3kxS> VXD3rfb0<3m8$wE^@7~2N2LRdaD1-n2 delta 151 zcmcclRqy6ky@nRX7N!>F7M2#)7Pc1l7LFFq7OpMa1qK?1#ukPqx&{{N1_tVy3i`hJ zDK3d6sR|k{Rz?O!#)d{lMuuP|+h-VXKj?HewKOtwwRAIfu{1Vub8|5_aW*z`Hneat Wa5k`TF?F@DQ?MbVWcu!1+;RZwk|^!~ diff --git a/Source/Doc/SystemGuide.md b/Source/Doc/SystemGuide.md index cac5cf9b..b0516e93 100644 --- a/Source/Doc/SystemGuide.md +++ b/Source/Doc/SystemGuide.md @@ -1460,14 +1460,17 @@ standard HBIOS result code. |----------------------------------------|----------------------------------------| | B: 0x47 | A: Status | | C: Video Unit | | +| D: Scope | | | E: Color | | -Assign the specified Color (E) code to be used for all subsequent -character writes/fills. This color is also used to fill new lines -generated by scroll operations. Refer to the color code table above for -a list of the available color codes. Note that a given video display may -or may not support any/all colors. The Status (A) is a standard HBIOS -result code. +Assign the specified Color (E) code for character foreground/background. +If Scope (D) is 0, the specified color will be used for all +subsequent character writes/fills. This color is also used to fill new +lines generated by scroll operations. If Scope (D) is 1, then the +specified foreground/background color will be applied immediately to the + entire screen. Refer to the color code table above for a list of the +available color codes. Note that a given video display may or may not +support any/all colors. The Status (A) is a standard HBIOS result code. ### Function 0x48 -- Video Write Character (VDAWRC) diff --git a/Source/HBIOS/ansi.asm b/Source/HBIOS/ansi.asm index b0b93153..f9d3b922 100644 --- a/Source/HBIOS/ansi.asm +++ b/Source/HBIOS/ansi.asm @@ -3,6 +3,10 @@ ; ANSI EMULATION MODULE ;================================================================================================== ; +; ENHANCED BY: JOSE L. COLLADO -- 12/21/2023 - +; NEW ANSI PRIVATE SEQUENCE TO INIT VDU AND CHANGE DEFAULT COLORS +; (SEE ANSI CONTROL SEQUENCE DISPATCHING SECTION BELOW FOR DETAILS) +; ; TODO: ; 1) INSERT/DELETE CHARACTERS CTL SEQUENCES ; 2) OTHER CTL SEQUENCES? @@ -61,6 +65,7 @@ ANSI_RESET: LD (ANSI_ATTR),A ; CLEAR ATTRIBUTES LD A,ANSI_DEFCOLOR ; DEFAULT COLOR LD (ANSI_COLOR),A ; RESET COLOR + LD (ANSI_SCOLOR),A ; RESET SCREEN COLOR XOR A ; ZERO ACCUM LD (ANSI_WRAP),A ; CLEAR WRAP FLAG LD (ANSI_LNM),A ; SET LINE FEED NEW LINE MODE @@ -385,6 +390,17 @@ ANSI_ESCDISP2: ; ESC DISPATCHING FOR '#' INT CHAR ; ANSI CONTROL SEQUENCE DISPATCHING ;================================================================================================== ; +;-------------------------------------------------------------------------------------------------- +; ### JLC Mod - NEW ANSI PRIVATE SEQUENCE TO INIT VDU AND CHANGE DEFAULT COLORS ### +;-------------------------------------------------------------------------------------------------- +; Follows ANSI Standards described in VT100.net for Private Sequences. +; Implements the ESC Seq.: \ESC[{Num1};{Num2}'{' where '{' is the final char of new Private Sequence. +; Initializes the VDU and Changes Default Colors according to the following table: +; {Num1}: 30..37 - Foreground color (black, red, green, yellow, blue, magenta, cyan, white) +; {Num2}: 40..47 - Background color (black, red, green, yellow, blue, magenta, cyan, white) +; +; Example: \ESC[37;44{ sets text to white on blue background, \ESC[0{ returns to default colors. +; ANSI_CTLDISP: LD (ANSI_FINAL),A ; RECORD THE FINAL CHARACTER #IF (ANSITRACE >= 2) @@ -453,6 +469,11 @@ ANSI_STD1: ; DISPATCH FOR FINAL CHAR W/ NO INTERMEDIATE CHAR AND NO PRIVATE CHAR CP 'm' ; SGR: SELECT GRAPHIC RENDITION JP Z,ANSI_SGR ; CHECK FOR ANY OTHERS HERE + ; ### JLC Mod - New Private Sequence with Parameters checked here... + CP '{' ; SSC: SET SCREEN COLORS + JP Z,ANSI_SSC + ; + ; ANY OTHERS ARE IGNORED JR ANSI_UNK ; UNKNOWN, ABORT ; ANSI_DEC: ; DISPATCH ON INTERMEDIATE CHAR W/ PRIVATE CHAR = '?' (DEC) @@ -1147,14 +1168,15 @@ ANSI_SGR1: ; PROCESSING LOOP INC HL ; POINT TO NEXT PARM DJNZ ANSI_SGR1 ; LOOP TILL DONE ; - ; NOW IMPLEMENT ALL CHANGES + ; NOW IMPLEMENT ALL CHANGES FOR SGR LD A,(ANSI_ATTR) ; GET THE ATTRIBUTE VALUE LD E,A ; MOVE TO E LD B,BF_VDASAT ; SET ATTRIBUTE FUNCTION CALL ANSI_VDADISP ; CALL THE FUNCTION LD A,(ANSI_COLOR) ; GET THE COLOR VALUE LD E,A ; MOVE TO E - LD B,BF_VDASCO ; SET ATTRIBUTE FUNCTION + LD D,0 ; SET INDIVIDUAL CHAR COLORS + LD B,BF_VDASCO ; SET COLOR FUNCTION CALL ANSI_VDADISP ; CALL THE FUNCTION RET ; RETURN ; @@ -1234,6 +1256,81 @@ ANSI_SGR_BG: ; ; ; +;...................................................................................... +; ### JLC Mod - Implement new Private Sequence to call VDAINI and Change Default Colors +; +ANSI_SSC: ; SET SCREEN COLOR (CUSTOM EXTENSION) + LD A,(ANSI_PARIDX) ; GET CURRENT PARM INDEX + INC A ; INC TO MAKE IT THE COUNT + LD B,A ; B IS NOW LOOP COUNTER + LD HL,ANSI_PARLST ; HL POINTS TO START OF PARM LIST +; +ANSI_SSC1: ; PROCESSING LOOP + PUSH BC ; PRESERVE BC + PUSH HL ; PRESERVE HL + LD A,(HL) + CALL ANSI_SSC2 ; HANDLE PARM + POP HL ; RESTORE HL + POP BC ; RESTORE BC + INC HL ; POINT TO NEXT PARM + DJNZ ANSI_SSC1 ; LOOP TILL DONE +; + ; NOW IMPLEMENT ALL CHANGES FOR SSC + LD A,(ANSI_SCOLOR) ; GET THE COLOR VALUE + LD E,A ; MOVE TO E + LD D,1 ; SET SCREEN COLORS + LD B,BF_VDASCO ; SET COLOR FUNCTION + CALL ANSI_VDADISP ; CALL THE FUNCTION + RET ; RETURN +; +ANSI_SSC2: ; HANDLE THE REQUEST CODE + CP 0 ; ALL OFF + JR Z,ANSI_SSC_OFF ; DO IT + CP 30 ; START OF FOREGROUND + RET C ; OUT OF RANGE + CP 38 ; END OF RANGE + JR C,ANSI_SSC_FG ; SET FOREGROUND + CP 40 ; START OF BACKGROUND + RET C ; OUT OF RANGE + CP 48 ; END OF RANGE + JR C,ANSI_SSC_BG ; SET BACKGROUND + RET ; OTHERWISE OUT OF RANGE +; +ANSI_SSC_OFF: + LD A,ANSI_DEFCOLOR ; DEFAULT COLOR + LD (ANSI_SCOLOR),A ; RESET COLOR + RET +; +ANSI_SSC_BOLD: + LD A,(ANSI_SCOLOR) ; LOAD CURRENT COLOR + OR %00001000 ; SET BOLD BIT + LD (ANSI_SCOLOR),A ; SAVE IT + RET +; +ANSI_SSC_FG: + SUB 30 + LD E,A + LD A,(ANSI_SCOLOR) + AND %11111000 + OR E + LD (ANSI_SCOLOR),A + RET +; +ANSI_SSC_BG: + SUB 40 + RLCA + RLCA + RLCA + RLCA + LD E,A + LD A,(ANSI_SCOLOR) + AND %10001111 + OR E + LD (ANSI_SCOLOR),A + RET +; +; +; ANSI_DECALN: ; DEC SCREEN ALIGNMENT TEST LD DE,0 ; PREPARE TO HOME CURSOR LD (ANSI_POS),DE ; SAVE NEW CURSOR POSITION @@ -1394,7 +1491,8 @@ ANSI_ROWS .DB 24 ; NUMBER OF ROWS ON SCREEN ; ANSI_STATE .DW PANIC ; CURRENT FUNCTION FOR STATE MACHINE ANSI_ATTR .DB ANSI_DEFATTR ; CURRENT CHARACTER ATTRIBUTE -ANSI_COLOR .DB ANSI_DEFCOLOR ; CURRENT CHARACTER COLOR; +ANSI_COLOR .DB ANSI_DEFCOLOR ; CURRENT CHARACTER FG/BG COLOR +ANSI_SCOLOR .DB ANSI_DEFCOLOR ; CURRENT SCREEN FG/BG COLOR ANSI_WRAP .DB 0 ; WRAP PENDING FLAG ANSI_TABS .FILL 32,0 ; TAB STOP BIT MAP (256 BITS) ANSI_LNM .DB 0 ; LINE FEED NEW LINE MODE FLAG @@ -1415,3 +1513,25 @@ ANSI_VARLEN .EQU $ - ANSI_VARS ; ANSI_VDAUNIT .DB $FF ; VIDEO UNIT NUM OF ATTACHED VDA DEVICE ANSI_DEVNUM .DB $FF ; TERMINAL DEVICE NUMBER +; +;============================================================= +; BASIC ANSI COLOR TABLE (NIBBLES FOR FOREGROUND & BACKGROUND) +; ------------------------------------------------------------ +; 0 Black +; 1 Red +; 2 Green +; 3 Brown +; 4 Blue +; 5 Magenta +; 6 Cyan +; 7 White +; 8 Gray +; 9 Light Red +; A Light Green +; B Yellow +; C Light Blue +; D Light Magenta +; E Light Cyan +; F Bright White +;============================================================= +; \ No newline at end of file diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index 4bb78210..5cc6eb5a 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -208,6 +208,11 @@ CVDU_VDASAT: RET CVDU_VDASCO: + ; WE HANDLE ONLY PER-CHARACTER COLORS (D=0) + LD A,D ; GET CHAR/SCREEN SCOPE + OR A ; CHARACTER? + JR NZ,CVDU_VDASCO_Z ; IF NOT, JUST RETURN + ; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED) ; TRANSFORM TO: ----RGBI (DISCARD BACKGROUND COLOR IN HIGH NIBBLE) XOR A ; CLEAR A @@ -221,6 +226,7 @@ CVDU_VDASCO1: AND %11110000 ; CLEAR OUT OLD COLOR BITS OR E ; STUFF IN THE NEW ONES LD (CVDU_ATTR),A ; AND SAVE THE RESULT +CVDU_VDASCO_Z: XOR A ; SIGNAL SUCCESS RET diff --git a/Source/HBIOS/gdc.asm b/Source/HBIOS/gdc.asm index 865f08c8..79b72c10 100644 --- a/Source/HBIOS/gdc.asm +++ b/Source/HBIOS/gdc.asm @@ -189,8 +189,13 @@ GDC_VDASAT: ; SET ATTRIBUTES RET GDC_VDASCO: ; SET COLOR + ; WE HANDLE ONLY PER-CHARACTER COLORS (D=0) + LD A,D ; GET CHAR/SCREEN SCOPE + OR A ; CHARACTER? + JR NZ,GDC_VDASCO_Z ; IF NOT, JUST RETURN LD A,E ; GET THE INCOMING COLOR LD (GDC_COLOR),A ; AND SAVE FOR LATER +GDC_VDASCO_Z: XOR A ; SIGNAL SUCCESS RET diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index e2a6fd65..f6f14686 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -201,7 +201,7 @@ TMS_INIT: #IF (TMSMODE == TMSMODE_MSX) PRTS("MSX$") #ENDIF -#IF (TMSMODE == TMSMODE_COLECO) ; ### JLC Mod for completeness ### +#IF (TMSMODE == TMSMODE_COLECO) PRTS("COLECO$") #ENDIF #IF (TMSMODE == TMSMODE_MSXKBD) @@ -215,7 +215,6 @@ TMS_INIT: LD A,TMS_DATREG CALL PRTHEXBYTE CALL TMS_PROBE ; CHECK FOR HW EXISTENCE - ;JP TMS_INIT1 ; ### JLC DEBUG: ALLWAYS CONTINUE ### JR Z,TMS_INIT1 ; CONTINUE IF PRESENT ; ; *** HARDWARE NOT PRESENT *** @@ -370,7 +369,40 @@ TMS_VDASAT: RET TMS_VDASCO: - XOR A ; NOT POSSIBLE, JUST SIGNAL SUCCESS + ; ### JLC Mod - Implement Default Text Mode Colors via ANSI_VDAINI or direct HBIOS Call + ; + ; Color setting is in reg D in ANSI Format as described in RomWBW System Guide + ; Convert Color Format from ANSI to TMS shuffling bits arround and using + ; Color Conversion Table at TMS_COLOR_TBL (approximated equivalences) + ; Save converted value to (TMS_TMSCOLOR) + ; + ; TMS hardware only allows setting a global (screen) foreground/background color. So, we + ; only process this command if E is 1. + ; + LD A,D ; GET CHAR/SCREEN SCOPE + CP 1 ; SCREEN? + JR NZ,TMS_VDASCO_Z ; IF NOT, JUST RETURN +; + LD A,E ; GET COLOR BYTE + AND $F0 ; ISOLATE BACKGROUND + RRCA \ RRCA \ RRCA \ RRCA ; MOVE TO LOWER NIBBLE + LD HL,TMS_COLOR_TBL ; POINT TO COLOR CONVERSION TABLE + CALL ADDHLA ; OFFSET TO DESIRED COLOR + LD B,(HL) ; PUT NEW BG IN B +; + LD A,E ; GET COLOR BYTE + AND $0F ; ISOLATE FOREGROUND + LD HL,TMS_COLOR_TBL ; POINT TO COLOR CONVERSION TABLE + CALL ADDHLA ; OFFSET TO DESIRED COLOR + LD A,(HL) ; PUT NEW FG IN A + RLCA \ RLCA \ RLCA \ RLCA ; MOVE TO UPPER NIBBLE +; + OR B ; COMBINE WITH FG + LD C, 7 ; C = Color Register, A = Desired new Color in TMS Format + CALL TMS_SET ; Write to specific TMS Register, Change Default Text Color +; +TMS_VDASCO_Z: + XOR A ; SIGNAL SUCCESS RET TMS_VDAWRC: @@ -558,7 +590,7 @@ TMS_CRTINIT: LD HL,0 CALL TMS_WR ; - ; FILL ENTIRE 16KB VRAM CONTENTS with $00 ### JLC Comment fix ### + ; FILL ENTIRE 16KB VRAM CONTENTS with $00 LD DE,$4000 ; 16KB TMS_CRTINIT1: XOR A @@ -614,7 +646,7 @@ TMS_LOADFONT: #ENDIF ; ; FILL TMS_FNTVADDR BYTES FROM FONTDATA - LD DE,TMS_FNTSIZE ; ### JLC Mod for JBL compatibility ### + LD DE,TMS_FNTSIZE TMS_LOADFONT1: LD A,(HL) OUT (TMS_DATREG),A @@ -738,7 +770,6 @@ TMS_XY2IDX: CALL MULT8 ; MULTIPLY TO GET ROW OFFSET LD E,A ; GET COLUMN BACK ADD HL,DE ; ADD IT IN - ; ### JLC Fix to allow Name Table Addresses other than $0000 and JBL Compatibility ### LD DE,TMS_CHRVADDR ; Add offset Address to start of Name Table (Char) ADD HL,DE RET ; RETURN @@ -787,7 +818,6 @@ TMS_FILL1: ;---------------------------------------------------------------------- ; TMS_SCROLL: - ; ### JLC Fix to allow Name Table Addresses other than $0000 and JBL Compatibility ### LD HL,TMS_CHRVADDR ; SOURCE ADDRESS OF CHARACTER BUFFER LD C,TMS_ROWS - 1 ; SET UP LOOP COUNTER FOR ROWS - 1 ; @@ -839,7 +869,6 @@ TMS_SCROLL3: ;---------------------------------------------------------------------- ; TMS_RSCROLL: - ; ### JLC Fix to allow Name Table Addresses other than $0000 and JBL Compatibility ### LD HL,TMS_COLS * (TMS_ROWS - 1) LD DE,TMS_CHRVADDR ; Add offset Address to start of Name Table (Char) ADD HL,DE @@ -980,10 +1009,13 @@ TMS_INTHNDL: ; TMS DRIVER - DATA ;================================================================================================== ; -TMS_POS .DW 0 ; CURRENT DISPLAY POSITION +TMS_POS .DW 0 ; CURRENT DISPLAY POSITION TMS_CURSAV .DB 0 ; SAVES ORIGINAL CHARACTER UNDER CURSOR TMS_BUF .FILL 256,0 ; COPY BUFFER - +; +; ### JLC Mod +; ANSI-->TMS Color Conversion Table +TMS_COLOR_TBL .DB $01,$08,$02,$0A,$04,$06,$0C,$0F,$0E,$09,$03,$0B,$05,$0D,$07,$0F ; ;================================================================================================== ; TMS DRIVER - INSTANCE DATA @@ -1055,6 +1087,10 @@ TMS_IDAT: ; https://www.msx.org/wiki/Screen_Modes_Description#SCREEN_0_in_80-column_.28Text_mode_2.29 ; BITS 1-0 SHOULD BE 1. BITS 8-2 SHOULD BE (ADR >> 8). ; +; ### JLC Mod +; TEXT MODE DEFAULT COLOR (REG 7) CAN BE CHANGED INVOKING VDASCO +; OR VIA ANSI PRIVATE ESC SEQ. (SEE ANSI.ASM FOR DETAILS) +; TMS_INITVDU: ; V9958 REGISTER SET .DB $04 ; REG 0 - NO EXTERNAL VID, SET M4 = 1 FOR 80 COLS TMS_INITVDU_REG_1: @@ -1069,7 +1105,7 @@ TMS_INITVDU_REG_1: .DB $00 ; REG 9 .DB $00 ; REG 10 - COLOUR TABLE A14-A16 (TMS_FNTVADDR - $1000) ; -#ELSE ; _______TMS9918 REGISTER SET ### JLC Mod for JBL compatibility & MODE II Readiness ###_______ +#ELSE ; _______TMS9918 REGISTER SET_______ ; TMS_INITVDU: ; V9918 REGISTER SET .DB $00 ; REG 0 - SET TEXT MODE, NO EXTERNAL VID @@ -1080,18 +1116,7 @@ TMS_INITVDU_REG_1: .DB $00 ; REG 4 - SET PATTERN GENERATOR TABLE TO (TMS_FNTVADDR -> $0000) .DB $76 ; REG 5 - SPRITE ATTRIBUTE IRRELEVANT, SET TO MODE II DEFAULT VALUE .DB $03 ; REG 6 - NO SPRITE GENERATOR TABLE, SET TO MODE II DEFAULT VALUE - .DB $E1 ; REG 7 - GREY ON BLACK ### JLC Mod Change default text color for better readability YMMV ### -; -;TMS_INITVDU: -; .DB $00 ; REG 0 - NO EXTERNAL VID -;TMS_INITVDU_REG_1: -; .DB $50 ; REG 1 - ENABLE SCREEN, SET TEXT MODE & BLANK SCREEN ### JLC comment fix (NOT MODE 1) ### -; .DB $00 ; REG 2 - PATTERN NAME TABLE := 0 -; .DB $00 ; REG 3 - NO COLOR TABLE -; .DB $01 ; REG 4 - SET PATTERN GENERATOR TABLE TO (TMS_FNTVADDR -> $0800) -; .DB $00 ; REG 5 - SPRITE ATTRIBUTE IRRELEVANT -; .DB $00 ; REG 6 - NO SPRITE GENERATOR TABLE -; .DB $F0 ; REG 7 - WHITE ON TRANSPARENT + .DB $E1 ; REG 7 - TEXT COLOR ; #ENDIF ; @@ -1101,3 +1126,29 @@ TMS_INITVDULEN .EQU $ - TMS_INITVDU #IF (CPUFAM == CPU_Z180) TMS_DCNTL .DB $00 ; SAVE Z180 DCNTL AS NEEDED #ENDIF +; +; ### JLC Mod +;=============================================================================== +; BASIC ANSI to TMS COLOR CONVERSION TABLE (NIBBLES FOR FOREGROUND & BACKGROUND) +; Follows RomWBW System Guide Chapter 8, HBIOS Reference +;------------------------------------------------------------------------------- +; ANSI Color TMS Equivalent +;------------------------------------------------------------------------------- +; 0 Black 1 +; 1 Red 8 +; 2 Green 2 +; 3 Brown A +; 4 Blue 4 +; 5 Magenta 6 +; 6 Cyan C +; 7 White F +; 8 Gray E +; 9 Light Red 9 +; A Light Green 3 +; B Yellow B +; C Light Blue 5 +; D Light Magenta D +; E Light Cyan 7 +; F Bright White F +;=============================================================================== +; diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index 8ed9c280..8d0413aa 100644 --- a/Source/HBIOS/vga.asm +++ b/Source/HBIOS/vga.asm @@ -237,6 +237,10 @@ VGA_VDASAT: JR VGA_VDASCO2 ; IMPLEMENT SETTING VGA_VDASCO: + ; WE HANDLE ONLY PER-CHARACTER COLORS (D=0) + LD A,D ; GET CHAR/SCREEN SCOPE + OR A ; CHARACTER? + JR NZ,VGA_VDASCO3 ; IF NOT, JUST RETURN ; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED) ; TRANSFORM TO: -RGBIRGB (DISCARD INTENSITY BIT IN HIGH NIBBLE) ; diff --git a/Source/ver.inc b/Source/ver.inc index 6014b6e8..2e66ec76 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 4 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.4.0-dev.39" +#DEFINE BIOSVER "3.4.0-dev.40" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 0d004ecb..c81349bf 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 4 rup equ 0 rtp equ 0 biosver macro - db "3.4.0-dev.39" + db "3.4.0-dev.40" endm