Palm OS Emulator HOWTO

Jan Schaumann <>

[] [netmeister's PalmStuff]

A brief overview of how to install and use the Palm OS Emulator (POSE) and other tools to write and compile software for the Palm OS on a Linux system.

Note: This document was written in 2000 and has not been updated since then. I simply don't have the time to keep it up to date. If you wish to maintain the document, please let me know and I'll add a link to your website from here. Other questions and problems regarding this document I will most likely no longer be able to answer -- not out of malice, but actually sheer ignorance; I have not kept up to date on the Palm topic.

Table of contents

2. Installation
2.1 How to obtain POSE
2.2 Requirements
2.3 Compilation and Installation
3. Obtaining ROM image files
4. Other tools
4.1 Obtain the prc-tools
4.2 Obtaining the SDK
4.3 Obtaining and installing pilrc
5.An Example
5.1 Hello World Code
5.2 Hello World Compilation
5.3 Installing "Hello, World" on POSE
5.4 Keeping "Hello, World"
5.5 Deleting "Hello, World"
6. Resources

 1. Introduction

So you've decided to start developing software for the Palm OS, running on all those nifty little handheld organizers, but you don't actually have a PalmPilot. Or maybe you're sick of always having to synch your Palm device after you wrote an application. That's when the Palm OS Emulator (POSE) comes into play.

The Palm OS Emulator is an application for desktop computers that emulates the operations of Palm Computing Platform hardware devices. With it, users can load ROM images, applications, and databases and use them on their desktop computers.

The procedures described in this document have been successful on a Linux 2.2.14-15mdksecure i686 system, but should not be much different on other systems (especially not other RedHat Linux systems). Most of the information provided in this document is part of the documentation that comes with POSE, other information has been compiled from various websites.

 2. Installation

 2.1 How to obtain POSE

POSE for Unix can be downloaded from Note that the latest version appears to be 3.4 (scroll down to the "Sources" section, to get the latest)

However, in order to make sure that you get the most recent version of POSE it is probably a good idea to go to and read carefully through the page and the relevant links.

 2.2 Requirements

POSE uses pthreads, so you need GNU glibc2 (aka Linux libc6) C library and a 2.x kernel on a Linux system. The source makes heavy use of C++ templates and exceptions. On Linux, you must have egcs-1.1.1 or better to compile it. egcs-1.1 or any gcc below 2.95 may not work. RedHat Linux 6.0 comes with egcs 1.1.2, so you should be OK there. If you are running RedHat Linux 5.2, you will need to download the latest from and build it.

POSE also uses the FLTK X toolkit - you will need to download and install it before you attempt to build POSE on your system. The FLTK X toolkit is available from, but if you happen to be on RedHat-Linux system, you might consider downloading the RPM from (or your favorite RPM-mirror). I will not go into the details of installing the FLTK here, just make sure that "fluid" (the FLTK User Interface Design tool) is part of your package and gets installed, too. Finally, please note that it has been reported that FLTK 1.1.x does NOT work, but that FLTK 1.0.x works fine.

 2.3 Compilation and Installation

Unpack the tar.gz - on Linux systems this is easily done with the following command:

tar zxvf emulator_src_33.tar.gz

On other Unices, or if you have not installed GNUtar, you might need to unzip the package first and then untar it:

gzip -d emulator_src_33.tar.gz
tar xvf emulator_src_33.tar

This will extract the contents of the archive into a new directory "Emulator_Src_3.0a5". Now cd into "Emulator_Src_3.0a5/Docs/" and read through the relevant documents. You will find that most of what you are reading right now was shamelessly stolen from those documents. After you have made sure that your system meets all the requirements, cd into "Emulator_Src_3.0a5/BuildUnix and execute the following commands:

make install

The last command will require superuser privileges, but this step is optional. However, I recommend installing POSE systemwide, in order to make your life easier. If you can't do that, you need to either add the path to "Emulator_Src_3.0a5/BuildUnix/pose" into your $PATH or you will always have to call POSE with an absolute pathname (ie ~/your/path/to/Emulator_Src_3.0a5/BuildUnix/pose). From now on, it is assumed that POSE has been installed systemwide and can be executed by simply typing:


 3 Obtaining ROM image files

Assuming everything went according to plan, you can now start POSE by simply issuing the command pose, and a window will open on your desktop, showing you a Palm Device. Neat. But this doesn't get us very far yet - in order for POSE to actually work, and in order for you to use POSE to actually emulate a Palm device, you need a ROM image. The ROM image contains all of the code used for a specific version of the Palm OS.You can obtain ROM images in several ways:

In order to download a ROM image file from a device, start up POSE and right-click anywhere in the window. A menu will pop up from which you can select "File->Transfer ROM". This assumes, of course, that you have set up your system to talk to the cradle etc. For information on how to set up your Palm device under Linux, refer to

While it certainly is easy to just get the file from somebody else, or to transfer it from your Palm device, I still recommend joining the Palm Solution Provider Program as described under since you will gain access to a large variety of different ROM images.

At this point I recommend that you set up a directory where you keep all your palm-stuff. Place the ROM image file into this directory so you don't lose them.

Now start POSE, and right click anywhere in the window. Select "File->New" from the menu and choose the location of the ROM-file and the appropriate Device. For example, if you want to use the ROM image palmvii-dbg-75.rom, you will want to choose "Palm VII" from the device-menu. Voila! Now go and play around with your new Palm device.

 4 Other tools

OK - so you've got POSE set up and you finally get bored with the applications from your ROM image and you want to develop your own. Great! You will need a few tools to achieve this. On Linux you have two choices:

This document will cover the second option. It should be mentioned, however, that CodeWarrior is the Development tool of choice for many Palm OS Software Developers and probably a decent product.

If you choose to install the necessary tools by hand and not use CodeWarrior, you also need:

 4.1 Obtain the prc-tools

PRC-Tools is a complete compiler tool chain for building Palm OSŪ applications in C or C++. It is free software. The PRC-Tools package includes patched versions of the GNU packages GCC, binutils, and gdb, along with various post-linker tools to produce Palm OS .prc files.

If you want, you can follow the instructions on and see if you are in luck. However, I had some trouble getting everything set up with "prc-tools-2.0.1", and eventually reverted to "prc-tools-0.5.0".

PRC-Tools can be obtained in RPM format from (or your favorite mirror). The source-code for prc-tools-2.0.1 can be downloaded from - follow the instructions on for building them.

4.2 Obtaining the SDK

Now you need to download the Palm OS Software Development Kit 3.5. To do so, go to and agree to the license and download the SDK from the following page. Optionally you might want to download a few programming examples and some documentation. Until now I am unsure if this step is actually necessary. The RPMs of prc-tools and pilrc seem to have provided my system with all the headers and libraries necessary for Palm OS Software development.

4.3 Obtaining and installing pilrc

You also need to download and install "pilrc". Pilrc is available as source-code from, or, again, if you prefer, from (or your favorite mirror). The installation from source-code failed when I tried it, so I can not go into the details of how to do that. Installing the RPM however was no problem, and everything seems to be set up correctly. So just go ahead and get the RPM.

 5 An Example

It seems almost required that the first example in any programming tutorial be the infamous ``Hello, world.'' program. Once you have this program working, you know that you have at least a basic grasp of how to create, compile and install a Palm OS program. One thing to take note of is that Palm OS programs are event-driven. Basically, this means that unlike linear programs, (such as make, more, or pilot-xfer) Palm OS applications mostly wait for events, then process them in turn. In case you are not familiar with them, events can be any occurrence. Pen down & up, graffiti input, and alarms are all different events.

5.1 Hello World Code

So here's the code to our beloved "Hello World!":

       #include <System/SysAll.h>
       #include <UI/UIAll.h>
       // -----------------------------------------------------
       // PilotMain is called by the startup code and implements 
       // a simple event handling loop.
       // -----------------------------------------------------
       DWord PilotMain(Word cmd, Ptr cmdPBP, Word launchFlags)
        EventType event;

          if (cmd == sysAppLaunchCmdNormalLaunch) {

          // Display a string.
          WinDrawChars( "Hello, world!", 13, 55, 60 );

          // Main event loop:
          do {

          // Doze until an event arrives.
          EvtGetEvent( &event, evtWaitForever );

          // System gets first chance to handle the event.
          SysHandleEvent( &event );

          // Normally, we would do other 
          // event processing here.

          // Return from PilotMain when an 
          // appStopEvent is received.
          } while (event.eType != appStopEvent);


Just save this code in a file named "hello.c".

 5.2 Hello World Compilation

Assuming that the bin directory used by the prc-tools is in your default path, you have only to enter the following:

m68k-palmos-coff-gcc -O2 -g hello.c -o hello
m68k-palmos-coff-obj-res hello
build-prc hello.prc "Hello, World" WRLD *.hello.grc

m68k-palmos-coff-gcc is the GCC cross-compiler built by prc-tools. m68k-palmos-coff-obj-res takes the program generated by m68k-palmos-coff-gcc and splits it up into the various sections that Palm OS expects an application to have. build-prc assembles the program sections, plus the information provided on its command-line to build the final Palm OS program.

As with any other program you will surely want to create a Makefile, so you don't have to tediously enter the commands by hand every time you compile it. I will not go into the details of Makefiles, see for further information.

The Makefile for our simple "Hello, World!" would look like this:

	hello.prc: code0001.hello.grc
            build-prc hello.prc "Hello, World" WRLD *hello.grc

        code0001.hello.grc: hello.c
            m68k-palmos-coff-gcc -O2 hello.c -o hello
            m68k-palmos-coff-obj-res hello

            @rm -f *.grc *.o *.prc hello

Note: If you installed prc-tool-2.0 instead of prc-tools-0.5.0, your compiler and linker will most likely be named "m68k-palmos-gcc" and "m68k-palmos-obj". You should keep this difference between the two versions in mind when you want to compile other examples or tutorials you might have downloaded.

 5.3 Installing "Hello, World" on POSE

Now we want to test out application in its native environment. To do so, start POSE and right-click anywhere on the window. Then select "File->Install Application/Database" from the menu. Search through the directories to find our little application "hello.prc". Now tap (palmspeak for click) the Applications-Icon and you should see a new icon labeled "Hello, World". (Note that if you already were in the applications-menu (ie all the application icons were displayed on your screen), you need to switch to another screen (for example, tap "calculator") and switch back (tap "Applications") for the new icon to show up. ) Tap this icon and..... WOW! You will see the words "Hello, World!" displayed in your POSE-window.

 5.4 Keeping "Hello, World"

So you are so proud of your very first program, that you decide to keep it on POSE. No problem. The good thing about POSE is, that you can save as many profiles as you want. To do so, right-click on the window and choose "File->Save as...". Choose a directory and enter the name for this profile (POSE usually saves profiles with a ".psf"-ending). The next time you start POSE, you can choose "File->Open" from the menu and load this profile, and you will find your "Hello, World"-application right where it was.

 5.5 Deleting "Hello, World"

Well, "Hello, World" is not all that exiting, so do we really want to keep this useless little application? Sure we do - we have to show off our achievements to everybody else! OK, but after that, do we still need it? No. So in order to delete "Hello, World" from POSE, tap the "Menu" button and choose "Delete". (If you want to get fancy, you can try to invoke the command by drawing a diagonal line followed by a "D" with your mouse in the little "Graffiti"-area). Choose "Hello, World" and hit "Delete". Confirm with "Yes" and go back to the main screen with "Done".

 6 Resources

The information provided in this document was compiled mostly from:

If you have any questions or find that the information provided in this document is wrong or ambiguous, please email me at