035. Ldx absoluto y
Añadir LDX absoluto,Y ($BE).
Lección 35 de 356 · tests/chapter_01_cpu/test_035_LDX_absolute_y.py
Archivo a actualizar
emulator/cpu/opcodes.pyUbicaciones
opcodes.ldx_absolute_y
opcodes.OPCODE_TABLE[$BE]Por qué existe este paso
Esta lección completa la familia de opcodes de LDX disponible hasta este punto reutilizando el helper de absoluto,Y ya existente. Como con las demás formas basadas en memoria, el manejador resuelve y lee el operando antes de pasar su valor a ldx.
Implementación de ejemplo completa
# emulator/cpu/opcodes.py
def ldx_absolute_y(cpu: CPU):
addr = absolute_y(cpu)
value = cpu.bus.read(addr)
ldx(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xBE: ldx_absolute_y,
}Invariantes importantes
- $BE se corresponde con ldx_absolute_y
- la dirección base little-endian se indexa con Y, no con X
- el byte en la dirección indexada se pasa a ldx
- se consumen dos bytes de operando, por lo que la instrucción completa avanza PC en tres
Concepto erróneo habitual
No envuelvas absoluto,Y dentro de la página $00; a diferencia de página cero,Y, su dirección indexada es un resultado de 16 bits.
Fuera de alcance
- las instrucciones de guardar X y cargar Y
- cambios en absolute_y o ldx
- la temporización de ciclos y las penalizaciones por cruce de página
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_035_LDX_absolute_y.py -v