293. Проверка: CPU читает геймпад через 4016
ПРОВЕРОЧНЫЙ ТЕСТ: программа CPU читает биты геймпада из $4016.
Урок 293 из 356 · tests/chapter_07_controller_input/test_293_VALIDATION_cpu_reads_controller_4016.py
Это не шаг реализации для студента.
В этом файле не нужно ничего создавать заново. Этот тест проверяет, что уже построенные части работают вместе:
CPU instructions
-> CpuBus.write($4016, value)
-> Controller.write_strobe(value)
-> CpuBus.read($4016)
-> Controller.read_bit()
-> CPU stores observed bits into RAMЗачем нужна эта проверка
Предыдущие тесты доказали, что объект Controller и маршрутизация $4016 в CpuBus работают изолированно. Этот тест доказывает, что реальная последовательность инструкций CPU может использовать этот путь.
Ссылки
https://www.nesdev.org/wiki/Standard_controller
https://www.nesdev.org/wiki/Controller_reading_codeФорма опроса геймпада NES
write 1 to $4016
write 0 to $4016
read $4016 eight timesЭти восемь чтений возвращают
A, B, Select, Start, Up, Down, Left, RightНебольшая программа, используемая здесь
LDA #$01
STA $4016 ; strobe high, capture live buttons
LDA #$00
STA $4016 ; strobe low, serial reads advance
LDA $4016
STA $0000 ; A bit
LDA $4016
STA $0001 ; B bit
... repeated through Right bit ...Важное различие
Эта проверка сохраняет каждый последовательный бит в отдельном байте RAM для наглядности. Многие примеры на ассемблере NES сдвигают биты в один результирующий байт. Это политика игрового кода, а не поведение аппаратуры геймпада.
Вне рамок этого шага
- сопоставление клавиш pygame
- цикл main.py
- порт геймпада 2
- контроллеры расширения Famicom
- поведение сбоя чтения DMC/геймпада
- коммерческие ROM-файлы для тестов
Запустить этот урок
uv run pytest tests/chapter_07_controller_input/test_293_VALIDATION_cpu_reads_controller_4016.py -v