Перейти к содержанию

КЛАВИРНЫЙ ОБРАБОТЧИК


extrimist

Рекомендуемые сообщения

УВ. ФОРУМЦЫ Я ВОТ НАПИСАЛ(ударение на 3_ем слоге) ОБРАБОТЧИК ДОСКОКЛАВИШНОГО ПРИБОРА(IRQ9). БУДЬТЕ ДОБРЫ, ПОДСКАЖИТЕ КАКИЕ ИЗМЕНЕНИЯ(ОШИБКИ) Я ДОПУСТИЛ. КРИТИКУЙТЕ КАК УГОДНО, АВТОР НЕ ОБИДЕТСЯ(А ПРИМЕТ ДАННОЕ ЗАМЕЧАНИЕ ВО ВНИМАНИЕ). И ЕЩЁ: КЛАВИРНЫЙ БУФЕР ИМЕЕТ НЕСКОЛЬКО ИНУЮ СТРУКТУРУ.

 

 

 

КЛАВИАТУРНЫЙ ОБРАБОТЧИК. АЛГОРИТМ.

 

1. Поймать нажатие/отпуск клавиши.

2. Отпуск? -> перейти на 4_ый пункт.

3. Это ScrollLock? -> изменить режим/состояние ScrollLock -> Выйти

3.1 Это NumLock? -> изменить режим/состояние NumLock -> Выйти

3.2 Это CapsLock? -> изменить режим/состояние CapsLock -> Выйти

3.3 Это Insert? -> изменить режим/состояние Insert -> Выйти

3.4 Это левый Shift? -> изменить состояние левый Shift -> Выйти

3.5 Это правый Shift? -> изменить состояние правый Shift -> Выйти

3.6 Это Alt? -> изменить состояние Alt -> Выйти

3.7 Это Ctrl? -> изменить состояние Ctrl -> Выйти

3.8 Посмотреть П(позицию в буфере) -> поместить С/С и К(код) в ячейку-> Выйти

4. Это ScrollLock? -> изменить состояние ScrollLock -> Выйти

4.1 Это NumLock? -> изменить состояние NumLock -> Выйти

4.2 Это CapsLock? -> изменить состояние CapsLock -> Выйти

4.3 Это Insert? -> изменить состояние Insert -> Выйти

4.4 Это левый Shift? -> изменить состояние левый Shift -> Выйти

4.5 Это правый Shift? -> изменить состояние правый Shift -> Выйти

4.6 Это Alt? –> изменить состояние Alt -> Выйти

4.7 Это Ctrl? -> изменить состояние Ctrl -> Выйти

5. Выход

 

ФОРМАТ МОЕГО КЛАВИАТУРНОГО БУФЕРА

 

С/С П С\С К С\С К С\С К С\С К С\С К

С\С К С\С К С\С К С\С К С\С К С\С К

С\С К С\С К С\С К С\С К С\С К С\С К

С\С К С\С К С\С К С\С К С\С К С\С К

 

*С/С – слово состояния в данный момент времени

*С\С – слово состояния в момент нажатия данной клавиши

* П – позиция в буфере

* К – код клавиши

 

ФОРМАТ СЛОВА СОСТОЯНИЯ ДРУГОЙ:

1_ый БАЙТ(ОТ 7 ДО 0): скрол(режим),нам(режим)

капс(режим), инсерт(режим), скрол(состояние),нам(состояние)

капс(состояние), инсерт(состояние)

2_ой байт(ОТ 7 ДО 0): L_SHIFT(СОСТОЯНИЕ), R_SHIFT(СОСТОЯНИЕ),ALT(СОСТОЯНИЕ), CTRL(СОСТОЯНИЕ)

 

 

КЛАВИАТУРНЫЙ ОБРАБОТЧИК. РЕАЛИЗАЦИЯ НА АСМЕ.

 

;1-oe

pusha

in al, 60h

mov ah, al

in al, 61h

or al, 10000000b

out 61h, al

and al, 01111111b

mov al, ah

 

;2-oe

test al, 10000000b

jz NAJ

jmp OTP

 

;3-e

NAJ:

And al, 01111111b

Cmp al, 46h

Jne NUMLOCK

Mov ax, C/C ;(слово состояния)

Xor ax, 1000100000000000b

Jmp EXIT

 

;3.1

NUMLOCK:

Cmp al, 45h

Jne CAPSLOCK

Mov ax, C/C

Xor ax, 0100010000000000b

Jmp exit

 

;3.2

CAPSLOCK:

Cmp al, 3Ah

Jne INSERT

Mov ax, C/C

Xor ax, 0010001000000000b

Jmp EXIT

 

;3.3

INSERT:

Cmp al, 52h

Jne L_SHIFT

Mov ax, C/C

Xor ax, 0001000100000000b

Jmp EXIT

 

;3.4

L_SHIFT:

Cmp al, 2Ah

Jne R_SHIFT

Mov ax, C/C

Xor ax, 0000000010000000b

Jmp EXIT

;3.5

R_SHIFT:

Cmp al, 36h

Jne ALT

Mov ax, C/C

Xor ax, 0000000001000000b

Jmp EXIT

 

;3.6

ALT:

Cmp al, 38h

Jne CTRL

Mov ax, C/C

Xor ax, 0000000000100000b

Jmp EXIT

 

;3.7

CTRL:

Cmp al, 1Dh

Jne OB_KEY

Mov ax, C/C

Xor ax, 0000000000010000b

Jmp EXIT

 

;3.8

OB_KEY:

MOV BX, П (позиция в буфере)

Mov [DS:BX]+3, al

Mov dx, C/C

Mov [DS:BX], DX

JMP EXIT

 

;4

 

;4.1

OTP:

And al, 01111111b

Cmp al, 46h

Jne NUMLOCK_OTP

Mov ax, C/C ;(слово состояния)

Xor ax, 0000100000000000b

Jmp EXIT

 

;4.2

NUMLOCK_OTP:

Cmp al, 45h

Jne CAPSLOCK_OTP

Mov ax, C/C

Xor ax, 0000010000000000b

Jmp exit

 

;4.3

CAPSLOCK_OTP:

Cmp al, 3Ah

Jne INSERT_OTP

Mov ax, C/C

Xor ax, 0000001000000000b

Jmp EXIT

 

;4.4

INSERT_OTP:

Cmp al, 52h

Jne L_SHIFT_OTP

Mov ax, C/C

Xor ax, 0000000100000000b

Jmp EXIT

 

;4.5

L_SHIFT_OTP:

Cmp al, 2Ah

Jne R_SHIFT_OTP

Mov ax, C/C

Xor ax, 0000000010000000b

Jmp EXIT

 

;4.6

R_SHIFT_OTP:

Cmp al, 36h

Jne ALT_OTP

Mov ax, C/C

Xor ax, 0000000001000000b

Jmp EXIT

 

;4.7

ALT_OTP:

Cmp al, 38h

Jne CTRL_OTP

Mov ax, C/C

Xor ax, 0000000000100000b

Jmp EXIT

 

;4.8

CTRL:

Cmp al, 1Dh

Jne EXIT

Mov ax, C/C

Xor ax, 0000000000010000b

Jmp EXIT

 

;5

EXIT:

Mov al, 20h

Out 20h, al

POPA

iret

 

 

;P.S. ЗАРАНЕЕ БЛАГОДАРЕН

Ссылка на комментарий
Поделиться на другие сайты

ма3е да...жопа просто какаято... вот колбасит.... еееемоооеее.... фффуууф.... на коры чтоль упать...

Ссылка на комментарий
Поделиться на другие сайты

AL-GALI

Собственно, не совсем ясно, где инициализируется регистр DS.

да харош!!!! ну ты че мля в натуре :) не ужели не колбасит совсем??? я озяб уже..... фффуууу..... :)

Добавлено:

extrimist

5 таблеток валидола под язык и усё ПиСтАТО....
лучше "феников" пару листов :)))
Ссылка на комментарий
Поделиться на другие сайты

Меня уже с 15 лет торкнуло не по-детски! Я и спрашиваю, где сегментный регистр DS инициализируется, если он используется для доступа к буферу с символами?

Думаю, тут поможет медитация с вдыханием запаха отвара лотосовых лепестков. Лепестки залить кипятком, поставить чашку себе под нос, накрыться покрывалом и помедитировать минут десять.

Ссылка на комментарий
Поделиться на другие сайты

Yujin

ты не представляешь насколько клева выглядит простейший клиент для SQL Server, написанный на винасме =)))

это чудо =))

парвда чудо чудное =))) не представляю сколько надо убить сил и времени, что б его написать

но круто!

внатуре надо медитировать, что на нем такое писать =)))))

Ссылка на комментарий
Поделиться на другие сайты

AL-GALI

Меня уже с 15 лет торкнуло не по-детски! Я и спрашиваю, где сегментный регистр DS инициализируется, если он используется для доступа к буферу с символами?

Думаю, тут поможет медитация с вдыханием запаха отвара лотосовых лепестков. Лепестки залить кипятком, поставить чашку себе под нос, накрыться покрывалом и помедитировать минут десять.

меня вот тоже торкает... по взрослому :) А я себя спрашиваю, где этот пакадж DBMS_OUTPUT который PUT_LINEы фигачит и в консольном режиме работает???

Думаю, мне поможет мидитация с вдыханиями дыма сушеных марихуановских лепестков. Лепестки рассортировать, выложить на белую бумагу, формата А3, положить на пару дней в темное сухое место, после чего, перетереть руками, через металическое сито и шлемку втирать, чтобы избавица от надоедлевых семян, после чего, при желании, можно смешать с табаком, желательно сигаретным... взяв пачку БеломорКанала, достав от туда пару папирос, выпотрошить аккуратненько от туда табак, перед этим выдвинув папиросную бумагу вверх от штакета, и ручным способом (галаза не видят, а руки делают) прибить смесь :) ну или пылесосом (вставив в рот штакет, вдыхать в себя смесь) :)))

после чего выкурить, желательно в 3-м 4-ом. и мидитировать часик :)))))))

Добавлено:

Smile

ты не представляешь насколько клева выглядит простейший клиент для SQL Server, написанный на винасме =)))

ООО!!! вот это ты предложил, и подкинул задачку :))) неужели можно??? и вообще, как эт выглядет??? эт че, и драйвер доступа надо, и клиент...небось в текстовом режиме... и запросы както отсылать... и результирующий датасет возвращать...мля... да этж полгода наверно токма писать :)))))) если не год :)))) или два :)))

не, я столько травы не выкурю 6))))))

А вообще, можно на такое чудо посмотреть где нить??? интересно прям чет стало :))))

Добавлено:

но круто!

балин...в натуре круто :) мне приходили в голову такие идеи конечно, но мля... этож вообще онанизм :))) а не мидитация :) мля....а всетки все равно круто :))

Ссылка на комментарий
Поделиться на другие сайты

http://wasm.ru/

тут поройся, меня как-то давно прикололо, даже че-то пробовал лепить, получалось немного

ты почитай, почитай, главное что б травы тебе хватило =))))

Ссылка на комментарий
Поделиться на другие сайты

Smile пасиб, катанул себе RadASM буду ковырять на доСУКЕ :)) да и доки чтоль тоже почитать всякой :)))) ресурс полезный :)))) фенкс :)

Ссылка на комментарий
Поделиться на другие сайты

Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

×
×
  • Создать...