|
|
| Посл.отвђт | Сообщен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 |