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