I decided to implement a more complete test for all permutations of X: Y: P: internal/external access, to see if there are problems specific to one of those memory spaces...
Here are the results (I think they are interesting).
Hatari (latest):
X:INT, Y:INT, P:INT = 16.0 MIPS = 2 cyc = 100%
X:EXT, Y:INT, P:INT = 16.0 MIPS = 2 cyc = 100%
X:INT, Y:EXT, P:INT = 16.0 MIPS = 2 cyc = 100%
X:EXT, Y:EXT, P:INT = 5.3 MIPS = 6 cyc = 67%
X:INT, Y:INT, P:EXT = 16.0 MIPS = 2 cyc = 100%
X:EXT, Y:INT, P:EXT = 8.0 MIPS = 4 cyc = 100%
X:INT, Y:EXT, P:EXT = 8.0 MIPS = 4 cyc = 100%
X:EXT, Y:EXT, P:EXT = 4.0 MIPS = 8 cyc = 75%
Falcon030:
X:INT, Y:INT, P:INT = 16.0 MIPS = 2 cyc = 100%
X:EXT, Y:INT, P:INT = 16.0 MIPS = 2 cyc = 100%
X:INT, Y:EXT, P:INT = 16.0 MIPS = 2 cyc = 100%
X:EXT, Y:EXT, P:INT = 8.0 MIPS = 4 cyc = 100%
X:INT, Y:INT, P:EXT = 16.0 MIPS = 2 cyc = 100%
X:EXT, Y:INT, P:EXT = 8.0 MIPS = 4 cyc = 100%
X:INT, Y:EXT, P:EXT = 8.0 MIPS = 4 cyc = 100%
X:EXT, Y:EXT, P:EXT = 5.3 MIPS = 6 cyc = 100%
...so I conclude there is a problem in Hatari calculating penalties when both X: and Y: are accessed together.
however... P: access penalty for X: or Y: independently seems to be correct.
This suggests the problem is not simply caused by external access penalty calculation, but how those values are derived in the first place?
D.