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 (to an extent) 3, 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.
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.
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
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.
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.