wolfgang ziegler


„make stuff and blog about it“

Bringing a 20-Year-Old Windows Mobile Project Back to Life

February 12, 2024

Retro computing is a topic that has always been of great interest to me, but lately I find myself being drawn even deeper into the realm of Ataris, C64s or Game Boys. It's definitely a nostalgia thing and something that comes with age.

Speaking of age - I recently realized that one of the biggest projects I worked on in the beginning of my career would 100% qualify as retro computing today. I'm not sure how I feel about that ๐Ÿคจ.

Meme - that moment when you realize you are getting old

Anyway, I'm referring to FATE, a framework I wrote during my time at Ars Electronic Futurelab. It was a framework for Pocket PCs running on Windows Mobile and its main purpose was to control and navigate Virtual Environments using a handheld device.

FATE is an acronym for Framework for Advanced Techniques of Interaction in Virtual Environments - at least that's what I decided for the sake of my thesis. In reality, someone had came up with that acronym in the beginning of the project. Over time though, no one could remember anymore what it initially stood for.

A couple of applications actually came out of this framework and it should even become the topic of my diploma thesis.

After having finished said diploma thesis I also switched jobs and mostly forgot about this framework. Also, technology moved on and nobody cared much about Window Mobile applications any more.

So it was mostly for sports and said nostalgia when I tried to revive this framework and its applications a few weeks ago.

The Code

Fortunately, I had kept most of the source code around on OneDrive (there was not much source control going on back then). It was not the exact version that is described in the thesis but it's close enough.

So as a first step, I decided to put the code up on GitHub.

Unfortunately, the applications in the repository are only a subset of those that I had developed back then and a lot of cool stuff is lost to history (due to sloppy backups).

Now, I wanted to see wether I could still compile the framework and the applications.

Windows XP to the Rescue

The project had been built with Embedded Visual Tools, an IDE for Windows Mobile development based on the Visual Studio shell. I had also created a Windows desktop version of the framework for easier prototyping which was based Visual C++ 6.0.

Installing this ancient software on a modern 64-Bit operating system did not seem like a good idea, so I created a Windows XP virtual machine using VirtualBox (running in Ubuntu) to install all the required tools and software.

Installing Windows XP in VirtualBox

As a first step, I installed Visual Studio 6.0 - those memories ๐Ÿคฉ.

Installing Visual Studio 6.0

Then, I installed eMbedded Visual Tools 3.0 together with the Pocket PC SDK 2002.

Installing Embedded Visual Tools

I also download a version of Firefox that still runs on Windows XP. It was not really a requirement but it allowed me to stay in the VM for quick web searches and things like that.

Installing Embedded Visual Tools

More importantly, I also found a version of git that was XP compatible. This really helped my workflow.

Note: Many of those legacy applications I found on Internet Archive. Don't ask me about the license keys though ๐Ÿ˜‰.

Running the Code

From there, it was mostly smooth sailing. The code had a couple of compilation issues, mostly due to careless changes and refactorings I had done in the past. But I got everything to build and run again within reasonable time.

Here's e.g. a screenshot of the application X-EDIT, a mobile recording and sound file editing tool I had written. Here it is running on Windows XP using the "prototyping version" of FATE.

X-EDIT running on Windows XP

And here is the same application running on the actual Pocket PC hardware (a Compaq iPaq to be specific).

X-EDIT running on a Compaq iPaq

A quick overview and description of this app and all the others can be found on the GitHub repo as well.

Bonus Chapter - Palm OS

On thing I had been working on after the thesis and FATE project had been finished, was porting FATE to Palm OS. This hadn't gotten far - in fact I cannot even remember running any actual bits on my Palm device ever.

Note: Palm as a company or platform is not around anymore. Fortunately, there is palmdb.net which is a really active community that keeps the legacy of Palm and Palm OS alive. I also stumbled over the download link to CodeWarrior there.

So I set myself up for the challenge to finish what I had started 20 years ago ๐Ÿ˜† - running a (very) basic FATE app on Palm OS.

The project contained a couple of half-baked Makefile attempts which I vaguely remember having created in that attempt of a port. On the upside, most of the basic platform abstractions were there and seemed to be mostly complete.

Instead of continuing with gcc and Makefile I gave MetroWorks CodeWarrior a chance. I had used this IDE back in the day for WIN32 development but for some reason not with the Palm OS port (I probably did not have it available at that time.)

Installing MetroWorks CodeWarrior

I was always a great fan of this IDE and I still think it's a shame that it vanished. That being said, I was able to build (a subset) of FATE and a (very) basic application within a few hours.

Here it is running on the Palm OS emulator.

A simple FATE app running on the Palm OS emulator

I even had a actual Palm OS device readily available - a Palm Tungsten E. Of course, I wanted to try and run the app on that actual hardware! For some reason though, I could not get the HotSync software to cooperate and nearly gave up. That's when I remembered that this device had an SD card slot! So I copied the executable to an SD card, put it into the Tungsten and it actually worked!

Here is my FATE application running on my Palm Tungsten E.

A simple FATE app running on a Palm Tungsten E

What's Next?

Well, what's next? Probably nothing, to be honest.

I proved a point (to myself), tied up some lose ends, had fun and that's it. Most importantly, I was able to archive this project in a structured way by having the GitHub repository and the virtual machine I can come back to any time. I'm not saying I'll never going to work on this again (I probably will), but right now I will dedicate my attention to something else again.