Image 1 — Gave my Japanese NW-A829 a homebrew player: drag and drop, FLAC, podcast downloads over Bluetooth, and Pokémon Crystal
Image 2 — Gave my Japanese NW-A829 a homebrew player: drag and drop, FLAC, podcast downloads over Bluetooth, and Pokémon Crystal
Image 3 — Gave my Japanese NW-A829 a homebrew player: drag and drop, FLAC, podcast downloads over Bluetooth, and Pokémon Crystal
Image 4 — Gave my Japanese NW-A829 a homebrew player: drag and drop, FLAC, podcast downloads over Bluetooth, and Pokémon Crystal
Image 5 — Gave my Japanese NW-A829 a homebrew player: drag and drop, FLAC, podcast downloads over Bluetooth, and Pokémon Crystal
Image 6 — Gave my Japanese NW-A829 a homebrew player: drag and drop, FLAC, podcast downloads over Bluetooth, and Pokémon Crystal

Gave my Japanese NW-A829 a homebrew player: drag and drop, FLAC, podcast downloads over Bluetooth, and Pokémon Crystal

TLDR: Japanese NW-A829, homebrew player booting next to Sony's firmware. Drag and drop, 24-bit FLAC, Sony's DSP and EQ, podcasts downloaded over my phone's Bluetooth, and Game Boy/NES/GBA/Doom. Delete one folder and it's a stock Walkman again. Credits and open questions at the end.

On a trip to Japan I found a pristine NW-A829 and bought it on the spot. At home I remembered why Japanese models are a pain outside Japan. There's no drag and drop, everything has to go through SonicStage, and mine was on firmware 1.01 with a Japanese-only menu.

I spent most of a weekend going down the rabbit hole with Claude. I'm a mechanical engineer, not a firmware person. Claude wrote most of the code, and a lot of this stands on work the community did long before me. Credits are below.

Cheap fixes first, for other A820 owners

  • Firmware 1.02 unlocks the language menu. I lost a whole day hacking around the Japanese menu before noticing the official update had already solved it.
  • On a non-Japanese Windows, the Japanese SonicStage 4.4 shows "????" everywhere. SonicStage CP 4.3 in English, with the region set to OpenMG Japan, imports MP3s with covers via File > Import > M3U.
  • Don't bother cross-flashing the international firmware. It boots, but MTP mode needs a factory WMDRM certificate the Japanese unit doesn't have. I tried for a day so you don't have to.

The homebrew part

Under the hood, the A829 is a small Linux box: an ARM9 that tops out at 248 MHz, about 20 MB of RAM, a 240x320 screen, and a separate audio DSP. Sony's firmware stays as it is, apart from two small patches. One is a hook that runs a script from the user storage at boot, and the other is a 3-byte patch that removes the "Simple Mode" popup. The script launches my player in place of Sony's UI. Delete the folder and you're back to stock, with the SonicStage library untouched.

What it does now:

  • Drag and drop, music by artist and album with covers
  • FLAC up to 24-bit, plus MP3, AAC, WMA 2 and non-DRM ATRAC
  • Synced lyrics, plus audiobooks and podcasts that remember where you left off
  • Playback speed from 0.75x to 2x without the chipmunk effect, plus silence trimming and a voice boost for podcasts
  • Bluetooth headphones and speakers, with auto-reconnect
  • A focus mode with interval bells and white, pink or brown noise
  • Game Boy, Game Boy Color, NES, Doom (Freedoom), and GBA (early, but it runs), with save states. The HOLD switch doubles as turbo. Pokémon Crystal runs at full speed, or at a less dignified frame rate if music is playing at the same time.
  • Switch back to Sony's UI from the menu, no reboot

I wanted it to still feel like a 2008 Walkman. The UI uses Sony's own fonts, icons and zoom animations, read straight from the firmware. Sony's DSP decodes MP3, AAC, WMA and ATRAC, so DSEE (on MP3), Clear Bass and the Sony EQ all still work. The DSP decodes MP3 at about 4.6x real time while the main CPU barely notices. There's also a "max battery" mode where the DSP feeds the DAC directly and the main CPU stays out of the audio path entirely. Oh, and my player boots in 3.7 s. Sony's takes 4.4.

Podcasts, or how a 512-byte buffer ate my evening

The Walkman has no Wi-Fi. My stubborn idea was to have it pair with my phone over Bluetooth tethering, check my feeds and download new episodes, chapters and transcripts in the background while something else plays. The phone only provides the connection. The whole network stack runs on the Walkman.

It worked on the first try, at 1 KB/s. At that speed, a 55 MB episode takes about 15 hours.

The culprit was a tiny waiting area inside the Walkman, where data from the phone sits for a moment before it gets processed. It was designed in 2008 and only holds a few hundred letters' worth of data. It kept overflowing, and about half of everything the phone sent was quietly lost and had to be sent again. Changing one setting fixed that, and downloads got about 50 times faster. A bit more fine-tuning, plus letting the processor run at full speed while downloading, made them roughly twice as fast again in tests. That 15-hour episode now takes about 7 minutes. I just hit "search for new episodes" and keep listening.

Bluetooth, the hard way

The Walkman could already play music on Bluetooth headphones, but only from Sony's own menus. The part that handles Bluetooth is sealed shut, and there's no manual for it. To use it from my player, I borrowed a testing tool Sony's factory left inside the Walkman and changed a tiny piece of it, so it reconnects to your last headphones or speaker by itself. At first, every attempt failed with a mysterious "error 151". It turned out the Walkman hangs up right after pairing, so you have to call back immediately or lose the connection.

That same Bluetooth connection is how the podcasts get downloaded. It can also make the Walkman show up on your phone as a remote control, so the Walkman's buttons can play, pause or skip on the phone. I haven't fully tested that part yet.

Credit where it's due

  • Rockbox's nwztools (Amaury Pouly and contributors) reverse engineered Sony's UPG update format and the SCSI commands these players use for firmware updates. The whole flashing workflow builds on that.
  • Sony's GPL source release for the NW-A808, the closest sister model, was the reference for the kernel and the audio driver.
  • Emulators: gnuboy (Game Boy), agnes (NES), gpSP with Normmatt's open-source BIOS (GBA), and doomgeneric running Freedoom.
  • Audio and networking: libmad, dr_flac, FAAD2, TJpgDec for cover art, zlib, lwIP, mbedTLS, Sonic for playback speed, AutoEq for the headphone profile, and the Podcasting 2.0 spec for chapters and transcripts.
  • I don't know everything Claude drew on while working. If you recognize something from your project, tell me and I'll add it.

Where I could use help

  1. The Walkman-as-remote mode pairs and connects to my phone, but I haven't confirmed that key presses get through yet.
  2. Has anyone done homebrew on the A820 series before? I couldn't find much, but I may not have looked in the right places.

If there's interest, I'm happy to put the whole thing on GitHub: the player, the boot hook, and notes on the hardware and the DSP.

I'd also like to make it easy to try for people who aren't into firmware: one installer that patches the official Sony update on your own PC and copies the player over, with the stock firmware always one step away. Fair warning: so far it has run on exactly one unit, mine, a Japanese 16 GB A829.

Would you try something similar on your "old" device?

u/Manu819 — 8 days ago
▲ 105 r/walkman

Gave my Japanese NW-A829 a homebrew player: drag and drop, FLAC, podcast downloads over Bluetooth, and Pokémon Crystal

TLDR: Japanese NW-A829, homebrew player booting next to Sony's firmware. Drag and drop, 24-bit FLAC, Sony's DSP and EQ, podcasts downloaded over my phone's Bluetooth, and Game Boy/NES/GBA/Doom. Delete one folder and it's a stock Walkman again. Credits and open questions at the end.

On a trip to Japan I found a pristine NW-A829 and bought it on the spot. At home I remembered why Japanese models are a pain outside Japan. There's no drag and drop, everything has to go through SonicStage, and mine was on firmware 1.01 with a Japanese-only menu.

I spent most of a weekend going down the rabbit hole with Claude. I'm a mechanical engineer, not a firmware person. Claude wrote most of the code, and a lot of this stands on work the community did long before me. Credits are below.

Cheap fixes first, for other A820 owners

  • Firmware 1.02 unlocks the language menu. I lost a whole day hacking around the Japanese menu before noticing the official update had already solved it. 🤡
  • On a non-Japanese Windows, the Japanese SonicStage 4.4 shows "????" everywhere. SonicStage CP 4.3 in English, with the region set to OpenMG Japan, imports MP3s with covers via File > Import > M3U.
  • Don't bother cross-flashing the international firmware. It boots, but MTP mode needs a factory WMDRM certificate the Japanese unit doesn't have. I tried for a day so you don't have to.

The homebrew part

Under the hood, the A829 is a small Linux box: an ARM9 that tops out at 248 MHz, about 20 MB of RAM, a 240x320 screen, and a separate audio DSP. Sony's firmware stays as it is, apart from two small patches. One is a hook that runs a script from the user storage at boot, and the other is a 3-byte patch that removes the "Simple Mode" popup. The script launches my player in place of Sony's UI. Delete the folder and you're back to stock, with the SonicStage library untouched.

What it does now:

  • Drag and drop, music by artist and album with covers
  • FLAC up to 24-bit, plus MP3, AAC, WMA 2 and non-DRM ATRAC
  • Synced lyrics, plus audiobooks and podcasts that remember where you left off
  • Playback speed from 0.75x to 2x without the chipmunk effect, plus silence trimming and a voice boost for podcasts
  • Bluetooth headphones and speakers, with auto-reconnect
  • A focus mode with interval bells and white, pink or brown noise
  • Game Boy, Game Boy Color, NES, Doom (Freedoom), and GBA (early, but it runs), with save states. The HOLD switch doubles as turbo. Pokémon Crystal runs at full speed, or at a less dignified frame rate if music is playing at the same time.
  • Switch back to Sony's UI from the menu, no reboot

I wanted it to still feel like a 2008 Walkman. The UI uses Sony's own fonts, icons and zoom animations, read straight from the firmware. Sony's DSP decodes MP3, AAC, WMA and ATRAC, so DSEE (on MP3), Clear Bass and the Sony EQ all still work. The DSP decodes MP3 at about 4.6x real time while the main CPU barely notices. There's also a "max battery" mode where the DSP feeds the DAC directly and the main CPU stays out of the audio path entirely. Oh, and my player boots in 3.7 s. Sony's takes 4.4.

Podcasts, or how a 512-byte buffer ate my evening

The Walkman has no Wi-Fi. My stubborn idea was to have it pair with my phone over Bluetooth tethering, check my feeds and download new episodes, chapters and transcripts in the background while something else plays. The phone only provides the connection. The whole network stack runs on the Walkman.

It worked on the first try, at 1 KB/s. At that speed, a 55 MB episode takes about 15 hours.

The culprit was a tiny waiting area inside the Walkman, where data from the phone sits for a moment before it gets processed. It was designed in 2008 and only holds a few hundred letters' worth of data. It kept overflowing, and about half of everything the phone sent was quietly lost and had to be sent again. Changing one setting fixed that, and downloads got about 50 times faster. A bit more fine-tuning, plus letting the processor run at full speed while downloading, made them roughly twice as fast again in tests. That 15-hour episode now takes about 7 minutes. I just hit "search for new episodes" and keep listening.

Bluetooth, the hard way

The Walkman could already play music on Bluetooth headphones, but only from Sony's own menus. The part that handles Bluetooth is sealed shut, and there's no manual for it. To use it from my player, I borrowed a testing tool Sony's factory left inside the Walkman and changed a tiny piece of it, so it reconnects to your last headphones or speaker by itself. At first, every attempt failed with a mysterious "error 151". It turned out the Walkman hangs up right after pairing, so you have to call back immediately or lose the connection.

That same Bluetooth connection is how the podcasts get downloaded. It can also make the Walkman show up on your phone as a remote control, so the Walkman's buttons can play, pause or skip on the phone. I haven't fully tested that part yet.

Credit where it's due

  • Rockbox's nwztools (Amaury Pouly and contributors) reverse engineered Sony's UPG update format and the SCSI commands these players use for firmware updates. The whole flashing workflow builds on that.
  • Sony's GPL source release for the NW-A808, the closest sister model, was the reference for the kernel and the audio driver.
  • Emulators: gnuboy (Game Boy), agnes (NES), gpSP with Normmatt's open-source BIOS (GBA), and doomgeneric running Freedoom.
  • Audio and networking: libmad, dr_flac, FAAD2, TJpgDec for cover art, zlib, lwIP, mbedTLS, Sonic for playback speed, AutoEq for the headphone profile, and the Podcasting 2.0 spec for chapters and transcripts.
  • I don't know everything Claude drew on while working. If you recognize something from your project, tell me and I'll add it.

Where I could use help

  1. The Walkman-as-remote mode pairs and connects to my phone, but I haven't confirmed that key presses get through yet.
  2. Has anyone done homebrew on the A820 series before? I couldn't find much, but I may not have looked in the right places.

If there's interest, I'm happy to put the whole thing on GitHub: the player, the boot hook, and notes on the hardware and the DSP.

I'd also like to make it easy to try for people who aren't into firmware: one installer that patches the official Sony update on your own PC and copies the player over, with the stock firmware always one step away. Fair warning: so far it has run on exactly one unit, mine, a Japanese 16 GB A829.

Would you try it on yours?

u/Manu819 — 9 days ago