MartyPC (Source)
Currently, MartyPC can emulate an original IBM 5150 PC, 5160 XT, or a generic XT clone machine.
Device Support
Besides emulating the 8088 CPU, MartyPC emulates the following devices:
- CGA - A dynamic, cycle-or-character clocked implementation of the IBM CGA including the Motorola MC6845 CRTC controller allows MartyPC to run demanding PC demos like 8088MPH and Area5150. MartyPC takes a unique approach to PC video card emulation by simulating the entire display field - including overscan. Composite output and monitor simulation is supported, via reenigne's excellent composite conversion code (also used by DOSBox and 86Box)
- MDA - A character-clocked implementation of the IBM MDA card built on the Motorola MC6845 CRTC controller. An MDA adapter can be installed alongside a CGA or EGA card for multi-monitor operation.
- EGA - A character-clocked implementation of the IBM EGA builds on the techniques used developing the CGA. It is structured to replicate the logical functions of each of the LSI chips on the original hardware. It supports redefinable fonts, vsync interrupts and per-scanline pel-panning for smooth scrolling.
- µPD765 FDC - Currently robust enough to support both DOS and Minix operating systems, although floppy image emulation is limited to raw sector images.
- IBM/Xebec 20MB HDC - Emulated with basic VHD support. MartyPC currently supports a single disk geometry of 20MB.
- 8255 PPI - Low level keyboard emulation is supported via the PPI and keyboard shift register. Supports the 'turbo bit' found in TurboXT clones.
- 8259 PIC - Mostly complete, but still missing advanced features such as priority rotation and nested modes.
- 8253 PIT - Highly accurate, supporting PCM audio.
- 8237 DMAC - Mostly implemented, but DMA transfers are currently "faked". DRAM refresh DMA is simulated using a scheduling system.
- 8250 UART - Supports serial passthrough or mouse emulation. Still a bit incomplete (fails tests in CheckIt)
- Mouse - A standard Microsoft serial mouse can be connected to the COM port of your choice.
- PC Speaker - Although sometimes a little glitchy, it can produce reasonable PCM audio in demos such as 8088MPH, Area5150, and Magic Mushroom.
Configuration Support
MartyPC supports custom machine configurations via base machine configuration profiles plus optional extensions called 'overlays', analagous to installing extension cards or other upgrades.
Debugging Support
MartyPC has an extensive debugging GUI with several useful displays including instruction disassembly, CPU state, memory viewer, and various peripheral states. Code and memory breakpoints are supported. MartyPC also supports instruction and cycle-based logging.
Multi-window support
Run two video cards in separate windows, or the same video card in 'accurate' and 'debug' views - or with different shaders!
Shader support
A basic, configurable CRT shader is included with more to come (LibraShader support is planned)
The first step to building MartyPC is installing Rust on your system. Visit the installation instructions at rust-lang.org and follow the instructions for installing Rust for your platform.
Building on Ubuntu 23
-
Assuming a minimal install:
- Install git
sudo apt install git
- Install curl
sudo apt install curl
- Install build tools
sudo apt build-essential
- Run the command from the install page linked above. As of this writing, it is:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Proceed with defaults to install Rust in your home directory
- Open a new shell to set new environment variables
- Install the following development dependencies with
sudo apt install [packagename]
pkg-config
libasound2-dev
libudev-dev
cd
to an appropriate directory- Clone the martypc repo
git clone https://github.com/dbalsom/martypc.git
cd martypc/install
- Build MartyPC!
cargo run -r
- Install git