099. Lsr zero page x
Добавить LSR Zero Page,X.
Урок 99 из 356 · tests/chapter_01_cpu/test_099_LSR_zero_page_x.py
На этом шаге к форме LSR Zero Page из теста 098 добавляется индексация по X.
Файл и символы
emulator/cpu/opcodes.py: lsr_zero_page_x, OPCODE_TABLE[0x56]Зачем нужен этот шаг
Этот переход добавляет индексированный LSR для нулевой страницы, объединяя уже существующий резолвер zero_page_x с lsr для памяти; новая семантика сдвига не добавляется.
Предлагаемая реализация для этого шага
# emulator/cpu/opcodes.py
def lsr_zero_page_x(cpu: CPU):
addr = zero_page_x(cpu)
lsr(cpu, addr)
OPCODE_TABLE = {
# existing entries unchanged
0x56: lsr_zero_page_x,
}Важные инварианты
- вычисление эффективного адреса переносится в пределах восьми бит внутри нулевой страницы
- считывается только один байт операнда, поэтому PC увеличивается на два с учётом опкода
lsrотвечает за запись в память и изменения C/Z/N- X выбирает пункт назначения и не изменяется
Распространённое заблуждение
База 0xFE плюс X=0x03 указывает на $0001, а не на $0101.
Вне рамок
- LSR Absolute и Absolute,X в тестах 100-101
- изменения в адресации или поведении LSR
- точность тактов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_099_LSR_zero_page_x.py -v