Eight layers
between a program
and a block.
Each layer below consumes a defined representation and produces the next one. No layer infers anything about the layer above it, and none of them can be skipped: text becomes a canonical word, a word becomes a transition, and a transition becomes a commitment that a block carries.
The trace is not an explanation of execution. It is the execution, written down in the order it happened.
- 00 ↓USERWrites a program in the assembler's syntax. Nothing about the machine is hidden behind a runtime.
- 01 ↓PROGRAMText. Labels, directives and instructions drawn from the fixed instruction set.
- 02 ↓ASSEMBLERTwo passes: labels resolve to instruction addresses, then each line encodes into one word.
- 03 ↓BYTECODECanonical 32-bit words. Reserved bits are zero, unused fields are zero, and there is exactly one encoding per instruction.
- 04 ↓MACHINEFetch, decode, execute, writeback, commit. The phase list is derived from the decoded instruction.
- 05 ↓STATE TRANSITIONA defined architectural state in, a deterministic successor out. Nothing is inferred between cycles.
- 06 ↓CONTRACTHolds the state required to reproduce execution, not a description of it. It verifies the successor and keeps the commitment.
- 07 ■BLOCKOne edge. One committed transition. Block resolution is the machine's clock resolution.
The clock is
external to
the processor.
A processor does not contain time. It contains a state and a rule for producing the next one, and something outside it decides when that happens. In a package on a desk that something is an oscillator. Here it is the chain: the block supplies the edge, and the machine supplies the step.
The consequence is that block resolution is clock resolution. The machine has no notion of being fast or slow, and no operator needs to keep it running. A halted machine is not offline — it is a machine whose sequencer has stopped and whose state is still readable.
Phases are internal. One instruction retires per edge, and the number of phases inside that instruction depends on what it does: 3 for a transfer that resolves in decode, 5 for one that visits the arithmetic unit and writes back.
The state required to reproduce execution, not a description of it: the register file, the store, the pointer, the flags and the counter. A commitment to that state is enough to detect any divergence.
That the successor state offered for a block is the one the architecture defines for the current state. An execution is valid only if the resulting architectural state matches the canonical transition.
Keep it alive. There is no operator, no keeper and no scheduler. If a block is produced, an edge exists; if no block is produced, the machine is exactly where it was.