EmuCoreH is a Sega game library, launcher, and emulator frontend for Android. Its Compose interface includes Flycast for Dreamcast and arcade systems, jgenesis for Mega Drive / Genesis, Sega CD, Sega 32X, Master System, Game Gear, and SG-1000, and Supermodel through the Super3 Android port for Sega Model 3. All three cores are built with the app; no separate core download is required.
Website: emucoreh.web.app
Google Play: EmuCoreH on Google Play
The project is under active development. Use your own legally obtained games. Flycast emulates the Dreamcast without a BIOS file when no BIOS dump is installed.
- Three bundled emulation cores for ARM64 Android devices
- Flycast Vulkan, OpenGL ES, and software rendering; jgenesis software video presented through OpenGL ES; Model 3 OpenGL ES 3 rendering
- Platform-aware game library, catalog, cover art, search, filters, and per-game settings
- Home hub with shelves, recently played titles, and quick resume
- In-game overlay with rendering, speed, and save state controls, opened with the Back gesture
- System-specific touch controls and independent Sega gamepad profiles, including six-button Mega Drive controls
- Shared touch layout editor with platform-specific buttons, independent system layouts, and per-game overrides
- Save states with core/platform validation, Sega battery saves, Model 3 NVRAM, and Dreamcast VMU management
- Local and optional Drive backups, including Sega battery saves and Model 3 NVRAM
- Flycast cheats, texture replacements, and RetroAchievements for compatible games
- Sega Game Genie / Action Replay cheats with platform- and revision-specific catalog packs
- Unsupported options are hidden for Sega games; optional Discord integration
- Localized interface in 18 languages for phones, tablets, and Android TV
This repository contains the Android application, Kotlin UI, C++ JNI frontend, vendored Flycast, jgenesis, and Supermodel / Super3 sources, and their Android build modules. Games, user save data, account credentials, Dreamcast BIOS dumps, and Sega CD / 32X BIOS dumps are not included. 32X startup firmware is not distributed; see the Android integration notes.
- Kotlin + Jetpack Compose
- Android DataStore and Room
- JNI bridge to native C++ built with CMake and the Android NDK
- Independently loaded Flycast, Rust jgenesis, and Supermodel libretro libraries, driven by the app's frontend
- Vulkan and OpenGL ES rendering paths with a shader chain runtime
- RetroAchievements integration through rcheevos
- Optional Discord Social SDK integration
EmuCoreH is available on Google Play. The current source tree uses:
minSdk 26(Android 8.0)targetSdk 37- package id
com.sbro.emucoreh - source version
0.1.1(version code31) - ARM64 devices only
- Android Studio with Android SDK and NDK configured
- JDK 17
- Android SDK 37 and Android NDK
29.0.14206865 - CMake
3.30.5 - Rust
1.98.1and theaarch64-linux-androidtarget - On Windows, the Rust GNU toolchain and MSYS2 UCRT64 GCC (default path
C:/msys64/ucrt64/bin) - Your own local Firebase configuration when building with the Google Services plugin
On Windows:
rustup toolchain install 1.98.1-x86_64-pc-windows-gnu
rustup target add aarch64-linux-android --toolchain 1.98.1-x86_64-pc-windows-gnuOn Linux or macOS, install toolchain 1.98.1 and add aarch64-linux-android to it. Gradle builds the Rust core automatically. Override jgenesis.hostToolsDir or jgenesis.rustToolchain as Gradle properties when your toolchain is installed elsewhere.
.\gradlew :app:assembleDebug.\gradlew :app:assembleReleaseInstall app/build/outputs/apk/debug/app-debug.apk on an ARM64 Android device.
Discord support is built when a compatible Discord Social SDK directory is supplied through emucorex.discord.sdkDir in local.properties, a Gradle property with the same name, or DISCORD_SDK_DIR. The directory must contain include/discordpp.h, arm64-v8a/libdiscord_partner_sdk.so, and discord_partner_sdk.aar. The SDK is not included in this repository.
app/Android application, Kotlin UI, and JNI frontend sourcesapp/src/main/cppNative bridge and core integrationapp/src/main/resAndroid resources and translationscore/Vendored Flycast sourcescore-android/Gradle module that builds Flycast for Androidcore-jgenesis/Vendored jgenesis sources and the libretro wrappercore-jgenesis-android/Gradle module that builds and packages jgenesiscore-supermodel/Vendored Supermodel / Super3 sources and the Android libretro adaptercore-supermodel-android/Gradle module that builds and packages Model 3 supportapp/src/main/assets/catalog/Bundled platform-aware game catalog and cover indexestools/Local release, catalog, and cover tooling (not part of the app build)
| System | Core | Content |
|---|---|---|
| Dreamcast | Flycast | GDI, CHD, CDI, CUE/BIN, ISO, M3U |
| Naomi, Naomi 2, Atomiswave, System SP | Flycast | Compatible ROM sets: ZIP, 7Z, DAT, LST, supported raw dumps |
| Sega Model 3 | Supermodel / Super3 | Recognized ZIP ROM sets matching the bundled Games.xml definitions; required parent ZIPs for clone sets |
| Mega Drive / Genesis | jgenesis | MD, GEN, SMD, recognized BIN cartridges, single-ROM ZIP |
| Sega 32X | jgenesis | 32X, recognized BIN cartridges, single-ROM ZIP |
| Sega CD | jgenesis | CHD, CUE with every referenced track; M3U playlists |
| Master System | jgenesis | SMS, recognized BIN cartridges, single-ROM ZIP |
| Game Gear | jgenesis | GG, recognized BIN cartridges, single-ROM ZIP |
| SG-1000 | jgenesis | SG, single-ROM ZIP |
Unknown disc/archive formats retain the existing Flycast route. CUE track files are grouped with their disc instead of appearing as separate games. Sega CD 32X combined hardware is not advertised as a separate supported system.
Keep each ROM set as its original ZIP with its recognized set filename, such as srally2.zip. Keep clone sets and their required parent ZIPs in the same selected game folder; do not extract or rename them. The app prepares only the selected set and its required parent chain when Android folder access requires a private copy. The bundled Games.xml supplies set metadata; games and firmware are not bundled.
Model 3 renders at native 496×384 with a 4:3 display aspect ratio through OpenGL ES 3. Save states and per-game NVRAM are supported, including NVRAM in local and optional Drive backups. Network cabinets, force feedback, cheats, and RetroAchievements are not currently supported for Model 3.
On an Anbernic RG556, Sega Rally 2, Daytona USA 2, and The Lost World have been checked with owner-supplied sets for rendered game scenes, nonzero audio, exact save-state restoration and subsequent 12-frame state/audio replay. Daytona USA 2 requires its original cabinet setting TEST → GAME ASSIGNMENTS → LINK ID → SINGLE when playing without linked cabinets. Invalid sets and graphics initialization failures have separate recovery checks. These checks cover three sets; the full catalog is not verified, and full-speed performance on the RG556 is not established.
Dreamcast can boot through Flycast HLE without an installed BIOS. Arcade ROM sets may require their matching firmware.
All BIOS files are imported through one BIOS Folder card in onboarding or Settings → Library. Select any folder containing your files; every valid BIOS in that folder is installed together. Tap the card again to add BIOS files from another folder, and remove folders from the list without touching the installed copies. The app keeps multiple BIOS source folders for users whose dumps are split across different locations.
Sega CD dumps with descriptive filenames are recognized by their console boot header and region, including word-swapped dumps. Previously selected folders are migrated in the background once; normal startup shows the cached library without waiting for recursive BIOS scans. Sega CD discs are identified through the authorized SAF descriptor on devices that block direct filesystem access.
- Dreamcast:
dc_boot.bin(2 MiB) ordc_bios.bin, plusdc_flash.bin(128 KiB) - Arcade:
naomi.zip,naomi2.zip,awbios.zip, and other supported MAME BIOS sets - Sega CD:
bios_CD_U.bin,bios_CD_E.bin, orbios_CD_J.bin(128 KiB, regional aliases accepted) - Sega 32X:
32X_G_BIOS.bin(256 bytes),32X_M_BIOS.bin(2048 bytes), and32X_S_BIOS.bin(1024 bytes)
Sega CD and 32X firmware is validated before installation; 32X files must match their exact role size and CRC32. Missing or invalid firmware produces an actionable BIOS message and returns to the library instead of leaving the game on a black screen.
Mega Drive / Genesis, Sega CD, and 32X use A/B/C, X/Y/Z, Start, and Mode. Master System and Game Gear use two action buttons; Master System has Pause and Game Gear has Start. SG-1000 uses two action buttons without a Start/Pause button.
Model 3 uses Select/Coin, Start, L3/Service, R3/Test, and game-specific action buttons. Driving games use left-stick X or the D-pad to steer, R2 to accelerate, L2 to brake, and R1/L1 to shift up/down. Gun games have a left-stick aiming and action-button trigger/reload fallback; twin-stick games use both sticks. Controls can be remapped for the selected game.
Each Sega system has independent default touch and gamepad profiles. The shared controls editor supports the selected platform's buttons and saves global system layouts separately from per-game overrides. Global system options, per-game settings, and the in-game menu expose the options supported by the selected system. Sega saves and core settings are isolated from Flycast data. Game Gear defaults to its original screen proportions in Auto aspect mode.
- Game images, user save data, account credentials, and user-supplied Dreamcast, Sega CD, and 32X BIOS dumps are not distributed with this project.
- Compatibility, performance, and graphics behavior vary by game, device, renderer, and driver stack.
The root LICENSE contains Flycast's upstream GPL-2.0 text. Flycast and its dependencies retain their notices in core/. jgenesis is separately licensed under GPL-3.0; its pinned revision, local changes, build instructions, and distribution notes are recorded in UPSTREAM.txt and README-ANDROID.md. The Android package includes the jgenesis license and source notices.
Supermodel / Super3 is separately licensed under GPL-3.0. The Android port is pinned to Super3 commit c410f82; source provenance and local changes are recorded in UPSTREAM.txt, with integration details in README-ANDROID.md. Its third-party notices, component licenses, and source notices are preserved, and the Android package includes the license and provenance files. No game or BIOS rights are granted by the emulator license.
Thanks to the Flycast, jgenesis, Supermodel, and Super3 contributors, the RetroAchievements team for rcheevos, and IGDB for game metadata.
EmuCoreH is independent of Sega, Flycast, jgenesis, Supermodel, Super3, IGDB, Discord, and RetroAchievements. System names and game artwork belong to their respective owners.
If you want to support ongoing development:
- Patreon: https://www.patreon.com/c/emucore/membership
- Discord: https://discord.com/invite/c5EBeNRpz2
- More apps by the author: Google Play developer page