086. Instrucción dey

Añadir el comportamiento de la instrucción DEY.

Lección 86 de 356 · tests/chapter_01_cpu/test_086_instruction_dey.py

En este paso, añade únicamente dey; el Test 087 conecta el opcode una vez que el comportamiento ya existe.

Ubicación y símbolo en producción

emulator/cpu/instructions.py: `dey(cpu: CPU)`

Por qué existe este paso

DEY es responsable del decremento del registro Y y de sus efectos en el estado, independientemente de la decodificación. Se requiere el enmascarado para modelar el subdesbordamiento en un registro de 8 bits.

Implementación sugerida

def dey(cpu: CPU):
    result = cpu.y - 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.y = result_8

Invariantes importantes

  • Y da la vuelta de 0x00 a 0xFF
  • Zero y Negative reflejan el resultado enmascarado de 8 bits
  • Carry y Overflow se preservan; no se accede a memoria

Concepto erróneo habitual

DEY no es SBC aplicado a Y y no debe usar Carry como entrada de préstamo.

Fuera de alcance

  • importar dey y mapear el opcode 0x88 (test 087)
  • el comportamiento y despacho previos de INY
  • el trabajo posterior de ASL y el temporizado de ciclos

Ejecutar esta lección

uv run pytest tests/chapter_01_cpu/test_086_instruction_dey.py -v