Show HN: The Montana MiniComputer
It is written in java (sorry) and provides a web interface that has:
- a blinken-lighten display for registers
- a memory view with different filters you can apply
- a Gameboy-like game pad
- a console you can use to interact with the computer (including running assembly instructions directly)
- a file browser with an integrated editor for editing file
So everything you need to get going on low level programming.
It includes some sample code, including snake and conway's game of life, in the /src directory.
You can watch a quick start video here: https://www.youtube.com/watch?v=m_6pZ_sT3y0
We have the start of a C compiler for the machine, but that's still a work in progress. We plan on improving the interactivity and visual feedback over the next few months, so any feedback you can give us would be very much appreciated!
I had the opportunity to play with an Altair 8800 clone and it seemed so much more intuitive there's not fifty layers of abstraction over how things like memory, I/O, etc. work, and you can inspect what's going on very easily. From looking at this project, it certainly feels similar, but much more easily accessible and programmable, while also really letting students get a feel for the organization of a computer without the abstraction. I really think this would help point (2). As for point (1), with easy graphics output, it's easy to do things like write games (like the aforementioned snake), and I think that would already make this a lot more fun than the kind of assembly and C code that the course I TA'ed wrote, such as "find the max of an array in memory using only assembly," or "implement a database to store information about courses in C."
As a side note, it would be super cool to have things like CTFs that use the MTMC for pedagogical purposes, à la CMU's "Bomb lab"!
I really hope that universities adopt either this or something like this for introductory computer organization and low level programming courses. I genuinely believe that it would make a big difference in students developing a passion for low level programming, and I'm really glad that this work was done.
Side note: Java is honestly a great idea, since most students learn Java and thus the barrier of entry for contributing to this would be greatly reduced.
One of the best measures of your success is the number of ideas for extension that immediately pop into my mind. Memory mapped I/O of various kinds. DMA controllers with memory mapped registers. A forth interpreter. A tinyGo port. Bigger memory. An emulator for a Raspberry Pi or Pico. A scheme interpreter and compiler. A simple memory management unit.
Many of the issues you're bringing up popped into my head when I started working with Carson on the project. But they've ended up being not a big deal. The machine is more than powerful enough to get through the lower level CS courses while being simple enough to be blindly obvious about how it all works.
We're also cheating in a few areas like compiling graphics to a separate ROM space to keep the memory usage down.
Carson and I have already chatted about eventually needing an MTMC-32 for Operating System Design classes. That would be the computer where Interrupts, TLBs, cache levels, pipelining, MMIO, block devices, etc, etc, etc would make sense. They'll be able tp build the Operating System themselves and figure out how to make it all work. And ideally share software with each other that they can compiler for their OS. (Like a TinyGo :))
IMHO, this is an important step toward a suite of educational tools for the future.
My favorite is: life /data/galaxy.cells
Just pull up the Machine Specification for the full list of instructions and try it out!
I got my EE degree from MSU and grew up in Bozeman. (I live in Boston now and I wonder every fucking day why I don’t live in Montana any more.)
This has a whiff of something Brock Lameres or Ross Snider would be involved in. Except for the Java part. Nobody at MSU did Java except the CS department lol.
Best classes ever.
IN
YOUR FACE
You pointed us to a video, but not to a URL where we can either download it or interact with it online. Are there such?
https://mtmc.cs.montana.edu/
We made sure it was HTML3 compliant for shits and giggles