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