diff --git a/README.md b/README.md index f3164ba..0b05826 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ Post-fork changes by Gwenhael Le Moine: - rename the app and Java packages to avoid confusion +- add Makefile and helper scripts - Assets: - ROMs - Pull unpatched ROMs from hpcalc.org using the script `pull-KMLs-and-ROMs.sh` @@ -11,326 +12,4 @@ Post-fork changes by Gwenhael Le Moine: - fix the case of Emu48+ source files to allow compilation on GNU/Linux -Original ReadMe.txt below: - -DESCRIPTION - -This project ports the Windows application Emu48 written in C to Android. -It uses the Android NDK. The former Emu48 source code (written by Sébastien Carlier and 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 Emu48 source code. -It can open or save the exact same state files (state.e48/e49) than the original Windows application! - -Some KML files with theirs faceplates are embedded in the application but it is still possible to open a KML file and its dependencies by selecting a folder. - -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: -https://github.com/dgis/emu48android - - -QUICK START - -1. Click on the 3 dots button at the top left (or from the left side, slide your finger to open the menu). -2. Touch the "New..." menu item. -3. Select a default calculator (or "[Select a Custom KML script folder...]" where you have copied the KML scripts and ROM files (Android 11 may not be able to use the Download folder)). -4. And the calculator should now be opened. - - -NOTES - -- The Help menu displays Emu48'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, you must take care of the case sensitivity of its dependency files. -- Starting with the version 1.4, a RAM card generator for the port 2 of the HP48SX and HP48GX has been added. - Like with the MKSHARED.EXE on Windows, you can generate the card in a file (i.e.: SHARED.BIN). - And then, to use with the HP48SX or the HP48GX, you must select this generated file in the "Settings/Port2 File". -- By default when you create a new HP49/50 with the embedded readonly file "rom.49g", - everything that you store in port 2 is lost just because the file "rom.49g" is READONLY. - Since version 2.0, it is now possible from the menu to manage the Flash ROM file (it will fully replaces the ROM). -- To speed up printing, set the 'delay' to 0 in the calculator's print options. -- The serial ports, wire or infrared (infrared limited to 2400 baud) can now be used through the USB port in mode OTG. - It uses the library https://github.com/mik3y/usb-serial-for-android, which allows to plug most of the serial USB adapters (only tested with Prolific and Ch34x), - without the need to be root. If it is not automatic, please, activate the OTG mode in your Android device, and then, - you should be able to see it in the Emu48 settings. - It is still experimental and I see some issues when sending characters from the emulator to a real HP48 or HP49 with the kermit protocol. - The communication can be artificially slowed down in this direction using an option. - If the adapter is unplugged then plugged back in, you may need to call OPENIO/CLOSEIO. - - -NOT WORKING YET - -- Disassembler -- Debugger - - -LINKS - -- Original Emu48 for Windows from Christoph Giesselink and Sébastien Carlier: https://hp.giesselink.com/emu48.htm -- Emu48+ for Windows from Eric Rechlin and Cyrille de Brebission: https://www.hpcalc.org/details/6523 -- Droid48 Reader app: https://play.google.com/store/apps/details?id=com.drehersoft.droid48reader or https://www.hpcalc.org/details/7366 -- Smart Charlemagne (HP48SX Skins for Android): https://www.hpmuseum.org/forum/thread-14197-post-125336.html or https://www.hpcalc.org/details/9115 -- The Museum of HP Calculators Forum: https://www.hpmuseum.org/forum/thread-12540.html - - -CHANGES - -Version 2.8 (2024-xx-xx) - -- Update the usb serial drivers usb-serial-for-android to version 3.7.3 - - -Version 2.7 (2024-06-14) - -- Updated source code with Emu48 version 1.65+. This new version improve the serial communication. -- Fix haptic feedback with Android 12 (API deprecation). -- Patch the ROM files to prevent the calculator to sleep, but not for HP 48gII/49G/50g (Fix #22). -- Fix a potential crash about the permission to access the files. -- Fix an issue when creating a new Flash ROM file from a custom KML file. -- Require at least Android 5.0 (4.4 previously). - - -Version 2.6 (2022-08-19) - -- Updated source code from Eric Rechlin's Emu48 version 1.64+ that was merged from Christoph Gießelink's Emu48 version 1.65. This new version improve the serial communication. - - -Version 2.5 (2022-03-03) - -- Allow to load RLE4, RLE8 and monochrome BMP images. -- Optimize the number of draw calls when displaying the LCD pixel borders. - - -Version 2.4 (2021-12-08) - -- Updated source code from Eric Rechlin's Emu48 version 1.63+ that was merged from Christoph Gießelink's Emu48 version 1.64. - - -Version 2.3 (2021-10-19) - -- Add an experimental serial port support (via USB OTG). -- Show KML log on request. -- Allows pressing a calculator button with the right button of the mouse and prevents its release to allow the On+A+F key combination (with Android version >= 5.0). -- Update the embedded help file "Emu48.html" to the latest version. -- Open an external web browser when you click an external links in the Help. -- Add Real blue 50g faceplate based on my calculator and on the KML script from Eric Rechlin. -- Display the graphic tab of the printer without antialiasing. -- Fix a crash about the Most Recently Used state files. -- Fix an issue with "Copy Screen". - - -Version 2.2 (2020-12-09) - -- The KML folder is now well saved when changing the KML script for a custom one via the menu "Change KML Script...". -- Fix an issue when the permission to read the KML folder has been lost. - - -Version 2.1 (2020-11-23) - -- Fix an issue which prevents to save all the settings (Save in onPause instead of onStop). - - -Version 2.0 (2020-11-15) - -- Updated source code from Eric Rechlin's Emu48 version 1.62+ that was merged from Christoph Gießelink's Emu48 version 1.63. -- For the HP49/50 port 2, it is now possible to load a new Flash ROM file (It fully replaces the ROM). -- Replaces the haptic feedback switch with a slider to adjust the vibration duration. -- Fix transparency issue (RGB -> BGR). -- Fix a printer issue from Christoph Gießelink's HP82240B Printer Simulator version 1.12. -- Fix the KML button Type 3 with a Background offset which was not display at the right location (Fix #15). -- Fix a timer issue. -- Fix a freeze with a hp48 sx or gx, when switching on/off several times port 1 and 2! - - -Version 1.9 (2020-09-07) - -- If the KML folder does not exist (like the first time), prompt the user to choose a new KML folder. -- If the memory card file for the port 2 cannot be found, prompt the user to choose a new memory card file. -- Move the KML folder in the JSON settings embedded in the state file because Windows cannot open the state file with KML url longer than 256 byte. -- Prevent to auto save before launching the "Open...", "Save As...", "Load Object...", "Save Object...", etc... -- Prevent app not responding (ANR) in NativeLib.buttonUp(). -- In the menu header, switch the pixel format RGB to BGR when an icon of type BMP is defined in the KML script. - - -Version 1.8 (2020-05-24) - -- Intercept the ESC keyboard key to allow the use of the BACK soft key. -- Add LCD pixel borders. -- Add support for the dark theme. -- Fix issues with Linux build (Fix #11). -- Remove the non loadable file from the MRU file list (Fix #13). -- Hide the menu [Default KML script folder] when the default is already displayed (Fix #5). -- Fix: Overlapping window source position when Background/Offset is not (0,0). -- Wrap the table of content in the former help documentation. -- Save the settings at the end of the state file. -- Transform all child activities with dialog fragments (to prevent unwanted state save). -- Fix an issue with the numpad keys which send the arrow keys and the numbers at the same time. -- Fix a major issue which prevented to open a state file (with a custom KML script) with Android 10. -- Optimize the speed with -Ofast option. - - -Version 1.7 (2019-12-12) - -- Updated source code from Eric Rechlin's Emu48 version 1.61+ that was merged from Christoph Gießelink's Emu48 version 1.62. -- Allow to take a screenshot of the fullscreen including the skin. -- Add the KML Icon if present in the navigation menu header (only support PNG or 32bits BMP in the ICO file). -- Add an optional overlapping LCD part stuck to the screen when swiping the 2 calc parts. -- Improve loading speed by caching the KML folder. -- Support the transparency in the KML Global Color. -- Improve the New and Save menus. -- Sound volume can be adjusted by number by touching the number. - - -Version 1.6 (2019-07-15) - -- Add option to prevent the pinch zoom. -- Prevent the white bottom bar when both options "Hide the status/navigations bar" and "Hide the menu button" are set (Github Fix: #9). -- Prevent the BACK/ESCAPE key to end the application only from a hardware keyboard (Github Fix: #10). - - -Version 1.5 (2019-07-11) - -- Add the Ir printer simulator based on the Christoph Giesselink's HP82240B Printer Simulator for Windows. -- Add the macro support. -- Refactor the code for easier code sharing between Emu48, Emu42 and Emu71. -- Fix: Bad text characters when copy/paste the stack. -- Fix: Selecting an empty KML folder prevent to select the default embedded KML folder (Github Fix: #5)! -- Fix a crash with waveOutClose(). -- Fix an issue with the Pan and zoom which was possible after closing the calc. -- Prevent the ESC key from leaving the application (Github Fix: #6). -- Map the keyboard DELETE key like it should (Github Fix: #6). -- Map the +, -, * and / keys catching the typed character instead of the virtual key (Github Fix: #6). -- Fix the printer icon in the Eric's script "real49gp-lc.kml" and "real50g-lc.kml". -- Improve the swipe gesture. -- Fix the On+D tests for hp49/50 by mocking "serial.c". - - -Version 1.4 (2019-06-08) - -- Add an optional menu button in the top left corner. -- Add a RAM card generator for the port 2 of the HP48SX and HP48GX. -- Add the possibility to hide the status and/or the navigation bars. -- Rewrite the timers engine (Hoping this fixes the issue with the stuck "busy" annunciator.) -- Update the Win32 layer from Emu42 dev. -- Fix the authentic speed issue at the first start. -- Fix the non working Restore/Delete backup. -- Prevent to load/save object and copy/paste with HP39/40. -- Add a volume slider in the settings. -- Add a rotation option. -- Warn the user about the KML folder selection if this is Android < 5.0 - - -Version 1.3 (2019-04-04) - -WARNING: WITH VERSION 1.3, THE STATUS FILE HAS BEEN MODIFIED AND IS NOW FULLY COMPATIBLE WITH THE WINDOWS VERSION AS IT SHOULD HAVE BEEN. -HOWEVER, BEFORE THE UPDATE, BACK UP YOUR DATA BECAUSE YOU COULD LOSE THEM. - -- Fix the red and blue color inversion. -- Add the HP 50g (Calypso 2K/4K) KML script from Carl Reinke (4K is a slow because there is no hardware acceleration). -- Fix a bug about the timer delay in timeSetEvent(). -- Fix deprecated classes in the settings. -- Add an optional haptic feedback when touching a button. -- Fix the intermittent slow down due to the end of playing a sound. -- Fix blank screen when switching the KML faceplate. -- Add more traces in the win32 log. -- Allow to select the background color (missing a custom color). -- Thanks to Christoph Giesselink about the state file compatibility issue (sizeof(BOOL) should be 4 and not 1). -- Allow to fully switch the sound off. - - -Version 1.2 (2019-03-14) - -- Use the KML Global color as background color. -- Set the extension .e49 when "Saving as" a state file with model 'Q'. -- Fix a crash after opening several times a state file. -- Fix On-D diagnostic not working for 48gII/49G/49g+/50g (rom 2.15 not good, change for 2.10). -- Improve the scrolling issue found in Emu48 1.59+. -- Rewrite the StretchBlt() function to improve the pixel rendering. -- Allow to build the project with "gradlew build". -- Fix issues with back button in the Settings, Help and About. -- Build with Android 4.4 support (Not sure the settings work). -- Prevent empty MRU. -- Allow to go back from the settings in Android 4.4 and may be more recent versions. -- Save the Port 2 at the same time we save the state file. -- Change the name from "Emu48 for Android" for "Emu48". -- Always prompt to save when closing. -- Fix MostRecentUsed file issue. -- Update the core source code to Emu48 1.60+. - - -Version 1.1 (2019-03-01) - -- Update the KML scripts and the images from Eric Rechlin. -- Fix crash when changing the main image. -- Fix an issue when KML file is not found. - - -Version 1.0 (2019-02-28) - -- First public version available on the store. - - -LICENSES - -Android version by Régis COSNIER. -This program is based on Emu48 for Windows version, copyrighted by Christoph Gießelink & Sébastien Carlier, with the addition of a win32 layer to run on Android. - -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. - -Note: some included files are not covered by the GPL; these include ROM image files (copyrighted by HP), KML files and faceplate images (copyrighted by their authors). -The Eric's Real scripts ("real*.kml" and "real*.bmp/png") are embedded in this application with the kind permission of Eric Rechlin. - -Portions of this source code (about the usb-serial) were originally created by Google Inc. in 2011-2013 and Mike Wakerly in 2013. - - -FAQ - -* Can you do something about Android removing access permissions to the state file? I can't run the app for more than a week before the OS takes it away and then I have to create a new state file. - > It should be possible to prevent Android from forgetting the permissions in Google Play Store app, Account/Play Protect/App permissions removed/See apps/All apps/Emu48/"Remove permissions if app isn't used" uncheck. - - -TODO - -- NDK 26 does not compile -- Patching 49G to disable 10 min auto off causes a reset when touching the Recent button and coming back to the app (with a Flashcard loaded). -- Add an "haptic" feedback with a sound instead of a vibration (F. Giampietro). -- Add a Cancel button to the HP48 memory card creator dialog. -- Manage the HP 48 port 2 with the same kind of interface for the memory card. -- The render pixels are very nice. A solution to obtain uniform pixel size could be a preset (a multiplier, auto) so the user could decide and upscale/downscale (Michael P). -- Somehow LEFT (Shift on the keyboard) + 7 activates the DIVIDE-key (z-Key)..., but with the NUM-Key it can make it work without problems... - I think it might have something to do with the "/" sign on the Shifted-7-key. -- The clock seems not synchronized sometimes (Michael P). -- Sometimes, the calculator seems to lag and finally freeze. -- In Chrome OS, sometimes there is no OK button in the KML Script Compilation Result. -- Add KML script loading dependencies fallback to the inner ROM (and may be KML include?). - - -BUILD - -Emu48 for Android is built with Android Studio 2023.3.1 (2024). -And to generate an installable APK file with a real Android device, it MUST be signed. - -Either use Android Studio: -* In menu "Build" -* Select "Generate Signed Bundle / APK..." -* Select "APK", then "Next" -* "Create new..." (or use an existing key store file) -* Enter "Key store password", "Key alias" and "Key password", then "Next" -* Select a "Destination folder:" -* Select the "Build Variants:" "release" -* Select the "Signature Versions:" "V1" (V1 only) -* Finish - -Or in the command line, build the signed APK: -* In the root folder, create a keystore.jks file with: -** keytool -genkey -keystore ./keystore.jks -keyalg RSA -validity 9125 -alias key0 -** (or keytool -genkeypair -v -keystore ./keystore.jks -keyalg RSA -validity 9125 -alias key0) -* create the file ./keystore.properties , with the following properties: - storeFile=../keystore.jks - storePassword=myPassword - keyAlias=key0 - keyPassword=myPassword -* gradlew build -* The APK should be in the folder app/build/outputs/apk/release - -Then, you should be able to use this fresh APK file with an Android device. +Also see original ReadMe.txt for upstream changes and information diff --git a/ReadMe.txt b/ReadMe.txt new file mode 100644 index 0000000..0bb0f1a --- /dev/null +++ b/ReadMe.txt @@ -0,0 +1,321 @@ +DESCRIPTION + +This project ports the Windows application Emu48 written in C to Android. +It uses the Android NDK. The former Emu48 source code (written by Sébastien Carlier and 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 Emu48 source code. +It can open or save the exact same state files (state.e48/e49) than the original Windows application! + +Some KML files with theirs faceplates are embedded in the application but it is still possible to open a KML file and its dependencies by selecting a folder. + +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: +https://github.com/dgis/emu48android + + +QUICK START + +1. Click on the 3 dots button at the top left (or from the left side, slide your finger to open the menu). +2. Touch the "New..." menu item. +3. Select a default calculator (or "[Select a Custom KML script folder...]" where you have copied the KML scripts and ROM files (Android 11 may not be able to use the Download folder)). +4. And the calculator should now be opened. + + +NOTES + +- The Help menu displays Emu48'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, you must take care of the case sensitivity of its dependency files. +- Starting with the version 1.4, a RAM card generator for the port 2 of the HP48SX and HP48GX has been added. + Like with the MKSHARED.EXE on Windows, you can generate the card in a file (i.e.: SHARED.BIN). + And then, to use with the HP48SX or the HP48GX, you must select this generated file in the "Settings/Port2 File". +- By default when you create a new HP49/50 with the embedded readonly file "rom.49g", + everything that you store in port 2 is lost just because the file "rom.49g" is READONLY. + Since version 2.0, it is now possible from the menu to manage the Flash ROM file (it will fully replaces the ROM). +- To speed up printing, set the 'delay' to 0 in the calculator's print options. +- The serial ports, wire or infrared (infrared limited to 2400 baud) can now be used through the USB port in mode OTG. + It uses the library https://github.com/mik3y/usb-serial-for-android, which allows to plug most of the serial USB adapters (only tested with Prolific and Ch34x), + without the need to be root. If it is not automatic, please, activate the OTG mode in your Android device, and then, + you should be able to see it in the Emu48 settings. + It is still experimental and I see some issues when sending characters from the emulator to a real HP48 or HP49 with the kermit protocol. + The communication can be artificially slowed down in this direction using an option. + If the adapter is unplugged then plugged back in, you may need to call OPENIO/CLOSEIO. + + +NOT WORKING YET + +- Disassembler +- Debugger + + +LINKS + +- Original Emu48 for Windows from Christoph Giesselink and Sébastien Carlier: https://hp.giesselink.com/emu48.htm +- Emu48+ for Windows from Eric Rechlin and Cyrille de Brebission: https://www.hpcalc.org/details/6523 +- Droid48 Reader app: https://play.google.com/store/apps/details?id=com.drehersoft.droid48reader or https://www.hpcalc.org/details/7366 +- Smart Charlemagne (HP48SX Skins for Android): https://www.hpmuseum.org/forum/thread-14197-post-125336.html or https://www.hpcalc.org/details/9115 +- The Museum of HP Calculators Forum: https://www.hpmuseum.org/forum/thread-12540.html + + +CHANGES + +Version 2.8 (2024-xx-xx) + +- Update the usb serial drivers usb-serial-for-android to version 3.7.3 + + +Version 2.7 (2024-06-14) + +- Updated source code with Emu48 version 1.65+. This new version improve the serial communication. +- Fix haptic feedback with Android 12 (API deprecation). +- Patch the ROM files to prevent the calculator to sleep, but not for HP 48gII/49G/50g (Fix #22). +- Fix a potential crash about the permission to access the files. +- Fix an issue when creating a new Flash ROM file from a custom KML file. +- Require at least Android 5.0 (4.4 previously). + + +Version 2.6 (2022-08-19) + +- Updated source code from Eric Rechlin's Emu48 version 1.64+ that was merged from Christoph Gießelink's Emu48 version 1.65. This new version improve the serial communication. + + +Version 2.5 (2022-03-03) + +- Allow to load RLE4, RLE8 and monochrome BMP images. +- Optimize the number of draw calls when displaying the LCD pixel borders. + + +Version 2.4 (2021-12-08) + +- Updated source code from Eric Rechlin's Emu48 version 1.63+ that was merged from Christoph Gießelink's Emu48 version 1.64. + + +Version 2.3 (2021-10-19) + +- Add an experimental serial port support (via USB OTG). +- Show KML log on request. +- Allows pressing a calculator button with the right button of the mouse and prevents its release to allow the On+A+F key combination (with Android version >= 5.0). +- Update the embedded help file "Emu48.html" to the latest version. +- Open an external web browser when you click an external links in the Help. +- Add Real blue 50g faceplate based on my calculator and on the KML script from Eric Rechlin. +- Display the graphic tab of the printer without antialiasing. +- Fix a crash about the Most Recently Used state files. +- Fix an issue with "Copy Screen". + + +Version 2.2 (2020-12-09) + +- The KML folder is now well saved when changing the KML script for a custom one via the menu "Change KML Script...". +- Fix an issue when the permission to read the KML folder has been lost. + + +Version 2.1 (2020-11-23) + +- Fix an issue which prevents to save all the settings (Save in onPause instead of onStop). + + +Version 2.0 (2020-11-15) + +- Updated source code from Eric Rechlin's Emu48 version 1.62+ that was merged from Christoph Gießelink's Emu48 version 1.63. +- For the HP49/50 port 2, it is now possible to load a new Flash ROM file (It fully replaces the ROM). +- Replaces the haptic feedback switch with a slider to adjust the vibration duration. +- Fix transparency issue (RGB -> BGR). +- Fix a printer issue from Christoph Gießelink's HP82240B Printer Simulator version 1.12. +- Fix the KML button Type 3 with a Background offset which was not display at the right location (Fix #15). +- Fix a timer issue. +- Fix a freeze with a hp48 sx or gx, when switching on/off several times port 1 and 2! + + +Version 1.9 (2020-09-07) + +- If the KML folder does not exist (like the first time), prompt the user to choose a new KML folder. +- If the memory card file for the port 2 cannot be found, prompt the user to choose a new memory card file. +- Move the KML folder in the JSON settings embedded in the state file because Windows cannot open the state file with KML url longer than 256 byte. +- Prevent to auto save before launching the "Open...", "Save As...", "Load Object...", "Save Object...", etc... +- Prevent app not responding (ANR) in NativeLib.buttonUp(). +- In the menu header, switch the pixel format RGB to BGR when an icon of type BMP is defined in the KML script. + + +Version 1.8 (2020-05-24) + +- Intercept the ESC keyboard key to allow the use of the BACK soft key. +- Add LCD pixel borders. +- Add support for the dark theme. +- Fix issues with Linux build (Fix #11). +- Remove the non loadable file from the MRU file list (Fix #13). +- Hide the menu [Default KML script folder] when the default is already displayed (Fix #5). +- Fix: Overlapping window source position when Background/Offset is not (0,0). +- Wrap the table of content in the former help documentation. +- Save the settings at the end of the state file. +- Transform all child activities with dialog fragments (to prevent unwanted state save). +- Fix an issue with the numpad keys which send the arrow keys and the numbers at the same time. +- Fix a major issue which prevented to open a state file (with a custom KML script) with Android 10. +- Optimize the speed with -Ofast option. + + +Version 1.7 (2019-12-12) + +- Updated source code from Eric Rechlin's Emu48 version 1.61+ that was merged from Christoph Gießelink's Emu48 version 1.62. +- Allow to take a screenshot of the fullscreen including the skin. +- Add the KML Icon if present in the navigation menu header (only support PNG or 32bits BMP in the ICO file). +- Add an optional overlapping LCD part stuck to the screen when swiping the 2 calc parts. +- Improve loading speed by caching the KML folder. +- Support the transparency in the KML Global Color. +- Improve the New and Save menus. +- Sound volume can be adjusted by number by touching the number. + + +Version 1.6 (2019-07-15) + +- Add option to prevent the pinch zoom. +- Prevent the white bottom bar when both options "Hide the status/navigations bar" and "Hide the menu button" are set (Github Fix: #9). +- Prevent the BACK/ESCAPE key to end the application only from a hardware keyboard (Github Fix: #10). + + +Version 1.5 (2019-07-11) + +- Add the Ir printer simulator based on the Christoph Giesselink's HP82240B Printer Simulator for Windows. +- Add the macro support. +- Refactor the code for easier code sharing between Emu48, Emu42 and Emu71. +- Fix: Bad text characters when copy/paste the stack. +- Fix: Selecting an empty KML folder prevent to select the default embedded KML folder (Github Fix: #5)! +- Fix a crash with waveOutClose(). +- Fix an issue with the Pan and zoom which was possible after closing the calc. +- Prevent the ESC key from leaving the application (Github Fix: #6). +- Map the keyboard DELETE key like it should (Github Fix: #6). +- Map the +, -, * and / keys catching the typed character instead of the virtual key (Github Fix: #6). +- Fix the printer icon in the Eric's script "real49gp-lc.kml" and "real50g-lc.kml". +- Improve the swipe gesture. +- Fix the On+D tests for hp49/50 by mocking "serial.c". + + +Version 1.4 (2019-06-08) + +- Add an optional menu button in the top left corner. +- Add a RAM card generator for the port 2 of the HP48SX and HP48GX. +- Add the possibility to hide the status and/or the navigation bars. +- Rewrite the timers engine (Hoping this fixes the issue with the stuck "busy" annunciator.) +- Update the Win32 layer from Emu42 dev. +- Fix the authentic speed issue at the first start. +- Fix the non working Restore/Delete backup. +- Prevent to load/save object and copy/paste with HP39/40. +- Add a volume slider in the settings. +- Add a rotation option. +- Warn the user about the KML folder selection if this is Android < 5.0 + + +Version 1.3 (2019-04-04) + +WARNING: WITH VERSION 1.3, THE STATUS FILE HAS BEEN MODIFIED AND IS NOW FULLY COMPATIBLE WITH THE WINDOWS VERSION AS IT SHOULD HAVE BEEN. +HOWEVER, BEFORE THE UPDATE, BACK UP YOUR DATA BECAUSE YOU COULD LOSE THEM. + +- Fix the red and blue color inversion. +- Add the HP 50g (Calypso 2K/4K) KML script from Carl Reinke (4K is a slow because there is no hardware acceleration). +- Fix a bug about the timer delay in timeSetEvent(). +- Fix deprecated classes in the settings. +- Add an optional haptic feedback when touching a button. +- Fix the intermittent slow down due to the end of playing a sound. +- Fix blank screen when switching the KML faceplate. +- Add more traces in the win32 log. +- Allow to select the background color (missing a custom color). +- Thanks to Christoph Giesselink about the state file compatibility issue (sizeof(BOOL) should be 4 and not 1). +- Allow to fully switch the sound off. + + +Version 1.2 (2019-03-14) + +- Use the KML Global color as background color. +- Set the extension .e49 when "Saving as" a state file with model 'Q'. +- Fix a crash after opening several times a state file. +- Fix On-D diagnostic not working for 48gII/49G/49g+/50g (rom 2.15 not good, change for 2.10). +- Improve the scrolling issue found in Emu48 1.59+. +- Rewrite the StretchBlt() function to improve the pixel rendering. +- Allow to build the project with "gradlew build". +- Fix issues with back button in the Settings, Help and About. +- Build with Android 4.4 support (Not sure the settings work). +- Prevent empty MRU. +- Allow to go back from the settings in Android 4.4 and may be more recent versions. +- Save the Port 2 at the same time we save the state file. +- Change the name from "Emu48 for Android" for "Emu48". +- Always prompt to save when closing. +- Fix MostRecentUsed file issue. +- Update the core source code to Emu48 1.60+. + + +Version 1.1 (2019-03-01) + +- Update the KML scripts and the images from Eric Rechlin. +- Fix crash when changing the main image. +- Fix an issue when KML file is not found. + + +Version 1.0 (2019-02-28) + +- First public version available on the store. + + +LICENSES + +Android version by Régis COSNIER. +This program is based on Emu48 for Windows version, copyrighted by Christoph Gießelink & Sébastien Carlier, with the addition of a win32 layer to run on Android. + +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. + +Note: some included files are not covered by the GPL; these include ROM image files (copyrighted by HP), KML files and faceplate images (copyrighted by their authors). +The Eric's Real scripts ("real*.kml" and "real*.bmp/png") are embedded in this application with the kind permission of Eric Rechlin. + +Portions of this source code (about the usb-serial) were originally created by Google Inc. in 2011-2013 and Mike Wakerly in 2013. + + +FAQ + +* Can you do something about Android removing access permissions to the state file? I can't run the app for more than a week before the OS takes it away and then I have to create a new state file. + > It should be possible to prevent Android from forgetting the permissions in Google Play Store app, Account/Play Protect/App permissions removed/See apps/All apps/Emu48/"Remove permissions if app isn't used" uncheck. + + +TODO + +- NDK 26 does not compile +- Patching 49G to disable 10 min auto off causes a reset when touching the Recent button and coming back to the app (with a Flashcard loaded). +- Add an "haptic" feedback with a sound instead of a vibration (F. Giampietro). +- Add a Cancel button to the HP48 memory card creator dialog. +- Manage the HP 48 port 2 with the same kind of interface for the memory card. +- The render pixels are very nice. A solution to obtain uniform pixel size could be a preset (a multiplier, auto) so the user could decide and upscale/downscale (Michael P). +- Somehow LEFT (Shift on the keyboard) + 7 activates the DIVIDE-key (z-Key)..., but with the NUM-Key it can make it work without problems... + I think it might have something to do with the "/" sign on the Shifted-7-key. +- The clock seems not synchronized sometimes (Michael P). +- Sometimes, the calculator seems to lag and finally freeze. +- In Chrome OS, sometimes there is no OK button in the KML Script Compilation Result. +- Add KML script loading dependencies fallback to the inner ROM (and may be KML include?). + + +BUILD + +Emu48 for Android is built with Android Studio 2023.3.1 (2024). +And to generate an installable APK file with a real Android device, it MUST be signed. + +Either use Android Studio: +* In menu "Build" +* Select "Generate Signed Bundle / APK..." +* Select "APK", then "Next" +* "Create new..." (or use an existing key store file) +* Enter "Key store password", "Key alias" and "Key password", then "Next" +* Select a "Destination folder:" +* Select the "Build Variants:" "release" +* Select the "Signature Versions:" "V1" (V1 only) +* Finish + +Or in the command line, build the signed APK: +* In the root folder, create a keystore.jks file with: +** keytool -genkey -keystore ./keystore.jks -keyalg RSA -validity 9125 -alias key0 +** (or keytool -genkeypair -v -keystore ./keystore.jks -keyalg RSA -validity 9125 -alias key0) +* create the file ./keystore.properties , with the following properties: + storeFile=../keystore.jks + storePassword=myPassword + keyAlias=key0 + keyPassword=myPassword +* gradlew build +* The APK should be in the folder app/build/outputs/apk/release + +Then, you should be able to use this fresh APK file with an Android device.