Acorn Proton is a Rust-based BBC Micro emulator.
Acorn Proton is an in-progress emulator focused on accurate BBC Micro Model B behaviour, with recent work concentrated on video timing, display streaming, disc support, and emulator architecture.
Current priorities are:
- hardware-accurate behaviour over title-specific fixes
- a cleaner video pipeline with explicit display-stream boundaries
- macOS as the primary first-class desktop target
Some parts of the wider BBC Micro ecosystem are still incomplete, so this should be read as an actively developed emulator rather than a finished all-features release.
These instructions are for macOS, which is what this repository currently targets most directly.
- Xcode Command Line Tools
- Rust toolchain via
rustup
Install them with:
xcode-select --install
curl https://sh.rustup.rs -sSf | sh
source "$HOME/.cargo/env"Open a new shell after installing Rust if cargo is not yet on your PATH.
From the repository root:
cargo runOn first GUI launch, Proton can download the required ROM assets automatically if they are not already present on the machine. Downloaded managed assets default to ~/Documents/Acorn Proton.
To build Acorn Proton.app:
./make-app.sh
open "Acorn Proton.app"The app bundle script builds a release binary and assembles a macOS .app package that you can also drag into /Applications.
To sign the app with a local Developer ID certificate:
SIGN_APP=1 \
SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)" \
./make-app.shTo build a versioned macOS release artifact:
./make-dmg.shThis creates a compressed .dmg in dist/ containing Acorn Proton.app and an Applications shortcut, suitable for attaching to a GitHub release.
To sign and notarize the DMG without storing secrets in the repository:
- Store notarization credentials once in your macOS keychain:
xcrun notarytool store-credentials "YOUR_NOTARY_PROFILE" \
--apple-id "your-apple-id@example.com" \
--team-id "TEAMID"- Build, sign, and notarize:
SIGN_APP=1 \
SIGN_DMG=1 \
NOTARIZE_DMG=1 \
SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)" \
NOTARY_PROFILE="YOUR_NOTARY_PROFILE" \
./make-dmg.shThis keeps the signing identity in your keychain and uses a named notary profile instead of embedding credentials in scripts.
Run these from the repository root:
cargo check
cargo test
cargo fmt
cargo clippy -- -D warningsSome tests require local ROM, tape, or disc fixtures and will fail if those assets are not available in the expected locations.
Proton does not ship copyrighted ROMs.
- Required ROMs can be downloaded on first launch.
- Managed downloads are stored under
~/Documents/Acorn Proton. - Repository-local fallback assets are supported during development when present.
src/: emulator source codepackaging/: macOS app bundle resourcessrc/assets/: app images and sound assets
Within src/, the main areas are:
src/hardware/: CPU, video, VIA, disc, tape, sound, keyboard, and display pipeline codesrc/machine/: machine integration and higher-level BBC Model B behavioursrc/app/: startup, config, UI, assets, and platform-specific runtime code
- Startup depends on ROM assets being available locally or downloadable at first launch.
make-app.shrequirescargoto be available on yourPATH.- The repository intentionally avoids bundling ROMs, disc images, and tape fixtures.
Proton is developed independently, but it benefits from the wider BBC Micro preservation and emulator community.
- Emulator projects that were useful points of comparison while investigating behaviour and hardware timing include B-em, jsbeeb, BeebEm, and b2.
- The BBC Micro documentation ecosystem has been invaluable, especially The Advanced User Guide for the BBC Micro by Andrew Bray, Adrian Dickens, and Mark Holmes.
- Hardware-oriented reference material from the BeebFPGA project and related BBC Micro hardware writeups has also been helpful when checking implementation details.
- More broadly, thanks are due to the authors, maintainers, archivists, and reverse-engineers who have kept BBC Micro software, ROMs, manuals, and hardware knowledge accessible.