better implementing the adder and subtractor

This commit is contained in:
Thiago Auler 2017-11-16 08:13:48 -02:00 committed by GitHub
parent 680f44ed30
commit c9624f1971
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 12 deletions

View File

@ -78,19 +78,27 @@ void fetch_operand()
}
}
void adjustNZ(db a)
void adjustNZ(db r)
{
if (a == 0) { Z_SET; } else { Z_UNSET;}
a = a >> 7;
if (a == 0) { N_SET; } else { N_UNSET; }
if (r == 0) { Z_SET; } else { Z_UNSET;}
r = r >> 7;
if (r == 1) { N_SET; } else { N_UNSET; }
}
db adder(db a, db b)
{
db r = a + b;
db c = (a + b) >> 8;
// todo: adjust carry flag
// todo: adjust overflow flag
a = a & 0x7F;
b = b & 0x7F;
db cc = (a + b) >> 7;
db v = c ^ cc;
if (c == 1) { C_SET; } else { C_UNSET;}
if (v == 1) { V_SET; } else { V_UNSET; }
adjustNZ(r);
return r;
@ -98,13 +106,11 @@ db adder(db a, db b)
db subtractor(db a, db b)
{
db r = a - b;
// negate b operand using 2's complement
b = b ^ 0xFF;
b = b + 1;
// todo: adjust carry flag
// todo: adjust overflow flag
adjustNZ(r);
return r;
return adder(a, b);
}
void adc()