diff options
Diffstat (limited to 'instruction.h')
-rw-r--r-- | instruction.h | 58 |
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}; +} |