Skip to content

KEmulator nnmod - RetroBIOS

Type standalone
Classification Community forks
Source https://github.com/shinovon/KEmulator
Version 2.21.5
Profiled 2026-08-11
Cores kemulator, KEMULATOR
Systems j2me
Author shinovon
Checked by existence
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

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

M5_EmuHw.dll optional in repo
Yamaha MA-5 SMAF hardware layer

ma3smwemu.dll optional in repo bundled
Yamaha MA-3 SMAF emulator

jsr184client.dll optional in repo bundled
SWERVE M3G native engine

java_micro3d_v3_32.dll optional in repo bundled
Mascot Capsule V3 JNI bridge

micro3d_v3_32.dll optional in repo bundled
Mascot Capsule V3 renderer

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

Nokia.ttf optional in repo game_data bundled
Nokia typeface

presets.xml optional in repo game_data bundled
Device presets: screen sizes, key maps, platform identities

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