summaryrefslogtreecommitdiff
path: root/headers/instructions
diff options
context:
space:
mode:
Diffstat (limited to 'headers/instructions')
-rw-r--r--headers/instructions/definitions.h32
1 files changed, 19 insertions, 13 deletions
diff --git a/headers/instructions/definitions.h b/headers/instructions/definitions.h
index bdeb54e..937ca10 100644
--- a/headers/instructions/definitions.h
+++ b/headers/instructions/definitions.h
@@ -27,15 +27,15 @@ void fLDY(Addressing addr, address val){ idata = fAddress(addr, val);
}
void fSTA(Addressing addr, address val){ idata = fAddress(addr, val);
- Memory[idata.add] = acc;
+ setMemory(idata.add, acc);
}
void fSTX(Addressing addr, address val){ idata = fAddress(addr, val);
- Memory[idata.add] = X;
+ setMemory(idata.add, X);
}
void fSTY(Addressing addr, address val){ idata = fAddress(addr, val);
- Memory[idata.add] = Y;
+ setMemory(idata.add, Y);
}
// Arithmetic Instructions
@@ -71,7 +71,9 @@ void fSBC(Addressing addr, address val){ idata = fAddress(addr, val);
//Increment and Decrement Instructions
void fINC(Addressing addr, address val){ idata = fAddress(addr, val);
- Memory[idata.add]++;
+ byte a = getMemory(idata.add);
+ a++;
+ setMemory(idata.add, a);
setFlagN(Memory[idata.add]);
setFlagZ(Memory[idata.add]);
}
@@ -89,7 +91,9 @@ void fINY(Addressing addr, address val){ idata = fAddress(addr, val);
}
void fDEC(Addressing addr, address val){ idata = fAddress(addr, val);
- Memory[idata.add]--;
+ byte a = getMemory(idata.add);
+ a--;
+ setMemory(idata.add, a);
setFlagN(Memory[idata.add]);
setFlagZ(Memory[idata.add]);
}
@@ -195,11 +199,12 @@ void fCPY(Addressing addr, address val){ idata = fAddress(addr, val);
}
}
-//Need to double check the function of this instruction
+//NEED TO DOUBLE CHECK THIS INSTRUCTION
void fBIT(Addressing addr, address val){ idata = fAddress(addr, val);
- setFlag(flag_N, (Memory[val] & flag_N));
- setFlag(flag_V, (Memory[val] & flag_V));
- if (((Memory[val] & flag_N) & (Memory[val] & flag_V)) == 0) {
+ setFlag(flag_N, (idata.value & flag_N));
+ setFlag(flag_V, (idata.value & flag_V));
+
+ if (((idata.value & flag_N) & (idata.value & flag_V)) == 0) {
flagSet(flag_Z);
} else {
flagSet(flag_Z);
@@ -275,26 +280,27 @@ void fTXS(Addressing addr, address val){ idata = fAddress(addr, val);
}
void fPHA(Addressing addr, address val){ idata = fAddress(addr, val);
- Memory[0x01FF-S] = acc;
+ setMemory(0x01FF-S, acc);
S++;
}
void fPHP(Addressing addr, address val){ idata = fAddress(addr, val);
- Memory[0x01FF-S] = P;
+ setMemory(0x01FF-S, P);
S++;
}
void fPLA(Addressing addr, address val){ idata = fAddress(addr, val);
S--;
- acc = Memory[0x01FF-S];
+ acc = getMemory(0x01FF-S);
}
void fPLP(Addressing addr, address val){ idata = fAddress(addr, val);
S--;
- P = Memory[0x01FF-S];
+ P = getMemory(0x01FF-S);
}
// Subroutine Instructions
+// NEED TO FINISH THESE
void fJSR(Addressing addr, address val){ idata = fAddress(addr, val);
Memory[0x01FF-S] = (idata.add-1);