NES TDD

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