The Project:  Motivations  Specifications  Current Focus  Front Panel Logic
Events:       VCF East XIII  VCF West XIII  DEFCON 26  VCF Midwest 13
The Future:   Want a Cactus?

The Cactus in its natural environment
It started out as an idea.
It's taken a pile of paper and lots of research to get this far. I've spent months of time working on it. I've run digital logic simulations, and revised my designs time and again. I've had help from a handful of friends, plenty of acquaintances, and a smattering of strangers. I've experienced countless failures and setbacks, and sacrificed more sleep than on any previus project I've embarked on. But it's all been worth it.



The Cactus in action with its new brass case badge
What's the point of all this?
The Cactus is a computer, built with the goal of recreating the homebrew computer experience of the 1970s. This includes hand-wired circuit boards, 7400-series logic chips, and only a few post-1980 concessions where appropriate. While many machines of that era were commonly found with a front panel interfaces, only a few obscure examples use a 6502 microprocessor. Initially, the Ohio Scientific OSI-300 was the only exception that I'm aware of. However it's purely a 6502 trainer and not intended to perform any sort of practical computing. There is a front panel add-on for the SYM-1 by CGRS Microtech , but it's primarily governed by software from what I can tell. I've also recently learned about a 6502 homebrew design found in Byte Magazine known as the the Kompuutar. I would be surprised if any surviving examples of this machine exist, since they would have all been hobbyist made. All three of these examples are obscure, and didn't achieve much commercial success. Not to mention, they're all bundled with heavy limitations.

It was far more common to find 6502 processors with ROM monitors, hexadecimal keypads, and 7-segment displays, exemplified by the MOS Technology KIM-1, Synertek SYM-1, and Rockwell AIM-65. Then the microcomputer boom of 1977 changed the game entirely, and the front panel's time had come to an end. I've used the modern Mini OSI-300 replica in lieu of a real one. The Mini OSI-300 recreates the experience while upgrading the SRAM from 128 bytes to 4K, all while having a smaller device footprint. The hard part is using such tightly packed switches, and my fingers get tired of it really fast.

Time to build a computer:
The primary CPU/RAM/ROM/UART interactions are based on Grant Searle's Mininal 6502 design, modified for use with a bus structure. Quinn Dunki's Veronica has served as major inspiration, along with a slew of 1970s mini and microcomputers with front panel interfaces. The front panel logic is very much my own original work. It takes about two dozen 74HCT series logic chips to make up the front panel control logic. Previously, I was using a variety of other 7400 series logic families, but switched to HCT at the suggestion of the good folks at 6502.org. The result is a colossal pile of wires that actually runs.


Other modernization choices made include the use of a single SRAM chip containing 32K. The historically accurate solution would have been to use boards and boards of DRAM, or a very tiny quantity of SRAM chips (resulting in a much smaller amount of available RAM). The biggest change is the use of a 65C02S. The CMOS design and static core mean that the registers can be clocked down below 100KHz, unlike the original NMOS versions of the 6502. If you slow the clock down any further than that, your registers may lose thier values. As far as I'm aware, many contemporary microprocessors from the 1970s could be clocked down and not lose thier state in this way. I've also converted my design to use 6551's instead of a 6850 for serial interaction.


There is so much room for improvement in both functionality and construction methods. The wire used is intended for wire wrap sockets, rather than being cut to length and soldered in place. However, this method of construction is time consuming. I would like to get boards manufactured but that's a process that I'm not versed in - yet. There are all kinds of useful software that needs to be written or ported. So much work to do...


Specifications:

Processor: Western Design Center W65C02S @ 1MHz
RAM: 32K Static RAM (62256) & 2K Static Non-Volitile RAM (M48Z12)
ROM: 16K EPROM, 27128
RS232 Serial, MC68B50 at 38400, 19200, 9600, 4800, 2300, 1200, 600, 300, 150, or 75 baud
or Dual R6551 at 19200, 9600, 7200, 4800, 3600, 2400, 1800, 1200, 600, 300, 150, 134, 109, 75, or 50 baud
16 bits of Parallel I/O from 65C22 VIA
SAA-1099 Sound Chip
OSI BASIC Version 1.0 Rev 3.2 from 1977
Direct Memory Access via front panel.


Things I would like to add:
Perfecting single step control & possibly an adjustable slow clock.
A useful ROM monitor, to manipulate memory from a terminal.
More complex user I/O from 65C22 VIA.
Video output from an MC6845 CRTC or 6560 VIC chip. Perhaps with video circuitry I make myself. Far down the line.
Vector display control? Like on an oscilloscope.
Audio cassette tape storage. It's not a reliable or practical storage method, but it is very 1970s.
MC6800 CPU board just to show the Altair 680 I mean business.
Core Memory. I realize just how complicated this would be, but I want to try. I have some core boards potentially lined up for acquisition soon.
Diode-matrix ROM just to say I did.
FRAM board, to expand upon the non-volitile space provided by the NVRAM.


Memory Map:

0000-7FFF 32K RAM
8000-9FFF Unallocated (8K)
A000-A3FF Serial Interfaces
A400-A47F Sound Output
A480-A5FF Unallocated
A600-A7FF Parallel Interface
A800-B7FF Unallocated
B800-BFFF 2K NVRAM
C000-FFFF 16K EPROM

BFFF Serial configruation byte while using 6551 ACIA
C000-DED3 OSI BASIC
FE00-FF77 Serial routines




What I'm working on right now:
As of September 2018, I'm assembling a few boards, and writing software in 6502 machine language. I've built a simple 6522 board, and it's being tested with a modern CMOS 65C22. I've added a bank of 8 software-controlled LED, and another bank of headers. I've also integrated the 8 data switches on the front panel into the 6522 for use with software input. The data control card is actively being revised to alleviate a few signal sequencing issues that were incorrectly opening and closing certain buffers at different times. The logic chain has been improved, but is being actively tweaked to improve reliability, and prevent signal contention from impeding software input. Having 8 addressable LEDs for debugging has been essential for debugging purposes. I will hopefully have a rendition of "Kill the Bit" available before VCF Midwest. If it's good enough for the Altair, then it's good enough for the Cactus

6522 VIA board Backside of the front panel

I'm also testing a new serial board that uses two 6551 ACIA's with MAX232 level shifters all on a single card. Due to the significantly reduced part count for baud rate selection, I was able to fit the second serial port I've desired for some time. At present, I've got one of the ACIA's functional, and have modified the serial routines for BASIC to utilize the new chip. The user can now change the baud rate in software, rather than physically moving a jumper. So far, it's been functioning decently under stress. The second ACIA has yet to be seriously tested.

Testing the LED bank

I had been curious about running the Cactus with an authentic NMOS 6502 manufactured by Commodore. This meant adding buffers for the address and data buses to silence the CPU during front panel interaction. However, the nature of the internal registers will limit the functionality with this microprocessor variant. Ultra-slow clock modes, single stepping, and stopping the CPU expecting to resume on a human timescale will be out of the question on the NMOS board. Testing has proven that the R/W line also requires a buffer to prevent data from being clobbered during front panel DMA, and this yet to be finalized. The NMOS board has successfully run at 1MHz and 50KHz despite this issue.

Meanwhile, the CMOS board was tested with a 2MHz clock and a 2.457MHz clock. The speed of the machine is ultimately limited by the 6551's rather than the 65C02, the latter of which can operate at up to 14MHz. The current fastest the Cactus has operated at is 2.457MHz, but the design was never intended to operate above 1MHz.

Experiments are also taking place involving 8-bit latches, DACs, and other electronic components that I'm less familiar with. A recent revelation about the SAA-1099 sound chip in particular has resulted in a bit of fresh look at interfacing with it. I've built a crude sound card around one of them, and have begun basic testing. It could probably use an amplifier, but for the moment it will have to use the amplification of an external device. Test routines of random instructions have produced promising results.



The Cactus in action, running BASIC, with its older case badge.

Running BASIC The front panel

The heart and soul of the Cactus: the 35 pin backplane, and the 7 primary cards.

Top row: RAM card, EPROM card, serial card, address control card (rev 1)
Bottom row: CPU card, status control card, data control card


The heart of the machine The magnificent seven boards


Front Panel Logic Cards

Over half of the Cactus's integrated circuitry is dedicated to operating the front panel independently from the 6502. It's divided into three main cards:
Address Control allows the user to select an address to visit using the 16 silver toggle switches. After selecting an address, the user can either see what data is located there using Examine, or they can increment the current address just by using the Examine Next switch. This time saving measure is complemented by the Deposit Next switch for serious data entry.

Data Control allows the user to see whatever data is contained at the selected address. However, the data bus is not directly wired to the status lights. Instead, a series of interlocking buffers are used to load that value into a series of flip-flops, used as a temporary workspace. From there, the user can modify a byte, one bit at a time using SET & CLEAR momentary switches. When the user has finished entering a new byte or modifying an existing byte, pressing Deposit will allow that byte to pass back to the data bus and overwrite the previous value in RAM. This allows the user to fix off-by-one errors with greater ease. While the microprocessor is in control, the data bus is directly visible on the data indicators.

Status Control allows the user to control complex operations of the machine. All of the status control switches are momantaries, with accompanying flip-flops or debounce circuitry. The Address & Data control card functions are both orchestrated by the Status Control card, to ensure that each operation happens in the correct order. Sequencing is governed by a logic chain of cascading D-latches clocked from a 555 timer. Many of the direct memory access safety interlocks are controlled from here.

Front Panel Switches

Status control switches
  • RESET allows the user to reset the 6502, such that it checks the reset vector at 0xFFFC & 0xFFFD to know where the initial instruction can be found.
  • RUN/HALT allows the user to start and stop the 6502's master clock. While in the RUN state, most of the front panel controls are locked down to prevent user interference with the microprocessor.
  • STEP allows the user to send a single clock pulse to the CPU. You get to be the clock. It's still a work in progress, but it does sorta work now!
  • PROTECT/CLEAR allows the user to protect the contents of RAM from modification from either the front panel or the microprocessor. It too is a work in progress.
  • EXAMINE first sets address bus to the location dictated by the address toggle switches, by sending the address control card a LOAD ADDRESS signal. The address status lights will then match the switches accordingly. Then, the data control card is sent a CLEAR pulse to the flip-flops, followed by a LOAD DATA BUS signal, copying the current value into the flip-flops for display on the data bus status lights.
  • EXAMINE NEXT first sends an INCREMENT ADDRESS signal to the address control card. THen the data control card is sent a CLEAR pulse to the flip flops, followed by a LOAD DATA BUS signal.
  • DEPOSIT sends the DEPOSIT signal to the data control card, opening buffers between the flip-flop outputs and the data bus, as well as stobing the R/W bus line telling the RAM to overwrite its current value
  • DEPOSIT NEXT first sends a DEPOSIT signal, followed by an INCREMENT ADDRESS signal, then a CLEAR pulse to the data control card, and finally a LOAD DATA BUS signal. I'm told this sequence is opposite to how machines like the Altair 8800 implemented this switch



Watch the Cactus during an earlier stage of development:




So many wires, so many tests...

Backside of the front panel Testing the RAM card




Vintage Computer Festival East XIII

The Cactus was on display at Vintage Computer Festival East XIII in Wall, NJ on May 19 & 20, 2018. I explained why I built it, what motivations lead it its design choices, and where the project was headed. Visitors were welcome to try using the front panel, program in BASIC, and listen to me ramble. I used a Heathkit H89 as a serial terminal to program using BASIC. A friend connected up a dot matrix printer in parallel with the terminal, and also managed to copy over Lunar Lander one line at a time from my Toshiba Libretto 70CT. Playing games on the Cactus!

I also briefly replaced the 1MHz clock crystal with an external pulse generator. The system clock was brought down into the sub-100KHz range, going as low as a few dozen Hz at times just for fun. I garuntee you've never seen a 6502 move that slowly. BASIC runs really slowly at that speed, and it gives you some perspective on how much work is happening in such a brief moment in time within the 6502.

A friend filmed the Cactus while I had external pulse generator connected. You can see individual instructions go by on the indicators as it struggles to begin rendering text on my H89:



My exhibit!

Lunar Lander Front panel running

People learning about the Cactus

Despite not actually being a vintage computer, it was a major hit with visitors and fellow exhibitors. Quite frankly, I wasn't expecting such an overwhelmingly positive response.


Vintage Computer Festival West 13

I exhibited the Cactus at VCF West on August 4th & 5th in Mountain View California, at the Computer History Museum. This was my first time at VCF West, and the atmosphere made for a different experience compared to VCF East. Erik Klein was kind enough to lend me the use of a Televideo 910 due to my considerable distance from home. The Cactus was transported in a customized flight case to ensure it arrived intact. However, due to poor packing on my part, the contents shifted on its 3000 mile journey. The Deposit switch and a pair of header pins on the Status Control card were damaged in transport, and required on-site repairs before the show began. Fortunately, I was able to effect repairs, and the rest of the weekend's demonstrations went smoothly.

A few weeks prior to the show, I discovered that the MOnSter 6502 would be in attendance, along with the good folks at Evil Mad Scientist Laboratories. I reached out to its creator, Eric Schlaepfer, and asked if he would be willing to combine our two machines in an experiment. He was interested, letting me know that as long as I adhered to the NMOS specification and clocked down to 50KHz, the two should be able to work together. Normally, the Cactus relies on the 65C02's Bus Enable pin to halt the CPU and allow the front panel logic to take over to provide the user with direct memory access. I built a new processor card with additional buffers to account for the lack of such a pin on the NMOS variant, and tested it with an original Commodore 6502 from 1983.

Once at VCF West, our first attempt on Saturday pointed out that I had neglected to buffer the Read/Write line, resulting in bus contention. On Sunday, Eric brought me a breadboard, some additional jumper wires, and a few tristate buffers from his stockpile. After splicing an additional 74LS245 into the NMOS card, and testing with an NMOS 6502, we decided to try again. Lo and behold, the Cactus and the MOnSter 6502 successfully booted into BASIC, and ran at 50KHz for about half an hour, creating a spectacular fusion of blinkenlights. That makes the Cactus the third machine to use the MOnSter 6502, and the first one that wasn't made by Eric. Needless to say, this was the highlight of my weekend.



The Cactus running with the MOnSter 6502


DEFCON 26 Hardware Hacking Village

I gave a talk & demonstration at the DEFCON 26 HHV at 4PM on August 11th. I discussed the history of the front panel and 6502 machines, my design influences and inspirations, and demonstrated the machine in action. I was really happy with the level of interest on display by attendees. This time, the Cactus made it to the show in one piece and performed admirably. Possibly more photos, and a video recording to follow. Out of respect for the DEFCON photo policy, I don't have much material here.

Pre-demo setup and debugging


Vintage Computer Festival Midwest 13

I exhibited the Cactus at VCF Midwest , September 15th & 16th in Elk Grove Village, Illinois. I also gave a talk on the subject, along with a history of various front panels to add some context to my project. Photos to come!


I've been asked at multiple events if I'm planning to make a kit version of the Cactus.
Right now the answer is "Probably."  
I would love to be able to make a kit version of the Cactus for those interested.
Please be patient, I've got a lot of work to do before we're at that stage of development.
I have no intention of selling anything until I have a design I'm confident in.  
I'm talking with friends who have produced and sold kits about what's involved.
How many people want a Cactus?  How many kits would that be?  I'm not precisely sure. 
As of right now, I've got atleast a dozen interested parties.  

If you are interested in a kit when they're ready, send me an email to let me know.


Have a question? Want to know more about the Cactus? Know of another 6502 machine with a front panel? Email me:

email



Home
This page was last updated on 9-17-2018