- C 94.4%
- Roff 2%
- Assembly 1.9%
- Makefile 1.7%
x48ng -- HP 48 emulator
This is my fork of x48-0.6.4 where I deviate from the original code and do my own thing. (See ./README_0.6.4 for the original README)
x48ng is part of my little collection of HP calculators' emulators' that I took over maintenance :
[ The reference public source repository is https://codeberg.org/gwh/x48ng ]
Usage
x48ng-launcher --help
Screenshots
--tui-small version (ncurses, 4 pixels per character)
screenshot of x48ng --tui-small running in a terminal
--tui-tiny --mono version (ncurses, 8 pixels per character)
screenshot of x48ng --tui-tiny --mono running in a terminal
--tui version (ncurses)
screenshot of x48ng --tui running in a terminal
--sdl version
manual setup
- Create
$XDG_CONFIG_HOME/x48ng(usually~/.config/x48ng/) - Copy
/usr/share/x48ng/ROMs/gxrom-r(or any other rom) to$XDG_CONFIG_HOME/x48ng/rom - Run
x48ng --print-config > $XDG_CONFIG_HOME/x48ng/config.lua - Run
x48ng
Ncurses UI (--tui)
I had to be a bit 'creative' mapping keys there:
┌─[ Help ]─────────────────────────────────────────────────────────┐
│Special keys: │
│ F1: Help, F7: Quit │
│Calculator keys: │
│ all alpha-numerical keys │
│ F2: Left-Shift, F3: Right-Shift, F4: Alpha, F5: On, F6: Enter │
└──────────────────────────────────────────────────────────────────┘
There's also additional hidden shortcuts that might work and/or come handy:
- Left-Shift:
[orPgUp - Right-Shift:
]orPgDn - Alpha:
;orIns - On:
EscorHome - Enter:
, - quit:
|orShift + EndorF10
What have I done:
- renamed it to x48ng to avoid confusion
- merged in a SDL1 version I found @ https://code.google.com/archive/p/x48-sdl/source/default/source
- removed the code supporting Solaris, HP-UX, etc.
- removed the autotools-based build system and wrote a simple Makefile instead
- added a x48ng.desktop file and an icon
- refactoring as a way to explore/understand the codebase
- drop Xresources
- link to lua to use it as a config file reader
- ported the SDL1 GUI to SDL2 to SDL3
Bugs to fix
See and report at https://codeberg.org/gwh/x48ng/issues or https://github.com/gwenhael-le-moine/x48ng/issues
What more I would like to do:
long(er) term
- GUI in gtk(4)?
Compilation
The Makefile will try to autodetect if necessary dependencies for x11 and sdl front-ends are met and enable/disable x11 and sdl front-ends accordingly.
You can force disable sdl front-end by compiling with make WITH_SDL=no.
Ncurses front-end is always built-in.
Dependencies (see .github/workflows/c-cpp.yml for debian packages names)
- Lua
- readline
for Ncurses:
- ncursesw
for SDL version:
- SDL3
- SDL3_gfx
Installation
First clone the source code, ensuring you get all submodules:
git clone --recursive https://codeberg.org/gwh/x48ng.git
- Run
make get-romsunless you have a good reason not to. (ROMs licenses are unclear so they're not bundled by default.) - Run
sudo make install PREFIX=/usr(see the Makefile to see what variables your can override.) - Run
x48ng-launcher. On first launch or if no ~/.config/x48ng/ exists it will be created and populated. By default it sets up a HP 48GX with ROMRwith a 128KB card in port 1 and a 4MB card in port 2. You can change the ROM by setting the ROM environment variable (ROM=sxrom-j x48ng-launcherfor example.)
Development
make FULL_WARNINGS=yesto compile with all warningsmake cleanandmake mrproperto clean between compilation runsmake pretty-codeto format the code usingclang-formatand the provided.clang-format
Friends and inspiration
- https://github.com/gwenhael-le-moine/x48 (original x48 slightly touched but not too much)
- https://github.com/shagr4th/droid48 (x48 ported to Android)
- https://hp.giesselink.com/emu48.htm (The Emu48)
- https://github.com/dgis/emu48android (Emu48 ported to Android)
- https://github.com/gwenhael-le-moine/jsEmu48 (another HP 48 emulator)
- x50ng
- saturnng
- hpemung