Having only a single index register and no addressing mode indexing against 16-bit addresses in memory seems to have been widely considered a primary reason that the Motorola 6800 fared poorly in benchmarks against its contemporiries, the Intel 8080 and the MOS 6502. (It was, indeed, an explicit design goal of the 6502 to mitigate this problem with the 6800.)

I thought I had seen a microprocessor or microcontroller object-compatible with the 6800 that added an additional index register. However, I no longer seem to be able to find a reference for this, if indeed I'd really seen it in the first place.

Does anybody know of a microprocessor or microcontroller from the '70s or '80s, manufactured by Motorola or anyone else, that added another index register and/or an additional addressing mode that would mitigate this problem?

To be clear, processors such as the 6805 and 6809 that do not run 6800 object code do not qualify. (The 6805 was "mostly" like a 6800—much closer than the 6809—and did fix the problem by adding a new indexing mode with a 16-bit offset to which X was added, like the 6502, but it also reduced the size of the X register to 8 bits.)

  • 1
    As a 6809 fan, I am curious what the importance of object compatibility is when the main question involves a feature the 6800 does not have. By definition, use of that feature would be incompatible, so what is the point? (I don't mean to sound argumentative; I simply don't understand.)
    – RichF
    Jul 30, 2019 at 5:23
  • @RichF I too am a 6809 fan, and your question is reasonable. The point would be to build a machine that runs 6800 software but can deal to some degree with the performance problems of the 6800 in simpler ways than porting 6800 code to the 6809. With a few extra opcodes it would be fairly easy to speed up existing software by adding some fairly simple conditional assembly if you have source, or even patching the binary if you don't.
    – cjs
    Jul 30, 2019 at 6:56

2 Answers 2


The main problem I found with having only one index register on the 6800 was having to constantly load and save source and destination addresses when doing a memory copy (though you could use SP as extra 'index' register so long as interrupts were disabled). Another thing that didn't help was that many instructions took longer than they could have.

The 6801/6803/68701 was a microcontroller based on the 6800 which had 10 extra instructions. It still only had the one index register, but some of the extra instructions made it easier to manipulate. ABX added B to X, PUSHX and PULX saved and restored it from the stack, and CPX set the Carry flag as well as N, Z and V flags. The 16 bit D register (concatenation of A and B) had indexed addressing modes for instructions such as LDD (load double) and ADDD (add double). Some instructions were also sped up, eg. STX to extended address only took 5 cycles instead of 6.

Hitachi's HD6303 had all the 6803 instructions and a few more, including XGDX (exchange D and X).


68HC11 should be opcode compatible and it has extra index register. But using the other index register requires an extra prefix byte to indicate non-default register.

  • Ah! That's the one I had seen!
    – cjs
    Jul 29, 2019 at 16:17
  • My first thought was the HC11, but I checked the opcode map and it's totally different from the 6800.
    – supercat
    Jul 30, 2019 at 2:43
  • 1
    @supercat then why does HC11 reference manual boasts executing all 6800 instructions?
    – Justme
    Jul 30, 2019 at 6:52
  • @supercat Wikipedia claims that "the HC11 instruction set is upward compatible with the 6800, with the addition of a Y index register.". This is confirmed by the reference manual §1.2, "In addition to executing all M6800 and M6801 instructions...." I also checked a few instructions in that manual against this table; NOP, AND, CMP, BRA, BMI, INC, JMP all match.
    – cjs
    Jul 30, 2019 at 8:10
  • 2
    @CurtJ.Sampson: Ah, I was confused by one table being transposed.
    – supercat
    Jul 30, 2019 at 14:19

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .