I'm slightly surprised that no one has suggested PDP-11 assembler as a good starting point if you're not going to learn a current instruction set. Perhaps it's because it was the first one I learnt properly but all the early miccroprocessors felt like a step backwards. I did spend a few years writing Z80 assembler but I wouldn't recommend it nowadays as it's not a very orthogonal instruction set and 6502 doesn't have enough registers to give you a proper feel for writing assembler.
It's kind of hard to get hold of a PDP-11 these days. Even getting an OS, compiler etc is not that easy.
If you like the PDP-11 then you get the same qualities slightly restricted in the MSP430 and slightly enhanced in the 68000.
But, really, just forget all those relics and learn either RISC-V (the best answer) or else one of the half-dozen Arm variations. I'm partial to ARM7TDMI myself for sentimental reasons doing a lot with it in the mid 2000s. The Thumb mode is probably slightly easier to learn than the original Arm mode, but neither is as satisfactory as RISC-V.
> Even getting an OS, compiler etc is not that easy.
There's a GCC fork [0], macro11 [1] (GCC and clang also both have macro11 backends), ack [2] and more.
Getting hold of a modern compiler is trivial.
> It's kind of hard to get hold of a PDP-11 these days.
The PiDP-11 [3] emulator that runs on a Pi, is fairly popular among the retro crowd. So sourcing something hardware wise that behaves that way is easily possible.
The Computer History Simulation Project [4] will give you easy access to simulating a PDP-11 on just about anything that you own.
But if you want the original hardware, then they're in the $400-500 range, in my area. Easy to source.
Through a few of the computer-oriented antique dealers, yes. Not so much online. Part of being locally located, means the device has been sitting on their shelves for over a decade without anyone even making a bid. Several would take even less.
But for a hobbyist, I'd still probably recommend something like the PiDP. Run the system and learn it, without having to take the power bill of an early machine.
I mean you can grab SIMH and trivially have a working PDP11 emulator on pretty much any system that has a C compiler.
Then just get 2.11 BSD (or V7 Unix if you're a minimalist/masochist), install it, and you're free to write/run/debug all the PDP11 assembly you want.
But I do question the value of doing this. I'm a big believer in the notion that you can't train skills by proxy, so if your goal is to become proficient in writing assembly for modern architectures, then you might as well do so by learning a modern architecture.
I agree. PDP-11 is so much more pleasant, it's not even close. One could make the argument that the addressing modes are conceptually more complicated than what you'd have on a RISC, but the 6502 addressing modes are probably actually harder to understand than the PDP-11's.
Plus, learning PDP-11 ASM explains some of the idioms from C as they map directly onto the architecture! "Pointer to a pointer" is just a native addressing mode, for instance.
Yah, C's pre-increment and post-increment are map right onto the -11 addressing modes. It's a brilliantly conceived minimal instruction set. Just a joy to code in.