An emulator for various m68k and z80 based computers, written in Rust. Currently it has support for the Sega Genesis, TRS-80, and Computie (my own project), with Macintosh support in the works
Go to file
transistor dd0e84fa51 Improved genesis controllers a bit
Some games still broken, but sonic 2 works now
2021-12-05 15:38:11 -08:00
binaries Added test roms for Sega Genesis 2021-12-02 15:05:00 -08:00
docs/posts
frontends Fixed horizontal scroll 2021-12-05 14:26:21 -08:00
src Improved genesis controllers a bit 2021-12-05 15:38:11 -08:00
.gitignore
Cargo.toml
README.md
todo.txt Renamed joystick to controller in host traits 2021-12-02 15:04:41 -08:00

Moa

Started September 26, 2021

Moa is an emulator/simulator for computers using various 68000 and Z80 CPUs and peripherals. The original idea was to emulate the computer I had built as part of the Computie project.

Currently it can simulate Computie (68000) and the TRS-80 Model I (Z80), and I'm working on supporting the Macintosh 512k and Sega Genesis.

For more detail, check out this post about how I started the project: Making a 68000 Emulator in Rust

Running

For Computie, it can do everything the 68k-SMT board can do, including run the monitor program and load the Computie OS kernel and boot it from the CompactFlash card. To run it:

cargo run -p moa-console --bin moa-computie

It will open two PTYs: one for the serial terminal, and one for the SLIP connection. Once open, it will try to launch both pyserial-miniterm as a separate process and connect to the Computie PTY. It will also launch slattach with the associated setup commands to create the SLIP device on the host, and set up host routing. The exact commands in src/machines/computie.rs might need to be adjusted to work on different hosts.

For the TRS-80, it can run Level I or Level II Basic, but it doesn't yet support a cassette tape drive or floppy drive. I haven't tested it that thoroughly either, so any help with it would be welcome. I mostly made it to test the Z80 cpu implementation in a simpler computer before I used in the Genesis emulator. The frontend uses the minifb rust crate to open a window and render the characters to screen, as well as accept input from the keyboard.

cargo run -p moa-minifb --release --bin moa-trs-80 --

By default it will start Level I Basic. To use the other rom, add the option --rom binaries/trs80/level2.rom

The Genesis emulator is a work in progress but can be run with:

cargo run -p moa-minifb --release --bin moa-genesis

By default, the minifb frontend will scale the window by 2. This can be changed with the --scale [1,2,4] option.

The -d or --debugger option will make the emulator start the debugger before running. There is a simple built-in debugger for stepping through the rom instructions being emulated. The state of the CPU registers will be displayed after each instruction, breakpoints can be set, memory contents can be examined, and memory locations can be modified. This has helped a lot with tracking down errors in the emulator itself.