image

Cover Page of Compute!'s Gazette April 1985 from archive.org.

Over the course of the last ten years or so, what everyone assumed was a new technology has taken the information technology sector by storm. Virtual machines are one of the two leading technologies in cloud computing today, the other—similar in nature—is called containers. There is one main difference between a container and a virtual machine—the amount of resources consumed by each. A virtual machine works by running an entire operating system at the level of simulating the computer itself, and a container only simulates the software stack while using the underlying operating system of the host computer. Each has their place in the IT space, but my focus this week is on the virtual machine.

The industry standard for virtual machines is called VMWare and was founded in 1998 by Diane Greene, Mendel Rosenblum and their team. They were supposedly the first to experiment and commercialize virtualization, allowing one to run multiple operating systems simultaneously on a single computer. VMWare as a company was sold multiple times, to EMC in 2004, then Dell in 2016, and most recently to Broadcom in 2023. What brought the topic to my attention was the tremendous license cost increase implemented by Broadcom this year, which has triggered what one might call a mass exodus from the platform. This, of course, opened up the market for competition and several new products for virtualization have come to the forefront. This prompted the researcher in me to see if there was any competition to speak of in the past.

Ironically one of the earliest virtualization platforms was introduced on my favorite classic computing platform. In the April 1985 Issue of Compute!’s Gazette magazine, a program was submitted by a programmer that went by Feeman NG. He wrote what might be considered a very simple program in 6502 assembly language which allowed one to have three independent BASIC programs in the Commodore 64’s memory at one time. This might not seem like a big deal, but consider that the Commodore 64 only had 64KB of usable memory and his machine code used part of it. This limited the BASIC programming memory space to 12KB. He called the program “Triple 64.”

Image of Triple 64 Source Code from the original magazine.

There was an inherent problem in these classic computers; with limited memory they could only normally store or run a single program at a time. It made comparing two versions of a program impossible without a printer to print one on paper and compare it to the one on the screen. You also had to use the same memory space to read disk directories, which meant anytime you listed the contents of a disk, you lost the program in memory. Feeman wanted to solve this problem. He wanted to be able to load multiple programs and compare files and list directories without having to reload all his work from disk or tape.

Another important thing to remember is that while these classic computers had really small amounts of memory, they also had very slow storage devices. A full 64K-program loading off of the Commodore 64 tape storage could take up to 45 minutes to load into the computer, and an equal amount of time to save your progress. The disk was significantly faster, but you were still looking at somewhere in the ballpark of 15 minutes to reload a program of any significant size. Triple 64 allowed you to keep an existing program in memory and load up to two more programs without having to issue a reload from the previous one.

What I found interesting about this program and the article in Compute!’s Gazette was that it seemed to be doing exactly what the team from VMWare did three years later on much more advanced hardware. Feeman divided the computer memory of the C64 into three equal 12KB sections, and using machine language changed the default memory pointers to allow the BASIC interpreter, which was sort of the operating system on the C64, to work on three distinct memory locations all fully capable of accessing all the hardware of the C64 and each behaving exactly like a virtual C64, with less memory. This was exactly the premise behind virtual machines.

These is a slight difference in what Feeman did and how VMWare works, which if you want to get super technical, Feeman’s work was probably a lot closer to a container than a virtual machine because he was relying on the core functionality of the host C64 for all the operations rather than separating the operations out to three “virtual machines.” However, considering that BASIC was operating at nearly the lowest level of the C64, it could be considered that Triple 64 was really simulating three C64s in a single computer. Another big difference between this early technology and what they were doing with VMWare was that VMWare, because of multiple processors in the X86 servers, was able to run their virtual machines at the same time and Triple 64 could only have one virtual machine active at any given time.

I did look at the code for “Triple 64” and noticed that it would be possible to modify the code in such a way that it could do task swapping between the three machines and run all three using shared cycles on the CPU. While it would work, the context switching would be slow and make the three tasks nearly unusable, but if the code were written to do backend data-processing type tasks, it could have allowed the C64 to multitask and run three programs simultaneously, which would be a very interesting project to undertake.

Until next week stay safe and learn something new.

Scott Hamilton is an Expert in Emerging Technologies at ATOS and can be reached with questions and comments via email to shamilton@techshepherd.org or through his website at https://www.techshepherd.org

Leave a Reply

Share via
Copy link
Powered by Social Snap