mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-24 12:49:03 -05:00
libretro/Omicron master is msx80/Omicron aaaa2f1 (2020-09-29) plus .gitlab-ci.yml and the core Makefile. Upstream HEAD 49e4e05 is 168 commits later and moved the libretro frontend files the notes cite.
77 lines
4.5 KiB
YAML
77 lines
4.5 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"
|
|
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."
|