Commit 38fc50d2 authored by Robert Coeyman's avatar Robert Coeyman Committed by Alexandre Julliard

Added the rest of the register manipulation code to int 10. It only

handles the setting of the 16-color palette registers and overscan.
parent ec67a955
...@@ -511,36 +511,42 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context ) ...@@ -511,36 +511,42 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
case 0x10: case 0x10:
switch AL_reg(context) { switch AL_reg(context) {
case 0x00: /* SET SINGLE PALETTE REGISTER */ case 0x00: /* SET SINGLE PALETTE REGISTER - A.C. */
FIXME("Set Single Palette Register - Not tested\n"); 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 */ /* BH is the value BL is the register */
VGA_SetColor16((int)BL_reg(context),(int)BH_reg(context)); VGA_SetColor16((int)BL_reg(context),(int)BH_reg(context));
break; break;
case 0x01: /* SET BORDER (OVERSCAN) */ case 0x01: /* SET BORDER (OVERSCAN) */
/* Text terminals have no overscan */ /* Text terminals have no overscan */
TRACE("Set Border (Overscan) - Ignored\n"); /* I'm setting it anyway. - A.C. */
TRACE("Set Border (Overscan) - Ignored but set.\n");
VGA_SetColor16(16,(int)BH_reg(context));
break; break;
case 0x02: /* SET ALL PALETTE REGISTERS */ case 0x02: /* SET ALL PALETTE REGISTERS - A.C.*/
FIXME("Set all palette registers - Not Supported\n"); TRACE("Set all palette registers\n");
/* DX:ES points to a 17 byte table of colors */ /* ES:DX points to a 17 byte table of colors */
/* No return data listed */ /* No return data listed */
/* I'll have to update my table and the default palette */ /* I'll have to update my table and the default palette */
VGA_Set16Palette(CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edx));
break; break;
case 0x03: /* TOGGLE INTENSITY/BLINKING BIT */ case 0x03: /* TOGGLE INTENSITY/BLINKING BIT */
FIXME("Toggle Intensity/Blinking Bit - Not Supported\n"); FIXME("Toggle Intensity/Blinking Bit - Not Supported\n");
break; break;
case 0x07: /* GET INDIVIDUAL PALETTE REGISTER */ case 0x07: /* GET INDIVIDUAL PALETTE REGISTER - A.C.*/
FIXME("Get Individual Palette Register - Not Supported\n"); TRACE("Get Individual Palette Register 0x0%x\n",BL_reg(context));
/* BL is register to read [ 0-15 ] BH is return value */ /* BL is register to read [ 0-15 ] BH is return value */
BH_reg(context) = VGA_GetColor16((int)BL_reg(context));
break; break;
case 0x08: /* READ OVERSCAN (BORDER COLOR) REGISTER */ case 0x08: /* READ OVERSCAN (BORDER COLOR) REGISTER - A.C. */
FIXME( TRACE("Read Overscan (Border Color) Register \n");
"Read Overscan (Border Color) Register - Not Supported\n"); BH_reg(context) = VGA_GetColor16(16);
break; break;
case 0x09: /* READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER */ case 0x09: /* READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER - A.C.*/
FIXME( TRACE("Read All Palette Registers and Overscan Register \n");
"Read All Palette Registers and Overscan Register " /* ES:DX points to a 17 byte table where the results */
" - Not Supported\n"); /* of this call should be stored. */
VGA_Get16Palette(CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edx));
break; break;
case 0x10: /* SET INDIVIDUAL DAC REGISTER */ case 0x10: /* SET INDIVIDUAL DAC REGISTER */
{ {
......
...@@ -251,7 +251,7 @@ static void WINAPI VGA_DoSetMode(ULONG_PTR arg) ...@@ -251,7 +251,7 @@ static void WINAPI VGA_DoSetMode(ULONG_PTR arg)
ModeSet *par = (ModeSet *)arg; ModeSet *par = (ModeSet *)arg;
par->ret=1; par->ret=1;
if (lpddraw) VGA_DoExit(NULL); if (lpddraw) VGA_DoExit(0);
if (!lpddraw) { if (!lpddraw) {
if (!pDirectDrawCreate) if (!pDirectDrawCreate)
{ {
...@@ -357,7 +357,7 @@ void VGA_SetPalette(PALETTEENTRY*pal,int start,int len) ...@@ -357,7 +357,7 @@ void VGA_SetPalette(PALETTEENTRY*pal,int start,int len)
IDirectDrawPalette_SetEntries(lpddpal,0,start,len,pal); 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) void VGA_SetColor16(int reg,int color)
{ {
PALETTEENTRY *pal; PALETTEENTRY *pal;
...@@ -368,6 +368,39 @@ void VGA_SetColor16(int reg,int color) ...@@ -368,6 +368,39 @@ void VGA_SetColor16(int reg,int color)
vga_16_palette[reg]=(char)color; 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) void VGA_SetQuadPalette(RGBQUAD*color,int start,int len)
{ {
PALETTEENTRY pal[256]; PALETTEENTRY pal[256];
......
...@@ -30,6 +30,9 @@ int VGA_GetMode(unsigned*Height,unsigned*Width,unsigned*Depth); ...@@ -30,6 +30,9 @@ int VGA_GetMode(unsigned*Height,unsigned*Width,unsigned*Depth);
void VGA_Exit(void); void VGA_Exit(void);
void VGA_SetPalette(PALETTEENTRY*pal,int start,int len); void VGA_SetPalette(PALETTEENTRY*pal,int start,int len);
void VGA_SetColor16(int reg,int color); 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); void VGA_SetQuadPalette(RGBQUAD*color,int start,int len);
LPSTR VGA_Lock(unsigned*Pitch,unsigned*Height,unsigned*Width,unsigned*Depth); LPSTR VGA_Lock(unsigned*Pitch,unsigned*Height,unsigned*Width,unsigned*Depth);
void VGA_Unlock(void); void VGA_Unlock(void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment