/goomiak

A very simple ZX Spectrum 48K emulator

Primary LanguageGoMIT LicenseMIT

GOomiak

A very simple ZX Spectrum 48K emulator


GOomiak (pron. ɡũmʲjak) is a ZX Spectrum 48K emulator written in GO.

Features

  • Pretty good Zilog Z80 chip emulation
    • All undocumented opcodes support (DD CB, FD CB, SLL etc.)
    • Full memptr (also known as WZ shadow register) emulation
    • Full emulation of odd behavior of SCF/CCF flags (also known as Q shadow register)
    • Passes zexall & zexdoc excercisers
    • Passes all tests from z80test
  • Basic level ULA emulation
    • Screen drawing is more-or-less similar to how ULA draws screen and blocks CPU in a process
    • No contended memory support
    • No contended I/O support
    • No sound support
  • TAP (including autoloading) and Z80 files support

Is it any good?

Absolutely not. I wanted to learn GO, and needed some excercise. Also, always wanted to write an emulator. However, I wasn't aware how big of a mess Z80 is. If I knew, I would probably settle with something simpler (NES probably). But hey - had ton of fun writing it, learned a lot and the app is usable. My main goal was to make it run this game and it does it.

If you're looking for a proper Speccy emulator, but somehow ended up here, I highly recommend Fuse or ZEsarUX. Both provide amazing quality of emulation (especially the latter one).

Legal

How to run it?

You need GO installed. Then it's as simple as:

~/goomiak/src$ go run main.go

Testing

Most of the emulator has proper test coverage (especially CPU). To run tests:

~/goomiak/src$ go test ./...

You can also run some pre-made tap files with tests, to see them in action (you need to quit emulator everytime tests program finish, to load next one):

~/goomiak$ make all

There are also many tests, which I found, in the tests directory. If you plan to write your own Z80 emulator, they may provide some help.

License

MIT