029. Zero page y addressing

Добавление адресации zero-page,Y.

Урок 29 из 356 · tests/chapter_01_cpu/test_029_zero_page_y_addressing.py

Файл для обновления

emulator/cpu/addressing_modes.py

Расположение

addressing_modes.zero_page_y

Зачем нужен этот шаг

Некоторые более поздние кодировки инструкций индексируют операнд нулевой страницы регистром Y, а не X. Этот урок вводит только этот переиспользуемый расчёт адреса, аналогичный zero_page_x из Теста 017, прежде чем связывать его с каким-либо опкодом.

Полная реализация примера

# emulator/cpu/addressing_modes.py
def zero_page_y(cpu) -> int:
    base = cpu.fetch_byte()
    address = (base + cpu.y) & 0xFF
    return address

Важные инварианты

  • выбирается ровно один байт операнда
  • к операнду прибавляется Y, а не X
  • результат циклически ограничивается восемью битами и поэтому остаётся в пределах страницы $00
  • вспомогательная функция возвращает адрес и не выполняет чтение памяти по этому адресу

Распространённое заблуждение

Маскируйте сумму, а не только операнд: $FF + $01 должно стать $0000, а не $0100.

Вне рамок

  • добавление или изменение обработчиков опкодов
  • сама инструкция LDX
  • тайминги циклов

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_029_zero_page_y_addressing.py -v