Wow, the big innovation here is that it's self hosted on a system with no disk. I don't think there's anything like it on the system - it's really an impressive feat.
FORTH on the 6502 has been done a few times before. There's a fellow named Garth Wilson who is sorta the self-proclaimed 6502 FORTH guru. He has a website here if you wanna learn more: http://wilsonminesco.com/stacks/
I actually wrote my own FORTH for the system before. My language wasn't very usable, but what impressed me the most was how quickly I could put it together. In just an hour and 100 lines of code, I had a fully featured compiler for a turing-complete language. You can't do that for many languages but FORTH!
Garth Wilson here. Self-proclaimed Forth guru, um...no; enthusiast and user, definitely. The 6502 Forth I'm using is one that was modified from fig-Forth to Forth-83, and then I further modified it and added a lot to it, including zero-overhead interrupt service in high-level Forth, as described in one of the first articles I ever wrote, at http://wilsonminesco.com/0-overhead_Forth_interrupts/ .
My 65816 Forth however is something I did pretty much from scratch in the mid-1990's and has sat collecting dust most of the time since then, but I have recently pulled it out and implemented a the major upgrade of easy installation and management of low-overhead prioritized interrupts in both assembly language and high-level Forth. This was quite a challenge to debug, because until the new interrupt system was working, there wasn't the interactiveness that makes Forth so quick to develop in.
There's so much optimizing that can be done on the '816 compared to the '02, since its ability to handle 16 bits at a gulp takes the memory penalty out of turning secondaries into primitives. It's actually easier to write for the '816, and my '816 Forth runs two to three times as fast as my '02 Forth at a given clock rate. I hope to eventually it ready for publication.
Hi, author here. I think the only difficulty in making this work without a disk is that most of the memory space will be read only once you finalize the ROM. I had to allocate separate RAM addresses for variables. In Forth, you can often just increment HERE to make space for a variable, but I ended up creating many different HERE words because my dictionary headers, word implementations, and ram variables all used different blocks of memory.
While on the subject of FORTH for the 6502, I can't resist mentioning Eloraam's now-defunct (but huge in its heyday) Minecraft mod Redpower 2! It included fully-functional computer blocks that could interface with redstone machinery ... running a custom FORTH on an emulated 6502 processor :)
Very interesting project. I recently decided to pick up Forth by reading Starting Forth and Thinking Forth. I mostly use FlashForth to program an Arduino Uno. It's great to see the continued interest and innovation around Forth.
If you are thinking of learning Forth, it is worth the journey.
FORTH on the 6502 has been done a few times before. There's a fellow named Garth Wilson who is sorta the self-proclaimed 6502 FORTH guru. He has a website here if you wanna learn more: http://wilsonminesco.com/stacks/
I actually wrote my own FORTH for the system before. My language wasn't very usable, but what impressed me the most was how quickly I could put it together. In just an hour and 100 lines of code, I had a fully featured compiler for a turing-complete language. You can't do that for many languages but FORTH!