nepx / halfix

x86 PC emulator that runs both natively and in the browser, via WebAssembly
https://nepx.github.io/halfix-demo/
GNU General Public License v3.0
669 stars 86 forks source link

Dedicated website #3

Closed pixeltris closed 3 years ago

pixeltris commented 4 years ago

Great job on this project, it's nice to see another x86 emulator which can target the web. It's written very nicely too, so props to you!

I think it would be great to see a dedicated website for this so that people can easily try it out. I guess some more work might need to be done on save states?

nepx commented 4 years ago

Hi, thanks for the interest!

I was actually thinking about setting up a small website using GitHub Pages with a few demos like OS/2 and Windows NT, but I don't want to risk getting a copyright strike on my account.

Unfortunately, I don't have a web server of my own, so if you know of any free web hosting solutions, I'd love to hear about them. One issue might be bandwidth -- OS/2 downloads around 10 MB per boot, Windows XP downloads 70 MB.

I only use savestates for debugging long boot processes (Windows XP and beyond), although they would definitely speed up the boot process and allow for less bandwidth. There are some issues with large disks and async XHRs, but they can be worked around.

pixeltris commented 4 years ago

Yea, hosting images on GitHub could potentially cause issues. I'm not much help in regard to potential hosting platforms unfortunately! If it were me I'd probably just create a throwaway GitHub account and just use that for the hosting side of things.

The reason I mention save states is because sometimes I like going to v86, setting something up and the returning to it some time later (though I guess some sort of file mounting might be a good alternative to that).

nepx commented 4 years ago

I tried implementing in-browser savestates a while ago, so some code is already there. The only problem is that the savestate uses multiple files, which probably have to be exported as a ZIP file or something. I'll probably have to use a library like JSZip or tar-js.

I'll have to look into free file hosting that preserves the names of the files -- the block driver depends on disk image chunks following a specific pattern (i.e. blk0000005a.bin). It would also need to support CORS.

I could also probably set up a demo like v86 where you could upload your disk image and have it read using the FileReader API. That wouldn't be hard to implement since the block driver for the Emscripten version is written in JavaScript.

nepx commented 4 years ago

Savestate loading seems to work now. I created a savestate in the native version and loaded it up in the browser, and it seemed to work. I created a new tool, tools/savestate_format.js, that compresses savestates and makes them usable in the browser.

I'm using JSZip to export savestates at the moment, but it's too slow -- it takes around five to ten seconds to compress ~40 MB (RAM, VRAM, device state, and disk image chunks). Maybe zip.js has better performance.

pixeltris commented 4 years ago

Awesome! I guess there's always the option of passing it over to some C code if js just isn't suitable for that kind of thing performance wise.

nepx commented 4 years ago

Sorry, have been a bit distracted with other things.

The configuration system as it is right now is a bit broken -- in particular, runtime.js is a bit of a kludge. I'll probably have to refactor the Emscripten support code into a different file and rewrite the other support code. Right now, the only way for me to select a disk image is through a query parameter, and I'd like to change that because the FileReader and File APIs seem like neat ways to read a local file into memory. A configuration UI of some sort would be nice too.

I'll try doing this over the next few days.

nepx commented 4 years ago

I created a nicer UI with Bootstrap. It supports the loading of disk images through a file upload now.

Screenshot_2020-05-23 Halfix x86 Emulator -  640 x 480  - Press ESC to release mouse

There are still some rough edges here and there and I just started learning Bootstrap today.

minecraftchest1 commented 3 years ago

You could do ReactOS in a demo site. It is GPL as well. I would just ask for permission just to be safe, but if you are worried about copyright strikes, ReactOS should be fine.

ReactOS contact info

Forum Chat Website Mailing lists ReactOS IRC - #reactos on freenode

nepx commented 3 years ago

That's a good idea, and I'll look into setting up a demo in a separate repository, along with Linux and "abandonware" like OS/2.

On 9/25/20, Wyatt Jackson notifications@github.com wrote:

You could do ReactOS in a demo site. It is GPL as well. I would just ask for permission just to be safe, but if you are worried about copyright strikes, ReactOS should be fine. ReactOS contact info


Forum Chat Website

-- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/nepx/halfix/issues/3#issuecomment-698999789

nepx commented 3 years ago

I set up a tiny website using GitHub Pages: nepx.github.io/halfix-demo. It has NT 4.0, OS/2 Warp 4.5, and a random Linux distribution.