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 3 (and some similar machines), and the Tandy MC-10 (early support, might be buggy; NTSC only). It supports dynamically fetching cassette and disk images from the web into your computer's RAM to be used with the emulated machine.


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.

Xmas Rush (MC-10) is Copyright (c) 2016 John W. Linville. See COPYING.xmasrush.

Pac-Man (MC-10) is Copyright (c) 2006 Greg Dionne. See COPYING.pacman-mc10.


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. Right now this function results in a badly scaled image, due to working around a bug in Emscripten that appears to affect SDL2.

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. The current public XRoar git repository contains all the changes.

With the repository cloned, run ./autogen.sh, 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 20 Nov 2021