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 '19 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 '19 at 6:56

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

  • I've accepted this answer not only because you give significantly more detail than the other answer, but also because the 68HC11 mentioned in the other answer is an extension of the earlier 6801/03 line.
    – cjs
    Aug 3 '19 at 13:17

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.


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.