|
GE-115 Emulator
An Emulator of the General Electrics GE-115 computer
|
Standing protocol for replacing a EXEC_* one-shot with transcribed per-clock executive states. Written down so it is not re-derived (or re-argued) once per family. Companion to flowchart-sheets.md (what is left) and transcriptions/ (the raw sheet reads).
../DUMP1 is the working drop and the source of record; tests/decks.h resolves it, Site_Acceptance_Test/ is the fallback.ss_hybrid_exit, beta_unclaimed (msl-states.c).docs/transcriptions/<family>.md with fo. numbers, before any code. Commit the transcription on its own if the conversion is going to be deferred.CI68 had no decimal path, so the conversion would have produced binary results where the machine does BCD. Grep the command implementations for every CO/CI/CU/CE the sheet issues before writing a single row.msl-states.c, and remove those opcodes from ss_hybrid_family in the same commit — the two must move together (see traps).(clock, command) pair already in common.exec_50 common {TO70, CI68} — fo.142 gates it {AD+SD+AB+SB+CMQ}, MVQ excluded. Landed as not_mvq (2f5680e).exec_40 common {TI06, CU01} — fo.143 appears to gate it {L1₁ = 1i}. It does not; the gate trace showed no counter term and the row stays unconditional (3f863cf). Kept here as the worked example of the trap below: this one was gated on the strength of the printed brace, and had to be reverted. These silently change other working families. One deck diff each.exec60_fetches_source).flowchart-sheets.md (mark the family *) and the memory note.Every one of these, every conversion:
make clean && make check green. **make clean is not optional** — a stale .o once produced a six-test phantom regression that bisected to nothing.*0x0E00=0x40 terminates **HALT PO=0x1427 step=27 mstep=65**.want_cyc in tests/roundtrip.sh deliberately, only after confirming the step trace is unchanged.ge -i prints a step line on every mem[0x0010] change plus the HALT, no external harness needed: is_ss_data_op still lists converted opcodes; only ss_hybrid_family's !ss_byte_loop guard keeps them from running the one-shot and the executive loop. That failure produces correct results in far fewer cycles — no assertion in the suite notices. The pinned want_cyc is the only thing that catches it.msl-states.c is order-sensitive; predicates used by the beta chart must be declared above it.{(L1_1 = 1i)} against CU01, whose gate chain provably contains no counter term, and prints an EMPTY cell against CI73, whose leaf is gated on an L1 signal. Before encoding any condition that changes arithmetic, trace the command to its leaf in cp06 — <command> generation chapter, then the partial-command chapter, then the leaf. It took four page renders and resolved two contradictions that had looked like hardware bugs.CI461 flipped UCO01 from binary to decimal add). When a signal's meaning hinges on a gate, have the trace confirmed.FUL4G was wrong because it was read off the "no interrupts" rows only.Order is roughly cheapest-first; each needs its own transcription + prerequisite check.
510e7f2). Three condition cells corrected at the gates (CU01, CI73, CI85 — see the transcription doc); deck +63 cycles, 141/141 transitions identical; three unit tests cover the deck-blind cases (multi-digit borrow, zero-extension, LT-compare with intermediate carry).opcodes.h entirely; needs the opcode added before the states.CI89 SET ALTO {FUL4} at TO80 is printed with no overbar. Taken verbatim it halts a MAX machine at PO=09b8. Unresolved; not committed.beta_unclaimed cannot retire until CU10/CU12 partial commands are transcribed.CI → OI rename to match the manual's naming.~~ Done 2026-08-01, with TL → TR.