This is an assembler and emulator for the UNIVAC 1219 computer at the InfoAge museum in Wall, NJ.
These rust-based tools were inspired by the emulator and assembler originally written by Duane B. Craps. The goals of this project are improved speed, more accurate emulation, and a simplified coding experience.
The C toolchain and C programs can be found here.
For more information about the computer and details about programming it, please refer to the scanned manuals on bitsavers.
For more information on this project, see the video here
The emulator is configured by default to use the provided memory image and initially jump into the tape bootloader. Tape images can be provided, either directly in the .76 "bioctal" format.
cargo run --release --bin emulator -- --tape-file examples/CTEST3.76
Or by pointing to a source file in UNIVAC assembly, in which case a tape image will be generated by the assembler, and then provided to the emulator.
cargo run --release --bin emulator -- --source-file examples/PI.TXT --stop 0
Some programs are already present in the provided memory image and do not require a tape image to be loaded. Instead, the emulator can be pointed to their start address (written in octal) on startup.
cargo run --release --bin emulator -- --start-address 001000
Some notable memory addresses are:
540The tape bootloader1000A "Hello World" program2000A program which reads stdin and puts the most recent character into theALregister70000A memory monitor (also buildable fromCTEST3in the examples) For instructions on how to use it, refer to the docs included here.
Note: To avoid assertions made by the ux crate, always run the emulator in the --release profile.
On modern hardware, this emulator can run hundreds of times faster than the original UNIVAC. The emulator can instead pause occasionally to more accurately match the original hardware by passing the --realtime or -r flag.
For more information when debugging, the --verbose (-v) flag can be passed to view an instruction trace of the emulator.
Programs can be written as TXT files in UNIVAC assembly. See some examples here. Normally, assembly into a tape image can be performed on startup by the emulator, though the assembler can be used directly to store this tape image to a .76 file in the "bioctal" format.
cargo run --release --bin assembler -- examples/PI.TXT
By default, a program NAME.TXT will be assembled to NAME.76, though this can be configured with the --output-file (-o) argument. Setting this to a USB serial device will attempt to load for the LECPAC serial bootloader (should you be directly connected to the machine :)
To view a program listing, including a label table, the --verbose (-v) flag can be passed.
A web-app version of the emulator is provided in the web/ directory. For more information, consult the README.
An experimental disassembler is provided which can attempt to parse tape files stored in the .76 or .BIN formats. The disassembler will attempt to identify subroutines, strings, arrays, and addressed data.
cargo run --release --bin disassembler -- examples/PI.76
This emulator is a work in progress, so some features are not yet available, and some emulation details are inaccurate. These include
- Not all instructions have been implemented
- Not all instruction flags are implemented
- Assembler error messages are not that great, though the assembler does include the necessary information to add this in the future
- The emulator has no UI to interrupt emulation or monitor registers/memory while a program is running. These can be added manually. (See the memory module for some helper functions)
