So, I've been working more and more on my recent mbed project. I've decided to go for something really interesting and not too hard.
The project is named MbedConsole because I'm bad at names. Anyway it will feature
- PS/2 keyboard support
- Monochrome VGA. 640x480, with text and/or graphics
- A simple shell
- A Forth programming environment
- About 20K or so of usable RAM for the Forth environment
- SD card support of some kind maybe
All of this works with no external components but a few resistors. This means, it's going to be awesome!
About the Forth environment:
I'm not aiming at all for Forth compatibility, but it definitely has a Forth feel to it(everything is in a stack). The big thing that this is enables is semi-self hosting.. That means I can write some system software in Forth. Because Forth programs don't constantly occupy RAM, this means I can make a "real" computer with a whole 20K of memory. After getting the Forth environment created I'd like to rewrite my shell to use Forth as well. If I really want to get awesome I could even write my Forth implementation in Forth and leave on the virtual machine in native code... I'm not that brave.
Anyway, the Forth environment was at first planned to be interpreted only. Now however, I've found that compiling to a virtual machine is about 10 times easier than trying to interpret it directly. It also will save memory, and probably will be faster. The virtual machine is extremely simple. and should already be Turing complete. Forth however is not quite there yet. It's easy to parse, but string handling in C is never quick to implement.
The end goal for me is to have a very retro-feeling operating system running on the mbed powered by it's Forth interpreter. Things I want to have:
- A simple command shell for file management
- A way to save the Forth programs you write
- A simple text editor of some sort
- At least one super simple game
If I remove graphics support, I can also add in network support, but I highly doubt there will be anywhere near enough RAM to be useful for Forth after including a TCP/IP stack. I believe it takes about about 16K by itself :(
Anyway, this project will eventually be released under BSD license. I want to get it half way working before I release it.