Case study
pw: a matching decompilation of the Pokéwalker firmware
Reconstructs as C the firmware of the Pokéwalker, the pedometer accessory for Pokémon HeartGold and SoulSilver, for its Renesas H8/38606 microcontroller. With artwork from the user’s retail firmware image and a supported Renesas compiler suite, the README reports a byte-identical rebuild of the 48 KiB image; without that image, original placeholder art gives a non-matching reference build. The author describes disassembling and decompiling the retail binary, the HeartGold/SoulSilver ROMs and the candidate compilers, alongside published hardware research.
Requirements & limits
- The reviewed main branch is a single initial-release commit of 2026-09-14 with no tags or releases. The README calls the matching reconstruction complete for one image, 49,152 bytes with SHA-256 f9e210a3…d15607, and assumes it is the only Pokéwalker firmware. The source keeps 40 C90 modules whose file names encode the observed link order, and changes must preserve matching.
- Users supply a lawfully obtained Pokéwalker firmware image, used only for artwork, and the Renesas H8, H8S, H8SX family C compiler package; neither is distributed, and the README withholds acquisition instructions. Only suites 6.02.01 and 6.02.02 are reported to reproduce the image. Missing artwork falls back to the bundled placeholders, which normally changes the output hash.
- Builds are reported on macOS Arm64, where the 32-bit Windows compiler runs through Wibo and Rosetta, and natively on Windows x86_64; other hosts are unverified. uv supplies Python 3.11+ (3.12 by default), Ninja and Pillow from uv.lock, configure.py generates build.ninja, and macOS configuration downloads and validates the recorded Wibo release.
- ninja verify requires the retail size and SHA-256 and writes verified.json; the build guide asks for that check under both compiler suites and records per-module input and output hashes to catch stale objects. Host unit tests cover the build utilities, a development check adds clang-format, Ruff and Cppcheck, and there is no CI workflow. Matching is author-reported; this review built or ran nothing.
- Original project material is dedicated to the public domain under CC0 1.0, and the placeholder artwork carries its own CC0 notice; retail firmware and extracted artwork keep their rights. include/startup/iodefine.h is a retained Renesas HEW device header outside the CC0 dedication with no license grant, and the compiler-archive reader credits MIT-licensed ISx and Unshield. The project states no affiliation with Nintendo, The Pokémon Company, GAME FREAK or Renesas; the reviewed sources establish no AI or REA use.
About this entry
- Type
- Case study
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Targets
- Firmware · Game
Sources reviewed
The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.
Primary sources
- README.md GitHub · lumirth/pw · Revision 6dc7bc0
- docs/build.md GitHub · lumirth/pw · Revision 6dc7bc0
- docs/source.md GitHub · lumirth/pw · Revision 6dc7bc0
- docs/references.md GitHub · lumirth/pw · Revision 6dc7bc0
- docs/third-party.md GitHub · lumirth/pw · Revision 6dc7bc0
- assets/README.md GitHub · lumirth/pw · Revision 6dc7bc0
- assets/placeholders/LICENSE.md GitHub · lumirth/pw · Revision 6dc7bc0
- config/toolchains.json GitHub · lumirth/pw · Revision 6dc7bc0
- LICENSE GitHub · lumirth/pw · Revision 6dc7bc0
More in Games
- wii-ipl: a decompilation of the Wii Menu (System Menu 4.3) · Case study
- sead: a decompilation of Nintendo’s first-party C++ standard library · Case study
- Animal Forest: an in-progress matching N64 decompilation · Case study
- Phantom Hourglass: an early-stage matching Nintendo DS decompilation · Case study
- Kinoko: reimplementing Mario Kart Wii’s physics engine for exact ghost replay · Case study
- Mario Kart: Double Dash!!: a matching GameCube decompilation of the debug build · Case study