1. Purpose and Scope
This document defines how the motherboard presents interrupt requests
to the MC68EC000 and how it terminates the processor's
interrupt-acknowledge cycle. It covers priority encoding onto
/IPL2../IPL0, acknowledge-cycle decode, autovector
generation, the MC68901 MFP vectored acknowledge, routing of
peripheral interrupt outputs, and spurious-interrupt handling.
Device register maps, internal interrupt-enable and mask registers, and adapter timing stay in the individual device documents. This page owns only the CPU-facing interrupt hardware and the wiring between the devices' interrupt outputs and that hardware.
A signal ending in _n, or written with a leading slash,
is active low: 0 means asserted and 1 means inactive. Interrupt
levels are the processor priority levels 1 through 7.
Inputs this page takes from other documents:
CPU_SPACE active-high CPU-space decode Bus and Decode (U_AND)
AS_n processor address strobe MC68EC000
A1, A2, A3 acknowledged interrupt level MC68EC000
A16..A19 CPU-space type field (all high) MC68EC000
INT_CLK buffered 10 MHz, spare U_DRAM_CLK_BUF channel DRAM
RESET_n conditioned board reset Clock and Reset
PERIPH_RESET_n processor-honoring peripheral reset Clock and Reset
D7..D0 lower data byte, vector transfer MC68EC000
Outputs this page drives:
/IPL2, /IPL1, /IPL0 encoded interrupt priority MC68EC000 inputs
/AVEC autovector request MC68EC000 input
INT_BERR_n spurious-acknowledge abort into the CPU /BERR path
2. MC68EC000 Interrupt Model
The processor samples three encoded priority inputs and compares the requested level against the interrupt mask in the status register. A request at a level above the mask starts exception processing at an instruction boundary. Level 7 is compared as an edge and cannot be masked.
Priority Encoding
/IPL2../IPL0 carry the requested level as the one's
complement of the binary level number, with /IPL2 most
significant. All three high means no request.
| /IPL2 | /IPL1 | /IPL0 | Requested level |
|---|---|---|---|
| 1 | 1 | 1 | 0 (no request) |
| 1 | 1 | 0 | 1 |
| 1 | 0 | 1 | 2 |
| 1 | 0 | 0 | 3 |
| 0 | 1 | 1 | 4 |
| 0 | 1 | 0 | 5 |
| 0 | 0 | 1 | 6 |
| 0 | 0 | 0 | 7 (non-maskable) |
A request must stay asserted until the processor acknowledges it. The interrupt sources used here are level-held until their controller is serviced, which satisfies this rule.
Acknowledge Cycle
When the processor grants an interrupt it runs a CPU-space read cycle:
FC2..FC0 = 111, A19..A16 = 1111, all other
address lines high, and A3..A1 holding the level being
acknowledged. The cycle ends one of three ways.
| Termination | Responder action | Vector used |
|---|---|---|
| Vectored |
Device drives the vector number on D7..D0 and
asserts /DTACK
|
The byte the device supplied |
| Autovectored |
Motherboard asserts /AVEC; no device drives the
data bus
|
$18 + level (25 through 31), generated inside the
CPU
|
| Spurious | No responder; motherboard asserts /BERR |
24 ($18) |
/DTACK and /AVEC must never be asserted in
the same acknowledge cycle.
Vector Address Table
A vector number is multiplied by four to form the exception-vector address. After the boot overlay is disabled the vector table lives in DRAM bank 0; see Memory Map and Firmware ROM.
| Vector number | Address | Assignment |
|---|---|---|
24 ($18) |
$000060 |
Spurious interrupt |
25 ($19) |
$000064 |
Level 1 autovector |
26 ($1A) |
$000068 |
Level 2 autovector |
27 ($1B) |
$00006C |
Level 3 autovector |
28 ($1C) |
$000070 |
Level 4 autovector |
29 ($1D) |
$000074 |
Level 5 autovector |
30 ($1E) |
$000078 |
Level 6 autovector (unused; MFP is vectored) |
31 ($1F) |
$00007C |
Level 7 autovector |
| 64-255 | $000100-$0003FF |
User interrupt vectors, including the MFP block |
Source: M68000 User's Manual, sections 5.1.4, 6.2, and 6.3.4.
3. Architecture Overview
One device, the MC68901 MFP, acts as the system interrupt controller. It has sixteen internal channels with their own priority, enable, mask, pending, and in-service registers, and it produces a full vector number during its acknowledge cycle. Slow or infrequent peripheral interrupts feed the MFP's general-purpose I/O interrupt inputs rather than consuming a processor level.
Only two other processor levels are used: level 3 for the expansion-bus request and level 7 for the manual non-maskable interrupt. Both are autovectored and served by reading device status in software. Levels 1, 2, 4, and 5 carry no source.
MFP /IRQ ---------------------+
EXP_IRQ_n --------------------------+ |
NMI_n -----------------------+ | |
| | |
level 7 --------+ | |
level 3 ---------------+ |
level 6 ---------------------+
| | |
v v v
+--------------------------+
| U_IPL_ENC 74LS148 | I1..I7 = levels
+------------+-------------+
| A2..A0
v
+--------------------------+
| U_IPL_SYNC 74LS174 x2 | two stages on INT_CLK
+------------+-------------+
v
/IPL2 /IPL1 /IPL0 -> MC68EC000
CPU_SPACE, AS_n, A16..A19 --> IACK qualifier --> U_IACK_DEC 74HCT138
| IACK_L1_n .. IACK_L7_n
+------------------------------+------------------+
v v v
autovector OR (U_AVEC_OR) IACK_L6_n -> MFP /IACK watchdog
| | MFP D7..D0 + /DTACK (U_INT_WDOG)
v v v
/AVEC -> CPU MFP_DTACK_n INT_BERR_n
-> completion tree -> CPU /BERR
INT_CLK = spare U_DRAM_CLK_BUF channel off DRAM_CLK_10 (see dram.html)
4. Interrupt Level Assignment
| Level | Source | Acknowledge | Vector | Encoder input |
|---|---|---|---|---|
| 7 | Manual NMI button NMI_n |
Autovector | 31; address $00007C |
/I7 |
| 6 | MC68901 MFP MFP_IRQ_n |
Vectored by the MFP | Vector register base + channel | /I6 |
| 5 | None | Spurious | 24; address $000060 |
/I5 tied to +5 V |
| 4 | None | Spurious | 24; address $000060 |
/I4 tied to +5 V |
| 3 | Expansion connector EXP_IRQ_n |
Autovector | 27; address $00006C |
/I3 |
| 2 | None | Spurious | 24; address $000060 |
/I2 tied to +5 V |
| 1 | None | Spurious | 24; address $000060 |
/I1 tied to +5 V |
Sources folded into the MFP instead of a processor level: the
82077AA-1 floppy INT, the
MC6850 MIDI /IRQ, and the
DS1285 RTC /IRQ. They use GPIP5,
GPIP4, and GPIP3 respectively. See
the MFP channel map and
section 9.
The video controller has no processor-level interrupt. MFP Timer C
generates the nominal 100 Hz system tick, and the CL-GD5428
VSYNC output connects to MFP GPIP2. Both inherit the
MFP's masking and vectoring.
5. Priority Encoding and /IPL Generation
U_IPL_ENC, a SN74LS148 8-line-to-3-line
priority encoder, converts up to seven level requests into the
/IPL code. Its active-low outputs already carry the one's
complement of the highest requested input, which matches the
/IPL encoding directly.
The SN74LS148 is the practical choice: neither an
HCT nor a current HC version of the 148 is
available. The LS part is fast and widely stocked. It and the
SN74LS174 synchronizer that follows are both LS-family,
so the encoder outputs drive the register inputs at TTL levels with no
translation. Encoder propagation delay does not matter because
U_IPL_SYNC reclocks the output.
| SN74LS148 signal | Connection | Meaning |
|---|---|---|
/EI |
GND | Encoder always enabled |
/I0 |
+5 V | Level 0 is "no request"; unused |
/I1 |
+5 V | Level 1 unwired |
/I2 |
+5 V | Level 2 unwired |
/I3 |
IL3_n |
Level 3 request (expansion) |
/I4 |
+5 V | Level 4 unwired |
/I5 |
+5 V | Level 5 unwired |
/I6 |
MFP_IRQ_n |
Level 6 request (MFP) |
/I7 |
NMI_n |
Level 7 request (NMI) |
/A2, /A1, /A0 |
IPL_ENC2..0_n |
Encoded level to the synchronizer |
/GS, /EO |
No connection | Cascade outputs; a single encoder covers all seven levels |
An unwired input is tied to +5 V so it never requests. Only
/I3, /I6, and /I7 take a source
in this design; the other four inputs are held inactive.
Synchronizer
The encoded outputs are asynchronous to the processor clock because
MFP_IRQ_n, EXP_IRQ_n, and the MFP's own
wired-OR inputs change at arbitrary times. U_IPL_SYNC is
two register stages, one SN74LS174 hex D flip-flop per
stage using three of six flip-flops, both clocked by
INT_CLK. It registers all three encoded bits together so
a change near a sampling edge cannot present an inconsistent code.
on each rising INT_CLK edge:
s1[2:0] <- IPL_ENC2..0_n
s2[2:0] <- s1[2:0]
/IPL2../IPL0 = s2[2:0]
A held request reaches the processor after at most two
INT_CLK periods, far below any interrupt service
interval. The level-7 edge is delayed, not lost. The MC68EC000 also
samples /IPL over consecutive cycles internally, so a
single external stage would deglitch the code; the second stage is
margin against metastability propagation and can be dropped after
review.
INT_CLK is a buffered copy of the 10 MHz processor clock.
Any buffered copy works; a direct tap on the processor clock net is a
poor choice because that net is usually already near its capacitive
budget. This design takes INT_CLK from a spare channel of
the DRAM clock buffer; see
dram.html and
section 16. The
SN74LS174 common clear is tied inactive: clearing would
force the encoded code to 000, which is level 7. Instead, two
INT_CLK edges after reset release load the true
no-request code, which is harmless because the processor mask is 7
during that interval.
6. Interrupt Acknowledge Decode
On the MC68EC000 the only CPU-space cycle is an interrupt acknowledge,
so CPU_SPACE asserted with AS_n
low already identifies an acknowledge. The address type field
A19..A16 is decoded as well so a future non-acknowledge
CPU-space cycle cannot be mistaken for one.
IACK_TYPE = A16 AND A17 AND A18 AND A19 4-input AND
IACK_ACTIVE = CPU_SPACE AND (NOT AS_n) AND IACK_TYPE
IACK_n = NOT IACK_ACTIVE
IACK_TYPE uses one gate of a CD74HCT21
4-input AND (U_IACK_QUAL); its second gate is spare.
IACK_ACTIVE and IACK_n use a
SN74HCT08 gate and an inverter in
U_INT_GATE. Pin-level gate packing is fixed at schematic
capture.
Level Demultiplex
U_IACK_DEC, a SN74HCT138 3-line-to-8-line
decoder, splits the acknowledge into one active-low strobe per level
using the level on A3..A1.
| SN74HCT138 signal | Connection | Purpose |
|---|---|---|
A |
CPU A1 |
Level bit 0 |
B |
CPU A2 |
Level bit 1 |
C |
CPU A3 |
Level bit 2 |
G1 |
+5 V | Active-high enable |
/G2A |
IACK_n |
Enable only during an acknowledge |
/G2B |
GND | Second enable held active |
/Y1 |
IACK_L1_n |
Level 1 acknowledge |
/Y2 |
IACK_L2_n |
Level 2 acknowledge |
/Y3 |
IACK_L3_n |
Level 3 acknowledge |
/Y4 |
IACK_L4_n |
Level 4 acknowledge |
/Y5 |
IACK_L5_n |
Level 5 acknowledge |
/Y6 |
IACK_L6_n |
Level 6 acknowledge to the MFP |
/Y7 |
IACK_L7_n |
Level 7 acknowledge |
/Y0 |
No connection | Level 0 is never acknowledged |
A0 is high during the acknowledge and is not decoded. The
decoder mirrors nowhere because it is enabled only by
IACK_n.
7. Autovector Generation
For every level served by autovector, the corresponding
IACK_Lx_n strobe drives /AVEC low.
U_AVEC_OR combines the active autovector strobes.
AVEC_n = IACK_L3_n AND IACK_L7_n
/AVEC = AVEC_n
The equation is an AND of active-low strobes: either the level-3 or
the level-7 acknowledge pulls /AVEC low. Levels 1, 2, 4,
and 5 are not included; an acknowledge to any of them falls through to
the spurious path in section 10, which treats
an unwired level as a hardware fault. U_AVEC_OR is one
gate of a SN74HCT08 AND package.
/AVEC is combinational from the decoder, so it is valid
well before the processor samples it at the falling edge of S4. It is
released when AS_n negates and the decoder outputs go
inactive.
8. MFP Vectored Acknowledge
Level 6 belongs to the MC68901 MFP. The MFP holds sixteen prioritized
interrupt channels and, during its acknowledge cycle, drives an 8-bit
vector number onto D7..D0 and asserts its own
/DTACK.
| MFP signal | Connection | Notes |
|---|---|---|
/IRQ |
MFP_IRQ_n to U_IPL_ENC
/I6
|
Open-drain; motherboard pull-up. Active low. |
/IACK |
IACK_L6_n from U_IACK_DEC |
Asserted only for a level-6 acknowledge. |
IEI |
GND | The MFP is the only device in the daisy chain, so its priority-in is always enabled. |
IEO |
No connection | No downstream device. |
D7..D0 |
CPU D7..D0 |
Vector number during acknowledge; register data otherwise. |
/DTACK |
MFP_DTACK_n into the completion tree |
Asserted for register cycles and for the vectored acknowledge. |
The MFP asserts /DTACK both for ordinary register
accesses and for the vectored acknowledge. Its physical output is
MFP_DTACK_n, one of the normal completion-tree inputs.
The tree remains active during CPU space, so the same net terminates a
level-6 acknowledge. IO0_n is inactive during CPU space,
which keeps /CS high while /IACK is low.
MFP /DTACK pin = MFP_DTACK_n -> U_DTACK_A gate 1 -> completion tree
normal register cycle: /CS low, /IACK high
level-6 acknowledge: /CS high, /IACK low
Vector Register
The MFP vector register holds the upper nibble of the vector; the MFP
fills the lower nibble with the channel number during acknowledge, and
bit 3 of the register selects software or automatic end-of-interrupt
mode. Firmware programs the base to $40, placing the
sixteen MFP vectors at numbers $40-$4F
(addresses $000100-$00013C), clear of the
autovector and processor-defined ranges.
MFP vector number = $40 | channel[3:0]
The complete channel-to-vector map is in the MFP document.
9. Peripheral Source Routing
Peripheral interrupt outputs that do not have their own processor level connect to the MFP's general-purpose interrupt inputs. The MFP gives each one a channel priority, an enable bit, a mask bit, and a vector.
| Source | Output type | Destination | Active edge |
|---|---|---|---|
82077AA-1 INT |
Push-pull, active high | MFP GPIP5, vector $47 |
Rising, set in the MFP active-edge register |
MC6850 /IRQ |
Open drain, active low | MFP GPIP4, vector $46, with pull-up |
Falling |
DS1285 /IRQ |
Open drain, active low | MFP GPIP3, vector $43, with pull-up |
Falling |
CL-GD5428 VSYNC |
Driven output, programmable polarity | MFP GPIP2, vector $42 |
Either edge, selected in the MFP active-edge register |
Expansion EXP_IRQ_n
|
Open drain, wired-OR across the two expansion cards | Priority encoder /I3, autovectored level 3 |
Level |
Each open-drain interrupt output gets a 4.7 kohm pull-up to +5 V at
its receiver. That sinks about 1 mA, within an open-drain output's
rating alongside the SN74LS148 input current on the
encoder lines, and releases quickly given the small wired-OR count.
Size the pull-up down toward 3.3 kohm if a line gathers more loads or
needs a faster release; confirm the final value against trace
capacitance and load count on the assembled board.
The MFP general-purpose interrupt inputs sense a programmed edge set in the active-edge register, so a push-pull active-high source and an open-drain active-low source both connect directly with no inverter; firmware sets the matching edge. This is a device-configuration detail; see mfp.html.
The MFP GPIP map also assigns GPIP7 and GPIP1 to the PS/2 keyboard, GPIP6 and GPIP0 to RS-232 flow control, and GPIP2 to VGA vertical sync. All eight pins have fixed board connections.
The YMF262 OPL3 does not consume an
interrupt input. Firmware reads its timer flags through OPL3 port 0,
and the YMF262 /IRQ pin has no board connection.
10. Spurious and Phantom Acknowledge Termination
The motherboard bus timeout is disabled during CPU space, so an
acknowledge cycle that no source terminates would stall the processor
forever. This logic terminates every acknowledge that is not answered
by /AVEC or MFP_DTACK_n.
Unwired Levels
An acknowledge to a level with no source and no autovector wiring (levels 1, 2, 4, and 5) is terminated immediately.
UNWIRED_IACK_n = IACK_L1_n AND IACK_L2_n AND IACK_L4_n AND IACK_L5_n
UNWIRED_IACK_n is one gate of a CD74HCT21
4-input AND. When any of those strobes is low it goes low and drives
INT_BERR_n low without waiting.
Phantom Acknowledge Watchdog
A wired level can still fail to respond: an interrupt withdrawn after
the processor has latched the level, or an MFP caught between states.
U_INT_WDOG, a CD74HCT4040E ripple counter,
counts INT_CLK edges while an acknowledge is unanswered
and asserts INT_BERR_n when the count is reached.
ANSWERED = (NOT AVEC_n) OR (NOT MFP_DTACK_n) any legitimate termination
WDOG_COUNT_EN = IACK_ACTIVE AND AVEC_n AND MFP_DTACK_n
WDOG_MR = NOT WDOG_COUNT_EN active-high counter reset
WDOG_TIMEOUT_n = NOT Q5 Q5 = 32 counted INT_CLK edges
INT_BERR_n = UNWIRED_IACK_n AND WDOG_TIMEOUT_n
The count is Q5, 32 INT_CLK periods, about
3.2 us. That is comfortably past the longest MC68901 acknowledge
latency, still about sixteen times shorter than the 51.1 us normal bus
timeout, and far below any software concern. If a measured MFP
acknowledge is unexpectedly slow, Q6 (6.4 us) is the next
tap; Q4 (1.6 us) is the tighter one.
WDOG_COUNT_EN is a three-input AND,
WDOG_MR its inversion, and WDOG_TIMEOUT_n an
inverter on Q5, all in U_INT_GATE.
Motherboard Bus Error
INT_BERR_n is combined with the motherboard
TIMEOUT_BERR_n in
Bus and Decode, in a spare gate of the CPU-space AND package:
BERR_n = TIMEOUT_BERR_n AND INT_BERR_n
Either source pulls the processor /BERR input low. The
two are mutually exclusive in time because the bus timeout does not
run during CPU space.
A spurious termination leaves /HALT inactive, so the
processor takes the spurious-interrupt exception (vector 24) rather
than a double bus fault.
11. NMI and Level 7
Level 7 cannot be masked. The processor takes a level-7 interrupt on every transition of the request level from below 7 up to 7, so a held request produces exactly one interrupt.
The source is one momentary pushbutton to ground near the debug
display, with a pull-up and an SN74LS14 Schmitt-trigger
conditioner, the same pattern the
manual-reset input
uses. The conditioned output is NMI_n, wired to
U_IPL_ENC /I7.
The specified switch is the C&K FP11SPC1B1TP00, the same normally-open momentary SPST pushbutton used for the front-panel power and reset buttons.
button --- RC --- SN74LS14 stage --- gate with RESET_n --- NMI_n --- U_IPL_ENC /I7
| Parameter | Value |
|---|---|
| Acknowledge | Autovector, vector 31; address $00007C |
| Debounce RC | About 10 ms, so one press is one clean edge. Final value at layout. |
Masked during RESET_n |
Yes. NMI_n is gated inactive while
RESET_n is low, one gate of
U_INT_GATE.
|
Drives /HALT |
No. /IPL only. |
| Repeat on hold | None. The processor re-triggers only on a fresh transition to level 7. |
12. Reset Behavior
After RESET_n:
-
The MFP is reset through
PERIPH_RESET_n(Clock and Reset). All MFP channels are disabled and/IRQis negated, soU_IPL_ENC/I6is inactive. -
NMI_nis held inactive whileRESET_nis low, so a button press during reset is ignored. -
With every encoder input inactive,
/IPL2../IPL0reads 111 (no request). -
U_INT_WDOGis held reset byWDOG_MRbecause no acknowledge is active. No separateRESET_nterm is needed. -
U_IPL_SYNCis not cleared on reset, since clearing it would encode level 7. Its twoINT_CLKedges after reset release load the true no-request code. During that interval the processor mask is 7 and no interrupt is taken, so the transient is harmless. - The processor sets its interrupt mask to 7 on reset, so no autovectored or vectored interrupt is taken until firmware lowers the mask. Firmware initializes the exception vectors in low RAM first; see Firmware ROM.
13. Acknowledge Timing
The acknowledge cycle is a normal-length MC68EC000 read cycle, four
clock periods plus wait states, terminated by /AVEC, by
the MFP vector and MFP_DTACK_n, or by
INT_BERR_n. Use the 10 MHz column of
M68000 User's Manual, section 10.14, together with the interrupt-acknowledge timing in the manual's
section 5.
| Constraint | Requirement | Design consequence |
|---|---|---|
| #47 asynchronous input setup |
/AVEC, /DTACK,
/BERR stable 5 ns before the sampling clock edge
|
/AVEC is combinational and early; the MFP vector
path and the watchdog need their own margin checks.
|
| #27 read-data setup | Vector byte valid 5 ns before the sampling edge |
The MFP drives D7..D0 during acknowledge; margin
measured on the assembled board against the MFP output timing.
|
#28 /AS negation to /DTACK negation
|
110 ns maximum |
MFP /DTACK release followed by the FAST completion
tree. The component total is 77.2 ns, leaving 32.8 ns for the
routed board under the 110 ns limit.
|
| Level hold | /IPL stable until acknowledge |
Sources are level-held; the synchronizer adds up to two clock periods of delay. |
| Spurious watchdog | Fire after the longest legitimate response, before any software timeout |
32 INT_CLK periods, 3.2 us. Confirm against the
measured MFP acknowledge latency; move to Q6 if
needed.
|
A worked assertion and release budget for each termination path, in the style of the Firmware ROM read timing tables, is added once package pins and gate packing are set at schematic capture. The dominant unknown is the MC68901 acknowledge latency, which is a measurement.
There is no motherboard bus timeout on this cycle. The only backstop
is INT_BERR_n from this logic.
14. Motherboard Integration
Four signals connect the interrupt controller to the bus and clock circuits. The Bus and Decode and DRAM documents carry the matching connections.
| Signal | Destination | Connection |
|---|---|---|
/AVEC |
MC68EC000 /AVEC pin |
Direct net from U_AVEC_OR, with a 10 kohm pull-up.
On the MC68EC000 this pin replaced the M6800
/VPA function, so with no bus arbitration in the
system it is used for autovector only and has no other driver.
|
MFP_DTACK_n |
Completion tree |
Directly into U_DTACK_A gate 1. The tree is active
during CPU space, so this path also terminates a vectored
level-6 acknowledge.
|
INT_BERR_n |
Bus-error path |
ANDed with the bus-timeout error term:
BERR_n = TIMEOUT_BERR_n AND INT_BERR_n. One gate;
the two sources never overlap in time.
|
INT_CLK |
Clock buffer | A buffered 10 MHz clock. This design routes it through a spare channel of the DRAM clock buffer so the processor clock net gains no load. |
This logic also adds one input load to CPU_SPACE and
AS_n, and one to each of CPU address lines
A1..A3 and A16..A19. These belong in the bus
fanout budget.
15. Package and Pin Map
Reference designators and parts. Package pin numbers and the gate assignment within the multi-gate packages follow from the schematic; the equations in the sections above define the logic.
| Reference | Part | Function |
|---|---|---|
U_IPL_ENC |
SN74LS148N |
8-to-3 priority encoder; level requests to the
/IPL code
|
U_IPL_SYNC_A, U_IPL_SYNC_B |
2 x SN74LS174 |
Two-stage INT_CLK synchronizer, three of six
flip-flops per package; common clear tied inactive
|
U_IACK_DEC |
SN74HCT138N |
Acknowledge level demultiplex to IACK_L1_n..L7_n
|
U_IACK_QUAL |
CD74HCT21E |
IACK_TYPE (gate 1);
UNWIRED_IACK_n (gate 2)
|
U_AVEC_OR |
SN74HCT08N |
Autovector strobe combine to /AVEC (AND of
active-low strobes)
|
U_INT_WDOG |
CD74HCT4040E |
Phantom-acknowledge watchdog counter; Q5 tap |
U_INT_GATE |
SN74HCT08N, SN74HCT04N |
IACK_ACTIVE/IACK_n,
WDOG_COUNT_EN/WDOG_MR,
WDOG_TIMEOUT_n, INT_BERR_n,
NMI_n reset gate
|
U_NMI_COND |
SN74LS14N |
NMI button debounce; a spare gate of the reset conditioner or its own package |
Every package gets a 100 nF bypass capacitor at its supply pins, and
U_INT_WDOG and the two synchronizer packages also get a 1
uF capacitor in parallel, per the motherboard convention.
16. Electrical and Fanout
All parts run from the regulated 5 V +/-5% rail and use TTL-compatible thresholds.
| Net | Added load | Note |
|---|---|---|
INT_CLK |
Two SN74LS174 clock inputs, one
CD74HCT4040E clock input, one
SN74HCT74N MFP-divider clock input, and one
SN74F04N input in the
RTC local clock buffer
|
About 40 pF for the four specified inputs, within the
U_DRAM_CLK_BUF spare-channel output's 50 pF timing
load. The SN74F04 sheet gives no input capacitance, so the
routed branch is measured on the assembled board.
CPU_CLK_10 is untouched.
|
CPU_SPACE, AS_n |
One HCT input each | Recorded in the Bus and Decode fanout tables. |
A1..A3 |
One SN74HCT138N input each |
Add to the CPU address-line budget in Bus and Decode. |
A16..A19 |
One CD74HCT21E input each |
New receivers on these CPU lines; add to the address-line budget. |
D7..D0 |
MFP output during a level-6 acknowledge only | Already part of the MFP data-bus connection; check against the shared bus budget. |
/IPL2../IPL0 |
One MC68EC000 input each |
Short traces from U_IPL_SYNC_B; provide a
series-termination footprint.
|
/AVEC |
One MC68EC000 input, 10 kohm pull-up |
Push-pull drive from U_AVEC_OR; the pull-up covers
power-up before the gate is valid.
|
Open-drain /IRQ nets |
4.7 kohm pull-up each |
MFP_IRQ_n, EXP_IRQ_n, and each
peripheral /IRQ at its MFP input. Final value
against card count and trace capacitance on the assembled board.
|
17. Design Notes
Why the design is shaped this way, for anyone adapting it.
| Choice | Reason |
|---|---|
| One interrupt controller (the MFP), most sources folded into it | The MC68901 already prioritizes, masks, tracks in-service, and vectors sixteen channels. Folding the slow peripherals into it keeps the CPU-side hardware to a handful of small packages and puts source priority under software control. |
| MFP vectored, other used levels autovectored | The MFP supplies real per-channel vectors, so its handlers dispatch directly. The one or two remaining sources are rare enough that a status poll in an autovector handler costs nothing. |
| Expansion on its own processor level, not an MFP input | An expansion card then works with no MFP interrupt setup, and its latency does not depend on MFP configuration. |
| Unwired levels fall through to spurious | An acknowledge to a level with no source is a wiring or software fault. Vector 24 lets the handler log it rather than hang. |
A19..A16 decoded on the acknowledge |
On the MC68EC000 every CPU-space cycle is an acknowledge, but decoding the type field costs one gate and keeps the design correct if it is ported to a part that also runs breakpoint or coprocessor cycles. |
SN74LS148 encoder |
No HCT 148 is made and the HC one is
obsolete. The LS part is stocked, fast, and its TTL
output drives a TTL-input register directly.
|
Two-stage /IPL synchronizer |
The interrupt sources are wired-OR and asynchronous. Registering the encoded code twice on the processor clock stops a mid-transition code from reaching the processor. One stage plus the processor's own internal sampling is often enough; the second stage is cheap margin. |
| Local acknowledge watchdog |
The motherboard bus timeout is gated off during CPU space, so
without this a withdrawn or glitched interrupt would stall the
processor with no /BERR. The watchdog is the only
backstop on the acknowledge cycle.
|
| Interrupt clock from a buffered copy, not the processor clock net | The synchronizer and watchdog add several clock loads. A dedicated processor-clock net is usually near its capacitive budget already, so a buffered copy is safer. |
MFP vector base $40 |
Places the sixteen MFP vectors clear of the processor-defined vectors and the autovector block. Any base whose low nibble is zero works. |
The MFP design fixes the GPIP assignments, a
2.5 MHz MFP clock, 4.7 kohm open-drain pull-ups, and the direct
MFP_DTACK_n completion path. The MC68901's worst-phase
acknowledge response fits inside the 3.2 us Q5 watchdog interval.
Board layout must preserve the acknowledgement timing limits in
section 13.
18. Internal Signal Reference
Names ending in _n are active low. Others are active high
unless the description says otherwise.
| Signal | Source / definition | Destination / meaning |
|---|---|---|
CPU_SPACE |
FC2 AND FC1 AND FC0 in Bus and Decode |
High during an interrupt-acknowledge cycle |
IACK_TYPE |
A16 AND A17 AND A18 AND A19 |
High for the acknowledge CPU-space type field |
IACK_ACTIVE / IACK_n |
CPU_SPACE AND (NOT AS_n) AND IACK_TYPE |
An interrupt acknowledge is in progress |
IACK_L1_n .. IACK_L7_n |
U_IACK_DEC outputs, selected by A3..A1
|
Per-level acknowledge strobe |
IL3_n |
Expansion EXP_IRQ_n, level-sensitive |
U_IPL_ENC input /I3 |
MFP_IRQ_n |
MC68901 /IRQ, open drain, 4.7 kohm pull-up |
U_IPL_ENC input /I6 |
NMI_n |
Conditioned NMI button, gated inactive while
RESET_n is low
|
U_IPL_ENC input /I7 |
INT_CLK |
Spare U_DRAM_CLK_BUF channel off
DRAM_CLK_10
|
U_IPL_SYNC and U_INT_WDOG clock |
IPL_ENC2..0_n |
U_IPL_ENC /A2../A0 |
Encoded level into U_IPL_SYNC_A |
/IPL2, /IPL1, /IPL0
|
U_IPL_SYNC_B, the second stage |
MC68EC000 interrupt priority inputs |
AVEC_n / /AVEC |
IACK_L3_n AND IACK_L7_n in U_AVEC_OR
|
MC68EC000 autovector input |
MFP_DTACK_n |
MC68901 /DTACK pin |
U_DTACK_A gate 1 in Bus and Decode |
UNWIRED_IACK_n |
IACK_L1_n AND IACK_L2_n AND IACK_L4_n AND IACK_L5_n
|
Immediate spurious termination for an unwired level |
WDOG_MR |
NOT (IACK_ACTIVE AND AVEC_n AND MFP_DTACK_n) |
U_INT_WDOG active-high reset; low only while
counting
|
WDOG_TIMEOUT_n |
NOT Q5 of U_INT_WDOG |
Phantom-acknowledge termination after 32
INT_CLK edges
|
INT_BERR_n |
UNWIRED_IACK_n AND WDOG_TIMEOUT_n |
U_AND gate 4 in Bus and Decode (spurious interrupt)
|
PERIPH_RESET_n |
Clock and Reset | Resets the MFP; negates MFP_IRQ_n |
19. Sources
M68000 User's Manual: section 3.5 (interrupt control inputs), section 5.1.4 (CPU space cycle), section 5 interrupt-acknowledge timing (Figure 5-11), section 6.2 (exception vectors), section 6.3.3 to 6.3.5 (uninitialized, spurious, and instruction traps), and the section 10.14 MC68EC000 10 MHz switching table.
MC68901 MFP: interrupt controller
registers, the /IACK / IEI /
IEO daisy chain, the vector register, general-purpose
interrupt inputs and the active-edge register, and
/DTACK generation.
Devices
| Part | Role | Datasheet |
|---|---|---|
| MC68901 | Interrupt controller, vectored on level 6 | |
| SN74LS148 | 8-to-3 priority encoder for /IPL |
|
| SN74LS174 | Hex D flip-flop, /IPL synchronizer |
|
| SN74HCT138 | 3-to-8 decoder, acknowledge level demultiplex | |
| CD74HCT4040 | Ripple counter, phantom-acknowledge watchdog | |
| CD74HCT21 | Dual 4-input AND, type-field and unwired-level decode | |
| SN74HCT08 / HCT32 / HCT04 | AND, OR, and inverter glue | 08, 32, 04 |
| SN74LS14 | Schmitt-trigger inverter, NMI button conditioning |
Related project documents:
Bus and Decode (CPU-space decode,
completion tree, bus error), MFP (channel map,
GPI assignments, vector base),
DRAM
(INT_CLK spare clock-buffer channel),
Clock and Reset
(RESET_n, PERIPH_RESET_n, Schmitt
conditioning), Memory Map and
Firmware ROM (vector table location
and initialization),
Expansion Bus (EXP_IRQ_n),
and Floppy, MIDI,
RTC, and VGA for their
interrupt outputs.