Or was that something that didn't appear until later CPUs (around the time of the 286 maybe)?
Also, how would I go about researching this on my own? It's not exactly something I can look up on DigiKey...
Retrocomputing Stack Exchange is a question and answer site for vintage-computer hobbyists interested in restoring, preserving, and using the classic computer and gaming systems of yesteryear. It only takes a minute to sign up.
Sign up to join this communityOr was that something that didn't appear until later CPUs (around the time of the 286 maybe)?
Also, how would I go about researching this on my own? It's not exactly something I can look up on DigiKey...
Were there any 8-bit CPUs with 24-bit addressing?
Not many. Most prominent and best fitting examples would be
Then there 8/16/32 bit hybrids - able to run 8 bit code and available with external 8 bit data bus, but as well with 16/32 bit code (extensions):
Zilog Z380 of 1993 (32 bit address space)
Of course there's always the age old discussion what makes a 8 bit CPU. No, I wont go there, but we have to recognise that bus width does make a valid argument about bitness:
Motorola 68008 (20 bit address space)
National 16008/32008
Oh, and then there are CPUs with dynamic bus sizing, like
They can adapt external bus size according to DTACK0/1 signals. By setting them always to 8 bit, the external data bus will be reduced to 8 bit, much like on a 68008 (*2).
Or was that something that didn't appear until later CPUs (around the time of the 286 maybe)?
If it's about timing, then others, like the mentioned 80286, had 24 bit address space way before even the first 8 Bit, like 65816 or 64180 escaped 16 bit address space.
Also, how would I go about researching this on my own?
Learn about CPU's. Address range is just one side of the multi dimensional picture.
A good start may be John Bayko's list of Great Microprocessors of the Past and Present. A must read for anyone wanting to get a rough overview about the wonderful CPU world that has once been. It hasn't got much update since 2003, but then again, this is about the cool stuff, isn't it?
*1 - Later 68040/060 lost this ability, but Motorola did provide a 'Bus Sizer' chip named MC68150 to translate here. To bad, that baby was already extreme rare back then and made of unobtanium today. Still it may be a cool hack to plug a 68060 into an Apple II, wouldn't it?
*2 - In some way this invalidates the whole argument about data bus width as main criteria.
Yes. AVR microcontrollers with more than 64KB of memory do have 24-bit addressing. They have some additional registers for that purpose
- RAMPX, RAMPY, RAMPZ, RAMPD and EIND: 8-bit segment registers that are prepended to 16-bit addresses in order to form 24-bit addresses; only available in parts with large address spaces.
https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set#Special_purpose_registers
Only a few variants support 24-bit addressing, mainly the ATmega256x or XMEGA series
Models with >64 KiB of ROM add the ELPM instruction and corresponding RAMPZ register. LPM instructions zero-extend the ROM address in Z; ELPM instructions prepend the RAMPZ register for high bits. This is not the same thing as the more general LPM instruction; there exist "classic" models with only the zero-operand form of ELPM (ATmega103 and at43usb320). When auto-increment is available (most models), it updates the entire 24-bit address including RAMPZ.
(Rare) models with >128 KiB of ROM have a 3-byte program counter. Subroutine calls and returns use an additional byte of stack space, there is a new EIND register to provide additional high bits for indirect jumps and calls, and there are new extended instructions EIJMP and EICALL which use EIND:Z as the destination address. (The previous IJMP and ICALL instructions use zero-extended Z.)
(Rare) models with >64 KiB of RAM address space extend the 16-bit RAM addressing limits with RAMPX, RAMPY, RAMPZ and RAMPD registers. These provide additional high bits for addressing modes which use the X, Y, or Z register pairs, respectively, or the direct addressing instructions LDS/STS. Unlike ROM access, there are no distinct "extended" instructions; instead the RAMP registers are used unconditionally.
https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set#Memory_addressing_instructions
For example the ATmega2560/2561 is an 8-bit MCU with 16-bit data address bus and 24-bit code address bus. The address is composed of 3 registers: RAMPZ, ZH and ZL like this
Another example is the 8-bit Atmel XMEGA A which supports "Direct addressing of up to 16MB of program memory and 16MB of data memory" i.e. 24-bit address bus for both code and data. The internal RAM is tiny, so if you want that huge amount you'll have to use external RAM via EBI (External Bus Interface)
24.1 Features
- Supports SRAM up to:
- 512KB using 2-port EBI
- 16MB using 3-port EBI
- Supports SDRAM up to:
- 128Mb using 3-port EBI
There is eZ80, a Z80 compatible successor, generally considered an 8-bit CPU, and it features 24 bit address space (though not in the Z80 compatible mode).
Motorola 68008, a cheaper 68000 variant. Not exactly as you described it, 20-bit and later 22 bit address bus I think and a 8-bit data bus.