Что такое адрес памяти таблицы символов в DOS?

Каков адрес таблицы символов в DOS, где мы можем создавать новые шрифты и символы, манипулируя пикселями каждого символа?

Я знаю, чтобы изменить его с прерываниями BIOS, но мне нужен только адрес памяти таблицы символов в dos для прямого доступа.

Ответ 1

Я не помню, как это было сделано (я делал это два десятилетия назад), но вы можете посмотреть проект 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

Ответ 2

Если я правильно помню и графические карты не слишком сильно менялись (я играл с этим в последний раз более 15 лет назад), информация о шрифте не указана в заданном адресе памяти, она загружается на графику памяти.