นี่คือตัวแก้ไขข้ามแพลตฟอร์มและห้องสมุดสำหรับแบบอักษร VGA ROM นี่มีรหัสสำหรับการเรนเดอร์ข้อความโดยใช้แบบอักษรที่โหลด ซอร์สโค้ดเขียนใน QB64-PE และทำงานโดยไม่ต้องใช้ไลบรารีบุคคลที่สามใด ๆ




git submodule update --init --recursive to Initialize, Fetch และ Checkout Git SubmodulesF5 เพื่อรวบรวมและเรียกใช้ ' For rendering
FUNCTION PSF1_LoadFontFromMemory% % (buffer AS STRING , psf AS PSF1Type)
FUNCTION PSF1_LoadFontFromFile% % (fileName AS STRING , psf AS PSF1Type)
SUB PSF1_SetCurrentFont (psf AS PSF1Type)
FUNCTION PSF1_GetFontWidth ~%%
FUNCTION PSF1_GetFontHeight ~%%
FUNCTION PSF1_GetDrawStringWidth& (text AS STRING )
SUB PSF1_DrawCharacter (cp AS _UNSIGNED _BYTE, x AS LONG , y AS LONG )
SUB PSF1_DrawString (text AS STRING , x AS LONG , y AS LONG )
' Used by the editor
SUB PSF1_SetFontHeight (h AS _UNSIGNED _BYTE)
FUNCTION PSF1_GetFont$
FUNCTION PSF1_SetFont% % (buffer AS STRING )
FUNCTION PSF1_GetGlyphBitmap$ (cp AS _UNSIGNED _BYTE)
SUB PSF1_SetGlyphBitmap (cp AS _UNSIGNED _BYTE, bmp AS STRING )
FUNCTION PSF1_GetGlyphPixel% % (cp AS _UNSIGNED _BYTE, x AS LONG , y AS LONG )
SUB PSF1_SetGlyphPixel (cp AS _UNSIGNED _BYTE, x AS LONG , y AS LONG , b AS _BYTE)
SUB PSF1_SetGlyphDefaultBitmap (cp AS _UNSIGNED _BYTE)
FUNCTION PSF1_SaveFont% % (fileName AS STRING ) ฉันจะทำอย่างไรกับสิ่งนี้?
fonts ฉันไม่ทราบถึงความสำคัญของสิ่งเหล่านี้และขอแนะนำให้คุณสร้างแบบอักษรของคุณเองโดยใช้เครื่องมือนี้สำหรับโครงการของคุณฟอนต์ VGA ROM คืออะไร?
ตัวละครถูกเก็บไว้ในหน่วยความจำอย่างไร?
มันค่อนข้างง่าย 0 เข้ารหัสพื้นหลัง 1 เข้ารหัสสีเบื้องหน้า แบบอักษร VGA นั้นกว้าง 8 บิตเสมอเพื่อให้แต่ละไบต์มีแถวเดียว สำหรับตัวอักษร 'A' ในแบบอักษร 8x16 ทั่วไปมันจะเป็น (ในไบนารี):
00000000b byte 0
00000000b byte 1
00000000b byte 2
00010000b byte 3
00111000b byte 4
01101100b byte 5
11000110b byte 6
11000110b byte 7
11111110b byte 8
11000110b byte 9
11000110b byte 10
11000110b byte 11
11000110b byte 12
00000000b byte 13
00000000b byte 14
00000000b byte 15
บิตแมปเต็มมีบิตแมปสำหรับตัวละครทุกตัวดังนั้นจึงเป็น 256*16 ไบต์ยาว 4096 ไบต์ (สำหรับแบบอักษร 8x16) หากคุณต้องการรับบิตแมปสำหรับอักขระเฉพาะคุณต้องคูณรหัส ASCII ด้วย 16 (จำนวนแถวในอักขระสำหรับแบบอักษร 8x16)
ไฟล์ PSF เหล่านี้คืออะไร?
PSFs เหล่านี้ (ตัวอักษรหน้าจอ PC) ถูกสร้างขึ้นโดยใช้เครื่องมือการแปลง BIN2PSF จากแบบอักษร VGA ROM ดิบจากแหล่งต่าง ๆ ไฟล์เหล่านี้มีขนาดเล็กมากและเหมาะสำหรับโครงการที่ฝังตัวหน่วยความจำ จำกัด หรือโครงการย้อนยุค ไฟล์เกือบจะเป็นการถ่ายโอนข้อมูลดิบของแบบอักษร VGA ROM ที่มีเพียงไม่กี่ไบต์สำหรับส่วนหัว
+--------------------------------------------+
| PSF1_MAGIC0 0x36 (1 byte) |
+--------------------------------------------+
| PSF1_MAGIC1 0x04 (1 byte) |
+--------------------------------------------+
| MODE (1 byte; set to 0) |
+--------------------------------------------+
| FONT HEIGHT (1 byte) |
+--------------------------------------------+
| CHAR 1 SCAN LINE 1 (1 byte) |
| CHAR 1 SCAN LINE 2 (1 byte) |
| CHAR 1 SCAN LINE 3 (1 byte) |
| CHAR 1 SCAN LINE 4 (1 byte) |
| CHAR 1 SCAN LINE 5 (1 byte) |
| .. |
| .. |
| .. |
| CHAR 1 SCAN LINE <FONT HEIGHT> (1 byte) |
+--------------------------------------------+
| CHAR 2 SCAN LINE 1 (1 byte) |
| CHAR 2 SCAN LINE 2 (1 byte) |
| CHAR 2 SCAN LINE 3 (1 byte) |
| CHAR 2 SCAN LINE 4 (1 byte) |
| CHAR 2 SCAN LINE 5 (1 byte) |
| .. |
| .. |
| .. |
| CHAR 2 SCAN LINE <FONT HEIGHT> (1 byte) |
+--------------------------------------------+
| .. |
| .. |
| .. |
+--------------------------------------------+
| .. |
| .. |
| .. |
+--------------------------------------------+
| .. |
| .. |
| .. |
+--------------------------------------------+
| CHAR 256 SCAN LINE 1 (1 byte) |
| CHAR 256 SCAN LINE 2 (1 byte) |
| CHAR 256 SCAN LINE 3 (1 byte) |
| CHAR 256 SCAN LINE 4 (1 byte) |
| CHAR 256 SCAN LINE 5 (1 byte) |
| .. |
| .. |
| .. |
| CHAR 256 SCAN LINE <FONT HEIGHT> (1 byte) |
+--------------------------------------------+
git submodule update --init --recursive