044. Ldy zero page x
Добавьте LDY zero page,X ($B4).
Урок 44 из 356 · tests/chapter_01_cpu/test_044_LDY_zero_page_x.py
Файл для обновления
emulator/cpu/opcodes.pyРасположения
opcodes imports of zero_page_x and ldy
opcodes.ldy_zero_page_x
opcodes.OPCODE_TABLE[$B4]Зачем нужен этот шаг
Эта кодировка повторно использует уже реализованное вычисление адреса zero-page,X, включая перенос в пределах восьми бит, перед загрузкой вычисленного байта через базовую инструкцию ldy.
Полный пример реализации
# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import zero_page_x
from emulator.cpu.instructions import ldy
def ldy_zero_page_x(cpu: CPU):
addr = zero_page_x(cpu)
value = cpu.bus.read(addr)
ldy(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xB4: ldy_zero_page_x,
}Важные инварианты
- $B4 сопоставляется с ldy_zero_page_x и потребляет один байт операнда
- операнд нулевой страницы индексируется регистром X, а не Y
- эффективный адрес переносится в пределах страницы $00
- вычисленное значение из памяти передаётся в ldy, которая обновляет Zero и Negative
Распространённое заблуждение
LDY указывает регистр назначения, а не индексный регистр. Кодировка $B4 использует X для вычисления адреса.
Вне рамок задания
- кодировки LDY absolute и absolute,X
- изменение zero_page_x
- тайминг циклов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_044_LDY_zero_page_x.py -v