PS2ME brings the huge library of Java MIDlets — the games that shipped on feature phones through the 2000s — to the PlayStation 2. It boots into a native launcher, lists the JARs on your USB drive with their own icons, and runs them through a port of the open-source phoneME Feature virtual machine, with PS2 controller input, SPU2 audio, and per-game saves on the memory card.
Download the latest ELF from the Releases page, or visit the project website.
- Native launcher — a full-screen 640×448 dashboard with a 4×5 grid of game icons decoded straight from each JAR, tabs (All Games / Favorites / Settings), an alphabet sidebar, sorting, favorites, and recents.
- Per-game settings — canvas resolution and orientation overrides so both portrait and landscape games display correctly.
- Audio — menu background music played on a hardware SPU2 ADPCM voice, the Nokia Sound API (tone / OTA melody / WAV), and MMAPI MIDI through an offline-built wavetable synth.
- Memory-card saves — MIDlet RecordStore data is persisted per game, and each save shows up in the console's OSD browser with its own icon and title.
- Quality-of-life — friendly loading screen, optional debug split view, and an opt-in in-game FPS counter.
- Real hardware: a PlayStation 2 able to run homebrew ELFs (e.g. launched from USB via uLaunchELF / wLaunchELF), plus a FAT32 USB drive and a memory card for saves.
- Emulator: PCSX2 works well for testing.
- Games: standard J2ME
.jarMIDlets.
-
Download
PS2ME-vX.Y.Z.elf(andbgm.adpcm) from the Releases page. -
On your USB drive, create a
PS2MEfolder and copy the files so you have:mass:/PS2ME/PS2ME-vX.Y.Z.elf mass:/PS2ME/bgm.adpcm (optional — the menu is silent without it) mass:/PS2ME/games/*.jar (your MIDlets) -
Launch the ELF from your homebrew loader (or in PCSX2: Run ELF…).
-
Pick a game from the grid and press ✕.
Controls (launcher): D-pad navigates · ✕ launches · ○ back · △ favorite · □ sort · L1/R1 switch tabs · L2/R2 page · Select opens per-game options.
The build runs entirely inside Docker. It is a two-stage toolchain: a host image
(phoneme-host, JDK 8 + gcc-multilib) that romizes the class library, and a
cross image (phoneme-cross) that adds the PS2 EE toolchain (mips64r5900el-ps2-elf-*,
from a rsdk-ps2-builder image) and links the final ELF.
Note: the phoneME Feature source tree and the PS2 SDK are not vendored in this repository. They are bind-mounted from the host at
references/phonemeand provided by thersdk-ps2-builderimage. See the Dockerfiles underdocker/for the expected layout. Because of this, builds are produced locally rather than in CI.
Once the images and references/phoneme are in place, produce a release ELF with:
docker run --rm \
-v "$(pwd)":/work -v phoneme_build:/build \
phoneme-cross bash /work/docker/phoneme-cross/build-release-ps2.sh
# -> build/ps2/PS2ME-vX.Y.Z.elf (stripped) + build/ps2/bgm.adpcmFor a debug build that keeps the EE console alive (useful under PCSX2), add
-e PS2ME_NO_IOP_RESET=1 and run build-elf-midp-ps2.sh.
ps2/ Our PS2 port (the code that lives in this repo)
version.h Single source of truth for the version
vm/ Entrypoint (Ps2MidpMain.cpp) + KNI native-method bridges
javacall/ JavaCall port: contract / hal / platform (ps2sdk backends)
platform/ Frontend, storage, audio, pad, memory card, display, ...
phoneme/ Build-system overlay for the ps2_mips target
docker/ Multi-stage Docker build (host + cross) and build scripts
tools/ Offline tooling (SF2 wavetable bank builder, mkbgm, ...)
assets/ Brand icon + menu background music source
docs/ Project website (GitHub Pages)
Versions follow SemVer. Bump with ./version.sh {major|minor|patch}
(edits ps2/version.h), rebuild, tag vX.Y.Z, and publish. See
CHANGELOG.md and CONTRIBUTING.md.
PS2ME is released under the GNU General Public License v2.0 — see LICENSE.
The distributed ELF incorporates the phoneME Feature VM and class library (GPLv2),
which is why the project as a whole is GPLv2. It also builds against the PS2 SDK
(ps2dev) and includes stb_image (public domain / MIT).
Created and maintained by Wellinator — GitHub · wellcoj@gmail.com.
- phoneME Feature — the CLDC/MIDP reference VM.
- PSPKVM — prior art for a MIPS J2ME port.
- ps2dev / ps2sdk — the PlayStation 2 homebrew SDK.