042. Ldy immediate

Добавьте LDY immediate ($A0).

Урок 42 из 356 · tests/chapter_01_cpu/test_042_LDY_immediate.py

Файл для обновления

emulator/cpu/opcodes.py

Расположения

opcodes import of ldy
opcodes.ldy_immediate
opcodes.OPCODE_TABLE[$A0]

Зачем нужен этот шаг

Базовая инструкция ldy уже отвечает за поведение регистра и флагов. Этот урок подключает её первую кодировку, извлекая один буквальный операнд и передавая это значение в ldy.

Полный пример реализации

# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import immediate
from emulator.cpu.instructions import ldy


def ldy_immediate(cpu: CPU):
    ldy(cpu, immediate(cpu))


OPCODE_TABLE = {
    # Preserve existing entries.
    0xA0: ldy_immediate,
}

Важные инварианты

  • $A0 сопоставляется с ldy_immediate
  • непосредственный режим извлекает ровно один байт операнда, продвигая PC на единицу после опкода
  • загружается сам операнд; он не рассматривается как адрес в памяти
  • ldy по-прежнему отвечает за обновление Zero и Negative

Распространённое заблуждение

Не читайте шину по числовому значению непосредственного байта. Для A0 42 Y получает $42 напрямую.

Вне рамок задания

  • кодировки LDY zero-page, indexed и absolute
  • обработчики опкодов STY
  • тайминг циклов

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_042_LDY_immediate.py -v