Геймпад (Gamepad)

Входы (Inputs)

ПинТипОписание
DevAddrbus8Адрес устройства: 0x1E = порт 0xFE
IO_SELbitВыбор I/O (1 = устройство активно)

Выходы (Outputs)

ПинТипОписание
Databus8Битовая маска нажатых кнопок: 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)
ничего000000000
Up (вверх)000000011
Down + Right (вниз + вправо)0000101010
Up + Right (вверх + вправо)000010019

Проверка одной кнопки укладывается в три инструкции: 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 переводит выполнение дальше, если бит не установлен.