190. Brk implícito

conectar el opcode BRK implícito $00.

Lección 190 de 356 · tests/chapter_01_cpu/test_190_BRK_implied.py

Requisito previo: el paso 189 completó `brk con el comportamiento requerido sobre los bits de estado. En este paso, añade esta importación y este mapeo directo en emulator/cpu/opcodes.py`:

from emulator.cpu.instructions import brk

OPCODE_TABLE = {
    # existing entries...
    0x00: brk,
}

Opcode

0x00 -> BRK

Objetivo

añadir el opcode 0x00 a OPCODE_TABLE.

Guía para el estudiante

BRK normalmente se clasifica como una instrucción implícita, pero tiene una longitud especial:

opcode byte:       $00
padding byte:      one ignored byte after $00
total length:      2 bytes

Esto NO significa que existan dos entradas de opcode para BRK.

Solo hay un opcode oficial

0x00

El byte que sigue a BRK puede tener cualquier valor. La CPU lo omite y apila la dirección de retorno tras ese byte.

Ejemplo

$8000: 00    BRK opcode
$8001: AB    padding/signature byte, ignored by BRK
$8002: EA    next real instruction

Después de que CPU.step() ejecute BRK, la dirección de retorno apilada debería ser $8002.

Por qué existe este paso

`CPU.step obtiene $00 y avanza PC una vez; el despacho directo a brk` tiene en cuenta el byte de relleno implícito y realiza todo el trabajo de pila/vector. Invariantes: hay una única entrada en la tabla y ninguna obtención de modo de direccionamiento; el contenido del relleno no afecta a A ni al destino; el estado de BRK del paso 189 y las reglas de pila permanecen sin cambios. Concepto erróneo: la longitud arquitectónica de dos bytes de BRK no implica un opcode de dos bytes ni un envoltorio de decodificación de operando.

Fuera de alcance: RTI/$40 son los pasos 191-192. El despacho de interrupciones por hardware, NMI, los ayudantes de pila compartidos, y las futuras API de opcodes no forman parte de esta transición.

Ejecutar esta lección

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