dividend <<= 1;
// If carry from shift
- if ((uae_s32)temp < 0)
+ if ((uae_s32)temp < 0) {
dividend -= hdivisor;
- else {
+ } else {
mcycles += 2;
if (dividend >= hdivisor) {
dividend -= hdivisor;
/* DIVU overflow
*
* 68000: V=1, N=1, C=0, Z=0
- * 68010: V=1, N=1, C=0, Z=0
+ * 68010: V=1, N=(dividend >=0 or divisor >= 0), C=0, Z=0
* 68020: V=1, C=0, Z=0, N=X
* 68040: V=1, C=0, NZ not modified.
* 68060: V=1, C=0, NZ not modified.
SET_NFLG(1);
} else if (currprefs.cpu_model == 68010) {
SET_VFLG(1);
- SET_NFLG(1);
+ if ((uae_s32)dividend < 0 && (uae_s16)divisor < 0) {
+ SET_NFLG(0);
+ } else {
+ SET_NFLG(1);
+ }
SET_ZFLG(0);
SET_CFLG(0);
} else {
* DIVS overflow
*
* 68000: V=1, C=0, N=1, Z=0
+ * 68010: V=1, C=0, N=0, Z=
* 68020: V=1, C=0, ZN = X
* 68040: V=1, C=0. NZ not modified.
* 68060: V=1, C=0, NZ not modified.