diff options
author | alekseiplusplus <alekseijeaves@protonmail.com> | 2023-03-28 11:24:55 +1100 |
---|---|---|
committer | alekseiplusplus <alekseijeaves@protonmail.com> | 2023-03-28 11:24:55 +1100 |
commit | 03e92ce787f063aa93e34145abd9c0c9cef7ee28 (patch) | |
tree | 3e53d9db8065e9eed2164ae6469146307b8b3319 | |
parent | 5f11aac2f0a8c2bbc86180161d94158e890da285 (diff) |
shifting to other computer
-rw-r--r-- | applesystem.h | 11 | ||||
-rw-r--r-- | instruction.h | 58 |
2 files changed, 44 insertions, 25 deletions
diff --git a/applesystem.h b/applesystem.h index bf94a72..a26aff7 100644 --- a/applesystem.h +++ b/applesystem.h @@ -35,6 +35,15 @@ void setFlag(byte flag, int x) { //OVERLOAD TO ACCEPT INT AS WELL } } +void flagSet(byte flag){ + P |= flag; +} + +void flagClear(byte flag){ + P &= ~flag +} + + // BCD byte toBCD(byte x){ @@ -54,7 +63,7 @@ byte fromBCD(byte x){ return (a + b); } - +// addBCD() 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}; +} |