Hopefully it is both fun and challenging, while at the same time educational about some of the fundamental principles of how a CPU works.
It still lack some explanatory texts, but is should be playable as it is.
It is inspired by the first chapters of the brilliant Nand2tetris course (and I have gotten permission to use the same general CPU design). My hope is this is more accessible since it is web-based and does not require any text-based coding or CS background.
This reminded me of "Code" by Charles Petzold, which I saw you reference in the About page. As a software engineer with an interest (but no professional training) in hardware design, I think it's useful and interesting to have at least a basic understanding of how a CPU handles logic.
Can I ask what library (if any) you used for the canvas interactions? I'm looking for something similar for a project of my own.
Would be awesome if you compare your answer to the "best" solution, i.e. which uses the minimum number of components (or even the minimum number of nand gates!)
It would also be cool to show the overall cost in nand-gates or even transistors. And to be able to show the solutions decomposed into only transistors and wires.
Didn't know Euclid the Game, but it seems very cool and close to what I wanted to achieve.
Otherwise, it's fun, although the node connections are fiddly! Maybe allow dragging from either end? Or snapping together.
Edit to add: and on the next level, the m flag doesn't exist. So, will stop there, but fun!
The m issue is a bug in the spec, thanks for discovering it.
Thank you for the feedback, it is much appreciated.
To further build on this; If there is an intermediate state, show its pins in the diagram like output and input. If the table becomes wide, perhaps show it on the bottom. Perhaps let users add a "debug probe" from the toolbox that becomes a column in that table.
I'm really enjoying the whole thing though, great work!
I wanted to send a bit into two separate components and I was looking for some sort of "hub" object. It wasn't clear (to me) that you could connect many lines to a single node.
Removing lines takes a lot of clicking.
Is my design the best possible? Rather than just being told my design fits the requirements, I'd like to be told that I could have done it with one less component and offer to try again.
Reset for clearing all components off the canvas, or for resetting the input signals and state? Or both?
The explanatory text for the level does not really define neither "byte" or "word", so beside fixing the error it also need more details. (But I want to avoid going down the rabbit hole of explaining that bytes can have different sizes than 8 and so on)
By the way I suppose the subtraction component should be available in this task. This would make is simpler. I had trouble deciding if increment should be before or after subtraction.
Perhaps a toggle for the info boxes on components?
Overall, I love this though.
I was saddened by the fact that I lost progress when I left the page. It would be nice if progress could be save via cookies or something.
One other thing that would be nice is the ability to offer hints. These could even be just an external link to relevant material on wikipedia or equivalent.