A 65c02 based homebrew computer

Similar projects worth following
The idea to build my own 8bit computer has not been new. In fact, I had it in the back of my head for about 20 years until at the end of 2013 I finally decided to give it a go.

The first experiment was to wire a 65c02 up on a breadboard, hard-wire the data bus to $EA, the NOP instruction, feed it a clock signal (slow, about a few hundred kHz) and watch the address bus count using LEDs.

After that succeeded, ROM and RAM were added, and later also a 16550 UART for serial connectivity and finally a TMS9929 video display processor courtesy of my buddy Marko, who joined the project. So step by step, that breadboard pig (working title "Steckschwein" - "plug pig") evolved into a full blown 8bit computer running on 8MHz and using SD-cards for storage.

We also developed our very own "operating system" called "SteckOS", which does not do very much, but includes our very own implementation of a FAT32 filesystem in pure 6502-assembly.

Having evolved from the breadboard stadium a while ago, the Steckschwein is divided into 4 main units, each located on a separate circuit board. The boards are connected through a piece of 50pin flat cable, not unlike a SCSI II cable, but much shorter. The main units are:

  • CPU/Memory board
  • I/O board
  • Video board
  • Sound board

This approach allows us to upgrade one of the units without having to design a whole new pcb. Our main goal however is a single board version of the Steckschwein.

The current specifications are:

The following sections will describe the main units in more detail.

CPU/Memory board

This is the heart of the Steckschwein computer (obviously) and consists of the 65c02 CPU, 64k RAM divided into 2 32kx8 SRAM chips, 32k ROM on a 28c256 EEPROM, divided into banks of 8k, and 2 GALs for address decoding and wait state generation. The memory map is as follows:

Adress Description
$0000-$00ff Zero Page
$0100-$01ff Stack
$0200-$02ff I/O area
$0300-$7fff RAM
$8000-$dfff RAM
$e000-$ffff ROM/RAM

We put the I/O area just behind the stack to get the most possible amount of unfragmented RAM. Also, the address decoder is capable of mapping out the ROM entirely. Any writes to the ROM while it is mapped in will go to the underlying RAM. Yes, this has been heavily inspired by the C64.

We actually make use of this when booting SteckOS. The "OS loader" will write the kernel "under" the ROM, then map out the ROM and jump to the kernel init routine. Also, this proved to come in very handy when testing new BIOS versions before finally burning them to EEPROM.

I/O board

The I/O board is where the Steckschwein talks to the world. A 65c22 VIA's port B is used as a SPI master (semi bitbanged), port A is used for the joystick ports and also doubles as user port. In it's latest incarnation, the I/O board also contains the 16c550 UART, which had it's own board before.

We use SPI as the main peripheral bus because it allows us to use SD cards as storage device. That way, we get gigabytes of storages for almost no hardware effort. Theres no reason do deal with disk drive controllers in 2014. Also, we use a ATmega8 micro controller to interface between a PS/2 keyboard and SPI. The last SPI device is a Maxim DS1306 real time clock, which also has a nice feature of 96 bytes of battery buffered memory, which we use to store a few parameters (boot file name, uart baud rate, etc.)

Video board

We now use a V9958 VDP, the TMS9929's successors successor with 128k DRAM. This chip does not generate YpBpPr, but RGB video. We use a CXA2075M as output stage and for generation of compsite video and s-video.

Old Video board

One thing about the TMS9929 video display controller compared to it's US sibling TMS9918 is the output of YPbPr video, which made it necessary to put a converter circuit tp RGB on to the board, too. Also, it only supports 4116 or 4164 DRAMs natively. DRAM proved to be a real pain on a breadboard (our experiments with the 9929 and DRAMs eventually led to the decision to finally design PCBs), especially those 4116 things which need 3 operation voltages (-5V, +5V and 12V). Also, those old DRAM chips are increasingly hard to come by, so we went with an alternative circuit which allowed us to use another 32kx 8 SRAM.

  • 1 × WDC 65c02 CMOS version of our favourite 8bit CPU
  • 1 × 16c550 CMOS version of the well known serial chip
  • 1 × Yamaha V9958 Video Chip. successor of the successor of the famous TMS9918 from Texas Instruments
  • 1 × Yamaha ym3812 Also known as OPL2, FM-synthesizer also used by Adlib and early Sound Blaster cards
  • 1 × GAL22V10 Logic ICs / Programmable Logic: PLDs, Used for address decoding

View all 9 components

  • Another Hardware Upgrade - V9958 + OPL2 Sound

    Thomas W.12/14/2018 at 16:40 0 comments

    Too much empty space on our new V9958 video board. So, why not add more memory? Adding another 64k maxes out the available memory for the V9958 to a whopping 192k. These additional 64k are not usable by any of the video modes directly, but are treated by the chip as so called "extended memory". Using the command engine, data can be swapped from regular video memory to extended memory or vice versa.
    We decided to not use the RCA Jacks for RGB output anymore, because there was not enough space on the board edge for an extra jack for sound. Instead, we decided to go with a DIN jack. We use the same jack the NeoGeo uses for RGB, which also has a pin for audio. So one single cable to connect an RGB-Monitor. Also, there are ready made cables available. Nice.

    Also, having still space to spare, we decided to add the OPL2 sound chip to the video board, too, making it a "multimedia board". The V9958 also has a pin "CPUCLK", which provides the 3,58MHz clock needed by the OPL2 chip. Sound support only existed on stripboard or even breadboard, so it really was about time.
    The analog stage of the sound section by the way was closely modeled after the one in the Commodore SFX expander for the C64.

    Now, only 3 boards are needed to have a full featured Steckschwein including sound.

  • Wozmon on the Steckschwein

    Thomas W.09/04/2018 at 13:09 0 comments

    Steve Wozniaks famous 256 byte memory monitor has been ported to the Steckschwein. Check it out.

  • Upgrading the video chip to V9958

    Thomas W.03/20/2018 at 12:55 0 comments

    Like the 9929 board, the all new, all more powerful video board based on the mighty Yamaha V9958 chip has two parts – the video chip part with the 128k video memory (64k x 4 DRAM this time) and the signal part, using the Sony CXA2075M chip not only as RGB output stage, but also to generate composite video and s-video. This should increase the number of Steckschwein-compatible monitors a big deal.

    The V9958 is the successor of the V9938, which in turn is the successor to our TMS9929/9918, which has served our project for quite some time. But it is hard to ignore what the V9958 has to offer (80 column text mode to begin with), so we decided to use it as the first major upgrade to the Steckschwein Hardware specs in a couple of years.

View all 3 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates