So I've done what you suggest, both of them. The assembler was useful, got close to the metal. The forth, for me, was a waste of time. I remember writing something like less(1) in forth just so I could scroll forwards/backwards through code, search, you know, basic stuff.
I don't feel like learning forth did much for me. Learning assembler, hell yes, reused that knowledge over and over (I rewrote assembly versions of Unix stuff like ls, cp, rm, etc in Z80 for a CPM machine I had at University).
It's been a while so I might not recall all the details. This is what I did on a 6502 in the 80's (the order might not be exactly right):
- Write drivers (in assembler) for external UARTs and parallel port chips
- Write (in assembler) enough code to get the very basics of Forth going
- Now in Forth, write the standard set of Forth words
- Write a rudimentary text editor
- Write a floppy disk driver and file system management code
- Now I have a Forth computer
At that point I started to use Forth for robotics. Quadrature encoder inputs. A/D, D/A and digital I/O. Eventually doing real-time PID loop. Control a single motor. Build a robot arm. Control five or six motors. Build an external LED hexadecimal display. Talk to it in Forth. Build a buttons and knobs control panel for the robot. Talk to it in Forth. Have loads of fun and learn a ton.
In other words, I had a very specific project in mind and saw it through from a bunch of chips on the workbench to a finished robot arm with user interface.
There are a million lessons to be learned in such a project.
I've actually thought about dusting off my old files and designs and putting together some kind of an educational kit to launch on Kickstarter. It could be a lot of fun.
I don't feel like learning forth did much for me. Learning assembler, hell yes, reused that knowledge over and over (I rewrote assembly versions of Unix stuff like ls, cp, rm, etc in Z80 for a CPM machine I had at University).
Maybe I just don't get forth.