Omicron - RetroBIOS¶
Technical notes
Java game engine on libGDX by msx80, inspired by fantasy consoles. A game is an .omicron cartridge: a jar carrying an omicron.properties descriptor that names the Game class, and numbered sheetN.png, soundN.wav, musicN.mp3 and fileN.bin resources, all read from inside the cartridge (omicron-player/omicron-loader/src/main/java/org/github/msx80/omicron/fantasyconsole/cartridges/JarCartridge.java:20-25, omicron-player/omicron-engine/src/main/java/org/github/msx80/omicron/GameRun.java:74-100). The libretro core is the experimental frontend of the same repository; the libretro fork is the 2020-09-29 tree plus a GitLab CI file and a Makefile that takes the JNI headers from JAVA_HOME. The CI builds the shared library for Linux x64, i686 and aarch64 only (.gitlab-ci.yml:48-66).
retro_load_game builds <system_dir>/omicron/omicron.jar and refuses the content when the file is absent (libretro/LibretroOmicronCore/omicron_libretro.c:364-387). It then opens the JVM shared library by hand: JAVA_HOME must be set (libretro/LibretroOmicronCore/ejava.c:74-80), and libjvm.so or jvm.dll is probed under lib/server, jre/bin/server, jre/lib/amd64/server, jre/lib/aarch64/server, bin/server, bin/client and jre/bin/client, first hit wins (libretro/LibretroOmicronCore/ejava.c:86-94). The JVM is created with no option (libretro/LibretroOmicronCore/ejava.c:249-250). A Bootstrap class compiled into the core binary (libretro/LibretroOmicronCore/bootstrap.h) is defined through JNI and given the jar path; it opens the jar in a URLClassLoader and instantiates org.github.msx80.omicron.libretro.entrypoint.EntryPoint (libretro/LibretroOmicronCore/ejava.c:258-287, libretro/omicron-libretro-java/src/Bootstrap.java:33-39). One JVM per process: unloading keeps it and the next load reuses it (libretro/LibretroOmicronCore/ejava.c:291-305). The Java runtime is a host installation, not a file of this profile.
omicron.jar is the Maven jar-with-dependencies of libretro/omicron-libretro-java under that name: EntryPoint, the engine, loader and api modules, libGDX 1.9.10 with the LWJGL 3 backend and the desktop natives of both (libretro/omicron-libretro-java/pom.xml:13-61). GdxNativesLoader.load and GL.createCapabilities extract those natives from the jar when the frontend creates the GL context (libretro/omicron-libretro-java/src/org/github/msx80/omicron/libretro/entrypoint/EntryPoint.java:137-147), so nothing else is read from system_dir. Audio is a MockAudio and Preferences are written under java.io.tmpdir (libretro/omicron-libretro-java/src/experimental/LibretroApplication.java:45, libretro/omicron-libretro-java/src/experimental/LibretroApplication.java:172-173).
The cartridge class loader installs a SecurityManager (omicron-player/omicron-loader/src/main/java/org/github/msx80/omicron/fantasyconsole/crazyclassloader/NonAggressiveClassLoader.java:19-20). From Java 18 on System.setSecurityManager throws unless the JVM starts with java.security.manager=allow, which the core never passes; the C side does not check the pending exception, so the game is reported as loaded with a 0x0 geometry. Java 8 to 17 runs it.
1 files | 1 required, 0 optional | 1 in repo, 0 missing
omicron.jar required in repo
Omicron libretro Java backend: engine, libGDX, LWJGL and their natives
- Path:
omicron/omicron.jar - System: omicron
- Validation: existence
- Source:
libretro/LibretroOmicronCore/omicron_libretro.c:364-387,libretro/LibretroOmicronCore/ejava.c:258-287,libretro/omicron-libretro-java/src/Bootstrap.java:33-39,libretro/omicron-libretro-java/pom.xml:13-61 - Built with mvn package assembly:single in libretro/omicron-libretro-java after the omicron-api, omicron-loader and omicron-engine Gradle modules are published to the local Maven repository; the jar-with-dependencies output is renamed omicron.jar. Only its presence is checked.
Generated on 2026-10-10T11:26:01Z