mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:33:01 +00:00
[BOOTVID] Replace hardcoded screen and font size numbers by #define-d values.
This commit is contained in:
parent
ff722ac72e
commit
1d2b0fbcd1
4 changed files with 55 additions and 49 deletions
|
@ -33,8 +33,8 @@ ULONG VidpScrollRegion[4] =
|
||||||
{
|
{
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
640 - 1,
|
SCREEN_WIDTH - 1,
|
||||||
480 - 1
|
SCREEN_HEIGHT - 1
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _VGA_COLOR
|
typedef struct _VGA_COLOR
|
||||||
|
@ -97,7 +97,7 @@ VidpSetPixel(IN ULONG Left,
|
||||||
//
|
//
|
||||||
// Calculate the pixel position
|
// Calculate the pixel position
|
||||||
//
|
//
|
||||||
PixelPosition = &VgaArmBase[Left + (Top * 640)];
|
PixelPosition = &VgaArmBase[Left + (Top * SCREEN_WIDTH)];
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set our color
|
// Set our color
|
||||||
|
@ -117,10 +117,10 @@ DisplayCharacter(IN CHAR Character,
|
||||||
ULONG i, j, XOffset;
|
ULONG i, j, XOffset;
|
||||||
|
|
||||||
/* Get the font line for this character */
|
/* Get the font line for this character */
|
||||||
FontChar = &FontData[Character * 13 - Top];
|
FontChar = &FontData[Character * BOOTCHAR_HEIGHT - Top];
|
||||||
|
|
||||||
/* Loop each pixel height */
|
/* Loop each pixel height */
|
||||||
i = 13;
|
i = BOOTCHAR_HEIGHT;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
/* Loop each pixel width */
|
/* Loop each pixel width */
|
||||||
|
@ -159,8 +159,8 @@ VgaScroll(IN ULONG Scroll)
|
||||||
PUSHORT i, j;
|
PUSHORT i, j;
|
||||||
|
|
||||||
/* Set memory positions of the scroll */
|
/* Set memory positions of the scroll */
|
||||||
SourceOffset = &VgaArmBase[(VidpScrollRegion[1] * 80) + (VidpScrollRegion[0] >> 3)];
|
SourceOffset = &VgaArmBase[(VidpScrollRegion[1] * (SCREEN_WIDTH / 8)) + (VidpScrollRegion[0] >> 3)];
|
||||||
DestOffset = &SourceOffset[Scroll * 80];
|
DestOffset = &SourceOffset[Scroll * (SCREEN_WIDTH / 8)];
|
||||||
|
|
||||||
/* Save top and check if it's above the bottom */
|
/* Save top and check if it's above the bottom */
|
||||||
Top = VidpScrollRegion[1];
|
Top = VidpScrollRegion[1];
|
||||||
|
@ -196,8 +196,8 @@ VgaScroll(IN ULONG Scroll)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move to the next line */
|
/* Move to the next line */
|
||||||
SourceOffset += 80;
|
SourceOffset += (SCREEN_WIDTH / 8);
|
||||||
DestOffset += 80;
|
DestOffset += (SCREEN_WIDTH / 8);
|
||||||
|
|
||||||
/* Increase top */
|
/* Increase top */
|
||||||
Top++;
|
Top++;
|
||||||
|
@ -219,18 +219,18 @@ PreserveRow(IN ULONG CurrentTop,
|
||||||
if (Direction)
|
if (Direction)
|
||||||
{
|
{
|
||||||
/* Calculate the position in memory for the row */
|
/* Calculate the position in memory for the row */
|
||||||
Position1 = &VgaArmBase[CurrentTop * 80];
|
Position1 = &VgaArmBase[CurrentTop * (SCREEN_WIDTH / 8)];
|
||||||
Position2 = &VgaArmBase[0x9600];
|
Position2 = &VgaArmBase[SCREEN_HEIGHT * (SCREEN_WIDTH / 8)];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Calculate the position in memory for the row */
|
/* Calculate the position in memory for the row */
|
||||||
Position1 = &VgaArmBase[0x9600];
|
Position1 = &VgaArmBase[SCREEN_HEIGHT * (SCREEN_WIDTH / 8)];
|
||||||
Position2 = &VgaArmBase[CurrentTop * 80];
|
Position2 = &VgaArmBase[CurrentTop * (SCREEN_WIDTH / 8)];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the count and loop every pixel */
|
/* Set the count and loop every pixel */
|
||||||
Count = TopDelta * 80;
|
Count = TopDelta * (SCREEN_WIDTH / 8);
|
||||||
while (Count--)
|
while (Count--)
|
||||||
{
|
{
|
||||||
/* Write the data back on the other position */
|
/* Write the data back on the other position */
|
||||||
|
@ -255,8 +255,8 @@ VidpInitializeDisplay(VOID)
|
||||||
//
|
//
|
||||||
// Initialize timings to 640x480
|
// Initialize timings to 640x480
|
||||||
//
|
//
|
||||||
WRITE_REGISTER_ULONG(PL110_LCDTIMING0, LCDTIMING0_PPL(640));
|
WRITE_REGISTER_ULONG(PL110_LCDTIMING0, LCDTIMING0_PPL(SCREEN_WIDTH));
|
||||||
WRITE_REGISTER_ULONG(PL110_LCDTIMING1, LCDTIMING1_LPP(480));
|
WRITE_REGISTER_ULONG(PL110_LCDTIMING1, LCDTIMING1_LPP(SCREEN_HEIGHT));
|
||||||
|
|
||||||
//
|
//
|
||||||
// Enable the LCD Display
|
// Enable the LCD Display
|
||||||
|
@ -327,7 +327,7 @@ VidResetDisplay(IN BOOLEAN HalReset)
|
||||||
// Re-initialize the palette and fill the screen black
|
// Re-initialize the palette and fill the screen black
|
||||||
//
|
//
|
||||||
//InitializePalette();
|
//InitializePalette();
|
||||||
VidSolidColorFill(0, 0, 639, 479, 0);
|
VidSolidColorFill(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -424,7 +424,7 @@ VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
VidDisplayString(IN PUCHAR String)
|
VidDisplayString(IN PUCHAR String)
|
||||||
{
|
{
|
||||||
ULONG TopDelta = 14;
|
ULONG TopDelta = BOOTCHAR_HEIGHT + 1;
|
||||||
|
|
||||||
/* Start looping the string */
|
/* Start looping the string */
|
||||||
while (*String)
|
while (*String)
|
||||||
|
|
|
@ -485,5 +485,5 @@ VidResetDisplay(IN BOOLEAN HalReset)
|
||||||
|
|
||||||
/* Re-initialize the palette and fill the screen black */
|
/* Re-initialize the palette and fill the screen black */
|
||||||
InitializePalette();
|
InitializePalette();
|
||||||
VidSolidColorFill(0, 0, 639, 479, 0);
|
VidSolidColorFill(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,8 @@ static ULONG ScrollRegion[4] =
|
||||||
{
|
{
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
640 - 1,
|
SCREEN_WIDTH - 1,
|
||||||
480 - 1
|
SCREEN_HEIGHT - 1
|
||||||
};
|
};
|
||||||
static UCHAR lMaskTable[8] =
|
static UCHAR lMaskTable[8] =
|
||||||
{
|
{
|
||||||
|
@ -97,7 +97,7 @@ SetPixel(IN ULONG Left,
|
||||||
PUCHAR PixelPosition;
|
PUCHAR PixelPosition;
|
||||||
|
|
||||||
/* Calculate the pixel position. */
|
/* Calculate the pixel position. */
|
||||||
PixelPosition = (PUCHAR)(VgaBase + (Left >> 3) + (Top * 80));
|
PixelPosition = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)));
|
||||||
|
|
||||||
/* Select the bitmask register and write the mask */
|
/* Select the bitmask register and write the mask */
|
||||||
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, (PixelMask[Left & 7] << 8) | IND_BIT_MASK);
|
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, (PixelMask[Left & 7] << 8) | IND_BIT_MASK);
|
||||||
|
@ -149,14 +149,14 @@ DisplayCharacter(IN CHAR Character,
|
||||||
|
|
||||||
/* Get the font and pixel pointer */
|
/* Get the font and pixel pointer */
|
||||||
FontChar = GetFontPtr(Character);
|
FontChar = GetFontPtr(Character);
|
||||||
PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * 80));
|
PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)));
|
||||||
|
|
||||||
/* Loop all pixel rows */
|
/* Loop all pixel rows */
|
||||||
Height = BOOTCHAR_HEIGHT;
|
Height = BOOTCHAR_HEIGHT;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
SET_PIXELS(PixelPtr, *FontChar >> Shift, TextColor);
|
SET_PIXELS(PixelPtr, *FontChar >> Shift, TextColor);
|
||||||
PixelPtr += 80;
|
PixelPtr += (SCREEN_WIDTH / 8);
|
||||||
FontChar += FONT_PTR_DELTA;
|
FontChar += FONT_PTR_DELTA;
|
||||||
} while (--Height);
|
} while (--Height);
|
||||||
|
|
||||||
|
@ -168,14 +168,14 @@ DisplayCharacter(IN CHAR Character,
|
||||||
|
|
||||||
/* Get the font and pixel pointer (2nd byte) */
|
/* Get the font and pixel pointer (2nd byte) */
|
||||||
FontChar = GetFontPtr(Character);
|
FontChar = GetFontPtr(Character);
|
||||||
PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * 80) + 1);
|
PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)) + 1);
|
||||||
|
|
||||||
/* Loop all pixel rows */
|
/* Loop all pixel rows */
|
||||||
Height = BOOTCHAR_HEIGHT;
|
Height = BOOTCHAR_HEIGHT;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
SET_PIXELS(PixelPtr, *FontChar << Shift, TextColor);
|
SET_PIXELS(PixelPtr, *FontChar << Shift, TextColor);
|
||||||
PixelPtr += 80;
|
PixelPtr += (SCREEN_WIDTH / 8);
|
||||||
FontChar += FONT_PTR_DELTA;
|
FontChar += FONT_PTR_DELTA;
|
||||||
} while (--Height);
|
} while (--Height);
|
||||||
}
|
}
|
||||||
|
@ -192,14 +192,14 @@ DisplayCharacter(IN CHAR Character,
|
||||||
|
|
||||||
/* Get the font and pixel pointer */
|
/* Get the font and pixel pointer */
|
||||||
FontChar = GetFontPtr(Character);
|
FontChar = GetFontPtr(Character);
|
||||||
PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * 80));
|
PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)));
|
||||||
|
|
||||||
/* Loop all pixel rows */
|
/* Loop all pixel rows */
|
||||||
Height = BOOTCHAR_HEIGHT;
|
Height = BOOTCHAR_HEIGHT;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
SET_PIXELS(PixelPtr, ~*FontChar >> Shift, BackColor);
|
SET_PIXELS(PixelPtr, ~*FontChar >> Shift, BackColor);
|
||||||
PixelPtr += 80;
|
PixelPtr += (SCREEN_WIDTH / 8);
|
||||||
FontChar += FONT_PTR_DELTA;
|
FontChar += FONT_PTR_DELTA;
|
||||||
} while (--Height);
|
} while (--Height);
|
||||||
|
|
||||||
|
@ -211,14 +211,14 @@ DisplayCharacter(IN CHAR Character,
|
||||||
|
|
||||||
/* Get the font and pixel pointer (2nd byte) */
|
/* Get the font and pixel pointer (2nd byte) */
|
||||||
FontChar = GetFontPtr(Character);
|
FontChar = GetFontPtr(Character);
|
||||||
PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * 80) + 1);
|
PixelPtr = (PUCHAR)(VgaBase + (Left >> 3) + (Top * (SCREEN_WIDTH / 8)) + 1);
|
||||||
|
|
||||||
/* Loop all pixel rows */
|
/* Loop all pixel rows */
|
||||||
Height = BOOTCHAR_HEIGHT;
|
Height = BOOTCHAR_HEIGHT;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
SET_PIXELS(PixelPtr, ~*FontChar << Shift, BackColor);
|
SET_PIXELS(PixelPtr, ~*FontChar << Shift, BackColor);
|
||||||
PixelPtr += 80;
|
PixelPtr += (SCREEN_WIDTH / 8);
|
||||||
FontChar += FONT_PTR_DELTA;
|
FontChar += FONT_PTR_DELTA;
|
||||||
} while (--Height);
|
} while (--Height);
|
||||||
}
|
}
|
||||||
|
@ -335,8 +335,8 @@ VgaScroll(IN ULONG Scroll)
|
||||||
RowSize = (ScrollRegion[2] - ScrollRegion[0] + 1) / 8;
|
RowSize = (ScrollRegion[2] - ScrollRegion[0] + 1) / 8;
|
||||||
|
|
||||||
/* Calculate the position in memory for the row */
|
/* Calculate the position in memory for the row */
|
||||||
OldPosition = (PUCHAR)(VgaBase + (ScrollRegion[1] + Scroll) * 80 + ScrollRegion[0] / 8);
|
OldPosition = (PUCHAR)(VgaBase + (ScrollRegion[1] + Scroll) * (SCREEN_WIDTH / 8) + ScrollRegion[0] / 8);
|
||||||
NewPosition = (PUCHAR)(VgaBase + ScrollRegion[1] * 80 + ScrollRegion[0] / 8);
|
NewPosition = (PUCHAR)(VgaBase + ScrollRegion[1] * (SCREEN_WIDTH / 8) + ScrollRegion[0] / 8);
|
||||||
|
|
||||||
/* Start loop */
|
/* Start loop */
|
||||||
for (Top = ScrollRegion[1]; Top <= ScrollRegion[3]; ++Top)
|
for (Top = ScrollRegion[1]; Top <= ScrollRegion[3]; ++Top)
|
||||||
|
@ -350,8 +350,8 @@ VgaScroll(IN ULONG Scroll)
|
||||||
for (i = 0; i < RowSize; ++i)
|
for (i = 0; i < RowSize; ++i)
|
||||||
WRITE_REGISTER_UCHAR(NewPosition + i, READ_REGISTER_UCHAR(OldPosition + i));
|
WRITE_REGISTER_UCHAR(NewPosition + i, READ_REGISTER_UCHAR(OldPosition + i));
|
||||||
#endif
|
#endif
|
||||||
OldPosition += 80;
|
OldPosition += (SCREEN_WIDTH / 8);
|
||||||
NewPosition += 80;
|
NewPosition += (SCREEN_WIDTH / 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,19 +377,18 @@ PreserveRow(IN ULONG CurrentTop,
|
||||||
if (Direction)
|
if (Direction)
|
||||||
{
|
{
|
||||||
/* Calculate the position in memory for the row */
|
/* Calculate the position in memory for the row */
|
||||||
Position1 = (PUCHAR)(VgaBase + CurrentTop * 80);
|
Position1 = (PUCHAR)(VgaBase + CurrentTop * (SCREEN_WIDTH / 8));
|
||||||
Position2 = (PUCHAR)(VgaBase + 0x9600);
|
Position2 = (PUCHAR)(VgaBase + SCREEN_HEIGHT * (SCREEN_WIDTH / 8));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Calculate the position in memory for the row */
|
/* Calculate the position in memory for the row */
|
||||||
Position1 = (PUCHAR)(VgaBase + 0x9600);
|
Position1 = (PUCHAR)(VgaBase + SCREEN_HEIGHT * (SCREEN_WIDTH / 8));
|
||||||
Position2 = (PUCHAR)(VgaBase + CurrentTop * 80);
|
Position2 = (PUCHAR)(VgaBase + CurrentTop * (SCREEN_WIDTH / 8));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the count and loop every pixel */
|
/* Set the count and loop every pixel */
|
||||||
Count = TopDelta * 80;
|
Count = TopDelta * (SCREEN_WIDTH / 8);
|
||||||
|
|
||||||
#if defined(_M_IX86) || defined(_M_AMD64)
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
||||||
__movsb(Position1, Position2, Count);
|
__movsb(Position1, Position2, Count);
|
||||||
#else
|
#else
|
||||||
|
@ -966,7 +965,7 @@ VidScreenToBufferBlt(IN PUCHAR Buffer,
|
||||||
RtlZeroMemory(Buffer, Delta * Height);
|
RtlZeroMemory(Buffer, Delta * Height);
|
||||||
|
|
||||||
/* Calculate the pixel offset and convert the X distance into byte form */
|
/* Calculate the pixel offset and convert the X distance into byte form */
|
||||||
PixelOffset = Top * 80 + (Left >> 3);
|
PixelOffset = Top * (SCREEN_WIDTH / 8) + (Left >> 3);
|
||||||
XDistance >>= 3;
|
XDistance >>= 3;
|
||||||
|
|
||||||
/* Loop the 4 planes */
|
/* Loop the 4 planes */
|
||||||
|
@ -1029,7 +1028,7 @@ VidScreenToBufferBlt(IN PUCHAR Buffer,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update pixel position */
|
/* Update pixel position */
|
||||||
PixelPosition += 80;
|
PixelPosition += (SCREEN_WIDTH / 8);
|
||||||
i += Delta;
|
i += Delta;
|
||||||
} while (--y);
|
} while (--y);
|
||||||
}
|
}
|
||||||
|
@ -1072,7 +1071,7 @@ VidSolidColorFill(IN ULONG Left,
|
||||||
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, 7);
|
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, 7);
|
||||||
|
|
||||||
/* Calculate pixel position for the read */
|
/* Calculate pixel position for the read */
|
||||||
Offset = (PUCHAR)(VgaBase + (Top * 80) + LeftOffset);
|
Offset = (PUCHAR)(VgaBase + (Top * (SCREEN_WIDTH / 8)) + LeftOffset);
|
||||||
|
|
||||||
/* Select the bitmask register and write the mask */
|
/* Select the bitmask register and write the mask */
|
||||||
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, (USHORT)lMask);
|
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, (USHORT)lMask);
|
||||||
|
@ -1088,7 +1087,7 @@ VidSolidColorFill(IN ULONG Left,
|
||||||
WRITE_REGISTER_UCHAR(Offset, READ_REGISTER_UCHAR(Offset) & Color);
|
WRITE_REGISTER_UCHAR(Offset, READ_REGISTER_UCHAR(Offset) & Color);
|
||||||
|
|
||||||
/* Move to the next line */
|
/* Move to the next line */
|
||||||
Offset += 80;
|
Offset += (SCREEN_WIDTH / 8);
|
||||||
} while (--i);
|
} while (--i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1096,7 +1095,7 @@ VidSolidColorFill(IN ULONG Left,
|
||||||
if (Distance)
|
if (Distance)
|
||||||
{
|
{
|
||||||
/* Calculate new pixel position */
|
/* Calculate new pixel position */
|
||||||
Offset = (PUCHAR)(VgaBase + (Top * 80) + RightOffset);
|
Offset = (PUCHAR)(VgaBase + (Top * (SCREEN_WIDTH / 8)) + RightOffset);
|
||||||
Distance--;
|
Distance--;
|
||||||
|
|
||||||
/* Select the bitmask register and write the mask */
|
/* Select the bitmask register and write the mask */
|
||||||
|
@ -1114,7 +1113,7 @@ VidSolidColorFill(IN ULONG Left,
|
||||||
READ_REGISTER_UCHAR(Offset) & Color);
|
READ_REGISTER_UCHAR(Offset) & Color);
|
||||||
|
|
||||||
/* Move to the next line */
|
/* Move to the next line */
|
||||||
Offset += 80;
|
Offset += (SCREEN_WIDTH / 8);
|
||||||
} while (--i);
|
} while (--i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1122,7 +1121,7 @@ VidSolidColorFill(IN ULONG Left,
|
||||||
if (Distance)
|
if (Distance)
|
||||||
{
|
{
|
||||||
/* Calculate new pixel position */
|
/* Calculate new pixel position */
|
||||||
Offset = (PUCHAR)(VgaBase + (Top * 80) + LeftOffset + 1);
|
Offset = (PUCHAR)(VgaBase + (Top * (SCREEN_WIDTH / 8)) + LeftOffset + 1);
|
||||||
|
|
||||||
/* Set the bitmask to 0xFF for all 4 planes */
|
/* Set the bitmask to 0xFF for all 4 planes */
|
||||||
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, 0xFF08);
|
__outpw(VGA_BASE_IO_PORT + GRAPH_ADDRESS_PORT, 0xFF08);
|
||||||
|
@ -1145,7 +1144,7 @@ VidSolidColorFill(IN ULONG Left,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update position in memory */
|
/* Update position in memory */
|
||||||
Offset += (80 - Distance);
|
Offset += ((SCREEN_WIDTH / 8) - Distance);
|
||||||
} while (--i);
|
} while (--i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,14 @@
|
||||||
/* Define if FontData has upside down characters */
|
/* Define if FontData has upside down characters */
|
||||||
#undef CHAR_GEN_UPSIDE_DOWN
|
#undef CHAR_GEN_UPSIDE_DOWN
|
||||||
|
|
||||||
#define BOOTCHAR_HEIGHT 13
|
#define BOOTCHAR_HEIGHT 13
|
||||||
|
#define BOOTCHAR_WIDTH 8 // Each character line is encoded in a UCHAR.
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Screen resolution (for default VGA)
|
||||||
|
*/
|
||||||
|
#define SCREEN_WIDTH 640
|
||||||
|
#define SCREEN_HEIGHT 480
|
||||||
|
|
||||||
#ifndef _M_ARM
|
#ifndef _M_ARM
|
||||||
#include "vga.h"
|
#include "vga.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue