Embedded Systems
Thanks to my early fascination with electronics, I have been studying Embedded Systems long before my official MSc enrollment in 2021. I'm really fortunate to have seen my calling at such a young age. Anyway, I thought I'd share some of my experience here.
Arduino's started becoming popular when I was a teen, so naturally I have used quite a few. They're a great way to get started. And it's a good thing they're based on the AVR processor, which is in my opinion the most accessible embedded architecture. The libraries provided by Arduino are actually pretty meh, so there's a good reason to try some AVR assembly on one of these boards. The documentation by Microchip, formerly Atmel, is also top notch. I wish every manual was written to that level of clarity.
At university, I started to work a lot more with FPGAs. When you're learning to design digital hardware, reconfigurable logic devices are a great tool. And some FPGA toolchains are open source now! The lattice ice40 family is particularly well supported. I'm having a lot of fun with my TinyFPGA BX board, both in Verilog and VHDL.
This website is also hosted on a more or less embedded system: the Orange Pi Zero. I mostly choose it because that's what I had lying around at the time. It was a leftover from another project, I actually still have a few others in a cupboard. The main downside of these Raspberry Pi knockoffs is the lack of support. The company produces a lot of nifty boards for very low prices, but doesn't bother to ship a good manual or software. It's the same for one of the FPGA boards I own, an icesugar-pro. Great hardware, especially for the price, but the documentation and community isn't there yet. It's quite a shame.
One of my first low level experiences was SNES romhacking, where I learned 6502 assembly. That was on smwcentral.net, which is still going strong today. Technically, the SNES has a 65816 CPU. But that's just a 6502 with 16-bit extentions, so a lot of that knowledge transfers over. Compared to the regular, orthogonal instruction sets of modern architectures like AVR and ARM (maybe not so much x86), the 6502 is an oddball. And that's what makes programming it so fun.
I now own a C64, but it's in storage. I intend to integrate it into my desktop, with a little shelve below my monitor. That would be great for watching C64 demos. What's caught my attention recently is the K65 assembler. I'm used to the old-fashioned assemblers, where each line correspondes to an opcode. And in a way, K65 still holds that true. But it provides syntax in such a unqiue way that you almost see through the code, like the semantics fade away. I haven't really used it yet though, so maybe my attitude will change when I do :).