Régis Cosnier's pages

Emu42 for Android
Fork me on GitHub

This project ports the Windows application Emu42 written in C to Android.
It uses the Android NDK. The former Emu42 source code (written by Christoph Giesselink) remains untouched because of a thin win32 emulation layer above Linux/NDK!
This win32 layer will allow to easily update from the original Emu42 source code.
It can open or save the exact same state files (state.e??) than the original Windows application!

This application does NOT come with the ROM files!
You will need KML scripts and ROM files already copied into your Android filesystem.
or can download the KML scripts from the original Emu42 Windows application archive (https://hp.giesselink.com/emu42.htm) and you can extract the ROM file from a real calculator (or be lucky on internet).
Be careful about the case sensitivity of the filename in the KML script (Linux is case sensitive, not Windows).

The application does not request any permission (because it opens the files or the KML folders using the content:// scheme).

The application is distributed with the same license under GPL and you can find the source code here:


1. From the left side, slide your finger to open the menu.
2. Touch the "New..." menu item.
3. "Select a Custom KML script folder..." where you have copied the KML scripts and ROM files (Android 11 cannot use the folder Download).
4. Pick a calculator.
5. And the calculator should now be opened.


- The snapshots are made with the faceplates from Eric Rechlin.
- For technical reason, this application need the Android 5.0 (API 21).
- The Help menu displays Emu42's original help HTML page and may not accurately reflect the behavior of this Android version.
- When using a custom KML script by selecting a folder (not the folder Download for Android 11), you must take care of the case sensitivity of its dependency files.
- This Emulator does not include the ROM files or the KML files.
- To speed up printing, set the 'delay' to 0 in the calculator's print options.


Android version 5.0 or later.


The latest source code is available at https://github.com/dgis/emu42android


- Disassembler
- Debugger


Android version by Régis COSNIER.
This program is based on Emu42 for Windows version, copyrighted by Christoph Gießelink & Sébastien Carlier.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.


2019/07/18 16:01:15 Nick
Hi, I use the HP28S. It works very nice. Could you make a few enhancements? User adjusted fixed zoom. Right now I need to zoom in a little bit. Sometimes I shift the zoomed picture by accident whwn using the calculator. It would be nice to tap the top to switch to the left screen and back again by tapping in the top screen. Many thanks

2019/12/13 00:12:05 Regis
@Nick For the moment, you need to swipe left or right. There is a new setting to allow to pin the lcd screen when swipping (Settings/Overlapping LCD)...

2020/04/02 17:11:01 Jean-Marc (jmb49)
Hi, clearly a very good start, thank you very much for your effort to port CG. Emu42 :) As Nick I use a 28S and I'd like to see ehancements to the display part of your port. Yes, the new setting to allow to pin the LCD screen when swipping is a first level answer. But in fact it stays too messy while using a two keyboards calc. This is the point for 28S (and also 19BII) : they need to be splited into 3 different parts to be usefull : LCD, right keyboard and left one. The LCD could be "fixed" in position and zoom factor, to fit the screen in wide. The two different keayboards will be easier to use with no swip but a real full recover. GO28S from Olivier De SMET looks like this, so I wrote a personal KML inspired from it's look and feel. Choosing and fixing a background zoom, as Nick wrote could be a start. But sliding along the background of the KML is not a cumfortable way as the scroll is hard to control precisely. I'm looking to install Android Studio to look at all of this, but I do not know if my dev knowledge will meet the required level to help. Well, I'll give it an eye first and let you know. In fact I'd like to understand if I'm asking for the Moon or it if it's finaly not so hard to do. GO28S is pretty good, but it suffer of a very bad lack of keyb sync that Olivier cannot correct easely (unless he writes again a master piece of his code). So I hope you Emu42's port will be able to follow up it's app.

2020/04/19 15:09:51 Regis
@Nick and @Jean-Marc Because of the KML script, it is not possible to know that there are 2 keyboards. So, in Autozoom mode, following the device screen ratio and the HP faceplate ratio, Emu42 automatically zooms on the half of the faceplate (either height or width). And, then you can swipe. I understand that it is not easy. I don't own GO28S but I understand the idea. Maybe, in Autozoom mode, I could add a button which switches to the other half of the faceplate?

2020/07/27 17:26:43 Nick
Hi, Perhaps an option to lock the zoom? And a button to switch to the other side would be a good idea. And it would be good to save these setting so when the calculator is started again, it would use these settings. Many thanks

2023/04/13 15:15:18 Wolf
Hello, is it possible to include a sharper background image for the HP32SII in the "Emu42 for Android" in an upcoming version? Works as is, but if it could be done without much effort, that would not be bad. Smartphone here Samsung A52s 5G.


Human factor: please enter "MOB" in this field

Page size about 20612 octets. Server generation in 0.030 seconds. Client load in seconds.