diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 6b08ec9b..b5e2f665 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 2a42f368..6f070cad 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 32362ce6..22fdae85 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 3ba748a7..9899e664 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 a5ee26a3..45330303 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 a8b1addc..4f832ea2 100644 Binary files a/Doc/RomWBW User Guide.pdf and b/Doc/RomWBW User Guide.pdf differ 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