Files
libretro/emulators/omicron.yml
T
Abdessamad Derraz e7aa9e870b fix: state libretro core versions from their code
Each libretro profile records version_basis and core_version is read
there at its pin. snes9x states 1.63 in snes9x.h, nestopia 2.0.0, mgba
0.11.0, vice 3.10, atari800's libretro tree 7.0.0. Cores whose build
takes its version from git carry the nearest tag in describe form
(flycast v2.7-90-ge88b0ce, ppsspp, duckstation, gearcoleco), placeholders
copied from .info files (Git, SVN) are replaced by the code's statement,
and a code that states none is null with kind none.
2026-10-27 19:21:27 +01:00

81 lines
4.6 KiB
YAML

emulator: Omicron
type: libretro
core_classification: game_engine
source: "https://github.com/libretro/Omicron"
source_mirror: "https://git.libretro.com/libretro/Omicron"
upstream: "https://github.com/msx80/Omicron"
profiled_date: "2026-09-17"
source_commit: "0181fbad079addb1fca895325c711f8f91397be4"
upstream_commit: "aaaa2f1a98b88a6b1e6102417317ced206887076"
core_version: "v1"
version_basis:
kind: file
path: "libretro/LibretroOmicronCore/omicron_libretro.c"
pattern: 'info->library_version\s+=\s+"([^"]+)'
display_name: "Omicron"
cores:
- omicron
systems:
- omicron
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 (upstream_commit, their merge base)
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, and 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.
files:
- name: "omicron.jar"
system: omicron
path: "omicron/omicron.jar"
required: true
validation: [existence]
description: "Omicron libretro Java backend: engine, libGDX, LWJGL and their natives"
source_ref: "source libretro/LibretroOmicronCore/omicron_libretro.c:364-387 (GET_SYSTEM_DIRECTORY, omicron/omicron.jar, fileExists), source libretro/LibretroOmicronCore/ejava.c:258-287 (Bootstrap main with the jar path), source libretro/omicron-libretro-java/src/Bootstrap.java:33-39 (URLClassLoader, EntryPoint), source libretro/omicron-libretro-java/pom.xml:13-61"
note: "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."