EKA2L1 has been bumped up to version 0.0.4 and is updated on Google Play Store.

Adjusting device installation methods

There has been feedbacks about the struggles in the process of finding out what to do. For example, when facing the install screen, what device should be installed, what method to install it. Many users stop at these steps, and a lot of Android users are just normal consumers and don’t look around a lot like PC users.

As the results, we adjusted the device installation process. Note that it can not be removed at all.

  • We know a lot of people are console enthusiasts, not Symbian enthusiasts, so for them having two files or something like raw dump can be a bit struggle. So for S60v1 devices, like N-Gage, you are now only required to provide the System ROMS for installation. We hope this ease the installation process.
  • For S60v2 devices, there are transitions process that also involves ROFS in your systems, so it’s still required to use RPKG for it.
  • For S60v3, S60v5 and S^3 devices, we provided you the option to install using firmwares. This is more widely known around people, and should be recommended. You only need to provide path to the VPL file for installation. Note that this does not work with some late S60v2 firmwares, due to differences in ROM data positioning.

About what devices to install, we have added an expandable section that you can click on, which will recommend devices to install and which methods to be used for them.

Here is the images of the new installation screen:

Android device installation screen
PC device installation screen

When the ROM is detected to not be S60v1, the RPKG field will be requested. Thanks the users on Play Store and on Discord on expressing their struggles.

Add fundamental support for S60v2

This is requested by a lot of people. The emulator implemented some parts of the S60v2 systems, but unfortunately not all, and a lot of apps and games are still heavily bugged or not launching at all. However, the compatibilities did improved.

The S60v2 has three feature packs, in which features the transition stages from legacy EPOC days. This including the attempt of the system folder structure removal, the removal of Windows-like DLL searchings, apprun removal, ROM changes like hard-coded the screen resolution inside ROM headers. As such, implementing S60v2 is very fun.

Compression of PETRAN DLLs and EXEs is also presented in a lot of applications. Some features that are still not working properly including games that use Direct Screen Access (DSA) properly.

Here are some screenshots of games currently working on the emulator, using N70 device dump.

Images provided by ericsonia and Ink321
Images provided by ericsonia and Ink321

Adding S60v5 support on 32-bit

S60v5 and S^3 requires heavy VFP operations, so it was not implemented in emulator 32-bit JIT before. Recently we touch it again, since the host doesn’t use VFP registers at all, we trash the whole register bank, but still keep track of what registers are being loaded/written.

The performance getting with the 32-bit JIT is actually, same as on real phone. I don’t think there’s much room of expectation for ameturers like us… But we hope you can enjoy the good old days applications on new Android phone. There is nothing much to talk about this.

Other small fixes

No unicode device dumps have been around before, but recently we was given a N70 Chinese ROMs, and it does not work very well, for the fact that it does not display anything to read. When digging into it, we tried to load Unicode characters, but not storing their coordinates information in the font texture atlas at all. So fixing this make a guy able to play Pocket Kingdom in Chinese, LOL.

The story seems to be able to display now, you can also play Card Decks

Other requested things, included some games not able to read the emulator’s IMEI at all. This IMEI is randomly generated online, LOL. But there should not be anything wrong with it.

To get the IMEI, games must open phone information using an API, which requires you to provide the phone information’s getter name (this is instantiated from a DLL). But these old games sometimes just hardcoded that getter name to either “Calypso” for S60v1 (this is the codename of Nokia 7650), or “DefaultPhone” on S60v2. We don’t load these modules for the obivious reasons, that it’s getting things from driver. So we have to fake those names depend on the OS versions…

You can play Legacy now... And reading IMEI from X-plore also works

Last thing to mention is that, some games have some race conditons, that does not ever trigger because of the way OS schedules thread. After a thread is created and resumed, the kernel will immediate reschedule, which may make child thread runs first. This creates some situations where the parent thread access data by the child thread that is only created when the child thread runs first. The emulator is corrected to follow this behaviour, which fixed crash in some games.

Spider Man: Toxic City and Virtuous Devil Saga now works fine

There are also some small fixes that improve more compabilities with S60v3 and S60v5 applications, but we won’t mention here.

Goals for 0.0.5

We hope to implement N-Gage serivce support (people usually called it N-Gage 2.0) soon. There has been works in ng2 branch before, but it’s very hacky and only works with one game, and that only mentioning installation of it.


We also want to fix the problems of file operations taking enternity on Android 11 currently, or barely functional at all. A fix will be issued when we find the time.

Closing notes

The PC version will have the same quality of life changes as Android, this is being implemented at the moment. But for Android, you can find the stable version of the emulator on Play Store. Hope you have good time with the emulator.