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

What Kind of Games?

I started programming when I was young, with the hopes of writing video games. I think a lot of kids start that way. When you like something, or someone, you try to emulate what you’re seeing. But how has that early dream turned out? They tell writers to write what they know. It’s good advice. How can you write about life in the Serengeti without have someone to give you a first hand account or having been there yourself? You can always use your imagination, and that’s all you can really do when writing fantasy or science fiction. It works for writing video games. How can you expect to write a genre you don’t immerse yourself in? These days I spend most of my gaming time playing casual games. I’m busy doing other things, and don’t want to spend long stretches just sitting at the console or computer. Recently I read an article about the kind of video games the most people tend to flock to. Typically they’re games that are relatively simple and involve sorting things in some way. It

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

Aldebaran Colony

This is a quick little story I whipped together one day as a writing exercise. That's mainly the sort of stories I'll be putting up; 1000 word vignettes that I wrote during a day. Here it is: Why they had thought they needed a podiatrist on the colonization team was something Harry Jones couldn’t figure out. He wasn’t even one of the best podiatrists, although he had his moments. It wasn’t as if he wasn’t happy to be along. He was, in fact, overjoyed when he was given the news. It had just come as a bit of a surprise to him that he had been selected to join the ten thousand other people on the colony ship bound for Aldebaran 5. The ship had been equipped with a new Petrescu-drive engine, which would allow them to cross the distance between earth and the Aldebaran system in about 15 seconds. There had been some hushed conversations between the scientists setting up the engines, but Harry was confident that the colonists’ best interests were being kept in mind. After all, it was