diff options
Diffstat (limited to 'headers/instruction-init.h')
-rw-r--r-- | headers/instruction-init.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/headers/instruction-init.h b/headers/instruction-init.h new file mode 100644 index 0000000..488f73c --- /dev/null +++ b/headers/instruction-init.h @@ -0,0 +1,112 @@ +// instruction-init.h +// Initializes every instruction function prior to addressing.h so that function addresses are accessible +// also defines the array used to refer to functions + +//InstructionTable +void* InstructionTable; +void (*func)(Addressing, address); + +#define InstructionTableSize (256 * (sizeof(uintptr_t) + sizeof(Addressing))) + +/* +uintptr_t getInstructionTableFunction(int i){ //Segmentation fault is occurring here, likely in next one too + uintptr_t r = (InstructionTable + (sizeof(uintptr_t)*i)); + return r; +} + +Addressing getInstructionTableAddressing(int i){ + Addressing r = (InstructionTable + (sizeof(uintptr_t)*256) + (sizeof(Addressing)*i)); + return r; +} +*/ + +void callInstructionTable(int i, address val){ + printf("Table:\t%x\n", InstructionTable); + uintptr_t* a = (InstructionTable + (sizeof(uintptr_t) * i)); + printf("A Val:\t%x\n", a); + printf("Before:\t%x\n", func); func = *a; printf("After:\t%x\n", func); + //printf("Before:\t%x\n", func); memcpy(&func, a, sizeof(uintptr_t)); printf("After:\t%x\n", func); + Addressing* r = (InstructionTable + ((sizeof(uintptr_t)*256) + (sizeof(Addressing) * i))); + func(*r, val); printf("Statement OK"); +} + +void initInstructionTable(){ + InstructionTable = malloc(InstructionTableSize); + FILE* fs = fopen("instructions.bin", "r"); + + for(byte* c = InstructionTable; c < (InstructionTable + InstructionTableSize); c++){ //NEED TO MAKE (InstructionTable + (256*(sizeof(uintptr_t) + sizeof(Addressing)))) a macro + *c = (byte)fgetc(fs); + } //Investigate whether doing word sized units would increase speed + fclose(fs); + //read in the instruction data binary +} + + + +// Load and Store Instructions +void fLDA(Addressing, address); +void fLDX(Addressing, address); +void fLDY(Addressing, address); +void fSTA(Addressing, address); +void fSTX(Addressing, address); +void fSTY(Addressing, address); +// Arithmetic Instructions +void fADC(Addressing, address); +void fSBC(Addressing, address); +//Increment and Decrement Instructions +void fINC(Addressing, address); +void fINX(Addressing, address); +void fINY(Addressing, address); +void fDEC(Addressing, address); +void fDEX(Addressing, address); +void fDEY(Addressing, address); +// Logical Instructions +void fAND(Addressing, address); +void fORA(Addressing, address); +void fEOR(Addressing, address); +// Jump, Branch, Compare, and Test Bits +void fJMP(Addressing, address); +void fBCC(Addressing, address); +void fBCS(Addressing, address); +void fBEQ(Addressing, address); +void fBNE(Addressing, address); +void fBMI(Addressing, address); +void fBPL(Addressing, address); +void fBVS(Addressing, address); +void fBVC(Addressing, address); +void fCMP(Addressing, address); +void fCPX(Addressing, address); +void fCPY(Addressing, address); +void fBIT(Addressing, address); +// Shift and Rotate Instructions +void fASL(Addressing, address); +void fLSR(Addressing, address); +void fROL(Addressing, address); +void fROR(Addressing, address); +// Transfer Instructions +void fTAX(Addressing, address); +void fTAY(Addressing, address); +void fTXA(Addressing, address); +void fTYA(Addressing, address); +// Stack Instructions +void fTSX(Addressing, address); +void fTXS(Addressing, address); +void fPHA(Addressing, address); +void fPHP(Addressing, address); +void fPLA(Addressing, address); +void fPLP(Addressing, address); +// Subroutine Instructions +void fJSR(Addressing, address); +void fRTS(Addressing, address); +void fRTI(Addressing, address); +// Set/Reset Insutrctions +void fCLC(Addressing, address); +void fCLD(Addressing, address); +void fCLI(Addressing, address); +void fCLV(Addressing, address); +void fSEC(Addressing, address); +void fSED(Addressing, address); +void fSEI(Addressing, address); +// NOP/BRK Instructions +void fNOP(Addressing, address); +void fBRK(Addressing, address);
\ No newline at end of file |