This is the post I was excited to write from the start: the part where it all works. A forty-year-old Panasonic FS-A1 pulling big games down over WiFi with no cartridge, no disk, and—thanks to a fix a friend rolled into the firmware—no SD card either. Here's the payoff, the moment that made me throw both hands in the air, and a plain-English guide to rebuilding the whole thing if it ever breaks.
Part 2 ended on what looked like a dead end: the microSD slot on my off-the-shelf ESP32-S3 board was a known rough edge, and a bunch of us doing this build had trouble with it. On most FujiNet setups the SD card matters, because—as it was explained to me—it normally holds the data the machine needs to handle the bigger games. On mine, it stopped mattering, and that's the satisfying turn this final post is built on. After that, a step-by-step for getting back to a working setup, because the way I broke things in Part 2 is so easy to fall into.
The fix that made the defect irrelevant
Here's where the community side of this really paid off. One of the FujiNet developers, who goes by nwah—the same person from my local club, SCAT, who got me into this in the first place—put together a build of the MSX firmware with a clever move in it: it bakes the data the bigger games need—the "mapper" information I'll get to in the next section—into the ESP32 WiFi chip's own flash memory. The firmware still checks the SD card first; if there's no card there, it falls back to that baked-in copy. So with my card out of the picture, the MSX just gets what it needs from the WiFi chip instead.
I tested it the blunt way: I pulled the SD card out entirely. Everything still worked. A rough edge that had eaten an embarrassing amount of my time turned into a non-issue, because someone who actually knows what they're doing folded the fix into the firmware. (The SD card surely does and will do more than this one job; for now, having that data in flash as a fallback is what got me to the good stuff.)
What a "MegaROM" is, and why it's the real test
Here's why that data matters. A plain MSX cartridge can only show the machine about 32 KB of itself at once—that's the window the hardware reads through. Plenty of games fit in it. But the good stuff—the big arcade ports—don't, and those are what the MSX world calls MegaROMs. The name is literal: it's short for "megabit ROM," and the term officially means a cartridge of at least 128 kB (one megabit) and up. To get all that through a 32 KB window, a MegaROM uses a trick called bank switching, swapping chunks of itself in and out on the fly. Different publishers did the swapping in different ways—the common schemes came from Konami and ASCII—and those schemes are called "mappers," so the FujiNet has to know which one each game uses. It's a community term, by the way, not a brand: scene slang that became the standard name.
That's what the baked-in data is for. And it works: I've got the FS-A1 playing Aleste, Zanac, Gradius, and Bubble Bobble—a mix of mapper types and sizes—all streamed in, no cartridge, no disk, no SD card.
The hand-in-the-air moment
I should tell you about the actual instant it landed, because this is the whole reason I do this. Aleste was the first big one to come up. The screen worked through its loading, and then the Compile logo appeared—Compile, the studio behind some of the best shoot-em-ups ever made for these machines—and I was out of my chair with both hands in the air like I'd watched a game-winning touchdown. A forty-year-old Japanese computer, no media in it anywhere, pulling a Compile classic down off my home WiFi, lit up on the screen. I didn't build the thing that made that possible. I just got to be the wide-eyed guy who set it up and got to watch it happen. Worth every hour of the climb.

What's TNFS, in one breath
The games live on something called a TNFS host—easiest to picture as a shared folder out on the internet. FujiNet browses that folder and loads a game file from it as if it were sitting in a local drive; the retro machine has no idea the file came from the other side of the world. (I run a public TNFS server myself for the FujiNet community, which is a story for another post.)
How to actually play one
Once it's working, the day-to-day is genuinely simple:
- Turn on the MSX—the FujiNet menu comes up.
- Make sure WiFi is connected. You enter it once; it remembers it after that.
- Browse a TNFS host and highlight any game file (a
.rom). - Press b to boot it. It loads on its own.
One MSX habit to keep, the same one from Part 2: never hold SHIFT while booting. On an MSX that disables disk loading, which is the exact path FujiNet uses. And you do not need to hold DEL—the firmware handles the FS-A1's built-in-software bypass for you.
Rebuilding it from scratch
This is the part I most wanted written down. When a board is blank—fresh, or wiped—both chips need their firmware, and it's easy to do one and forget the other. From scratch, the recovery is: flash both chips, then power-cycle. A blank Pico has no firmware at all, so there's no skipping it.
In practice:
- Flash the WiFi chip (ESP32). The ESP32 has two USB-C ports: one labeled "To Pico," which is the normal operating link over to the cartridge chip, and one labeled "To Mainframe"—a bit of tongue-in-cheek labeling—which is the one you connect to the Mac for flashing. Plug "To Mainframe" into the Mac and run the flasher; it erases and rewrites the chip.
- Flash the cartridge chip (Pico). The Pico has a single port—plugged into the ESP32 in normal use, plugged into this Mac for flashing. Hold its BOOTSEL button while plugging it into the Mac to drop it into flash mode; it shows up as a removable drive, and the firmware file gets copied over.
- Put the cable back. Reconnect the short cable from the Pico to the "To Pico" port—that chip-to-chip link has to be in place for normal use, not the Mac connection.
- Power-cycle and reconnect WiFi. Turn the MSX fully off and on (not a soft reset), then re-enter your WiFi once.
I keep a single restore script alongside the firmware that walks both chips in order, so I don't have to remember the sequence under pressure. One honest footnote from Part 2: even when only the ESP32 had changed, reflashing the Pico too—same firmware and all—was what got my games launching again. I still can't fully explain why, and I suspect the reflash is really just resetting the Pico as a side effect rather than fixing some mismatch. So I flash both out of hard-won habit, not because I can hand you the mechanism. Both chips, then a real power cycle, has yet to let me down.
Credits
None of this is my invention—I assembled it, fumbled through it, and wrote down what I learned. FujiNet started with Thom Cherryhomes, who had the idea of giving every old home computer a path onto the modern internet and still leads the firmware today; from there it grew into a large open-source project with a whole host of contributors behind it. Two people's work shows up most directly in this particular build: the universal board and its FujiVersal firmware are by FozzTexx, and the MSX firmware build that actually made everything click—including baking that mapper data into flash so my broken SD slot stopped mattering—is by nwah, who I'm lucky to know through the local club. Standing on other people's good engineering is the honest story here, and I'm glad to say so. The links below go to the project and the individual works.
What I learned
The lesson of this whole series, now that it works: you do not have to understand a thing completely to take part in it, as long as you're honest about where your understanding ends. I came in able to solder and not much else on the software side, leaned on the tools available to me and the patience of people who know far more than I do, and ended up watching a Compile logo come up on a 1986 machine over WiFi. The reward wasn't just the games—it was getting a little less lost than I started, in public, and hopefully nudging someone reading this to try the thing that looks too hard. It usually isn't, quite. And the community's usually closer than you think—sometimes it's a guy from your local club.
Frequently asked
What is a MegaROM on the MSX?
MegaROM is short for "megabit ROM" and officially means an MSX cartridge of at least 128 kB (one megabit) or larger. Because a plain MSX cartridge exposes only about 32 KB at once, MegaROMs use bank switching, with the common mapper schemes originally from Konami and ASCII.
Can a FujiNet stream MSX games without an SD card?
Yes. A firmware build by nwah bakes the mapper data the bigger games need into the ESP32 WiFi chip's own flash; the firmware checks the SD card first and falls back to that baked-in copy. On the Panasonic FS-A1, Aleste, Zanac, Gradius, and Bubble Bobble all loaded over WiFi with the card removed entirely.
How do you boot an MSX game over FujiNet?
Turn on the MSX to reach the FujiNet menu, confirm WiFi is connected, browse a TNFS host, highlight a game file (a .rom), and press "b" to boot it. Never hold SHIFT while booting, since SHIFT at power-on disables the disk-loading path FujiNet uses.
How do you reflash a blank MSX FujiNet board?
Flash both chips, then power-cycle. Flash the ESP32 through its "To Mainframe" USB-C port; flash the Pico by holding BOOTSEL while connecting it to the Mac and copying the firmware file; reconnect the Pico's cable to the "To Pico" port; then fully power-cycle the MSX and re-enter WiFi.
Further reading
- FujiNet project home—the project, supported machines, and community.
- FujiNetWIFI on GitHub—firmware, apps, and the TNFS server software.
- FujiVersal on GitHub—the universal Pico firmware for the board.
- MegaROM Mappers—MSX Wiki—the official definition (ROM of at least 128 kB / one megabit) and how big MSX games use bank switching and mappers.
0 comments