如果我们通过汇编语言调用INT 10h并设置其参数,然后将这段代码编译成二进制并写入到软盘的引导扇区中,我们就可以在裸机(或没有操作系统的虚拟机)上输出一个字符串屏幕。
...
; 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。
在操作系统加载之前,BIOS 控制文本的写入方式。BIOS 本身具有将基本文本打印到屏幕上的指令。它需要它来绘制自己的 BIOS 屏幕。无论 BIOS 中硬编码什么字体,稍后都会使用该字体。
当您将此代码发送到 BIOS 时,它会将其转换为更改某些像素的颜色。虽然您希望它只打印前色,但实际上它也会打印背景色。否则文本会重叠,造成混乱。
它确实遵循基于固定大小的每个字母的矩阵,并且可以在运行时更改字符集。
这就是在 C64 上制作基于文本模式的游戏的方式。程序员经常更改字体以便能够绘制漂亮的图形。有时,就像将玩家精灵放置在角色内并移动它一样简单。