M740 fixes (mostly related to 6563dfe9cf)

This commit is contained in:
AJR 2022-09-06 22:09:36 -04:00
parent 807c0a050f
commit 7b2aae2fd6
2 changed files with 26 additions and 26 deletions

View File

@ -90,37 +90,37 @@ void m740_device::do_sbc_dt(uint8_t val)
{
uint8_t c = P & F_C ? 0 : 1;
P &= ~(F_N|F_V|F_Z|F_C);
uint16_t diff = TMP2 - val - c;
uint8_t al = (TMP2 & 15) - (val & 15) - c;
uint16_t diff = TMP - val - c;
uint8_t al = (TMP & 15) - (val & 15) - c;
if(int8_t(al) < 0)
al -= 6;
uint8_t ah = (TMP2 >> 4) - (val >> 4) - (int8_t(al) < 0);
uint8_t ah = (TMP >> 4) - (val >> 4) - (int8_t(al) < 0);
if(!uint8_t(diff))
P |= F_Z;
else if(diff & 0x80)
P |= F_N;
if((TMP2^val) & (TMP2^diff) & 0x80)
if((TMP^val) & (TMP^diff) & 0x80)
P |= F_V;
if(!(diff & 0xff00))
P |= F_C;
if(int8_t(ah) < 0)
ah -= 6;
TMP2 = (ah << 4) | (al & 15);
TMP = (ah << 4) | (al & 15);
}
void m740_device::do_sbc_ndt(uint8_t val)
{
uint16_t diff = TMP2 - val - (P & F_C ? 0 : 1);
uint16_t diff = TMP - val - (P & F_C ? 0 : 1);
P &= ~(F_N|F_V|F_Z|F_C);
if(!uint8_t(diff))
P |= F_Z;
else if(int8_t(diff) < 0)
P |= F_N;
if((TMP2^val) & (TMP2^diff) & 0x80)
if((TMP^val) & (TMP^diff) & 0x80)
P |= F_V;
if(!(diff & 0xff00))
P |= F_C;
TMP2 = diff;
TMP = diff;
}
void m740_device::do_sbct(uint8_t val)
@ -135,37 +135,37 @@ void m740_device::do_adc_dt(uint8_t val)
{
uint8_t c = P & F_C ? 1 : 0;
P &= ~(F_N|F_V|F_Z|F_C);
uint8_t al = (TMP2 & 15) + (val & 15) + c;
uint8_t al = (TMP & 15) + (val & 15) + c;
if(al > 9)
al += 6;
uint8_t ah = (TMP2 >> 4) + (val >> 4) + (al > 15);
if(!uint8_t(TMP2 + val + c))
uint8_t ah = (TMP >> 4) + (val >> 4) + (al > 15);
if(!uint8_t(TMP + val + c))
P |= F_Z;
else if(ah & 8)
P |= F_N;
if(~(TMP2^val) & (TMP2^(ah << 4)) & 0x80)
if(~(TMP^val) & (TMP^(ah << 4)) & 0x80)
P |= F_V;
if(ah > 9)
ah += 6;
if(ah > 15)
P |= F_C;
TMP2 = (ah << 4) | (al & 15);
TMP = (ah << 4) | (al & 15);
}
void m740_device::do_adc_ndt(uint8_t val)
{
uint16_t sum;
sum = TMP2 + val + (P & F_C ? 1 : 0);
sum = TMP + val + (P & F_C ? 1 : 0);
P &= ~(F_N|F_V|F_Z|F_C);
if(!uint8_t(sum))
P |= F_Z;
else if(int8_t(sum) < 0)
P |= F_N;
if(~(TMP2^val) & (TMP2^sum) & 0x80)
if(~(TMP^val) & (TMP^sum) & 0x80)
P |= F_V;
if(sum & 0xff00)
P |= F_C;
TMP2 = sum;
TMP = sum;
}
void m740_device::do_adct(uint8_t val)

View File

@ -1164,7 +1164,7 @@ adct_aba
TMP = set_h(TMP, read_pc());
TMP2 = read_data(TMP);
TMP = read(X);
read_dummy(TMP);
read_dummy(X);
do_adct(TMP2);
write(X, TMP);
prefetch();
@ -1220,11 +1220,11 @@ adct_idy
prefetch();
adct_imm
TMP = read_pc();
TMP2 = read(X);
TMP2 = read_pc();
TMP = read(X);
read_dummy(X);
do_adct(TMP);
write(X, TMP2);
do_adct(TMP2);
write(X, TMP);
prefetch();
adct_zpg
@ -1390,7 +1390,7 @@ cmpt_idy
read_dummy(set_l(TMP, TMP+Y));
TMP2 = read_data(TMP+Y);
TMP = read(X);
do_cmp(TMP, read(TMP2+Y));
do_cmp(TMP, TMP2);
prefetch();
cmpt_imm
@ -1748,11 +1748,11 @@ sbct_idy
prefetch();
sbct_imm
TMP = read_pc();
TMP2 = read(X);
TMP2 = read_pc();
TMP = read(X);
read_dummy(X);
do_sbct(TMP);
write(X, TMP2);
do_sbct(TMP2);
write(X, TMP);
prefetch();
sbct_zpg