68000: The 16-Bit Powerhouse
Thirty-two bits on the inside where it counts
The Motorola 68000 powered the Amiga, Atari ST, Sega Mega Drive, and arcade machines—bringing workstation-class architecture to home computers.
The Motorola 68000 (1979) was revolutionary: a 32-bit internal architecture with 16-bit external data bus. Its clean, orthogonal instruction set and generous registers made it a programmer’s dream. Where 8-bit CPUs required clever hacks, the 68000 let you write elegant code.
Fast facts
- Clock speed: 7.09 MHz (Amiga), 7.67 MHz (Mega Drive), 8 MHz (Atari ST).
- Data bus: 16-bit external, 32-bit internal.
- Address bus: 24-bit (16MB addressable).
- Registers: eight 32-bit data (D0-D7), eight 32-bit address (A0-A7).
- Instruction set: orthogonal—most instructions work with most registers and modes.
A7 is two registers wearing one name
The register list gives eight address registers, A0–A7, and that count is
slightly false. A7 is the stack pointer, and which physical register it means
depends on what mode the processor is in — the supervisor model has its own,
which is why Motorola’s nomenclature has to distinguish USP, SSP, ISP and
MSP where the programming model shows one name.
The consequence is an instruction that exists only to reach the register you are not currently using:
MOVE USP — Move User Stack Pointer … Operation: If Supervisor State Then USP → An or An → USP Else TRAP
An operating system needs the user stack pointer in order to set a process up, and cannot address it directly, so Motorola provided a privileged instruction to fetch it across the boundary.
The 68000’s privilege model was incomplete
The clearest evidence sits in the manual’s own structure. MOVE from SR — read
the status register — is documented twice, in two different sections.
Under Integer Instructions, on page 229:
MOVE from SR — Move from the Status Register (MC68000, MC68008) Operation: SR → Destination
Under Supervisor (Privileged) Instructions, on page 471:
MOVE from SR — Move from the Status Register (MC68EC000, MC68010, MC68020, MC68030, MC68040, CPU32) Operation: If Supervisor State Then SR → Destination Else TRAP
Same mnemonic, same operation, opposite privilege — split by which processor is executing it. On a 68000, user code can read the status register freely. On a 68010 the identical instruction traps.
That is not a documentation quirk but a deliberate correction: a program running
in user mode should not be able to see the supervisor’s flags, and on the first
68000 it could. Motorola fixed it in the next part, which means any user-mode code
that had read SR on a 68000 stops working the moment it meets a later chip.
Named for what the 68000 could not do
Motorola’s list of the family describes each part in a few words, and the wording does the arguing:
| Part | Motorola’s description |
|---|---|
| MC68000 | “16-/32-Bit Microprocessor” |
| MC68010 | “16-/32-Bit Virtual Memory Microprocessor” |
| MC68020 | “32-Bit Virtual Memory Microprocessor” |
| MC68851 | “Paged Memory Management Unit” |
The 68010 is not described as faster or wider. It is described by a capability the 68000 is not described as having, and the visible difference in this manual is the shape of an exception stack frame.
When a 68000 takes a bus or address error it pushes a four-word frame: status
register, program counter, vector offset. The 68010’s frame for the same
exception, Format $8, adds an instruction address and “INTERNAL REGISTERS 4
WORDS”.
The 68000 saves what happened. The 68010 also saves where the processor had got to inside the instruction — which is the difference between an exception you can report and an exception you can recover from and continue. (That the internal state is what makes demand paging possible is the standard reading and follows naturally from the two frames, but Motorola states the frames and the part descriptions rather than drawing the line between them.)
There is a related limit already recorded elsewhere in this Vault: the Amiga’s
hardware manual warns that TAS “should never be used in the Amiga” because its
indivisible read-modify-write “will not fit into a DMA memory access slot”. The
68000’s atomic instruction and the 68000’s exception handling are both places
where the chip’s model of an uninterruptible operation ran into what the systems
around it actually needed.
Register architecture
The 68000’s abundance of general-purpose registers changed how programmers thought:
| Registers | Purpose |
|---|---|
| D0-D7 | Data registers (32-bit, can use as .B, .W, or .L) |
| A0-A6 | Address registers (pointers, indexing) |
| A7 | Stack pointer (separate user/supervisor modes) |
| PC | Program counter (32-bit register, 24-bit external addressing on the 68000; 68008 limits to 20-bit) |
| SR | Status register (condition codes + supervisor-mode bit, interrupt mask, trace flag) |
Key features
- Orthogonal design: most instructions accept most addressing modes.
- Multiple data sizes: byte (.B), word (.W), long (.L) operations.
- Powerful addressing: displacement, indexed, pre/post-increment/decrement.
- Supervisor mode: hardware separation of OS and user code. The CPU runs in either supervisor or user mode; certain instructions (STOP, RESET, MOVE to/from SR, RTE) are privileged. Each mode has its own A7 stack pointer (USP for user, SSP for supervisor) — switching mode automatically switches stacks.
- Exception handling: clean vectored interrupts and traps.
Addressing modes
| Mode | Syntax | Example |
|---|---|---|
| Register direct | Dn, An | MOVE.L D0,D1 |
| Address indirect | (An) | MOVE.W (A0),D0 |
| Post-increment | (An)+ | MOVE.B (A0)+,D0 |
| Pre-decrement | -(An) | MOVE.B D0,-(A7) |
| Displacement | d16(An) | MOVE.W 4(A0),D0 |
| Indexed | d8(An,Dn) | MOVE.B 0(A0,D1),D0 |
The 68000 vs 8-bit CPUs
| Feature | 68000 | Z80/6502 |
|---|---|---|
| Data registers | 8 × 32-bit | 1-6 × 8-bit |
| Address space | 16MB | 64KB |
| Multiply/divide | Hardware | Software |
| Stack | Flexible | Fixed |
| Code style | Clean | Hacky |
Systems powered
- Home computers: Commodore Amiga, Atari ST, Sharp X68000
- Consoles: Sega Mega Drive/Genesis, Neo Geo
- Arcade: countless boards throughout the late 80s/90s
- Workstations: early Sun, Apollo, HP systems
Cultural impact
The 68000 represented the leap from hobbyist to professional computing. Games like Speedball 2, Lemmings, and Shadow of the Beast showed what was possible when programmers had breathing room. The skills learnt on the 68000 translated directly to modern programming paradigms.