A Game Boy Emulator for iOS / iPadOS / macOS written in Swift.
With controller supports and palette customization!
Status Games that don't need MBC supports or advance CPU tricks work, e.g Tetris, Tennis...
Work in progress (still under active development) MBC and Audio (playing but innacurate) (ETA: when its done!). For now limited to GB, GBC support planned.
This repo holds the front-end logic of the emulator for back-end logic (emulation code), see GBKit.
This projects aims at being compatible with the following platforms:
- iOS (14+)
- iPadOS (14+)
- macCatalyst (14+)
- Swift Playgrounds (both macOS and iPadOS (WIP @see roadmap))
Open either ./src/app/GameBoyEmulator/GameBoyEmulator.xcodeproj
or ./src/app/GameBoyEmulator.swiftpm
with xcode
on macOS.
n.b Swift Playgrounds is also supported on macOS but debugging remains impossible as long as performance which are tied to debug xcscheme.
This project/repo is (for now) organiseed as follow:
- A core package package (as a submodule with its own repo)
GBKit
in./packages/GBKit
(where the magic happens) - A SwiftUI package
GBUIKit
in./packages/GBUIKit
(SwiftUI frontend) - The emulator app in
./src/app
(the macOS/iOS/iPadOS app itself)
-
Finalize GBKit (
./packages/GBKit
) (MBC, APU (needs to pass audio test to improve overhall audio feeling)) -
Finalize GBUIKit (
./packages/GBKit
) (Keyboard support for macCatalyst,...)
3. Release GBKit ( -> see GBKit./packages/GBKit
) as a standalone Swift Package (with its own git) read to use in any Swift emulator project.
-
Release GBUIKit (
./packages/GBUIKit
) as a standalone Swift Package (with its own git) read to use in any Swift emulator project. -
Add support for GBC
-
Restore supports for Swift Playgrounds implies to reference GBKit and GBUIKit as dependencies.
iOS (game view / DMG palette) | iOS (game view / MGB palette) | iOS (game view / custom palette) | iOS (game view / landscape fullscreen) | iOS (settings view) | iPadOS | macOS |
---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Game Boy and Nintendo are used under nominative use. As for logo's bytes inclusion please read Sega v. Accolade.