Firmware ROM

Firmware storage and read-cycle timing. Return to the main page.

Document status
Revision 1.0 pre-layout design; assembled-board measurements and firmware-image checks remain
Capacity
128 KiB, 16-bit wide, always read-only
Parts
Four Atmel AT28C256-15PU EEPROMs, 32K x 8 each
Permanent mapping
$FE0000-$FFFFFF
Boot alias
$000000-$01FFFF while the boot overlay is enabled

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.

Firmware EEPROM organization
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.

Shared AT28C256 address wiring, 28-pin PDIP
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.

EEPROM data-bus wiring, 28-pin PDIP
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 mappings of the physical firmware halves
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
Firmware-half selection states
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
Byte-specific EEPROM chip-enable signals
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
Byte-lane selection within the selected firmware half
/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 firmware control connections
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

AT28C256-15 read limits
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
Read-request truth table
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.

Local logic allocation, PDIP packages
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.

MC68EC000 read-cycle constraints at 10 MHz
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.

Read and completion budget
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.

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.

The open item is measuring these two edges at the CPU pins with the other completion inputs present.

Reset and Abort Clearing

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.

Remaining verification work
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.

Reset-vector byte placement
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.

Static voltage margins
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.

ROM-related fanout budget
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

Local power and layout connections
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.

Firmware signals and ownership
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