mirror of
https://github.com/MoleskiCoder/EightBit.git
synced 2025-01-26 22:31:38 +00:00
Small tidy up on the block instructions to separate PC changes.
Signed-off-by: Adrian.Conlon <adrian.conlon@gmail.com>
This commit is contained in:
parent
1643844eaf
commit
705351d179
@ -623,22 +623,17 @@ bool EightBit::Z80::cpir() {
|
|||||||
cpi();
|
cpi();
|
||||||
MEMPTR().word = pc.word;
|
MEMPTR().word = pc.word;
|
||||||
auto again = (F() & PF) && !(F() & ZF); // See CPI
|
auto again = (F() & PF) && !(F() & ZF); // See CPI
|
||||||
if (again) {
|
if (again)
|
||||||
MEMPTR().word--;
|
MEMPTR().word--;
|
||||||
pc.word -= 2;
|
|
||||||
}
|
|
||||||
return again;
|
return again;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EightBit::Z80::cpdr() {
|
bool EightBit::Z80::cpdr() {
|
||||||
cpd();
|
cpd();
|
||||||
MEMPTR().word = pc.word;
|
MEMPTR().word = pc.word - 1;
|
||||||
auto again = (F() & PF) && !(F() & ZF); // See CPD
|
auto again = (F() & PF) && !(F() & ZF); // See CPD
|
||||||
if (again) {
|
if (!again) {
|
||||||
MEMPTR().word--;
|
MEMPTR().word--;
|
||||||
pc.word -= 2;
|
|
||||||
} else {
|
|
||||||
MEMPTR().word -= 2;
|
|
||||||
}
|
}
|
||||||
return again;
|
return again;
|
||||||
}
|
}
|
||||||
@ -674,20 +669,16 @@ void EightBit::Z80::ldi() {
|
|||||||
bool EightBit::Z80::ldir() {
|
bool EightBit::Z80::ldir() {
|
||||||
ldi();
|
ldi();
|
||||||
auto again = (F() & PF) != 0;
|
auto again = (F() & PF) != 0;
|
||||||
if (again) { // See LDI
|
if (again) // See LDI
|
||||||
MEMPTR().word = pc.word - 1;
|
MEMPTR().word = pc.word - 1;
|
||||||
pc.word -= 2;
|
|
||||||
}
|
|
||||||
return again;
|
return again;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EightBit::Z80::lddr() {
|
bool EightBit::Z80::lddr() {
|
||||||
ldd();
|
ldd();
|
||||||
auto again = (F() & PF) != 0;
|
auto again = (F() & PF) != 0;
|
||||||
if (F() & PF) { // See LDR
|
if (again) // See LDR
|
||||||
MEMPTR().word = pc.word - 1;
|
MEMPTR().word = pc.word - 1;
|
||||||
pc.word -= 2;
|
|
||||||
}
|
|
||||||
return again;
|
return again;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -719,18 +710,12 @@ void EightBit::Z80::ind() {
|
|||||||
|
|
||||||
bool EightBit::Z80::inir() {
|
bool EightBit::Z80::inir() {
|
||||||
ini();
|
ini();
|
||||||
auto again = !(F() & ZF); // See INI
|
return !(F() & ZF); // See INI
|
||||||
if (again)
|
|
||||||
pc.word -= 2;
|
|
||||||
return again;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EightBit::Z80::indr() {
|
bool EightBit::Z80::indr() {
|
||||||
ind();
|
ind();
|
||||||
auto again = !(F() & ZF); // See IND
|
return !(F() & ZF); // See IND
|
||||||
if (again)
|
|
||||||
pc.word -= 2;
|
|
||||||
return again;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma endregion Block input instructions
|
#pragma endregion Block input instructions
|
||||||
@ -761,18 +746,12 @@ void EightBit::Z80::outd() {
|
|||||||
|
|
||||||
bool EightBit::Z80::otir() {
|
bool EightBit::Z80::otir() {
|
||||||
outi();
|
outi();
|
||||||
auto again = !(F() & ZF); // See OUTI
|
return !(F() & ZF); // See OUTI
|
||||||
if (again)
|
|
||||||
pc.word -= 2;
|
|
||||||
return again;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EightBit::Z80::otdr() {
|
bool EightBit::Z80::otdr() {
|
||||||
outd();
|
outd();
|
||||||
auto again = !(F() & ZF); // See OUTD
|
return !(F() & ZF); // See OUTD
|
||||||
if (again)
|
|
||||||
pc.word -= 2;
|
|
||||||
return again;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma endregion Block output instructions
|
#pragma endregion Block output instructions
|
||||||
@ -1105,12 +1084,16 @@ void EightBit::Z80::executeED(int x, int y, int z, int p, int q) {
|
|||||||
ldd();
|
ldd();
|
||||||
break;
|
break;
|
||||||
case 6: // LDIR
|
case 6: // LDIR
|
||||||
if (ldir())
|
if (ldir()) {
|
||||||
|
pc.word -= 2;
|
||||||
cycles += 5;
|
cycles += 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 7: // LDDR
|
case 7: // LDDR
|
||||||
if (lddr())
|
if (lddr()) {
|
||||||
|
pc.word -= 2;
|
||||||
cycles += 5;
|
cycles += 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1123,12 +1106,16 @@ void EightBit::Z80::executeED(int x, int y, int z, int p, int q) {
|
|||||||
cpd();
|
cpd();
|
||||||
break;
|
break;
|
||||||
case 6: // CPIR
|
case 6: // CPIR
|
||||||
if (cpir())
|
if (cpir()) {
|
||||||
|
pc.word -= 2;
|
||||||
cycles += 5;
|
cycles += 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 7: // CPDR
|
case 7: // CPDR
|
||||||
if (cpdr())
|
if (cpdr()) {
|
||||||
|
pc.word -= 2;
|
||||||
cycles += 5;
|
cycles += 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1141,12 +1128,16 @@ void EightBit::Z80::executeED(int x, int y, int z, int p, int q) {
|
|||||||
ind();
|
ind();
|
||||||
break;
|
break;
|
||||||
case 6: // INIR
|
case 6: // INIR
|
||||||
if (inir())
|
if (inir()) {
|
||||||
|
pc.word -= 2;
|
||||||
cycles += 5;
|
cycles += 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 7: // INDR
|
case 7: // INDR
|
||||||
if (indr())
|
if (indr()) {
|
||||||
|
pc.word -= 2;
|
||||||
cycles += 5;
|
cycles += 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1159,12 +1150,16 @@ void EightBit::Z80::executeED(int x, int y, int z, int p, int q) {
|
|||||||
outd();
|
outd();
|
||||||
break;
|
break;
|
||||||
case 6: // OTIR
|
case 6: // OTIR
|
||||||
if (otir())
|
if (otir()) {
|
||||||
|
pc.word -= 2;
|
||||||
cycles += 5;
|
cycles += 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 7: // OTDR
|
case 7: // OTDR
|
||||||
if (otdr())
|
if (otdr()) {
|
||||||
|
pc.word -= 2;
|
||||||
cycles += 5;
|
cycles += 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user