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 -> BRKObjetivo
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 bytesEsto NO significa que existan dos entradas de opcode para BRK.
Solo hay un opcode oficial
0x00El 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 instructionDespué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