Skip to content

FreeJ2ME-Plus - RetroBIOS

Type libretro
Classification Enhanced forks
Source https://github.com/TASEmulators/freej2me-plus
Upstream https://github.com/hex007/freej2me
Version 1.53
Profiled 2026-10-04
Cores freej2me_plus
Systems j2me
Technical 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

3 files | 1 required, 2 optional | 1 in repo, 0 missing, 2 unsourceable Categories: 1 BIOS, 2 game data

freej2me_plus-lr.jar required in repo
FreeJ2ME-Plus libretro Java application

  • System: j2me
  • Validation: existence
  • Source: src/libretro/freej2me_libretro.c:38-45, src/libretro/freej2me_libretro.c:859-875, src/libretro/freej2me_libretro.c:339-346, src/libretro/freej2me_libretro.c:877-888, build.xml:86-99
  • 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.

<soundfont>.sf2 optional unsourceable game_data
MIDI soundbank for J2ME audio

  • Path: freej2me_system/customMIDI/<soundfont>.sf2
  • System: j2me
  • Source: src/javax/microedition/media/Manager.java:55, src/javax/microedition/media/Manager.java:328-351, src/org/recompile/mobile/Mobile.java:1056-1058
  • 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.

<font>.ttf optional unsourceable game_data
TrueType font for J2ME text

  • Path: freej2me_system/customFont/<font>.ttf
  • System: j2me
  • Source: src/org/recompile/mobile/PlatformFont.java:63, src/org/recompile/mobile/PlatformFont.java:133-154, src/org/recompile/mobile/Mobile.java:1062-1064
  • 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.

Generated on 2026-10-10T11:26:01Z