1. Purpose and Scope
The firmware subsystem provides 128 KiB of nonvolatile storage using four Atmel AT28C256-15PU EEPROMs connected to the 16-bit MC68EC000 data bus.
This page documents the electrical interface between the firmware EEPROMs and the CPU bus. It defines the EEPROM address and data wiring, device control signals, firmware read/write policy, bus-cycle completion, timing requirements, electrical loading, and local PCB implementation.
Global address ownership is defined by Bus and Decode. That logic provides the following byte-specific active-low firmware selection signals:
ROM0_UDS_n
ROM0_LDS_n
ROM1_UDS_n
ROM1_LDS_n
These signals identify the firmware half and CPU byte lane
participating in a bus cycle. This page determines how those
selections control the physical AT28C256 /CE,
/OE, and /WE inputs.
A chip select identifies the device; output enable controls whether it drives the bus. During a write, the CPU supplies the data and all EEPROM outputs must be disabled.
Timing below uses the AT28C256-15 read limits and the MC68EC000 10 MHz
bus specifications. The read-delay circuit feeds
ROM_DTACK_n into the shared completion tree in
Bus and Decode and takes its clock
from a spare U_DRAM_CLK_BUF channel. Board timing
verification remains before construction.
A signal ending in _n, or written with a leading slash,
is active low: 0 means asserted and 1 means inactive. HI and LO name
byte lanes; ROM0 and ROM1 name the two 64 KiB halves.
2. Physical EEPROM Organization
The firmware store uses four Atmel AT28C256-15PU EEPROMs. Each device is organized as 32K x 8 bits. The four devices are arranged as two 32K x 16-bit firmware halves.
| Device | CPU data bus | Firmware half | Capacity |
|---|---|---|---|
ROM0_HI |
D15..D8 | 0 | 32 KiB |
ROM0_LO |
D7..D0 | 0 | 32 KiB |
ROM1_HI |
D15..D8 | 1 | 32 KiB |
ROM1_LO |
D7..D0 | 1 | 32 KiB |
Within each half, the high-byte and low-byte EEPROMs share the same address and are selected independently according to the MC68EC000 byte strobes. Together, one high/low pair behaves as a 32K x 16-bit memory.
Each high/low pair stores 32,768 words, or 64 KiB. Two pairs provide 128 KiB. A word read selects both devices in one pair.
All four EEPROMs receive the same fifteen word-address bits:
CPU A1 -> EEPROM A0
CPU A2 -> EEPROM A1
...
CPU A15 -> EEPROM A14
CPU A16 is not connected to an EEPROM address input. It
selects firmware half 0 or firmware half 1 through the previously
defined firmware-half selection logic.
The physical EEPROM organization is identical for the permanent firmware mapping and the temporary boot alias. Both address ranges access the same four devices; only the upstream address-selection logic differs.
3. CPU Address Wiring
Each AT28C256 has fifteen address inputs, A0..A14,
selecting one of 32,768 byte locations. The firmware interface maps
them directly from CPU A1..A15.
CPU A1 -> AT28C256 A0
CPU A2 -> AT28C256 A1
CPU A3 -> AT28C256 A2
...
CPU A15 -> AT28C256 A14
This wiring is identical on ROM0_HI,
ROM0_LO, ROM1_HI, and ROM1_LO.
| CPU address lines | EEPROM address lines | EEPROM PDIP pins, in signal order | Applies to |
|---|---|---|---|
A1..A8 |
A0..A7 |
10, 9, 8, 7, 6, 5, 4, 3 | All four EEPROMs |
A9..A15 |
A8..A14 |
25, 24, 21, 23, 2, 26, 1 | All four EEPROMs |
Each range maps in ascending order. CPU A1 connects to
EEPROM A0 on pin 10, and CPU A15 connects to
EEPROM A14 on pin 1.
CPU A0 is exposed by the processor but is not wired to an
EEPROM address input or to firmware-half selection. On the 16-bit bus,
the active-low /UDS and /LDS strobes select
the upper and lower EEPROM byte lanes.
CPU word address
|
+-- A1..A15 -> EEPROM A0..A14
|
+-- /UDS -> high-byte device selection
|
+-- /LDS -> low-byte device selection
One EEPROM address therefore corresponds to one 16-bit CPU word. The high-byte and low-byte EEPROMs in a firmware half receive the same address; the byte strobes determine which device participates in the transfer.
CPU A16 connects only to the firmware-half decode in
Bus and Decode. It does not connect
to an AT28C256 address pin.
A16 = 0 -> firmware half 0
A16 = 1 -> firmware half 1
No address translation occurs inside the firmware subsystem. The same physical EEPROM address wiring is used through the permanent firmware mapping and through the temporary boot alias.
4. CPU Data-Bus Wiring
The two upper EEPROMs connect to D15..D8, and the two
lower EEPROMs connect to D7..D0. Every range below maps
in ascending signal order.
| EEPROMs | EEPROM data signals | EEPROM PDIP pins, in signal order | CPU data signals | Byte strobe |
|---|---|---|---|---|
ROM0_HI, ROM1_HI |
I/O0..I/O7 |
11, 12, 13, 15, 16, 17, 18, 19 | D8..D15 |
/UDS |
ROM0_LO, ROM1_LO |
I/O0..I/O7 |
11, 12, 13, 15, 16, 17, 18, 19 | D0..D7 |
/LDS |
An upper EEPROM's I/O0 connects to D8 and
I/O7 to D15. A lower EEPROM's
I/O0 connects to D0 and I/O7 to
D7. The decoder outputs ROM0_UDS_n,
ROM0_LDS_n, ROM1_UDS_n, and
ROM1_LDS_n connect to the matching EEPROM
/CE pins.
The control connections below determine when these data pins drive the bus. Both EEPROMs on a given byte lane share its eight CPU wires.
Microchip, AT28C256 datasheet, sections 1 and 2; and Bus and Decode, firmware bank and byte-lane selection.
5. Permanent and Boot-Alias Address Mapping
The 128 KiB physical firmware image has two CPU mappings. The permanent mapping is always available. The low-address boot alias is available only while the motherboard boot overlay is enabled.
| CPU address range | Physical firmware | Availability |
|---|---|---|
$FE0000-$FEFFFF |
Firmware half 0 | Permanent |
$FF0000-$FFFFFF |
Firmware half 1 | Permanent |
$000000-$00FFFF |
Firmware half 0 | Boot overlay enabled |
$010000-$01FFFF |
Firmware half 1 | Boot overlay enabled |
These ranges do not represent separate firmware stores. The permanent mapping and boot alias access the same four EEPROMs, so a corresponding address reads the same stored byte through either mapping.
$000000-$00FFFF --+
+--> ROM0_HI + ROM0_LO
$FE0000-$FEFFFF --+
$010000-$01FFFF --+
+--> ROM1_HI + ROM1_LO
$FF0000-$FFFFFF --+
Bus and Decode owns address qualification and boot-overlay state. The EEPROM interface receives the same firmware-cycle and byte-lane signals for either mapping; it does not distinguish a permanent access from a boot-alias access.
6. Firmware-Half Selection
CPU address bit A16 selects the 64 KiB half of the
physical firmware store during an active firmware cycle.
A16 = 0 -> firmware half 0
A16 = 1 -> firmware half 1
The address decoder supplies the active-low half-selection signals
ROM_BANK0_n and ROM_BANK1_n. Their
definitions are:
ROM_BANK0_n = ROM_CYCLE_n OR A16
ROM_BANK1_n = ROM_CYCLE_n OR A16_n
| Condition | ROM_BANK0_n |
ROM_BANK1_n |
EEPROM half eligible for byte selection |
|---|---|---|---|
| No firmware cycle | 1 | 1 | None |
Firmware cycle, A16 = 0 |
0 | 1 | ROM0_HI and ROM0_LO |
Firmware cycle, A16 = 1 |
1 | 0 | ROM1_HI and ROM1_LO |
Only one half is eligible during a valid firmware access. The byte-lane signals in the next section decide whether its upper EEPROM, lower EEPROM, or both EEPROMs are selected.
7. Byte-Lane Selection
Each firmware half contains an upper EEPROM on CPU
D15..D8 and a lower EEPROM on D7..D0. The
MC68EC000's active-low /UDS and /LDS
strobes select the participating byte lane.
HI device -> CPU D15..D8 -> /UDS
LO device -> CPU D7..D0 -> /LDS
The decoder combines each active-low bank select with its matching byte strobe:
ROM0_UDS_n = ROM_BANK0_n OR UDS_n
ROM0_LDS_n = ROM_BANK0_n OR LDS_n
ROM1_UDS_n = ROM_BANK1_n OR UDS_n
ROM1_LDS_n = ROM_BANK1_n OR LDS_n
| Signal | Physical EEPROM | CPU data lane | AT28C256 input |
|---|---|---|---|
ROM0_UDS_n |
ROM0_HI (U_ROM0U) |
D15..D8 |
/CE, pin 20 |
ROM0_LDS_n |
ROM0_LO (U_ROM0L) |
D7..D0 |
/CE, pin 20 |
ROM1_UDS_n |
ROM1_HI (U_ROM1U) |
D15..D8 |
/CE, pin 20 |
ROM1_LDS_n |
ROM1_LO (U_ROM1L) |
D7..D0 |
/CE, pin 20 |
/UDS |
/LDS |
Selected EEPROMs |
|---|---|---|
| Active | Active | Upper and lower EEPROMs |
| Active | Inactive | Upper EEPROM only |
| Inactive | Active | Lower EEPROM only |
| Inactive | Inactive | None |
The chip-enable signals identify the EEPROMs participating in the
cycle. The control-signal section defines the separate
/CE, /OE, and /WE behavior that
permits a selected EEPROM to drive the CPU data bus.
Bus and Decode, firmware ROM cycle, bank, and byte-lane selection; and AT28C256 datasheet, section 2.
8. EEPROM Control-Signal Architecture
Each AT28C256 has three active-low control inputs:
/CE, /OE, and /WE. They have
separate jobs. The device reads only when /CE and
/OE are low and /WE is high. Its outputs are
high-impedance when either /CE or /OE is
high.
| AT28C256 input | Connection | Function |
|---|---|---|
/CE, pin 20 |
The device-specific ROM0_UDS_n,
ROM0_LDS_n, ROM1_UDS_n, or
ROM1_LDS_n signal
|
Selects the participating EEPROM and byte lane. |
/OE, pin 22 |
ROM_OE_n = READ_n, shared by all four EEPROMs
|
Enables EEPROM data outputs only during a CPU read cycle. |
/WE, pin 27 |
+5 V on all four EEPROMs | Permanently disables EEPROM programming. |
Chip Enable
The byte-specific decoder outputs already include firmware-cycle,
firmware-half, and CPU byte-lane qualification. They connect directly
to the matching AT28C256 /CE pin:
ROM0_UDS_n -> ROM0_HI /CE
ROM0_LDS_n -> ROM0_LO /CE
ROM1_UDS_n -> ROM1_HI /CE
ROM1_LDS_n -> ROM1_LO /CE
Output Enable
ROM_OE_n is a local name for the existing
READ_n net. It adds no inverter or buffer:
ROM_OE_n = READ_n = NOT R/W
R/W = 1: READ_n = 0, EEPROM /OE inputs low
R/W = 0: READ_n = 1, EEPROM /OE inputs high
During a CPU read, a selected EEPROM can drive its byte lane. During a
CPU write, READ_n holds every EEPROM /OE
high, so the CPU is the only defined data-bus driver. An EEPROM whose
/CE is inactive remains high-impedance even while the
shared READ_n signal is low.
Write Enable
Every EEPROM /WE pin connects directly to +5 V:
ROM0_HI /WE -> +5 V
ROM0_LO /WE -> +5 V
ROM1_HI /WE -> +5 V
ROM1_LO /WE -> +5 V
No CPU control signal, address-decode output, or motherboard logic
signal connects to an EEPROM /WE input. Since a byte or
page write needs a low pulse on /WE or
/CE with the other write condition satisfied and
/OE high, the permanent high /WE connection
prevents the CPU from initiating a programming cycle.
Microchip, AT28C256 datasheet, sections 2 and 6; and Bus and Decode, firmware bank, byte-lane, and read qualification.
Firmware Write Policy
The motherboard firmware store is hardware read-only during normal
operation. The MC68EC000 cannot program, erase, or otherwise modify
the four AT28C256 EEPROMs because every /WE input is
permanently inactive.
all AT28C256 /WE inputs = +5 V
Firmware updates require an external EEPROM-programming procedure. This document does not define the programming fixture, socket choice, or removal procedure.
A CPU write to a firmware address cannot create an EEPROM
programming pulse. READ_n is high during that write, so
EEPROM output drivers are disabled and do not contend with the CPU
on the data bus.
Firmware writes have defined bus behavior. The firmware interface
does not assert ROM_DTACK_n for a write; the
motherboard timeout therefore ends the unacknowledged cycle with
/BERR. A firmware write neither completes normally nor
alters EEPROM contents.
Bus and Decode, firmware write and completion behavior; and AT28C256 datasheet, section 6.
9. Read-Cycle Behavior
Firmware reads use the AT28C256 asynchronous interface. Each EEPROM
receives its own byte-specific /CE; all four share
ROM_OE_n. Every /WE stays high.
ROM_OE_n = READ_n = NOT R/W
CPU read: R/W = 1, /OE = 0, /WE = 1
CPU write: R/W = 0, /OE = 1, /WE = 1
A device drives data only with /CE = 0,
/OE = 0, and /WE = 1. An unselected EEPROM
stays high-impedance even when the common output enable is low. This
follows the AT28C256 operating-mode table, section 6.1.
A 16-bit read asserts both byte strobes: the selected HI device drives
D15..D8 and the LO device drives D7..D0. An
even-address byte read uses HI; an odd-address byte read uses LO. The
firmware subsystem leaves the other lane undriven on a byte read.
Read Access Timing
| Parameter | Limit | Measured from |
|---|---|---|
tACC |
150 ns maximum | Last address transition to valid output |
tCE |
150 ns maximum | /CE assertion to valid output |
tOE |
70 ns maximum | /OE assertion to valid output |
tDF |
50 ns maximum |
/CE or /OE release to high-impedance;
characterized at 5 pF
|
tOH |
0 ns minimum | First address or enable change to output change |
These are parallel requirements with different starting events. Evaluate each selected EEPROM at its pins:
t_data_valid = max(t_address_valid + 150 ns,
t_CE_low + 150 ns,
t_OE_low + 70 ns)
The read-waveform note allows /CE to follow the address
by tACC - tCE without extending address access time. That
allowance is zero for the -15 part. Decode delay adds to the path
through chip enable; it cannot be absorbed into the 150 ns address
specification.
CPU address and control
-> address / overlay decode -> half select -> byte select
-> EEPROM /CE -> valid EEPROM data -> valid CPU data
Selected read request -> clocked delay -> ROM_DTACK_n
-> shared completion tree -> CPU /DTACK -> CPU data sampling
The delay runs alongside the EEPROM access. It does not detect data validity. Section 11 checks that it waits long enough. Source: AT28C256, sections 6.2-6.5.
10. ROM /DTACK Generation
ROM_DTACK_n acknowledges a selected firmware read after
its data has had time to settle. It is one completion input to the
U_DTACK_A SN74F21N stage of the shared
acknowledgement tree in
Bus and Decode. Firmware writes
receive no ROM acknowledgement and reach the motherboard timeout,
which asserts /BERR. The timeout and all other responders
must preserve the firmware address ownership defined in Bus and
Decode.
Read-Request Qualification
The names below are aliases for the existing byte-select wires. They do not add another decode stage.
ROM0_HI_CE_n = ROM0_UDS_n
ROM0_LO_CE_n = ROM0_LDS_n
ROM1_HI_CE_n = ROM1_UDS_n
ROM1_LO_CE_n = ROM1_LDS_n
ROM_BYTE_CYCLE_n = ROM0_HI_CE_n AND ROM0_LO_CE_n
AND ROM1_HI_CE_n AND ROM1_LO_CE_n
ROM_READ_REQ_n = ROM_BYTE_CYCLE_n OR ROM_OE_n
ROM_READ_ACTIVE = NOT ROM_READ_REQ_n
| Any EEPROM selected? | R/W | ROM_BYTE_CYCLE_n | ROM_OE_n | ROM_READ_REQ_n |
|---|---|---|---|---|
| Yes | 1 (read) | 0 | 0 | 0 |
| Yes | 0 (write) | 0 | 1 | 1 |
| No | Either | 1 | Either | 1 |
Selected Delay Architecture
Use two SN74AHCT74N dual flip-flops as a four-stage shift
register on a buffered 10 MHz clock. Stage 1 samples
ROM_READ_ACTIVE; each later stage samples the preceding
stage. Clear all stages between bus cycles and during board reset. Tie
every asynchronous preset high.
ROM_CLK = CPU_CLK_10 via U_DRAM_CLK_BUF spare channel
ROM_AS_ACTIVE = NOT AS_n
ROM_SHIFT_CLR_n = RESET_n AND ROM_AS_ACTIVE
On each rising ROM_CLK edge, when ROM_SHIFT_CLR_n = 1:
Q1 <- ROM_READ_ACTIVE
Q2 <- Q1
Q3 <- Q2
Q4 <- Q3
When ROM_SHIFT_CLR_n = 0:
Q1 = Q2 = Q3 = Q4 = 0
ROM_ACK_BLOCK_n = ROM_READ_REQ_n OR Q4_n
ROM_DTACK_n = AS_n OR ROM_ACK_BLOCK_n
All four assignments use the old stage values. In normal operation,
the first sampled 1 reaches Q4 after three further clock periods. The
request must stay active throughout the read. A write or a cycle with
no selected byte keeps ROM_ACK_BLOCK_n high. The final OR
gate releases the acknowledgement directly from AS_n,
without waiting for the shift register to clear.
This is not a fixed CPU wait count. The decoded request is not phase-aligned with the clock. Stage 1 can violate setup time; stages 2-4 provide settling time. Recovery at clear release, clock skew, and metastability are on the verification list before the calculated latency is treated as a hardware guarantee. No RC delay or chain of nominal gate delays sets the read duration.
Through-Hole Gate and Pin Map
These are new local reference designators. All parts use +5 V and
ground. The existing READ_n inverter and byte-select
gates remain upstream.
| Device / gate | Input connections | Output / use |
|---|---|---|
U_ROM_SELECT CD74HCT21E, gate 1 |
Pins 1, 2, 4, 5: the four CE aliases in the order above | Pin 6: ROM_BYTE_CYCLE_n |
U_ROM_OR SN74AHCT32N, gate 1 |
Pin 1: ROM_BYTE_CYCLE_n; pin 2:
ROM_OE_n
|
Pin 3: ROM_READ_REQ_n |
U_ROM_INV SN74HCT04N, gate 1 |
Pin 1: ROM_READ_REQ_n |
Pin 2: ROM_READ_ACTIVE |
U_ROM_INV gate 2 |
Pin 3: AS_n |
Pin 4: ROM_AS_ACTIVE |
U_ROM_CLEAR SN74HCT08N, gate 1 |
Pin 1: RESET_n; pin 2: ROM_AS_ACTIVE
|
Pin 3: ROM_SHIFT_CLR_n |
U_ROM_DELAY_A SN74AHCT74N |
Pin 2 (1D): ROM_READ_ACTIVE; pin 12 (2D): pin 5
(Q1)
|
Pin 5: Q1; pin 9: Q2 |
U_ROM_DELAY_B SN74AHCT74N |
Pin 2 (1D): U_ROM_DELAY_A pin 9 (Q2); pin 12 (2D): pin 5 (Q3) | Pin 5: Q3; pin 9: Q4; pin 8: Q4_n |
| Both delay packages |
Pins 3, 11: ROM_CLK; pins 1, 13:
ROM_SHIFT_CLR_n; pins 4, 10: +5 V
|
Unused complementary outputs open |
U_ROM_OR gate 2 |
Pin 4: ROM_READ_REQ_n; pin 5: Q4_n |
Pin 6: ROM_ACK_BLOCK_n |
U_ROM_OR gate 3 |
Pin 9: AS_n; pin 10: ROM_ACK_BLOCK_n
|
Pin 8: ROM_DTACK_n |
ROM_DTACK_n destination |
U_ROM_OR gate 3 output |
Bus and Decode U_DTACK_A SN74F21N pin
2
|
ROM_CLK source |
U_DRAM_CLK_BUF CD74ACT244E pin 5, a
spare channel fed from DRAM_CLK_10
|
Pins 3 and 11 of both delay packages; see dram.html |
| Supply pins | 14-pin logic: pin 14 = +5 V, pin 7 = GND | One 100 nF bypass capacitor per package |
Tie unused HCT21 inputs 9, 10, 12, 13 low; leave pin 8 open and its NC
pins 3 and 11 unconnected. Tie unused inverter inputs 5, 9, 11, 13 and
unused HCT08 inputs 4, 5, 9, 10, 12, 13 low; leave their outputs open.
U_ROM_OR gate 4 is unused: tie inputs 12 and 13 low and
leave output pin 11 open.
Motherboard Integration
ROM_DTACK_n connects to U_DTACK_A pin 2 in
Bus and Decode, the input its
completion tree already reserves for the firmware ROM. That tree uses
two SN74F21N AND stages and a dedicated
SN74F32N timeout mask (U_OR_DTACK), so the
shared acknowledgement-release path is 17.2 ns and no HCT final gate
is moved. Do not connect two push-pull outputs together.
ROM_CLK uses a spare channel of
U_DRAM_CLK_BUF, with pin 15 fed from
DRAM_CLK_10 and pin 5 driving the four flip-flop clocks,
so CPU_CLK_10 loading in
Clock and Reset is unchanged. The
20 MHz divider node is unused by the ROM circuit. See
dram.html for the buffer
pin assignment.
Sources: SN74AHCT74, sections 5 and 6, SN74AHCT32, sections 5 and 6, CD74HCT21, SN74HCT04, SN74HCT08, and CD74ACT244.
11. Read Timing Verification
Use the 10 MHz column of M68000 User's Manual, section 10.14, pages 10-24 through 10-26, which explicitly covers the MC68EC000. The generic processor table in section 10.9 is not the source for these bus limits. The separate clock-waveform questions in Clock and Reset still apply.
| Manual parameter | Requirement | Design consequence |
|---|---|---|
| #6 / #6A | Address / function code valid within 35 ns of their specified clock edges | Add CPU output delay to decode delay; the launch edges differ. |
| #9 / #12 | Read strobes assert / negate 3-35 ns after their specified edges | Check actual strobe timing at the CPU pins. |
| #15 | AS and DS inactive for at least 105 ns | Delay stages must clear before another cycle. |
| #27 | Read data setup to sampling clock low: 5 ns minimum | Data must settle before the final sampling edge. |
| #47 | Asynchronous input setup: 5 ns minimum | DTACK arriving too late for an edge must remain valid for a later edge. |
| #28 | AS / DS negation to DTACK negation: 110 ns maximum | Use the direct AS release path and the FAST shared completion tree. |
| #28A | Clock high to DTACK negation: 110 ns maximum | Also check the applicable cycle waveform; the AS-relative calculation alone does not prove this bound. |
| #29 | Data hold after AS / DS negation: 0 ns minimum | Keep address and enables valid through CPU sampling. |
| #29A | Data high-impedance after AS / DS negation: 150 ns maximum | Include byte-select release and EEPROM output-disable time. |
| #31 | DTACK assertion to data valid: 65 ns maximum | This design places data before DTACK; see note 5 for its relationship to #27 and #47. |
Worst-Case Paths
Logic calculations use 4.5 V, loads at or below 50 pF, and the -40 to +85 C limits. The board clock chain limits the complete system to 0-70 C. EEPROM read access is specified with the section 6.5 100 pF test load; output disable has a separate 5 pF condition. Trace delay, threshold differences, clock skew, and excess loading are not included in the sums below.
| Path / check | Calculation | Result |
|---|---|---|
| Address decode to EEPROM /CE | 177 + 30 + 30 ns | 237 ns from the longest address path |
| Function-code decode to EEPROM /CE | 60 + 30 + 42 + 30 + 30 + 30 + 30 ns | 252 ns from the longest qualification path |
| Address / function-code path through EEPROM | 237 + 150; 252 + 150 ns | 387 ns / 402 ns from those respective CPU pin events |
| R/W to EEPROM output via /OE | 25 + 70 ns | 95 ns; also satisfy address and /CE access |
| CE to stage-1 D | 34 + 9 + 25 ns | 68 ns maximum |
| AHCT74 timing at 50 pF | CLK-to-Q 10 ns max; clear-to-Q 13 ns max; data setup 5 ns; hold 0 ns | Clear recovery 3.5 ns; minimum CLK and clear pulse width 5 ns |
| Normal shift delay after stage 1 captures a read | 3 x 99.990 ns | 299.970 ns before stage 4, excluding propagation; conditional on valid sequential timing |
| Stage-to-stage setup | 99.990 - 10 - 5 ns | 84.990 ns available for clock skew and interconnect |
| Stage 4 to local ROM_DTACK_n | 10 + 9 + 9 ns | 28 ns after the fourth clock edge |
| Shared completion tree in Bus and Decode | 5.3 + 5.3 + 6.6 ns | 17.2 ns maximum, two SN74F21N plus the SN74F32N mask |
| AS negation to CPU DTACK negation | 9 + 5.3 + 5.3 + 6.6 ns | 26.2 ns; 83.8 ns remains under #28 before board delay |
| AS negation to cleared delay stages | 25 + 30 + 13 ns | 68 ns; 37 ns remains before the 105 ns minimum next-cycle boundary |
| DS negation to EEPROM high-impedance | 30 + 50 ns | 80 ns at the EEPROM disable-test condition; loaded-bus release remains unverified |
The 99.990 ns period is the tolerance-only fast corner of the project's 40 MHz +/-100 ppm source divided by four. This is slightly above the CPU's nominal 10 MHz rating. It does not establish a new processor speed rating or include clock aging and jitter.
For an ordinary stable read, each selected CE is low and the address is valid before the request reaches stage 1. Three further periods provide about 300 ns against a 150 ns EEPROM access requirement. Check both CEs on a word read: the AND merge detects the first selected lane, so the later lane's assertion must also fall within that budget. Address, lane selects, and direction must stay stable until completion.
For every selected byte lane:
max(t_address + 150, t_CE + 150, t_OE + 70)
+ board_data_delay + 5 ns <= CPU_data_sampling_time
For acknowledgement recognition:
CPU_DTACK_low_time + 5 ns <= chosen_CPU_falling_edge
For release:
26.2 ns + board_control_delay <= 110 ns
A conservative normal-operation estimate from stable CPU decode inputs
to CPU DTACK is
252 + 68 + 5 + 400.040 + 10 + 18 + 17.2 = 770.240 ns,
before board delay. It allows one clock period to capture the request,
then three more to reach stage 4. It is far below the documented 51.1
us timeout boundary. It is not a metastability bound or a measured CPU
bus-cycle duration.
Four flip-flops do not mean four CPU wait states. Decode delay, request phase, clock-buffer delay, and the 17.2 ns completion tree determine which falling edge recognizes DTACK. Count wait states against the S4 sampling point in the CPU bus waveform after these phases have been resolved. No zero-wait or fixed-wait claim is made.
Metastability and Clear Recovery
ROM_READ_ACTIVE is asynchronous to ROM_CLK,
so a stage-1 sample can fall in the setup or hold window and drive
U_ROM_DELAY_A stage 1 metastable. The
SN74AHCT74N datasheet does not publish the metastability
time constants, so a numeric MTBF stays a bench measurement. The
consequence is bounded on paper.
-
The request is level-held for the whole bus cycle:
ROM_READ_REQ_nstays low untilAS_nnegates. A missed or metastable stage-1 sample is re-presented on the nextROM_CLKedge. -
ROM_ACK_BLOCK_n = ROM_READ_REQ_n OR Q4_nandROM_DTACK_n = AS_n OR ROM_ACK_BLOCK_n.ROM_DTACK_ncannot assert whileROM_READ_REQ_norAS_nis high, so a stage-1 error can only postpone the acknowledgement, never assert it early or falsely. -
Three
ROM_CLKperiods separate stage 1 from stage 4, and each stage has the 84.990 ns stage-to-stage window from the budget table to settle. Each added stage multiplies the resolution time beforeQ4is first used. -
Worst case, an unresolved stage-1 sample adds one
ROM_CLKperiod of latency. That is far inside the 51.1 us bus-timeout boundary, so the cycle still ends with/DTACK, not/BERR.
ROM_SHIFT_CLR_n releases when AS_n asserts
at the start of the cycle. If that release violates the 3.5 ns
clear-recovery time before a ROM_CLK edge, stage 1 may
hold an indeterminate value for that one edge. The level-held request
and the qualified acknowledgement make this the same one-period case
as above. The open item is the numeric failure rate.
Acknowledgement Assertion and Release
ROM_DTACK_n reaches the CPU through the Bus and Decode
tree: two SN74F21N stages then the SN74F32N
timeout mask.
-
Assertion: the fourth clock edge to
ROM_DTACK_nlow is10 + 9 + 9 = 28 ns(SN74AHCT74NCLK-to-Q andU_ROM_ORgates 2 and 3). The FAST tree adds5.5 + 5.5 + 6.3 = 17.3 nstPHL, for45.3 nsfrom that edge before board delay. The CPU recognizes it on the next falling edge that meets the 5 ns#47setup; a late arrival costs one wait state, which is allowed. -
Release:
AS_nhigh toROM_DTACK_nhigh is9 nsthroughU_ROM_ORgate 3, then5.3 + 5.3 + 6.6 = 17.2 nstPLHthrough the tree.26.2 nstotal against the 110 ns#28limit leaves 83.8 ns for board delay. -
ROM_DTACK_nis the single push-pull output ofU_ROM_ORgate 3 driving oneU_DTACK_Ainput. It is not wire-ORed.
The open item is measuring these two edges at the CPU pins with the other completion inputs present.
Reset and Abort Clearing
-
ROM_SHIFT_CLR_n = RESET_n AND ROM_AS_ACTIVE. EitherRESET_nlow orAS_nhigh forces all four stages to 0 asynchronously, soQ4falls,ROM_ACK_BLOCK_nrises, andROM_DTACK_nrises before the next cycle. -
A timeout or aborted cycle negates
AS_n, which releasesROM_DTACK_nthrough itsAS_nterm and clears the shift register at the same time. No staleQ4survives into the next cycle. -
Reset during a read holds the stages cleared while
RESET_nis low. The firstROM_CLKedge after release starts a fresh capture; the chain retains no state of its own. -
ASnegation to cleared stages is25 + 30 + 13 = 68 ns, inside the 105 ns minimumAS/DS-inactive interval of#15, so the chain is always clear before the next request can be sampled.
The open item is capturing consecutive reads, reset during a read, and aborted cycles on the board to confirm the analysis.
Checks Needed Before Timing Sign-Off
These items need the assembled board. The analysis above bounds the behavior each one measures.
| Check | Evidence needed |
|---|---|
| Metastability rate |
Measure the stage-1 synchronizer failure rate, or obtain the
SN74AHCT74N time constants, and change the
synchronizer if the rate is inadequate. The failure mode is
bounded to added latency by the analysis above.
|
| Interstage hold | AHCT74 CLK-to-Q minimum is 1 ns and hold is 0 ns. Keep destination clock skew below the minimum data-path delay, including routing. |
| Clock quality |
Confirm frequency, high/low widths, and edge rates at the CPU
and all four delay clocks. ROM_CLK is two cascaded
CD74ACT244E channels from CPU_CLK_10;
check the added DRAM_CLK_10 pin-15 load and the CPU
clock-limit issue.
|
| Cycle termination | Measure #28 (26.2 ns by calculation), applicable #28A timing, #29, and #29A at the CPU pins. Exercise consecutive ROM reads, ROM-to-RAM reads, and ROM-to-write transitions. |
| Completion edges at the CPU |
Measure the ROM_DTACK_n assertion and release edges
at the CPU /DTACK pin with the other completion
inputs present, against the 45.3 ns and 26.2 ns calculated paths
plus board delay.
|
| Bus loading and release | Account for all motherboard receivers, sockets, traces, and probes; the 5 pF tDF characterization does not prove release on the assembled bus. |
| Wait count | Capture permanent and alias byte/word reads to record the wait-state count against the S4 sample point. Reset-during-read and aborted-cycle clearing is covered by the analysis above; confirm it on the board. |
Sources: Bus and Decode, timing and timeout tables, Clock and Reset, clock tolerance and loading, and the device datasheets linked in sections 9 and 10.
12. Boot-Vector Verification
Reset enables the low-address ROM overlay. The CPU reads the initial
supervisor stack pointer from bytes 0-3 and the initial program
counter from bytes 4-7. On the 16-bit bus these are four word reads,
all from
ROM0_HI and ROM0_LO with both strobes
active. The 68000 stores the most significant byte first.
| CPU word address | ROM0 chip address | HI byte | LO byte | Meaning |
|---|---|---|---|---|
$000000 |
$0000 |
SSP[31:24] | SSP[23:16] | Initial SSP, upper word |
$000002 |
$0001 |
SSP[15:8] | SSP[7:0] | Initial SSP, lower word |
$000004 |
$0002 |
PC[31:24] | PC[23:16] | Initial PC, upper word |
$000006 |
$0003 |
PC[15:8] | PC[7:0] | Initial PC, lower word |
For a 128 KiB image F, split the programmer files as
follows. Indices and lengths are bytes; each output is exactly 32 KiB.
ROM0_HI[i] = F[0x00000 + 2*i]
ROM0_LO[i] = F[0x00001 + 2*i]
ROM1_HI[i] = F[0x10000 + 2*i]
ROM1_LO[i] = F[0x10001 + 2*i]
0 <= i < 0x8000
The initial SSP must be even and allow downward stack writes into
initialized writable RAM. With the documented contiguous 4 MiB RAM,
$00400000 is a possible top-of-RAM value: the first push
writes below it. This is an example, not an assigned firmware value.
RAM initialization and refresh must work before stack use.
Prefer an even reset PC in the permanent range
$00FE0000-$00FFFFFF, pointing past the vector data to
executable code. Execute from that permanent mapping before writing
the overlay-disable register at $E80001. Low memory then
becomes RAM; initialize its exception vectors before enabling
interrupts or operations that may take an exception.
The wiring and image-split equations establish vector placement. No firmware binary or programmed-chip readback is present here, so actual SSP, reset PC, instruction bytes, and checksums remain unchecked. Read back each programmed device and reassemble the four files; the result must match the original image byte for byte. On hardware, capture the four vector fetches and the first instruction fetch.
Sources: M68000 User's Manual, sections 2, 5 and 6 (data organization, bus operation and reset), Memory Map, and System Control.
13. Electrical Compatibility and Fanout
Use the motherboard's regulated 5 V +/-5% rail. This lies within the EEPROM and HCT/AHCT 4.5-5.5 V operating ranges. All interfaces here use TTL-compatible input thresholds: high at 2.0 V or above, low at 0.8 V or below.
| Driver -> receiver | Driver VOH / VOL | High / low margin | Rated output current |
|---|---|---|---|
| MC68EC000 -> EEPROM | 4.00 V min / 0.50 V max | 2.00 V / 0.30 V | 400 uA source; 3.2 mA sink on address outputs |
| HCT -> EEPROM or AHCT | 3.84 V min / 0.33 V max | 1.84 V / 0.47 V | 4 mA source / sink at 4.5 V |
| AHCT -> HCT or CPU | 3.80 V min / 0.44 V max | 1.80 V / 0.36 V | 8 mA source / sink at 4.5 V |
| EEPROM -> MC68EC000 | 2.40 V min / 0.45 V max | 0.40 V / 0.35 V | 400 uA source / 2.1 mA sink |
The EEPROM-to-CPU high margin is only 0.40 V at its rated source current. Include every disabled output, receiver, pull resistor, and expansion-bus connection when calculating load. Do not use the output current rating as a capacitance limit.
| Net | Known load | Remaining accounting |
|---|---|---|
| Each CPU A1..A15 | Four EEPROM inputs: 40 uA leakage, 24 pF | Add all other address receivers and routing against the CPU 130 pF output-load limit. |
| Each EEPROM /CE | One EEPROM plus one HCT21 input: 11 uA, 16 pF | 34 pF remains under a 50 pF logic timing target. |
| READ_n / ROM_OE_n | Four EEPROM inputs plus one AHCT32 input: 41 uA, 34 pF | Add other existing READ_n consumers; only 16 pF remains before those loads. |
| Each CPU data bit during ROM read | CPU input up to 20 pF plus the inactive same-lane EEPROM output up to 12 pF; leakage budget at least 20 + 10 uA | Add RAM, peripherals, buffers, sockets and traces; compare with the EEPROM 100 pF access test load. |
| CPU_CLK_10 | Unchanged; the ROM circuit adds no CPU_CLK_10 load |
ROM_CLK comes from a spare
U_DRAM_CLK_BUF channel off
DRAM_CLK_10.
|
| DRAM_CLK_10 | Adds one CD74ACT244E input (pin 15): 1 uA, 10 pF | Accounted for in dram.html against the CD74ACT244E 50 pF load. |
| ROM_CLK | Four AHCT74 clock inputs: 4 uA, 40 pF |
10 pF remains for routing and probing at the
U_DRAM_CLK_BUF pin 5 output.
|
| ROM_SHIFT_CLR_n | Four AHCT74 clear inputs: 4 uA, 40 pF | 10 pF remains for routing at the HCT08 output. |
| Stage outputs Q1..Q3; Q4_n | One AHCT input each: 1 uA, 10 pF | Account for routing; do not add LEDs directly. |
| AS_n | New HCT04 input and AHCT32 input: 2 uA, 20 pF | Add to existing CPU control-net loads. |
| CPU DTACK_n | CPU input: 2.5 uA, up to 20 pF | Include test points and any other receiver within the AHCT32 50 pF timing load. |
EEPROM capacitances are characterized at 1 MHz and 25 C; they are not production-tested limits over every condition. The CPU's 20 pF input figure is periodically sampled. These are design budgets, not measurements of the assembled board.
One byte lane has two EEPROM outputs connected, but only one may drive. At least the inactive device's capacitance loads the active output. Avoid passive pull-downs that consume the EEPROM's small high-state current budget. Buffer expansion connections as specified in Bus and Decode.
Budget up to 50 mA active supply current per EEPROM under the datasheet test condition, or 200 mA for four devices as a conservative allocation, plus output and logic current. Do not assume the 200 uA CMOS standby value from a TTL-high CE alone; it requires CE near VCC. The TTL standby limit is 3 mA per device.
Sources: AT28C256, sections 4.2-4.4, M68000 User's Manual, section 10.13, and the HCT/AHCT electrical tables linked in section 10.
14. Decoupling / PCB Notes
| Item | Connection / placement |
|---|---|
| Each AT28C256 | Pin 28 to +5 V; pin 14 to ground; pin 27 (/WE) directly to +5 V. |
| EEPROM bypass capacitors | One 100 nF ceramic per device between pins 28 and 14, with short connections to the supply and ground planes. |
| Logic bypass capacitors |
One 100 nF ceramic at each logic package, including both delay
packages. U_DRAM_CLK_BUF keeps its own bypass in
dram.html.
|
| Local bulk capacitance | Provide 4.7-10 uF near the EEPROM group as an initial board value; check supply droop during switching. |
| Sockets and labels | Label ROM0/ROM1 and HI/LO, show pin 1 clearly, and include socket capacitance in the bus load. Program devices externally with board power off during removal or insertion. |
| Address and data routes | Keep the two devices on each byte lane close to the bus. Minimize stubs and preserve a continuous ground return. |
| Clock routes |
Route ROM_CLK from U_DRAM_CLK_BUF pin
5 to the four flip-flops with short, closely matched paths.
Check hold skew and AHCT input transition-rate limits.
|
| Enable and completion routes | Keep CE-to-request branches short. Route the direct AS-to-ROM_DTACK gate near the completion logic; board delay must stay within the 83.8 ns #28 margin. |
| Probe points | Provide ground-adjacent points for AS_n, ROM_CLK, ROM_READ_REQ_n, Q4, ROM_DTACK_n and CPU DTACK_n. Include probe capacitance in timing checks. |
The capacitor values are starting layout choices. Verify the 5 V rail at the EEPROM pins during word reads and bus turnaround. Do not attach an LED or long header stub directly to a data, clock, or completion net. Use a buffered diagnostic output if a permanent indicator is needed.
15. Internal Signal Reference
Aliases below identify the same wire. Q1-Q4 are active-high stored states; their names do not indicate CPU wait-state numbers.
| Signal | Source / definition | Destination / meaning |
|---|---|---|
A1..A15 |
CPU word-address bits | All EEPROM A0..A14 inputs |
A16 / A16_n |
CPU bit / decoder inverter | Firmware-half selection |
ROM_CYCLE_n |
Permanent ROM or enabled boot alias, qualified by normal bus cycle | Upstream half-select gates |
ROM_BANK0_n / ROM_BANK1_n |
ROM_CYCLE_n OR A16 / A16_n | Upstream byte-select gates |
UDS_n / LDS_n |
CPU byte strobes | HI / LO selection |
ROM0_UDS_n / ROM0_HI_CE_n |
Same wire; half 0 upper select | ROM0_HI pin 20 and U_ROM_SELECT pin 1 |
ROM0_LDS_n / ROM0_LO_CE_n |
Same wire; half 0 lower select | ROM0_LO pin 20 and U_ROM_SELECT pin 2 |
ROM1_UDS_n / ROM1_HI_CE_n |
Same wire; half 1 upper select | ROM1_HI pin 20 and U_ROM_SELECT pin 4 |
ROM1_LDS_n / ROM1_LO_CE_n |
Same wire; half 1 lower select | ROM1_LO pin 20 and U_ROM_SELECT pin 5 |
READ_n / ROM_OE_n |
Same wire; NOT R/W | All EEPROM pin 22 inputs; U_ROM_OR pin 2 |
ROM_BYTE_CYCLE_n |
AND of the four final chip enables | Low when at least one EEPROM is selected |
ROM_READ_REQ_n |
ROM_BYTE_CYCLE_n OR ROM_OE_n | Low for a selected read; request only |
ROM_READ_ACTIVE |
NOT ROM_READ_REQ_n | Stage 1 D input |
AS_n / ROM_AS_ACTIVE |
CPU strobe / local inversion | Direct acknowledgement release / clear qualification |
RESET_n |
Conditioned motherboard reset | Forces delay stages clear |
ROM_SHIFT_CLR_n |
RESET_n AND ROM_AS_ACTIVE | All four asynchronous clear inputs |
CPU_CLK_10 / ROM_CLK |
CPU clock / U_DRAM_CLK_BUF spare channel off
DRAM_CLK_10
|
Clock source / four delay clocks |
Q1 / Q2 / Q3 / Q4 |
Four successive sampled read states | Delay chain; Q4 means the read has traversed all stages |
Q4_n |
Complementary output of stage 4 | High until delayed read completion |
ROM_ACK_BLOCK_n |
ROM_READ_REQ_n OR Q4_n | Blocks premature, unselected, or write acknowledgement |
ROM_DTACK_n |
AS_n OR ROM_ACK_BLOCK_n | To U_DTACK_A pin 2 in Bus and Decode |
DTACK_RAW_n |
Bus and Decode SN74F21N completion tree | U_OR_DTACK SN74F32N input |
TIMEOUT_ACTIVE |
Existing motherboard timeout | Masks all successful completion after timeout |
DTACK_n |
DTACK_RAW_n OR TIMEOUT_ACTIVE | CPU acknowledgement; one push-pull driver only |
BERR_n |
Existing motherboard timeout/error path | CPU bus error for unanswered firmware writes |