118. And página cero

añadir el opcode AND de página cero ``0x25``.

Lección 118 de 356 · tests/chapter_01_cpu/test_118_AND_zero_page.py

En este paso, con `and_a importado por la lección 117, añade solo el handler de página cero y la entrada en la tabla en emulator/cpu/opcodes.py`.

Por qué existe este paso

AND también debe consumir valores de la memoria; el modo de página cero verifica que el byte de operando se trate como una dirección y no como un valor inmediato.

Implementación sugerida

def and_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    and_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x25: and_zero_page,
}

`addressing_modes.zero_page captura la dirección de un byte; a diferencia del modo inmediato, el handler debe leer el valor en esa dirección antes de llamar a instructions.and_a. 25 10 usa cpu.bus[$0010]`, cambia A y Z/N, preserva Carry/Overflow y la memoria, y avanza PC dos bytes.

Concepto erróneo: ni pases la dirección `0x10 directamente a and_a ni escribas el resultado de nuevo en $0010`; AND no es una instrucción de lectura/modificación/escritura. Fuera del alcance: página cero,X y los modos de AND más amplios (lecciones 119-124).

Ejecutar esta lección

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