4 ms·
Reading between the lines, I suspect OP just wants to get a feel for 'the turtles' that are all the way down... :-) If so, I second Gibbon1's: > just do a few
by RetroTechie 3y ago
Reading between the lines, I suspect OP just wants to get a feel for 'the turtles' that are all the way down... :-)
If so, I second Gibbon1's:
> just do a few embedded projects.
Easiest entry: download a simulator for microcontroller (family) you have in mind. One that lets you single-step through assembler instructions, see effect on registers, CPU flags, memory contents, I/O pin state, etc.
Get 'close to the metal': eg. grab an Arduino + USB <-> JTAG (and/or serial) thingie, download IDE, work through "blinkie LED" example project.
From there, explore some of the integrated peripherals & what you can do with those:
Pulse Width Modulation (both in hardware, or software) as a kind of poor man's analog output.
Hook up character LCD display. Or graphic one, and code some mini games a la "snake", tetris or the like. A few I/O pins, buttons, couple of lines assembly code & presto! You've built a joystick from scratch.
Hook up sensors, relais, or some sensor network LAN stuff, etc etc.
WHATEVER seems interesting. Once you've done a number of such projects (and written a decent amount of assembly code), write some small C programs for the microcontroller, and see what assembly code it's translated into. Or write a small Forth system. See how such things change your perspective from programmer -> low level hardware.
From there on up, it's just layers upon layers of (mostly arbitrary) abstraction. Some 'invisible', some with a huuuge performance cost.
Quad core x86-64 is just a really fast 8051 with more & wider registers + bigger instruction set + huge amount of RAM. ;-)
- Gibbon1 3y agoAnother historical thing that is simple to understand is old school micro-coded CPU's. Obsolete but if you understand how one works everything that comes after is just implementing the same thing mostly.