PalmApple Logo PalmApple - Apple //e Emulator for Palm


PalmApple is an open source Apple //e emulator for PalmOS PDAs. Its optimized to run on the Motorola 68000 DragonBall CPU. Initial Version is ported by Hilary Cheng. PalmApple was re-implemented as Appalm ][ by David Schmenk. We welcome anyone to join this project. You can contact us by email or post a request in the forum.


I will post more news on my current projects, pls goto
My Web Site : Tiny Object :

If you like King Quest 1 / Space Quest 1 in ur Palm, you can go here

22 Sept, 2003 - Vote!

Please take a vote for your Palm device that u are using for Emulator. Please vote once. We wanna to collect information about usage of Emulator and send ur features' wish list to us! Thanks you!

4 Sept, 2003 - Version 0.7.5 has been released

Notes: This is the feature complete version. Bug fixing from here to release 1.0


  • Hilary Cheng is one of the committees of HKPUG - Hong Kong PalmPilot User Group and working as Software Engineer in a local company for POS.
  • Dave Schmenk got his Apple ][+ 23 years ago. Bill Budge's 3D package hooked me on 3D graphics which led to a nice start-up company 10 years ago. I met Bill a couple of years ago. Nicest, most modest guy you would ever meet.

PalmApple's Licenses is GNU GPL. Please go to this links for more details

PalmApple is based on YAE so that we can port to PalmOS Platform. PalmApple cannot be used for sale or any redistribution unless there is an agreement with the authors. Please contact the author before any sale or any redistribution.

PalmApple is an open source software.  Anyone is free to modify the source code and contribute to it. All the users are free to use this software. But the authors are not responsibile for any damage by THIS SOFTWARE. Please try it at Your Risk!

Hi-Res Screen Shot
UltimaIV ScreenShot
Ultima IV
Lode Runner ScreenShot
Lode Runner

Normal-Res Screen Shot
SkyFox ScreenShot
Galaxians ScreenShot
Super Zaxxon ScreenShot
Super Zaxxon
Karateka ScreenShot

Current Status
  1. Complete rewrite using 68000 assembly for 6502 and video emulation.
  2. Apple //e with M65C02 CPU (not complete undocumented opcode emulation)
  3. 64K Memory (with 16K Language Card)
  4. 40x24 text mode, 280x192 hires mode, lores mode, mixed text/hires mode, and mixed text/lores mode.
  5. Disk II controller support - slot 6 only
  6. Basic sound support using SndDoCmd
  7. 80-Column Card for Hi-Res devices
  8. Included Apple disk converter
  9. This is BETA!. Play it at your own risk.

All the new code is in the src/ directory and builds as appalm.prc.  The original code still exists in palmapple/ but is no longer built.

appalm.c : Main program, state and preferences save/restore.
6502.asm : 6502 core.
  • All 6502 CPU state is mirrored in 68000 registers
  • Memory access is made through R/W page table function pointers
  • R/W page table functions are ASM called but have C wrappers available
memio.c : Memory and I/O mapping.
  • Memory map
  • Memory soft switch
  • 16K language card
  • Disk II controller
video.c and vidclr.asm : Video image generation.
  • Video soft switch
  • Video image cache
  • Image stretch to 320x216 in HiRes mode
  • 160x160 monochrome support
  • Accurate color rendition
  • Mixed mode hires/text support
  • Lores support on Sony
fonts7x8.c : Font character map with 7x8 characters for 320x320 or 320x480 res.
fonts4x6.c : Font character map with 4x6 characters for 160x160 res.

Developement Diary
18/11/2003 Finally, I got a ARM OS5 Device (Palm Tungsen|E). I'm still planning time to upgrade the Emulator for a Armlet Version. (Hilary)
09/4/2003 I added a CAPS LOCK/UNLOCK function. It is independent of the system caps setting.
09/3/2003 I bumped the minimum OS version to 3.5. Anything lower rejects the call to allocate 64K of memory used as the Apple's main memory bank. Fixed a few menu bugs and JogDial activation with the dialog boxes open.
08/29/2003 Cleaned up the sound a little. Along with a slight change in the refresh rate implementation, it sounds reasonable (for a PalmPilot, anyway). The refresh rate increase/decrease inversely affects interactivity. Your emulated apps may run a little slower but grafitti will be recognized better. Especially useful for you OS5 people. If you have a fast OS3/OS4 device, then you can speed up your apps by decreasing refresh rate. Interactivity shouldn't suffer for modest refresh rate decrements.
08/27/2003 I've wrapped a few user requests into a binary release. I've increased the emulated cycles between event checking so that 33 MHz devices shouldn't need overclocking for decent performance. Interactivity doesn't seem to suffer. I have also made a request to developers for help in adding an Appalm Manager application to enhance the features of Appalm.
08/16/2003 I think I've got the LotA bug resolved. In the process, I overwrote the wrong disk as the character disk. So, I've added an explicit WriteEnable checkbox to the disk load dialog. The WriteEnable will not override the read-only flag on the database.
08/14/2003 It is now official - Appalm ][ is out of code space. The straw that broke the camel's back was JogDial support. It is pretty cool, though. The JogDial emulates Paddle 0. Press the JogDial for button press. If you have a back button, that will toggle between Paddle 0 and Paddle 1. I know it is bad form to make the back button do something non-standard, but it is too easy to press by accident and drop you back in the launcher just as you were about to annihilate that last alien. Works great with games like Space Invaders, Galaxians, Sneakers and even Little Brick Out :-)
08/14/2003 Sound does work on the Clie. I accidently turned of the sound output in the 68VZ328 Peripheral Control Register thinking that SndDoCmd used the PWM2 circuit, not the PWM1 circuit. Oddly, a hard reset didn't change it back, I had to rewrite the default value back by hand. Anyway, the Clie is buzzing away. The sound implementation still sounds bad though.
08/12/2003 I broke greyscale recently and just fixed it. To make up for my boneheadedness, I re-implemented greyscale in assembly. Much faster (and it works).
08/11/2003 I ported the hires device color code to standard res device support for text and hires modes. All of you with Palm Vs can now enjoy your games in color instead of greyscale. Should be as fast as the hires device code.
08/9/2003 More works than I thought. Thanks to a tip from mmulhern about copy-protected disks, Wizardry and the Ultimas work great. You will need to set the read-only property on the boot disk image databases to get them to work. I will update the working list. Now, if I could get sound to work on the Clie we would be much closer to a 1.0 release...
08/6/2003 OS5 High Resolution should be fixed. But We don't have any OS5 Device. Anyone wanna to test. Pls send email to us. PLS HELP!
08/1/2003 Fixed the really annoying bug with drive selection. Interestingly, the addition of the two drive controls helped debug the problem with the wrong drive light coming on. Also improved the text performance a little (and reduced the code size somewhat).
07/29/2003 80 column card support for HiRes devices (no double hires yet). Attempt at OS5 high density support and a fix for dsk2pdb for Borland binary (I hope).
07/12/2003 Initial sound support using SndDoCmd. It doesn't work on my Clie (quiet ticks only) but it does on my IIIxe. Since it is quite a CPU hog, turn it off by setting game volume to off in system preferences.
07/11/2003 A language card fix that cleans up SuperZaxxon and gets SkyFox working. I thought SkyFox was the coolest game when it came out, but I could never get the hang of playing it. I find it much easier to play on the Clie with the game pad (and still quite cool). Ultima IV runs better too. Many games require the extended 80 column card on the //e for the double hires mode. Kings Quest and Might & Magic are the two that I looked at. Once I get Wizardry working....
07/10/2003 Performance tweaking and graphics mode support improvements. I added lo-res graphics mode for The HiRes Color devices and switched the LoRes Mono devices to 2BPP mode. Much improved quality. When performance tuning, I uncovered a not-so-nice feature of the peripheral device drivers. Those PRC files that make your external keyboard work transparently with the other apps. Turns out, they suck a lot of CPU power, even when they are disabled. The thumb keyboard is the worst - 50% performance degradation with it resident. The folding keyboard and the game controller suck up about 10% each. Amazing. What the heck are they doing? Remove those files if performance is important.
06/24/2003 Whew. Ultima IV is the ultimate pain when it comes to language card access. it alternates between bank 1 and bank 2 for every image byte access. So, after implementing a crazy scheme to update just the page table entries for R/W and insert special versions of the opcodes that could change the program counter into language card space, then fix everything up when that happens and make it fit on a Palm and debug it all, it now works well enough to play. Apple Pascal now boots too :-) And all because Hilary wanted to play Ultima IV. I also added a little tweak here and there to make interactivity a little better. Karateka kicks @$$ now.
06/22/2003 Dual disks implemented. There seems to be an issue where you sometimes have to mount the disk twice to get it to read. Work in progress...
06/20/2003 Disk writes are working now. The disk image data base ReadOnly attribute controls the write-protect. Pretty cool. Maybe I'll add support for dual disks.
06/20/2003 Wow, the latest CVS can boot ProDOS at Sony Clie T650 99Mhz with 9-10seconds. Amazing. the Speed is nearly same as a REAL APPLE][. But it has bugs. Please stay tune.
06/19/2003 Big check-in. Disk I/O is much faster. My first attempt to emulate the disk rotation has met with better than expected results. I also found my problem with Lode Runner - I was using non-strict stack emulation and paid the price. Luckily I anticipated this with a #define that switches between my strict and non-strict implementations. We now are using strict stack manipulation, but I didn't see much speed difference anyway.
06/18/2003 Planning on major disk I/O rewrite. I have changed the raw track size. This breaks current DSK.PDB files so you will need to re-create them. Hopefully you will see a big speedup shortly.
06/17/2003 All new implementation. Most PalmOS hardware should be able to run the emulator. Many outstanding bugs exist. Performance is close (slightly faster ?) to native Apple //e on 66 MHz Clie with HiRes color. Still only working with raw, nibblized disk format. Command line tool for converting DSK -> PDB.
  • ProDos boots very fast (but broken 80 column probe)
  • Choplifter runs great
  • Karateka runs great
  • Sammy Lightfoot runs great
  • Lode Runner missing opcodes :-(
  • Wizardry = Crash :-(
02/05/2002 I am planning to make a new release on 30/05/2002. It will including a ROM/Disk Converter (Currently only Support DSK format, no Nibble) Tools for Win32. Stay Tune.
29/04/2002 I have fixed some bugs that allow to switch back to Other Palm Applications. Also, no Fatal Exception after pressing Reset.
10/04/2002 Since the Speed of Emulator is not Enough to Play any Apple][ Game. So We will try to use M68000 Register to Store the Value of 6502 Register. It may improve the speed of the Emulator. Hope that It can play a few games after the modification.
06/04/2002 We have started to implement Hi-Res Drawing Function. PalmApple can successfully boot
  • ProDos
  • Ultima IV
  • Karateka
B ut Most of it needs about 20 minutes to boot in POSE. So More Performance Enchancing is needed so that games are playable.
20/03/2002 After Fixing a few bugs, Currently, Palm IIIc with 37Mhz (Overclock with AfterBurner) can boot First ProDos Splash Screen about 35 seconds. It is GREAT!. It is much FASTER than Previous Version. Previous version needs about 2 minutes to boot!
03/04/2002 Fixing lots of Bugs, including 16K RAM Card + Video Soft Switch. Since ProDos will test PAGE2 Video Memory. I have implemented it by filling a non-readable & non-writable memory for $400 Memory. For the Right Now, ProDos can BOOT without any problem!! It can perform CAT & CATALOG command! YEAH!
I am preparing for the new release and upload to sourceforge + documentation that allows other people to join the projects.
20/03/2002 After Fixing a few bugs, Currently, Palm IIIc with 37Mhz (Overclock with AfterBurner) can boot First ProDos Splash Screen about 35 seconds. It is GREAT!. It is much FASTER than Previous Version. Previous version needs about 2 minutes to boot!
19/03/2002 One of the emulator bug make things happen very differently. ProDos can boot in the Sony Clie ROM but cannot boot in PalmIIIc ROM. It is strange! So every assembly code you have written should be checked very carefully.

Currenly, I need to implement Enhanced IIe Feature to expand more 64K memory. Since ProDos needs Enhanced IIe Features.
18/03/2002 A Lot of Bug Fix in the 6502 Emulation Core. We should be very careful when writing assembly language. since the compiler can't help you to check much of your code.
06/03/2002 We can use it by C Pointer. Use MemSemaphoreReserve() to enable direct access the heap storage. :p But it is very dangerous. It can overwrite everything in the Palm.
05/03/2002 I have found FtrPtrNew to Create a 64K Memory Block. But it is not accessible by using C Pointer. We need to use DmWrite to access it.
19/02/2002 I have start to re-write all the stuff of PalmApple That is using inline Assembly to Implements it. Also, DragonBall is M68000 Based CPU. It got no CPU32 Instructions! -__-!

Contact Last modified: Tue Aug 12 04:05:54 HKT 2003