KEmulator nnmod - RetroBIOS¶
Technical notes
MIDP/CLDC runtime running on the host JVM, developed from decompiled KEmulator 1.0.3. MIDlet bytecode executes against the javax.microedition classes compiled into the application, so no device firmware is read.
Yamaha SMAF audio is the one thing the user supplies. MMFPlayer.initialize() probes the directory holding the executable for a hardware emulator library in a fixed order, MA-7 then MA-5 then MA-3, and keeps the first complete set. MA-3 ships with the emulator, so .mmf playback works on a stock install and the MA-5 and MA-7 libraries raise the chip generation: MA-5 adds 32 PCM channels, MA-7 adds DSP effects and is the only mode where supportsAudioTracks() is true, which the MEXA phrase audio track API reads to size its track array. ref: src/media/emulator/media/mmf/MMFPlayer.java:11-40, src/media/emulator/media/mmf/MaDll.java:862-864, src/media/emulator/media/mmf/PhrasePlayerImpl.java:20-26
The probe is 32-bit Windows only. isX64() returns before any file is touched, so the x64 build loads none of these. The MIDI-through-MA path passes notMmf=true, which skips the MA-7 branch and leaves MA-5 or MA-3. ref: src/media/emulator/media/mmf/MMFPlayer.java:15-17, src/media/javax/microedition/media/PlayerImpl.java:206-211, win/src/main/emulator/EmulatorPlatform.java:9-11, x64/src/main/emulator/EmulatorPlatform.java:9-11
Every caller degrades when the probe fails. PlayerImpl.midi() breaks out of the ma block and falls back to MidiSystem; PlayerImpl.mmf(), SmafPlayer, AudioClip and PhrasePlayerImpl each throw and lose SMAF audio alone. Only the file's existence is tested, then the path goes to Native.load, so the code reads no size and no hash. ref: src/media/javax/microedition/media/PlayerImpl.java:212-249, src/oem/com/jblend/media/smaf/SmafPlayer.java:91, src/oem/com/samsung/util/AudioClip.java:61, src/media/emulator/media/mmf/MaDll.java:181-190
The 3D and Mascot Capsule backends default to their OpenGL implementations, so the two shipped native libraries below load only when the user selects the SWERVE M3G engine or the Mascot Capsule DLL engine. ref: src/main/emulator/Settings.java:20-21, win/src/main/emulator/EmulatorPlatform.java:41-80
Two settings hold user-chosen paths with no fixed filename. SoundfontPath takes any .sf2 or .dls and is empty by default, leaving useCustomSoundfont() false and the JVM default soundbank in place. VlcDir points at a VLC installation that vlcj scans for libvlc. ref: src/media/emulator/media/EmulatorMIDI.java:26-36, src/main/emulator/ui/swt/Property.java:1864-1905
13 files | 0 required, 13 optional | 13 in repo, 0 missing Categories: 9 BIOS, 4 game data
M7_EmuSmw7.dll optional in repo
Yamaha MA-7 SMAF sequencer library
- System: j2me
- Validation: existence
- Source:
src/media/emulator/media/mmf/MMFPlayer.java:19-23,src/media/emulator/media/mmf/MaDll.java:186 - First branch of the MMFPlayer probe, taken only when M7_EmuHw.dll sits beside it and the caller did not pass notMmf. Selects MODE_MA7, the only mode carrying phrase audio tracks. Distributed with the SoftBank MEXA emulator.
M7_EmuHw.dll optional in repo
Yamaha MA-7 SMAF hardware layer
- System: j2me
- Validation: existence
- Source:
src/media/emulator/media/mmf/MMFPlayer.java:21 - Tested for existence next to M7_EmuSmw7.dll; the MA-7 branch is skipped unless both are present. Loaded by the Windows loader as a dependency of the sequencer library, which is the path handed to Native.load.
M5_EmuSmw5.dll optional in repo
Yamaha MA-5 SMAF sequencer library
- System: j2me
- Validation: existence
- Source:
src/media/emulator/media/mmf/MMFPlayer.java:24-27,src/media/emulator/media/mmf/MaDll.java:184,src/media/emulator/media/mmf/MaDll.java:231-241 - Second branch of the probe, taken when the MA-7 pair is absent or the caller passed notMmf and M5_EmuHw.dll sits beside it. Selects MODE_MA5, whose init walks a 1024-byte allocation to an address ending in 0x81 before calling MaSound_EmuInitialize.
M5_EmuHw.dll optional in repo
Yamaha MA-5 SMAF hardware layer
- System: j2me
- Validation: existence
- Source:
src/media/emulator/media/mmf/MMFPlayer.java:25 - Tested for existence next to M5_EmuSmw5.dll; the MA-5 branch is skipped unless both are present.
ma3smwemu.dll optional in repo bundled
Yamaha MA-3 SMAF emulator
- System: j2me
- Size: 708.0 KB
- SHA1:
b566d111ccd3... - MD5:
c1625f6c2fbf... - Validation: existence
- Source:
src/media/emulator/media/mmf/MMFPlayer.java:28-30,src/media/emulator/media/mmf/MaDll.java:182,src/media/emulator/media/mmf/MaDll.java:227-230 - Last branch of the probe and the only one satisfied by a single file. Selects MODE_MA3, whose init calls MaSound_Initialize directly. Present in a stock install, so .mmf playback needs nothing from the user on the 32-bit Windows build.
jsr184client.dll optional in repo bundled
SWERVE M3G native engine
- System: j2me
- Size: 396.0 KB
- SHA1:
ed9a60d56ddc... - MD5:
9fcb2bd1f36d... - Validation: existence
- Source:
m3g_swerve/src/javax/microedition/m3g/Graphics3D.java:275,m3g_swerve/src/javax/microedition/m3g/Loader.java:378,src/main/emulator/i.java:6-14 - Loaded from the executable's directory by the static initializers of the SWERVE javax.microedition.m3g classes, with a System.loadLibrary fallback on the library path. Reached only when the 3D engine setting is SWERVE, the LWJGL engine being the default.
java_micro3d_v3_32.dll optional in repo bundled
Mascot Capsule V3 JNI bridge
- System: j2me
- Size: 27.0 KB
- SHA1:
b1d6aef4559b... - MD5:
60045cd91e30... - Validation: existence
- Source:
micro3d_dll/src/com/mascotcapsule/micro3d/v3/Figure.java:162-165,micro3d_dll/src/com/mascotcapsule/micro3d/v3/Graphics3D.java:279 - System.loadLibrary from the static initializers of the com.mascotcapsule.micro3d.v3 classes, reached only when the Mascot Capsule engine setting is DLL. Its import table names micro3d_v3_32.dll.
micro3d_v3_32.dll optional in repo bundled
Mascot Capsule V3 renderer
- System: j2me
- Size: 464.0 KB
- SHA1:
f59e0d445aaf... - MD5:
d5ab04740801... - Validation: existence
- Source:
micro3d_dll/src/com/mascotcapsule/micro3d/v3/Figure.java:163 - Pulled in by the Windows loader when java_micro3d_v3_32.dll loads; no Java code names it.
amrdecoder.dll optional in repo bundled
opencore-amr decoder for AMR audio
- System: j2me
- Aliases:
amrdecoder_64.dll,amrdecoder_arm64.dll,libamrdecoder.so,libamrdecoder_64.so,libamrdecoder_arm32.so,libamrdecoder_arm64.so,libamrdecoder.dylib,libamrdecoder_arm64.dylib - Validation: existence
- Source:
win/src/main/emulator/EmulatorPlatform.java:91-97,x64/src/main/emulator/EmulatorPlatform.java:173-212 - System.load on a name composed from os.name and os.arch, resolved against the executable's directory. The 32-bit Windows build asks for amrdecoder.dll unconditionally. A load failure is printed and swallowed.
s60snr.ttf optional in repo game_data bundled
Series 60 typeface
- System: j2me
- Validation: existence
- Source:
src/main/emulator/graphics2D/awt/FontAWT.java:20-28 - Read from /res inside the jar the first time a FontAWT is built for the Series 60 face, then cached and derived per style and size.
Nokia.ttf optional in repo game_data bundled
Nokia typeface
- System: j2me
- Validation: existence
- Source:
src/main/emulator/graphics2D/awt/FontAWT.java:29-37 - Read from /res inside the jar the first time a FontAWT is built for the Nokia face.
presets.xml optional in repo game_data bundled
Device presets: screen sizes, key maps, platform identities
- System: j2me
- Validation: existence
- Source:
src/main/emulator/Settings.java:133,src/main/emulator/Devices.java:25-50,src/main/emulator/Emulator.java:641 - Devices.load reads the PresetsPath setting, /res/presets.xml by default, as a jar resource and falls back to a disk read when the resource is absent, which is how a user-supplied preset file is picked up.
en.txt optional in repo game_data bundled
UI strings, English
- System: j2me
- Validation: existence
- Source:
src/main/emulator/UILocale.java:11-48 - Read from the lang directory next to the executable at startup and kept as the fallback bundle; the language setting names a sibling in the same directory. Every lookup that misses both bundles falls back to the string built into the call site.
Generated on 2026-08-23T16:12:06Z