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.pyUbicación
addressing_modes.zero_page_yPor 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 addressInvariantes 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