mirror of
https://github.com/acidanthera/OpenCorePkg.git
synced 2025-12-08 19:25:01 +00:00
OcConsoleLib: Add font pages
- Add back original ISO Latin font page 1 - Add unicode box drawing and block element characters
This commit is contained in:
parent
a33b5b3542
commit
bc71bbf9ef
167
Application/FontTester/FontTester.c
Normal file
167
Application/FontTester/FontTester.c
Normal file
@ -0,0 +1,167 @@
|
||||
/** @file
|
||||
Test implemented font pages.
|
||||
|
||||
Copyright (c) 2023, Mike Beaton. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-3-Clause
|
||||
**/
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <Library/OcDebugLogLib.h>
|
||||
#include <Library/OcMiscLib.h>
|
||||
#include <Library/UefiLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
|
||||
#define APP_TITLE L" <<<Font Tester>>> "
|
||||
|
||||
#define NROWS (8)
|
||||
#define NCOLUMNS (16)
|
||||
#define GAP (8)
|
||||
|
||||
STATIC
|
||||
VOID
|
||||
PauseSeconds (
|
||||
UINTN Seconds
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
|
||||
//
|
||||
// Note: Ensure that stall value is within UINT32 in nanoseconds (required on some broken firmware).
|
||||
//
|
||||
for (Index = 0; Index < Seconds; ++Index) {
|
||||
gBS->Stall (SECONDS_TO_MICROSECONDS (1));
|
||||
}
|
||||
}
|
||||
|
||||
STATIC
|
||||
VOID
|
||||
PrintFontPage (
|
||||
UINT8 PageNumber,
|
||||
UINTN CursorColumn,
|
||||
UINTN CursorRow
|
||||
)
|
||||
{
|
||||
CHAR16 Char;
|
||||
CHAR16 String[(NCOLUMNS * 2) + 1];
|
||||
UINTN Row;
|
||||
UINTN Column;
|
||||
|
||||
gST->ConOut->SetAttribute (gST->ConOut, EFI_BACKGROUND_CYAN | EFI_DARKGRAY);
|
||||
gST->ConOut->SetCursorPosition (gST->ConOut, CursorColumn, CursorRow);
|
||||
Print (L"Page %u:", PageNumber);
|
||||
gST->ConOut->SetAttribute (gST->ConOut, EFI_BACKGROUND_BLACK | EFI_LIGHTGRAY);
|
||||
|
||||
for (Column = 0; Column < NCOLUMNS; Column++) {
|
||||
String[Column * 2] = L' ';
|
||||
}
|
||||
|
||||
String[NCOLUMNS * 2] = CHAR_NULL;
|
||||
Char = PageNumber << 7;
|
||||
|
||||
for (Row = 0; Row < NROWS; Row++) {
|
||||
for (Column = 0; Column < NCOLUMNS; Column++) {
|
||||
if (Char < 32) {
|
||||
String[(Column * 2) + 1] = L'_';
|
||||
} else {
|
||||
String[(Column * 2) + 1] = Char;
|
||||
}
|
||||
|
||||
++Char;
|
||||
}
|
||||
|
||||
gST->ConOut->SetCursorPosition (gST->ConOut, CursorColumn, CursorRow + Row + 2);
|
||||
gST->ConOut->OutputString (gST->ConOut, String);
|
||||
}
|
||||
}
|
||||
|
||||
UINTN
|
||||
CentrePos (
|
||||
UINTN Width
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN Columns;
|
||||
UINTN Rows;
|
||||
|
||||
Status = gST->ConOut->QueryMode (
|
||||
gST->ConOut,
|
||||
gST->ConOut->Mode->Mode,
|
||||
&Columns,
|
||||
&Rows
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Status) || (Columns < Width)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
// Note: Subtract then divide can be different by one, and is less well centred.
|
||||
//
|
||||
return (Columns / 2) - (Width / 2);
|
||||
}
|
||||
|
||||
VOID
|
||||
Centre (
|
||||
CHAR16 *String
|
||||
)
|
||||
{
|
||||
gST->ConOut->SetCursorPosition (
|
||||
gST->ConOut,
|
||||
CentrePos (StrLen (String)),
|
||||
gST->ConOut->Mode->CursorRow
|
||||
);
|
||||
|
||||
gST->ConOut->OutputString (
|
||||
gST->ConOut,
|
||||
String
|
||||
);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UefiMain (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
UINTN Pos0;
|
||||
UINTN Pos1;
|
||||
INT32 OriginalAttribute;
|
||||
BOOLEAN OriginalCursorVisible;
|
||||
|
||||
OriginalAttribute = gST->ConOut->Mode->Attribute;
|
||||
OriginalCursorVisible = gST->ConOut->Mode->CursorVisible;
|
||||
|
||||
gST->ConOut->EnableCursor (gST->ConOut, FALSE);
|
||||
|
||||
gST->ConOut->SetAttribute (gST->ConOut, EFI_BACKGROUND_BLACK | EFI_LIGHTGRAY);
|
||||
gST->ConOut->ClearScreen (gST->ConOut);
|
||||
|
||||
Print (L"\r\n");
|
||||
gST->ConOut->SetAttribute (gST->ConOut, EFI_BACKGROUND_BROWN | EFI_CYAN);
|
||||
Centre (APP_TITLE);
|
||||
|
||||
Pos0 = CentrePos (NCOLUMNS * 4 + GAP);
|
||||
Pos1 = Pos0 + NCOLUMNS * 2 + GAP;
|
||||
|
||||
PrintFontPage (0, Pos0, 3);
|
||||
PrintFontPage (1, Pos1, 3);
|
||||
PrintFontPage (74, Pos0, 14);
|
||||
PrintFontPage (75, Pos1, 14);
|
||||
|
||||
//
|
||||
// Give time for screenshot.
|
||||
//
|
||||
PauseSeconds (2);
|
||||
|
||||
Print (L"\r\n\r\n\r\n");
|
||||
gST->ConOut->SetAttribute (gST->ConOut, EFI_BACKGROUND_RED | EFI_WHITE);
|
||||
Centre (L"Press any key...");
|
||||
WaitForKeyPress (L"");
|
||||
Centre (L"Done.\r\n");
|
||||
|
||||
gST->ConOut->SetAttribute (gST->ConOut, OriginalAttribute);
|
||||
gST->ConOut->EnableCursor (gST->ConOut, OriginalCursorVisible);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
40
Application/FontTester/FontTester.inf
Normal file
40
Application/FontTester/FontTester.inf
Normal file
@ -0,0 +1,40 @@
|
||||
## @file
|
||||
# Test implemented font pages.
|
||||
#
|
||||
# Copyright (C) 2023, Mike Beaton. All rights reserved.<BR>
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
##
|
||||
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = FontTester
|
||||
FILE_GUID = 17B6BF62-9513-4FAB-88A0-B8936D59C152
|
||||
MODULE_TYPE = UEFI_APPLICATION
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = UefiMain
|
||||
|
||||
#
|
||||
# This flag specifies whether HII resource section is generated into PE image.
|
||||
#
|
||||
UEFI_HII_RESOURCE_SECTION = TRUE
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
FontTester.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
OpenCorePkg/OpenCorePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
OcConsoleControlEntryModeGenericLib
|
||||
OcMiscLib
|
||||
UefiApplicationEntryPoint
|
||||
UefiBootServicesTableLib
|
||||
UefiLib
|
||||
@ -4,6 +4,7 @@ OpenCore Changelog
|
||||
- Added `--force-codec` option to AudioDxe, thx @xCuri0
|
||||
- Downgraded additional warning message in normal operation of emulated NVRAM to info
|
||||
- Disabled not present DVL0 device in SSDT-SBUS-MCHC by default, thx @stevezhengshiqi
|
||||
- Added Unicode font pages for some accented characters, plus box drawing and block elements, to `Builtin` text renderer
|
||||
|
||||
#### v0.9.2
|
||||
- Added `DisableIoMapperMapping` quirk, thx @CaseySJ
|
||||
|
||||
@ -6526,6 +6526,8 @@ Some of the known tools are listed below (builtin tools are marked with \textbf{
|
||||
& Reset NVRAM alternative bundled as a standalone tool. \\
|
||||
\href{https://github.com/acidanthera/OpenCorePkg}{\texttt{CsrUtil}}\textbf{*}
|
||||
& Simple implementation of SIP-related features of Apple \texttt{csrutil}. \\
|
||||
\href{https://github.com/acidanthera/OpenCorePkg}{\texttt{FontTester}}\textbf{*}
|
||||
& Render the console font pages which the \texttt{Builtin} renderer provides. \\
|
||||
\href{https://github.com/acidanthera/OpenCorePkg}{\texttt{GopStop}}\textbf{*}
|
||||
& Test GraphicsOutput protocol with a
|
||||
\href{https://github.com/acidanthera/OpenCorePkg/tree/master/Application/GopStop}{simple scenario}. \\
|
||||
|
||||
@ -36,12 +36,15 @@
|
||||
* This font may be freely used for any purpose.
|
||||
*/
|
||||
|
||||
#define ISO_CHAR_MIN 0x21
|
||||
#define ISO_CHAR_MAX 0x7E
|
||||
#define ISO_CHAR_WIDTH 8
|
||||
#define ISO_CHAR_HEIGHT 16
|
||||
#define ISO_CHAR_WIDTH (8)
|
||||
#define ISO_CHAR_HEIGHT (16)
|
||||
|
||||
STATIC UINT8 mIsoFontData[(ISO_CHAR_MAX - ISO_CHAR_MIN + 1)*(ISO_CHAR_HEIGHT - 2)] = {
|
||||
#define PAGE0_CHAR_MIN (33)
|
||||
#define PAGE0_CHAR_MAX (127) ///< Use one over
|
||||
#define PAGE0_FONT_HEAD (1)
|
||||
#define PAGE0_FONT_TAIL (1)
|
||||
|
||||
STATIC UINT8 mIsoFontDataPage0[(PAGE0_CHAR_MAX - PAGE0_CHAR_MIN) * (ISO_CHAR_HEIGHT - PAGE0_FONT_HEAD - PAGE0_FONT_TAIL)] = {
|
||||
/* 33 */ 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
|
||||
/* 34 */ 0x00, 0x6c, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 35 */ 0x00, 0x00, 0x36, 0x36, 0x7f, 0x36, 0x36, 0x7f, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00,
|
||||
@ -138,6 +141,433 @@ STATIC UINT8 mIsoFontData[(ISO_CHAR_MAX - ISO_CHAR_MIN + 1)*(ISO_CHAR_HEIGHT -
|
||||
/* 126 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
/*
|
||||
* Second page of ISO Latin-1 font.
|
||||
*/
|
||||
#define PAGE1_CHAR_MIN (161 - 0x80)
|
||||
#define PAGE1_CHAR_MAX (256 - 0x80)
|
||||
#define PAGE1_FONT_HEAD (0)
|
||||
#define PAGE1_FONT_TAIL (1)
|
||||
|
||||
STATIC UINT8 mIsoFontDataPage1[(PAGE1_CHAR_MAX - PAGE1_CHAR_MIN) * (ISO_CHAR_HEIGHT - PAGE1_FONT_HEAD - PAGE1_FONT_TAIL)] = {
|
||||
/* 161 */ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
|
||||
/* 162 */ 0x00, 0x00, 0x00, 0x08, 0x08, 0x3e, 0x6b, 0x0b, 0x0b, 0x0b, 0x6b, 0x3e, 0x08, 0x08, 0x00,
|
||||
/* 163 */ 0x00, 0x00, 0x1c, 0x36, 0x06, 0x06, 0x1f, 0x06, 0x06, 0x07, 0x6f, 0x3b, 0x00, 0x00, 0x00,
|
||||
/* 164 */ 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 165 */ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00,
|
||||
/* 166 */ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
|
||||
/* 167 */ 0x00, 0x3c, 0x66, 0x0c, 0x1e, 0x33, 0x63, 0x66, 0x3c, 0x18, 0x33, 0x1e, 0x00, 0x00, 0x00,
|
||||
/* 168 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 169 */ 0x00, 0x00, 0x3c, 0x42, 0x99, 0xa5, 0x85, 0xa5, 0x99, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 170 */ 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x3b, 0x36, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 171 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x36, 0x1b, 0x1b, 0x36, 0x6c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 172 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 173 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 174 */ 0x00, 0x00, 0x3c, 0x42, 0x9d, 0xa5, 0x9d, 0xa5, 0xa5, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 175 */ 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 176 */ 0x00, 0x00, 0x1c, 0x36, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 177 */ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 178 */ 0x00, 0x1e, 0x33, 0x18, 0x0c, 0x06, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 179 */ 0x00, 0x1e, 0x33, 0x18, 0x30, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 180 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 181 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x76, 0x6e, 0x06, 0x06, 0x03,
|
||||
/* 182 */ 0x00, 0x00, 0x7e, 0x2f, 0x2f, 0x2f, 0x2e, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00,
|
||||
/* 183 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 184 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x1e,
|
||||
/* 185 */ 0x00, 0x0c, 0x0e, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 186 */ 0x00, 0x1e, 0x33, 0x33, 0x33, 0x33, 0x1e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 187 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x36, 0x6c, 0x6c, 0x36, 0x1b, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 188 */ 0x00, 0x10, 0x1c, 0x18, 0x18, 0x18, 0x00, 0x7f, 0x00, 0x18, 0x1c, 0x1a, 0x3e, 0x18, 0x00,
|
||||
/* 189 */ 0x00, 0x10, 0x1c, 0x18, 0x18, 0x18, 0x00, 0x7f, 0x00, 0x1c, 0x36, 0x18, 0x0c, 0x3e, 0x00,
|
||||
/* 190 */ 0x00, 0x1c, 0x36, 0x18, 0x36, 0x1c, 0x00, 0x7f, 0x00, 0x18, 0x1c, 0x1a, 0x3e, 0x18, 0x00,
|
||||
/* 191 */ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x63, 0x3e, 0x00,
|
||||
/* 192 */ 0x0c, 0x18, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00,
|
||||
/* 193 */ 0x18, 0x0c, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00,
|
||||
/* 194 */ 0x08, 0x14, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00,
|
||||
/* 195 */ 0x6e, 0x3b, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00,
|
||||
/* 196 */ 0x36, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00,
|
||||
/* 197 */ 0x1c, 0x36, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00,
|
||||
/* 198 */ 0x00, 0x00, 0xfe, 0x33, 0x33, 0x33, 0xff, 0x33, 0x33, 0x33, 0x33, 0xf3, 0x00, 0x00, 0x00,
|
||||
/* 199 */ 0x00, 0x00, 0x3c, 0x66, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x66, 0x3c, 0x18, 0x30, 0x1e,
|
||||
/* 200 */ 0x0c, 0x18, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x03, 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00,
|
||||
/* 201 */ 0x18, 0x0c, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x03, 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00,
|
||||
/* 202 */ 0x08, 0x14, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x03, 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00,
|
||||
/* 203 */ 0x36, 0x00, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x03, 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00,
|
||||
/* 204 */ 0x0c, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
|
||||
/* 205 */ 0x30, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
|
||||
/* 206 */ 0x18, 0x24, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
|
||||
/* 207 */ 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
|
||||
/* 208 */ 0x00, 0x00, 0x1e, 0x36, 0x66, 0x66, 0x6f, 0x66, 0x66, 0x66, 0x36, 0x1e, 0x00, 0x00, 0x00,
|
||||
/* 209 */ 0x6e, 0x3b, 0x63, 0x63, 0x67, 0x6f, 0x6f, 0x7b, 0x7b, 0x73, 0x63, 0x63, 0x00, 0x00, 0x00,
|
||||
/* 210 */ 0x06, 0x0c, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 211 */ 0x30, 0x18, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 212 */ 0x08, 0x14, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 213 */ 0x6e, 0x3b, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 214 */ 0x36, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 215 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 216 */ 0x00, 0x20, 0x3e, 0x73, 0x73, 0x6b, 0x6b, 0x6b, 0x6b, 0x67, 0x67, 0x3e, 0x02, 0x00, 0x00,
|
||||
/* 217 */ 0x0c, 0x18, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 218 */ 0x18, 0x0c, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 219 */ 0x08, 0x14, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 220 */ 0x36, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 221 */ 0x30, 0x18, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
|
||||
/* 222 */ 0x00, 0x00, 0x0f, 0x06, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x0f, 0x00, 0x00, 0x00,
|
||||
/* 223 */ 0x00, 0x00, 0x1e, 0x33, 0x33, 0x1b, 0x33, 0x63, 0x63, 0x63, 0x63, 0x3b, 0x00, 0x00, 0x00,
|
||||
/* 224 */ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x3e, 0x60, 0x7e, 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00,
|
||||
/* 225 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x3e, 0x60, 0x7e, 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00,
|
||||
/* 226 */ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x3e, 0x60, 0x7e, 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00,
|
||||
/* 227 */ 0x00, 0x00, 0x6e, 0x3b, 0x00, 0x3e, 0x60, 0x7e, 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00,
|
||||
/* 228 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x3e, 0x60, 0x7e, 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00,
|
||||
/* 229 */ 0x00, 0x1c, 0x36, 0x1c, 0x00, 0x3e, 0x60, 0x7e, 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00,
|
||||
/* 230 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xdb, 0xd8, 0xfe, 0x1b, 0xdb, 0x76, 0x00, 0x00, 0x00,
|
||||
/* 231 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x63, 0x03, 0x03, 0x03, 0x63, 0x3e, 0x18, 0x30, 0x1e,
|
||||
/* 232 */ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x3e, 0x63, 0x63, 0x7f, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 233 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x3e, 0x63, 0x63, 0x7f, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 234 */ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x3e, 0x63, 0x63, 0x7f, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 235 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x3e, 0x63, 0x63, 0x7f, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 236 */ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00,
|
||||
/* 237 */ 0x00, 0x18, 0x0c, 0x06, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00,
|
||||
/* 238 */ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00,
|
||||
/* 239 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00,
|
||||
/* 240 */ 0x00, 0x00, 0x2c, 0x18, 0x34, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00,
|
||||
/* 241 */ 0x00, 0x00, 0x6e, 0x3b, 0x00, 0x3b, 0x67, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00,
|
||||
/* 242 */ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 243 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 244 */ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 245 */ 0x00, 0x00, 0x6e, 0x3b, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 246 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00,
|
||||
/* 247 */ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 248 */ 0x00, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x73, 0x6b, 0x6b, 0x6b, 0x67, 0x3e, 0x02, 0x00, 0x00,
|
||||
/* 249 */ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00,
|
||||
/* 250 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00,
|
||||
/* 251 */ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00,
|
||||
/* 252 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00,
|
||||
/* 253 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x63, 0x63, 0x36, 0x36, 0x1c, 0x1c, 0x0c, 0x0c, 0x06, 0x03,
|
||||
/* 254 */ 0x00, 0x00, 0x0f, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x0f,
|
||||
/* 255 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x63, 0x63, 0x36, 0x36, 0x1c, 0x1c, 0x0c, 0x0c, 0x06, 0x03
|
||||
};
|
||||
|
||||
/*
|
||||
* Unicode box drawing and block element characters (used e.g. by memtest86).
|
||||
* Unicode font pages derived from https://github.com/farsil/ibmfonts
|
||||
* SPDX-License-Identifier: CC-BY-SA-4.0
|
||||
* (Exported as hex using `gbdfed` from ib8x16u.bdf, sparse info generated with `head`, `tail`, `nl` and additional hand editing.)
|
||||
*/
|
||||
#define ADDITIONAL_FONT_PAGE_MIN (74)
|
||||
#define ADDITIONAL_FONT_PAGE_MAX (76)
|
||||
|
||||
#define PAGE74_CHAR_MIN (0x00)
|
||||
#define PAGE74_CHAR_MAX (0x6D)
|
||||
#define PAGE74_SPARSE_CHAR_COUNT (40)
|
||||
|
||||
STATIC UINT8 mGlyphsPage74[PAGE74_SPARSE_CHAR_COUNT * ISO_CHAR_HEIGHT] = {
|
||||
/* 0x2500 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x2502 */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x250C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x2510 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x2514 */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x2518 */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x251C */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x2524 */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x252C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x2534 */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x253C */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x2550 */ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x2551 */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2552 */ 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x2553 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2554 */ 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x30, 0x30, 0x37, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2555 */ 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x2556 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2557 */ 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x06, 0x06, 0xF6, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2558 */ 0x18, 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x2559 */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x255A */ 0x36, 0x36, 0x36, 0x36, 0x37, 0x37, 0x30, 0x30, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x255B */ 0x18, 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x255C */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x255D */ 0x36, 0x36, 0x36, 0x36, 0xF6, 0xF6, 0x06, 0x06, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x255E */ 0x18, 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x255F */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2560 */ 0x36, 0x36, 0x36, 0x36, 0x37, 0x37, 0x30, 0x30, 0x37, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2561 */ 0x18, 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x2562 */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2563 */ 0x36, 0x36, 0x36, 0x36, 0xF6, 0xF6, 0x06, 0x06, 0xF6, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2564 */ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x2565 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2566 */ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xF7, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x2567 */ 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x2568 */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x2569 */ 0x36, 0x36, 0x36, 0x36, 0xF7, 0xF7, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x256A */ 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* 0x256B */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* 0x256C */ 0x36, 0x36, 0x36, 0x36, 0xF7, 0xF7, 0x00, 0x00, 0xF7, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
|
||||
};
|
||||
|
||||
STATIC UINT8 mOffsetsPage74[PAGE74_CHAR_MAX - PAGE74_CHAR_MIN] = {
|
||||
1, /* 0x2500 */
|
||||
0,
|
||||
2, /* 0x2502 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
3, /* 0x250C */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
4, /* 0x2510 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
5, /* 0x2514 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
6, /* 0x2518 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
7, /* 0x251C */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
8, /* 0x2524 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
9, /* 0x252C */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
10, /* 0x2534 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
11, /* 0x253C */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
12, /* 0x2550 */
|
||||
13, /* 0x2551 */
|
||||
14, /* 0x2552 */
|
||||
15, /* 0x2553 */
|
||||
16, /* 0x2554 */
|
||||
17, /* 0x2555 */
|
||||
18, /* 0x2556 */
|
||||
19, /* 0x2557 */
|
||||
20, /* 0x2558 */
|
||||
21, /* 0x2559 */
|
||||
22, /* 0x255A */
|
||||
23, /* 0x255B */
|
||||
24, /* 0x255C */
|
||||
25, /* 0x255D */
|
||||
26, /* 0x255E */
|
||||
27, /* 0x255F */
|
||||
28, /* 0x2560 */
|
||||
29, /* 0x2561 */
|
||||
30, /* 0x2562 */
|
||||
31, /* 0x2563 */
|
||||
32, /* 0x2564 */
|
||||
33, /* 0x2565 */
|
||||
34, /* 0x2566 */
|
||||
35, /* 0x2567 */
|
||||
36, /* 0x2568 */
|
||||
37, /* 0x2569 */
|
||||
38, /* 0x256A */
|
||||
39, /* 0x256B */
|
||||
40 /* 0x256C */
|
||||
};
|
||||
|
||||
#define PAGE75_CHAR_MIN (0x00)
|
||||
#define PAGE75_CHAR_MAX (0xE7)
|
||||
#define PAGE75_SPARSE_CHAR_COUNT (24)
|
||||
|
||||
STATIC UINT8 mGlyphsPage75[PAGE75_SPARSE_CHAR_COUNT * ISO_CHAR_HEIGHT] = {
|
||||
/* 0x2580 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x2581 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
/* 0x2584 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
/* 0x2588 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
/* 0x258C */ 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
|
||||
/* 0x2590 */ 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
||||
/* 0x2591 */ 0x22, 0x22, 0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22, 0x88, 0x88,
|
||||
/* 0x2592 */ 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA,
|
||||
/* 0x2593 */ 0xDB, 0xDB, 0x77, 0x77, 0xDB, 0xDB, 0xEE, 0xEE, 0xDB, 0xDB, 0x77, 0x77, 0xDB, 0xDB, 0xEE, 0xEE,
|
||||
/* 0x25A0 */ 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x25A1 */ 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7C, 0x6C, 0x6C, 0x6C, 0x6C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x25AA */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x25AB */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7C, 0x6C, 0x6C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x25AC */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00,
|
||||
/* 0x25B2 */ 0x00, 0x00, 0x18, 0x18, 0x3C, 0x3C, 0x7E, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x25BA */ 0x80, 0x80, 0xE0, 0xE0, 0xF8, 0xF8, 0xFE, 0xFE, 0xF8, 0xF8, 0xE0, 0xE0, 0x80, 0x80, 0x00, 0x00,
|
||||
/* 0x25BC */ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x7E, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0x25C4 */ 0x02, 0x02, 0x0E, 0x0E, 0x3E, 0x3E, 0xFE, 0xFE, 0x3E, 0x3E, 0x0E, 0x0E, 0x02, 0x02, 0x00, 0x00,
|
||||
/* 0x25CA */ 0x10, 0x10, 0x38, 0x38, 0x6C, 0x6C, 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00,
|
||||
/* 0x25CB */ 0x00, 0x00, 0x3C, 0x3C, 0x66, 0x66, 0x42, 0x42, 0x42, 0x42, 0x66, 0x66, 0x3C, 0x3C, 0x00, 0x00,
|
||||
/* 0x25CF */ 0x00, 0x00, 0x3C, 0x3C, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x3C, 0x3C, 0x00, 0x00,
|
||||
/* 0x25D8 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xE7, 0xC3, 0xC3, 0xC3, 0xC3, 0xE7, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
/* 0x25D9 */ 0xFF, 0xFF, 0xC3, 0xC3, 0x99, 0x99, 0xBD, 0xBD, 0xBD, 0xBD, 0x99, 0x99, 0xC3, 0xC3, 0xFF, 0xFF,
|
||||
/* 0x25E6 */ 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x6C, 0x6C, 0x6C, 0x6C, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
STATIC UINT8 mOffsetsPage75[PAGE75_CHAR_MAX - PAGE75_CHAR_MIN] = {
|
||||
1, /* 0x2580 */
|
||||
2, /* 0x2581 */
|
||||
0,
|
||||
0,
|
||||
3, /* 0x2584 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
4, /* 0x2588 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
5, /* 0x258C */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
6, /* 0x2590 */
|
||||
7, /* 0x2591 */
|
||||
8, /* 0x2592 */
|
||||
9, /* 0x2593 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
10, /* 0x25A0 */
|
||||
11, /* 0x25A1 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
12, /* 0x25AA */
|
||||
13, /* 0x25AB */
|
||||
14, /* 0x25AC */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
15, /* 0x25B2 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
16, /* 0x25BA */
|
||||
0,
|
||||
17, /* 0x25BC */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
18, /* 0x25C4 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
19, /* 0x25CA */
|
||||
20, /* 0x25CB */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
21, /* 0x25CF */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
22, /* 0x25D8 */
|
||||
23, /* 0x25D9 */
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
24 /* 0x25E6 */
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
UINT8 *Glyphs;
|
||||
UINT8 *Offsets;
|
||||
UINT8 Min;
|
||||
UINT8 Max;
|
||||
BOOLEAN LeftToRight;
|
||||
} UNICODE_PAGE;
|
||||
|
||||
//
|
||||
// Specify { NULL, NULL, 0, 0, FALSE } for any non-populated page in range.
|
||||
//
|
||||
STATIC UNICODE_PAGE mUnicodePages[ADDITIONAL_FONT_PAGE_MAX - ADDITIONAL_FONT_PAGE_MIN] = {
|
||||
{ mGlyphsPage74, mOffsetsPage74, PAGE74_CHAR_MIN, PAGE74_CHAR_MAX, TRUE },
|
||||
{ mGlyphsPage75, mOffsetsPage75, PAGE75_CHAR_MIN, PAGE75_CHAR_MAX, TRUE }
|
||||
};
|
||||
|
||||
STATIC UINT32 mGraphicsEfiColors[16] = {
|
||||
0x00000000, // BLACK
|
||||
0x00000098, // LIGHTBLUE
|
||||
@ -201,47 +631,120 @@ RenderChar (
|
||||
IN UINTN PosY
|
||||
)
|
||||
{
|
||||
UINT32 *DstBuffer;
|
||||
UINT8 *SrcBuffer;
|
||||
UINT32 Line;
|
||||
UINT32 Index;
|
||||
UINT32 Index2;
|
||||
UINT8 Mask;
|
||||
UINT32 *DstBuffer;
|
||||
UINT8 *SrcBuffer;
|
||||
UINT32 Line;
|
||||
UINT32 Index;
|
||||
UINT32 Index2;
|
||||
UINT8 Mask;
|
||||
UINTN PageNumber;
|
||||
UINT8 PageChar;
|
||||
UINT8 PageCharMin;
|
||||
UNICODE_PAGE *Page;
|
||||
UINTN FontHead;
|
||||
UINTN FontTail;
|
||||
UINT8 *CharData;
|
||||
UINT8 GlyphIndex;
|
||||
BOOLEAN LeftToRight;
|
||||
|
||||
DstBuffer = &mCharacterBuffer[0].Raw;
|
||||
|
||||
if (((Char >= 0) && (Char < ISO_CHAR_MIN)) || (Char == ' ') || (Char == CHAR_TAB) || (Char == 0x7F)) {
|
||||
//
|
||||
// Page 0 and 1 data are optimised to only include non-blank chars, but all other chars in original font
|
||||
// are blank and should be rendered as such. Page 0 and 1 also save space by not holding font data for
|
||||
// top or bottom lines which are blank in every char in that page, in the original font.
|
||||
//
|
||||
if ( ((Char >= 0) && (Char < PAGE0_CHAR_MIN))
|
||||
|| (Char == ' ')
|
||||
|| (Char == CHAR_TAB)
|
||||
|| ((Char >= PAGE0_CHAR_MAX) && (Char < (PAGE1_CHAR_MIN + 0x80)))
|
||||
|| ((Char >= (PAGE1_CHAR_MAX + 0x80)) && (Char < 0x100))
|
||||
)
|
||||
{
|
||||
SetMem32 (DstBuffer, TGT_CHAR_AREA * sizeof (DstBuffer[0]), mBackgroundColor.Raw);
|
||||
} else {
|
||||
if ((Char < 0) || (Char > ISO_CHAR_MAX)) {
|
||||
Char = L'_';
|
||||
PageNumber = (Char >> 7) & 0x1FF;
|
||||
PageChar = Char & 0x7F;
|
||||
if (PageNumber == 0) {
|
||||
LeftToRight = FALSE;
|
||||
FontHead = PAGE0_FONT_HEAD;
|
||||
FontTail = PAGE0_FONT_TAIL;
|
||||
PageCharMin = PAGE0_CHAR_MIN;
|
||||
CharData = mIsoFontDataPage0;
|
||||
} else if (PageNumber == 1) {
|
||||
LeftToRight = FALSE;
|
||||
FontHead = PAGE1_FONT_HEAD;
|
||||
FontTail = PAGE1_FONT_TAIL;
|
||||
PageCharMin = PAGE1_CHAR_MIN;
|
||||
CharData = mIsoFontDataPage1;
|
||||
} else {
|
||||
GlyphIndex = 0;
|
||||
|
||||
if ((PageNumber >= ADDITIONAL_FONT_PAGE_MIN) && (PageNumber < ADDITIONAL_FONT_PAGE_MAX)) {
|
||||
Page = &mUnicodePages[PageNumber - ADDITIONAL_FONT_PAGE_MIN];
|
||||
if ((PageChar >= Page->Min) && (PageChar < Page->Max)) {
|
||||
ASSERT (Page->Glyphs != NULL);
|
||||
ASSERT (Page->Offsets != NULL);
|
||||
GlyphIndex = Page->Offsets[PageChar - Page->Min];
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Render all unknown chars as standard font underscore.
|
||||
//
|
||||
if (GlyphIndex == 0) {
|
||||
LeftToRight = FALSE;
|
||||
FontHead = PAGE0_FONT_HEAD;
|
||||
FontTail = PAGE0_FONT_TAIL;
|
||||
PageCharMin = PAGE0_CHAR_MIN;
|
||||
PageChar = L'_' & 0x7F;
|
||||
CharData = mIsoFontDataPage0;
|
||||
} else {
|
||||
LeftToRight = Page->LeftToRight;
|
||||
FontHead = 0;
|
||||
FontTail = 0;
|
||||
PageCharMin = 0;
|
||||
PageChar = 0;
|
||||
CharData = &Page->Glyphs[ISO_CHAR_HEIGHT * (GlyphIndex - 1)];
|
||||
}
|
||||
}
|
||||
|
||||
SrcBuffer = mIsoFontData + ((Char - ISO_CHAR_MIN) * (ISO_CHAR_HEIGHT - 2));
|
||||
SrcBuffer = CharData + ((PageChar - PageCharMin) * (ISO_CHAR_HEIGHT - FontHead - FontTail));
|
||||
|
||||
SetMem32 (DstBuffer, TGT_CHAR_WIDTH * mFontScale * sizeof (DstBuffer[0]), mBackgroundColor.Raw);
|
||||
DstBuffer += TGT_CHAR_WIDTH * mFontScale;
|
||||
for (Line = 0; Line < FontHead; ++Line) {
|
||||
SetMem32 (DstBuffer, TGT_CHAR_WIDTH * mFontScale * sizeof (DstBuffer[0]), mBackgroundColor.Raw); ///< Apply scale twice, for width and height.
|
||||
DstBuffer += TGT_CHAR_WIDTH * mFontScale;
|
||||
}
|
||||
|
||||
for (Line = 0; Line < ISO_CHAR_HEIGHT - 2; ++Line) {
|
||||
for ( ; Line < ISO_CHAR_HEIGHT - FontTail; ++Line) {
|
||||
//
|
||||
// Iterate, while the single bit drops to the right.
|
||||
// Iterate, while the single bit scans font.
|
||||
//
|
||||
for (Index = 0; Index < mFontScale; ++Index) {
|
||||
Mask = 1;
|
||||
Mask = LeftToRight ? 0x80 : 1;
|
||||
do {
|
||||
for (Index2 = 0; Index2 < mFontScale; ++Index2) {
|
||||
*DstBuffer = (*SrcBuffer & Mask) ? mForegroundColor.Raw : mBackgroundColor.Raw;
|
||||
++DstBuffer;
|
||||
}
|
||||
|
||||
Mask <<= 1U;
|
||||
if (LeftToRight) {
|
||||
Mask >>= 1U;
|
||||
} else {
|
||||
Mask <<= 1U;
|
||||
}
|
||||
} while (Mask != 0);
|
||||
}
|
||||
|
||||
++SrcBuffer;
|
||||
}
|
||||
|
||||
SetMem32 (DstBuffer, TGT_CHAR_WIDTH * mFontScale * sizeof (DstBuffer[0]), mBackgroundColor.Raw);
|
||||
for ( ; Line < ISO_CHAR_HEIGHT; ++Line) {
|
||||
SetMem32 (DstBuffer, TGT_CHAR_WIDTH * mFontScale * sizeof (DstBuffer[0]), mBackgroundColor.Raw);
|
||||
DstBuffer += TGT_CHAR_WIDTH * mFontScale;
|
||||
}
|
||||
|
||||
ASSERT (DstBuffer - &mCharacterBuffer[0].Raw == (INTN)TGT_CHAR_AREA);
|
||||
}
|
||||
|
||||
mGraphicsOutput->Blt (
|
||||
|
||||
@ -201,6 +201,7 @@
|
||||
OpenCorePkg/Application/ChipTune/ChipTune.inf
|
||||
OpenCorePkg/Application/CleanNvram/CleanNvram.inf
|
||||
OpenCorePkg/Application/CsrUtil/CsrUtil.inf
|
||||
OpenCorePkg/Application/FontTester/FontTester.inf
|
||||
OpenCorePkg/Application/GopPerf/GopPerf.inf
|
||||
OpenCorePkg/Application/GopStop/GopStop.inf
|
||||
OpenCorePkg/Application/KeyTester/KeyTester.inf
|
||||
|
||||
@ -161,6 +161,7 @@ package() {
|
||||
"ChipTune.efi"
|
||||
"CleanNvram.efi"
|
||||
"CsrUtil.efi"
|
||||
"FontTester.efi"
|
||||
"GopStop.efi"
|
||||
"KeyTester.efi"
|
||||
"ListPartitions.efi"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user