Геймпад (Gamepad)
Входы (Inputs)
| Пин | Тип | Описание |
|---|---|---|
| DevAddr | bus8 | Адрес устройства: 0x1E = порт 0xFE |
| IO_SEL | bit | Выбор I/O (1 = устройство активно) |
Выходы (Outputs)
| Пин | Тип | Описание |
|---|---|---|
| Data | bus8 | Битовая маска нажатых кнопок: Up = 1, Down = 2, Left = 4, Right = 8 |
Логика работы
Геймпад — первый способ «пощупать» компьютер в этом курсе: до него процессор молча исполнял программу, а тут человек жмёт кнопку — и байт на шине меняется. Внутри всего четыре кнопки, и каждая спрятана в собственный бит одного байта данных.
Главное свойство — битовая маска: Up = 1, Down = 2, Left = 4, Right = 8. Нажатия складываются: Up и Right вместе дают 1 + 8 = 9; не нажато ничего — Data = 0. Пример: процессор прочитал Data = 2 — змейка должна повернуть вниз; Data = 10 — вниз и вправо одновременно.
Нюанс: геймпад отдаёт данные только когда выбран его порт — IO_SEL = 1 и DevAddr = 0x1E (порт 0xFE), в ассемблере это LDA 254. Кнопки нажимаются мышью прямо на элементе во время симуляции, а опрос надо повторять в игровом цикле каждые несколько тактов — сам процессор кнопку «не почувствует».
Примеры (маска кнопок)
| Нажатые кнопки | Data (bin) | Data (dec) |
|---|---|---|
| ничего | 00000000 | 0 |
| Up (вверх) | 00000001 | 1 |
| Down + Right (вниз + вправо) | 00001010 | 10 |
| Up + Right (вверх + вправо) | 00001001 | 9 |
Проверка одной кнопки укладывается в три инструкции: LDA 254 читает маску, AND 8 выделяет бит Right, JZ переводит выполнение дальше, если кнопка не нажата.
Применение
Уровень 23 «Геймпад» учит читать маску кнопок, на уровнях 28–29 она управляет движущейся точкой и Змейкой: направление движения меняется в ответ на нажатие. Это первый настоящий канал «человек → процессор» за всю траекторию курса.
Конкретное применение — опрос в игровом цикле: LDA 254 читает порт, затем серии AND 1 (вверх?), AND 2 (вниз?), AND 4 и AND 8 с условными переходами JZ разбирают маску по битам; по каждому совпадению программа меняет направление. Именно так любые игры на компьютере курса реагируют на игрока.
Смежные компоненты
Статьи по теме
Частые вопросы
Как читать кнопки геймпада?
Через инструкцию IN из порта 0xFE: каждый бит соответствует одной кнопке.
Что вернёт геймпад при одновременном нажатии Up и Right?
9: биты складываются, 1 + 8 = 9. Процессор увидит оба нажатия в одном байте.
Как проверить кнопку Right в ассемблере?
LDA 254, затем AND 8: результат не ноль — кнопка нажата. JZ переводит выполнение дальше, если бит не установлен.