119. And página cero x
añadir el opcode AND de página cero,X ``0x35``.
Lección 119 de 356 · tests/chapter_01_cpu/test_119_AND_zero_page_x.py
En este paso, tras la lección 118, añade solo el handler indexado de página cero y la entrada en la tabla en `emulator/cpu/opcodes.py`.
Por qué existe este paso
Esto añade el acceso indexado al AND de página cero y verifica que el cálculo de la dirección haga wraparound dentro de la página cero antes de que el valor de memoria llegue a la primitiva AND.
Implementación sugerida
def and_zero_page_x(cpu: CPU):
addr = zero_page_x(cpu)
value = cpu.bus.read(addr)
and_a(cpu, value)
OPCODE_TABLE = {
...
0x35: and_zero_page_x,
}`emulator/cpu/addressing_modes.py::zero_page_x calcula (base + cpu.x) & 0xFF. El byte resuelto se lee una vez conceptualmente y se pasa a instructions.and_a: A y Z/N cambian, Carry/Overflow y la memoria no, y PC avanza dos bytes. La base 0xFE más X 0x03 debe leer $0001, no $0101`.
Concepto erróneo: el indexado no altera los datos y debe hacer wraparound antes de la lectura en el bus. Fuera del alcance: el AND desde absoluto hasta indirecto,Y (lecciones 120-124), y cambios en el helper de direccionamiento ya existente o en la semántica de la instrucción.
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_119_AND_zero_page_x.py -v