• Print



This is my x86 emulator called CAPE: Computer And Processor Emulator.


It is a cross platform (Windows, Mac OS X, Linux and Raspberry PI) emulator for computers based on x86 processors.


It is a cycle based emulator which means, unlike other emulators out there, its core execution unit is a cycle and not an instruction (for the CPU) or a scan line (for the video unit). 



It emulates

  • Classes of PC:
    • IBM PC XT
    • IBM PC XT/286
    • IBM PCJr (experimental)
    • IBM PC AT
  • CPUs: 8086, 8088, 80186, 80188, 80286
  • Chips:
    • i8255: Peripheral control
    • i8237: DMA
    • i8253: Programmable Interrupt Timer
    • i8259: Programmable Interrupt Controller
    • i8042: Peripheral control
    • NEC µPD765 Floppy Disk Controller (used on IBM PC only) 
  • Graphics:
    • MDA (Monochrome Display Adapter)
    • Hercules
    • CGA (Color Graphics Adapter)
    • EGA (Enhanced Graphics Adapter)
    • Multi-adapter and multi-monitor support
  • Sound:
    • PC Speaker
  • Storage:
    • Floppy drives (all sizes) using .img files
    • Hard drives using either .img files or .vhd



Like a real computer CAPE needs a BIOS to run. CAPE can successfully run the original IBM BIOSes as well other BIOSes (like PCXT Turbo).


Modular use

The way it works is, you chose a class of computers (say IBM PC XT), a CPU type, memory size, a BIOS, what floppy disk and HDD you want connected and your graphics card and you power on. You can either hand edit a .config file or use the Java based provided UI.



CAPE emulates the machine at the cycle level such that each cycle is accounted for.


Support for VHD storage format

VHD is a Virtual HardDisk storage file format supported by a large number of VMs out there (like VirtualBox, VMWare, VirtualPC and Hyper-V to name a few). This means you can exchange hard disks with a VM.


Telnet server

The emulator has a telnet server that you can connect to. You can do various tasks like pause, go, inspect registers, inspect memory, get various information. In the future you will be able to single step instructions. Just connect any telnet client (like telnet on MacOSX or Putty in Windows) to port 4000.