
Если мы вызовем 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" на экране похожа на "A" в шрифте Sans-serif, а не Courier? Но на других компьютерах это может быть другой шрифт.
Есть ли какие-то матрицы 0-1, встроенные в BIOS или определенное ПЗУ? Например, матрица 0-1 на рисунке ниже соответствует символу A.
решение1
Перед загрузкой ОС BIOS управляет тем, как пишется текст. У самого BIOS есть инструкции для печати базового текста на экране. Это необходимо для того, чтобы нарисовать собственный экран BIOS. Какой бы шрифт ни был жестко закодирован в BIOS, он будет использоваться позже.
Когда вы отправляете этот код в BIOS, он преобразует это в изменение цвета определенных пикселей. Хотя вы ожидаете, что он печатает только цвет переднего плана, на самом деле он печатает и цвет заднего плана. В противном случае текст будет накладываться друг на друга, создавая беспорядок.
Он действительно следует матрице для каждой буквы на основе фиксированного размера, и можно изменить набор символов во время выполнения.
Вот как текстовые игры создавались на C64. Программист часто менял шрифт, чтобы иметь возможность рисовать красивую графику. Иногда это было так же просто, как поместить спрайт игрока внутрь персонажа и перемещать его.