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

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

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е да...жопа просто какаято... вот колбасит.... еееемоооеее.... фффуууф.... на коры чтоль упать...

Поделиться сообщением


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

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

Поделиться сообщением


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

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 буду ковырять на доСУКЕ :)) да и доки чтоль тоже почитать всякой :)))) ресурс полезный :)))) фенкс :)

Поделиться сообщением


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