MC68901 MFP

This document defines the MC68901 bus interface, clocks, interrupt assignments, timers, GPIO, bidirectional PS/2 keyboard port, and MAX232-based RS-232 port. Return to the main page.

Document status
Revision 1.0 pre-layout design
MFP
Motorola MC68901P, 48-pin plastic DIP, 4 MHz grade
Bus connection
I/O slot 0, $E00000-$E1FFFF, on D7..D0
Interrupt connection
Vectored CPU level 6, vectors $40-$4F
MFP clock
2.5 MHz, divided from the buffered 10 MHz interrupt clock
Timer clock
2.4576 MHz crystal
Serial port
DE-9 male DTE RS-232 port with RXD, TXD, RTS, CTS, and signal ground
Keyboard port
Bidirectional PS/2 on a 6-pin mini-DIN connector

1. Purpose and Scope

The MC68901 combines the system interrupt controller, four timers, an eight-bit general-purpose port, and one full-duplex USART. This page fixes every motherboard connection to the device and its two external ports. Software policy and firmware initialization are outside its scope.

Signal names ending in _n, and signal names written with a leading slash, are active low. The board uses +5 V logic and through-hole packages. Every IC family selected here existed before 1994.

2. Architecture

MC68EC000 lower byte                     external ports and interrupt sources

D7..D0 <------------------> MC68901P
A5..A1 -------------------> RS5..RS1       SO ----> MAX232 ----> DE-9 TXD
IO0_n --------------------> /CS            SI <---- MAX232 <---- DE-9 RXD
LDS_n --------------------> /DS            I0 ----> MAX232 ----> DE-9 RTS
R/W ----------------------> R/W            I6 <---- MAX232 <---- DE-9 CTS
PERIPH_RESET_n -----------> /RESET
MFP_CLK_2P5 --------------> CLK            I7 <---> PS/2 clock
IACK_L6_n ----------------> /IACK          I1 <---> PS/2 data
MFP_IRQ_n ----------------> CPU level 6    I5 <---- floppy INT
MFP_DTACK_n --------------> /DTACK tree    I4 <---- MIDI /IRQ
                                           I3 <---- RTC /IRQ
2.4576 MHz crystal -------> XTAL1/XTAL2    I2 <---- VGA VSYNC
TDO ----------------------> RC and TC
Timer C ------------------> 100 Hz system tick

The USART remains a TTL-level circuit inside the MFP. The MAX232 supplies the voltage conversion and inversion required at the RS-232 connector. The PS/2 lines connect to GPIP pins through series resistors and use direction switching to reproduce open-collector signaling.

3. Bus Interface

MC68901 processor-bus connections
MC68901 signal Motherboard connection Function
D7..D0 CPU D7..D0 Register data and interrupt vectors.
RS1..RS5 CPU A1..A5, in order Selects one of 32 internal register positions.
/CS IO0_n Selects the MFP only in slot 0 during a normal bus cycle.
/DS LDS_n Selects the lower data byte.
R/W CPU R/W High for reads and low for writes.
/DTACK MFP_DTACK_n Terminates register and level-6 interrupt-acknowledge cycles.

The motherboard slot decoder already excludes CPU-space cycles, so IO0_n and /IACK cannot be asserted together. During interrupt acknowledge the MC68EC000 asserts both data strobes; LDS_n therefore supplies the MFP's required /DS strobe while IACK_L6_n selects the acknowledge operation.

The MFP's /DTACK output drives high before entering its high-impedance state. A 4.7 kohm pull-up on MFP_DTACK_n keeps the completion-tree input inactive while the MFP is not driving it. The same physical net serves normal register cycles and vectored acknowledge cycles.

Addressing Rules

Software accesses the MFP as bytes at odd addresses. A lower-byte access asserts LDS_n; an upper-byte-only access leaves the MFP unselected and reaches the motherboard bus timeout. A word read also asserts LDS_n and completes, but only D7..D0 contain MFP data, so word accesses are not part of the interface contract.

Address lines A16..A6 do not enter the local decode. The register block repeats every 64 bytes throughout slot 0. The table below names the canonical copy beginning at $E00000.

4. Register Map

The MC68901 contains 24 directly addressed eight-bit registers. The register functions and addresses come from the MC68901 register map; this table does not prescribe their firmware values.

Canonical MC68901 register addresses
Address Offset Register Purpose
$E00001 $01 GPDR General-purpose I/O data.
$E00003 $03 AER Active edge for GPIP inputs and timer A/B control inputs.
$E00005 $05 DDR GPIP direction; one selects output and zero selects input.
$E00007 $07 IERA Interrupt enable for channels 15 through 8.
$E00009 $09 IERB Interrupt enable for channels 7 through 0.
$E0000B $0B IPRA Interrupt pending state for channels 15 through 8.
$E0000D $0D IPRB Interrupt pending state for channels 7 through 0.
$E0000F $0F ISRA Interrupt in-service state for channels 15 through 8.
$E00011 $11 ISRB Interrupt in-service state for channels 7 through 0.
$E00013 $13 IMRA Interrupt mask for channels 15 through 8.
$E00015 $15 IMRB Interrupt mask for channels 7 through 0.
$E00017 $17 VR Vector base and end-of-interrupt mode.
$E00019 $19 TACR Timer A mode, prescaler, and output reset.
$E0001B $1B TBCR Timer B mode, prescaler, and output reset.
$E0001D $1D TCDCR Timer C and Timer D mode and prescaler.
$E0001F $1F TADR Timer A data and current count.
$E00021 $21 TBDR Timer B data and current count.
$E00023 $23 TCDR Timer C data and current count.
$E00025 $25 TDDR Timer D data and current count.
$E00027 $27 SCR Synchronous USART character.
$E00029 $29 UCR USART clock mode and character format.
$E0002B $2B RSR Receiver enable and receive status.
$E0002D $2D TSR Transmitter enable, control, and transmit status.
$E0002F $2F UDR Receive and transmit data.

Offsets $31-$3F select no defined MC68901 register. They are not motherboard registers even though the MFP still owns the slot.

5. Clock and Reset

MFP Bus Clock

The original MC68901P accepts a 1 to 4 MHz CLK. A SN74HCT74N, U_MFP_CLK, divides the existing 10 MHz INT_CLK by four and produces MFP_CLK_2P5. Each half is a toggle stage with its complementary output connected to its D input. All asynchronous preset and clear inputs connect to +5 V.

INT_CLK -- divide by 2 --> MFP_CLK_5 -- divide by 2 --> MFP_CLK_2P5

MFP_CLK_2P5 frequency = 10 MHz / 4 = 2.5 MHz
MFP clock period       = 400 ns
MFP high and low time  = 200 ns nominal

MFP_CLK_5 also drives one SN74F04 input in the MIDI local clock buffer and one CD74HCT164 clock input in the floppy bus adapter. The MIDI buffer isolates its divider and bus-adapter clocks from this net.

The 400 ns period lies between the MC68901's 250 ns minimum and 1000 ns maximum. Its nominal 200 ns high and low times exceed the 110 ns minimum.

Timer Crystal

Y_MFP_TIMER is a CTS MP024S: a 2.4576 MHz parallel-resonant, fundamental-mode AT-cut crystal between XTAL1 and XTAL2, specified for a 32 pF load and no more than 300 ohms series resistance. One 56 pF capacitor connects from each crystal pin to ground, which with a few picofarads of stray capacitance presents the specified load.

Reset

PERIPH_RESET_n connects directly to the MC68901 /RESET pin. The MFP requires at least 2 us low. The motherboard reset circuit supplies the long power-on and manual-reset pulse and at least 12.4 us when the processor executes RESET.

Reset stops all timers, disables both USART directions and every interrupt channel, clears pending interrupts, places all GPIP pins in high-impedance input mode, drives the timer outputs low, and negates the external handshake signals. The vector register resets to $00, so an unprogrammed MFP answers an acknowledge cycle with vector number $0F, the processor's uninitialized-interrupt vector. Firmware writes the vector register before it enables any channel. TADR, TBDR, TCDR, TDDR, UDR, and most TSR state do not receive a defined data value from reset.

6. Interrupts

The MFP presents all sixteen internal channels at CPU level 6. Its open-drain /IRQ output is MFP_IRQ_n and has a 4.7 kohm pull-up to +5 V. IACK_L6_n connects to /IACK, IEI connects to ground, and IEO is open because no second vectored device follows the MFP.

The system reserves vector base $40. The MFP supplies the channel number in the low nibble, producing vectors $40-$4F. Channel 15 has the highest priority and channel 0 the lowest. The programmable enable, pending, mask, and in-service state remains visible through IERA/B, IPRA/B, IMRA/B, and ISRA/B.

MFP interrupt channels and allocated vectors
Priority Channel Vector Source Hardware use
Highest 15 $4F GPIP7 PS/2 clock, falling edge.
14 $4E GPIP6 RS-232 CTS, falling edge when enabled.
13 $4D Timer A Available internal timer.
12 $4C Receiver buffer full RS-232 character received.
11 $4B Receive error RS-232 overrun, parity, or framing error.
10 $4A Transmit buffer empty RS-232 transmitter service.
9 $49 Transmit error RS-232 underrun or end condition.
8 $48 Timer B Available internal timer.
7 $47 GPIP5 82077AA-1 floppy INT, rising edge.
6 $46 GPIP4 MC6850 MIDI /IRQ, falling edge.
5 $45 Timer C Nominal 100 Hz system tick.
4 $44 Timer D USART baud generator; interrupt not needed by the circuit.
3 $43 GPIP3 DS1285 RTC /IRQ, falling edge.
2 $42 GPIP2 CL-GD5428 VSYNC; either edge selectable.
1 $41 GPIP1 PS/2 data; sampled with GPIP7.
Lowest 0 $40 GPIP0 RS-232 RTS output.

Interrupts owns the CPU-side priority encoder, level-6 acknowledge decode, autovectors, and spurious-cycle termination. This page owns the MFP's channel and pin assignments.

7. Timers

All four timers count the 2.4576 MHz crystal through a programmable prescaler. Timers A and B remain available as internal delay timers. Their unused TAI and TBI inputs connect to ground, and TAO and TBO go to labeled test pads.

Timer C System Tick

Timer C uses the divide-by-100 prescaler and a data value of 246 ($F6). A timeout occurs at 99.9024 Hz, a period of 10.0098 ms. This is the board's nominal 100 Hz system tick. The TCO pin toggles on each timeout and goes to a labeled test pad; the interrupt channel supplies the tick to the processor.

Timer C timeout = 2,457,600 / (100 * 246)
                = 99.9024 Hz

Timer D Baud Clock

TDO connects to both RC and TC, giving the receiver and transmitter the same clock. Timer D uses the divide-by-four prescaler. In the USART's divide-by-16 asynchronous mode, the timer data values below produce the standard rates.

Timer D baud-rate values at 2.4576 MHz
Baud TDDR value TDO frequency
19,200 $01 307.2 kHz
9,600 $02 153.6 kHz
4,800 $04 76.8 kHz
2,400 $08 38.4 kHz
1,200 $10 19.2 kHz
600 $20 9.6 kHz
300 $40 4.8 kHz
150 $80 2.4 kHz
75 $00, interpreted as 256 1.2 kHz
baud = 2,457,600 / (2 * 4 * TDDR * 16)
     = 19,200 / TDDR

TDDR = 0 represents a count of 256.

8. RS-232 Port

U_RS232 is an original-family MAX232CPE in a 16-pin plastic DIP. It provides two drivers, two receivers, and the charge pumps needed to run the port from +5 V. Its two channels carry TXD/RXD and RTS/CTS. The selected timer clocking limits the port to 19,200 baud, below the MAX232's 120 kbit/s rating.

MAX232 signal connections
Function TTL side MAX232 path RS-232 side
Transmit data MFP SO T1IN pin 11 to T1OUT pin 14 DE-9 pin 3, TXD
Receive data MFP SI R1OUT pin 12 from R1IN pin 13 DE-9 pin 2, RXD
Request to send MFP GPIP0 T2IN pin 10 to T2OUT pin 7 DE-9 pin 7, RTS
Clear to send MFP GPIP6 R2OUT pin 9 from R2IN pin 8 DE-9 pin 8, CTS

A 10 kohm pull-up on T1IN holds TXD in the RS-232 mark state while the MFP's SO output is high impedance after reset. A second 10 kohm pull-up on T2IN holds RTS deasserted while GPIP0 is an input. Because the MAX232 inverts control signals, driving GPIP0 low asserts RTS at the connector and driving it high deasserts RTS.

RTS and CTS have fixed electrical paths but no automatic connection to the USART state machine. GPIP0 controls RTS, and GPIP6 reports CTS and can raise an interrupt. CTS does not gate SO in hardware.

Charge-Pump Connections

MAX232 power and charge-pump wiring
MAX232 pins Connection
C1+ pin 1 to C1- pin 3 1 uF, 16 V capacitor
C2+ pin 4 to C2- pin 5 1 uF, 16 V capacitor
V+ pin 2 to ground 1 uF, 16 V; positive terminal at V+
V- pin 6 to ground 1 uF, 16 V; positive terminal at ground
VCC pin 16 +5 V with 100 nF ceramic and 1 uF bulk bypass to ground
GND pin 15 Motherboard ground

DE-9 DTE Connector

J_RS232 is a male DE-9 receptacle at the board edge. The recommended part is the Amphenol ICC LD09P33E4GV00LF, a right-angle through-hole male DE-9 with board locks. Any male DE-9 with the same footprint and the pinout below is acceptable.

Male DE-9 serial connector
Pin Signal Direction at computer Connection
1 DCD Input No connection
2 RXD Input MAX232 R1IN
3 TXD Output MAX232 T1OUT
4 DTR Output No connection
5 Signal ground Motherboard ground
6 DSR Input No connection
7 RTS Output MAX232 T2OUT
8 CTS Input MAX232 R2IN
9 RI Input No connection
Shell Shield Ground at the connector entry

9. PS/2 Keyboard Port

GPIP7 carries keyboard clock and GPIP1 carries keyboard data. Each motherboard node has a 4.7 kohm pull-up to +5 V and reaches the mini-DIN connector through a 220 ohm series resistor. The resistors limit contention current if either endpoint drives at the wrong time.

An MFP GPIP pin releases a PS/2 line when its DDR bit is zero. It pulls the line low when its GPDR bit is zero and its DDR bit is one. The circuit never requires a driven high level, so it preserves the PS/2 wired-AND behavior. Reset sets the DDR to input and releases both lines. GPIP7 detects falling clock edges while the keyboard is sending; GPIP1 supplies the data level.

J_PS2 is a female mini-DIN-6 receptacle at the board edge. The recommended part is the Kycon KMDGX-6S-BS, a through-hole shielded mini-DIN-6 with board locks. Any mini-DIN-6 receptacle with the same footprint and the pinout below is acceptable.

PS/2 mini-DIN-6 connector
Pin Signal Connection
1 Data 220 ohms to GPIP1 node; 4.7 kohm pull-up at MFP side
2 Reserved No connection
3 Ground Motherboard ground
4 +5 V +5 V through a 500 mA resettable fuse
5 Clock 220 ohms to GPIP7 node; 4.7 kohm pull-up at MFP side
6 Reserved No connection
Shell Shield Ground at the connector entry

A 100 nF ceramic capacitor and a 10 uF electrolytic capacitor connect from the fused +5 V keyboard supply to ground beside the connector.

10. GPIP Assignment

MC68901 general-purpose port wiring
Pin Direction Connection Active edge or level
GPIP7 Bidirectional PS/2 clock Falling edge while receiving
GPIP6 Input MAX232 R2OUT, RS-232 CTS Low means CTS asserted; falling edge available
GPIP5 Input 82077AA-1 floppy INT Active high, rising edge
GPIP4 Input MC6850 MIDI /IRQ, 4.7 kohm pull-up Active low, falling edge
GPIP3 Input DS1285 RTC /IRQ, 4.7 kohm pull-up Active low, falling edge
GPIP2 Input CL-GD5428 VSYNC Programmable sync polarity; AER selects either edge
GPIP1 Bidirectional PS/2 data Sampled at GPIP7 clock edges
GPIP0 Output MAX232 T2IN, RS-232 RTS Low asserts RTS at the connector

GPIP4 and GPIP3 each have their own pull-up because their source outputs are open drain. The floppy and VGA outputs are push-pull and need no pull-up. The PS/2 pull-ups belong to the keyboard interface, and the RTS pull-up belongs to the MAX232 input.

The YMF262 timers use status polling. The OPL3 circuit does not share a GPIP input with any source in this table.

11. Package and Pin Map

MC68901P

U_MFP 48-pin plastic DIP connections
Pin Signal Connection
1 R/W CPU R/W
2-6 RS1..RS5 CPU A1..A5
7 TC TDO
8 SO MAX232 T1IN
9 SI MAX232 R1OUT
10 RC TDO
11 VCC +5 V
12 NC No connection
13 TAO Test pad
14 TBO Test pad
15 TCO System-tick test pad
16 TDO RC and TC
17-18 XTAL1, XTAL2 2.4576 MHz crystal and two 56 pF capacitors
19-20 TAI, TBI Ground
21 /RESET PERIPH_RESET_n
22-29 GPIP0..GPIP7 Assignments in section 10
30 /TR No connection
31 /RR No connection
32 /IRQ MFP_IRQ_n, 4.7 kohm pull-up
33 IEO No connection
34 IEI Ground
35 CLK MFP_CLK_2P5
36 GND Ground
37-44 D0..D7 CPU D0..D7
45 /IACK IACK_L6_n
46 /DTACK MFP_DTACK_n, 4.7 kohm pull-up
47 /DS LDS_n
48 /CS IO0_n

MFP Clock Divider

U_MFP_CLK SN74HCT74N connections
Pins Connection Function
1, 4, 10, 13 +5 V Keep both asynchronous preset and clear inputs inactive.
2 Pin 6, /1Q First-stage toggle feedback.
3 INT_CLK 10 MHz input.
5 MFP_CLK_5 First divide-by-two output, second-stage clock, MIDI local clock-buffer source, and floppy-response clock.
6 Pin 2 First-stage complementary feedback.
7 Ground Supply ground.
8 Pin 12, 2D Second-stage complementary feedback.
9 MFP_CLK_2P5 MC68901 clock.
11 MFP_CLK_5 Second-stage clock.
12 Pin 8, /2Q Second-stage toggle feedback.
14 +5 V Supply.

12. Timing and Electrical Checks

Bus Response

The asynchronous MC68901 samples /CS or /IACK against its local clock. If a request misses one falling edge, the next falling edge arrives 400 ns later. The MFP then asserts /DTACK within 220 ns. A worst-phase request therefore reaches the raw MFP acknowledgement within about 620 ns, far inside the motherboard's 51.1 us normal-cycle timeout.

On release, the MC68901 drives /DTACK high within 60 ns after /CS or /DS rises. The completion tree adds 5.3 ns through the group SN74F21, 5.3 ns through the final SN74F21, and 6.6 ns through the SN74F32 timeout mask. The 77.2 ns total leaves 32.8 ns for routed delay and loading under the MC68EC000's 110 ns acknowledgement-release limit.

MFP /DTACK release          60.0 ns maximum
group SN74F21               5.3 ns maximum
final SN74F21               5.3 ns maximum
SN74F32 timeout mask        6.6 ns maximum
------------------------------------------------
component total            77.2 ns
MC68EC000 limit           110.0 ns
board allowance            32.8 ns

Logic Levels and Fanout

MFP interface loading
Net Added load Result
INT_CLK One SN74HCT74N clock input, 10 pF maximum Interrupt-clock branch rises from about 30 pF to 40 pF, below its 50 pF timing load.
PERIPH_RESET_n One MC68901 input, 10 uA and 10 pF maximum TTL thresholds match the +5 V reset domain.
D7..D0 One bidirectional MC68901 pin per line, 10 pF maximum Within the MC68EC000 bus capacitance budget after layout accounting.
A1..A5 One MC68901 register-select input per line, 10 pF maximum Within the MC68EC000 address-bus capacitance limit after layout accounting.
MFP_IRQ_n 4.7 kohm pull-up About 1.12 mA at 5.25 V, below the MC68901 open-drain test current.
MFP_DTACK_n One FAST input and 4.7 kohm pull-up The MC68901's 5.3 mA low-state rating covers the pull-up and TTL input load.
MAX232 TTL inputs MFP SO and GPIP0 The MC68901 2.4 V minimum high output exceeds the MAX232 2.0 V TTL threshold.
MFP serial and GPIP inputs MAX232 R1OUT and R2OUT Both devices use +5 V TTL-compatible levels.
PS2_CLK, PS2_DATA One 4.7 kohm pull-up and one keyboard input per line About 1.12 mA maximum pull-up current, below the MC68901's 2 mA low-output test current.

The MAX232 supply range is 4.5 to 5.5 V, which contains the motherboard's 4.75 to 5.25 V rail. Its RS-232 receivers tolerate inputs up to +/-30 V. The selected 1 uF charge-pump capacitors are the value specified for the original MAX232.

13. Parts Added

MFP subsystem parts
Reference Part Function
U_MFP MC68901P MFP, 48-pin plastic DIP, 4 MHz grade.
U_MFP_CLK SN74HCT74N 10 MHz to 2.5 MHz clock divider.
U_RS232 MAX232CPE Dual RS-232 driver and receiver, 16-pin plastic DIP.
Y_MFP_TIMER 2.4576 MHz crystal; CTS MP024S Parallel resonance, 32 pF load, 300 ohms maximum ESR.
J_RS232 DE-9 male, right-angle through-hole; recommended part Amphenol ICC LD09P33E4GV00LF DTE serial connector.
J_PS2 Mini-DIN-6 female, through-hole; recommended part Kycon KMDGX-6S-BS PS/2 keyboard connector.
F_PS2 500 mA hold resettable fuse Keyboard +5 V protection.

U_MFP, U_MFP_CLK, and U_RS232 belong to device families documented before 1994. Each IC has a 100 nF ceramic bypass capacitor at its supply pins. U_MFP and U_MFP_CLK also have a 1 uF capacitor beside the package, following the motherboard convention.

14. Board Layout

15. Internal Signal Reference

MFP subsystem signals
Signal Source Destination
MFP_CLK_5 U_MFP_CLK first stage U_MFP_CLK second-stage clock, U_MIDI_INV, and U_FDC_SEQ
MFP_CLK_2P5 U_MFP_CLK second stage MC68901 CLK
MFP_IRQ_n MC68901 /IRQ Interrupt priority encoder level 6 input
MFP_DTACK_n MC68901 /DTACK Motherboard completion tree
IACK_L6_n Interrupt acknowledge decoder MC68901 /IACK
PS2_CLK MC68901 GPIP7 and keyboard PS/2 connector pin 5
PS2_DATA MC68901 GPIP1 and keyboard PS/2 connector pin 1
RS232_TXD MAX232 T1OUT DE-9 pin 3
RS232_RXD DE-9 pin 2 MAX232 R1IN
RS232_RTS MAX232 T2OUT DE-9 pin 7
RS232_CTS DE-9 pin 8 MAX232 R2IN

16. Sources