[hatari-devel] 68000: Wrong order of bus accesses for move.l xx,-(Ay)

[ Thread Index | Date Index | More lists.tuxfamily.org/hatari-devel Archives ]


Hello,

while reproducing a crash seen on a real ST using Hatari I found what I
think is a wrong order of bus accesses during MOVE.L (and possibly other
instructions) when using register pre-decrement address mode as the
destination. This is for ST emulation (68000 CPU), where a long word
access is split into two bus accesses.

Consider the following test program that does a...

MOVE.L D0,-(A0)

.... with A0 being 0. This will of course trigger a bus error. The access
address of this error read from the exception stack frame is then printed.

On a real ST, you'll see the message "Bus error at: $FFFFFFFE", i.e. the
least significant word is written first and causes the bus error. This
agrees with what's documented in "Yet Another Cycle Hunting Table". On
Hatari, however, you'll see "Bus error at: $FFFFFFFC", i.e. the most
significant word seems to be written first. (I tested this with the
latest Hatari build from antartica.no.)

Apart from a wrong stack frame, this can cause other issues, e.g. when
writing to hardware registers where the order of the accesses can be
relevant.

Regards
Christian
-- 
Christian Zietz  -  CHZ-Soft  -  czietz@xxxxxxx
WWW: http://www.chzsoft.de/
PGP/GnuPG-Key-ID: 0x52CB97F66DA025CA / 0x6DA025CA

Attachment: MM_BERR.PRG
Description: Binary data



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/