MartyPC: PC emulation done right

I would like to give a heads-up about the new PC emulator on the block. It is called “MartyPC”, which indeed is a reference to Marty McFly from the Back To The Future movies. And indeed, that is a tribute to our 8088 MPH PC demo, which had various references to these movies.

And yes, that means that this PC emulator intends to be cycle-exact, in order to run 8088 MPH. So here is a video demonstrating it running Area 5150:

Because, long story short: The emulator started development before Area 5150 was released, but as it turns out, Area 5150 was easier to render correctly, as it doesn’t require emulation of the NTSC composite video signal. But 8088 MPH does run in the emulator as well, as developer GloriousCow assures us. He just wants to put a bit more work into the video signal to get more accurate colours, before releasing a video capture of that demo.

Speaking of video, note that MartyPC correctly renders the ENTIRE display area, including overscan, which means we get proper borders and overscanned effects, as used in Area 5150.

So wait, didn’t we already have an emulator that runs 8088 MPH? No, I said we had an emulator that *doesn’t break* when running 8088 MPH. It was close, but it was not cycle-exact, so it didn’t look exactly the same as on real hardware. It would speed up or slow down in various parts.

Not this emulator. MartyPC really *is* cycle-exact. And it is open source, available on Github. And as you can see, it is written in Rust. A somewhat unusual choice for emulators, as they are mostly written in C or C++. But Rust is an interesting and very new and modern language, and it is very suitable for this sort of low-level work.

What’s also cool is that GloriousCow is documenting his work on his blog. He has only just started blogging, so at the time of writing there are only two technical articles (one on DMA, and one on CGA waitstates). But they are very detailed, and very readable as well, with diagrams, oscilloscope signal views and whatnot, so this looks very promising indeed!

All in all, this is finally a PC emulator that TRULY tries to do exactly what the hardware does. Which has been a pet peeve of mine for years, given that emulators for most other platforms have been designed this way.

This entry was posted in Oldskool/retro programming, Software development, Software news and tagged , , , , , , , , , , , , , , , . Bookmark the permalink.

2 Responses to MartyPC: PC emulation done right

  1. Pingback: [Ordi.] MartyPC v0.1.1 - Emu-France

  2. OEM says:

    Hello!

    Installing on Linux Mint (K:6.5.0/FW:22.04), at the last command I have lost. Could anybody tell, what does this error mean? I have installed Rust 1.77.2, but “cargo run -r” command fails. What should I do? Any help? Thank you very much!

    $:~/.local/share/martypc/install$ cargo run -r
    Updating crates.io index
    Updating git repository https://github.com/dbalsom/egui_martypc.git
    error: failed to get egui as a dependency of package marty_egui v0.2.1 (/home/oem/.local/share/martypc/lib/frontend/marty_egui)

    Caused by:
    failed to load source for dependency egui

    Caused by:
    Unable to update https://github.com/dbalsom/egui_martypc.git?branch=0_24_2_winit_0_29_15#dd87e164

    Caused by:
    failed to fetch into: /home/oem/.cargo/git/db/egui_martypc-5b4ec09f77c3e414

    Caused by:
    network failure seems to have happened
    if a proxy or similar is necessary net.git-fetch-with-cli may help here
    https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli

    Caused by:
    SSL error: unknown error; class=Ssl (16)
    $:~/.local/share/martypc/install$

Leave a comment