True, not every indexed and indirect addressing mode is available in 24-bit. (Actually, they're not all available in 16-bit on the '02 either, like that there's no LDA (abs),Y). Also, the two bank registers are only 8 bits each (the high 8 bits, specifying a bank), meaning you can't use them as fine-grained index registers. However, the '816 still gives you a ton of benefits even if you never go outside the first 64KB of address space and never touch the bank registers. Going beyond that, the thing is to make banking work for you rather than against you.psycopathicteen wrote:I think long addressing might be somewhat confusing to beginners because certain instructions/addressing mode are missing like lda $xxxxxx,y. You pretty much have to use the bank register as the bank byte for Y, and use long addressing for stuff you'd normally use absolute addressing for.Garth wrote:Outside of the TI-58c programmable calculator, 6502 assembly was one of my first languages (concurrent with Fortran IV). Later I was able to use the 65c02 and its improvements over the NMOS '02 gave me a greater sense of freedom. Later I got into the 65816 which I actually found easier than the '02 because its wider registers and added instructions and addressing modes removed the limits. It was so nimble at things the '02 was either clumsy at or incapable of. But if it seems daunting, you can use it exactly as a 6502 to start, and then start using the extra capabilities little by little.
There's no LDA $xxxxxx,Y, but there is an LDA $xxxxxx,X and LDA $xxxxxx and LDA [dp] and LDA [dp],Y. Altogether there are 34 addressing modes (if you separate RTS, RTL, RTI, etc.), in 255 op codes. The stack-relative addressing modes (along with 16-bit registers) open up new possibilities, and a further cool addition is that you can adjust the starting point of the "direct page" (like zero page, but you can make it start anywhere in the first 64K), even making it overlap the stack area, so you can get direct-page addressing modes even in the stack.