как загрузить "русский" знакогенератор для работы через int 10h

Тема в разделе "WASM.BEGINNERS", создана пользователем dekloper, 30 июн 2008.

  1. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    Други, всем доброго времени...
    Помогите с детской задачкой... сто лет уже не кодил, все спецификации нафик позабывал :dntknw:

    Как использовать русские символы в текстовом режиме через int 10h (функции 0eh,13h)?
    допустим, после загрузки int 21h определить местоположение в памяти (cp866, koi), скопировать, а потом подгружать как пользовательскую таблицу через int 10h функой AX=01100h?
    Как это сделать? Совместимы ли форматы битовых матриц? Как организовать оперативное "переключение" с русиша на инглиш?

    Хелп, плиз! Знаю, что стыдоба, да времени в обрез :dntknw:
    надо уже... вчера.
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    dekloper
    Код (Text):
    1.     ;Загружаем таблицу символов в память
    2.     done:
    3.     mov ah, 2h
    4.     mov al, 8h
    5.     mov bx, 1000h
    6.     mov ch, 0h
    7.     mov cl, 2h
    8.     mov dh, 0h
    9.     mov dl, 0h
    10.     int 13h
    11.     ;Изменяем таблицу символов
    12.     mov bp, bx
    13.     mov ah, 11h
    14.     mov al, 0h
    15.     mov cx, 100h
    16.     mov dx, 0h
    17.     mov bh, 10h
    18.     mov bl, 0h
    19.     int 10h
     
  3. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    dekloper
    как вариант реверснуть "keyrus.com"
    он маленький ;)
     
  4. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Проще загуглить Ralph Brown's interrupt list. Хотя когда я тоже был совсем маленький и не знал про него, да и инета не было и не слышал даже про него, то да, реверсил sourcer'ом уже не помню что. :derisive:
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Круто. Сначала подумал: "Что за ерунда, я ж вроде дал готовый код. Что за глупые предложения насчет реверсинга?" Потом понял, что код явно неочевидный без справочника или комментариев к каждой строке: код просто тупо скопипастил со своего старого исходника.
    В общем может будет полезно, поэтому прикладываю свою старую программку на VB6 для редактирования таблицы с исходниками и готовым файлом с таблицей, почти полностью соответствующей стандартной русской win. Правила работы с программкой можно понять из исходников. :)
    Справочник приложить не удалось.
     
  6. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    l_inc
    а откуда известно, что таблицу надо грузить именно в ES:[1000h] ?
    есть на это какая-то спецификация?
     
  7. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    l_inc
    блин, гоню...

    спасибо. в принципе разобрался..
    непонятно тока, че она у тя така здоровая
    (8 секторов = 4096 б), а грузим 256 б

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


    wsd
    фигасе, маленький 22 кило :dntknw:
    эт для меня слишком "глобально" :dntknw:
     
  8. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    l_inc
    загрузил я твой
    (последовательно считав в\из ES:[1000h]) все 4096 байт

    было:
    [​IMG]
    стало:
    [​IMG]

    видимо имеет место неправильный порядок загрузки (вроде припоминается, порядок матрица-атрибут-матрица-атрибут...)
     
  9. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    А что у тебя в ES:1000 ? В примере таблица сначала читается с диска. Тебе это нужно? Перед тем как копипастить, нужно разобраться, что кусок делает.
    Вообще, код в студию.
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    dekloper
    Ниоткуда. Мне так захотелось.
    Нет. Грузим именно 4КБ. А 256б - это в стиле современного Левши: умащивать битовую карту символа в поле 2х4 (один байт). На битовую карту каждого символа в таблице приходится 16 байт: размер карты - 8х16. Каждый бит - признак принадлежности точки символу. А соответственно 16х256 байт = 4 КБ.
    Судя по рисунку, не то и не туда. Прикладываю полноценный исходник образа загрузочной дискеты на фасме с подробными пояснениями к каждой строке.
     
  11. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    Vov4ick
    тоже, что и у тов. l_inc - таблица 4096 б, прочитанная со 2-го по 9-й сектор (для чистоты эксперимента, предварительно записав ее туда из файла)
    в идеале, так и надо... все должно работать до загрузки ОСи...

    l_inc
    чета "моя твоя непонимать"... что есть 2х4, а что 8х16? Каков порядок следования байт в таблице?
    пойду рисовать точки, иначе недогоню.... :dntknw:
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    dekloper
    http://gazette.linux.ru.net/rus/articles/toy-os/toy-os.html
     
  13. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    l_inc
    аха, спасибо, самое оно ;)

    а все же табличка у тебя... кривенькая
    [​IMG]
    [​IMG]
    код пробовал запускать?
    вот мой мбр с твоим кодом (табличку твою разместил начиная с 10-сектора)
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    dekloper
    С табличкой все в порядке. А вот куда у Вас управление уйдет после десятого прерывания, начиная с сорок третьего байта...
    Скомпилируйте код из десятого поста и дайте полученый файл VMWare в качестве образа загрузочной дискеты.
     
  15. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    l_inc
    согласен, дальше - бред..
    но дело-то не в том, главное, что прерывание отработало, след-но строку должно (и обязано!) вывести...!

    что, собсно, и происходит...

    хорошо. допустим, у меня руки кривые...
    давайте занопим int 10h:

    Код (Text):
    1. use16
    2.    xor ax,ax
    3.    mov ss,ax
    4.    mov ds,ax
    5.    mov es,ax
    6.    ;Загружаем таблицу символов в память
    7.    mov ax,0208h    ;вторая ф-ия - чтение; читаем 8 секторов (4096 байт)
    8.    mov bx,1000h    ;писанём по адресу 0:1000h
    9.    mov cx,0002h    ;читаем, начиная со второго сектора
    10.    xor dx,dx       ;нулевая головка, нулевой диск
    11.    int 13h     ;ПУСК!
    12.    ;Изменяем таблицу символов
    13.    mov ax,1100h    ;одиннадцатая ф-ия, нулевая подфункция - смена на пользовательскую символьную палитру
    14.    mov bp,bx       ;табличка находится по адресу 0:1000h
    15.    mov cx,100h     ;256 палитр: на каждый символ по одной
    16.    xor dx,dx       ;изменить, начиная с нулевого символа
    17.    ;mov bx,1000h   ;на битовую карту каждого символа по 16 (10h) байт
    18.    [b];занопим, пока обойдемся стандартной таблицей!; int 10h       ;ПУСК![/b]
    19.    ;выводим строку на экран
    20.    mov ax,1300h    ;тринадцатая функция - вывод строки
    21.    mov bx,000Ah    ;напишем зеленым
    22.    xor dx,dx       ;пишем, начиная с нулевой колонки, нулевой строки
    23.    mov cx,messageEnd-message  ;длина выводимого сообщения
    24.    call messageEnd
    25.       message db 'Вау! Новая ASCII-таблица!'
    26.    messageEnd:
    27.    pop bp      ;смещение выводимого сообщения
    28.    int 10h     ;ПУСК!
    29. @@: jmp @B
    30. wholeCodeEnd db 510-wholeCodeEnd dup 0    ;забиваем остаток сектора нулями
    31. db 055h,0AAh       ;признак загрузочности сектора
    32. file 'begin.fnt'   ;в последующих секторах наша таблица
    как отработает код? оказывается всё замечательно!
    [​IMG]
    [​IMG]


    вот "занопленный" мбр вместе с таблицей с 10-го сектора (временно НЕ грузим)

    интересно всеже, в чем причина... либо не тем местом я его подгружаю, либо... одно из двух ;)
     
  16. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    dekloper
    У меня Ваш образ прекрасно отображает русские символы после возврата вместо nop'ов int 10 (CD 10).
    И тем не менее "дальше - бред..", который чего только не может сделать. Вы видели, что у меня после последнего 10-го прерывания? Вот сделайте так же, чтобы этот бред, который дальше, не исполнялся.
     
  17. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    В смысле, также? Что означает @@: jmp @B
    Я слабо себе представляю синтакс FASM-а, в основном в TASM-е и опкодах ;)
    Поставил я hlt после int 10h, результат - один ("точки" правда немного поменялись почемуто)
    [​IMG]
    [​IMG]
     
  18. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    фигасе, я дурак, int 13h читает таблицу с флопа (девайс в dl=0), а у меня таблица записана на харде (должно быть в dl=80h !!!)
    [​IMG]
    [​IMG]

    Всем спасибо! Всембольшой поклон ;) ;) ;)
     
  19. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    dekloper
    В TASM'e @@: jmp @B - это jmp $, а в опкодах - EB FE. И означает это прыжок на себя, т.е. бесконечный цикл. Хотя, может лучше hlt в бесконечном цикле крутить. Но не просто hlt, т.к. после него при первом прерывании опять пойдет исполнение всякой ерунды.
     
  20. Dionis21

    Dionis21 New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2008
    Сообщения:
    8
    а как запускать bin файлы?

    и еще.. нужно чистый ms-dos на вирт машину ставить или эммулятор DOSBox подойдет?
    А то у меня что-то не так как у вас)