summaryrefslogtreecommitdiff
path: root/instruction.h
diff options
context:
space:
mode:
Diffstat (limited to 'instruction.h')
-rw-r--r--instruction.h58
1 files changed, 34 insertions, 24 deletions
diff --git a/instruction.h b/instruction.h
index f9ecd0b..bdb337c 100644
--- a/instruction.h
+++ b/instruction.h
@@ -53,9 +53,9 @@ instruction_data fADC(Addressing addr, address val){
setFlagV(buffer, acc);
if (buffer > 255){
- setFlag(flag_C, 1);
+ flagSet(flag_C);
}else{
- setFlag(flag_C, 0);
+ flagClear(flag_C);
}
acc += fAddressing(addr, val);
@@ -68,9 +68,9 @@ instruction_data fSBC(Addressing addr, address val){
setFlagV(buffer, acc);
if (buffer < 0){
- setFlag(flag_C, 1);
+ flagSet(flag_C);
}else{
- setFlag(flag_C, 0);
+ flagClear(flag_C);
}
acc -= fAddressing(addr, val);
setFlagN(acc);
@@ -175,31 +175,31 @@ instruction_data fBVC(signed char val){
instruction_data fCMP(address val){
if (acc < Memory[val]){
- setFlag(flag_N, 1); setFlag(flag_Z, 0); setFlag(flag_C, 0);
+ flagSet(flag_N); flagClear(flag_Z); flagClear(flag_C);
}if (acc == Memory[val]){
- setFlag(flag_N, 0); setFlag(flag_Z, 1); setFlag(flag_C, 0);
+ flagClear(flag_N); flagSet(flag_Z); flagClear(flag_C);
}if (acc > Memory[val]){
- setFlag(flag_N, 0); setFlag(flag_Z, 0); setFlag(flag_C, 1);
+ flagClear(flag_N); flagClear(flag_Z); flagSet(flag_C);
}
}
instruction_data fCPX(address val){
if (X < Memory[val]){
- setFlag(flag_N, 1); setFlag(flag_Z, 0); setFlag(flag_C, 0);
+ flagSet(flag_N); flagClear(flag_Z); flagClear(flag_C);
}if (X == Memory[val]){
- setFlag(flag_N, 0); setFlag(flag_Z, 1); setFlag(flag_C, 0);
+ flagClear(flag_N); flagSet(flag_Z); flagClear(flag_C);
}if (X > Memory[val]){
- setFlag(flag_N, 0); setFlag(flag_Z, 0); setFlag(flag_C, 1);
+ flagClear(flag_N); flagClear(flag_Z); flagSet(flag_C);
}
}
instruction_data fCPY(address val){
if (Y < Memory[val]){
- setFlag(flag_N, 1); setFlag(flag_Z, 0); setFlag(flag_C, 0);
+ flagSet(flag_N); flagClear(flag_Z); flagClear(flag_C);
}if (Y == Memory[val]){
- setFlag(flag_N, 0); setFlag(flag_Z, 1); setFlag(flag_C, 0);
+ flagClear(flag_N); flagSet(flag_Z); flagClear(flag_C);
}if (Y > Memory[val]){
- setFlag(flag_N, 0); setFlag(flag_Z, 0); setFlag(flag_C, 1);
+ flagClear(flag_N); flagClear(flag_Z); flagSet(flag_C);
}
}
@@ -207,9 +207,9 @@ instruction_data fBIT(address 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_Z, 1);
+ flagSet(flag_Z);
} else {
- setFlag(flag_Z, 0);
+ flagSet(flag_Z);
}
}
@@ -304,40 +304,50 @@ instruction_data fPLP(){
// Set/Reset Insutrctions
instruction_data fCLC(){
- setFlag(flag_C, 0);
+ flagClear(flag_C);
+ return {1, 2};
}
instruction_data fCLD(){
- setFlag(flag_D, 0);
+ flagClear(flag_D);
+ return {1, 2};
}
instruction_data fCLI(){
- setFlag(flag_I, 0);
+ flagClear(flag_I);
+ return {1, 2};
}
instruction_data fCLV(){
- setFlag(flag_V, 0);
+ flagClear(flag_V);
+ return {1, 2};
}
instruction_data fSEC(){
- setFlag(flag_C, 1);
+ flagSet(flag_C);
+ return {1, 2};
}
instruction_data fSED(){
- setFlag(flag_D, 1);
+ flagSet(flag_D);
+ return {1, 2};
}
instruction_data fSEI(){
- setFlag(flag_I, 1);
+ flagSet(flag_I);
+ return {1, 2};
}
// NOP/BRK Instructions
instruction_data fNOP(){
- return {2, 1};
+ return {1, 2};
}
-
+instruction_data fBRK(){
+ flagSet(flag_B);
+ return {1, 7};
+}