20

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

hippietrail
  • 6,646
  • 2
  • 21
  • 60
Anthony
  • 455
  • 4
  • 9
  • 3
    "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 '20 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 '20 at 14:26
  • The funny thing about the answers below is again lacking the strict and universally-accepted definition of what a 8-bit CPU is and lacking the way how to define a "bitness" of the specific CPU. We can see there, for example, definitely at least 16-bit 68008 (with the only difference to 68000 being the 8bit external bus). – lvd Feb 21 '20 at 15:28
  • @lvd That and a 20 bit address bus. But you're right. 8-bitness is more of a feeling - like many other words we assume in every day use as clear defined. Looking close reveals it as another self-deception. – Raffzahn Feb 21 '20 at 16:28
  • 3
    @lvd what is "the strict and universally-accepted definition of what a 8-bit CPU is"? – UncleBod Feb 21 '20 at 18:36
  • @UncleBod can you simply make a definition to distinguish between 8bit and non-8bit CPUs? Nobody can, since once such definition is spoken, there appear exceptions to it. – lvd Feb 21 '20 at 19:23
  • @lvd Thanks for clarification - your original wording sounded as if you had such a definition, which would have been quite astonishing :) – Raffzahn Feb 21 '20 at 20:36
  • 4
    "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 '20 at 01: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 '20 at 22:18
  • 2
    @Raffzahn register size seems -- and has to me since the 1980s -- the obvious answer to what defines a CPU's "bittness". That makes the 68008 through 68060 (which are upward binary compatible, without changing modes) all be 32 bit CPUs, no matter the data bus width. – RonJohn Feb 24 '20 at 14:47
  • @RonJohn True, that's the plain ISA sight, ignoring hardware implementation. As classic /360 user I prefer the same way. But even then, early 68k are 32/24 bit while late are 32/32, as valid address size is part of the ISA. It's usually a good view, but some CPUs are still hard to tackle. But even with the ISA as main guideline, hardware implementation does play a role in judging. Internal and external bus sizes do matter. It needs to be nailed down with a lot of attributes, or handled, as said, by personal preference. Either way, to make public question work, it needs to be specified. – Raffzahn Feb 24 '20 at 14:57
  • Bank switching of RAM use to be common by writing the bank number to an memory mapped io register. – Ian Ringrose Feb 24 '20 at 15:46
  • Was there anything on the 68000 that would allow it to be distinguished from a CPU which used 32 bit addresses, placed in a system that didn't bother to connect the top eight bits to anything? – supercat Jul 02 '20 at 04:25

4 Answers4

24

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

Raffzahn
  • 222,541
  • 22
  • 631
  • 918
  • 1
    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 '20 at 22:44
  • Can’t remember the processor in the apple /// computer, but it could address at least 256 KByte. Wikipedia says 6502B and 512KB. – gnasher729 Mar 02 '24 at 17:54
13

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
phuclv
  • 3,592
  • 1
  • 19
  • 30
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).

Radovan Garabík
  • 4,993
  • 1
  • 16
  • 35
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.

Krackout
  • 1,528
  • 11
  • 20