Skip to content

Latest commit

 

History

History
43 lines (30 loc) · 2.82 KB

README.md

File metadata and controls

43 lines (30 loc) · 2.82 KB

gears

Rust

In-progress Game Gear emulator written in Rust.

It has a mostly complete Z80 emulator, that passes z80test (1.0 only), zexall, and FUSE tests.

Current status

  • supports the game gear/master system SEGA rom banking
  • minimal CPU interrupt support (mode 1)
  • a VDP implementation, able to display some games
  • Small "UI" relying on winit+pixels+cpal+gilrs crates that supports input with keyboard and gamepad (both hardcoded bindings)
  • A test suite for the VDP with some ROM frames to prevent regressions
  • WASM target for in-browser emulation.

TODO

  • Finish VDP details
    • still missing horizontal interrupt testing (H counter, line completion)
  • Polish the PSG (sound)
    • there is no filtering or downsampling strategy. A low-pass filter should do.
  • WASM is incomplete: lacks a complete UI (e.g configurable keybindings), just like the desktop version.
  • Support more game gear games. Many work, but there might be bugs.
  • It's fast enough but there is a margin for improvement.
  • Master system support at some point because some game gear cartridges actually shipped the SMS version. It will also be useful to enjoy the wider screen in some infamously hard games on Game Gear (Sonic 2 for example).

Demo

The web version of the gears emulator is available online here. It should always be the latest version.

Learned lessons

Over the course of writing this emulator, I took a pause to reflect on some intricacies of the Z80, and gave a talk on Z80's "last secrets" at FOSDEM 2022. It's not exhaustive, and there are many more such secrets that have been discovered in the past 10 years by the Z80 emulation community.

I also gave two talks at FOSEDM 2024, one about WASM on the web with Rust, using gears as an example. And another about my advice on how to start to write an emulator.

I also wrote the following updates: