Каков адрес таблицы символов в DOS, где мы можем создавать новые шрифты и символы, манипулируя пикселями каждого символа?
Я знаю, чтобы изменить его с прерываниями BIOS, но мне нужен только адрес памяти таблицы символов в dos для прямого доступа.
Каков адрес таблицы символов в DOS, где мы можем создавать новые шрифты и символы, манипулируя пикселями каждого символа?
Я знаю, чтобы изменить его с прерываниями BIOS, но мне нужен только адрес памяти таблицы символов в dos для прямого доступа.
Я не помню, как это было сделано (я делал это два десятилетия назад), но вы можете посмотреть проект FreeVGA. Согласно текстовой документации, выберите адрес самостоятельно (вид, см. регистр выбора карты символов). Доступ к этому регистру объясняется здесь.
Вы также можете посмотреть эту презентацию, которая также посвящена этой теме (и, вероятно, ее легче понять).
Изменить: Вот сообщение, в котором объясняется, как заменить один символ. Он использует int 10h, ax = 1100h (альтернативная документация) для обмена символом, но в регистре CX вы можете фактически сказать, сколько символов нужно обменивать. Здесь представлен очень подробный список функций int 10h
.
Изменить 2: Найдено еще одна хорошая документация.
Изменить 3: В последней связанной документации есть следующее:
Программирование для прямого доступа к ОЗУ генератора символов
Следующая последовательность устанавливает EGA и VGA для доступа к символьно- память генератора. См. Порты ввода/вывода EGA для соответствующей информации.
out 3c4H, 0402H Mask reg; enable write to map 2
out 3c4H, 0704H Memory Mode reg ; alpha, ext mem, non-interleaved
out 3ceH, 0005H Graphics Mode reg; non-interleaved access
out 3ceH, 0406H Graphics Misc reg; map char gen RAM to a000:0
out 3ceH, 0204H Graphics ReadMapSelect reg; enable read chargen RAM
После этих выходных данных данные шрифта начинаются с 000: 0 и первого байта данные шрифта для символа начинаются с символьного значения ASCII * 32. После чтения или записи данных шрифта следующая последовательность восстанавливает EGA/VGA для обычных операций:
out 3c4H, 0302H Mask reg; disable write to map 2
out 3c4H, 0304H Memory Mode reg; alpha, ext mem, interleaved
out 3ceH, 1005H Graphics Mode reg; interleaved access
out 3ceH, 0e06H Graphics Misc reg; regen buffer to b800:0
out 3ceH, 0004H Graphics ReadMapSelect reg; disable read chargen RAM
Если я правильно помню и графические карты не слишком сильно менялись (я играл с этим в последний раз более 15 лет назад), информация о шрифте не указана в заданном адресе памяти, она загружается на графику памяти.