Skip to content


Subversion checkout URL

You can clone with
Download ZIP
A just-in-time compiler for MIT 6.004's "Beta" processor.
C++ C Assembly Perl Shell Makefile Python
Branch: master
Failed to load latest commit information.
tests Add a test case for faulting on LDR.
uasm uasm: Align size of ROM to 4-byte boundary
.gitignore Makefile: Add implicit header and make-variable dependencies.
.travis.yml 32-bit libstdc++
Makefile Merge branch 'darwin'
README Update source link.
SConstruct Default to -O2, since I'm now thinking about performance
TODO Remove two TODO items.
arch.h Darwin i386 fixes
bclock.cpp Convert beta_cpu into a C++ class.
bclock.h Implement timer interrupts. Currently only supported from emulated code.
bconsole.cpp Merge branch 'master' into cpp
bconsole.h Compile with -Wall and fix all the warnings it reports.
bcpu.cpp Convert beta_cpu into a C++ class.
bdecode.cpp Convert codebase to be legal C++
bdecode.h OS X support for amd64.
bemu.h ASSERT(): abort() on failure to assist debugging.
bt.cpp Remaining 32-bit Darwin fixes.
bt.h OS X support for amd64.
bt_helper_32.S Remaining 32-bit Darwin fixes.
bt_helper_64.S OS X support for amd64. Rip out old codegen macros. Add a test case for faulting on LDR.
x86.h Switch around the order of arguments to create a SIB reference.


This code implements a working Just-In-Time binary translator from the
Beta [1] processor to the i386. It supports clock and keyboard
interrupts, and correctly executes lab6.uasm, bench[1-4].uasm, and
litmus.uasm, as well as Lab 8's operating system [2].

This source is canonically available from github at

It should work on just about any modern Linux or Intel OS X system,
although it's better tested on Linux. I've tested it on Athena and it
works fine there.

To run the self-tests, `make test'; To run the lab8 OS, `make

It alsos includes a somewhat hacked version of `uasm' from, modified to deal with
relative includes slightly better, and to support arbitrary-sized

Something went wrong with that request. Please try again.