Assembler
Add a download button to the assembler
Allow downloading the program as source code, assembled bytecode, as a standalone HTML file, and as a standalone executable for Windows, Linux, or Nintendo DS.
Emulator
Finish the stream device
Implement network requests. The local bytestream has already been implemented.
File device
This needs to be figured out properly. I’m thinking of implementing a sort of virtual filesystem for the emulator, where files are stored for the duration of the program in a JavaScript data structure. Add a panel to the emulator for listing, downloading, or deleting files from the virtual filesystem, and allow dragging files into the list from outside the browser.
Registry device
This needs to be implemented. Store registry values in browser storage to persist between programs.
Game controller support
Look into the web API for game controllers.
Optimise emulator cycle duration
Use timing information at runtime to calculate the optimal number of cycles to run before yielding back to the browser, aiming for around 30 frames per second. This value will change between core implementations (JS/WASM), computers, and different program loads, so it can’t just be pre-calculated.
Make screen resizeable
The screen is a bit finicky at the moment. The canvas size is more or less determined by the layout engine of the browser, but we can support resizeable screens by overriding the styling of the canvas.