Skip to main content

RobCo RX-9000

Intro

 For over a year, I've been working on a project to implement an emulator (https://github.com/skwirl42/robcorobco-processor/) of a hypothetical RobCo RX-9000 computer from the Fallout universe. I've wanted to create a fantasy computer for some time, and the thought occurred to me that this would be great complement to a hardware project from element14 I've been working on.

At some point I lost steam with the project, and it's sat dormant for 8 months as of this writing. It's a labour of love that I didn't have energy for anymore. That might change in the future, if I can drum up some interest in it.

I've spent a lot of time putting this together, and I'm pretty proud of it. I hope you can find ways to enjoy it, too!

Features

Emulator

The emulator implements a 16-bit, 256 byte stack-driven instruction set, with an additional 64KB of RAM. Its peripherals include: a text console, bitmapped graphics mode, a virtual holotape interface, and an FM synthesis sound system. There are other peripherals to be developed.

Much of the IO interaction is done through system calls, using the SYSCALL instruction. This abstracts a lot of the system for the programmer. I wanted to be able to implement these calls on the host side, in C/C++ .

The emulator could easily be used to run games, at this point. If there were any. I'm hoping this post might drum up some interest. I've made the tools to be sufficiently sophisticated so that I could implement assembly programs pretty easily.

There's a very basic debugger in the emulator, allowing the user to step through instructions. Also included is a setup screen for loading holotapes from the host filesystem.

Assembler

The toolset includes a single-pass assembler that can be used to run assembly source directly in the emulator, or as a standalone command line tool.

There is no macro support in the assembler, as I haven't gotten around to implementing it. I'd be happy not to have to, if someone decides to help out.

The assembler's parser is based on the boost's spirit library, and should be pretty extensible. The backend is in straight C, and I'm sure it has some serious bugs.

Other tools

The most useful of the command line tools is the tapemanager. It creates, clears, and adds files to holotape images for use with the emulator.

There are a couple of tools for interacting with the sound system in a standalone manner. One is a kind of piano, and the other plays back sound commands from a file. I'm not a musician, so the sound system hasn't had a lot of testing outside of the piano tool.

Reasoning

Ultimately, this system was designed to create a system from an unspecified architecture for a fictional computer. Choices were usually made for in-universe reasons, or when those became cumbersome, I chose more sensible, real-world functionality.

Why stack-based?

Given that I couldn't find any reference to actual systems architecture for Fallout terminals I decided to simply go with something different, since the Fallout universe is an alternate universe, with the split happening before the minicomputer was popularized. Plus, the in-universe machines that pre-dated the one I've created were all dumb terminals. A small, stack-based system would most likely be enough for those machines.

Another reason is that it makes implementing languages like Forth easy, more or less. I've extended the original architecture to make it easy to implement Forth with few instructions needed per word.

Why so many SYSCALLs?

My idea for the system was that it was essentially a hacked dumb terminal, thrown together quickly to meet consumer demand and potential competition. So in-universe, RobCo had all these dumb terminals, and with a bit of jiggering they could make a better computer with mostly just a change of processor. The SYSCALLs are meant to be the programming models of the older, 8-bit terminals, simply extended for use with the new hardware.

Future plans

I'd love to see a community build up around this strange little system. I'd like to be able to work on it knowing someone else is going to be enjoying what I'm making. I'd love to see games made by other people.

There's lots of room for improvement. The assembler has some serious flaws that I'm aware of, and the debugging interface for the emulator could do with being a little more comprehensive.

This is a project I've put a lot of time and love into. It's my largest personal project to date, and it's given me a good feeling of accomplishment. I hope you've enjoyed reading about it, and maybe you'll want to join the effort!

Comments

Popular posts from this blog

Am I Jonesing for the Internet?

I’m feeling a little agitated and jittery today. My internet access is down due to some nasty snow and wind. Are the two related? They might be. I know I’m certainly missing my twitter friends and feeling less in touch with the world. How long is this weather going to hold? I can’t look that up. Sure, I could pull out a radio and listen in, if I had one. I might somewhere, but I’m at the mercy of the broadcaster to decide when to report the weather and how much of it to report. Some argue that internet access should be a basic human right. Does this point of view hold water? I suppose it could be argued that since the internet allows us to draw together into a larger community that it is an essential part of improving the human condition. Its use in political organizing and to connect dissidents in repressive regimes can certainly help make the case for it as a basic human right. Is the jitteriness really from not having the internet? My doctor did just increase my dose of modafi...

Piet - an esoteric programming language

There’s a certain group of programmers out there that like to come up with programming languages just for the fun of it. Some of them have profanity as their names , and some are based on internet memes . Whatever the case may be, some individual out there enjoyed thinking up the language, and many of these languages are actually useable. One esoteric language that stands out, for me, at least, is Piet , created by David Morgan-Mar. Based on the idea of making programs that look like abstract art, Piet allows the programmer to express their software in the form of coloured blocks. Numbers are represented by blocks of pixels containing a pixel count equal to the number itself. Operations are performed by changes in hue or darkness. As an example, here is a Piet program I wrote to output the string “Hello World”. This image is in fact the entirety of the program, and can be run in any of the Piet interpreters out there. Other examples of Hello World programs are available on David’s si...

Interactive Fiction - Finding the Mouse

For as long as I’ve been using computers I’ve known of text adventures. Using your imagination and the words on the screen, you construct a world in your mind and then interact with it through the computer by typing in commands. The goal is usually to solve different puzzles in order to come to some sort of winning scenario. Nowadays text adventures have given way to interactive fiction, or IF. Much like text adventures, there is often a goal to reach. However, some can be entirely freeform and offer the reader a variety of scenery and possibilities to explore. They still stick to text as their means of communication and rely on the reader to imagine the scenery. There’s still usually some sort of puzzle to solve, and this can provide a lot of fun for some. The interactive fiction community is still going strong. There are plenty of archives out there for the curious reader to explore; the most prominent being the IF Archive . There’s a newsgroup at rec.arts.int-fiction (Google Groups...