Corrected (I think?) in Sim68K v5.12.4.
I did not write the original code which makes it more problematic to debug. I am not 100% sure my changes are correct.
Correction
UTILS.CPP: cc_update function,
Code:
switch (c) {
case CASE_2 : // ROR, ROXR CK 5-2012
r %= (m+2);
c_bit = ((dest >> (r-1)) & 1) ? true : false;
break;
case CASE_3 : // LSL, ROL, ROXL CK 5-2012
r %= (m+2);
c_bit = ((dest >> (m-r+1)) & 1) ? true : false;
break;
case CASE_7 : // ASR CK 1-25-2008
if (r > m)
r = m+1;
c_bit = ((dest >> (r-1)) & 1) ? true : false;
break;
case CASE_8 : // LSR CK 5-2012
if (r > m+1) // if shift count > size
c_bit = false;
else {
r %= (m+2);
c_bit = ((dest >> (r-1)) & 1) ? true : false;
}
break;
};
CODE7.CPP, SHIFT_ROT function,
Code:
} else { // else shift right
if (shift_count >= 32) // 68000 does modulo 64 shift, c++ does modulo 32
shift_result = 0;
else
shift_result = (unsigned)(EV1 & size) >> shift_count;
put (EA1, shift_result, size);
value_of (EA1, &EV1, size);
cc_update (GEN, GEN, GEN, ZER, CASE_8, // ck 5-2102
source, dest, EV1, size, shift_count);
}
break;