I built W4ME Station, a WASM-4 runtime for old Java ME phones.
It runs standard WASM-4 cartridges on devices that support CLDC 1.1 and MIDP 2.0. The runtime includes a WebAssembly interpreter, graphics, audio, input, persistent storage, and support for loading external cartridges.
The full application, including 13 bundled cartridges, fits into a JAR of about 275 KB.
I started this to see whether an unchanged WASM-4 cartridge could run on memory-constrained Java ME hardware. I’d be interested in feedback on the interpreter, cartridge compatibility, and real devices worth testing.
Would love a writeup on how you went at it and how the layers work, think the real juice is hidden there as Java ME is basically archeology at this point so it would definitely have some learning value. Even if your agent was the one dealing with it, still a dump of "weird things saw while dealing with JavaME" would be fun to read.
What a throwback, last time I played this was I believe on my Motorola v3 Razr, where I spent days playing Gang Starr game and Splinter Cell. And spent a few hundred on internet traffic and downloads, which were super costly at the time so my parents banned me from using internet/WAP on my phone for a while.
Also, if it could fit into 275kb, wonder if it could also be made to fit on the 128k SIM cards that run Java
Thanks. A proper writeup would make sense. The README documents the individual parts, but it does not really explain how they fit together or cover the stranger Java ME issues that came up along the way.
The project has three main layers. At the top there is the MIDP interface and cartridge management. Below that is the WASM-4 implementation for graphics, audio, and input. At the bottom is a small WebAssembly interpreter. A writeup could cover memory limits, bytecode preverification, differences between Java ME implementations, and the parts that had to be tested on real devices.
The SIM card idea is more complicated. Programmable SIM cards usually run Java Card rather than CLDC/MIDP. Java Card does not provide the usual display, audio, or input APIs, so W4ME Station could not be ported directly.
A small command-based WebAssembly experiment on Java Card may be possible. A playable WASM-4 runtime would need a separate implementation.
> Both release variants stay below 300 KB.
> W4ME Station brings unmodified WebAssembly cartridges to CLDC 1.1 / MIDP 2.0 devices, including feature phones from the mid 2000s.
300kb is a _way_ too huge for most of the feature phones.
I built W4ME Station, a WASM-4 runtime for old Java ME phones.
It runs standard WASM-4 cartridges on devices that support CLDC 1.1 and MIDP 2.0. The runtime includes a WebAssembly interpreter, graphics, audio, input, persistent storage, and support for loading external cartridges.
The full application, including 13 bundled cartridges, fits into a JAR of about 275 KB.
I started this to see whether an unchanged WASM-4 cartridge could run on memory-constrained Java ME hardware. I’d be interested in feedback on the interpreter, cartridge compatibility, and real devices worth testing.
This is so cool!
Would love a writeup on how you went at it and how the layers work, think the real juice is hidden there as Java ME is basically archeology at this point so it would definitely have some learning value. Even if your agent was the one dealing with it, still a dump of "weird things saw while dealing with JavaME" would be fun to read.
What a throwback, last time I played this was I believe on my Motorola v3 Razr, where I spent days playing Gang Starr game and Splinter Cell. And spent a few hundred on internet traffic and downloads, which were super costly at the time so my parents banned me from using internet/WAP on my phone for a while.
Also, if it could fit into 275kb, wonder if it could also be made to fit on the 128k SIM cards that run Java
Thanks. A proper writeup would make sense. The README documents the individual parts, but it does not really explain how they fit together or cover the stranger Java ME issues that came up along the way.
The project has three main layers. At the top there is the MIDP interface and cartridge management. Below that is the WASM-4 implementation for graphics, audio, and input. At the bottom is a small WebAssembly interpreter. A writeup could cover memory limits, bytecode preverification, differences between Java ME implementations, and the parts that had to be tested on real devices.
The SIM card idea is more complicated. Programmable SIM cards usually run Java Card rather than CLDC/MIDP. Java Card does not provide the usual display, audio, or input APIs, so W4ME Station could not be ported directly.
A small command-based WebAssembly experiment on Java Card may be possible. A playable WASM-4 runtime would need a separate implementation.