092. Asl zero page x
Добавить ASL Zero Page,X.
Урок 92 из 356 · tests/chapter_01_cpu/test_092_ASL_zero_page_x.py
На этом шаге форма Zero Page из теста 091 расширяется индексацией по X.
Файл и символы
emulator/cpu/opcodes.py: asl_zero_page_x, OPCODE_TABLE[0x16]Зачем нужен этот шаг
После того как тест 091 подключил обычный ASL для нулевой страницы, этот переход повторно использует уже существующий резолвер zero_page_x, так что индексация и перенос в пределах нулевой страницы остаются вопросом адресации.
Предлагаемая реализация для этого шага
# emulator/cpu/opcodes.py
def asl_zero_page_x(cpu: CPU):
addr = zero_page_x(cpu)
asl(cpu, addr)
OPCODE_TABLE = {
# existing entries unchanged
0x16: asl_zero_page_x,
}Важные инварианты
- эффективный адрес — это
(operand + cpu.x) & 0xFF - считывается один байт операнда, поэтому PC увеличивается на два с учётом опкода
aslотвечает за запись в память и обновление Carry, Zero и Negative- индексация изменяет адресата, а не значение, передаваемое в
asl
Распространённое заблуждение
Zero Page,X не переходит на страницу один: база 0xFE плюс X=0x03 указывает на $0001.
Вне рамок
- ASL Absolute и Absolute,X в тестах 093-094
- изменение
zero_page_xилиasl - точность тактов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_092_ASL_zero_page_x.py -v