Minimum Mode vs Maximum Mode
How the MN/MX pin changes the entire system architecture — single processor vs multiprocessor
Open interactive version (quiz + challenge)Real-world analogy
What is it?
The MN/MX pin on the 8086 selects between minimum mode (single-processor, CPU generates all control signals directly) and maximum mode (multiprocessor-capable, CPU outputs encoded status that an 8288 bus controller decodes into control signals). Minimum mode is simpler and cheaper; maximum mode supports coprocessors, bus locking, and advanced arbitration.
Real-world relevance
The original IBM PC used the 8086's close cousin, the 8088, in maximum mode specifically to support the optional 8087 math coprocessor. Engineers who wanted faster floating-point math could plug an 8087 into the coprocessor socket. The RQ/GT lines and queue status pins made this seamless. Simpler 8086 trainer kits used minimum mode to keep costs down.
Key points
- MN/MX Pin (Pin 33) — This single pin determines the entire operating mode. Tied to VCC (+5V) selects minimum mode. Tied to GND selects maximum mode. The choice is hardwired at design time — you cannot switch modes while the system is running.
- Minimum Mode Overview — In minimum mode, the 8086 directly generates all bus control signals: ALE, RD, WR, M/IO, DEN, DT/R, INTA. This is simpler and cheaper, ideal for single-processor embedded systems with straightforward bus requirements.
- Minimum Mode Control Signal Generation — In minimum mode, the CPU uses pins 24-31 to directly output control signals. DEN enables data bus transceivers (8286), DT/R controls data direction (transmit vs receive), and ALE latches the address. No external bus controller is needed.
- Maximum Mode Overview — In maximum mode, pins 24-31 change function entirely. Instead of direct control signals, the CPU outputs encoded status lines S0, S1, S2. An external 8288 bus controller decodes these into the actual bus control signals needed by memory and I/O.
- 8288 Bus Controller — The 8288 decodes S0, S1, S2 from the 8086 and generates: MRDC (memory read), MWTC (memory write), IORC (I/O read), IOWC (I/O write), ALE, DEN, DT/R, and INTA. It acts as the 'translator' between CPU status and bus control.
- RQ/GT — Request/Grant for Multiprocessor — In maximum mode, HOLD/HLDA are replaced by RQ/GT0 and RQ/GT1 — bidirectional bus arbitration lines. A coprocessor (like 8087) uses RQ/GT to request and release the bus in a faster, more compact handshake than HOLD/HLDA.
- QS0, QS1 — Queue Status — In maximum mode, QS0 and QS1 indicate the instruction queue activity. This helps coprocessors like the 8087 track what instruction the 8086 is executing — essential for synchronization between the CPU and math coprocessor.
- LOCK Signal — In maximum mode, the LOCK prefix causes the 8086 to assert the LOCK output for the duration of the next instruction. This prevents other bus masters from taking the bus — essential for atomic read-modify-write operations in multiprocessor systems.
- When to Use Each Mode — Use minimum mode for simple, cost-sensitive single-processor designs (trainers, embedded controllers). Use maximum mode when you need coprocessors (8087 FPU), multiprocessor configurations, or sophisticated bus arbitration with multiple bus masters.
Code example
; Comparing minimum and maximum mode system designs
; === MINIMUM MODE SYSTEM ===
; MN/MX pin tied to VCC
; CPU directly controls the bus
; Memory read in minimum mode:
; CPU outputs: ALE, M/IO=1, RD=0
; 8282 latch captures address on ALE
; 8286 transceiver enabled by DEN, direction by DT/R
; Memory places data on bus
; CPU reads data in T3/T4
; === MAXIMUM MODE SYSTEM ===
; MN/MX pin tied to GND
; 8288 bus controller generates signals
; Memory read in maximum mode:
; CPU outputs: S2=1, S1=0, S0=1 (memory read)
; 8288 decodes status -> asserts MRDC, ALE, DEN, DT/R
; 8282 latch captures address on ALE
; 8286 transceiver enabled by DEN
; Memory places data on bus
; CPU reads data in T3/T4
; Coprocessor sync (maximum mode only):
; 8087 monitors QS0, QS1 to track instruction flow
; 8087 uses RQ/GT0 to request bus for memory operands
; LOCK prefix prevents bus takeover during critical opsLine-by-line walkthrough
- 1. In minimum mode, the CPU directly drives ALE, M/IO, RD, WR, DEN, and DT/R — these pins physically output the control signals that memory and I/O devices need.
- 2. M/IO=1 tells the system this is a memory access. The 8282 latch captures the address when ALE pulses — same as before.
- 3. DEN (Data Enable) activates the 8286 bus transceivers, and DT/R sets the direction — LOW for read (receive data from memory).
- 4. In maximum mode, the same physical pins output different signals: S0, S1, S2 encode the bus cycle type as a 3-bit status code.
- 5. The 8288 bus controller reads S2:S1:S0 = 101 and knows this means 'memory read' — it asserts MRDC, ALE, and DEN on behalf of the CPU.
- 6. The 8087 coprocessor monitors QS0 and QS1 to know when the 8086 is fetching instructions from the queue — this keeps both processors in sync.
- 7. RQ/GT0 allows the 8087 to request and be granted the bus using a compact 3-pulse handshake — faster than HOLD/HLDA.
- 8. LOCK prevents any other bus master from taking the bus during an atomic XCHG instruction — critical for multiprocessor mutual exclusion.
Spot the bug
; Maximum mode system — 8087 coprocessor not working
; Hardware connections:
; 8086 MN/MX = GND (maximum mode)
; 8288 connected to S0, S1, S2
; 8087 connected to AD0-AD15, A16-A19
; 8087 RQ/GT connected to 8086 RQ/GT0
; 8087 QS0, QS1 NOT connected (floating)
;
; Symptom: 8087 executes wrong instructions
; or hangs during ESC (coprocessor) opcodesNeed a hint?
Show answer
Explain like I'm 5
Fun fact
Hands-on challenge
More resources
- Minimum and Maximum Mode of 8086 (GeeksforGeeks)
- 8086 Min/Max Mode Explained (YouTube)
- 8288 Bus Controller Datasheet (Right0.com)
- 8086 System Design (TutorialsPoint)