Pumpkin OS

Pumpkin is the name I have given to my port of PalmOS running on the x86 architecture. Please refer to this article for basic information on this project. Also look for other articles in the PalmOS category for more information and some technical details on the implementation. I also post news about this project on Twitter (@pmig96). This article is about the first Technology Preview of this project: a functional version of Pumpkin OS running on the Windows platform. This first release is limited on purpose: just a few PalmOS applications and nothing much else. This is also a binary only distribution, but do not worry, full source code will be released in the future.

What you get

There are three applications included: MemoPad, MineHunt and Vexed. MineHunt is a standard 68K binary PalmOS PRC distributed with the early Palm devices. Vexed is a third party freeware that is also a standard 68K application. If you install them on a real device or on a traditional emulator (like POSE), they will run normally. MemoPad is a different story: it was compiled from source code to the native x86 architecture. Although it is apparently also a normal PRC file, it will only on Pumpkin OS.

This is where Pumpkin is different from emulators: it can also run native applications at native speed. If you have the source code of a PalmOS application, you can compile it for Pumpkin OS with minimal modifications. In either case, you do not need to provide a PalmOS ROM like in traditional emulators. Pumpkin OS is a re-implementation of PalmOS, but without using source code from PalmOS. When an application calls a system trap, Pumpkin OS intercepts the call and runs its own version of the system call. System resources (forms, menus, fonts, alerts, bitmaps, strings, etc) are present in BOOT.prc. These resources were recreated in source form using the RCP format and then compiled into BOOT.prc using PilRC and build-prc.

What you do not get (yet)

Pumpkin OS will also be capable of running binary applications made specifically for PalmOS 5, that is, applications that make use of ARMlets (a.k.a PNOlets). This first release, however, does not offer this feature. Running ARMlets on this release will lead to undefined behavior.

Ability to install new applications is also limited at the moment. The purpose of this preview is not offering a fully featured OS, but to show some of the core features.

Pumpkin OS will also fully support Linux, but Linux users will have to wait for a future release to try it on.

Installing and running Pumpkin OS

This release requires a 64-bits Windows running on x86 architecture. I have tested it on recent releases of Windows 10 Home and Windows 10 Pro. It is quite possible that something breaks on older Windows versions.

Download the zip file and unpack it on a local folder. From now on, it is assumed that the installation folder is C:\Pumpkin. To start it you must run pumpkin.bat. If you want to start Pumpkin OS without having an open cmd window, you can double-click pumpkin.vbs. Either way, this window should pop-up:

Pumpkin OS desktop

The Launcher application is automatically started, and inside it you can see icons for installed applications. Some quick tips of how to move around Pumpkin OS: the left mouse button works like tapping on the screen on a real PalmOS device: left-click on an icon to open the application, click buttons, open menus, etc. The right button is the application selection button: right-click on a application window to select it, and right-click-drag the window to move it around the workspace. Use the keyboard to send key events to the selected application. The selected application is identified by a purple border, and all pen or keyboard events are sent only to the selected application. Other applications (identified by a gray border) keep running event if not selected: in Pumpkin OS each application runs on a separate thread. Currently there is a limitation of running at most one 68K application at a time, but this limitation will probably be relaxed in the future. To quit the selected application, press the Home key on the keyboard (quitting the Launcher will finish Pumpkin OS).

Currently Pumpkin OS maps some keys on the host to keys on PalmOS:
F1: vchrHard1
F2: vchrHard2
F3: vchrHard3
F4: vchrHard4
F5: vchrMenu
Up Arrow: vchrPageUp (“up” hard button)
Down Arrow: vchrPageDown (“down” hard button)
Left Arrow: vchrRockerLeft
Right Arrow: vchrRockerRight
Home: vchrLaunch (“home” button)

A word of warning: Pumpkin OS does not yet implement all PalmOS system traps. You will eventually see messages like these in the C:\pumpkin\pumpkin.log:

SndPlaySystemSound not implemented
EvtFlushKeyQueue not implemented

Depending on the system trap, there will be no serious side effects. SndPlaySystemSound is currently not implemented, so the system will not play a beep tone. Other missing system traps may cause the application to misbehavior, or even crash. Until the 800+ PalmOS system traps are fully implemented, expect things to break. MineHunt is fully playable as far as I can tell (tip: in order to defuse a bomb, press the Up key on the keyboard and click the tile). Vexed is also playable. MemoPad is much more complex because it uses more system calls, so expect some visual/functional quirks.

Some things you could try

Open C:\pumpkin\pumpkin.lua and look at the os.start() call:

os.start(1280, 720, 16, false, false, "Launcher")

As you probably have guessed, the first two parameters are the screen resolution of the workplace. You could try other resolutions. The third parameter is the screen depth. Everything is tuned to work at 16 bpp, so I do not recommend changing this. The next parameter is a fullscreen flag. Try changing it to true and starting again to fill your whole desktop with Pumpkin OS! If the next parameter is true, Pumpkin OS will start with a dynamic input area for text entry, mimicking the appearance and behavior of PalmOS. If you do this, the screen resolution parameters will be ignored and 320×480 will be assumed. In this mode, at most one applications can be started. Currently only Launcher itself responds to the dynamic input area being collapsed. The last parameter is the name of the application to launch on startup. It really only makes sense to use “Launcher”, otherwise you would not be able to start other applications.

Pumpkin OS with a dynamic input area

The Launcher application has a “Test” menu where various PalmOS UI dialogs can be tested. Changing settings here does not affect anything in the OS, the dialogs are there simply for testing UI components. Some dialogs are only partially implemented and may cause small glitches on the screen.

Final words

Inside C:\pumpkin\licenses you will find the licenses for various components used by this Technology Preview of Pumpkin OS. As far as I can tell, all of them allow for a binary-only distribution. If you believe something is not handled properly, please let me know. Anyway, in the future the full source code will be released. I just wanted to offer a preview while I am still finishing up the code.

A note about the C:\pumpkin\vfs folder: this is where all files and resources are stored. If you want to start from scratch, remove everything from C:\pumpkin\vfs\app_storage (but leave the folder). Other than that, I do not recommend changing things manually inside app_storage. The C:\pumpkin\vfs\app_card folder simulates an external SD card present on a real PalmOS device. The C:\pumpkin\vfs\app_install folder is where new PRC files must be manually placed. The next time Pumpkin OS starts, these PRCs will be extracted into app_storage. Again, please keep in mind there is a great chance of untested applications causing visual glitches or crashing Pumpkin OS, since dozens of system traps are not implemented and others are only partially implemented.

16 thoughts on “Pumpkin OS

  1. I have tested with Debian on x86_64 and with Raspberry Pi OS on ARM32 (RPI 4 is ARM64, but the OS is 32 bits).

    Like

  2. Wow… chill out, man. First, “x64” was an typo, it was supposed to be “x86”, thanks for pointing it out. Second, I like to think I am the kind of person that can tell a Dell server from a mainframe, and also from some other things. I also use the term “Linux” as a common term instead of using “GNU/Linux Operating System” just because it is…. shorter. Third, be warned that English is not my native language, you may also find me describing other things in unorthodox ways.

    Liked by 1 person

  3. I’m sorry, but “x64” isn’t an architecture, unless you’re the kind of person who calls all non-Windows OSes “Linux” and thinks there’s no difference between Dell servers and mainframes.

    Like

  4. Works well enough to play a level of bike or die! Very impressive that you’ve made it this far. I hope to learn a lot once the source comes out one day. Shared this on the PalmDB discord — you should come and say hi some time 😀

    Liked by 1 person

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s