如果我们通过汇编语言调用INT 10h并设置其参数,然后将这段代码编译成二进制并写入软盘的引导扇区,就可以在裸机(或没有OS的虚拟机)屏幕上输出一个字符串。
...
; INT 10h
; When AH = 13h
; ES:BP = Offset of string
; CX = length of string
; AL = Write mode
; BH = Page Number, BL = Color
; DL = Column
mov ax, BootMessage
mov bp, ax
mov cx, 12
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
jmp $ ; while (true)
BootMessage: db "Hello World!"
...
我想知道 BIOS 如何控制每个字符的字形?在某些计算机上,为什么屏幕上的“A”类似于 Sans-serif 字体中的“A”,而不是 Courier?但在其他计算机上,它可能是另一种字体。
BIOS 或者某个 ROM 中是否内置了一些 0-1 矩阵?例如下图中的 0-1 矩阵对应着字符 A。
答案1
在操作系统加载之前,BIOS 控制文本的写入方式。BIOS 本身具有将基本文本打印到屏幕上的指令。它需要此指令来绘制自己的 BIOS 屏幕。无论 BIOS 中硬编码了什么字体,稍后都会使用什么字体。
当您将此代码发送到 BIOS 时,它会将其转换为更改某些像素的颜色。虽然您可能认为它只打印前景色,但实际上它也会打印背景色。否则文本会重叠,造成混乱。
它确实遵循基于固定大小的每个字母的矩阵,并且可以在运行时更改字符 romset。
这就是在 C64 上制作基于文本模式的游戏的方式。程序员经常更改字体以便能够绘制漂亮的图形。有时,这就像将玩家精灵放在角色内部并移动它一样简单。