093. Asl absolute

Добавить ASL Absolute.

Урок 93 из 356 · tests/chapter_01_cpu/test_093_ASL_absolute.py

На этом шаге ASL для памяти расширяется до уже существующего 16-битного резолвера absolute.

Файл и символы

emulator/cpu/opcodes.py: asl_absolute, OPCODE_TABLE[0x0E]

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

Этот переход распространяет то же поведение ASL для памяти с адресов нулевой страницы на уже существующий 16-битный резолвер absolute; семантика инструкции остаётся неизменной.

Предлагаемая реализация для этого шага

# emulator/cpu/opcodes.py
def asl_absolute(cpu: CPU):
    addr = absolute(cpu)
    asl(cpu, addr)

OPCODE_TABLE = {
    # existing entries unchanged
    0x0E: asl_absolute,
}

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

  • absolute(cpu) считывает сначала младший байт, затем старший, и возвращает 16-битный адрес
  • трёхбайтовая инструкция увеличивает PC на три с учётом опкода
  • asl считывает и записывает по вычисленному адресу памяти и обновляет C, Z и N
  • A и X не изменяются

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

Для 0E 00 02 декодирование в порядке little-endian указывает на $0200, а не на $0002.

Вне рамок

  • ASL Absolute,X в тесте 094
  • изменения в абсолютной адресации или семантике ASL
  • точность тактов

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

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