About XRoar Online

XRoar Online is a Dragon emulator in your browser. It emulates all of the Dragon 32, Dragon 64, Tandy Colour Computers 1 & 2, and some similar machines. It supports dynamically fetching cassette and disk images from the web into your computer's RAM to be used with the emulated machine.

Credits

All of this is possible thanks to Emscripten, a toolchain that allows you to compile regular C code into WebAssembly. WebAssembly is supported in all modern browsers. XRoar certainly required some extra code, but Emscripten's environment makes these requirements refreshingly minimal.

Todolist

WAV files are not supported for cassette images. While it's possible to make this happen, I wonder what the utility is: files used by XRoar Online are all stored in a memory-based filesystem on the user's machine, and WAV files tend to be rather large. If enough people tell me this isn't a problem on modern machines, I'll think about it!

Fullscreen support would be nice. Right now, knowing when a browser has entered fullscreen mode automatically is surprisingly difficult, but it would seem that an API for it is coming "real soon now". In the meantime, a JavaScript function, toggle_fullscreen() is suitable to call if you can think of some UI element that makes sense. It may make sense to keep browser fullscreen and emulator fullscreen separate anyway.

XRoar as a normal desktop application tries to be user-friendly and search a list of filenames that may contain the firmware ROM images for a particular machine or cartridge. It also checks for extensions in a variety of cases, and even searches for old .dgn files, as used by PC-Dragon and (I think?) T3. This is fine locally, but trying a web download for each potential name in turn would be very inefficient. Right now XRoar Online requires a list of stub files to create as a hint about what is actually available. See the romstubs variable definition in wasm/software.js. I think in future, I may just be more prescriptive about filenames, probably simply adopting those expected by MAME.

Snapshot loading doesn't work properly yet. This is because machines are configured at arbitrary points of the load, and in the browser environment these may lead to asynchronous resource fetches. Need to make the snapshot loader able to continue when resources are available.

The way the HTML/JavaScript interface is defined seems a bit klunky, and it would be nice to make XRoar Online more easily embeddable. Web Components sound like they might simplify this, with their "shadow DOM"s and what-not, but I'm not sure yet whether I can embed Emscripten's output in one.

Source code

While XRoar Online is still a work in progress, it has accrued a lot of functionality in quite a short time. This is because it is built from the same source tree as regular XRoar. While a regular release including the required changes is not yet ready, you can download the latest source from this temporary location - look for the highest numbered snapshot.

With the source unpacked, configure with emconfigure ./configure --enable-wasm, and build with emmake make. HTML/JavaScript support files are in the wasm/ subdirectory of the distribution. The supplied index.shtml depends on the server supporting SSI (as xroar-wasm.html contains only the basics), but you can combine them into a flat file quite simply.

Updated 3 Jul 2019