Полное руководство по оформлению дипломной работы (ВКР) 2025–2026
Разработать драйвер клавиатуры под DOS, издающий щелчок при нажатии второй клавиши, если это не проб
Настоящая курсовая работа посвящена разработке специализированного драйвера клавиатуры для операционной системы DOS. Разработка ведется в рамках учебного раздела «Программирование» предмета «Ассемблер». Целью работы является создание драйвера, расширяющего стандартную функциональность клавиатуры путем добавления звукового сопровождения при одновременном нажатии клавиш, исключая случай нажатия клавиши пробела.
Актуальность и постановка задачи
В операционной системе DOS, драйверы устройств играют ключевую роль в обеспечении взаимодействия между аппаратным обеспечением и программным обеспечением. Разработка пользовательских драйверов позволяет расширить функциональность системы и адаптировать ее под специфические нужды. Данная работа направлена на создание драйвера, который, помимо стандартной обработки нажатий клавиш, реализует звуковую индикацию одновременного нажатия двух и более клавиш. Это может быть полезно в различных приложениях, например, в играх или специализированных программах, требующих расширенной обратной связи от пользователя.
Теоретические основы
Работа драйвера клавиатуры в DOS основана на перехвате прерывания INT 16h. Данное прерывание вызывается при каждом нажатии или отпускании клавиши. Драйвер должен перехватить это прерывание, обработать информацию о нажатой клавише и, при необходимости, вызвать стандартный обработчик прерывания. Для реализации звукового сопровождения необходимо использовать функции BIOS, позволяющие генерировать звуковые сигналы через системный динамик. Важным аспектом является корректная обработка ситуаций, когда одновременно нажаты несколько клавиш, а также исключение случаев, когда одна из клавиш – пробел.
Реализация драйвера
Архитектура драйвера
Драйвер состоит из следующих основных компонентов:
- Обработчик прерывания
INT 16h: Перехватывает прерывание от клавиатуры. - Функция определения количества нажатых клавиш: Определяет, сколько клавиш нажато в данный момент.
- Функция генерации звукового сигнала: Генерирует звуковой сигнал определенной частоты и длительности.
- Функция проверки на пробел: Исключает генерацию звука, если нажата клавиша пробела.
Алгоритм работы драйвера
- Драйвер устанавливается в память и перехватывает прерывание
INT 16h. - При нажатии клавиши вызывается перехватчик драйвера.
- Перехватчик проверяет, сколько клавиш нажато в данный момент.
- Если нажато две или более клавиши, и ни одна из них не является пробелом, вызывается функция генерации звукового сигнала.
- После обработки, перехватчик вызывает стандартный обработчик прерывания
INT 16h.
Пример кода (фрагмент, псевдокод)
; Обработчик прерывания INT 16h
keyboard_interrupt:
push ax
push bx
push cx
push dx
; Проверка количества нажатых клавиш
call check_keys_pressed
; Если нажато больше одной клавиши и не пробел
cmp keys_pressed, 1
jg generate_beep
skip_beep:
; Вызов стандартного обработчика прерывания
pop dx
pop cx
pop bx
pop ax
jmp cs:old_interrupt
generate_beep:
; Проверка на пробел
call check_space_pressed
cmp space_pressed, 1
je skip_beep
; Генерация звукового сигнала
call beep
jmp skip_beep
Тестирование и отладка
Тестирование драйвера проводилось в эмуляторе DOS. Проверялась корректность обработки нажатий клавиш, генерация звукового сигнала при одновременном нажатии нескольких клавиш, а также исключение случаев, когда одна из клавиш – пробел. Отладка проводилась с использованием отладчика DOS, что позволило отслеживать выполнение кода драйвера и выявлять ошибки.
Заключение
В рамках данной курсовой работы был разработан драйвер клавиатуры для операционной системы DOS, реализующий звуковое сопровождение при одновременном нажатии клавиш, исключая случай нажатия клавиши пробела. Разработанный драйвер демонстрирует возможность расширения стандартной функциональности системы и адаптации ее под специфические нужды. В процессе работы были изучены основы программирования драйверов в DOS, особенности работы с прерываниями и функции BIOS для генерации звуковых сигналов. Дальнейшие исследования могут быть направлены на расширение функциональности драйвера, например, добавление возможности настройки параметров звукового сигнала или добавление поддержки дополнительных клавиш.
Основная цель – продемонстрировать глубокое понимание низкоуровневого программирования в среде DOS, включая перехват прерываний клавиатуры (IRQ1), прямое взаимодействие с аппаратным обеспечением (PC Speaker), управление состоянием клавиатуры и реализацию специфической логики (подсчет нажатий, фильтрация «проблемных» клавиш). Это учебный проект, показывающий базовые принципы резидентных программ (TSR) в DOS.
Драйвер поддерживает внутренний счетчик нажатий клавиш. При каждом событии «нажатие клавиши» (keydown) этот счетчик увеличивается. Если счетчик достигает значения «2», и текущая клавиша не является «prob» клавишей (см. Вопрос 4), драйвер воспроизводит щелчок. После этого счетчик сбрасывается или ожидает следующей пары нажатий в зависимости от выбранной логики реализации.
Звуковой щелчок генерируется с использованием встроенного PC Speaker. Для этого драйвер взаимодействует с контроллером программируемого таймера (PIT) Intel 8253/8254, который управляет частотой динамика. Путем кратковременной установки необходимой частоты (через порты 42h и 61h) и подачи питания на динамик, драйвер способен воспроизводить короткий тональный сигнал, воспринимаемый как щелчок.
Под «‘prob’ клавишей» (или «проблемной/пропускаемой клавишей») подразумеваются клавиши, при нажатии которых драйвер не должен издавать щелчок, независимо от того, является ли это «вторым» нажатием. Обычно это служебные клавиши, такие как Shift, Ctrl, Alt, Caps Lock, Num Lock, Print Screen, F-клавиши и т.п., которые не производят символьного ввода или используются для модификации других нажатий. Драйвер идентифицирует такие клавиши по их скан-кодам и игнорирует их при применении логики щелчка.
Основные сложности включают:
1. Низкоуровневое программирование: Необходимость прямого взаимодействия с оборудованием (клавиатура, PIT) и использования ассемблера или C со вставками ассемблера.
2. Перехват прерываний: Корректный перехват и обработка прерывания IRQ1 (клавиатура), а также передача управления исходному обработчику.
3. Управление памятью: Разработка драйвера как резидентной программы (TSR), которая загружается один раз и остается в памяти, освобождая при этом лишнюю память.
4. Отладка: Отладка низкоуровневых программ под DOS может быть сложной из-за ограниченности инструментов и прямого взаимодействия с железом.
5. Совместимость: Учет особенностей различных версий DOS и аппаратных конфигураций.