A real working computer using the Intel 4004/4040.
Write and execute programs using the powerful MCS-4 instruction set!
I have always wanted to have a system that would allow me to experiment
with what is generally recognized as the world's first microprocessor - the
My goal for this project was to be able to experiment with programming
and interfacing the Intel 4004. These processors were used in a variety of
control applications in the early to mid 70s but trying to find a system to
actually write and execute code on proved difficult. I did manage to locate
a simulator - but it's just not the same without the real hardware.
I wanted a system that would be easy to operate with a variety of features.
I modeled this system after the microcomputer trainers that were popular
in the early days of the microprocessor revolution. I wanted functions
like memory inspect and modify, register inspect and modify, and the
ability to execute programs from anywhere in RAM. I wanted plenty of
memory for code just in case I wanted to do something crazy like control
my house. The most important requirement was that it be stand alone.
This required the addition of a keyboard and display. At the same time,
I wanted to be able to download and execute larger programs remotely via
a serial port. All of these goals have been met with the MCS4 Micro-Lab.
The hardware consists of the following:
Microprocessor - Intel 4004 or 4040
Clock Generation - Intel 4201A w/5MHz crystal
Register RAM - Intel 4002-1
Standard Memory Interface - Intel 4289
Monitor ROM Memory - 2732 EPROM
Program Memory - 8 of IMS1400 16Kx1 Static RAM
Keypad - 21 Tactile Switches
Display - 20 Character by 2 Line LCD Module
Control Circuitry - Various 74 series TTL logic chips
RS232 Interface - MAXIM single supply interface chip
The components were chosen to minimize the size of the computer (all
components - including display and keyboard are mounted on a xx" by xx"
board) and also to enable real programming of the 4004. The 4289 was chosen
to simplify the interface to the Monitor ROM and Program RAM. It enabled me
to implement a Write Program Memory function (essential for any development
type system) with a minimum of external logic. I looked at the design for
the SIM4 (Intel's original 4004 computer board) where the memory interface
was done with discrete logic. That design seemed a little too cumbersome
to implement on a small board along with switch and display interfaces.
The RAM was chosen simply because I had a good supply of those chips and
they looked like they would fit well with the rest of circuitry. The 16K
size would also provide more memory than I would ever need (famous last
I debated on the type of display. My first idea was to use some type of hex
digit display like the TIL311 or 7-segment display with a 9368 driver but
then thought it would be nice to display text as well as simply addresses
and data. An LCD module with an HD44780 standard controller was chosen
for the final design. The 4-bit mode of this module was a good fit for a
This keypad consists of 21 tactile switches (16 hex and 5 function keys)
mounted and soldered on dip sockets which are it turn plugged into the
socket on the computer board itself. This enables easy replacement of a
single switch if necessary. I choose tactile pushbutton switches because
they have a nice positive feel when depressed.
One nice feature of this computer is the ability to use either a 4004 or
a 4040 microprocessor. This demonstrates the close functional equivalence
of these two processors. Just change a jumper on the board, remove the
4004, install the 4040, and all functions are available - only now you're
running with a 4040!
All TTL inputs which are driven by NMOS outputs are protected by diode
clamps and the power supply is bypassed at each IC.
I chose wire-wrap as my construction method because it would allow changes
to be made simply and is also reliable and very durable (all wire is 26AWG.)
All components are socketed using high quality machined pin sockets. The
discrete components and the switches are all mounted on headers making for
The linear power supply provides +5VDC and -10VDC (an additional +12VDC output
is not currently used.) I chose a heavy duty linear supply for its clean
output and because it will supply more current than I could possibly need.
(lots of extra ooomph for expansion!)