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