Retro 6502 Computer

As a sophomore in high school, I was growing more and more interested in the world of digital logic and processor architectures. I decided to pursue this interest by designing a basic computer system around the 6502 processor (identical to that of the Commodore 64). I wanted to put myself in the shoes of the pioneers of the digital age, so I abstained from using the Internet for any resources other than purchasing the components themselves and obtaining their technical datasheets.

The machine runs at a maximum speed of 2 MHz, and a switch located at the top allows for the option of using a pushbutton to step through machine cycles for debugging purposes. Out of the 16-bit address space, 32K of flash ROM is used for code and 16K of RAM is allocated. The remainder of the address space is used for memory-mapped I/O and peripherals, including a serial interface and GPIO. Digital logic (using 7400-series chips) is used to decode the upper bits of the address bus and conditionally enable each device on the data bus to ensure that only one device would be active on the bus at a time.

All of the connections between devices are located underneath the board using point-to-point soldering. The image above on the right shows the address bus of the computer soldered to vertical posts from which wires branch out to peripherals.

The computer was programmed by writing assembly code in a notebook. The code was assembled by referring to the technical datasheet of the processor and translating each instruction into its associated opcode. The binary was then loaded into the flash ROM with a small memory programmer I created, and after being programmed, the ROM would be placed into the computer. After the computer is powered on, the code would begin execution.

While this project was conceived as a way for me to learn about computers at a lower level, I found it to be a fun project which I hope to continue in my free time. Future development will include addition of a graphics card and compilation of BASIC to run on the computer.