Gamepad (Геймпад)

Входы (Inputs)

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

Выходы (Outputs)

ПинТипОписание
Databus8Битовая маска нажатых кнопок: Up = 1, Down = 2, Left = 4, Right = 8

Логика работы

Геймпад возвращает 8-битную маску нажатых кнопок, когда IO_SEL = 1 и DevAddr = 0x1E (порт 0xFE). Каждая из четырёх кнопок соответствует одному биту:

КнопкаБитЗначение
Up (Вверх)01
Down (Вниз)12
Left (Влево)24
Right (Вправо)38

Если ни одна кнопка не нажата, Data = 0x00. При одновременном нажатии нескольких кнопок их биты суммируются (например, Up + Right = 1 + 8 = 9). Кнопки нажимаются мышью прямо на элементе Gamepad в редакторе — при запуске тактирования подведите курсор к геймпаду и кликайте по кнопкам.

Применение

Используется на уровнях 23, 28–29. Основное устройство ввода для интерактивных программ. Чтение геймпада в ассемблере:

; Прочитать геймпад в аккумулятор
LDA 254      ; LDA с адресом 0xFE → читает порт геймпада

Типичный паттерн опроса геймпада: чтение каждые несколько тактов в цикле, проверка конкретных битов через AND и условные переходы (JZ). На уровне 29 (Змейка) геймпад используется для управления направлением движения.