ベアメタル上で INT 10h を実行すると、各文字は 0-1 マトリックスに対応しますか?

ベアメタル上で INT 10h を実行すると、各文字は 0-1 マトリックスに対応しますか?

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」が Courier ではなく Sans-serif フォントの「A」に似ているのはなぜでしょうか。しかし、他のコンピューターでは別のフォントである可能性があります。

BIOS または特定の ROM に 0-1 マトリックスが組み込まれていますか? たとえば、下の図の 0-1 マトリックスは文字 A に対応します。

文字 A の 0-1 行列

答え1

OS がロードされる前に、BIOS はテキストの書き込み方法を制御します。BIOS 自体には、画面に基本的なテキストを印刷するための命令があります。これは、独自の BIOS 画面を描画するために必要です。BIOS でハードコードされたフォントは、後で使用されるものです。

このコードを BIOS に送信すると、特定のピクセルの色が変更されます。前景色のみが印刷されると予想されますが、実際には背景色も印刷されます。そうしないと、テキストが重なり合って乱雑になります。

実際、各文字は固定サイズに基づいてマトリックスに従っており、実行時に文字の ROM セットを変更することも可能です。

C64 では、テキストモード ベースのゲームはこのようにして作成されました。プログラマーは、美しいグラフィックを描画できるようにフォントを変更することがよくありました。プレイヤーのスプライトをキャラクター内に配置し、それを移動させるだけの簡単な作業もありました。

関連情報