mirror of
https://github.com/holub/mame
synced 2025-06-17 01:38:59 +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;
|
uint8_t c = P & F_C ? 0 : 1;
|
||||||
P &= ~(F_N|F_V|F_Z|F_C);
|
P &= ~(F_N|F_V|F_Z|F_C);
|
||||||
uint16_t diff = TMP2 - val - c;
|
uint16_t diff = TMP - val - c;
|
||||||
uint8_t al = (TMP2 & 15) - (val & 15) - c;
|
uint8_t al = (TMP & 15) - (val & 15) - c;
|
||||||
if(int8_t(al) < 0)
|
if(int8_t(al) < 0)
|
||||||
al -= 6;
|
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))
|
if(!uint8_t(diff))
|
||||||
P |= F_Z;
|
P |= F_Z;
|
||||||
else if(diff & 0x80)
|
else if(diff & 0x80)
|
||||||
P |= F_N;
|
P |= F_N;
|
||||||
if((TMP2^val) & (TMP2^diff) & 0x80)
|
if((TMP^val) & (TMP^diff) & 0x80)
|
||||||
P |= F_V;
|
P |= F_V;
|
||||||
if(!(diff & 0xff00))
|
if(!(diff & 0xff00))
|
||||||
P |= F_C;
|
P |= F_C;
|
||||||
if(int8_t(ah) < 0)
|
if(int8_t(ah) < 0)
|
||||||
ah -= 6;
|
ah -= 6;
|
||||||
TMP2 = (ah << 4) | (al & 15);
|
TMP = (ah << 4) | (al & 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
void m740_device::do_sbc_ndt(uint8_t val)
|
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);
|
P &= ~(F_N|F_V|F_Z|F_C);
|
||||||
if(!uint8_t(diff))
|
if(!uint8_t(diff))
|
||||||
P |= F_Z;
|
P |= F_Z;
|
||||||
else if(int8_t(diff) < 0)
|
else if(int8_t(diff) < 0)
|
||||||
P |= F_N;
|
P |= F_N;
|
||||||
if((TMP2^val) & (TMP2^diff) & 0x80)
|
if((TMP^val) & (TMP^diff) & 0x80)
|
||||||
P |= F_V;
|
P |= F_V;
|
||||||
if(!(diff & 0xff00))
|
if(!(diff & 0xff00))
|
||||||
P |= F_C;
|
P |= F_C;
|
||||||
TMP2 = diff;
|
TMP = diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
void m740_device::do_sbct(uint8_t val)
|
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;
|
uint8_t c = P & F_C ? 1 : 0;
|
||||||
P &= ~(F_N|F_V|F_Z|F_C);
|
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)
|
if(al > 9)
|
||||||
al += 6;
|
al += 6;
|
||||||
uint8_t ah = (TMP2 >> 4) + (val >> 4) + (al > 15);
|
uint8_t ah = (TMP >> 4) + (val >> 4) + (al > 15);
|
||||||
if(!uint8_t(TMP2 + val + c))
|
if(!uint8_t(TMP + val + c))
|
||||||
P |= F_Z;
|
P |= F_Z;
|
||||||
else if(ah & 8)
|
else if(ah & 8)
|
||||||
P |= F_N;
|
P |= F_N;
|
||||||
if(~(TMP2^val) & (TMP2^(ah << 4)) & 0x80)
|
if(~(TMP^val) & (TMP^(ah << 4)) & 0x80)
|
||||||
P |= F_V;
|
P |= F_V;
|
||||||
if(ah > 9)
|
if(ah > 9)
|
||||||
ah += 6;
|
ah += 6;
|
||||||
if(ah > 15)
|
if(ah > 15)
|
||||||
P |= F_C;
|
P |= F_C;
|
||||||
TMP2 = (ah << 4) | (al & 15);
|
TMP = (ah << 4) | (al & 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
void m740_device::do_adc_ndt(uint8_t val)
|
void m740_device::do_adc_ndt(uint8_t val)
|
||||||
{
|
{
|
||||||
uint16_t sum;
|
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);
|
P &= ~(F_N|F_V|F_Z|F_C);
|
||||||
if(!uint8_t(sum))
|
if(!uint8_t(sum))
|
||||||
P |= F_Z;
|
P |= F_Z;
|
||||||
else if(int8_t(sum) < 0)
|
else if(int8_t(sum) < 0)
|
||||||
P |= F_N;
|
P |= F_N;
|
||||||
if(~(TMP2^val) & (TMP2^sum) & 0x80)
|
if(~(TMP^val) & (TMP^sum) & 0x80)
|
||||||
P |= F_V;
|
P |= F_V;
|
||||||
if(sum & 0xff00)
|
if(sum & 0xff00)
|
||||||
P |= F_C;
|
P |= F_C;
|
||||||
TMP2 = sum;
|
TMP = sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
void m740_device::do_adct(uint8_t val)
|
void m740_device::do_adct(uint8_t val)
|
||||||
|
@ -1164,7 +1164,7 @@ adct_aba
|
|||||||
TMP = set_h(TMP, read_pc());
|
TMP = set_h(TMP, read_pc());
|
||||||
TMP2 = read_data(TMP);
|
TMP2 = read_data(TMP);
|
||||||
TMP = read(X);
|
TMP = read(X);
|
||||||
read_dummy(TMP);
|
read_dummy(X);
|
||||||
do_adct(TMP2);
|
do_adct(TMP2);
|
||||||
write(X, TMP);
|
write(X, TMP);
|
||||||
prefetch();
|
prefetch();
|
||||||
@ -1220,11 +1220,11 @@ adct_idy
|
|||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
adct_imm
|
adct_imm
|
||||||
TMP = read_pc();
|
TMP2 = read_pc();
|
||||||
TMP2 = read(X);
|
TMP = read(X);
|
||||||
read_dummy(X);
|
read_dummy(X);
|
||||||
do_adct(TMP);
|
do_adct(TMP2);
|
||||||
write(X, TMP2);
|
write(X, TMP);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
adct_zpg
|
adct_zpg
|
||||||
@ -1390,7 +1390,7 @@ cmpt_idy
|
|||||||
read_dummy(set_l(TMP, TMP+Y));
|
read_dummy(set_l(TMP, TMP+Y));
|
||||||
TMP2 = read_data(TMP+Y);
|
TMP2 = read_data(TMP+Y);
|
||||||
TMP = read(X);
|
TMP = read(X);
|
||||||
do_cmp(TMP, read(TMP2+Y));
|
do_cmp(TMP, TMP2);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
cmpt_imm
|
cmpt_imm
|
||||||
@ -1748,11 +1748,11 @@ sbct_idy
|
|||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
sbct_imm
|
sbct_imm
|
||||||
TMP = read_pc();
|
TMP2 = read_pc();
|
||||||
TMP2 = read(X);
|
TMP = read(X);
|
||||||
read_dummy(X);
|
read_dummy(X);
|
||||||
do_sbct(TMP);
|
do_sbct(TMP2);
|
||||||
write(X, TMP2);
|
write(X, TMP);
|
||||||
prefetch();
|
prefetch();
|
||||||
|
|
||||||
sbct_zpg
|
sbct_zpg
|
||||||
|
Loading…
Reference in New Issue
Block a user