From 03e92ce787f063aa93e34145abd9c0c9cef7ee28 Mon Sep 17 00:00:00 2001 From: alekseiplusplus Date: Tue, 28 Mar 2023 11:24:55 +1100 Subject: shifting to other computer --- applesystem.h | 11 ++++++++++- 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}; +} -- cgit v1.2.3