· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› знакогенератор и int 10h

Посл.отвђт Сообщенiе


Дата: Апр 19, 2004 23:11:45 · Поправил: snatch

Привет.
Вообщем надо сделать так, чтобы
в Дос-навигаторе, например, запустить прогу,
а она - раз - и зеркально отобразила изображение.
Т.е. надо получить указатель на текущую таблицу отображения символов, реверснуть каждый байт: перевернуть биты, ну и далее установить её да затем попереворачивать
в видеопамяти само изображение.
но возникла куча проблем, вопросов и всё такое... :(
Как получить указатель на таблицу отображения символов
для текущего видеорежима: 8х8 или 8х16? Что-то глючит...
Вроде начитался теххелпа, но мало...
Затем обработанную устанавливаем её... А на экране
бред вылазет... Был 8х16, а стал 8х8 и хренотень получается чего-то...
Эх... выручайте пожалуйста... :)

Исходники или код конечно не помешают... :)


Дата: Апр 20, 2004 06:25:46

snatch
Как получить указатель на таблицу отображения символов
для текущего видеорежима

Указатель не зависит от размера матрицы - A000:0000h.


_1741308290__font.rar


Дата: Апр 27, 2004 19:24:06

А можно ссылочки на описания, что из себя представляет таблица (формат описания символов, как производится замена и т.д.) пример посмотрел, но хотелось бы осмыслить. По возможности на русском. Искал в Гугле и Рамблере попадается только какаято мелочь.


Дата: Апр 28, 2004 06:40:04 · Поправил: q_q

pas
А можно ссылочки на описания
Я читал Richard Wilton (Ричард Уилтон) "Programming Guide to PC & PS/2 video systems". И смотрел исходные тексты NLIB200.RTL из пакета Norton Utilites v8

что из себя представляет ... формат описания символов
Нет ничего сложного.
Знакоместо обычно бывает 8х16, 8х14 и 8х8 (реально 9-ть столбцов, назначение 9-ого объясню ниже), т.е. один символ описывается 16-тью, 14-тью или 8-мью байтами. Первый байт - верхние 8-мь точек, второй - вторая строка из 8-ми точек и т.д. Старший бит отвечает за левый пиксель, младший за правый. 1 - пиксель горит, 0 - не горит. Простой пример
   76543210
 0 ........ 000h
 1 ........ 000h 
 2 ...X.... 010h
 3 ..XXX... 038h 
 4 .XX.XX.. 06Ch
 5 XX...XX. 0C6h
 6 XX...XX. 0C6h
 7 XXXXXXX. 0FEh
 8 XX...XX. 0C6h
 9 XX...XX. 0C6h
10 XX...XX. 0C6h
11 XX...XX. 0C6h
12 ........ 000h
13 ........ 000h
14 ........ 000h
15 ........ 000h
Про 9-ый столбец. У символов в диапазоне 0С0h до 0DFh (со второй границей могу ошибиться) в 9-ом столбце, при выводе на экран, повторяются пиксели правого столбца, это позволяет в создавать непрерывные рамки. Пример с использованием 9-того столбца
   76543210!76543210
 0 .....XXXXXX...... 007h  0C0h
 1 ...XXXXXXXXXX.... 01Fh  0F0h
 2 ..XXXXXXXXXXXX... 03Fh  0F8h
 3 .XXX.XXXXXX.XXX.. 077h  0DCh
 4 .XX...XXXX...XX.. 036h  08Ch
 5 XXXX...XX...XXXX. 0F1h  01Eh
 6 XXXXX......XXXXX. 0F8h  03Eh
 7 XXXXXX....XXXXXX. 0FCh  07Eh
 8 XXXXXX....XXXXXX. 0FCh  07Eh
 9 XXXXX......XXXXX. 0F8h  03Eh
10 XXXX...XX...XXXX. 0F1h  01Eh
11 .XX...XXXX...XX.. 063h  08Ch
12 .XXX.XXXXXX.XXX.. 077h  0DCh
13 ..XXXXXXXXXXXX... 03Fh  0F8h
14 ...XXXXXXXXXX.... 01Fh  0F0h
15 .....XXXXXX...... 007h  0C0h
И последнее замечание. Под описание матрицы одного символа зарезервировано 32 байта. Т.е. матрица символа с кодом ноль начинается с адреса 0A000:0000, с кодом 1 - 0А000:0020 и т.д.

как производится замена
Открыть доступ к знакогенератору, исходя из кода символа определить адрес его матрицы, переписать (или прочитать) ее, закрыть доступ к знакогенератору.

PS imho программирование знакогенератора сейчас не актуально, все равно в оконном режиме win'да его игнорирует.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.064