Interrupt core wired, and isa now fails on ADD
The interrupt core is wired. Eight new chips (U80-U87), two resistors, and seven lifts on old copper. With the IRQ line idle, every new path should sit in a state that recreates the old machine, so PROG_isa should still read 0xB4. Instead it reads 0x22 or 0x23, which is the subtest number of ADD (34) or SUB (35). Everything before ADD passes. The wiring is right as far as I can see, and I haven’t found the cause yet.
The ‘05 became a 7406N
The serial card needs one open-collector inverter to turn the 16550’s active-high INTR into a pull on the shared, active-low IRQ line. I didn’t have a ‘05. I had a 7406N, which is the same pinout, so U104 on the serial card is now a 7406N in the schematic too. The netlist didn’t change and ERC didn’t change.
The 7406N is standard TTL, so it costs a bit:
| 74LS05 | 7406N | |
|---|---|---|
| Input low current | 0.4 mA | 1.6 mA |
| Supply current, max | 6.6 mA | 51 mA |
| Output sink | 8 mA | 40 mA |
| Output rating | 5.5 V | 30 V |
The numbers come from TI’s datasheets. The extra 45 mA or so goes into the power budget for the PCB.
Wiring it one wire at a time
I wired the lifts first, then power and straps on every chip before any signal crossed them, then the logic, one wire and one beep at a time. Working from the full landing list makes me speed up and miss things. One wire, one beep is slower and I didn’t lose a wire.
The seven lifts:
| Old pin | Was on | Now driven by |
|---|---|---|
| U28.4 | GND | U84.9, INJECT |
| U36.1 | PC_UP | U81.8, PC_UP gated by ~INJECT |
| U61.3 | END | U82.6, END OR ACCEPT |
| U49.3, .4, .7, .8 | U48 flag outputs | U87, the POPF mux |
The interrupt logic (U80-U84) and the K buffer (U85, strapped to 0x90) went on a new board at the top left of the machine. Nothing comes into it from the top or the left. The IRQ line from the serial card will be a jumper of about 15 inches, which isn’t wired yet.
The two flag chips went where their wires are. U86 drives the flags onto MDR, so it’s in the last free row of the registers board, which carries MDR, one board up from the flags register. U87 sits in the flags path, so it took the last free spot on the ALU board.

isa reads 0x22 or 0x23
For the first few runs I read 0x44 and 0x43 off the LEDs, and spent a while on LDCX and STBX before I realised I was counting the LEDs wrong. The real readings are 0x22 and 0x23, and they alternate run to run.
Here’s what I’ve ruled out so far:
| Suspect | Test | Result |
|---|---|---|
| New ~RESET wire picking up runts (it lands on U49.1, the flags clear) | pulled it | same failure |
| New ~CLK wire to U83 ringing onto U49 and U36 | pulled it | same failure |
| CLK stub before R29 | looked at it | under 2 inches |
| Loose ALU operand wires near where I tapped W | beeped U45.2/.5/.6/.9 to U38 under pressure | all good |
| K buffer U85 enabling when it shouldn’t | scope, falling edge on U83.6, SINGLE | never fires |
| PUSHF buffer U86 enabling when it shouldn’t | scope on U86.19, then U86 strapped off | fires (see below), still fails with U86 off |
| U87 select line glitching | scope on U87.1 | never fires |
| U87 too slow in the flags path | scope on Z in and out of U87 and U49’s clock, triggered on HALT | 18 ns through U87, about 344 ns of margin |
| Something too slow at 1.024 MHz | ran at 500 kHz | still 0x22 |
The useful capture was the last scope one. I triggered on HALT rising, so the window looked back over the failing compare. Z never goes high for the CPI that checks SUB’s result. The flag gets through U87 and into U49 fine. The ALU really is saying “not equal”, so the value in A after SUB is wrong, or the compare’s operand is. The fault is in the datapath.

Halving the clock didn’t help, and the failure moves between two neighbouring subtests. My best guess is two drivers fighting over one bus line, which leaves it at a middle voltage that reads randomly. I haven’t shown that yet.
U86’s enable glitches, and it doesn’t matter yet
U86.19 (~FLAGS_OUT, from U70.10) goes low for about 46 ns, 68 ns after a CLK rise, while isa runs. isa never runs PUSHF, so nothing should enable U86. Before this build U70.10 drove nothing, so a glitch there didn’t matter. It’s probably skew between the three microcode EEPROMs briefly decoding a bank-1 code. I haven’t measured that. With U86 strapped off, isa still fails the same way, so this isn’t the fault. It still needs gating before PUSHF can be trusted.

Still open
- Short hunt. Board off, beep adjacent pins on U85, U86 and U87 where a bus pin sits next to another signal or a strap. The primary beeps prove each wire lands where it should. They can’t see a stray bridge to the pin next door.
- If that’s clean, scope a W or MDR bit during ADD and look for a bad level.
- U86’s enable needs a gate, the same way the RAM write strobe and K are gated, on the drawing first.
- Still to wire: the IRQ jumper and U104 on the serial card. The END low-level check under the two new 74F32 loads is still to do.
- The interrupt ladder hasn’t started. I0 isn’t passing yet, so I2 through I8 wait.