DIY ("Do-It-Yourself") 6502 computer

by Douglas Beattie Jr.

This is a hypertext version of my article which appeared in issue #78 of TCJ (The Computer Journal) -- you can order the hardcopy as a back issue from them.

There are many eight-bit processors, which have been around for a long time. One of these is the 6502, which has been used in a number of home computers. The 6502 is an ideal processor for a prototype. It is also quite affordable.

The 6502 prototype

A prototype is a basic model from which to build and expand upon. It allows us to evaluate and analyze a minimum system. With a prototype, we can study the operation of components functioning as a system.

This allows us to gain experience with the components, and better understand how they work. It would be difficult to study a component in detail without using it as part of a system.

As an example, perhaps there is a particular RS232 communications chip you wish to learn more about. It is not practical to use the chip all by itself. We connect it to other chips (components) and utilize its ability to communicate. If it is a chip we haven't used before, then we must learn to "speak its language," learn how it operates. One practical way to do this is with other computer chips, on a little circuit board, working together as a system. This type of system is often referred to as a prototype.

The 6502 prototype board is surprisingly easy to build, and if you build it on a bigger board than is needed, it can be expanded and enhanced later.

After you understand the minimum system (your prototype) you can add other things like a printer port, floppy drives, and even a hard disk, CD-ROM, plotter, or whatever.

At first, we want a real feeling for the capabilities of the 6502 prototype board, so at least let's have a keyboard, and a video screen to communicate with it. A computer terminal does both.

We can use the 6502 CPU to operate the communications chip. The communications chip already knows how to communicate with the RS232 modem port on our PC.

If you have a terminal, fine. Use that. If you have a TRS-80, you could use that as well. I also remember somebody mentioning once that a dumb terminal was a perfect application for a PC. All we do is run QMODEM or TELIX or PROCOMM or whatever... and instead of initializing a modem and dialing it, we fire up the little computer board and compute on it.


This is the computer board; you should build it. It's just a prototype, but the potential is here to expand and modify into many useful things. It consists of the following circuit chips.

6502 CPU -- the heart or "engine" of the system.

2K or 8K EEPROM (jumper selectable)
-- a special type of Read-Only Memory, also known as "E-2-prom," this is like EPROM but no dangerous ultraviolet rays are required to erase the chip. It is erased electronically.

32K Static RAM -- usually called "S-ram," static RAM is simple to interface.

6522 Versatile Interface Adapter -- combination of two parallel I/O ports (each with eight synchronized lines, like for a printer device), and timers. Timers are useful for one-shots or counting duration, or alarms for overtime, etc.

  • one-shots:
    something happens for a precise timed duration. It might be a length of a tone, squirt of fuel or a douse of water, or a shot of air.

  • duration:
    how long something happens .. perhaps how long after dawn your street light finally decides to go off. How long it takes your little heater to heat the backyard pool up to comfy.

  • alarms (time-out): been in the freezer room for too long? an alarm sounds.

  • 6551 ACIA
    -- the Asynchronous Communications Interface Adapter. Don't let the long technical name fool you. It's fairly simple. Basically, it provides the interface to a modem or to another computer.

    The ACIA connects your terminal to the computer board, so you can interact with your computer board, update information, set parameters of operation, duration of timing, error correction factors, etc.

    Basically, that's it... CPU, RAM, ROM, VIA and ACIA

    Other Chips

    The 7404 (chip U2) is an inverter. It produces a high level from a low input, and a low level from a high input.

    The 74LS139 (chip U3) is similar to the popular 74LS138, but instead of producing eight signals from three lines, it produces four signals from two lines. The 74LS139 also includes two identical decoders within one package.

    The MAX233 (chip U7) is a single-chip solution for RS232 line drivers/receivers, producing the proper voltage transitions between 5-volt TTL level and 12-volt RS232 level. It is an ideal chip for serial communication when only 2 input and 2 output lines at most are needed. No external capacitors are required, and it draws very little power.

    Theory of operation

    System ROM is jumper-selectable. The jumper option allows either 2K ROM or 8K ROM, addressing the 2K option at $F800, or the 8K option at $E000. The schematic references an 8K (28-pin) socket, but no distinction is made between the two -- either ROM will work effectively if the jumper is set correctly.

    Address decoding for upper memory is accomplished using 1/2 of a 74LS139 (chip U3A).

    The 6522 VIA is decoded at location $C000..C00F. Chip selects come from chip U3A and address line A12 (inverted).

    The 6551 ACIA is decoded at location $D000..D003. Chip selects come from chip U3A and address line A12 (true).

    The CPU clock comes from a 1_MHz crystal oscillator. VIA and ACIA clocks are driven from the buffered CPU clock PH2 (for greek letter "phi", and 2). The ACIA also utilizes a separate 1.8432_MHz crystal oscillator for baud rate generation.

    A full 32K of RAM is located at $0000..7FFF. Chip select for this RAM is provided by CPU address line A15; when A15 is low, the 32K RAM is selected. Read and write signals are provided by U3B, another 1/2 of a 74LS139.


    It seems that wire-wrap is the way to go. Now, if you have tried to wire wrap before, and were not successful, this time you should be:

    1. because there is a wirewrap list.

    2. I drew the schematic to represent the component layout.

    You don't have to build it this way, but I tried to make it easy for you. With a few sockets and a perfboard, you can build the prototype.

    There is a drawing of where the sockets should go.
    - try to position the sockets on the perfboard according to the diagram.

    There is a schematic which closely resembles the actual layout.
    - follow the schematic as you build it; refer to it throughout.

    There is a systematic wire-wrap list.
    - not much more difficult than a dot-to-dot.

    There is also a parts list.
    - I picked all parts that are available from Jameco Electronics. Jameco has been around for many years and has competetive prices.

    Be sure to use Wrap ID tags. These are worth the extra cost. The task of wire wrapping becomes a smoother process.


    The toughest part of this whole project will probably be filling out an order.

    Filling in an order form, and punching in all those part numbers is not exactly my idea of fun. Any spreadsheet program makes light of the job. I used a really old version of Lotus 1-2-3 (the one that runs on a PC-XT) -- it worked just fine. And evidently Jameco didn't mind. Their service was fast.

    Call Jameco for their latest catalog at (800) 831-4242, or e-mail them at, or request a catalog through their computer bulletin board at (415) 637-9025.

    ((( see parts list )))


    If you do decide to build this prototype, and then expect it to do something, it will need two things:

    An application -- what the computer will be applied to do. Applications can be simple or complex, depending...

    A program in ROM. That would be software, but we call it firmware when it is programmed into an EPROM or EEPROM. Program development usually requires a cross-assembler. You can also "hand-assemble" without an assembler program.

    I wrote a short test program to verify that the board is working. BB0010A.AS transmits a sequence of "01234567" repeatedly to the serial channel, while at the same time receiving keys through interrupt. Whenever a key is received, it is also re-transmitted to the serial port. While all this is happening, parallel port B is turning LEDS on and off. This assumes that you have put eight LEDS on the parallel port.

    You might wire a 20-pin socket to port B of the VIA (as I have done). By using a ribbon cable with IDC socket plugs on each end, you can do all further experimenting on a breadboard. Use port B, because it can sink more current (handle a bigger load). The test program BB0010A.AS is only to prove that the board is working. I might provide a follow-up article which will give some more software examples.

    ((( see BB0010A.AS source code )))

    If you already have a 6502 assembler, then cool. Otherwise, scour the internet; I have found 6502 cross assemblers in any one of six different locations. I also wrote one for IBM-compatibles. This is MAS65.EXE and can be found at my web site, URL

    If you don't have access to the internet, my advice is GET IT. You have no excuse not to. It is affordable, easy to learn, and readily available. It can be accessed through an x86 PC or a CP/M machine or even a dumb terminal. You probably would use the x86 PC since more cross assemblers are available for the PC. I also saw a CP/M cross-assembler for the 6502 somewhere.


    You tell me! What would you use a small computer board for? (Note one example above for the deep freezer time-out alarm.) Feel free to send some suggestions via E-mail or Mail. The 6502 prototype is rather powerful; plenty can be done with it.

    More To Come

    In the future, we will look at ways to enhance the 6502 CPU, expanding its ability. I will provide functionally equivalent TTL and PLD examples, along with a diagram of the state machine.

    Further Reading

    David L. Wagner, Digital Logic, Harcourt Brace Jovanovich Inc., pp 265..275, 1988

    Ronald A. Reis, Electronic Project Design and Fabrication, Merrill Publishing Company, pp80..83, 1989

    Rodney Zaks, 6502 Applications, Sybex Inc., 1979

    Rodney Zaks, Programming the 6502, Sybex Inc., 1980

    References and Data

    Rockwell International, R650X and R651X Microprocessors (CPU), Document No. 29000D39; Rev 8; June 1987

    Rockwell International, R6522 Versatile Interface Adapter (VIA), Document No. 29000D47; Rev 9; June 1987

    Rockwell International, R6551 Asynchronous Communications Interface Adapter (ACIA), Document No. 29651N90; Rev 4; June 1987

    Rockwell International, R6500 Microcomputer System Programming Manual, Document No. 29650N30A; Rev 3; April 1984

    NEC Electronics Inc., Memory Products Data Book, Volume 2 of 2, Document No. 60105-1-V2, 1993

    Xicor Inc., X28C64 8K x 8 bit 5-Volt Byte-Alterable E2PROM, document 3583-2.4; 7/24/95

    National Semiconductor, LS/S/TTL Logic Databook, 1989

    Maxim Integrated Products, +5V-Powered, Multi-Channel RS-232 Drivers/Receivers, document 19-4323; Rev 3; 5/94


    (contact information was accurate in 1995, but phone numbers and URLs may be outdated or gone.)

    Rockwell International
    (714) 833-4600

    NEC Electronics Inc.
    (415) 960-6000

    Xicor Inc.
    (408) 432-8888

    National Semiconductor
    (800) 272-9959

    Maxim Integrated Products
    (408) 737-7600

    About the Author

    Douglas Beattie Jr. is an independant consultant for electronic design and development. He left school early, as he was much too busy studying the minutiae of state machines and combinatorial logic to be sitting in a classroom, learning at a standardized rate. He enjoys reading databooks and scrutinizing waveforms; designing prototypes; preparing technical reports, and documenting his work for future reference. His personal library consists of over 450 books and technical manuals, with not one work of fiction.

    Write to Doug at his office:
    This address is current.

    Douglas Beattie Jr.
    ICONIX Research
    5875 S. Adams Ave., Ste. 222
    Ogden UT, 84405-6961