summaryrefslogtreecommitdiff
path: root/headers/instruction-init.h
diff options
context:
space:
mode:
Diffstat (limited to 'headers/instruction-init.h')
-rw-r--r--headers/instruction-init.h112
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