summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/6502.c14
-rw-r--r--src/cpu/instructions.c2
2 files changed, 7 insertions, 9 deletions
diff --git a/src/cpu/6502.c b/src/cpu/6502.c
index ab8248e..366882f 100644
--- a/src/cpu/6502.c
+++ b/src/cpu/6502.c
@@ -40,15 +40,13 @@ void SetFlagN(byte x){
P = (x & flag_N) | (P & ~flag_N);
}
-//Perform prior to any changes
+//Perform prior to any changes TODO: FIX THIS! WTF WERE YOU THINKING?
void SetFlagV(byte x, byte y){
- if ((x & flag_N) == (y & flag_N)){
- if (((x + y) & (flag_N ^ 0xFF)) > 0x7F) SetFlag(flag_V, 1);
- else SetFlag(flag_V, 0);
- }else{
- if (((x - y) & (flag_N ^ 0xFF)) > 0x7F) SetFlag(flag_V, 1);
- else SetFlag(flag_V, 0);
- }
+ address z = (address)x + (address)y;
+ if (z > 0xFF)
+ SetFlag(flag_V, 1);
+ else
+ SetFlag(flag_V, 0);
}
/*void SetFlagB(){ //WORK ON
diff --git a/src/cpu/instructions.c b/src/cpu/instructions.c
index c043ac4..cf69fc2 100644
--- a/src/cpu/instructions.c
+++ b/src/cpu/instructions.c
@@ -136,7 +136,7 @@ void fEOR(Addressing addr, address val){
// Jump, Branch, Compare, and Test Bits
void fJMP(Addressing addr, address val){
- PC = val;
+ PC = val; PC -= 2;
}
void fBCC(Addressing addr, address val){ //FINISH ALL BRANCH INSTRUCTIONS