§ Алгоритм
Я не знаю алгоритма. Просто я скопировал его из другого проекта, поэтому код представляется AS IS, на страх, фобии и риск всех, кто копирует этот чудо-алгоритм.§ Основная программа
Первичная настройкаmov al, 0xA8 call kb_cmd ; Отослать команду A8 call kb_read mov al, 0x20 call kb_cmd ; Отослать команду 20 call kb_read ; Полученный результат сохранить push ax mov al, 0x60 call kb_cmd ; Отослать команду 60 pop ax or al, 3 call kb_write ; Результат команды 20, установить 2 младших бита mov al, 0xD4 call kb_cmd ; Команда для разрешения PS/2 mov al, 0xF4 call kb_write ; Запись F4 и чтение call kb_read ret
§ Обработчик прырываний
Вызывается через IRQ#C.mov al, 0xAD ; Блокировка клавиатуры call kb_cmd call kb_read ; Считывание данных ; mov [mouse_btn], al call kb_read ; Сдвиг по X ; mov [mouse_dx], al call kb_read ; Сдвиг по Y ; mov [mouse_dy], al mov al, 0xAE ; Разблокировать клавиатуру call kb_cmd
§ Процедуры
Эти процедуры необходимы для чтения и записи данных и команд в PS/2 порт.; Ожидание ответа от мыши #1 kb_wait: mov cx, 4096 push ax @@: in al, 0x64 and al, ah loopnz @b pop ax ret ; Ожидание ответа от мыши #2 kb_wait2: mov cx, 4096*8 push ax @@: in al, 0x64 and al, 1 loopz @b pop ax ret ; Отправка команды kb_cmd: mov ah, 2 call kb_wait out 0x64, al call kb_wait ret ; Запись данных kb_write: mov ah, 0x20 call kb_wait ; Ожидание готовности push ax in al, 0x60 ; Чтение данных из порта (не имеет значения) mov ah, 0x02 call kb_wait ; Ждать для записи pop ax out 0x60, al ; Записать данные call kb_wait call kb_wait2 ret ; Чтение данных с клавиатуры или мыши kb_read: call kb_wait2 mov cx, 16 @@: loop @b in al, 0x60 ret
10 дек, 2022
© 2007-2023 Все права ништяково отмочены