◄ WORLD V · SONNY 5DART 464 · a helldive at the net

LONG ADDRESSING reach any bank in the operand — 24-bit absolute and [dp] indirect-long

Beyond the bank registers, the 65816 adds addressing modes that carry a full 24-bit address in the instruction itself — absolute long (a 3-byte operand) and indirect long [dp] (a 24-bit pointer in the direct page). These reach any byte of the 16MB space regardless of the current data bank, which is how a program jumps to far data or code without first reloading DBR. Where the 6502 had one 64KB window and modes that stayed inside it, the 65816 has modes that name the whole space. Addressing that spans banks.

THE TECHNIQUE absolute long & [dp] indirect-long — 24-bit operands, any bank

The demo forms an absolute-long address (bank 1, $8000 → 0x018000) reaching into a bank above the first 64KB: live demo


HISTORY & CREDIT 65C816 long addressing modes

“Addressing modes stay inside the current bank.” — long modes carry a 24-bit address and reach the whole 16MB directly. cited

absolute long · a 3-byte operand bank:hi:lo — names any of 16MB.
indirect long · [dp] — a 24-bit pointer stored in the direct page.
the freedom · reach far data/code without reloading the data bank register.

An address wide enough to name the whole space carried in the instruction — modes that cross banks. encoding

RECOMMEND FOR I-13 the long operand, on the compiler

On the canonical compiler, an absolute-long operand (bank 1, $8000) forms 0x018000 (98304), above the first 64KB:

$ i13 run pm_longaddressing.i13 # (bank<<16)|(hi<<8)|lo RUN OK · 25 step(s) · peak stack 4 · call depth 1 longaddr = 98304 -- 0x018000, bank 1 reaches_bank1 = 1 -- above the first 64KB
Recommend as a NULL — wider address encodings. Long addressing modes are new encodings of the effective address (B44) that reach a larger space (B40); the address computed is a pinned value. No carried channel or new invariant. NULL — the permutation giving instructions that name the whole 16MB.