CD64K / RAM LAB

CENTRAL DATA CORPORATION · 1978 · S-100

Inside the 64K
dynamic RAM board.

Follow a byte from the bus to eight DRAM chips. See how address straps, delayed strobes, and background refresh make the board behave as ordinary memory.

32 × 16K-bit DRAMs4 physical banks128 refresh rows

01 / EXPLORE

A cycle, one signal at a time

Functional model · symbolic timing

This models the 8080/Z80 address configuration and normal isolated accesses. Steps show causal order, not nanoseconds. Retention time advances only with the time controls below. Chip power-up contents are unknown until written. Model limits →

MEMORY ARRAY / A1068bit 0 → bit 7

Address ready

0 / 5

Run a write, then a read, to follow a stored byte.
Try a worked example

Refresh and retention

Every refresh restores one physical row across all populated banks. The educational scheduler uses an explicit interval; the actual oscillator and arbitration are described below.

Row age tracks refresh coverage; it does not certify that a byte was initialized.

Within 2 msExpiredOutline: next row
Current CPU address map
CPU rangePhysical bankRAS lineState

02 / UNDERSTAND

The circuit, from bus to cell

What the board presents to the CPU

The complete board supplies 65,536 byte locations on a 16-bit address bus. Each of its 32 DRAMs stores 16,384 bits. Eight chips operating in parallel form one 16 KB byte-wide bank; four banks provide 64 KB. This is fixed jumper mapping within the 64 KB space, not software bank switching beyond it.

The S-100 data paths are separate: CPU DO0–DO7 enter buffers and become MDO0–MDO7, the DRAM write inputs. DRAM outputs MDI0–MDI7 go into IC12, whose outputs drive CPU DI0–DI7. “DO” and “DI” are named from the processor's point of view.

The four physical chip rows are A (top), B, C and D (bottom). Their RAS numbers run in the opposite order: A uses /RAS3, B /RAS2, C /RAS1, and D /RAS0. Within any bank, chip suffix 0 stores bit 0, suffix 7 bit 7. Shared data outputs require that ordinary accesses activate only one bank.

S-100 address & controls↓Decode + 3242 multiplexing + delay timing↓One bank × eight 1-bit DRAMs↓IC12 data holding register → S-100 DI

References: supplied manual, PDF pages 17–20, drawings A1066–A1069. A slash in this guide means active-low; the internal signals named RAS and CAS on A1065 are active-high, before the final inversion/decoding.

The address is multiplexed—and inverted

Each DRAM has only seven address pins, MA0–MA6. It latches a seven-bit row on the falling edge of /RAS, then a seven-bit column on the falling edge of /CAS. IC19, the Intel 3242, supplies these two words or its internal refresh count. Its outputs invert the input address bits. The board also routes CPU A13 to the multiplexer’s row input A6, and CPU A6–A12 to its seven column inputs. Intel 3242 datasheet.

DRAM pin busRow phase (ROW SEL = 1)Column phase (ROW SEL = 0)
MA0–MA5NOT CPU A0–A5NOT CPU A6–A11
MA6NOT CPU A13NOT CPU A12
r = (address & 0x3F) | ((address >> 7) & 0x40)
c = (address >> 6) & 0x7F
physical row = r XOR 0x7F
physical column = c XOR 0x7F

At 5A3C, r = 3C and c = 68. The actual address pins carry 43 at /RAS, then 17 at /CAS. At 5A7C, only A6 changes; it changes the column, not the row. At 7A3C, A13 changes; it changes the row’s high bit. Inversion changes physical placement but never complements the stored data byte.

The 3242 is labeled “14” inside its symbol on A1066, conflicting with the LS244 IC14 on that same sheet. The parts layout identifies the 3242 as IC19; that is the designation used here.

Which bank responds, and where memory disappears

IC25, a 74LS156 dual decoder, decodes A15:A14 into four active-low 16 KB block signals. Jumper-selected outputs pull down the top or bottom selection buses. These are open-collector outputs, so tying selected decoder outputs together is intentional. The 10 kΩ resistors pull the buses high when no selected output is active. A push-pull decoder would not be an equivalent replacement. TI 74LS156 datasheet.

One decoder section also selects a block in which IC24 decodes A13:A11 into eight 2 KB segments. A deselect jumper suppresses the board in that segment. IC21 and IC20 combine address selection, the hole mask, and PHANTOM. Pulling PHANTOM low disables the board; its 10 kΩ pull-up normally permits operation.

selected = (top match OR bottom match)
           AND NOT selected 2 KB hole
           AND PHANTOM high
/WE = NOT (MEMW AND selected)
/OE(IC12) = NOT (DBIN AND MEMR AND selected)

16/32 KB mode: straps 2 and 4 make a top-group match select bank A and a bottom-group match bank B. Each populated bank can therefore be placed at any one 16 KB boundary.

48/64 KB mode: straps 1 and 3 make A14 select one of two banks within a pair. TOP ROWS is the bottom-selection bus: it is high for a top-pair access and low for a bottom-pair access. IC22 decodes that signal and A14. A standard complete map is:

Address blockJumpersA14Physical bank
0000–3FFFTop 00B / RAS2
4000–7FFFTop 11A / RAS3
8000–BFFFBottom 20D / RAS0
C000–FFFFBottom 31C / RAS1

This explains the manual’s adjacent-pair rule: 0+1, 1+2, 2+3 or 3+0 gives one even and one odd block. Selecting 0+2 for a pair sends both blocks to the same physical bank and aliases them. For a 48 KB board’s remaining 16 KB, an even block needs chips in physical D; an odd block needs physical C. Overlapping top and bottom selections are not an independent double-bank feature: the bottom bus controls the pair selection.

Example: SOL-20. Set the deselect block to 3 and the segment mask to 0 and 1. C000–C7FF and C800–CFFF stop responding; D000–FFFF remains available. A disabled area returns high impedance, not a guaranteed FF value. Another board or bus pull-ups determine what the CPU sees.

With the manual’s 2650 “C” header arrangement, the block decoder uses A14:A13 instead, giving 8 KB boundaries. The special OPREQ and clock wiring also differs. The interactive model deliberately does not emulate a 2650 bus master.

How an access becomes a timed DRAM cycle

IC15 and IC16 are wired DIP headers, not active ICs. They adapt CPU timing and select the upper address inputs. With the standard 8080 header connections, the read part of ACC TRIG is PCLK AND SYNC; MEMW also triggers an access. The Z80 header uses MEMR for its read trigger. PCLK normally comes from inverted Φ2; the manual lists alternate Z80 clock arrangements. IC4 samples M1 at PCLK to make M1 CYC.

  1. Start. IC9 and the fast NAND gates of IC10 turn an access assertion into one TRIG pulse. At Δ1 the trigger latch suppresses further pulses until that request is released. An extended CPU request must not cause repeated writes.
  2. Row strobe. TRIG sets the first half of IC3, raising internal RAS. IC22 and IC23 pull only the selected bank’s /RAS low. The seven row bits were already present.
  3. Address switch. IC26 detects that a physical /RAS has fallen. IC20’s selectable inverter chain and IC17 then lower ROW SEL after a delay. IC19 switches from row to column data, preserving row-address hold time first.
  4. Column strobe. Delay-line tap Δ1 clocks the other half of IC3. Internal CAS rises; IC10 drives the common /CAS0–3 low. The active bank now has a complete cell address.
  5. Data. A read produces one bit per chip on MDI0–7. A write uses buffered MDO0–7 with /WE low; data must satisfy the installed DRAM’s setup and hold requirements around the write-latching edge.
  6. Capture and finish. Δ3, its delayed versions, IC4 and the timing straps terminate RAS/CAS. IC12 preserves the read byte after the DRAM outputs release. CYC END also gives the refresh controller a scheduling point. Precharge is required before another RAS pulse.

With a 74LS373 at IC12, its latch-enable is effectively NOT REF CYC AND selected AND RAS: it follows valid DRAM data while enabled and holds it when the window closes. A 74LS374 instead samples on a positive edge derived from Δ3 DELAYED. Straps 12/13 must match the installed part. TI 373/374 datasheet.

The latch’s capture control is separate from its bus output enable. Refresh inhibits capture but is not an input to /OE. During a long selected CPU read, IC12 can keep driving the previously captured byte while the DRAM array is refreshed. Refresh need not force the S-100 data bus to high impedance.

The manual specifies board access times of 450 ns maximum for the 2 MHz board and 250 ns maximum for the 4 MHz board, a listed cycle time of 480 ns maximum, no generated wait states, and DMA at 1 MHz maximum. Those are board specifications, not measured timings here. The text calls for 4116-25 and 4116-20 respectively; the older array drawing says 2117-4 or equivalent. Starred logic positions require 74S parts for the 4 MHz version. Changing only the RAM speed grade does not establish 4 MHz operation.

The STTLDM-401 is drawn with delay taps Δ1, Δ3 and Δ4. No tap delays or tolerance table is included. Straps 5–8 choose end/capture timing; straps 9–11 choose the address-switch delay. The simulator therefore shows phases rather than fabricating exact strobe widths.

Refresh is a second user of the same array

A DRAM read senses and restores an entire internal row even though only one column is presented as data. The 2117 family requires all 128 row addresses to be refreshed within 2 ms. The manual’s 15 µs maximum “refresh period” must be read as a row-service interval: 128 × 15 µs = 1.920 ms, leaving 80 µs against that full-array retention requirement. It is not a claim that an entire array sweep takes 15 µs. Intel 2117 datasheet.

Three Schmitt inverters in IC11, an 82 Ω resistor and a 0.1 µF capacitor form a free-running oscillator. Its edge sets the pending-refresh latch in IC6, producing ALLOW REF. The RC product is 8.2 µs, but that alone is not the oscillator period; thresholds and propagation matter.

At CYC END, the other IC6 flip-flop samples NOT(M1 CYC AND ALLOW REF). A pending request at an instruction-fetch opportunity makes REF CYC high. It clears the request latch, selects IC19’s internal refresh address, and starts a timed refresh operation through IC9/IC10. At completion, REF CYC drops and the 3242 count input advances the row counter. This is a board-local address counter, not the Z80’s refresh-address register.

IC1, a 74LS161, is a watchdog for prolonged waits or reset. Both count enables receive ALLOW REF; its active-low load is NOT(RDY AND /RST), with parallel inputs tied to zero. During normal ready operation it repeatedly loads zero. When RDY or /RST is low, it can count pending-request PCLK edges. Terminal count 15 asserts FORCE REF through IC7, independently forcing the refresh flip-flop into its refresh state. REF CYC then clears the counter. It is not simply a free-running divide-by-16 refresh generator. TI 74LS161 datasheet.

This explains reset straps 14/15: pin 75 or pin 99 must supply the reset signal appropriate to the host. The manual specifically connects a wrong choice with failure to retain data through reset. Power and the required PCLK activity must remain available; this is not battery-backed memory.

/REF RAS = NOT (REF CYC AND internal RAS)
/RAS(bank) = IC22 bank output AND /REF RAS

During refresh, /REF RAS goes low and all four /RAS outputs are forced low through IC23, overriding normal memory selection. Even holes and PHANTOM-disabled areas are restored. Normal reads and writes also refresh their addressed row, but a CPU loop touching a small area does not replace systematic refresh.

Unresolved detail in the actual drawing: CAS during refresh.

A1065 takes the CAS flip-flop’s D input to +5 V and clocks it from Δ1. Its common /CAS output has no visible REF CYC inhibition. A1067 simultaneously asserts all four /RAS lines during refresh, and A1068 joins the four banks’ corresponding data outputs. Taken literally, the drawings permit simultaneous read-output driving during refresh. Blocking IC12 capture protects the saved CPU byte but does not remove contention on the internal MDI wires.

The /WE gate also has no explicit REF CYC input. If a selected MEMW remained asserted into a refresh with CAS active, the literal logic could enable a write in multiple banks. Check MEMW and /WE alongside the refresh strobes, especially during waits; the supported CPU timing may be essential to avoiding this overlap.

Consequently this guide does not label the board’s implementation “proven RAS-only refresh.” The simulator pulses common CAS in its as-drawn refresh trace and marks the internal data as indeterminate. Row restoration is modeled; output currents and contention are not. Check a real board’s CAS waveform, modifications and exact DRAM type before deciding whether the drawing omits a detail. Intel recommends RAS-only refresh for wired-common DRAM outputs. This is a specific verification target, not proof that every shipped board is defective.

Component index

ReferenceDeviceRole in this board
IC174LS161Pending-refresh timeout during wait/reset; terminal carry forces refresh.
IC274LS00Refresh state logic, refresh RAS and reset/ready qualification.
IC374S74Separate active-high RAS and CAS state flip-flops.
IC474S74M1 sampling and delayed cycle termination.
IC5SpareNo active function shown.
IC674S74Pending refresh and active refresh state.
IC774LS04Δ3 delay stages and FORCE REF inversion.
IC8STTLDM-401Tapped timing delay for the internal memory cycle.
IC974LS74Access/refresh trigger pulse shaping and rearming.
IC1074S00Fast trigger combining and CAS inversion/drive.
IC1174LS14RC refresh oscillator.
IC12373 or 374Eight-bit read holding register and tri-state bus output; LS or S as specified.
IC1374LS10Separate read-output enable and latch-capture qualification.
IC14, IC2774LS244Address/control and write-data buffering; IC14 also handles DO7.
IC15, IC16Wired headersProcessor clock, trigger, and address-boundary adaptation.
IC1774LS14Clock/MEMW inversion and final ROW SEL shaping.
IC1874S20Combines processor read timing and MEMW into ACC TRIG.
IC19Intel 3242Inverting row/column/refresh multiplexer and 7-bit refresh counter.
IC2074LS04Select inversion and adjustable delay before changing row to column.
IC2174LS10Block/hole/PHANTOM selection and DRAM /WE.
IC2274LS138 / 74S138Selects one of four physical bank RAS paths.
IC2374LS08Four AND gates combine bank RAS with forced refresh RAS.
IC24, IC2574LS1562 KB deselection and main address decoding; open-collector jumper buses.
IC2674LS13Detects any asserted physical RAS for address-switch timing.
A0–D72117 / 4116 family32 one-bit-wide DRAMs in four eight-chip banks.
RA0110 kΩ resistor packPulls up the eight internal MDI lines when DRAM outputs release.

DRAM supplies on A1068 are +5 V on pin 9, +12 V on pin 8, −5 V on pin 1, and ground on pin 16. The placement sheet shows 7805 and 7812 regulators, a 1N4733 zener, a 680 Ω resistor, bulk capacitors and local bypass capacitors. The zener/resistor are consistent with producing the negative bias supply, but these five sheets do not contain a complete power-supply wiring schematic. Verify the actual negative-rail circuit rather than inferring every connection from placement.

Decoupling matters because many DRAM sense amplifiers switch together, especially when all banks refresh. Power faults can look like data or timing faults. Board insertion/removal and component changes must be done with power removed and supplies discharged, as the manual specifies.

A practical sequence of tests

First record the fitted DRAM type, IC12 type, speed version, IC15/16 header wiring, straps 1–15 and all address/hole jumpers. The schematic depicts alternatives, not one universally correct strap configuration.

  1. Verify supplies at the DRAM pins. Confirm +5, +12 and −5 V relative to pin 16, then check ripple during accesses and refresh. Check the installed part’s voltage tolerances.
  2. Check decode at boundaries. Probe MEM SEL’D at 3FFF/4000, 7FFF/8000 and BFFF/C000. For a SOL-20 hole, also check C7FF/C800 and CFFF/D000. PHANTOM low should disable external access without stopping refresh.
  3. Single write/read. Write A5 to 5A3C, read back A5; then try 5A. Under the standard 64 KB map, only /RAS3 should assert on ordinary accesses. MA should change from 43 to 17. /WE goes low on the write; IC12 /OE is low only during the qualified read.
  4. Test data bits. Write 01,02,04,08,10,20,40,80 and complements at safe locations in every bank. A repeatable bit failure in one bank implicates that bank’s corresponding DRAM/socket; the same bit across all banks points toward shared MDO, MDI, buffers or IC12.
  5. Test address independence. Use address-dependent patterns and walking address bits. Compare 5000/5040 for A6 and 5000/7000 for A13. Compare 1234,5234,9234,D234 with values 11,22,33,44 to expose bank aliasing.
  6. Test retention without refreshing the target by reading it. Fill the target, execute elsewhere for several milliseconds, and only then verify. Repeat with reset and a supported wait condition. A tight read loop at the tested addresses can mask a broken refresh system.
  7. Probe the refresh chain. Check oscillator edges, ALLOW REF, M1 CYC, CYC END, REF CYC, IC1 carry, and IC19 RF/count. During REF CYC inspect all four /RAS lines and the common /CAS line together. Confirm that 128 distinct row addresses are serviced within the installed DRAM’s refresh requirement.
  8. Measure margins. Verify row/column setup and hold, RAS/CAS pulse widths, precharge and IC12 capture relative to data validity using the fitted parts’ datasheets. “No wait states” assumes a compatible CPU bus waveform; it is not permission for arbitrary DMA timing.

The manual’s 8080 test lives in known-good RAM at 0000 and normally tests 4000–7FFF. It writes and verifies a changing byte pattern, offsets it and repeats. On failure it stores the read byte at 0000, expected byte at 0001, low failing-address byte at 0002 and high byte at 0003, then halts. For 32 KB, the manual changes the end comparison bytes at 0016 and 002C to C0. Avoid testing over the running program, stack or active ROM mappings. The printed 2650 test has separate STARTT/ENDT limits and runs from display memory.

03 / VERIFY

Executable model checks

These checks validate the reconstruction’s functional rules, including deliberate fault cases. They do not certify the electrical board. Tests use isolated model instances and leave your experiment untouched.

04 / EVIDENCE

What is known, and what still needs a probe

Primary board evidence

Central Data Corporation, Hardware Reference Manual: 64K RAM Board, copyright 1978, user-supplied cdc64k.pdf (20 PDF pages). Printed pages 1–7 describe configurations and specifications; PDF pages 16–20 contain A1065 timing/refresh, A1066 buffers, A1067 RAS gating, A1068 memory array and A1069 placement. The original PDF is not redistributed here.

Analysis transcribes wiring and derives behavior from it. The manual’s installation and test instructions are source material, not commands executed on a real system.

Component evidence

Model boundaries

  • Functional memory, exact address permutation, bank decoding, holes, PHANTOM and synthetic faults are modeled.
  • Timing traces are symbolic. Delay taps, analog loading, rise/fall time, metastability, simultaneous request collisions and gate hazards are not simulated.
  • The retention demo uses a configurable periodic scheduler, not an emulated 8080/Z80 instruction stream or the actual RC oscillator. IC1 watchdog truth is separately tested.
  • 2 ms is a conservative model retention limit based on the 2117 source. Expired data becomes “unknown”; no actual decay rate or bit pattern is predicted. Refresh never reconstructs data already lost.
  • Manual cycles do not advance the retention clock. “Initialize all” writes a known educational fixture into the model, not a hardware power-up state.
  • The refresh counter starts at an arbitrary zero in the model. Actual startup phase is unspecified.
  • CAS during refresh and the incomplete power diagram remain explicit verification items. The model does not conceal those gaps with a claimed electrical simulation.
  • 373/374 behavior is explained, but a sub-gate-time capture race cannot be resolved without measured or specified delays.

Reconstruction v1 · built from A1065–A1069 · no hardware measurements