029. Direccionamiento página cero y

Añadir el direccionamiento página cero,Y.

Lección 29 de 356 · tests/chapter_01_cpu/test_029_zero_page_y_addressing.py

Archivo a actualizar

emulator/cpu/addressing_modes.py

Ubicación

addressing_modes.zero_page_y

Por qué existe este paso

Algunas codificaciones de instrucción posteriores indexan un operando de página cero con Y en lugar de X. Esta lección introduce únicamente ese cálculo de dirección reutilizable, en paralelo con zero_page_x del Test 017, antes de conectarlo con ningún opcode.

Implementación de ejemplo completa

# emulator/cpu/addressing_modes.py
def zero_page_y(cpu) -> int:
    base = cpu.fetch_byte()
    address = (base + cpu.y) & 0xFF
    return address

Invariantes importantes

  • se obtiene exactamente un byte de operando
  • es Y, no X, lo que se suma al operando
  • el resultado da la vuelta a ocho bits y por tanto permanece en la página $00
  • el ayudante devuelve una dirección y no realiza ninguna lectura de memoria en esa dirección

Concepto erróneo habitual

Enmascara la suma, no solo el operando: $FF + $01 debe convertirse en $0000, no en $0100.

Fuera de alcance

  • añadir o cambiar manejadores de opcode
  • la propia instrucción LDX
  • el tiempo de ciclos

Ejecutar esta lección

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