046. Ldy absolute x
Добавьте LDY absolute,X ($BC).
Урок 46 из 356 · tests/chapter_01_cpu/test_046_LDY_absolute_x.py
Файл для обновления
emulator/cpu/opcodes.pyРасположения
opcodes imports of absolute_x and ldy
opcodes.ldy_absolute_x
opcodes.OPCODE_TABLE[$BC]Зачем нужен этот шаг
Этот урок завершает семейство опкодов LDY, повторно используя вычисление адреса absolute,X, а затем читая по эффективному адресу и применяя уже существующее поведение ldy.
Полный пример реализации
# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import absolute_x
from emulator.cpu.instructions import ldy
def ldy_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
value = cpu.bus.read(addr)
ldy(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xBC: ldy_absolute_x,
}Важные инварианты
- $BC сопоставляется с ldy_absolute_x и потребляет два байта операнда
- к декодированному 16-битному базовому адресу прибавляется X, а не Y
- эффективный адрес считывается прежде, чем его значение передаётся в ldy
ldyобновляет Zero и Negative на основе загруженного байта
Распространённое заблуждение
LDY absolute,X не индексируется регистром назначения Y; кодировка явно использует X.
Вне рамок задания
- обработчики опкодов STY
- штрафы циклов при пересечении страницы
- изменения в absolute_x
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_046_LDY_absolute_x.py -v