Quarter-Cab — Phase I

8 May 2024
Diagram of the Quarter-Cab virtual pinball controller.

Full-size virtual pinball cabinets are expensive to purchase or difficult to build yourself (and even then, expensive). Here I put together a kind of partial virtual pinball controller, a Quarter-Cab if you will. Hopefully those new to wood working will not find this too intimidating. And I did what I could to keep Phase I of the controller affordable. Here's how to build it.


VPX Scripting — Part 6 (End Sound)

22 Apr 2024
Star Dust backglass art.

Finally we add a few sound features to Teacher’s Pet and get the table cleaned up and ready to roll out. This post wraps up the sound work (but don't worry, there's plenty more we can do with Teacher’s Pet in blog posts forthcoming.)


VPX Scripting — Part 5 (DOF)

21 Apr 2024
Pit Stop backglass art.

In addition to dipping our toe into the debugging capabilities of Visual Pinball (VPX), we’re finally getting around to closing up the loose ends with DOF. Everything you need to know about DOF is (probably) here. (And if you don’t even know what DOF is, this is definitely for you.)


VPX Scripting — Part 4 (Pet Sounds)

19 Apr 2024
Teacher’s Pet backglass art.

Yes, we left Teacher’s Pet broken in the last part of the series, but we fix it up in this post and finally get to try it out. This is a continuation of a series on modifying Visual Pinball (VPX) pinball tables.


VPX Scripting — Part 3 (Cut & Paste)

19 Apr 2024
Pat Hand backglass art.

Continuing to work on the Teacher’s Pet Visual Pinball (VPX) table, we finally add some more sophisticated sound code to the script and try to patch the existing code to call the new. Script surgery begins here.


VPX Scripting — Part 2 (Linting)

15 Apr 2024
Space Mission backglass art.

Continuing the series on editing Visual Pinball (VPX) tables, we pause for this post to appreciate the sublime duty that is linting. If you already know what “linting” is then you know you’re in for a treat. For everyone else, read on.


VPX Scripting — Part 1 (Teacher’s Pet)

13 Apr 2024
Teacher’s Pet table.

I waded into the script of a Visual Pinball table in order to try and enhance the sound code to be similar to the sounds I heard in other VPX tables. At that time I was unable to find much on the internet about how all this stuff works and spent a good deal of time looking, cutting, pasting, and trying things.

I thought I would document what I learned so that others might have a starting point or an on-ramp to Visual Pinball scripting.

This is the first in a series on VPX scripting. As an example I will use the VPX table, Teacher’s Pet for what I hope is a gentle introduction geared to the person for whom scripting and perhaps even programming itself is new.


Virtual Pinhead

02 Apr 2024
Slick Chick backglass.

Excuse the title, but as I understand it pinhead is a term of pride used by the community of pinball collectors and “obsessors”. I guess I count myself among them now — certainly with regard to virtual pinball but increasingly with regard to pinball in general. In fact I think virtual pinball will probably invariably do that to someone that starts to steep themselves in the hobby.

There’s nothing virtual though about the large pinball cabinet that now lives in my basement — though it plays virtual pinball it’s no smaller than the real thing. This is about how discovering a piece of open-source software lead me to commit three months of labor (and who knows how much cash) to chase virtual pinball. Take this as either a gentle introduction to virtual pinball or perhaps a cautionary tale.


Experiments in Printmaking, Part 1

13 Mar 2024
Cherry Mash print.

The Cherry Mash candy bar was common in Kansas City when my sister and I were kids. For unknown reasons I took to working with the candy bar for a couple of art pieces.

For this piece I wanted to create a print that had a pop-art feel — as though screen-printed with just three colors and conspicuously half-toned. I had some ideas for approaching it unconventionally and I write about the experiment here.


Op-Amp Helper

6 Nov 2023
Op-Amp Helper PCB.

Op-Amps (operational amplifiers) are integrated circuits that have been a bit annoying to work with in the past for me. Often they require rather odd power requirements — frequently positive and negative 9-volt power rails. I’ve bread-boarded op-amp circuits in the past and ended up with a couple of 9V batteries hanging off the end of the breadboard. It worked but was not ideal.

Here I create a small PCB that attaches to a breadboard and makes prototyping with op-amp chips much easier.


Kim-1 User Manual

14 Jul 2023
KIM-1 User Manual.

Maybe you know about the early (first?) 6502-based computer, the KIM-1 from 1976. I recently built a replica (the PAL-1) and wanted to flip through some of the original documentation. Fortunately archive.org has quite a bit of early KIM-1 texts.

I pulled down the KIM-1 Users Manual as a PDF but after printing it out and comb-binding it, I decided I would rather have a more polished softbound version so I created a book project on Lulu.

The PDF was suprisingly clean, only the cover was a let-down. So I used my favorite vector-based drawing app, Affinity Designer, and recreated the front and back covers.

Shipping is such a factor in the cost that I went ahead and had Lulu print up eight extras. I went ahead and set up a Tindie site to sell the extra copies.

Same Stop

21 May 2023
A young programmer in the late 1980's.

I retired a year and a half ago after having worked for twenty-six years as a programmer for Apple. I’m not sure which would have been more surprising: if I had continued programming in my spare time after I had retired or if I never programmed again.



21 Aug 2022
Adam74 terminal.

Adam74 is a small ASCII terminal intended for hobbyist 8-bit computers. It has a simple, vintage-style interface: 7 pins for 7-bits of ASCII data and another "strobe" pin to tell the Adam74 to add the character to its buffer and display it. Special control characters allow cursor movement, etc. You can select either amber or green text — inverted text is supported as well.

I go into more detail here:

Apple Interview (1995)

13 May 2022
Glider sources.

…I found out though that bringing in a bound book of your source code to the interview is rather unusual. When I sat down in a small conference room across from two Apple engineers and put my Glider book between us, there were smiles and looks of surprise from the interviewers. That it turned out to be a conversation starter was a happy accident…


Jigsaw Puzzle

30 Apr 2022
5000 piece puzzle.

I was putting together a jigsaw puzzle the other day and it suddenly took me back to over twenty years ago when I was putting together another jigsaw puzzle — or I should say I was helping several people put together. That jigsaw puzzle was an enormous one, perhaps 5000 pieces that someone at work had deposited on a very large table in one of the common areas.


Mooncraft 2000

25 Apr 2022
Mooncraft 2000 screenshot.
Mooncraft 2000 screenshot.

Mooncraft 2000 is a web-based lunar "voxel" game. It uses a classic 90’s game algorithm to render a voxel-like terrain. I wrote it in Javascript using the HTML5 Canvas.

The Moon terrain is accurate — I began with NASA data. The game-play is straight-forward: you move cargo from one lunar base to another gaining in rank as you do so. Beginning as a lowly Apprentice, you try to learn to fly, manage fuel and move enough cargo to get to Journeyman and then, if you persist, Master class.

I begin a series of posts on how the code works and the process I went through in creating the game here…

Tom Dowdy

3 Apr 2022
SimpleText document icon (Macintosh, System 8).
SimpleText document icon (System 8).

Tom Dowdy was a software engineer at Apple back in 1995 when I was still writing Macintosh games in Lawrence, Kansas. One of his programming responsibilities was to maintain Apple’s SimpleText (aka TeachText) application (see document icon above) — a basic text editor that shipped with the Macintosh. He was also the tech-lead (technical leader) for the graphics component of Apple’s newest graphics framework called Quickdraw GX.



17 Mar 2022

SystemSix is a small desk accessory sort of thing written in Python running on a Raspberry Pi and driving a small e-ink display. It fetches your calendar events and the local weather and displays them with the look of an early Macintosh running, of course, the System 6 operating system.

It changes the "desktop" from day to day, has several possible layouts, over 100 icons of classic apps it selects from. If your first Mac was from this era, it should bring back fond memories when you check on it in the morning and see what surprises it has for you.

Note: I know it looks interactive, but I assure you it is static, changing the desktop only once a day.
My love letter to my first Macintosh.
My love letter to my first Macintosh.

Sources and an instructive README.md are available on GitHub if you want to build/run your own.

More in depth detail on how I put together SystemSix here.


12 Mar 2022

Some years ago I had written a sort of "Card Engine" framework to make card games like solitaire easy to write. I think I enjoyed is as an exercise in designing a framework, an API.

Rather than the playing card being the sort of fundamental class of the Card Engine, it was what I called the "Stack" or CardStack object, representing a stack, pile, or tableau of playing cards that really was primary.

To be sure, there was a Card class and the CardStack acted as a container for Cards. But the more significant methods that really implement the progression of a card game were on the CardStack objects: methods like CardStack.shuffle(), CardStack.dealTopCard(toStack:), etc.

I wanted to learn Javascript some years back so I wrote a couple of variations of solitaire for the web. The result ended up being Kardland.

Kardland logo.

I won’t go any further into the weeds describing the classes. Suffice it to say that Kardland was the result of my taking this "Card Engine", more or less, and rewriting it in JavaScript as a way of trying to learn JavaScript.

I put the sources to Kardland on my GitHub page.

Don’t laugh at the name, it was the best domain name I could think of that was available at the time.

Or, you know, if you just want to play a game of solitaire online, you could go to Kardland.

The sign-up/sign-in is broken since I just moved to a new server. You can still play the solitaire games though. I’ll try to get the backend wired up again soon.


1 Nov 2021

My name is John Calhoun. I discovered computer programming around 1980 when I was in high school. Sometime in college, second half of the 1980’s, I got an Apple Macintosh computer and fell in love with both the hardware and software. It was then that I began to really program.

In learning how to program my Mac Plus, I wrote some shareware games. One of these, Glider, I rewrote commercially for a small company, Casady & Greene, Inc. (based in Salinas, California). After it was published, I turned to programming full-time.

Mid-1990’s I was hired by Apple Computer (now Apple, Inc.) and moved from Kansas to California where I married, raised a family and worked for the next 26 years.

I just left Apple and have returned to the midwest. Perhaps I will go back to writing shareware?