C コードでカーネルを作成し、カスタム .psf フォントを追加しました。残念ながら、プログラムはディレクトリ内のファイルを有効なものとして検出していないようです。実際にフォントをロードして結果を出力するコードは次のとおりです。
void (*KernelStart)(Framebuffer*) = ((__attribute__((sysv_abi)) void (*)(Framebuffer*) ) header.e_entry);
PSF1_FONT* newFont = LoadPSF1Font(NULL, L"zap-light16.psf", ImageHandle, SystemTable);
if (newFont == NULL){
Print(L"Font is not valid or is not found...\r\n");
}
else
{
Print(L"Font found. char size = %d\r\n", newFont->psf1_Header->charsize);
}
Framebuffer* newBuffer = InitializeGOP();
プログラムは同じ場所 (カーネル内の bin フォルダー) からファイルをロードするため、ディレクトリは正しいと思います。
「kernel.c」ファイルには、スタイルとカーソル位置を決定するコードがあります。
void putChar(Framebuffer* framebuffer, PSF1_FONT* psf1_font, unsigned int colour, char chr, unsigned int xOff, unsigned int yOff)
{
unsigned int* pixPtr = (unsigned int*)framebuffer->BaseAddress;
char* fontPtr = psf1_font->glyphBuffer + (chr * psf1_font->psf1_Header->charsize);
for(unsigned long y = yOff; y < yOff + 16; y++){
for (unsigned long x= xOff; x < xOff + 8; x++)
if((*fontPtr & (0b10000000 >> (x - xOff))) > 0){
*(unsigned int*)(pixPtr + x + (y * framebuffer->PixelsPerScanLine)) = colour;
}
}
fontPtr++;
}
Point CursorPosition;
void Print(Framebuffer* framebuffer, PSF1_FONT* psf1_font, unsigned int colour, char* str)
{
char* chr = str;
while(*chr != 0){
putChar(framebuffer, psf1_font, colour, *chr, CursorPosition.X, CursorPosition.Y);
CursorPosition.X+=8;
if(CursorPosition.X + 8 > framebuffer->Width)
{
CursorPosition.X = 0;
CursorPosition.Y += 16;
}
chr++;
}
}
void _start(Framebuffer* framebuffer, PSF1_FONT* psf1_font){
CursorPosition.X = 50;
CursorPosition.Y = 120;
for (int t = 0; t < 50; t+=1){
Print(framebuffer, psf1_font, 0xffffffff, "Hello Kernel :)");
}
return;
}
コンパイラもエラーを返しません。私が受け取る唯一のフィードバックは、フォントが正しいかどうかを判断する自分のプログラムからのものです。