The Secret Feature of EM-DOSBOX on Internet Archive
ascii.textfiles.com
ascii.textfiles.com
At the same time, I was getting a bit of nostalgia for Windows 95, the first upgrade to Windows I ever used. And it turns out with a bit of fiddling you can run Windows 95 in DOSBox and have it mostly work.
Thus http://win95.ajf.me/ was born. Windows 95 running in the browser. It's still rather unbelievable. You can listen to CANYON.MID on an emulated Sound Blaster 16!
(Unlike the Internet Archive's games, this doesn't do any saving to local storage, sorry. I'm not sure it practically could, because it's not using a fake filesystem mapped to fopen() calls by intercepting DOS system calls, as DOSBox typically does, but rather DOSBox is giving Windows 95 a real disk image, so you'd have to stuff 131MB into localStorage.)
an OS running inside DOSBOX compiled to JS deliver over HTTP/TCP/IP to be interpreted by a browser (at this point perhaps a OS in its own right) running on top of a OS on top of a CPU.
It really feels like we are back in the leased terminal era...
Disk access here is fun through the sheer number of layers. Consider a DOS prompt inside 95. When a DOS application tries to perform an I/O operation, it will make a DOS system call. DOS, in turn, will call the BIOS. This BIOS call will be intercepted by Windows 95 which, since it has no 32-bit disk driver (DOSBox doesn't simulate a real disk controller), will pass it on to DOS (the one underlying 95), which in turn will make a BIOS call. Everything before this point has been under DOSBox's x86 emulation. We then go through to the C++ fake BIOS of DOSBox, which handles the BIOS call by calling the C standard library I/O functions. However, those have been replaced by emscripten's shims, which will grab that data from the asm.js heap somewhere (or does it ferry it out to JS? I'm not sure.)
And DOSBox itself has been compiled to asm.js (which your browser may compile to machine code through JIT) and is running in your browser's JS VM. Which, if the browser you're using is on Windows, may be a 32-bit version, which is running under Windows's WOW64 (Windows 32-bit on Windows 64-bit)...
The layers never end!
But then, I am running Windows in DOSBox in JavaScript. I have no right to complain.
edit: welp, now I tried to run Internet Explorer 3.0 on the machine and it never finishes running, maxing out at 100% CPU and Chrome then wants to kill the tab.
And on Firefox, it crashes with "uncaught exception: SimulateInfiniteLoop". Well, it's not perfect!
(Sidenote: I'm the author of the BrowserFS library, and helped implement this feature.)
It's amazing how much I'd associated the Windows 95 startup sound with that room... Thanks for that.
EDIT: Hey, can I mount win95.data on DOSBox locally? Do you know the command line?
You could also try to run Windows 95 in DOSBox itself, just like this page does, but unfortunately DOSBox has a few issues with it. There are tutorials out there for doing it, though, and DOSBox supporting the right graphics and sound hardware is a big plus.
EDIT: Managed to get it running in the end, these two guides helped:
http://eduardprogramming.blogspot.gr/2014/01/20140120-window...
I tried loading up Internet Explorer (3.0!) but it crashed the whole thing. This thing is very accurate.
[1] http://start9.io
http://www.consoleclassix.com/
I've used it before, it's a pretty good experience. You have to pay to be able to play non-NES and Colecovision games, though.
They justify the obvious copyright violation by only letting you play games they have physical copies of, and not letting more people play concurrently than they have cartridges. This... doesn't really avoid the copyright issues, but they do it anyway.
We found this service before creating Start9, and considered using the same thing. We talked to a lawyer before, who advised us not to do it, and fallbacked on letting people upload games that they are able to according to their local regulation (usually, games they dumped themselves), and forbidding them to lend their accounts to their friends.
It's 100% legal, but unfortunately it's still hard for some users to understand why this limitation exists. What I would love to do would be to have kind of a deal with game publishers, but as a single man currently working on the project, I don't the time to contact these studios (especially since most of them have closed since the games have been released, or are under Nintendo's copybag, which won't be ever available to third-parties such as ourselves).
Great example of usability winning out over technical purity here. Just because something is behaving as we expect it to doesn't mean it can't be changed to make the experience better for everyone.
It's the same as printing. Everyone writes hilarious complaints in the comments on the word processors about how printing didn't work. Of course you can't print! It's an emulator running in JS in your browser!!!1! But we have ideas for how to implement it, so maybe one day it will work after all.
Saved games and networking are higher priority and are further along though.
I mean, there are people who hack games that should not be modified and change the userinterface etc. We should have enough control over our virtual machines to let them do anything.
(Sidenote: I'm the author of BrowserFS, and helped implement this feature.)