Files
libretro/emulators/freej2me_plus.yml
T
Abdessamad Derraz b3b3880c19 chore: say which repository each source_ref cites
Profiles that read two repositories, a libretro port and its upstream,
now prefix each citation with source or upstream, decided by which tree
carries the cited value at its pin. The emulator pages use the word to
tell libretro glue, emulator code as the port carries it, and the
upstream emulator apart.
2026-10-20 09:23:41 +02:00

107 lines
5.8 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, while 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: "source src/libretro/freej2me_libretro.c:38-45 (freej2meapp), source src/libretro/freej2me_libretro.c:859-875 (GET_SYSTEM_DIRECTORY, freej2me_present, SYSTEM_NOT_FOUND_MSG), source src/libretro/freej2me_libretro.c:339-346 (access F_OK), upstream src/libretro/freej2me_libretro.c:877-888 (java -jar argv), source 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: "source src/javax/microedition/media/Manager.java:55, source src/javax/microedition/media/Manager.java:328-351, source 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: "source src/org/recompile/mobile/PlatformFont.java:63, source src/org/recompile/mobile/PlatformFont.java:133-154, source src/org/recompile/mobile/Mobile.java:1062-1064"