So recently I finished this book called "The Elements of Computing Systems" where you learn how to build a computer system from the ground up, starting from NAND gates and working your way up to a fully functioning virtual computer. Basically what happens is you start from primitive logic gates, then use those to implement combinational and sequential logic, then create a CPU with a machine language followed by an intermediate (VM) language, and finally a semi-OOP programming language called jack.
I really enjoyed the book (it's available here btw: http://www.nand2tetris.org/course.php it's also called "From Nand to Tetris") and would like to create something similar that extends upon the capabilities of this computer system, except as a web application with JavaScript and possibly a PHP back-end if necessary. However, I'm not sure how to go about doing this and am also unsure if it's a feasible project.
I created a small document explaining how it should work here: https://docs.google.com/document/d/1vGX6ec1ADPEtkq2sMrrdqBv7qtzplbuORzuUgWTj1GA/edit
Only difference is that I added in some stuff like bitwise operators into the machine and VM language so it doesn't have to be implemented by the OS.
EDIT: Also I changed the layout of the RAM cause I want this to be a 32bit system instead of 16bit. I don't think 65565 words of memory (that's for both ROM and RAM) is enough if I'm going to write anything significant in Jack.
I'd like to extend upon this by adding:
1. Computer screen -- probably 640x480 with support for rgba values (the original only supports black & white)
2. Keyboard & mouse input -- ascii codes for keys along with keydown, keyup, etc and mouse button state and x,y coordinates
3. An actual filesystem instead of storing everything in RAM... not sure how hard this will be to implement though
4. A second programming language apart from Jack, that also compiles to intermediate code... might look something like python
5. Ability to output sound
6. Networking, able to communicate with other PC emulators (running on a separate browser tab, everything is just gonna be local for now) through a simple protocol.
After it's complete I'm probably gonna write some basic apps for it, things like a paint tool, notepad, calculator, some games, etc.
I'm not sure if #3, 4, and 6 are actually possible though. But anyway I have about 3 years experience with Web development and wouldn't mind spending a good amount of time implementing this, although I'm unsure as to how long this will take. Sorry if this sounds overly-ambitious or anything, but I've wanted to make something like this for quite a while.