Amiga UAE Emulator

I did not have time for a couple of weeks to work on it, however continued last week end. I have Libretro UAE4ARM running with correct speed. However the screen size is still wrong and there is an audio issue. UAE4ARM-RPi also working, there I am checking if the built in functionality is enough to remap the controls or whether I need to program something new into it. I should have an update in a couple of days, also which one to finally choose on the GameShell.

1 Like

Thanks for the update.
Will be looking forward to your final conclusion.

I am sorry, I don’t have as much time as I would like to. So I am only advancing in small steps. Libretro UAE (P-UAE) is out of the game. Once tuned it might look and sound as it would work well, however controls have issues and do lag very strong. @bigeasy_uk, Turrican 2 is even harder than thought, because of these lags.

Libretro UAE4ARM and UAE4ARM-RPi are both really great. I have already a tested some games with Cloanto’s Amiga Forever ROMS, like 1.2, 1.3, 3.1 for OCS and AGA. By either emulating an A500 and A1200 and all is working fine. Tried even Hyperions 3.1.4 ROM and Workbench :grin: but my GS is meant for gaming.

Although Libretro UAE4ARM would be the best choice, with retroarch on GS, sound and screen size remain an issue for which I do not find a solution for. If anybody else is interested into digging deeper here, let me know, I can provide compilation instructions and a couple of example configuration files and my findings so far.

UAE4ARM-RPi is my current choice, it already provides a way to reconfigure key mappings. For example to map special keys (e.g. space key for an energy line in Turrican) I have not all work done yet, but will continue these days when ever I find time.

1 Like

Ok I got it up and running, finally found some time this week end. I will create a new fork on github with UAE4ARM-RPi that has all changes needed for Gameshell. Including instructions, example configuration files and maybe icons.

The next days I have still to try out CD32 support, find a way to switch between joystick and mouse. Or how one could change disks, like for the all new Barbarian Plus which has 6 disks.

I tested quite a lot of games, to this moment only Pacmania did show some audio and screen size issues, everything else works well.

I can now configure Gameshell keys to behave different for each single game. E.g. space key in Turrican for the energy line on Y button. Or in Hybris have Y for ship expansion, and A for smart bombs and B for pause.

I guess Gameshell has not enough keys for FA-18 Interceptor, however I have not yet given up on that one :slight_smile:

Some parts are coded and not flexible right now, so I still need some time to make it configurable by using the existing UAE configuration files.

Finally, although UAE provides an in game menu, usually opening with F12 however also configurable, it crashes once I press it. But this one is not that important for me yet. Priority is to be able to play games.

1 Like

A question to those among you with Lightkey, I have none, however adding it to the custom input control for the Amiga emulator won’t take too much additional time, so I thought to add it too.

I understand that there are 5 additional buttons, LK1 (home key), LK2 (page up), LK3 (shift), LK4 (page down) and LK5 (end) by default.

Here my question, is LK1 the button to the out erleft ? Hence usually left shoulder button, aka L1 ? and LK2 would be the second left should button, aka L2 ?

First version of uae4arm-rpi for Gameshell ready for download. Instructions may be found here. All you need is to place action.config to /home/cpi/apps/launcher/Menu/GameShell/20_Retro\ Games/Amiga. As usual with SSH, read ssh howto if you need help. The action should then automatically download the emulator. Should the action fail to do this, you may manually download it from here, then upload the unzipped uae4arm file to Gameshell to /home/cpi/apps/emulators directory.

I did also prepare an optional launcher icon:

Example configuration files, as explained in Readme, may be found here

The emulator runs well enough for the games I want to play on Gameshell. There are a few things that could be improved in the future, if time permits.


Wow, thanks a lot. But:

Followed your instructions. But it doesn’t work. If I’m starting a game, the loading screen (of the gameshell) shows up and returns to the main menu. All other games and emulators on my gs work fine. Any suggestions?

Hello @nouty,

did you install libguichan-sdl-0.8.1, and is your GS running with stock OS ? If not you probably have to compile the emulator from sources, or first try to install the packages listed in the main Readme. Your UAE configuration file is based on one of my examples ? Kickstart ROM is there too ?

hey there… first of all: the biggest and largest of thank-you! It’s just because of your concise and well written how-tos here that I got the UAE to work on my GS - but however I suffer from the same issues (screen somehow doesn’t fit and somethings wrong with the sound - plus sometimes the control pad is not working at all) so I read on and stumbled upon your UAE4ARM-RPi fork and happily cloned it, installed all the dev packages from the Readme.txt and tried to build it. But alas, it fails with a strange error:

g++ `sdl-config --cflags` -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard `xml2-config --cflags` -DCPU_arm -DARMV6_ASSEMBLY -DPANDORA -DWITH_INGAME_WARNING -DROM_PATH_PREFIX=\"./\" -DDATA_PREFIX=\"./data/\" -DSAVE_PREFIX=\"./saves/\" -DUSE_SDL -DPICASSO96 -DUSE_ARMNEON -DRASPBERRY -DCAPSLOCK_DEBIAN_WORKAROUND -DARMV6T2 -DUSE_JIT_FPU -DARM_HAS_DIV -DGIT_VERSION=38591d3 -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -Isrc -Isrc/od-pandora  -Isrc/threaddep -Isrc/menu -Isrc/include -Isrc/archivers -Isrc/od-pandora -Wno-unused -Wno-format  -DGCCCONSTFUNC="__attribute__((const))" -fexceptions -fpermissive -std=gnu++11 -marm -Ofast -fomit-frame-pointer -finline -fno-builtin   -c -o src/od-rasp/rasp_gfx.o src/od-rasp/rasp_gfx.cpp
    src/od-rasp/rasp_gfx.cpp:22:22: fatal error: bcm_host.h: No such file or directory
     #include "bcm_host.h"
    compilation terminated.
    <builtin>: recipe for target 'src/od-rasp/rasp_gfx.o' failed
    make: *** [src/od-rasp/rasp_gfx.o] Error 1    

googling this missing bcm_host.h is not vey insightful as it somehow should be present or is part of the packages

libraspberrypi-dev raspberrypi-kernel-headers

which cannot be installed on the GS…

do you have any idea why this fails?

thanks, jc

Hello @jeepcreep,

did you compile with:

make PLATFORM=gameshell -j 2

hey @sbielmann … this actually got me past the above error and it manages to build capsimg but however the following build step fails with a cascade of

undefined referenced to ....

like so:

g++ -o uae4arm src/akiko.o src/ar.o src/aros.rom.o src/audio.o src/autoconf.o src/blitfunc.o src/blittable.o src/blitter.o src/blkdev.o src/blkdev_cdimage.o src/bsdsocket.o src/calc.o src/cd32_fmv.o src/cd32_fmv_genlock.o src/cdrom.o src/cfgfile.o src/cia.o src/crc32.o src/custom.o src/def_icons.o src/devices.o src/disk.o src/diskutil.o src/dlopen.o src/drawing.o src/events.o src/expansion.o src/fdi2raw.o src/filesys.o src/flashrom.o src/fpp.o src/fsdb.o src/fsdb_unix.o src/fsusage.o src/gayle.o src/gfxboard.o src/gfxutil.o src/hardfile.o src/hrtmon.rom.o src/ide.o src/inputdevice.o src/keybuf.o src/main.o src/memory.o src/native2amiga.o src/rommgr.o src/rtc.o src/savestate.o src/scsi.o src/statusline.o src/traps.o src/uaelib.o src/uaeresource.o src/zfile.o src/zfile_archive.o src/archivers/7z/7zAlloc.o src/archivers/7z/7zBuf.o src/archivers/7z/7zCrc.o src/archivers/7z/7zCrcOpt.o src/archivers/7z/7zDec.o src/archivers/7z/7zIn.o src/archivers/7z/7zStream.o src/archivers/7z/Bcj2.o src/archivers/7z/Bra.o src/archivers/7z/Bra86.o src/archivers/7z/LzmaDec.o src/archivers/7z/Lzma2Dec.o src/archivers/7z/BraIA64.o src/archivers/7z/Delta.o src/archivers/7z/Sha256.o src/archivers/7z/Xz.o src/archivers/7z/XzCrc64.o src/archivers/7z/XzDec.o src/archivers/dms/crc_csum.o src/archivers/dms/getbits.o src/archivers/dms/maketbl.o src/archivers/dms/pfile.o src/archivers/dms/tables.o src/archivers/dms/u_deep.o src/archivers/dms/u_heavy.o src/archivers/dms/u_init.o src/archivers/dms/u_medium.o src/archivers/dms/u_quick.o src/archivers/dms/u_rle.o src/archivers/lha/crcio.o src/archivers/lha/dhuf.o src/archivers/lha/header.o src/archivers/lha/huf.o src/archivers/lha/larc.o src/archivers/lha/lhamaketbl.o src/archivers/lha/lharc.o src/archivers/lha/shuf.o src/archivers/lha/slide.o src/archivers/lha/uae_lha.o src/archivers/lha/util.o src/archivers/lzx/unlzx.o src/archivers/mp2/kjmp2.o src/archivers/wrp/warp.o src/archivers/zip/unzip.o src/caps/caps_win32.o src/md-pandora/support.o src/od-pandora/bsdsocket_host.o src/od-pandora/cda_play.o src/od-pandora/charset.o src/od-pandora/fsdb_host.o src/od-pandora/hardfile_pandora.o src/od-pandora/keyboard.o src/od-pandora/mp3decoder.o src/od-pandora/writelog.o src/od-pandora/pandora.o src/od-pandora/pandora_filesys.o src/od-pandora/pandora_input.o src/od-pandora/pandora_gui.o src/od-pandora/pandora_rp9.o src/od-pandora/pandora_mem.o src/od-pandora/sigsegv_handler.o src/sd-sdl/sound_sdl_new.o src/od-pandora/gui/UaeRadioButton.o src/od-pandora/gui/UaeDropDown.o src/od-pandora/gui/UaeCheckBox.o src/od-pandora/gui/UaeListBox.o src/od-pandora/gui/SelectorEntry.o src/od-pandora/gui/ShowHelp.o src/od-pandora/gui/ShowMessage.o src/od-pandora/gui/SelectFolder.o src/od-pandora/gui/SelectFile.o src/od-pandora/gui/CreateFilesysHardfile.o src/od-pandora/gui/EditFilesysVirtual.o src/od-pandora/gui/EditFilesysHardfile.o src/od-pandora/gui/PanelPaths.o src/od-pandora/gui/PanelQuickstart.o src/od-pandora/gui/PanelConfig.o src/od-pandora/gui/PanelCPU.o src/od-pandora/gui/PanelChipset.o src/od-pandora/gui/PanelROM.o src/od-pandora/gui/PanelRAM.o src/od-pandora/gui/PanelFloppy.o src/od-pandora/gui/PanelHD.o src/od-pandora/gui/PanelDisplay.o src/od-pandora/gui/PanelSound.o src/od-pandora/gui/PanelInput.o src/od-pandora/gui/PanelMisc.o src/od-pandora/gui/PanelSavestate.o src/od-pandora/gui/main_window.o src/od-pandora/gui/Navigation.o src/od-pandora/gui/sdltruetypefont.o src/od-pandora/arm_helper.o src/newcpu.o src/newcpu_common.o src/readcpu.o src/cpudefs.o src/cpustbl.o src/cpuemu_0.o src/cpuemu_4.o src/cpuemu_11.o src/cpuemu_40.o src/cpuemu_44.o src/jit/compemu.o src/jit/compstbl.o src/jit/compemu_fpp.o src/jit/compemu_support.o -lSDL -lpthread -lm -lz -lSDL_image -lpng -lrt -lxml2 -lFLAC -lmpg123 -ldl -lmpeg2convert -lmpeg2 -lSDL_ttf -lguichan_sdl -lguichan -L/opt/vc/lib
src/custom.o: In function `compute_framesync()':
custom.cpp:(.text+0x28898): undefined reference to `vsync_switchmode(int)'
custom.cpp:(.text+0x28970): undefined reference to `target_graphics_buffer_update()'
custom.cpp:(.text+0x28aa8): undefined reference to `vsync_switchmode(int)'
custom.cpp:(.text+0x28b5c): undefined reference to `vsync_switchmode(int)'
src/custom.o: In function `hsync_handler_post(bool)':
custom.cpp:(.text+0x298a8): undefined reference to `render_screen(bool)'
src/custom.o: In function `hsync_handler()':
custom.cpp:(.text+0x2a230): undefined reference to `target_lastsynctime()'
custom.cpp:(.text+0x2a844): undefined reference to `show_screen_maybe(bool)'
custom.cpp:(.text+0x2ad44): undefined reference to `show_screen(int)'
custom.cpp:(.text+0x2afec): undefined reference to `target_lastsynctime()'
custom.cpp:(.text+0x2baf8): undefined reference to `render_screen(bool)'
custom.cpp:(.text+0x2bbc8): undefined reference to `render_screen(bool)'
custom.cpp:(.text+0x2bc88): undefined reference to `render_screen(bool)'
custom.cpp:(.text+0x2bd90): undefined reference to `render_screen(bool)'
custom.cpp:(.text+0x2bdc8): undefined reference to `show_screen(int)'
src/custom.o: In function `custom_reset(bool, bool)':
custom.cpp:(.text+0x2e274): undefined reference to `time_per_frame'
src/od-pandora/pandora_gui.o: In function `gui_update()':
pandora_gui.cpp:(.text+0x3e8): undefined reference to `screenshot_filename'
src/od-pandora/pandora_gui.o: In function `gui_init()':
pandora_gui.cpp:(.text+0x1da0): undefined reference to `graphics_subshutdown()'
pandora_gui.cpp:(.text+0x1e44): undefined reference to `update_display(uae_prefs*)'
src/od-pandora/pandora_gui.o: In function `gui_display(int)':
pandora_gui.cpp:(.text+0x1f78): undefined reference to `graphics_subshutdown()'
pandora_gui.cpp:(.text+0x1ff8): undefined reference to `update_display(uae_prefs*)'
pandora_gui.cpp:(.text+0x1ffc): undefined reference to `black_screen_now()'
src/od-pandora/gui/ShowHelp.o: In function `ShowHelp(char const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)':
ShowHelp.cpp:(.text+0x6f8): undefined reference to `wait_for_vsync()'
src/od-pandora/gui/ShowMessage.o: In function `ShowMessage(char const*, char const*, char const*, char const*, char const*)':
ShowMessage.cpp:(.text+0x788): undefined reference to `wait_for_vsync()'
src/od-pandora/gui/SelectFolder.o: In function `SelectFolder(char const*, char*)':
SelectFolder.cpp:(.text+0x984): undefined reference to `wait_for_vsync()'
src/od-pandora/gui/SelectFile.o: In function `SelectFile(char const*, char*, char const**, bool)':
SelectFile.cpp:(.text+0x103c): undefined reference to `wait_for_vsync()'
src/od-pandora/gui/CreateFilesysHardfile.o: In function `CreateFilesysHardfile()':
CreateFilesysHardfile.cpp:(.text+0x1160): undefined reference to `wait_for_vsync()'
src/od-pandora/gui/EditFilesysVirtual.o:EditFilesysVirtual.cpp:(.text+0x12b0): more undefined references to `wait_for_vsync()' follow
src/od-pandora/gui/PanelSavestate.o: In function `RefreshPanelSavestate()':
PanelSavestate.cpp:(.text+0x4b8): undefined reference to `screenshot_filename'
src/od-pandora/gui/PanelSavestate.o: In function `SavestateActionListener::action(gcn::ActionEvent const&)':
PanelSavestate.cpp:(.text._ZN23SavestateActionListener6actionERKN3gcn11ActionEventE[_ZN23SavestateActionListener6actionERKN3gcn11ActionEventE]+0x284): undefined reference to `delay_savestate_frame'
src/od-pandora/gui/main_window.o: In function `sdl::gui_run()':
main_window.cpp:(.text+0x594): undefined reference to `wait_for_vsync()'
src/od-pandora/gui/main_window.o: In function `run_gui()':
main_window.cpp:(.text+0x20ec): undefined reference to `screen_is_picasso'
src/devices.o: In function `do_leave_program()':
devices.cpp:(.text+0x134): undefined reference to `graphics_leave()'
src/drawing.o: In function `render_thread(void*)':
drawing.cpp:(.text+0xa2bc): undefined reference to `unlockscr()'
drawing.cpp:(.text+0xa348): undefined reference to `lockscr()'
drawing.cpp:(.text+0xa360): undefined reference to `lockscr()'
src/drawing.o: In function `halt_draw_frame()':
drawing.cpp:(.text+0xa5f0): undefined reference to `unlockscr()'
src/drawing.o: In function `vsync_handle_check()':
drawing.cpp:(.text+0xb234): undefined reference to `check_prefs_changed_gfx()'
src/main.o: In function `real_main(int, char**)':
main.cpp:(.text+0xf48): undefined reference to `graphics_setup()'
main.cpp:(.text+0x115c): undefined reference to `update_display(uae_prefs*)'
main.cpp:(.text+0x16dc): undefined reference to `graphics_init(bool)'
src/statusline.o: In function `draw_status_line_single(unsigned char*, int, int)':
statusline.cpp:(.text+0x978): undefined reference to `prSDLScreen'
src/md-pandora/support.o: In function `machdep_init()':
support.cpp:(.text+0xa8): undefined reference to `screen_is_picasso'
collect2: error: ld returned 1 exit status
Makefile:331: recipe for target 'uae4arm' failed
make: *** [uae4arm] Error 1

@jeepcreep did you do a

make clean

before re-compiling ? What OS version have you installed on GS ?

Great work (it sounds :wink: ) but I can’t get the emulator to download upon launching my first game…
I have turrican2.uae listed within the new “Amiga” section within the UI…
But when i confirm to have it “setup this game engine automaticly” it just keeps showing 0.00/0.00Mb downloaded…

The action.config is setup with the git source, and i can confirm that it downloads the when testing it.

What did i miss :thinking:

Keep up the Great work sbielmann :+1:

(Clockwork OS v0.3 - would that be my issue in this case ?? hmmm)

I just removed the whole stuff and recloned it, same thing… make clean same thing…

I own a brandnew Gameshell in vanilla state, no hacking, no customizing stuff whatsoever other than adding a couple of ADFs into the directories… for reference, I’ve attached a screenshot of my About screen.


PS: when going the Download-way @OCMaster mentioned, it’s the same… download never starts which is why commenced the whole build in the first place by the way.


1 Like

Having same issue, brand new Gameshell (got this yesterday) ; noticed that there were some paths different than in instructions but anyway… might be the new build that is issue…

The instructions were written for OS version 0.1, the launcher path did change in 0.2. I will adapt this in the README.

I do not know why certain URL’s inside action.config work, and others not. Mine from github seems not to work. Maybe I will switch this to another domain.

Here is what you can do (I will add this to the README):

  • Create action.config as described (OS 0.1 path is /home/cpi/apps/launcher, OS 0.2 and newer it is /home/cpi/launcher)
  • Manually download and scp to /home/cpi/apps/emulators directory
  • Unzip and copy uae4arm also to /home/cpi/apps/emulators directory
1 Like

I did adapt the Readme to explain the installation for OS 0.1 and OS 0.2 and newer. And also changed the location of the download file. Could anybody please get the new action.config file and check whether it works out ?


Works…or at least now I have 1.3 Kickstart screen :slight_smile: updated action.config and manually copied files to /home/cpi/apps/emulators directory…

…aaaaand now running Alcocopter!!! Aweeesomeeee! Thanks Sbielmann!

1 Like

works in a way that it now correctly downloads the zip and unpacks into emulators directory… but whenever I try to start up a UAE (turrican, wings of fury), it seems to somehow crashes back to Gameshell… both games work with Libretro PUAE though.

@jeepcreep did you adapt the uae files as described in the readme ?