136. Eor zero page
добавить опкод EOR zero-page ``0x45``.
Урок 136 из 356 · tests/chapter_01_cpu/test_136_EOR_zero_page.py
Зачем нужен этот шаг
EOR нужна компактная форма для памяти, которая интерпретирует свой операнд как адрес в нулевой странице, читает это место и применяет общее поведение исключающего ИЛИ.
На этом шаге `or_e и EOR immediate уже существуют. Добавьте ровно следующее в emulator/cpu/opcodes.py`:
def eor_zero_page(cpu: CPU):
addr = zero_page(cpu)
value = cpu.bus.read(addr)
or_e(cpu, value)
OPCODE_TABLE = {
...
0x45: eor_zero_page,
}`emulator/cpu/addressing_modes.py::zero_page считывает однобайтовый адрес; обработчик выполняет отдельное чтение данных и передаёт это значение в instructions.or_e`. A и Z/N могут измениться; Carry/Overflow, память, X и Y остаются неизменными; опкод вместе с операндом сдвигает PC на два байта.
Заблуждение: `$nn` — это адрес в нулевой странице, а не буквальное значение для XOR. Вне рамок: индексированные и более широкие режимы EOR (137-142) и BIT (143-145).
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_136_EOR_zero_page.py -v