This patch adds the rest of the register manipulation code to int-10. It only handles the setting of the 16-color palette registers and overscan. God Bless, --Robert 'Admiral' Coeyman -- --- May you live as long as you wish and age but a single day. http://www.dotguy.net/ admiral@corner.net Webmaster/ Linux Administrator Computer Co-Op/CornerNet
Index: dlls/winedos/int10.c =================================================================== RCS file: /home/wine/wine/dlls/winedos/int10.c,v retrieving revision 1.9 diff -u -u -r1.9 int10.c --- dlls/winedos/int10.c 20 Apr 2002 20:52:05 -0000 1.9 +++ dlls/winedos/int10.c 12 May 2002 05:46:48 -0000 @@ -511,36 +511,42 @@ case 0x10: switch AL_reg(context) { - case 0x00: /* SET SINGLE PALETTE REGISTER */ - FIXME("Set Single Palette Register - Not tested\n"); + case 0x00: /* SET SINGLE PALETTE REGISTER - A.C. */ + TRACE("Set Single Palette Register - Reg 0x0%x Value 0x0%x\n", + BL_reg(context),BH_reg(context)); /* BH is the value BL is the register */ VGA_SetColor16((int)BL_reg(context),(int)BH_reg(context)); break; case 0x01: /* SET BORDER (OVERSCAN) */ /* Text terminals have no overscan */ - TRACE("Set Border (Overscan) - Ignored\n"); - break; - case 0x02: /* SET ALL PALETTE REGISTERS */ - FIXME("Set all palette registers - Not Supported\n"); - /* DX:ES points to a 17 byte table of colors */ + /* I'm setting it anyway. - A.C. */ + TRACE("Set Border (Overscan) - Ignored but set.\n"); + VGA_SetColor16(16,(int)BH_reg(context)); + break; + case 0x02: /* SET ALL PALETTE REGISTERS - A.C.*/ + TRACE("Set all palette registers\n"); + /* ES:DX points to a 17 byte table of colors */ /* No return data listed */ /* I'll have to update my table and the default palette */ + VGA_Set16Palette(CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edx)); break; case 0x03: /* TOGGLE INTENSITY/BLINKING BIT */ FIXME("Toggle Intensity/Blinking Bit - Not Supported\n"); break; - case 0x07: /* GET INDIVIDUAL PALETTE REGISTER */ - FIXME("Get Individual Palette Register - Not Supported\n"); + case 0x07: /* GET INDIVIDUAL PALETTE REGISTER - A.C.*/ + TRACE("Get Individual Palette Register 0x0%x\n",BL_reg(context)); /* BL is register to read [ 0-15 ] BH is return value */ + BH_reg(context) = VGA_GetColor16((int)BL_reg(context)); break; - case 0x08: /* READ OVERSCAN (BORDER COLOR) REGISTER */ - FIXME( - "Read Overscan (Border Color) Register - Not Supported\n"); - break; - case 0x09: /* READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER */ - FIXME( - "Read All Palette Registers and Overscan Register " - " - Not Supported\n"); + case 0x08: /* READ OVERSCAN (BORDER COLOR) REGISTER - A.C. */ + TRACE("Read Overscan (Border Color) Register \n"); + BH_reg(context) = VGA_GetColor16(16); + break; + case 0x09: /* READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER - A.C.*/ + TRACE("Read All Palette Registers and Overscan Register \n"); + /* ES:DX points to a 17 byte table where the results */ + /* of this call should be stored. */ + VGA_Get16Palette(CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edx)); break; case 0x10: /* SET INDIVIDUAL DAC REGISTER */ { Index: dlls/winedos/vga.c =================================================================== RCS file: /home/wine/wine/dlls/winedos/vga.c,v retrieving revision 1.9 diff -u -u -r1.9 vga.c --- dlls/winedos/vga.c 19 Apr 2002 00:05:38 -0000 1.9 +++ dlls/winedos/vga.c 12 May 2002 05:46:49 -0000 @@ -357,7 +357,7 @@ IDirectDrawPalette_SetEntries(lpddpal,0,start,len,pal); } -/* set a single color in 16 color mode. */ +/* set a single [char wide] color in 16 color mode. */ void VGA_SetColor16(int reg,int color) { PALETTEENTRY *pal; @@ -366,6 +366,39 @@ pal= &vga_def64_palette[color]; IDirectDrawPalette_SetEntries(lpddpal,0,reg,1,pal); vga_16_palette[reg]=(char)color; +} + +/* Get a single [char wide] color in 16 color mode. */ +char VGA_GetColor16(int reg) +{ + + if (!lpddraw) return 0; + return (char)vga_16_palette[reg]; +} + +/* set all 17 [char wide] colors at once in 16 color mode. */ +void VGA_Set16Palette(char *Table) +{ + PALETTEENTRY *pal; + int c; + + if (!lpddraw) return; /* return if we're in text only mode */ + bcopy((void *)&vga_16_palette,(void *)Table,17); + /* copy the entries into the table */ + for (c=0; c<17; c++) { /* 17 entries */ + pal= &vga_def64_palette[(int)vga_16_palette[c]]; /* get color */ + IDirectDrawPalette_SetEntries(lpddpal,0,c,1,pal); /* set entry */ + TRACE("Palette register %d set to %d\n",c,(int)vga_16_palette[c]); + } /* end of the counting loop */ +} + +/* Get all 17 [ char wide ] colors at once in 16 color mode. */ +void VGA_Get16Palette(char *Table) +{ + + if (!lpddraw) return; /* return if we're in text only mode */ + bcopy((void *)Table,(void *)&vga_16_palette,17); + /* copy the entries into the table */ } void VGA_SetQuadPalette(RGBQUAD*color,int start,int len) Index: dlls/winedos/vga.h =================================================================== RCS file: /home/wine/wine/dlls/winedos/vga.h,v retrieving revision 1.6 diff -u -u -r1.6 vga.h --- dlls/winedos/vga.h 11 Apr 2002 17:33:15 -0000 1.6 +++ dlls/winedos/vga.h 12 May 2002 05:46:49 -0000 @@ -30,6 +30,9 @@ void VGA_Exit(void); void VGA_SetPalette(PALETTEENTRY*pal,int start,int len); void VGA_SetColor16(int reg,int color); +char VGA_GetColor16(int reg); +void VGA_Set16Palette(char *Table); +void VGA_Get16Palette(char *Table); void VGA_SetQuadPalette(RGBQUAD*color,int start,int len); LPSTR VGA_Lock(unsigned*Pitch,unsigned*Height,unsigned*Width,unsigned*Depth); void VGA_Unlock(void);