18

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...

  • 2
    "how would I go about researching this on my own?" as Raffzahn wrote: learn about CPUs, but also, make a definition what YOU mean with 8-bit, because there are some different ideas what to look at for that definition. – UncleBod Feb 21 at 10:56
  • 3
    The 65C816 is the obvious one, though it is more an 8/16-bit hybrid. I think it's the only one that saw significant usage as an enhancement to its 8-bit precursor. – Brian H Feb 21 at 14:26
  • 3
    @lvd what is "the strict and universally-accepted definition of what a 8-bit CPU is"? – UncleBod Feb 21 at 18:36
  • 3
    "Or was that something that didn't appear until later CPUs (around the time of the 286 maybe)?" - that eliminates any CPU introduced after February 1, 1982. So 68008 is out, 65816 is out, 64180 is out, AVR is out. 8088 is also out because it only had 20 bit addressing. No wonder you are having trouble finding an example! – Bruce Abbott Feb 22 at 1:26
  • 1
    Perhaps it would be more correct to formulate this way - an 8-bit data bus, an 8-bit ALU, but a flat 24-bit memory model and an address bus? Separately, it is curious that the DIP-48 cases were quite accessible in the mid-70s. – Wheelmagister Feb 23 at 22:18
22

Were there any 8-bit CPUs with 24-bit addressing?

Not many. Most prominent and best fitting examples would be

  • WDC 65816 of 1983

  • Hitachi 64180 of 1985 / Zilog Z180 of 1985 (only 19/20 bit)

  • eZ80 of 1998

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 Z800 of 1985 / Z280 of 1987 (19/24 bit address space)

  • 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:

Oh, and then there are CPUs with dynamic bus sizing, like

  • Members of the 68020 and 68030 family (32 bit address space) (*1).

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 sand 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.

  • 1
    Thanks and that list looks super interesting too! – Anthony Feb 21 at 16:31
  • Remove 64180 and Z180: those ICs do not have 24-bit addressing. Furthermore, the CPU in each is an enhanced Z80 which just has 16-bit addressing, not 24-bit as OP asked. The MMU within the IC translates this 16-bit to a 19/20-bit address bus. (I proposed this edit but it was rejected, after being peer reviewed by...@Raffzahn.) – TonyM Feb 27 at 22:44
11

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

  1. 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.

  2. (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.)

  3. (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

ATmega256x address

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
  • 4
    AVR is a very recent CPU though. Certainly after the 286. It would not be considered retro by anyone – slebetman Feb 22 at 11:58
  • 2
    I don't really see how this differs practically from normal bankswitching. – pipe Feb 22 at 20:19
  • @pipe because that'll make external addressing more difficult – phuclv Feb 23 at 1:08
9

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).

7

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.