mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 21:43:23 -05:00
187 lines
11 KiB
YAML
187 lines
11 KiB
YAML
emulator: SUPER3
|
|
type: standalone
|
|
core_classification: community_fork
|
|
source: "https://github.com/izzy2lost/Super3"
|
|
upstream: "https://github.com/trzy/Supermodel"
|
|
based_on: "Supermodel 0.3a through the arm branch of DirtBagXon/model3emu-code-sinden at fa1e305"
|
|
author: "izzy2lost"
|
|
profiled_date: "2026-08-12"
|
|
source_commit: "b435c80a88fd496d4a9858be0681260e84342c85"
|
|
core_version: "1.2.1"
|
|
display_name: "Sega - Model 3 (SUPER3)"
|
|
verification: existence
|
|
cores:
|
|
- super3
|
|
- SUPER3
|
|
- com.izzy2lost.super3
|
|
systems:
|
|
- sega-model3
|
|
mode: standalone
|
|
|
|
notes: |
|
|
Sega Model 3 emulator for Android, package com.izzy2lost.super3, versionName 1.2.1
|
|
versionCode 22, arm64-v8a alone, minSdk 26 and targetSdk 36, GPL-3.0 with the tree in
|
|
the open. A Kotlin front end carries the launcher, setup wizard, ini editor and save
|
|
state browser over the Supermodel core, built through CMake against SDL2 with an
|
|
OpenGL ES presenter of its own. The core states its own lineage: SUPERMODEL_VERSION
|
|
reads "0.3a-fa1e305-arm-mm DirtBagXon (Sinden)", and the app names both sources it
|
|
draws on, so the emulator is Supermodel 0.3a as carried by the arm branch of
|
|
DirtBagXon/model3emu-code-sinden at fa1e305, "Add ManyMouse License" of 2025-07-28.
|
|
No upstream commit is pinned because neither this repo nor that fork shares git
|
|
history with trzy/Supermodel: both report themselves as independent repositories and
|
|
a comparison against trzy/Supermodel has no merge base. ES-DE reaches the app through
|
|
its SUPER3 find rule, on Android alone among the seven find rule sets, starting
|
|
MainActivity with an intent VIEW whose data is the storage framework URI of the game.
|
|
ref: android/app/build.gradle.kts:22-36, Src/Version.h:32, README.md:3-4,
|
|
android/app/src/main/java/com/izzy2lost/super3/MainActivity.kt:453-463,
|
|
es-de resources/systems/android/es_find_rules.xml:552-557,
|
|
es-de resources/systems/android/es_systems.xml:1091
|
|
|
|
The Android build compiles a subset of the tree, which decides where a load path can
|
|
be read. The CMake source list globs Src/ and then drops all of Src/OSD/ and all of
|
|
Src/Graphics/ twice over, by regex and again by an explicit removal loop, adding back
|
|
only a named list of Src/Graphics/New3D files. So the desktop SDL frontend is absent
|
|
from this binary: Src/OSD/SDL/Main.cpp holds the command line and its own config file
|
|
handling, Src/OSD/SDL/SDLInputSystem.cpp its own controller database call, and
|
|
Src/Graphics/Shader.cpp the loader for external GLSL files, and none of the three is
|
|
built here. The paths below are the ones this build actually runs.
|
|
ref: android/app/src/main/cpp/CMakeLists.txt:32-91, 135-158
|
|
|
|
One directory holds everything the emulator reads. MainActivity hands the native side
|
|
a user data root of getExternalFilesDir(null)/super3, so
|
|
/storage/emulated/0/Android/data/com.izzy2lost.super3/files/super3, and
|
|
SetUserDataRoot creates it and changes into it, which is what makes the relative names
|
|
below resolve. AssetInstaller copies five trees out of the package assets into that
|
|
root before every launch, Assets, Config, GraphicsAnalysis, NVRAM and Saves, never
|
|
overwriting a file that is already there, so the emulator always finds its own
|
|
configuration whatever the user has done. The native entry point also probes
|
|
<root>/super3/Games.xml over external storage, internal storage, /storage/emulated/0
|
|
and /sdcard when no path is passed, but the front end always passes one, along with
|
|
the ROM path, the game name and the user data root as its four arguments.
|
|
ref: android/app/src/main/java/com/izzy2lost/super3/MainActivity.kt:501-503,
|
|
1155-1161, 1209-1222,
|
|
android/app/src/main/java/com/izzy2lost/super3/AssetInstaller.kt:7-18,
|
|
android/app/src/main/cpp/native-lib.cpp:247-260, 1080-1117,
|
|
android/app/src/main/java/com/izzy2lost/super3/Super3Activity.kt:99-111
|
|
|
|
Model 3 boards carry no shared system BIOS and this emulator loads none. Every byte
|
|
the machine needs comes out of the per-game MAME format zip: the program ROMs, the
|
|
video ROMs, the sound program and samples, and where the board has them the drive
|
|
board program, the MPEG program and the MPEG music, all declared as regions of one
|
|
game in Games.xml. The set is identified by the basename of the zip, not by a scan,
|
|
and the ErrorLog asks for an appropriately named archive when no game answers to that
|
|
name; the individual members are then matched by name or by crc32. A child set names a
|
|
parent and the loader opens <same directory>/<parent>.zip for the rest of its regions,
|
|
which the front end prepares for by walking the parent chain and staging every zip it
|
|
names into romcache, refusing to start and naming what is missing when one cannot be
|
|
found. This Games.xml declares 63 games with 41 of those lines naming a parent, every
|
|
named parent itself a game, and not one non-game or BIOS set among them.
|
|
ref: Src/GameLoader.cpp:873-928, 882-890, 913-921, 148-153,
|
|
Src/Model3/Model3.cpp:2919-2933,
|
|
android/app/src/main/java/com/izzy2lost/super3/MainActivity.kt:1163-1208,
|
|
Config/Games.xml
|
|
|
|
Three files ship inside the package and are read from Config/ at runtime. Games.xml is
|
|
the one the emulator cannot do without: InitLoader tests for it and returns failure
|
|
when it is absent, which leaves the loading thread in its failed state and no game
|
|
running. Supermodel.ini and gamecontrollerdb.txt are both skipped when they are
|
|
missing, on built-in defaults in the first case and SDL's built-in controller mappings
|
|
in the second. Nothing about any of the three is verified: no length is compared and
|
|
no hash is computed, the only tests being that the file is there and that it parses.
|
|
ref: android/app/src/main/cpp/native-lib.cpp:531-538, 568-580, 1123-1135,
|
|
android/app/src/main/cpp/android_input_system.cpp:291-311,
|
|
Src/Util/ConfigBuilders.cpp:60-73, 134-142
|
|
|
|
Two files that AssetInstaller lands are read by nothing in this build.
|
|
Config/Music.xml declares substitute MPEG tracks for DSB1 and DSB2 games, and neither
|
|
its own name nor the attributes it is written in appear anywhere in the tree, nor any
|
|
handling of mp2 or mp3 files: the DSB reads its music from the mpeg_music region of
|
|
the game zip and from nowhere else. Assets/p1crosshair.bmp and Assets/p2crosshair.bmp
|
|
are documented by the inherited Manual for a crosshair-style option that does not
|
|
exist here, and the tree holds no bitmap reader at all, Src/Util/BMPFile.h being a
|
|
writer; the Crosshairs setting is a two bit mask and the presenter draws the crosshair
|
|
as geometry. A build that wires either feature up would turn these into files to
|
|
collect.
|
|
ref: android/app/src/main/assets/Config/Music.xml, Manual.txt:99-102,
|
|
Src/Model3/Model3.cpp:2932, Src/Util/BMPFile.h:391,
|
|
android/app/src/main/cpp/native-lib.cpp:763-772, 909-976,
|
|
android/app/src/main/cpp/gles_presenter.cpp:364-369
|
|
|
|
The rest of the tree is written, not read. NVRAM/<game>.nv is created on exit and read
|
|
back on the next launch of the same game, Saves/ holds the ten save state slots and
|
|
their screenshots, romcache/ holds the staged copies of the user's own archives, and
|
|
Flyers/ is filled on request from the GitHub contents API of izzy2lost/Model3flyers
|
|
for the artwork in the launcher list. An optional sync copies NVRAM, Saves, Config and
|
|
Flyers between the internal root and a folder the user picks in the system picker.
|
|
ref: android/app/src/main/cpp/native-lib.cpp:262-313, 793-797,
|
|
android/app/src/main/java/com/izzy2lost/super3/FlyerRepoSync.kt:16-46,
|
|
android/app/src/main/java/com/izzy2lost/super3/UserDataSync.kt:10-25
|
|
|
|
files:
|
|
- name: Games.xml
|
|
path: "Config/Games.xml"
|
|
required: true
|
|
bundled: true
|
|
size: 154928
|
|
md5: fc26e2deaa532794d91fe33ca73f8e2c
|
|
sha1: b41150f8cff409dde89939b80a980a20e853df0b
|
|
crc32: "b2ea6948"
|
|
description: "Game and ROM set definitions"
|
|
note: >-
|
|
The ROM set database, 63 games, giving for each one the regions to fill and the
|
|
name and crc32 of every file that fills them, the stepping, the PCI bridge, the
|
|
encryption key, the drive board, net board and MPEG board the machine carries, the
|
|
patches to apply and the parent set to fall back on. Handed to the GameLoader
|
|
constructor, parsed as XML, and a game load is refused outright when the file is
|
|
not there. The Kotlin launcher parses the same copy out of the assets for its game
|
|
list and its per-game input hints. Byte identical to the copy in the repository
|
|
root Config directory.
|
|
source_ref: "android/app/src/main/cpp/native-lib.cpp:568-580, 1096-1114, Src/GameLoader.cpp:492-502, 930-933, Src/Util/ConfigBuilders.cpp:60-73, android/app/src/main/java/com/izzy2lost/super3/GameXml.kt:23-24, android/app/src/main/java/com/izzy2lost/super3/MainActivity.kt:1211"
|
|
|
|
- name: Supermodel.ini
|
|
path: "Config/Supermodel.ini"
|
|
required: false
|
|
bundled: true
|
|
size: 6887
|
|
md5: a468e45e005caa89356bd67b70e0d37d
|
|
sha1: 6c38cc6fba14863bfbdc730e53d3274fd79a4544
|
|
crc32: "2d012d14"
|
|
description: "Input and per-game settings"
|
|
note: >-
|
|
Read after the built-in defaults have been applied, the Global section first and
|
|
then the section named after the loaded game, each merged over what is already
|
|
set; a file that is absent or unparseable leaves the defaults standing. The hashes
|
|
are those of the copy in the package assets, which is not the 13290 byte copy in
|
|
the repository root Config directory: the Android build ships its own. They
|
|
describe the file as shipped, since AssetInstaller rewrites it on first run,
|
|
substituting the Android control defaults, and the in-app editor writes per-game
|
|
keys such as LegacyReal3DTiming afterwards.
|
|
source_ref: "android/app/src/main/cpp/native-lib.cpp:531-566, 620-621, Src/Util/ConfigBuilders.cpp:134-142, android/app/src/main/java/com/izzy2lost/super3/AssetInstaller.kt:17, 43-159, android/app/src/main/java/com/izzy2lost/super3/Super3Activity.kt:880-884"
|
|
|
|
- name: gamecontrollerdb.txt
|
|
path: "Config/gamecontrollerdb.txt"
|
|
required: false
|
|
bundled: true
|
|
size: 587398
|
|
md5: e8da2d033e90d6fefa884ee78690b4e0
|
|
sha1: cb6be8206308470ecaa8b9cc882d82abe0ef3562
|
|
crc32: "94468d79"
|
|
description: "SDL controller mapping database"
|
|
note: >-
|
|
Opened once, on the first pad the input system sees, and handed to SDL as mappings
|
|
to add. The name is fixed unless the ini key SDLGameControllerDB carries a path of
|
|
its own, and a handle that cannot be opened is passed over, leaving SDL on its
|
|
built-in mappings. Byte identical to the copy in the repository root Config
|
|
directory.
|
|
source_ref: "android/app/src/main/cpp/android_input_system.cpp:291-311, 207-213"
|
|
|
|
exclusion_note: >
|
|
No BIOS or firmware file is loaded. Sega Model 3 hardware has no shared system ROM:
|
|
each board carries its own program, video, sound and where fitted drive board, MPEG
|
|
program and MPEG music ROMs, and every one of them reaches the emulator as a region of
|
|
a per-game MAME format zip declared in Games.xml, a child set drawing its remaining
|
|
regions from its parent's zip in the same directory. The three files listed above are
|
|
the emulator's own configuration, reinstalled from the package assets before every
|
|
launch. Config/Music.xml and the two crosshair bitmaps in Assets are shipped by the
|
|
package as well and read by no code in this build.
|