082. Instrucción dex
Añadir el comportamiento de la instrucción DEX.
Lección 82 de 356 · tests/chapter_01_cpu/test_082_instruction_dex.py
En este paso, añade únicamente la función de instrucción. El opcode 0xCA es el siguiente paso, el Test 083.
Ubicación y símbolo en producción
emulator/cpu/instructions.py: `dex(cpu: CPU)`Por qué existe este paso
DEX es un comportamiento de registro independiente de la decodificación del opcode. Los enteros de Python no dan la vuelta automáticamente, así que la resta debe normalizarse a un resultado de 8 bits.
Implementación sugerida
def dex(cpu: CPU):
result = cpu.x - 1
result_8 = result & 0xFF
# Set flags
cpu.flags.set_negative_flag((result_8 & 0b1000_0000) != 0)
cpu.flags.set_zero_flag(result_8 == 0)
cpu.x = result_8Invariantes importantes
- X da la vuelta de 0x00 a 0xFF mediante
& 0xFF - Zero y Negative se derivan del valor final de 8 bits
- Carry, Overflow, la memoria y el resto de registros no se modifican
Concepto erróneo habitual
DEX no es una resta mediante SBC: ni consume ni modifica Carry y no aplica las reglas de desbordamiento de SBC.
Fuera de alcance
- importar
dexen opcodes y mapear 0xCA (test 083) - los incrementos/decrementos del registro Y posteriores
- el temporizado de ciclos
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_082_instruction_dex.py -v