Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2008, 01:01   #1
Kortes
 
Регистрация: 21.12.2008
Сообщений: 9
По умолчанию Управлeниe кoнтрoллepом клавиaтуры

Пытаюсь сделать прoграмму управлeния контрoллeром клaвиaтуры, чтoбы oтображение клaвиш a,s,d,f,g
помeнялось на симовлы 1,2,3,4,5.
TASM, DOS

Заклинило, толкните плиз, куда копать.
Kortes вне форума Ответить с цитированием
Старый 26.12.2008, 09:23   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

перехват клавиатурного прерывания??

вот, старый исходник - копайтесь...
Код:
.MODEL TINY
.CODE

        ORG 100H
LF      equ     0Ah
CR      equ     0Dh

start:
        jmp init
new_9:
;j_code   db 0EAh   ; jmp far
         pushf
j_code   db 09Ah    ; call far
old_09   dd 0
;        call far cs:[old_09]
        push ax
        push es
        push di
        pushf
        mov  ax, 040h
        push ax
        pop  es
        mov  di,word ptr es:[01ch]
;        add  di,1
        sub  di,1
        cmp  byte ptr es:[di], 086h
        jne  m7
;        mov  ax, 0B800h
;        push ax
;        pop  es
;        mov  byte ptr es:[4],'@'
        mov  byte ptr es:[di], 03Dh
m7:
        cmp  byte ptr es:[di], 088h
        jne  m8
        mov  byte ptr es:[di], 056h
m8:
        cmp  byte ptr es:[di], 08ah
        jne  m9
        mov  byte ptr es:[di], 060h
m9:
        cmp  byte ptr es:[di], 08ch
        jne  m10
        mov  byte ptr es:[di], 06ah
m10:
        popf
        pop di
        pop es
        pop ax
        iret

count   dw 0
Key1    dw '$#'
Key2    dw '%$'


init:
        push cs
        pop ds

        mov     dx, offset info
        mov     ah, 9
        int     21h

        push es
        push bx
        cli
        mov  ax,03509h
        int  21h
        sti
        mov word ptr [old_09],bx
        mov word ptr [old_09+2],es
        mov  di, offset Key1 - offset new_9
        add  di, bx
        mov  ax, es:[di]
        add  di,2
        mov  bx, es:[di]
;        mov  dx,
        pop  bx
        pop  es
        cmp  cs:[Key1], ax
        je   no_inst0
        cmp  cs:[Key2], bx
        je   no_inst0

        mov     dx, offset Loading
        mov     ah, 9
        int     21h

        push dx
        cli
        mov  dx,offset new_9
        mov  ax,02509h
        int  21h
        sti
        pop  dx

        mov  ax,offset init
        pushf
        mov  cl,4
        sar  ax,cl
        inc  ax
        popf
        mov  dx,ax
        mov  ax,03100h
        int  21h
no_inst0:
        mov     dx, offset AllReadyLoad
        mov     ah, 9
        int     21h
no_inst:
        mov  ax,04c00h
        int  21h
info    db      CR, LF
        db      '■ Клавиатурный ремонтник v1.0 ■   22-01-98 (c) B_SA Специально для Ларисы.'
        db      CR, LF
        db      '  Назначает клавишу F12 как полный дубль клавиши F3.'
        db      CR, LF, '$'
Loading db      'Загружается программа.'
        db      CR, LF, '$'
AllReadyLoad db 'Программа уже загружена ранее... Повторная загрузка не производится.'
        db      CR, LF, '$'
end start
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц