084. Instrucción iny

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

Lección 84 de 356 · tests/chapter_01_cpu/test_084_instruction_iny.py

En este paso, añade únicamente iny, antes de su mapeo de opcode en el Test 085 y del trabajo de DEY en los Tests 086-087.

Ubicación y símbolo en producción

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

Por qué existe este paso

INY incrementa el registro Y independientemente de la decodificación del opcode y debe emular un registro de 8 bits pese a los enteros sin límite de Python.

Implementación sugerida

def iny(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 0xFF a 0x00
  • Zero y Negative se calculan a partir del resultado enmascarado
  • Carry, Overflow, la memoria y otros registros permanecen sin cambios

Concepto erróneo habitual

El incremento no activa Carry cuando Y da la vuelta; INY solo actualiza Z y N.

Fuera de alcance

  • el despacho del opcode 0xC8 (test 085)
  • el comportamiento y despacho de DEY (tests 086-087)
  • el trabajo posterior de ASL y el temporizado de ciclos

Ejecutar esta lección

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