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