update spc700::SBCM
This commit is contained in:
@@ -57,18 +57,6 @@ void Spc700::ADC(uint16_t adr) {
|
|||||||
PSW.N = (A & 0x80);
|
PSW.N = (A & 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
// void spc_adcm(uint16_t dst, uint8_t value) {
|
|
||||||
// uint8_t applyOn = read(dst);
|
|
||||||
// int result = applyOn + value + PSW.C;
|
|
||||||
// spc->v =
|
|
||||||
// (applyOn & 0x80) == (value & 0x80) && (value & 0x80) != (result &
|
|
||||||
// 0x80);
|
|
||||||
// PSW.H = ((applyOn & 0xf) + (value & 0xf) + PSW.C) > 0xf;
|
|
||||||
// PSW.C = result > 0xff;
|
|
||||||
// spc_write(dst, result);
|
|
||||||
// spc_setZN(result);
|
|
||||||
// }
|
|
||||||
|
|
||||||
void Spc700::ADCM(uint16_t& dest, uint8_t operand) {
|
void Spc700::ADCM(uint16_t& dest, uint8_t operand) {
|
||||||
uint8_t applyOn = read(dest);
|
uint8_t applyOn = read(dest);
|
||||||
int result = applyOn + operand + PSW.C;
|
int result = applyOn + operand + PSW.C;
|
||||||
@@ -79,18 +67,8 @@ void Spc700::ADCM(uint16_t& dest, uint8_t operand) {
|
|||||||
write(dest, result);
|
write(dest, result);
|
||||||
PSW.Z = ((result & 0xFF) == 0);
|
PSW.Z = ((result & 0xFF) == 0);
|
||||||
PSW.N = (result & 0x80);
|
PSW.N = (result & 0x80);
|
||||||
// dest = result & 0xFF;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// void spc_sbcm(uint16_t dst, uint8_t value) {
|
|
||||||
// value ^= 0xff;
|
|
||||||
// uint8_t applyOn = read(dst);
|
|
||||||
// int result = applyOn + value + PSW.C;
|
|
||||||
// spc->v = (applyOn & 0x80) == (value & 0x80) && (value & 0x80) != (result &
|
|
||||||
// 0x80); PSW.H = ((applyOn & 0xf) + (value & 0xf) + PSW.C) > 0xf; PSW.C =
|
|
||||||
// result > 0xff; spc_write(dst, result); spc_setZN(result);
|
|
||||||
// }
|
|
||||||
|
|
||||||
void Spc700::SBC(uint16_t adr) {
|
void Spc700::SBC(uint16_t adr) {
|
||||||
uint8_t value = read(adr) ^ 0xff;
|
uint8_t value = read(adr) ^ 0xff;
|
||||||
int result = A + value + PSW.C;
|
int result = A + value + PSW.C;
|
||||||
@@ -103,13 +81,16 @@ void Spc700::SBC(uint16_t adr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Spc700::SBCM(uint16_t& dest, uint8_t operand) {
|
void Spc700::SBCM(uint16_t& dest, uint8_t operand) {
|
||||||
uint8_t value = read(dest) - operand - (1 - PSW.C);
|
operand ^= 0xff;
|
||||||
PSW.V = ((read(dest) ^ value) & (read(dest) ^ operand) & 0x80);
|
uint8_t applyOn = read(dest);
|
||||||
PSW.C = (value < 0x100);
|
int result = applyOn + operand + PSW.C;
|
||||||
PSW.Z = ((value & 0xFF) == 0);
|
PSW.V = (applyOn & 0x80) == (operand & 0x80) &&
|
||||||
PSW.N = (value & 0x80);
|
(operand & 0x80) != (operand & 0x80);
|
||||||
PSW.H = ((read(dest) ^ operand ^ value) & 0x10);
|
PSW.H = ((applyOn & 0xF) + (operand & 0xF) + PSW.C) > 0xF;
|
||||||
write(dest, value);
|
PSW.C = result > 0xFF;
|
||||||
|
write(dest, result);
|
||||||
|
PSW.Z = ((A & 0xFF) == 0);
|
||||||
|
PSW.N = (A & 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Spc700::CMPX(uint16_t adr) {
|
void Spc700::CMPX(uint16_t adr) {
|
||||||
@@ -145,12 +126,6 @@ void Spc700::CMP(uint16_t adr) {
|
|||||||
PSW.N = (result & 0x80);
|
PSW.N = (result & 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
// void spc_andm(uint16_t dst, uint8_t value) {
|
|
||||||
// uint8_t result = read(dst) & value;
|
|
||||||
// spc_write(dst, result);
|
|
||||||
// spc_setZN(result);
|
|
||||||
// }
|
|
||||||
|
|
||||||
void Spc700::AND(uint16_t adr) {
|
void Spc700::AND(uint16_t adr) {
|
||||||
A &= read(adr);
|
A &= read(adr);
|
||||||
PSW.Z = (A == 0);
|
PSW.Z = (A == 0);
|
||||||
@@ -164,17 +139,6 @@ void Spc700::ANDM(uint16_t dest, uint8_t operand) {
|
|||||||
PSW.N = (result & 0x80);
|
PSW.N = (result & 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
// void spc_or(uint16_t adr) {
|
|
||||||
// A |= read(adr);
|
|
||||||
// spc_setZN(A);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// void spc_orm(uint16_t dst, uint8_t value) {
|
|
||||||
// uint8_t result = read(dst) | value;
|
|
||||||
// spc_write(dst, result);
|
|
||||||
// spc_setZN(result);
|
|
||||||
// }
|
|
||||||
|
|
||||||
void Spc700::OR(uint16_t adr) {
|
void Spc700::OR(uint16_t adr) {
|
||||||
A |= read(adr);
|
A |= read(adr);
|
||||||
PSW.Z = (A == 0);
|
PSW.Z = (A == 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user