Repository navigation
Releases: bthuner/gase
Releases · bthuner/gase
Release list
gase 0.2.0
Quality of life: menus and settings, every platform, ZIP files. Save
states from 0.1.0 still load (the format is unchanged).
Added
- A user interface (
gase-app, new crate, no dependencies): a home
screen with recent games, a built-in file browser (Open ROM…), drag
and drop, an in-game menu (resume, save and load states with picture
previews in ten slots, reset, settings, close), and settings for the
picture, sound, console and controls, saved to a plainkey = value
file (settings.cfg,$GASE_CONFIG_DIRoverrides its folder). Drawn in
software with its own bitmap font, so every platform shows the same
interface. - Controls everywhere: keyboard, any number of gamepads (hot-plugged)
and multi-touch on-screen controls, all mapped to the console pads at
once; 3- or 6-button pads per player; remapping of every key and pad
button for two players. With touch controls on Auto, using a gamepad
hides them. - ZIP ROMs (
gase-zip, new crate):.zipfiles open directly on
every platform, with an own DEFLATE decoder and CRC-32 check (readable
reference plus tested fast path).game.zipsaves togame.srm. - In the browser (
gase-webandweb/): the emulator and interface
compiled to WebAssembly without wasm-bindgen or a bundler; keyboard,
Gamepad API and touch; saves and settings in IndexedDB; an installable,
offline-capable PWA; a one-click download of the 240p Test Suite,
checked by SHA-256. About 169 KB gzipped. - Android and iOS apps (
gase-mobileandmobile/): the desktop's
SDL2 shell on phones, with the system document picker, "Open with",
rotation, and saves written as soon as the app goes to the background.
CI builds an Android APK and an unsigned iOS app; not yet run on a
device. --mobileruns the phone shell in a desktop window;--touchshows
the touch controls;--dump-ui,--ui-screen,--ui-sizeand
--ui-densitysave pictures of any screen without a window.- The making of gase (
docs/index.html): a 19-chapter static site
telling how the emulator was built, with pictures made by the emulator
(scripts/docs-screenshots.sh). TheWebworkflow can publish it on
GitHub Pages with the player underplay/(opt-in: repository variable
DEPLOY_PAGES=true).
Changed
- Esc opens the in-game menu instead of quitting. Close game in
the menu returns to the home screen, which has Quit; closing the
window still quits at once. - Running
gasewithout a ROM opens the home screen instead of exiting
with "no ROM given". - The
gasecrate is now a library (the SDL2 shell shared by desktop and
phones) plus a thin binary. unsafeis still forbidden everywhere except two modules that must
name foreign functions, where it is denied and allowed once each: the
web module's exports/imports (nounsafeblock) and the phone entry
pointSDL_main(two blocks reading the Cargv).
Fixed
- A crash of optimised builds as soon as the window opened:
sdl20.37's
Texture::with_lockwith a rectangle passes SDL a pointer to a dropped
temporary. gase now always locks the whole texture. - In landscape, the touch controls' Start and Mode buttons were drawn
over the game picture; they now sit in the side borders.
Quality
- CI also runs clippy for WebAssembly and the five phone targets, and
smoke-runs the optimised SDL program with dummy drivers
(scripts/smoke-sdl.sh). New workflows build the web version and the
phone apps. - 331 tests in
cargo test --workspace(200 in 0.1.0).
Downloads
| File | For |
|---|---|
*-linux-x86_64.tar.gz |
Linux (x86-64, glibc 2.35+). Run ./gase; SDL2 is built in. |
*-windows-x86_64.zip |
Windows 10/11 (x86-64). Run gase.exe. |
*-macos-universal.tar.gz |
macOS 11+ on Apple silicon and Intel. Not notarised: run xattr -d com.apple.quarantine gase once. |
*-web.zip |
The browser version: serve the folder over HTTP (python3 -m http.server). |
*-android.apk |
Android 5+, signed with a debug key: allow installs from this source. |
*-ios-unsigned.ipa |
iOS: sign it first (e.g. AltStore, Sideloadly, or Xcode). |
SHA256SUMS.txt |
Checksums of the files above. |
The source code is attached by GitHub below. Desktop builds include SDL2 (zlib licence).
gase 0.1.0
The first release: a complete, tested Mega Drive / Genesis emulator.
Emulation
- Motorola 68000 (
gase-m68k): full instruction set with exact cycle
timing, 2-word prefetch queue, microcode-accurate address-error frames,
interrupts, trace, STOP/RESET/TAS, pre-decoded dispatch table and a
Motorola-syntax disassembler. Validated against the MAME-derived
SingleStepTests suite (310,000 vectors) and Tom Harte's suite. - Zilog Z80 (
gase-z80): full documented and undocumented behaviour
(WZ/MEMPTR, Q, X/Y flags), interrupt modes 0/1/2, disassembler. Passes all
1,604,000 SingleStepTests vectors, ZEXDOC and ZEXALL. - VDP (
gase-vdp): planes, window, sprites (limits, masking,
collision), shadow/highlight, interlace mode 2, HV counter, interrupts,
4-entry write FIFO, per-line access slots and time-accurate DMA. - Sound (
gase-sound): YM2612 (log-sin/exp tables, envelope
generator, all algorithms, SSG-EG, LFO, CSM, DAC, ladder effect), SN76489
PSG, polyphase sinc resampler, model-1 low-pass filter, DC blocker. - System (
gase-core): memory maps for both CPUs, master-clock
scheduler, cartridges (header,.smd, battery SRAM, serial EEPROM for
Sega/Acclaim/EA/Codemasters boards, SSF2 mapper), 3- and 6-button pads,
NTSC/PAL regions, save states, rewind. - Optional lenient mode for 68000 address errors (
--no-address-errors)
for buggy homebrew.
Frontend
- SDL2 window: aspect-correct scaling, fullscreen, gamepads, save-state
slots, rewind, fast-forward, pause/frame advance, screenshots, battery-save
autosave, audio-driven pacing with dynamic rate control. - Built-in learner debugger: CPU registers and disassembly, decoded VDP
registers, palettes, tile/plane viewers, sprite list, breakpoints,
stepping, per-channel audio mutes. - Headless runner without any external dependency: benchmarks, PNG
screenshots, WAV recording, instruction traces, VRAM/CRAM dumps,
breakpoints.
Performance
- 1.5–1.9× faster than the first working version with bit-identical
output; about 25× real time on one core. Every fast path keeps a readable
reference implementation and a test proving they match. Measurements and
scripts live inbenchmarks/.
Quality
- Zero external dependencies outside the optional SDL2 frontend,
forbid(unsafe_code), clippy-clean, documented crates
(docs/ARCHITECTURE.md). - CI on every pull request (fmt, clippy, tests, docs, dependency-free
build) and weekly runs of the CPU test vectors and the test-ROM frame-hash
regression suite.
Downloads
| File | For |
|---|---|
*-linux-x86_64.tar.gz |
Linux (x86-64, glibc 2.35+). Run ./gase; SDL2 is built in. |
*-windows-x86_64.zip |
Windows 10/11 (x86-64). Run gase.exe. |
*-macos-universal.tar.gz |
macOS 11+ on Apple silicon and Intel. Not notarised: run xattr -d com.apple.quarantine gase once. |
SHA256SUMS.txt |
Checksums of the files above. |
The source code is attached by GitHub below. Desktop builds include SDL2 (zlib licence).