J2ME Loader - RetroBIOS¶
Technical notes
MIDP/CLDC runtime for Android, package ru.playsoftware.j2meloader. A MIDlet is converted to Dalvik bytecode on import and runs against the javax.microedition classes compiled into the app, so no device firmware is read. The vendor extension trees (Nokia, Siemens, Samsung, Motorola, Sony Ericsson, Sprint, Vodafone, KDDI, JBlend, Mascot Capsule) are Java sources in the same package. A fork of NaikSoftware/J2meLoader with an independent history: the 2016 ancestor carries no assets directory and none of the loading code cited below. ref: app/src/main/java/ru/woesss/j2me/installer/AppInstaller.java:292, app/src/main/java/javax/microedition/shell/AppClassLoader.java:38
The working directory holds converted/, configs/, templates/, data/, fs/c and fs/e, all written by the app. fs/c and fs/e are the JSR-75 drives, data/ is RMS storage, converted/ holds converted.dex and res.jar per MIDlet. Nothing there is user-supplied. ref: app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:41-53, app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:146-152
The shader and property assets are read through ContextHolder.getAssetAsString, which rethrows an IOException as RuntimeException instead of degrading, so an absent asset ends the code path that reads it. Roboto-Regular.ttf goes through Typeface.createFromAsset and appcenter.cer through the asset manager directly. ref: app/src/main/java/javax/microedition/util/ContextHolder.java:179-193
17 files | 12 required, 5 optional | 14 in repo, 3 missing Categories: 17 game data
Roboto-Regular.ttf required in repo game_data bundled
Typeface for the virtual keyboard and overlays
- System: j2me
- Source:
app/src/main/java/javax/microedition/lcdui/graphics/CanvasWrapper.java:36,app/src/main/java/javax/microedition/lcdui/Canvas.java:141,app/src/main/java/javax/microedition/lcdui/keyboard/VirtualKeyboard.java:908,app/src/main/java/javax/microedition/lcdui/overlay/FpsCounter.java:48 - Built into a Typeface at CanvasWrapper construction, which is a field initializer of Canvas and therefore runs for every MIDlet that opens one. Drives the key captions, the soft bar and the FPS counter.
system.props required in repo game_data bundled
Default microedition system properties
- System: j2me
- Source:
app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:198,app/src/main/java/ru/playsoftware/j2meloader/config/ProfilesManager.java:185,app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:609,app/src/main/java/javax/microedition/shell/MicroLoader.java:247-252 - Read from assets/defaults when a profile is created and again when the config screen or updateSystemProperties fills the field. Each line becomes a System.setProperty pair at MIDlet startup, carrying microedition.configuration, microedition.platform, the JSR version strings and the vendor identity values.
simple.vsh required in repo game_data bundled
Vertex shader for the screen blitter
- System: j2me
- Source:
app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:35,app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:61,app/src/main/java/javax/microedition/lcdui/Canvas.java:782,app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:180,app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:212 - Compiled when the GL surface is created and no user shader is selected. Graphics mode 1 is the default, so this is the standard display path. Also compiled as the Simple program of the Mascot Capsule renderer.
simple.fsh required in repo game_data bundled
Fragment shader for the screen blitter
- System: j2me
- Source:
app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:36,app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:62-66,app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:213 - Paired with simple.vsh. createProgram returning -1 raises RuntimeException at surface creation.
color.vsh required in repo game_data bundled
Vertex shader for untextured Mascot Capsule geometry
- System: j2me
- Source:
app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:153,app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:53-58 - Program.create builds the tex, color, simple and sprite programs together the first time the Mascot Capsule renderer initializes, so all four pairs are read on the first micro3d frame.
color.fsh required in repo game_data bundled
Fragment shader for untextured Mascot Capsule geometry
- System: j2me
- Source:
app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:154,app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:155-161 - Carries the sphere map, toon threshold and primitive colour uniforms of the Color program.
tex.vsh required in repo game_data bundled
Vertex shader for textured Mascot Capsule geometry
- System: j2me
- Source:
app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:229,app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:53-58 - Built by Program.create alongside the other three pairs.
tex.fsh required in repo game_data bundled
Fragment shader for textured Mascot Capsule geometry
- System: j2me
- Source:
app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:230,app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:231-235 - Carries the texture size, transparency and sphere map uniforms of the Tex program.
sprite.vsh required in repo game_data bundled
Vertex shader for Mascot Capsule sprites
- System: j2me
- Source:
app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:310,app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:53-58 - Built by Program.create alongside the other three pairs.
sprite.fsh required in repo game_data bundled
Fragment shader for Mascot Capsule sprites
- System: j2me
- Source:
app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:311,app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:312-315 - Carries the texture size, transparency and colour key uniforms of the Sprite program.
libjavam3g.so required in repo game_data bundled
JSR-184 M3G engine
- System: j2me
- Source:
app/src/main/java/javax/microedition/m3g/Platform.java:66-72,app/src/main/cpp/Android.mk:3-15 - Named by System.loadLibrary("javam3g") outside any catch, the first time the toolkit reports the UI thread available. Built by ndkBuild from the m3g sources against GLES 1.1.
libmicro3d.so required in repo game_data bundled
Mascot Capsule vertex and buffer routines
- System: j2me
- Source:
app/src/main/java/com/mascotcapsule/micro3d/v3/Utils.java:149-159,app/src/main/cpp/Android.mk:28-34 - Loaded from the static initializer of Utils, so the first Mascot Capsule call brings it in. Holds fillBuffer, glReadPixels and the bone transform.
appcenter.cer optional in repo game_data bundled
X.509 certificate for the crash report endpoint
- System: j2me
- Source:
app/src/main/java/ru/playsoftware/j2meloader/crashes/TLSSocketFactory.java:41-63,app/src/main/java/ru/playsoftware/j2meloader/crashes/AppCenterSender.java:56-60 - Read into a trust store only when a crash report is sent from Android 4.1 through 4.4, where TLSv1.2 is forced. A read or certificate failure falls back to the default socket factory.
licenses.html optional in repo game_data bundled
Third party licence text of the about screen
- System: j2me
- Source:
app/src/main/java/ru/playsoftware/j2meloader/info/LicensesDialogFragment.java:35 - Read when the licences dialog is opened and shown as HTML. Emulation never touches it.
<shader>.ini optional missing game_data
Shader descriptor read from the emulator directory
- Path:
shaders/<shader>.ini - System: j2me
- Source:
app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:336-367,app/src/main/java/ru/playsoftware/j2meloader/config/ShaderInfo.java:101-207,app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:207-212 - The config screen creates the shaders directory, lists every file ending in .ini and parses it as sections opened by a bracketed name, keeping the entries that name both a Vertex and a Fragment file. Name, Author, OutputResolution, Upscaling and four SettingName/SettingDefaultValue/SettingMinValue/SettingMaxValue groups are also read, which is the PPSSPP post-processing descriptor format.
<shader>.vsh optional missing game_data
Vertex shader named by a descriptor
- Path:
shaders/<shader>.vsh - System: j2me
- Source:
app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:45-58,app/src/main/java/javax/microedition/shell/MicroLoader.java:270-273,app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:196-205 - Read whole from the shaders directory when the selected filter names it, then compiled in place of the built-in blitter. An unreadable file yields an empty string, the program fails to build and the bundled default is used after a toast.
<shader>.fsh optional missing game_data
Fragment shader named by a descriptor
- Path:
shaders/<shader>.fsh - System: j2me
- Source:
app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:45-58,app/src/main/java/javax/microedition/lcdui/Canvas.java:791-793 - Paired with the vertex file of the same descriptor. Four float uniforms from the descriptor settings are pushed to it at surface creation.
Generated on 2026-08-23T16:12:06Z