045. Ldy absolute
Добавьте LDY absolute ($AC).
Урок 45 из 356 · tests/chapter_01_cpu/test_045_LDY_absolute.py
Файл для обновления
emulator/cpu/opcodes.pyРасположения
opcodes imports of absolute and ldy
opcodes.ldy_absolute
opcodes.OPCODE_TABLE[$AC]Зачем нужен этот шаг
Абсолютная адресация расширяет LDY за пределы нулевой страницы. Обработчик декодирует уже существующий 16-битный операнд в порядке little-endian, читает по этому адресу и передаёт загруженное значение в ldy.
Полный пример реализации
# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import absolute
from emulator.cpu.instructions import ldy
def ldy_absolute(cpu: CPU):
addr = absolute(cpu)
value = cpu.bus.read(addr)
ldy(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xAC: ldy_absolute,
}Важные инварианты
- $AC сопоставляется с ldy_absolute и потребляет два байта операнда
- absolute сначала объединяет младший байт, затем старший
- обработчик читает эффективный адрес и передаёт полученное значение в ldy
- выполнение продвигается всего на три байта, включая опкод
Распространённое заблуждение
Не меняйте местами байты AC 00 02; уже существующая вспомогательная функция absolute преобразует эти байты операнда в $0200, а не в $0002.
Вне рамок задания
- LDY absolute,X
- изменение вспомогательной функции абсолютной адресации
- тайминг циклов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_045_LDY_absolute.py -v