NorthWay wrote:
There seems to be a few "shortcomings" with the 68000 that I wonder if there has been given any further explainations for?
Interesting questions - I'll offer some answers, but based on gut feeling more than actual evidence!

Quote:
- Word aligned access for long/word. That was abandoned with the 68020. Is the handling of it transistor expensive, or was it 'ideologic'?
It's fairly expensive - getting load/store alignment working was one of the most painful parts of 832:
https://github.com/robinsonb5/EightThirtyTwo/blob/master/RTL/eightthirtytwo_aligner.vhdOK, it's a 32-bit rather than 16-bit CPU so there are more permutations to handle, but it's surprisingly difficult for something that sounds so simple! There might have been speed concerns as well as transistor count concerns, too.
Quote:
- No dbCC.l version. That seems at odds with something you want to be compiler friendly. Not added later either.
Agreed - you can't reliably know whether a branch target is within range until link time, so not having a long form to fall back on is a strange omission.
Quote:
- No conditional jump/jsr. Is this not common on other CPUs?
Do other CPUs have the semantic difference between branch and jump? I've always considered that a slightly strange facet of 68k.
Quote:
- No pre-increment nor post-decrement. Are these 'mathematically' equivalent and as such superfluous(sp???)?
I'd guess implementing both was simply considered wasteful so the more useful variant was implemented?
Quote:
- (a7) is the return address and not free/writeable after a subroutine entry, I guess this is because RTS is basically an "(a7)+" addressing mode instead of "+(a7)". What is most the common way of pushing to the stack, pre or post decrement?
Semantically A7 points to the item most recently written to the stack - having it point there rather than the next free entry maximises how far into the stack you can reach with a d8(a7) or d16(a7) - reaching backwards into the free stack area is less useful. So I'd argue that pre-decrement is the more useful variant, and it's what I implemented for 832.
Quote:
- Potentially odd offset branches. Why didn't they just define that byte/word size branch offsets were shifted once right and as such would span 512byte / 128K offsets?
Probably to share some addition logic without having to add extra shifts and multiplexers?