Code Monkey home page Code Monkey logo

halfix's Introduction

Halfix x86 emulator

Halfix is a portable x86 emulator written in C99. It allows you to run legacy operating systems on modern platforms.

Why?

I made this mostly for fun, and because it was a great way to learn about the x86 PC architecture. On a more practical level, it can be used for:

  • Testing out or developing operating systems
  • Running old programs or operating systems that no longer work on modern computers or you wouldn't want to risk running on your personal computer.
  • Simulating other x86-based systems (the CPU component can be isolated relatively easily and used in other projects)
  • Testing web browser performance

Building and Running

You will need node.js, a C99-compatible compiler, zlib, and Emscripten (only if you're targeting the browser). Make sure that the required libraries are in a place where the compiler can find them. No pre-build configuration is required.

The display driver uses libsdl, but if you're on Windows, there's a native port that uses the Win32 API and doesn't require SDL.

# Debug, native
node makefile.js
# Debug, Emscripten, asm.js
node makefile.js emscripten
# Debug, Emscripten, WebAssembly
node makefile.js emscripten --enable-wasm

# Release, native
node makefile.js release
# Release, Emscripten, asm.js
node makefile.js emscripten release
# Release, Emscripten, WebAssembly
node makefile.js emscripten --enable-wasm release

# Win32 API build (no SDL required)
node makefile.js win32
# Win32 API build, release
node makefile.js win32 release

# For more options and fine tuning
node makefile.js --help

# Chunk an image 
node tools/imgsplit.js os.img

# Run in browser
http-server

Check the project wiki for more details.

System Specifications

Compatibility

It boots a wide range of operating system software, including all versions of DOS, most versions of Windows (excluding Windows 8), newer versions of OS/2 Warp (3 and 4.5), ReactOS, some varieties of Linux (ISO Linux, Damn Small Linux, Red Star OS 2, Buildroot, Ubuntu), 9Front, NeXTSTEP, several hobby OSes, and probably more.

See Compatibility for more details.

Self-Virtualization

Can you run the emulator inside the emulator?

Yes, but not very quickly.

Halfix in Halfix

Screenshots

MS-DOS

DOS

OS/2 Warp 4.5

OS/2 Warp

Windows Vista

Vista

Windows 7

Windows 7

The same Windows 98 disk image as in the Halfix in Halfix screenshot running in Firefox

Win98

CPU-Z on Windows XP

CPU-Z

Windows 10

Win10

Ubuntu

Ubuntu

Transferring Files

Create a directory with all the files you want to transfer and create an ISO image.

mkisofs -o programs.iso -max-iso9660-filenames -iso-level 4 programs/

Now update the configuration file as follows:

# Note: it does not hae to be ata0-slave. 
# I have not tested it with anything but ata0-slave.
[ata0-slave]
inserted=1
type=cd
file=/tmp/programs.iso
driver=sync

Now boot up your operating system and copy the files from the CD-ROM to the hard drive.

Known Issues

  • SSE3 is not fully supported
  • Performance isn't terrible, but it isn't fantastic either (70-100 MIPS native, 10-30 MIPS browser)
  • Timing is completely off
  • Windows 8 doesn't boot (see this issue)
  • FPU exceptions are probably very incorrect
  • Most devices aren't complete, but enough is implemented to boot modern OSes.
  • The configuration file parser isn't very good

License

GNU General Public License version 3

Similar Projects

Credits

The FPU emulator uses an modified version of Berkeley SoftFloat from the Bochs emulator.

halfix's People

Contributors

mthiim avatar nepx avatar pgodwin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.