XM8M is a multi-platform NEC PC-8801 emulator.
XM8M is a multi-platform emulator for the PC-8801MA, which is compatible with the PC-8801mkIISR, based on XM8 by P.I. Its former name was xm8mac.
This repository was created with permission from P.I.
Development primarily focuses on the unofficial macOS version, while Windows, Linux, and Android builds are also distributed where possible.
The original XM8 website is:
http://retropc.net/pi/xm8/index.html
Download the executable for your platform from the Releases page.
For macOS, move XM8.app to the Applications folder or another suitable location, then run it.
| Platform | CPU | Minimum OS version | Download |
|---|---|---|---|
| macOS | x86_64 | macOS 10.13 High Sierra | Universal build |
| macOS | Apple Silicon | macOS 11 Big Sur | Universal build |
| Windows | x86_64 / x86_32 / ARM64 | Windows 10 | x86_64 build / x86_32 build / ARM64 build |
| Linux | x86_64 / arm64 | Ubuntu 22.04 or later (.deb) / Fedora 36 or later (.rpm) | x86_64 build / arm64 build |
| Raspberry Pi OS | armhf | Bookworm or later | armhf build |
| Android | arm64-v8a / armeabi-v7a / x86_64 | Android 4.4 (API level 19) or later | APK |
On Linux, install the required dependency libraries for your distribution with its package manager. RetroAchievements in the Android build requires Android 6.0 (API level 23) or later.
For information on supported ROM files, see the [ROM files] section in README-XM8.txt.
Place ROM files in the following directory, which is also where the settings file is stored. The directory is created after the application is launched once.
~/Library/Application Support/retro_pc_pi/xm8See the [How to use] section in README-XM8.txt.
Press F12 to save the game screen as a PNG. The shortcut is fixed to F12 on every platform; keyboards using F12 for volume may require Fn. Save Screenshot in the main menu is available on every platform, including Android touch screens. Use F11 or Esc to leave the menu.
Screenshots are 640×400, with doubled rows for 200-line video. Menus, software keyboards, RA notifications, status indicators and display filters are excluded. While a menu is open, the last game frame before entering the menu is saved.
| OS | Destination |
|---|---|
| macOS | XM8/Screenshots inside the system Pictures folder, normally ~/Pictures/XM8/Screenshots |
| Windows | XM8/Screenshots inside the Pictures known folder, respecting relocation and OneDrive |
| Linux / Raspberry Pi OS | XM8/Screenshots inside the xdg-user-dirs Pictures folder, falling back to ~/Pictures/XM8/Screenshots |
| Android | Shared Pictures/XM8/Screenshots, visible in gallery apps |
On desktop, Open Screenshot Folder opens the destination. Files use local timestamps such as XM8_20260904_213045_123.png, with numeric suffixes to prevent overwrites. A three-second notice confirms completion. Files are written in the background, and pending writes finish before the app exits.
Android 10 and later need no additional storage permission for screenshot saving. On Android 6–9, allow storage access when prompted, then capture again. If denied, enable storage permission in Android app settings. Android 4.4–5.1 use legacy storage permissions.
On Windows, macOS, and Linux, you can specify up to two D88 images on the command line. They are inserted into drives 1 and 2 in the specified order. Playlists in .m3u and .m3u8 format are supported.
xm8 [options] [--] [disk-spec ...]
xm8 game.d88
xm8 game.d88#1
xm8 system.d88#0 data.d88#1
xm8 game.m3u
xm8 game.m3u8
xm8 --system V1H --clock 4MHz game.d88disk-spec can be <path>, <path>#<bank>, or <path>:<bank>. Banks are zero-indexed.
Options:
--system <V1S|V1H|V2|N>
--clock <4|4MHz|8|8MHz|8H|8MHzH>
-h, --help
--version
--system and --clock apply only to the current launch; they are not saved to the normal configuration or automatic save state. Paths whose final path component contains # or : cannot be specified on the command line because they are ambiguous with a bank selector.
In builds with RetroAchievements support, use RetroAchievements in the main menu to sign in and switch RA modes. Supported games can use achievements, leaderboards, Rich Presence, and Hardcore mode.
In RA mode, the selected D88 is registered in the library and an app-managed working copy is used, leaving the original unchanged. A game can still start if authentication or network access fails, but achievements are not evaluated or submitted for that session.
The Android build runs on API level 19 and later, but the RetroAchievements UI, networking, and credential storage are available only on Android 6.0 (API level 23) and later.
Install the following before building:
-
Xcode
Only the command-line tools are used, but installing Xcode is the easiest way to obtain them.
-
Homebrew
Install Homebrew to obtain build tools such as CMake.
Open a terminal at the project root and run:
cd Builder/macOS
./dist_app.shThe application bundle (.app) is created in the build directory.
Thank you to P.I. for kindly permitting this source-code adaptation.
Builder/Windows contains a Visual Studio 2022 solution.
Run setup_sdl2.ps1 in Builder/Windows to download and place the SDL2 files required for building:
Builder\\Windows\\SDL\\include(header files)Builder\\Windows\\SDL\\lib\\x86(x86 libraries)Builder\\Windows\\SDL\\lib\\x64(x64 libraries)Builder\\Windows\\SDL\\lib\\arm64(ARM64 libraries)
Build Builder/Windows/XM8.sln with Visual Studio. Output is generated in Builder/Windows/x64, Builder/Windows/Win32, or Builder/Windows/ARM64. XM8.exe and SDL2.dll are required to run it.
RetroAchievements is enabled in the normal Windows distribution builds. If a compatibility-test build that completely excludes the feature is needed, specify the shared XM8_ENABLE_RETROACHIEVEMENTS=false property from Developer PowerShell:
msbuild Builder\Windows\XM8.sln /m /p:Configuration=Release /p:Platform=x64 /p:XM8_ENABLE_RETROACHIEVEMENTS=true
msbuild Builder\Windows\XM8.sln /m /p:Configuration=Release /p:Platform=x64 /p:XM8_ENABLE_RETROACHIEVEMENTS=falseFor RA-enabled builds, THIRD_PARTY_NOTICES.md and the Licenses directory are also copied to the output directory. The same property is available for Debug and Release builds of Win32, x64, and ARM64.
Place BIOS ROM files in:
%appdata%\retro_pc_pi\xm8Builder/Linux contains scripts for creating deb, rpm, and AppImage packages. See dist_app.sh for required build libraries.
cd Builder/Linux
./dist_app.shThis creates a deb or rpm package in the build directory.
cd Builder/Linux
./appimage.shThis creates an AppImage file in Builder/Linux.
The same manifest natively builds x86_64 and arm64 Flatpak packages. The Freedesktop 25.08 runtime is required:
flatpak install flathub org.freedesktop.Sdk//25.08 org.freedesktop.Platform//25.08
flatpak-builder --user --install --force-clean flatpak-build com.github.bubio.xm8m.ymlThe package grants network and Secret Service access for RetroAchievements, and home-directory access because XM8M uses SDL's file picker for ROM and media files. Place BIOS ROM files in the Flatpak data directory:
~/.var/app/com.github.bubio.xm8m/data/retro_pc_pi/xm8/Place BIOS ROM files in:
~/.local/share/retro_pc_pi/xm8/Builder/Android contains an Android Studio project.
Run setup_sdl2.sh in Builder/Android to download and place the SDL2 files required for building:
Builder/Android/app/jni/SDL/include(header files)Builder/Android/app/jni/SDL/src(source files)Builder/Android/app/src/java/org/libsdl/app(Java source files)
Open Builder/Android in Android Studio and build the project.
Place BIOS ROM files in:
Android/data/retro_pc_pi/files/On Android 11 and later, files on the device cannot be accessed freely. It is recommended to place game disk images in the same location.
| Component | Version | License |
|---|---|---|
| xBRZ | bundled | GPLv3 |
| rcheevos | 12.3.0 | MIT |
| SQLite | 3.53.0 | Public Domain |
| stb_image | 2.30 | MIT OR Public Domain |
rcheevos, SQLite, and stb_image are used in builds with RetroAchievements support. For dependency versions, provenance, and full license text, see ThirdParty/README.md, ThirdParty/THIRD_PARTY_NOTICES.md, and ThirdParty/licenses/.
