094. Asl absolute x
Добавить ASL Absolute,X.
Урок 94 из 356 · tests/chapter_01_cpu/test_094_ASL_absolute_x.py
На этом шаге завершается последовательность режимов адресации ASL добавлением Absolute,X.
Файл и символы
emulator/cpu/opcodes.py: asl_absolute_x, OPCODE_TABLE[0x1E]Зачем нужен этот шаг
Это финальный переход в адресации ASL. Он объединяет уже существующий резолвер absolute_x с реализацией asl для памяти, введённой ранее.
Предлагаемая реализация для этого шага
# emulator/cpu/opcodes.py
def asl_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
asl(cpu, addr)
OPCODE_TABLE = {
# existing entries unchanged
0x1E: asl_absolute_x,
}Важные инварианты
- 16-битную базу в порядке little-endian нужно декодировать до прибавления X
- инструкция по-прежнему занимает три байта; X — это регистр, а не ещё один операнд
aslотвечает за чтение/изменение/запись и обновление флагов по эффективному адресу- аккумулятор не изменяется
Распространённое заблуждение
Для 1E 00 02 с X=0x04 X прибавляется к $0200, а не к какому-либо из байтов операнда.
Вне рамок
- LSR, вводимый тестами 095-101
- изменение
absolute_xилиasl - пересечение страниц и точность тактов цикла чтения/изменения/записи
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_094_ASL_absolute_x.py -v