Программа – резидент переключателя альтернативной кодировки (русификатор)

    Дисциплина: Программирование
    Тип работы: Курсовая
    Тема: Программа – резидент переключателя альтернативной кодировки (русификатор)

    Институт Переподготовки Кадров
    Уральского Государственного Технического Университета
    Кафедра микропроцессорной техники
    Оценка работы
    Члены комиссии
    ПРОГРАММА – РЕЗИДЕНТ
    ПЕРЕКЛЮЧАТЕЛЯ АЛЬТЕРНАТИВНОЙ
    КОДИРОВКИ
    Курсовая
    работа
    Пояснительная записка
    Руководитель
    к.т.н. доцент
    В. П. Кулюкин
    Слушатель
    Группа СП-913
    А. А. Соколов
    ЕКАТЕРИНБУРГ
    1997
    Содержание
    ПОСТАНОВКА ЗАДАЧИ...................-
    ВВЕДЕНИЕ............................3
    1. ОПИСАНИЕ ПРОГРАММЫ...............4
    1.1 ОБРАБОТКА 09
    .................
    1.2 ОБРАБОТКА
    .................
    ЗАКЛЮЧЕНИЕ..........................10
    БИБЛИОГРАФИЧЕСКИЙ СПИСОК ...........11
    ПРИЛОЖЕНИЕ 1 ТЕКСТ ПРОГРАММЫ........12
    ВВЕДЕНИЕ
    С самого начала существования
    совместимых компьютеров встала проблема вывода на экран и ввода с клавиатуры символов кириллицы. Только начиная с версии
    MS DOS 6.0
    появилась поддержка национальной 866 страницы. До появления версии
    MS DOS 6.0
    проблему решали так называемые программы русификаторы. Эти программы замещали символы дополнительного кодового набора. Делалось это путем подстановки шрифта
    прошитого в ПЗУ видеоадаптера своим. Эти программы были практически на каждом компьютере. Самыми известными из них являлись
    ENHFONT, KEYRUSS, LMSCRLMKEY, KYRILLIC.
    Был еще один способ решить проблему русификации - перепрограммировать ПЗУ видеоадаптера, но он не нашел большого применения.
    ОПИСАНИЕ ПРОГРАММЫ
    Поскольку данная программа относиться к типу программ, которые меняют шрифт загружающийся из ПЗУ видеоадаптера, то сначала она открывает файл
    находящийся в этом же каталоге в котором находиться шрифт 8х16. После этого программа читает 4096 байт и помещает их в буфер. Затем загружаются полученные данные в видеобуфер, другими
    словами меняется текущий шрифт на новый. Следующий шаг программы это получение, сохранение и установка своих обработчиков 10
    прерываний. После данных операций программа завершает работу и остается резидентной используя 27
    прерывание, причем в регистре
    находится первый байт памяти после резидентной части программы.
    Общая логика работы показана на рис. 1.1 и 1.2
    Рис. 1.1
    Рис. 1.2
    1.1 ОБРАБОТКА
    INT 09h
    Обработка
    программой представлена на рис. 1.3 и 1.4
    Рис. 1.3
    Рис. 1.4
    1.2 ОБРАБОТКА
    Обработка 10
    программой представлена на рис. 1.5
    Рис. 1.5
    ЗАКЛЮЧЕНИЕ
    Данная программа имеет следующие недостатки:
    Может использоваться только в ДОС - режиме
    Клавиша переключающая раскладки неизменяемая
    Во время работы программы файл со шрифтом должен находиться в том же каталоге, где находится русификатор
    Файл шрифта должен быть только с именем «8
    х16.fnt
    Неоспоримое достоинство программы
    - занимаемое место резидентом в памяти.
    БИБЛИОГРАФИЧЕСКИЙ
    СПИСОК
    Абель П. Язык Ассемблера для IBM PC и
    программирования М.: Высшая школа, 1992. 447с.
    Гук М. Аппаратные средства IBM PC
    СПб.: Питер,
    1996.
    224с.
    ПРИЛОЖЕНИЕ 1
    ТЕКСТ ПРОГРАММЫ
    .MODEL TINY
    Все сегменты в одном
    .CODE
    Как ком файл
    .STARTUP
    .286
    LOCALS
    ; Близкие переходы
    JUMPS
    jmp Install
    RSHIFT_SCAN
    RSHIFT scan code
    FLAGS record
    inRussian:1,shiftPressed:1,keyPressed:1,reserved:6
    iFlags FLAGS
    STable
    \'йцукенгшщзхъфывапpолджэячсмитьбюЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ\'
    Hook09 proc far ;обpабока int 09h
    push ax
    push bx
    push cx
    push di
    push ds
    push es
    ax,cs
    сегмент резидента
    ds,ax
    данные в сегменте кода
    al,60h
    ситываем
    ah,al
    и сохраняем
    al,RSHIFT_SCAN
    ? правый
    gotShift
    пpовеpка нажатия
    test al,80h
    верхний регистр
    KeyUp
    а может быть клавишу отпустили ? нет ?
    test [iFlags], MASK inRussian ; выделяем флаг русского набора
    OldHook09
    если в английском, то стаpый обpаботчик
    push ax
    ax,40h
    es,ax
    es = сегмент данных BIOS
    al,34h
    начало блока тpансляции
    OldHook09
    al,2Ch
    check2
    al,2Ch
    проверка не символьная
    al,23
    short Translate
    check2:
    al,28h
    OldHook09
    al,1Eh
    check3
    al,1Eh
    ; ли это
    al,12
    short Translate
    check3:
    al,1Bh
    OldHook09
    al,10h
    OldHook09
    ; клавиша
    al,10h
    конец блока, al = смещение в таблице
    Translate:
    выделяем флаг нажатия клавиши
    ah,es:[17h]
    а не нажат ли у нас shift
    test ah,11b
    lowerKey
    если не нижний регистр - то дальше
    al,32
    увеличиваем смещение в табл. символов
    lowerKey:
    указатель на хвост буфеpа клавиатуpы (30-60)
    bx,es:[1Ch]
    указатель на голову
    cx,60
    голова на хвосте ?
    h_End
    да - на хвост
    сместимся
    голова и хвост похожи ?
    Quit
    тогда выходим
    short insSymb
    ну тогда …
    h_End:
    bx,30
    хвост на голове ?
    Quit
    insSymb:
    di, offset STable
    di = указатель на таблицу символов
    ah,0
    ax = смещение
    di,ax
    al,[di]
    al = символ
    es:[bx],al
    помещаем символ в буфеp клавиатуpы (int 16h)
    bx,60
    указатель хвоста дошел до конца?
    nextStep
    bx,28
    иначе переопределяем указатель
    nextStep:
    и еще разок
    es:[1Ch],bx
    предаем его значение в положенное место
    short Quit
    конец, символ отpанслиpован
    gotShift:
    [iFlags], MASK shiftPressed
    взводим флаг нажатия shift
    [iFlags], NOT MASK keyPressed
    обнуляем ------- клавиши
    short OldHook09
    KeyUp:
    al,7Fh
    убиpаем бит отпускания клавиши
    al,RSHIFT_SCAN
    OldHook09
    если не shift - стаpый обpаботчик
    test [iFlags], MASK keyPressed
    throwShift
    если нажимали клавишу - сбpасываем shift
    test [iFlags], MASK inRussian
    switchRussian
    если в английском - то на pусский
    [iFlags], NOT MASK inRussian
    а тут на английский
    short OldHook09
    switchRussian:
    [iFlags], MASK inRussian
    short OldHook09
    throwShift:
    сбpасываем пpизнак
    ; нажатия shift
    OldHook09:
    0EAh
    оптикод far jump
    OldHandler09 dd ?
    jump xxxx:yyyy
    Quit:
    al,61h
    сбрасываем контроллер клавиатуры
    ah,al
    и разрешаем обработку след. симв.
    al,80h
    клавиатура блокирована ?
    61h,al
    сообщаем контроллеру
    xchg ah,al
    снимаем блокировку
    61h,al
    al,20h
    разрешение обработки аппаратных прерываний
    20h,al
    8259А
    iret
    Hook09 endp
    Hook10 proc far
    cmp ah,00h
    функция смена видеоpежима
    jne @@Quit
    нет ? передаем управление старому обработчику
    cmp al,2
    видеорежим 2 или 3 ?
    @@myHook
    да - обрабатываем
    cmp al,3
    3 режим в обработке не нуждается
    jne @@Quit
    @@myHook:
    call iBIOS
    вызываем старый обработчик
    push ax
    push cx
    push ds
    push si
    ax,cs
    устанавливаем
    ds,ax
    для адресации данных
    al,0
    установки для
    cl,0FFh
    вызова процедуры
    ch,16
    загрузки фонта
    call LoadFont
    загpужаем свой фонт
    pop si
    pop ds
    pop cx
    pop ax
    iret
    @@Quit:
    call iBIOS
    iret
    Hook10 endp
    iBIOS proc
    pushf
    db 09Ah
    far call
    OldHandler10 dd ?
    iBIOS endp
    ;+----------------------------------------+
    ;|
    Load Font
    ;|
    ;|
    Загpужает в знакогенеpатоp новые
    ;|
    обpазы символов. Используя поpты,
    ;|
    удается избежать \"деpгания\" экpана
    ;| Вход:
    ;|
    - номеp пеpвого символа
    ;|
    - количество символов
    ;|
    - pазмеp символа
    ;|
    DS:SI - ваш буфеp обpазов
    ;| Выход: нет
    ;| Разpушаемые pегистpы: нет
    ;+----------------------------------------+
    LoadFont proc
    pushf
    push ax
    push cx
    push dx
    push si
    push di
    push es
    смещение на начало видеобуфера
    es,di
    будет адресоваться через сегмент доп. данных
    ah,ah
    чистка
    imul di,ax,20h
    ?????????????
    push ds
    push si...

    Забрать файл

    Похожие материалы:


ПИШЕМ УНИКАЛЬНЫЕ РАБОТЫ
Заказывайте напрямую у исполнителя!


© 2006-2016 Все права защищены