Таблицы графических символов для bios

Тема в разделе "WASM.OS.DEVEL", создана пользователем Zhelezka, 2 фев 2009.

  1. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    По стандарту у меня в биос стоит не русский язык.
    Как мне известно можно поменять графические символы
    с помощью прерывания 0x1F,
    который обычно указывает на F000:0000.
    Там содержится таблица символов 128-255.
    Каждая буква 8x8 бит или 8 байт.

    Единственный вопрос, где найти эти
    таблицы графических символов
    для разных языков?
    Так-же хотелось-бы найти
    стандартную таблицу символов 0-127?
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    В инете можно найти по KW "консольные шрифты". Можешь даже у виндов позаимствовать bootfont.bin. Вообще знакогенератор перезагружается с помощью функции BIOS int 10h/11h. Вектор 1Fh указывает на теневую память, поэтому просто так перезагрузить шрифт BIOS не получится, да и эффекта от этого не будет, если перезагружать шрифт после инициализации видеоподсистемы BIOS, потому что реально используемый знакогенератором шрифт хранится в видеопамяти. Также вполне достойной альтернативой функции BIOS int 10h/11h является непосредственная загрузка шрифта в память знакогенератора.
     
  4. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Вообще, как оказалось, в bootfont.bin хранится дополнительная информация по каждому символу, а именно юникод и порядковый номер символа (всего 19 байт на символ), плюс заголовок файла. Зная это, можно легко выделить из файла нужные последовательности байт.

    Шрифты с матрицей 8x8 сейчас используются редко (качество представления символов низкое). Обычно матрица имеет размер 8x16 - 4096 байт на шрифт без сжатия. Есть еще EGA-матрица 8x14, но она сейчас практически не используется.
     
  5. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    1:Как сказать компьютеру, что теперь надо загрузить матрицу 8x8 или 8x16?
    2:В Bootfont.bin я явно увидел символы
    0x01 по адресу 0x4B и 0x02 по адресу 0x5E,
    но ох размер 8x9?
    (возможно 8x10 с учётом пустой строки)
     
  6. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    Код (Text):
    1.                 mov     ax,cs
    2.                 mov     es,ax
    3.                 mov     bp,fnt8x16.value              
    4.                 mov     bx,1000h   ; bh=16 (высота)            
    5.                 mov     cx,256                
    6.                 xor     dx,dx                  
    7.                 mov     ax,1110h
    8.                 int     10h
    что-то в этом роде
     
  7. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Формат матрицы в видеопамяти один и тот же. Просто образ символа должен умещаться в матрицу знакоместа на экране (а она может быть разной). При использовании функции BIOS там вроде бы должны использоваться разные подфункции, ну или разные параметры одной функции - никогда не использовал этот способ - если нужно, посмотри в каком-нибудь справочнике по функциям BIOS.

    bootfont.bin я вроде бы вскрыл. Несмотря на то что там на символ приходится 19 байт, по сути используется матрица 8x12 - по символам псевдографики это хорошо видно. Брал файл от WinXPProSP2. В других версиях может дела обстоят иначе. Вот fasm-скрипт для преобразования bootcode.bin в asm-текст - можешь сам попробовать.
    Код (Text):
    1. repeat 256
    2.  
    3. i=%-1
    4.  
    5. db 13,10
    6.  
    7. repeat 16
    8.  
    9. virtual at 0
    10. file "c:\bootfont.bin":52+19*i+%,1
    11. load var from 0
    12. end virtual
    13.  
    14. db "db",32
    15.  
    16. repeat 8
    17. db (var shr (8-%)) and 1 + "0"
    18. end repeat
    19.  
    20. db "b",13,10
    21.  
    22. end repeat
    23.  
    24. end repeat