A self-contained MSX / MSX2 / MSX2+ with FujiNet built in. One shared C session core plus four native frontends: GTK4/libadwaita on GNOME, Qt6 Widgets on KDE, AppKit on macOS and Win32 on Windows.
Emulation is openMSX (the FujiNetWIFI fork, branch
feat/fujinet). FujiNet is not a subprocess: the firmware is built as a
shared library, dlopen'd into the process, and joined to the emulator over
its FujiNet cartridge device (src/serial/FujiNet.cc), carried on
loopback TCP 65505.
Note the direction, shared with the CoCo port: here FujiNet listens and the emulator connects out to it — openMSX's own connect loop already retries once a second, so the session starts FujiNet first and a fresh openMSX boot finds it waiting.
This is the fourth member of the FujiNet Go desktop family;
fujinet-go-adam-desktop
is the model repository, and its PORTING.md is the specification this
follows.
The Android sibling, fujinet-go-msx,
already solved the MSX-specific half — openMSX boots C-BIOS with the FujiNet
extension, and video/audio/keyboard/joystick are all live on real hardware.
This repository ports that to the desktop shape the other three follow.
Status: released. All four frontends are complete; see
Releases for
downloads and TODO for the full history.
| Frontend | Toolkit | Binary | Status |
|---|---|---|---|
| GNOME | GTK4 + libadwaita (+ WebKitGTK) | fujinet-go-msx-gnome |
done, tested on real hardware |
| KDE | Qt6 Widgets (+ QtWebEngine) | fujinet-go-msx-kde |
done, tested on real hardware |
| macOS | AppKit (+ WKWebView) | FujiNet Go MSX.app |
done, verified on CI |
| Windows | Win32 (GDI + DwmFlush) | fujinet-go-msx-windows.exe |
done, verified on CI |
The maintainer develops on Linux without Mac or Windows hardware: those two builds are compiled, tested and packaged on CI's macOS and Windows runners, not run interactively by a human yet — reports from real users on those platforms are very welcome.
- MSX / MSX2 / MSX2+ (and user-supplied turboR ROMs) via openMSX, with C-BIOS bundled so the free-BIOS machines boot with zero manufacturer firmware — see "MSX system ROMs" below.
- In-process FujiNet: disk/cartridge mounting from the local SD folder, and network config through the embedded FujiNet web UI, plus a live console-log window.
- Digital joystick support on both MSX general-purpose ports, driven through
openMSX's own
msxjoystick1/2plugs. - Import disk/ROM images into the FujiNet SD folder; Import System ROMs… for turboR or real-machine firmware this project does not (and cannot) ship.
- Settings/Preferences windows (GNOME, KDE, macOS ⌘,, Windows) for machine profile, aspect ratio, smooth scaling, and FujiNet enable.
Breakpoints, pause/step into/over/out, run-to, a Z80 disassembler, memory and
register views, and a decoded VDP pane that understands the TMS9918A (MSX1),
V9938 (MSX2) and V9958 (MSX2+) — modes, table addressing, the palette RAM,
sprite mode 2, and the V9938/V9958 command engine (VRAM-to-VRAM blit unit).
Available in every frontend over the one shared engine; it extends
fujinet-go-adam-desktop's TMS9918A visualizer to the V9938/V9958.
git clone https://github.com/FujiNetWIFI/fujinet-go-msx-desktop
cd fujinet-go-msx-desktop
cmake -B build -G Ninja
cmake --build build
./build/frontends/gnome/fujinet-go-msx-gnomeNo preparation step: the build provides its own dependencies. A plain
git clone, a source tarball with no git metadata, and a flatpak build all
end up with a usable checkout.
Build dependencies: CMake ≥ 3.20, Ninja, a C11/C++23 compiler, Python 3, and
(for openMSX's own build chain) Tcl, SDL2, SDL2_ttf, freetype, libpng and
zlib — declared per-platform in cmake/StageOpenMSX.cmake and the flatpak
manifests. The GNOME frontend additionally needs libadwaita ≥ 1.4 / GTK ≥
4.10, and the KDE one Qt6 ≥ 6.4 Widgets. WebKitGTK 6.0 and QtWebEngine are
optional; without them the FujiNet web UI opens in the system browser.
| Option | Default | Meaning |
|---|---|---|
FRONTEND |
all |
gnome, kde, macos, windows, all, none. all considers only the host's viable frontends. |
WITH_FUJINET |
ON |
Build and embed the FujiNet runtime. |
WITH_WEBVIEW |
ON |
Embed the FujiNet web UI rather than opening a browser. |
OPENMSX_SRC |
— | Build against an out-of-tree openMSX checkout instead of the pinned submodule. |
FUJINET_SRC |
— | Likewise for the FujiNet firmware. |
OPENMSX_RESTAGE |
OFF |
Re-stage openMSX — how to pick up uncommitted edits in an OPENMSX_SRC checkout. |
Developing against local checkouts:
cmake -B build -G Ninja \
-DOPENMSX_SRC=$HOME/Workspace/openMSX \
-DFUJINET_SRC=$HOME/Workspace/fujinet-pc-msx \
-DOPENMSX_RESTAGE=ONC-BIOS is bundled unconditionally — it is freely redistributable (see
COMPLIANCE.md) — so MSX, MSX2 and MSX2+ boot with no manufacturer firmware
at all, out of the box, in every build this project publishes.
MSX turboR and specific real-machine ROM sets are copyrighted firmware and are never shipped. Supply your own with Import System ROMs…, which copies them into the session's private ROM directory and binds them to a machine profile at boot.
ctest --test-dir build --output-on-failureIf openMSX boots but the FujiNet CONFIG screen (c from C-BIOS) shows no
host list, or the link loops connect/disconnect, check for a stray standalone
fujinet-pc-msx holding 65505 before suspecting the bus:
ss -tlnp | grep 65505GPL-3.0-or-later. See COMPLIANCE.md for per-component provenance, the
openMSX licence determination, and what is and is not patched against
openMSX.