mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
M740 fixes (mostly related to 6563dfe9cf
)
This commit is contained in:
parent
807c0a050f
commit
7b2aae2fd6
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user