The beauty of that cpu/architecture is that you could write in machine code easily, no assembly required. For example, MOV a constant to a pointer in memory was code 012737 with 01 denoting move command, 27 specifying the first operand as a constant residing in the memory immediately following that instruction, and 37 is specifying the second operand as a pointer, also in memory.
010102 was MOV register 1 to register 2.
I self-taught myself this while in the high school, because Basic was too slow there.
I can imagine how inefficient it is to have every command take 3 bytes, kind of explain its slowness (but other 8-bit machines weren't much better in MIPS terms)
Surprisingly similar orthogonality to ARM.
4c 00 c0 jmp $c000https://csdb.dk/search/?seinsel=releases&search=turbo+assemb...
Growing up on the Commodore computers in a country with no access to originals, I've never seen original software for Commodore64 in my life.
The machine I did most of my 6502 stuff on was a BBC Micro, which had a basic assembler built in, so that really helped but the KIM-1 which I used before that was so sparse that even though an assembler existed I would have first had to expand the memory (big $back then). So memorize opcodes and use the handy 'opcode card' that you could get for those CPUs back in the day. No big deal, though I was really happy once I moved on to automating that part of the process. Especially branch calculation is tricky because if a branch is on a boundary you could fix it easily in something with macros but by hand it is hell because if the branch can't reach the target you need to invert the branch and then use a JMP, which requires more space, which may cause other branches to no longer reach their targets and so on.
http://www.pouet.net/prod.php?post=836903
As such, it's a very impressive feat of coding prowess.
Compare and contrast with web "programming".