Wednesday 31 January 2007

HP48 Skin for M3100 / Hermes

Here is horizontal (landscape) skin for Christoph Gießelink’s PPC HP48 emulator.

The skin is for the HTC Hermes model phone running WM5 in keyboard-open mode, to support use without the need to touch the screen at all.


Just download the zipfile and unzip in your emu48 directory and start a new emulator session with HP48-m3100-horizontal.kml

The bitmap and layout is based on the PPC skin done by Dave / Murray.

This is landscape but not in the same sense as Dave / Murray landscape which is landscape on a portrait screen. Hermes keyboard-open mode is a landscape screen.  When the keyboard is closed and the Hermes resizes the screen to be portrait, it all goes skewy. Really we need to be able to switch between two different skins when they keyboard is opened or closed.

I had to take a few pixel rows out of their layout to make it fit.


I also fixed up the scan-code conversions to deal with the Hermes keyboard, so some Hermes specific keystrokes work as expected, like ! and - and _.

Some new mappings

The TAB key is mapped as the ALPHA key.
The SYMBOL-UP is mapped as SHIFT-R
The SYMBOL-DOWN is mapped as SHIFT-L
(Symbol is the key with a round DOT).

Sadly I could not map SYMBOL-LEFT or RIGHT, because the emulator does not intercept these and probably can’t unless it is signed as a privileged application.


Included is an XML based build system to make skin building easier.

I used kimagemapeditor to add hotspot rectangles to my bitmap and then my build-system created the button and annunciator layout file for me. This greatly speeds up the process when modifying or designing new skins.

Note that the kml file Includes a a kmp file which includes all the button positional information, and also a kmi file containing scan-code mappings and fixups.

I generated the kml file like this:

xsltproc HP48-generate.xslt HP48-m3100-horizontal.htm > HP48-m3100-horizontal.kmp

xsltproc comes with gnome on my Ubuntu linux. Maybe there is a windows xslt processor that could do this too??

Of course that htm file has to be valid xml too, I had to make the img tag self-closing.

The xslt relies on HP48-attributes.xml, that defines the annunciators and keys that the emulator expects.

The id attributes refer to the numbers in the Annunciator or Button statements, and the name attributes refer to the anchors in the html.

Annunciator anchoes begin with #~- to show where the annunciator should be displayed, and #~+ to show where they should be copied from.

Buttons, of course have only one imagemap entry.


Add scan-code conversions for a lot of the accented characters.

I intend to make this fun by having an HP48 specific xml which defines HP48 button sequences needed to generate each ascii character. I then intend to have a host-specific xml which specifies the scan-codes generated during the entry of each ascii character.  I shall spot multi-scan-code sequences, and automatically allocate flags and generate IfFlag code.

Thus, with a fixed calculator specific button-code-map, a per-skin bitmap and imagemap, and a per-platform scan-code specification, I can generate any skin for any calculator emulator on any platform. Hurrah!

Find out or write IfAnnunciator for the kml scripts.


  1. skin in Full Screen3 April 2007 at 15:22

    # skin in Full Screen
    add Menubar 0
    Menubar 0
    Topbar 0
    Offset 0 26
    Size 320 240

  2. This is wonderful! I’m just wondering if there is a way to map the ON button to a key on the Hermes. I couldn’t figure out the scan codes for the hermes keyboard so I just mapped it to the Space key for now…