KENBAK-uino (Arduino emulation of the KENBAK-1)

This is an Arduino-based emulation of the KENBAK-1 Kenbak-1 - Wikipedia, considered by some to be the first "personal computer", first advertised for sale in the September 1971 issue of Scientific American.



The KENBAK-uino by funnypolynomial, on Flickr



Core Memory by funnypolynomial, on Flickr



Assembled -- Top by funnypolynomial, on Flickr



Scientific American by funnypolynomial, on Flickr


I'd been thinking for a while that emulating an old-school switches-and-lamps computer would be a fun Arduino project, but had stalled looking at things like the Altair 8800 with its 30+ lights and 20+ switches. However, when I stumbled upon the Kenbak I thought it was something I could pull off as my first real Arduino project. Naturally I called it the KENBAK-uino.
This is the end-product, it can be programmed via the buttons on the front panel and show outputs on the LEDs. It's a faithful emulation of the original CPU but with a few enhancements thrown in like pre-loaded sample programs and access to a real time clock.
See the set on flickr with more photos and a couple of videos KENBAK-uino | Flickr.
Get the Sketch from here:Mark Wilson's Home Page - Software/Arduino/KENBAK-uino.

Never heard of KENBAK until today,

Do you have a movie (youtube) that shows how it works?

Awesome job! :slight_smile:

Do you happen have the files and other info for the case/panel/switches used (so it can be replicated like your original)?

There are a couple of videos of the KENBAK-uino at the end of my flickr set, KENBAK-uino | Flickr
The first one shows me entering a simple program on the front panel, the second shows the sample programs I include in the sketch.
The only youtube video I've found of the original is this World's First Personal Computer - Kenbak-1 Taken Apart and Shown by Pioneer Robert Nielsen - YouTube.


Here in New Zealand, I used these buttons http://www.jaycar.co.nz/productView.asp?ID=SP0603 and this case http://www.jaycar.co.nz/productView.asp?ID=HB5970. I've attached a PDF of the faceplate and drilling guide.

face.pdf (10.8 KB)

Nice job. The thing I remember most about those days was how hard those things were to program. I really love it when cassette tapes came around.

How are you folks getting those incredibly nice front panels?

Oh yeah, programming it is not easy! But it is quite a sense of achievement



Faceplate by funnypolynomial, on Flickr


The enclosure came with a black plastic front panel which sat in a slot in the case. I used thinner white plastic and had intended to laser-print the labels on an Overhead Projector transparency, but it kept smudging, so instead I printed it on heavy acid-free paper. The design of the front panel was done by writing custom PostScript code. Small bolts ran through the paper and plastic backing to the front-panel PCB. The paper+plastic sandwich slid into the slot in the case.



Assembled -- Front by funnypolynomial, on Flickr

kiwimew:
Here in New Zealand, I used these buttons http://www.jaycar.co.nz/productView.asp?ID=SP0603 and this case http://www.jaycar.co.nz/productView.asp?ID=HB5970. I've attached a PDF of the faceplate and drilling guide.

Thank you for posting that; its really a great looking project - heck, it deserves to be a kit! It would complement the "mini-Altair" emulation kit that's out there (which uses a PIC processor, IIRC)...

:slight_smile:

That was so clever. Good job. On the transparencies, I once tried that, but I had the same problem as you. Additionally I had the letters try to flake off when they were touched and it just wouldn't cooperate with me. What I finally ended up doing was reversing the lettering so that when I turned it over, it read correctly. Then I mounted it backwards to the panel I was using. It looked really cool for a few months and the darn transparency started to turn yellow. I understand they have that problem fixed now and it could work. Haven't tried it though.

Next question, how did you punch those perfect holes in it. I could understand a hole punch, but you have different size holes there.

In case you haven't noticed, I'm stealing your ideas.

Thanks for your kind words. I'd love to see some other KENBAK-uino's out there. :slight_smile:
I was also going to do the "reverse" trick on transparency, but couldn't get past the smudging (especially after punching 33 holes, that's a lot of handling). I'll keep an eye on my test pieces and see if they yellow, for future reference.
I used a "Revolving Punch Plier" like this http://www.handscraftstore.com/shop/show_single_product.php?prod=1060 (but thankfully a cheaper model). The secret is to put a few extra layers of sacrificial paper behind the work-piece, a single piece of paper won't punch very well. And then it was a matter of carefully placing the punch over the faint circles I rendered on the front panel.

revolving punch plier.....I didn't even know such a thing existed. One day, we should all get together and share ideas about making projects look nice. Things like bezels for LCD displays, lettering, drilling holes, etc. The newbies would love it and us folk that have tried a thousand ideas just to have one work would save a bunch of time.

Thank you very much.

I mailed John Blankenbaker yesterday the original creator of the KENDAK this thread ( - http://www.kenbak-1.net/ - )

From his reply "... I have often wondered how much physically smaller the Kenbak-1 computer could have been made using modern technology. The limitation is in the switches and lights, not in the logic."

I think he is 100% right,

@kiwimew
Great project, well done.

I've always wanted a KenBak-1 for my retro computer collection, now I can :slight_smile:

John B told me he encourages the K-uino.

BTW, some of my original captions on flickr were wrong: September 1971 is FORTY years ago not thirty!
No, I don't know how I screwed that up but I was in a slight hurry to post before the end of September.

draythomp:
revolving punch plier.....I didn't even know such a thing existed. One day, we should all get together and share ideas about making projects look nice. Things like bezels for LCD displays, lettering, drilling holes, etc. The newbies would love it and us folk that have tried a thousand ideas just to have one work would save a bunch of time.

Thank you very much.

There's also a tool out there called a "chassis punch", which has hard steel anvils in various shapes to punch different sized holes thru various materials (thin sheet metal, typically). You can find a set via Harbor Freight and other places (also used to punch holes in the old days on metal car dashboards). I've yet to find a set, though, that has square punches (back in the day, these were typical - not sure what happened to the square ones).

Embedded YouTube of the KENBAK-uino being programmed:

Awesome project. It makes me want to add a friendlier user interface to it (LCD + number keypad).

This emulation project makes me think of another emulation project: what if I use an arduino and a 128*64 GLCD to emulate a 20X8 HD44780 character LCD with 4-bit interface????

what if I use an arduino and a 128*64 GLCD to emulate a 20X8 HD44780 character LCD with 4-bit interface????

you will have too few pixels?
128 /20 = 6
64 /8 = 8
so your chars are 7x5 if you don't want them touching each other.

16 x 8 display seems more feasable as you get 7x7 chars

I thought the basic font ont the GLD is 75 so 86 space is enough to fit one character with boarders on the bottom and right. I'll have to check. I have a GLCD on a breadboard.
With 13 pins for the GLCD and 6 pins to emulate HD44780 LCD, I still have one pin left, what to do???

The real question is, will LiquidCrystal library work with this size display (8 rows).

I still have one pin left, what to do

Backlight control?

The real question is, will LiquidCrystal library work with this size display (8 rows)

4 lines is most , saw the code quite recently.

void LiquidCrystal::setCursor(uint8_t col, uint8_t row)
{
  int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
  if ( row > _numlines ) {
    row = _numlines-1;    // we count rows starting w/0
  }
  
  command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
}

this one can be patched quite easily I think...

Seems to me these could be Arduino-emulation-worthy and interesting projects:
COSMAC ELF, COSMAC ELF - Wikipedia
11 toggles, 1 push-button and two seven-segment displays

EDUC-8, EDUC-8 - Wikipedia
44 LEDs(!) and 15 switches