mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 18:03:33 +00:00
[NTVDM]
- Stubplement the font generator functions for text-mode. - Store in plane 2+ the font ONLY in text mode (guilty r68085). Fixes spurious graphics corruption in gfx modes. CORE-9791 CORE-9794 #resolve #comment Should be fixed in r68134. svn path=/trunk/; revision=68134
This commit is contained in:
parent
be73844e6c
commit
64a8bbf00f
3 changed files with 74 additions and 24 deletions
|
@ -2491,25 +2491,30 @@ static BOOLEAN VidBiosSetVideoMode(BYTE ModeNumber)
|
||||||
switch (Bda->CharacterHeight)
|
switch (Bda->CharacterHeight)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Write the default font to the VGA font plane
|
* Write the default font to the VGA font plane for text-modes only.
|
||||||
* and update the BIOS INT 43h vector (far pointer
|
* Update the BIOS INT 43h vector (far pointer to the character range 00h-...).
|
||||||
* to the character range 00h-...)
|
|
||||||
*/
|
*/
|
||||||
case 8:
|
case 8:
|
||||||
{
|
{
|
||||||
VgaWriteFont(0, Font8x8, ARRAYSIZE(Font8x8) / VGA_FONT_CHARACTERS);
|
if (ModeNumber <= 3)
|
||||||
|
VgaWriteTextModeFont(0, Font8x8, ARRAYSIZE(Font8x8) / VGA_FONT_CHARACTERS);
|
||||||
|
|
||||||
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x8_OFFSET, VIDEO_BIOS_DATA_SEG);
|
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x8_OFFSET, VIDEO_BIOS_DATA_SEG);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 14:
|
case 14:
|
||||||
{
|
{
|
||||||
VgaWriteFont(0, Font8x14, ARRAYSIZE(Font8x14) / VGA_FONT_CHARACTERS);
|
if (ModeNumber <= 3)
|
||||||
|
VgaWriteTextModeFont(0, Font8x14, ARRAYSIZE(Font8x14) / VGA_FONT_CHARACTERS);
|
||||||
|
|
||||||
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x14_OFFSET, VIDEO_BIOS_DATA_SEG);
|
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x14_OFFSET, VIDEO_BIOS_DATA_SEG);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 16:
|
case 16:
|
||||||
{
|
{
|
||||||
VgaWriteFont(0, Font8x16, ARRAYSIZE(Font8x16) / VGA_FONT_CHARACTERS);
|
if (ModeNumber <= 3)
|
||||||
|
VgaWriteTextModeFont(0, Font8x16, ARRAYSIZE(Font8x16) / VGA_FONT_CHARACTERS);
|
||||||
|
|
||||||
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x16_OFFSET, VIDEO_BIOS_DATA_SEG);
|
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x16_OFFSET, VIDEO_BIOS_DATA_SEG);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3371,6 +3376,58 @@ VOID WINAPI VidBiosVideoService(LPWORD Stack)
|
||||||
{
|
{
|
||||||
// FIXME: At the moment we support only graphics-mode functions!
|
// FIXME: At the moment we support only graphics-mode functions!
|
||||||
|
|
||||||
|
/* Load User-specified Patterns (Character Set) for Text Mode */
|
||||||
|
case 0x00:
|
||||||
|
case 0x10: // FIXME: 0x1x performs a full mode reset
|
||||||
|
{
|
||||||
|
// FIXME: BL == ??
|
||||||
|
|
||||||
|
/* Write the default font to the VGA font plane */
|
||||||
|
// VgaWriteTextModeFont(0, Font8x8, ARRAYSIZE(Font8x8) / VGA_FONT_CHARACTERS);
|
||||||
|
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Load ROM Monochrome 8x14 Patterns (Character Set) for Text Mode */
|
||||||
|
case 0x01:
|
||||||
|
case 0x11: // FIXME: 0x1x performs a full mode reset
|
||||||
|
{
|
||||||
|
// FIXME: BL == ??
|
||||||
|
|
||||||
|
/* Write the default font to the VGA font plane */
|
||||||
|
VgaWriteTextModeFont(0, Font8x14, ARRAYSIZE(Font8x14) / VGA_FONT_CHARACTERS);
|
||||||
|
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Load ROM 8x8 Double-dot Patterns (Character Set) for Text Mode */
|
||||||
|
case 0x02:
|
||||||
|
case 0x12: // FIXME: 0x1x performs a full mode reset
|
||||||
|
{
|
||||||
|
// FIXME: BL == ??
|
||||||
|
|
||||||
|
/* Write the default font to the VGA font plane */
|
||||||
|
VgaWriteTextModeFont(0, Font8x8, ARRAYSIZE(Font8x8) / VGA_FONT_CHARACTERS);
|
||||||
|
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Load ROM 8x16 Character Set for Text Mode */
|
||||||
|
case 0x04:
|
||||||
|
case 0x14: // FIXME: 0x1x performs a full mode reset
|
||||||
|
{
|
||||||
|
// FIXME: BL == ??
|
||||||
|
|
||||||
|
/* Write the default font to the VGA font plane */
|
||||||
|
VgaWriteTextModeFont(0, Font8x16, ARRAYSIZE(Font8x16) / VGA_FONT_CHARACTERS);
|
||||||
|
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Set User 8x8 Graphics Chars (Setup INT 1Fh Vector) */
|
/* Set User 8x8 Graphics Chars (Setup INT 1Fh Vector) */
|
||||||
case 0x20:
|
case 0x20:
|
||||||
{
|
{
|
||||||
|
@ -3383,10 +3440,10 @@ VOID WINAPI VidBiosVideoService(LPWORD Stack)
|
||||||
/* Set User Graphics Characters */
|
/* Set User Graphics Characters */
|
||||||
case 0x21:
|
case 0x21:
|
||||||
{
|
{
|
||||||
// /* Write the font to the VGA font plane */
|
/*
|
||||||
// VgaWriteFont(0, Font8x8, ARRAYSIZE(Font8x8) / VGA_FONT_CHARACTERS);
|
* Update the BIOS INT 43h vector (far pointer
|
||||||
|
* to the character range 00h-...)
|
||||||
/* Update the BIOS INT 43h vector */
|
*/
|
||||||
((PULONG)BaseAddress)[0x43] = MAKELONG(getBP(), getES());
|
((PULONG)BaseAddress)[0x43] = MAKELONG(getBP(), getES());
|
||||||
|
|
||||||
/* Update BDA */
|
/* Update BDA */
|
||||||
|
@ -3407,11 +3464,9 @@ VOID WINAPI VidBiosVideoService(LPWORD Stack)
|
||||||
case 0x22:
|
case 0x22:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Write the default font to the VGA font plane
|
* Update the BIOS INT 43h vector (far pointer
|
||||||
* and update the BIOS INT 43h vector (far pointer
|
|
||||||
* to the character range 00h-...)
|
* to the character range 00h-...)
|
||||||
*/
|
*/
|
||||||
VgaWriteFont(0, Font8x14, ARRAYSIZE(Font8x14) / VGA_FONT_CHARACTERS);
|
|
||||||
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x14_OFFSET, VIDEO_BIOS_DATA_SEG);
|
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x14_OFFSET, VIDEO_BIOS_DATA_SEG);
|
||||||
|
|
||||||
/* Update BDA */
|
/* Update BDA */
|
||||||
|
@ -3432,11 +3487,9 @@ VOID WINAPI VidBiosVideoService(LPWORD Stack)
|
||||||
case 0x23:
|
case 0x23:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Write the default font to the VGA font plane
|
* Update the BIOS INT 43h vector (far pointer
|
||||||
* and update the BIOS INT 43h vector (far pointer
|
|
||||||
* to the character range 00h-...)
|
* to the character range 00h-...)
|
||||||
*/
|
*/
|
||||||
VgaWriteFont(0, Font8x8, ARRAYSIZE(Font8x8) / VGA_FONT_CHARACTERS);
|
|
||||||
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x8_OFFSET, VIDEO_BIOS_DATA_SEG);
|
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x8_OFFSET, VIDEO_BIOS_DATA_SEG);
|
||||||
|
|
||||||
/* Update BDA */
|
/* Update BDA */
|
||||||
|
@ -3457,11 +3510,9 @@ VOID WINAPI VidBiosVideoService(LPWORD Stack)
|
||||||
case 0x24:
|
case 0x24:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Write the default font to the VGA font plane
|
* Update the BIOS INT 43h vector (far pointer
|
||||||
* and update the BIOS INT 43h vector (far pointer
|
* to the character range 00h-...).
|
||||||
* to the character range 00h-...)
|
|
||||||
*/
|
*/
|
||||||
VgaWriteFont(0, Font8x16, ARRAYSIZE(Font8x16) / VGA_FONT_CHARACTERS);
|
|
||||||
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x16_OFFSET, VIDEO_BIOS_DATA_SEG);
|
((PULONG)BaseAddress)[0x43] = MAKELONG(FONT_8x16_OFFSET, VIDEO_BIOS_DATA_SEG);
|
||||||
|
|
||||||
/* Update BDA */
|
/* Update BDA */
|
||||||
|
@ -3715,7 +3766,6 @@ static BOOL Attached = TRUE;
|
||||||
|
|
||||||
VOID VidBiosAttachToConsole(VOID)
|
VOID VidBiosAttachToConsole(VOID)
|
||||||
{
|
{
|
||||||
// VgaRefreshDisplay();
|
|
||||||
if (!Attached)
|
if (!Attached)
|
||||||
{
|
{
|
||||||
VgaAttachToConsole();
|
VgaAttachToConsole();
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
/* PRIVATE VARIABLES **********************************************************/
|
/* PRIVATE VARIABLES **********************************************************/
|
||||||
|
|
||||||
static CONST DWORD MemoryBase[] = { 0xA0000, 0xA0000, 0xB0000, 0xB8000 };
|
static CONST DWORD MemoryBase[] = { 0xA0000, 0xA0000, 0xB0000, 0xB8000 };
|
||||||
static CONST DWORD MemorySize[] = { 0x20000, 0x10000, 0x8000, 0x8000 };
|
static CONST DWORD MemorySize[] = { 0x20000, 0x10000, 0x08000, 0x08000 };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Activate this line if you want to use the real
|
* Activate this line if you want to use the real
|
||||||
|
@ -2086,7 +2086,7 @@ VOID VgaClearMemory(VOID)
|
||||||
RtlZeroMemory(VgaMemory, sizeof(VgaMemory));
|
RtlZeroMemory(VgaMemory, sizeof(VgaMemory));
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID VgaWriteFont(UINT FontNumber, CONST UCHAR* FontData, UINT Height)
|
VOID VgaWriteTextModeFont(UINT FontNumber, CONST UCHAR* FontData, UINT Height)
|
||||||
{
|
{
|
||||||
UINT i, j;
|
UINT i, j;
|
||||||
PUCHAR FontMemory = (PUCHAR)&VgaMemory[VGA_BANK_SIZE * VGA_FONT_BANK + (FontNumber * VGA_FONT_SIZE)];
|
PUCHAR FontMemory = (PUCHAR)&VgaMemory[VGA_BANK_SIZE * VGA_FONT_BANK + (FontNumber * VGA_FONT_SIZE)];
|
||||||
|
|
|
@ -258,7 +258,7 @@ COORD VgaGetDisplayResolution(VOID);
|
||||||
VOID VgaRefreshDisplay(VOID);
|
VOID VgaRefreshDisplay(VOID);
|
||||||
VOID FASTCALL VgaReadMemory(ULONG Address, PVOID Buffer, ULONG Size);
|
VOID FASTCALL VgaReadMemory(ULONG Address, PVOID Buffer, ULONG Size);
|
||||||
BOOLEAN FASTCALL VgaWriteMemory(ULONG Address, PVOID Buffer, ULONG Size);
|
BOOLEAN FASTCALL VgaWriteMemory(ULONG Address, PVOID Buffer, ULONG Size);
|
||||||
VOID VgaWriteFont(UINT FontNumber, CONST UCHAR *FontData, UINT Height);
|
VOID VgaWriteTextModeFont(UINT FontNumber, CONST UCHAR *FontData, UINT Height);
|
||||||
VOID VgaClearMemory(VOID);
|
VOID VgaClearMemory(VOID);
|
||||||
BOOLEAN VgaGetDoubleVisionState(PBOOLEAN Horizontal, PBOOLEAN Vertical);
|
BOOLEAN VgaGetDoubleVisionState(PBOOLEAN Horizontal, PBOOLEAN Vertical);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue