033. Ldx página cero y
Añadir LDX página cero,Y ($B6).
Lección 33 de 356 · tests/chapter_01_cpu/test_033_LDX_zero_page_y.py
Archivo a actualizar
emulator/cpu/opcodes.pyUbicaciones
opcodes.ldx_zero_page_y
opcodes.OPCODE_TABLE[$B6]Por qué existe este paso
El test 029 introdujo el helper de dirección de página cero,Y con envoltura. Esta lección le da a ese helper su primer uso como opcode, combinándolo con una lectura de memoria y la instrucción ldx ya existente.
Implementación de ejemplo completa
# emulator/cpu/opcodes.py
def ldx_zero_page_y(cpu: CPU):
addr = zero_page_y(cpu)
value = cpu.bus.read(addr)
ldx(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xB6: ldx_zero_page_y,
}Invariantes importantes
- $B6 se corresponde con ldx_zero_page_y
- el índice es Y, no X
- la base más Y envuelve a ocho bits antes de la lectura del bus
- se consume un byte de operando, y ldx es responsable de X y de las actualizaciones de flags
Concepto erróneo habitual
El registro de destino de LDX no determina el registro de índice: esta codificación usa Y, y $FF,Y con Y=$01 lee $0000 en lugar de $0100.
Fuera de alcance
- cambiar zero_page_y o ldx
- las codificaciones de LDX en modo absoluto
- la temporización de ciclos
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_033_LDX_zero_page_y.py -v