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_8

Invariantes 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 dex en 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