Files

107 lines
5.7 KiB
YAML

emulator: FreeJ2ME-Plus
type: libretro
core_classification: enhanced_fork
source: "https://github.com/TASEmulators/freej2me-plus"
upstream: "https://github.com/hex007/freej2me"
profiled_date: "2026-10-04"
source_commit: "68069d79aa6ed106eb788a640a8294a0db55fdcd"
upstream_commit: "8b9bc8a19baf26e3d92f88934a64a32f1cbc2795"
core_version: "1.53"
display_name: "Mobile - J2ME (FreeJ2ME-Plus)"
cores:
- freej2me_plus
systems:
- j2me
notes: |
Fork of FreeJ2ME adding phone-specific APIs (Siemens, Nokia, Motorola,
KDDI, SKT, DoJa, JBlend, Mascot Capsule V3, M3G), KJX loading and more
core options. The native core is a C bridge: retro_init reads the system
directory, checks that freej2me_plus-lr.jar exists there and spawns
java -jar with the file encoding and the screen size as arguments, then
drives the Java process over pipes. Windows launches javaw through
CreateProcess with the system directory as starting directory; Linux and
macOS fork, chdir() into it and execvp() java. A Java runtime must be on
the host PATH, and the start failure message asks for Java 6 or newer. The
jar is built by ant from build.xml, which writes the libretro variant as
freej2me_plus-lr.jar.
ref: src/libretro/freej2me_libretro.c:38-45,
src/libretro/freej2me_libretro.c:859-888,
src/libretro/freej2me_libretro.c:1556-1582,
src/libretro/freej2me_libretro.c:1679-1688,
src/libretro/freej2me_libretro.h:80,
build.xml:86-99
Only existence is tested. When the jar is absent the core posts the
SYSTEM_NOT_FOUND message and returns from retro_init before any process is
created, so nothing loads. The message text still names freej2me-lr.jar,
the file the original core opens; this core opens freej2me_plus-lr.jar.
ref: src/libretro/freej2me_libretro.c:339-346,
src/libretro/freej2me_libretro.c:866-872,
src/libretro/freej2me_libretro.h:73-79
Every relative path the jar opens resolves against the system directory,
since the Java process starts there. freej2me_system/ is created on first
run and holds freej2me.conf (written with defaults when missing, then
overridden by the core options the bridge sends), FreeJ2ME.log, and the
SiemensData/ and XceData/ directories that the Siemens and XCE file APIs
write to. FreeJ2MEDumps/KDDI/ receives the jar and jad extracted from a
.kjx. Saves go to <save_dir>/freej2me/ (rms/<suite>/ and
config/<suite>/game.conf), falling back to the system directory when the
frontend has no save directory.
ref: src/org/recompile/freej2me/Config.java:47-48,
src/org/recompile/freej2me/Config.java:186-206,
src/org/recompile/mobile/Mobile.java:121-123,
src/org/recompile/mobile/Mobile.java:135,
src/libretro/freej2me_libretro.c:926-934,
src/org/recompile/freej2me/Libretro.java:201-205,
src/javax/microedition/rms/RecordStore.java:111
Two files are user supplied and optional. With the freej2me_midifont core
option on, Manager.checkCustomMidi loads the first .sf2 or .gm listed in
freej2me_system/customMIDI/ as the MIDI soundbank; off, or with the
directory empty, the JVM default soundbank is used. With freej2me_textfont
on, PlatformFont loads the first .ttf, .otf or .ttc in
freej2me_system/customFont/; off, the AWT SansSerif, Monospaced and Dialog
faces are used. Both directories are created with a placeholder file when
missing, and neither file has a fixed name.
ref: src/libretro/freej2me_libretro.c:464-469,
src/libretro/freej2me_libretro.c:480-485,
src/org/recompile/freej2me/Libretro.java:240,
src/org/recompile/freej2me/Libretro.java:254,
src/org/recompile/mobile/Mobile.java:1056-1064,
src/javax/microedition/media/Manager.java:55,
src/javax/microedition/media/Manager.java:328-351,
src/org/recompile/mobile/PlatformFont.java:63,
src/org/recompile/mobile/PlatformFont.java:133-154
files:
- name: "freej2me_plus-lr.jar"
system: j2me
path: "freej2me_plus-lr.jar"
required: true
validation: [existence]
description: "FreeJ2ME-Plus libretro Java application"
note: "Java program the native core launches with java -jar from the system directory root. Built by ant from build.xml at the pinned revision; the code reads no size and no hash."
source_ref: "src/libretro/freej2me_libretro.c:38-45 (freej2meapp), src/libretro/freej2me_libretro.c:859-875 (GET_SYSTEM_DIRECTORY, freej2me_present, SYSTEM_NOT_FOUND_MSG), src/libretro/freej2me_libretro.c:339-346 (access F_OK), src/libretro/freej2me_libretro.c:877-888 (java -jar argv), build.xml:86-99 (destfile)"
- name: "<soundfont>.sf2"
system: j2me
path: "freej2me_system/customMIDI/<soundfont>.sf2"
required: false
unsourceable: "user supplied, no canonical file"
category: game_data
description: "MIDI soundbank for J2ME audio"
note: "First .sf2 or .gm in the directory listing, loaded through MidiSystem.getSoundbank when the freej2me_midifont option is on. A rejected file is logged and the JVM default soundbank stays."
source_ref: "src/javax/microedition/media/Manager.java:55, src/javax/microedition/media/Manager.java:328-351, src/org/recompile/mobile/Mobile.java:1056-1058"
- name: "<font>.ttf"
system: j2me
path: "freej2me_system/customFont/<font>.ttf"
required: false
unsourceable: "user supplied, no canonical file"
category: game_data
description: "TrueType font for J2ME text"
note: "First .ttf, .otf or .ttc in the directory listing, loaded through Font.createFont when the freej2me_textfont option is on. A rejected file is logged and the AWT faces stay."
source_ref: "src/org/recompile/mobile/PlatformFont.java:63, src/org/recompile/mobile/PlatformFont.java:133-154, src/org/recompile/mobile/Mobile.java:1062-1064"