From ae800796cdcce21c561bcbfbc96b29efe4d39a0b Mon Sep 17 00:00:00 2001
From: alekseiplusplus <alekseijeaves@protonmail.com>
Date: Fri, 21 Apr 2023 10:21:14 +1000
Subject: used a file to hold dynamic addresses :/ works now

---
 .gitignore                 |   1 +
 headers/include.h          |   3 +-
 headers/instruction-bin.h  | 241 ++++++++++++++++++++++++++++++++++++++++++
 headers/instruction-init.h |  29 ++---
 inbin                      | Bin 0 -> 30760 bytes
 instruction-bin.c          | 257 ---------------------------------------------
 makefile                   |   2 +-
 test.c                     |  21 ++--
 8 files changed, 259 insertions(+), 295 deletions(-)
 create mode 100644 headers/instruction-bin.h
 create mode 100755 inbin
 delete mode 100644 instruction-bin.c

diff --git a/.gitignore b/.gitignore
index 9656d78..8da0d65 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ main
 instructions.bin
 instruction-dump
 .vscode/settings.json
+a
diff --git a/headers/include.h b/headers/include.h
index 9a537c4..e2578de 100644
--- a/headers/include.h
+++ b/headers/include.h
@@ -4,4 +4,5 @@
 #include"string.h"
 #include"applesystem.h"
 #include"addressing.h"
-#include"instructions.h"
\ No newline at end of file
+#include"instructions.h"
+#include"instruction-bin.h"
\ No newline at end of file
diff --git a/headers/instruction-bin.h b/headers/instruction-bin.h
new file mode 100644
index 0000000..0127fd7
--- /dev/null
+++ b/headers/instruction-bin.h
@@ -0,0 +1,241 @@
+void setInstructionTable(int i, uintptr_t p, Addressing r){
+	uintptr_t* p1 = (InstructionTable + (sizeof(uintptr_t)*i));
+	*p1 = p;
+
+	Addressing* r1 = (InstructionTable + (sizeof(uintptr_t)*256) + (sizeof(Addressing)*i));
+	*r1 = r;
+}
+
+void initInstructionTable(){
+	InstructionTable = malloc(InstructionTableSize);
+	// Load and Store Instructions
+	// fLDA(Addressing, address);
+	setInstructionTable(0xA9, (uintptr_t)&fLDA, eImmediate);
+	setInstructionTable(0xA5, (uintptr_t)&fLDA, eZeroPage);
+	setInstructionTable(0xB5, (uintptr_t)&fLDA, eZeroPageIndexedX);
+	setInstructionTable(0xAD, (uintptr_t)&fLDA, eAbsolute);
+	setInstructionTable(0xBD, (uintptr_t)&fLDA, eAbsoluteIndexedX);
+	setInstructionTable(0xB9, (uintptr_t)&fLDA, eAbsoluteIndexedY);
+	setInstructionTable(0xA1, (uintptr_t)&fLDA, eIndexedIndirect);
+	setInstructionTable(0xB1, (uintptr_t)&fLDA, eIndirectIndexed);
+	// fLDX(Addressing, address);
+	setInstructionTable(0xA2, (uintptr_t)&fLDX, eImmediate);
+	setInstructionTable(0xA6, (uintptr_t)&fLDX, eZeroPage);
+	setInstructionTable(0xB6, (uintptr_t)&fLDX, eZeroPageIndexedY);
+	setInstructionTable(0xAE, (uintptr_t)&fLDX, eAbsolute);
+	setInstructionTable(0xBE, (uintptr_t)&fLDX, eAbsoluteIndexedY);
+	// fLDY(Addressing, address);
+	setInstructionTable(0xA0, (uintptr_t)&fLDY, eImmediate);
+	setInstructionTable(0xA4, (uintptr_t)&fLDY, eZeroPage);
+	setInstructionTable(0xB4, (uintptr_t)&fLDY, eZeroPageIndexedX);
+	setInstructionTable(0xAC, (uintptr_t)&fLDY, eAbsolute);
+	setInstructionTable(0xBC, (uintptr_t)&fLDY, eAbsoluteIndexedX);
+	// fSTA(Addressing, address);
+	setInstructionTable(0x85, (uintptr_t)&fSTA, eZeroPage);
+	setInstructionTable(0x95, (uintptr_t)&fSTA, eZeroPageIndexedX);
+	setInstructionTable(0x8D, (uintptr_t)&fSTA, eAbsolute);
+	setInstructionTable(0x9D, (uintptr_t)&fSTA, eAbsoluteIndexedX);
+	setInstructionTable(0x99, (uintptr_t)&fSTA, eAbsoluteIndexedY);
+	setInstructionTable(0x81, (uintptr_t)&fSTA, eIndexedIndirect);
+	setInstructionTable(0x91, (uintptr_t)&fSTA, eIndirectIndexed);
+	// fSTX(Addressing, address);
+	setInstructionTable(0x86, (uintptr_t)&fSTX, eZeroPage);
+	setInstructionTable(0x96, (uintptr_t)&fSTX, eZeroPageIndexedX);
+	setInstructionTable(0x8E, (uintptr_t)&fSTX, eAbsolute);
+	// fSTY(Addressing, address);
+	setInstructionTable(0x84, (uintptr_t)&fSTY, eZeroPage);
+	setInstructionTable(0x94, (uintptr_t)&fSTY, eZeroPageIndexedY);
+	setInstructionTable(0x8C, (uintptr_t)&fSTY, eAbsolute);
+
+	// Arithmetic Instructions
+	// fADC(Addressing, address);
+	setInstructionTable(0x69, (uintptr_t)&fADC, eImmediate);
+	setInstructionTable(0x65, (uintptr_t)&fADC, eZeroPage);
+	setInstructionTable(0x75, (uintptr_t)&fADC, eZeroPageIndexedX);
+	setInstructionTable(0x6D, (uintptr_t)&fADC, eAbsolute);
+	setInstructionTable(0x7D, (uintptr_t)&fADC, eAbsoluteIndexedX);
+	setInstructionTable(0x79, (uintptr_t)&fADC, eAbsoluteIndexedY);
+	setInstructionTable(0x61, (uintptr_t)&fADC, eIndexedIndirect);
+	setInstructionTable(0x71, (uintptr_t)&fADC, eIndirectIndexed);
+	// fSBC(Addressing, address);
+	setInstructionTable(0xE9, (uintptr_t)&fSBC, eImmediate);
+	setInstructionTable(0xE5, (uintptr_t)&fSBC, eZeroPage);
+	setInstructionTable(0xF5, (uintptr_t)&fSBC, eZeroPageIndexedX);
+	setInstructionTable(0xED, (uintptr_t)&fSBC, eAbsolute);
+	setInstructionTable(0xFD, (uintptr_t)&fSBC, eAbsoluteIndexedX);
+	setInstructionTable(0xF9, (uintptr_t)&fSBC, eAbsoluteIndexedY);
+	setInstructionTable(0xE1, (uintptr_t)&fSBC, eIndexedIndirect);
+	setInstructionTable(0xF1, (uintptr_t)&fSBC, eIndirectIndexed);
+
+	//Increment and Decrement Instructions
+	//INC(Addressing, address);
+	setInstructionTable(0xE6, (uintptr_t)&fINC, eZeroPage);
+	setInstructionTable(0xF6, (uintptr_t)&fINC, eZeroPageIndexedX);
+	setInstructionTable(0xEE, (uintptr_t)&fINC, eAbsolute);
+	setInstructionTable(0xFE, (uintptr_t)&fINC, eAbsoluteIndexedX);
+	//INX(Addressing, address);
+	setInstructionTable(0xE8, (uintptr_t)&fINX, eImplied);
+	//INY(Addressing, address);
+	setInstructionTable(0xC8, (uintptr_t)&fINY, eImplied);
+	//DEC(Addressing, address);
+	setInstructionTable(0xC6, (uintptr_t)&fDEC, eZeroPage);
+	setInstructionTable(0xD6, (uintptr_t)&fDEC, eZeroPageIndexedX);
+	setInstructionTable(0xCE, (uintptr_t)&fDEC, eAbsolute);
+	setInstructionTable(0xDE, (uintptr_t)&fDEC, eAbsoluteIndexedX);
+	//DEX(Addressing, address);
+	setInstructionTable(0xCA, (uintptr_t)&fDEX, eImplied);
+	//DEY(Addressing, address);
+	setInstructionTable(0x88, (uintptr_t)&fDEY, eImplied);
+
+	// Logical Instructions
+	//AND(Addressing, address);
+	setInstructionTable(0x29, (uintptr_t)&fAND, eImmediate);
+	setInstructionTable(0x25, (uintptr_t)&fAND, eZeroPage);
+	setInstructionTable(0x35, (uintptr_t)&fAND, eZeroPageIndexedX);
+	setInstructionTable(0x2D, (uintptr_t)&fAND, eAbsolute);
+	setInstructionTable(0x3D, (uintptr_t)&fAND, eAbsoluteIndexedX);
+	setInstructionTable(0x39, (uintptr_t)&fAND, eAbsoluteIndexedY);
+	setInstructionTable(0x21, (uintptr_t)&fAND, eIndexedIndirect);
+	setInstructionTable(0x31, (uintptr_t)&fAND, eIndirectIndexed);
+	//ORA(Addressing, address);
+	setInstructionTable(0x09, (uintptr_t)&fORA, eImmediate);
+	setInstructionTable(0x05, (uintptr_t)&fORA, eZeroPage);
+	setInstructionTable(0x15, (uintptr_t)&fORA, eZeroPageIndexedX);
+	setInstructionTable(0x0D, (uintptr_t)&fORA, eAbsolute);
+	setInstructionTable(0x1D, (uintptr_t)&fORA, eAbsoluteIndexedX);
+	setInstructionTable(0x19, (uintptr_t)&fORA, eAbsoluteIndexedY);
+	setInstructionTable(0x01, (uintptr_t)&fORA, eIndexedIndirect);
+	setInstructionTable(0x11, (uintptr_t)&fORA, eIndirectIndexed);
+	//EOR(Addressing, address);
+	setInstructionTable(0x49, (uintptr_t)&fEOR, eImmediate);
+	setInstructionTable(0x45, (uintptr_t)&fEOR, eZeroPage);
+	setInstructionTable(0x55, (uintptr_t)&fEOR, eZeroPageIndexedX);
+	setInstructionTable(0x4D, (uintptr_t)&fEOR, eAbsolute);
+	setInstructionTable(0x5D, (uintptr_t)&fEOR, eAbsoluteIndexedX);
+	setInstructionTable(0x59, (uintptr_t)&fEOR, eAbsoluteIndexedY);
+	setInstructionTable(0x41, (uintptr_t)&fEOR, eIndexedIndirect);
+	setInstructionTable(0x51, (uintptr_t)&fEOR, eIndirectIndexed);
+
+	// Jump, Branch, Compare, and Test Bits
+	//JMP(Addressing, address);
+	setInstructionTable(0x4C, (uintptr_t)&fJMP, eAbsolute);
+	setInstructionTable(0x6C, (uintptr_t)&fJMP, eIndirectAbsolute);
+	//BCC(Addressing, address);
+	setInstructionTable(0x90, (uintptr_t)&fBCC, eRelative);
+	//BCS(Addressing, address);
+	setInstructionTable(0xB0, (uintptr_t)&fBCS, eRelative);
+	//BEQ(Addressing, address);
+	setInstructionTable(0xF0, (uintptr_t)&fBEQ, eRelative);
+	//BNE(Addressing, address);
+	setInstructionTable(0xD0, (uintptr_t)&fBNE, eRelative);
+	//BMI(Addressing, address);
+	setInstructionTable(0x30, (uintptr_t)&fBMI, eRelative);
+	//BPL(Addressing, address);
+	setInstructionTable(0x10, (uintptr_t)&fBPL, eRelative);
+	//BVS(Addressing, address);
+	setInstructionTable(0x70, (uintptr_t)&fBVS, eRelative);
+	//BVC(Addressing, address);
+	setInstructionTable(0x50, (uintptr_t)&fBVC, eRelative);
+	//CMP(Addressing, address);
+	setInstructionTable(0xC9, (uintptr_t)&fCMP, eImmediate);
+	setInstructionTable(0xC5, (uintptr_t)&fCMP, eZeroPage);
+	setInstructionTable(0xD5, (uintptr_t)&fCMP, eZeroPageIndexedX);
+	setInstructionTable(0xCD, (uintptr_t)&fCMP, eAbsolute);
+	setInstructionTable(0xDD, (uintptr_t)&fCMP, eAbsoluteIndexedX);
+	setInstructionTable(0xD9, (uintptr_t)&fCMP, eAbsoluteIndexedY);
+	setInstructionTable(0xC1, (uintptr_t)&fCMP, eIndexedIndirect);
+	setInstructionTable(0xD1, (uintptr_t)&fCMP, eIndirectIndexed);
+	//CPX(Addressing, address);
+	setInstructionTable(0xE0, (uintptr_t)&fCPX, eImmediate);
+	setInstructionTable(0xE4, (uintptr_t)&fCPX, eZeroPage);
+	setInstructionTable(0xEC, (uintptr_t)&fCPX, eAbsolute);
+	//CPY(Addressing, address);
+	setInstructionTable(0xC0, (uintptr_t)&fCPY, eImmediate);
+	setInstructionTable(0xC4, (uintptr_t)&fCPY, eZeroPage);
+	setInstructionTable(0xCC, (uintptr_t)&fCPY, eAbsolute);
+	//BIT(Addressing, address);
+	setInstructionTable(0x4C, (uintptr_t)&fBIT, eZeroPage);
+	setInstructionTable(0x6C, (uintptr_t)&fBIT, eAbsolute);
+
+	// Shift and Rotate Instructions
+	//ASL(Addressing, address);
+	setInstructionTable(0x0A, (uintptr_t)&fASL, eAccumulator);
+	setInstructionTable(0x06, (uintptr_t)&fASL, eZeroPage);
+	setInstructionTable(0x16, (uintptr_t)&fASL, eZeroPageIndexedX);
+	setInstructionTable(0x0E, (uintptr_t)&fASL, eAbsolute);
+	setInstructionTable(0x1E, (uintptr_t)&fASL, eAbsoluteIndexedX);
+	//LSR(Addressing, address);
+	setInstructionTable(0x4A, (uintptr_t)&fLSR, eAccumulator);
+	setInstructionTable(0x46, (uintptr_t)&fLSR, eZeroPage);
+	setInstructionTable(0x56, (uintptr_t)&fLSR, eZeroPageIndexedX);
+	setInstructionTable(0x4E, (uintptr_t)&fLSR, eAbsolute);
+	setInstructionTable(0x5E, (uintptr_t)&fLSR, eAbsoluteIndexedX);
+	//ROL(Addressing, address);
+	setInstructionTable(0x2A, (uintptr_t)&fROL, eAccumulator);
+	setInstructionTable(0x26, (uintptr_t)&fROL, eZeroPage);
+	setInstructionTable(0x36, (uintptr_t)&fROL, eZeroPageIndexedX);
+	setInstructionTable(0x2E, (uintptr_t)&fROL, eAbsolute);
+	setInstructionTable(0x3E, (uintptr_t)&fROL, eAbsoluteIndexedX);
+	//ROR(Addressing, address);
+	setInstructionTable(0x6A, (uintptr_t)&fROR, eAccumulator);
+	setInstructionTable(0x66, (uintptr_t)&fROR, eZeroPage);
+	setInstructionTable(0x76, (uintptr_t)&fROR, eZeroPageIndexedX);
+	setInstructionTable(0x6E, (uintptr_t)&fROR, eAbsolute);
+	setInstructionTable(0x7E, (uintptr_t)&fROR, eAbsoluteIndexedX);
+
+	// Transfer Instructions
+	//TAX(Addressing, address);
+	setInstructionTable(0xAA, (uintptr_t)&fTAX, eImplied);
+	//TAY(Addressing, address);
+	setInstructionTable(0xA8, (uintptr_t)&fTAY, eImplied);
+	//TXA(Addressing, address);
+	setInstructionTable(0x8A, (uintptr_t)&fTXA, eImplied);
+	//TYA(Addressing, address);
+	setInstructionTable(0x98, (uintptr_t)&fTYA, eImplied);
+
+	// Stack Instructions
+	//TSX(Addressing, address);
+	setInstructionTable(0xBA, (uintptr_t)&fTSX, eImplied);
+	//TXS(Addressing, address);
+	setInstructionTable(0x9A, (uintptr_t)&fTXS, eImplied);
+	//PHA(Addressing, address);
+	setInstructionTable(0x48, (uintptr_t)&fPHA, eImplied);
+	//PHP(Addressing, address);
+	setInstructionTable(0x08, (uintptr_t)&fPHP, eImplied);
+	//PLA(Addressing, address);
+	setInstructionTable(0x68, (uintptr_t)&fPLA, eImplied);
+	//PLP(Addressing, address);
+	setInstructionTable(0x28, (uintptr_t)&fPLP, eImplied);
+
+	// Subroutine Instructions
+	//JSR(Addressing, address);
+	setInstructionTable(0x20, (uintptr_t)&fJSR, eAbsolute);
+	//RTS(Addressing, address);
+	setInstructionTable(0x60, (uintptr_t)&fRTS, eImplied);
+	//RTI(Addressing, address);
+	setInstructionTable(0x40, (uintptr_t)&fRTI, eImplied);
+
+	// Set/Reset Insutrctions
+	//CLC(Addressing, address);
+	setInstructionTable(0x18, (uintptr_t)&fCLC, eImplied);
+	//CLD(Addressing, address);
+	setInstructionTable(0xD8, (uintptr_t)&fCLD, eImplied);
+	//CLI(Addressing, address);
+	setInstructionTable(0x58, (uintptr_t)&fCLI, eImplied);
+	//CLV(Addressing, address);
+	setInstructionTable(0xB8, (uintptr_t)&fCLV, eImplied);
+	//SEC(Addressing, address);
+	setInstructionTable(0x38, (uintptr_t)&fSEC, eImplied);
+	//SED(Addressing, address);
+	setInstructionTable(0xF8, (uintptr_t)&fSED, eImplied);
+	//SEI(Addressing, address);
+	setInstructionTable(0x78, (uintptr_t)&fSEI, eImplied);
+
+	// NOP/BRK Instructions
+	//NOP(Addressing, address);
+	setInstructionTable(0xEA, (uintptr_t)&fNOP, eImplied);
+	//BRK(Addressing, address);
+	setInstructionTable(0x00, (uintptr_t)&fBRK, eImplied);
+}
+
+
diff --git a/headers/instruction-init.h b/headers/instruction-init.h
index 488f73c..68b9cf3 100644
--- a/headers/instruction-init.h
+++ b/headers/instruction-init.h
@@ -8,41 +8,26 @@ 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));
+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));
+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));
+	uintptr_t a = getInstructionTableFunction(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);
+	//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);
diff --git a/inbin b/inbin
new file mode 100755
index 0000000..a6286dd
Binary files /dev/null and b/inbin differ
diff --git a/instruction-bin.c b/instruction-bin.c
deleted file mode 100644
index 074a1e4..0000000
--- a/instruction-bin.c
+++ /dev/null
@@ -1,257 +0,0 @@
-#include"headers/include.h"
-
-void setInstructionTable(int i, uintptr_t p, Addressing r);
-
-void setAllInstructionTable();
-
-int main(){
-	setAllInstructionTable();
-	// here, do calls to dump all instructions into a bin file
-	FILE* fs = fopen("instructions.bin", "w");
-	for(char* c = InstructionTable; c < (InstructionTable + InstructionTableSize); c++){
-		fputc(*c, fs);
-	}
-	fclose(fs);
-}
-
-void setInstructionTable(int i, uintptr_t p, Addressing r){
-	uintptr_t* p1 = (InstructionTable + (sizeof(uintptr_t)*i));
-	*p1 = p;
-
-	Addressing* r1 = (InstructionTable + (sizeof(uintptr_t)*256) + (sizeof(Addressing)*i));
-	*r1 = r;
-}
-
-void setAllInstructionTable(){
-	InstructionTable = malloc(256 * (sizeof(uintptr_t) + sizeof(Addressing)));
-	// Load and Store Instructions
-	// fLDA(Addressing, address);
-	setInstructionTable(0xA9, (uintptr_t)&fLDA, eImmediate);
-	setInstructionTable(0xA5, (uintptr_t)&fLDA, eZeroPage);
-	setInstructionTable(0xB5, (uintptr_t)&fLDA, eZeroPageIndexedX);
-	setInstructionTable(0xAD, (uintptr_t)&fLDA, eAbsolute);
-	setInstructionTable(0xBD, (uintptr_t)&fLDA, eAbsoluteIndexedX);
-	setInstructionTable(0xB9, (uintptr_t)&fLDA, eAbsoluteIndexedY);
-	setInstructionTable(0xA1, (uintptr_t)&fLDA, eIndexedIndirect);
-	setInstructionTable(0xB1, (uintptr_t)&fLDA, eIndirectIndexed);
-	// fLDX(Addressing, address);
-	setInstructionTable(0xA2, (uintptr_t)&fLDX, eImmediate);
-	setInstructionTable(0xA6, (uintptr_t)&fLDX, eZeroPage);
-	setInstructionTable(0xB6, (uintptr_t)&fLDX, eZeroPageIndexedY);
-	setInstructionTable(0xAE, (uintptr_t)&fLDX, eAbsolute);
-	setInstructionTable(0xBE, (uintptr_t)&fLDX, eAbsoluteIndexedY);
-	// fLDY(Addressing, address);
-	setInstructionTable(0xA0, (uintptr_t)&fLDY, eImmediate);
-	setInstructionTable(0xA4, (uintptr_t)&fLDY, eZeroPage);
-	setInstructionTable(0xB4, (uintptr_t)&fLDY, eZeroPageIndexedX);
-	setInstructionTable(0xAC, (uintptr_t)&fLDY, eAbsolute);
-	setInstructionTable(0xBC, (uintptr_t)&fLDY, eAbsoluteIndexedX);
-	// fSTA(Addressing, address);
-	setInstructionTable(0x85, (uintptr_t)&fSTA, eZeroPage);
-	setInstructionTable(0x95, (uintptr_t)&fSTA, eZeroPageIndexedX);
-	setInstructionTable(0x8D, (uintptr_t)&fSTA, eAbsolute);
-	setInstructionTable(0x9D, (uintptr_t)&fSTA, eAbsoluteIndexedX);
-	setInstructionTable(0x99, (uintptr_t)&fSTA, eAbsoluteIndexedY);
-	setInstructionTable(0x81, (uintptr_t)&fSTA, eIndexedIndirect);
-	setInstructionTable(0x91, (uintptr_t)&fSTA, eIndirectIndexed);
-	// fSTX(Addressing, address);
-	setInstructionTable(0x86, (uintptr_t)&fSTX, eZeroPage);
-	setInstructionTable(0x96, (uintptr_t)&fSTX, eZeroPageIndexedX);
-	setInstructionTable(0x8E, (uintptr_t)&fSTX, eAbsolute);
-	// fSTY(Addressing, address);
-	setInstructionTable(0x84, (uintptr_t)&fSTY, eZeroPage);
-	setInstructionTable(0x94, (uintptr_t)&fSTY, eZeroPageIndexedY);
-	setInstructionTable(0x8C, (uintptr_t)&fSTY, eAbsolute);
-
-	// Arithmetic Instructions
-	// fADC(Addressing, address);
-	setInstructionTable(0x69, (uintptr_t)&fADC, eImmediate);
-	setInstructionTable(0x65, (uintptr_t)&fADC, eZeroPage);
-	setInstructionTable(0x75, (uintptr_t)&fADC, eZeroPageIndexedX);
-	setInstructionTable(0x6D, (uintptr_t)&fADC, eAbsolute);
-	setInstructionTable(0x7D, (uintptr_t)&fADC, eAbsoluteIndexedX);
-	setInstructionTable(0x79, (uintptr_t)&fADC, eAbsoluteIndexedY);
-	setInstructionTable(0x61, (uintptr_t)&fADC, eIndexedIndirect);
-	setInstructionTable(0x71, (uintptr_t)&fADC, eIndirectIndexed);
-	// fSBC(Addressing, address);
-	setInstructionTable(0xE9, (uintptr_t)&fSBC, eImmediate);
-	setInstructionTable(0xE5, (uintptr_t)&fSBC, eZeroPage);
-	setInstructionTable(0xF5, (uintptr_t)&fSBC, eZeroPageIndexedX);
-	setInstructionTable(0xED, (uintptr_t)&fSBC, eAbsolute);
-	setInstructionTable(0xFD, (uintptr_t)&fSBC, eAbsoluteIndexedX);
-	setInstructionTable(0xF9, (uintptr_t)&fSBC, eAbsoluteIndexedY);
-	setInstructionTable(0xE1, (uintptr_t)&fSBC, eIndexedIndirect);
-	setInstructionTable(0xF1, (uintptr_t)&fSBC, eIndirectIndexed);
-
-	//Increment and Decrement Instructions
-	//INC(Addressing, address);
-	setInstructionTable(0xE6, (uintptr_t)&fINC, eZeroPage);
-	setInstructionTable(0xF6, (uintptr_t)&fINC, eZeroPageIndexedX);
-	setInstructionTable(0xEE, (uintptr_t)&fINC, eAbsolute);
-	setInstructionTable(0xFE, (uintptr_t)&fINC, eAbsoluteIndexedX);
-	//INX(Addressing, address);
-	setInstructionTable(0xE8, (uintptr_t)&fINX, eImplied);
-	//INY(Addressing, address);
-	setInstructionTable(0xC8, (uintptr_t)&fINY, eImplied);
-	//DEC(Addressing, address);
-	setInstructionTable(0xC6, (uintptr_t)&fDEC, eZeroPage);
-	setInstructionTable(0xD6, (uintptr_t)&fDEC, eZeroPageIndexedX);
-	setInstructionTable(0xCE, (uintptr_t)&fDEC, eAbsolute);
-	setInstructionTable(0xDE, (uintptr_t)&fDEC, eAbsoluteIndexedX);
-	//DEX(Addressing, address);
-	setInstructionTable(0xCA, (uintptr_t)&fDEX, eImplied);
-	//DEY(Addressing, address);
-	setInstructionTable(0x88, (uintptr_t)&fDEY, eImplied);
-
-	// Logical Instructions
-	//AND(Addressing, address);
-	setInstructionTable(0x29, (uintptr_t)&fAND, eImmediate);
-	setInstructionTable(0x25, (uintptr_t)&fAND, eZeroPage);
-	setInstructionTable(0x35, (uintptr_t)&fAND, eZeroPageIndexedX);
-	setInstructionTable(0x2D, (uintptr_t)&fAND, eAbsolute);
-	setInstructionTable(0x3D, (uintptr_t)&fAND, eAbsoluteIndexedX);
-	setInstructionTable(0x39, (uintptr_t)&fAND, eAbsoluteIndexedY);
-	setInstructionTable(0x21, (uintptr_t)&fAND, eIndexedIndirect);
-	setInstructionTable(0x31, (uintptr_t)&fAND, eIndirectIndexed);
-	//ORA(Addressing, address);
-	setInstructionTable(0x09, (uintptr_t)&fORA, eImmediate);
-	setInstructionTable(0x05, (uintptr_t)&fORA, eZeroPage);
-	setInstructionTable(0x15, (uintptr_t)&fORA, eZeroPageIndexedX);
-	setInstructionTable(0x0D, (uintptr_t)&fORA, eAbsolute);
-	setInstructionTable(0x1D, (uintptr_t)&fORA, eAbsoluteIndexedX);
-	setInstructionTable(0x19, (uintptr_t)&fORA, eAbsoluteIndexedY);
-	setInstructionTable(0x01, (uintptr_t)&fORA, eIndexedIndirect);
-	setInstructionTable(0x11, (uintptr_t)&fORA, eIndirectIndexed);
-	//EOR(Addressing, address);
-	setInstructionTable(0x49, (uintptr_t)&fEOR, eImmediate);
-	setInstructionTable(0x45, (uintptr_t)&fEOR, eZeroPage);
-	setInstructionTable(0x55, (uintptr_t)&fEOR, eZeroPageIndexedX);
-	setInstructionTable(0x4D, (uintptr_t)&fEOR, eAbsolute);
-	setInstructionTable(0x5D, (uintptr_t)&fEOR, eAbsoluteIndexedX);
-	setInstructionTable(0x59, (uintptr_t)&fEOR, eAbsoluteIndexedY);
-	setInstructionTable(0x41, (uintptr_t)&fEOR, eIndexedIndirect);
-	setInstructionTable(0x51, (uintptr_t)&fEOR, eIndirectIndexed);
-
-	// Jump, Branch, Compare, and Test Bits
-	//JMP(Addressing, address);
-	setInstructionTable(0x4C, (uintptr_t)&fJMP, eAbsolute);
-	setInstructionTable(0x6C, (uintptr_t)&fJMP, eIndirectAbsolute);
-	//BCC(Addressing, address);
-	setInstructionTable(0x90, (uintptr_t)&fBCC, eRelative);
-	//BCS(Addressing, address);
-	setInstructionTable(0xB0, (uintptr_t)&fBCS, eRelative);
-	//BEQ(Addressing, address);
-	setInstructionTable(0xF0, (uintptr_t)&fBEQ, eRelative);
-	//BNE(Addressing, address);
-	setInstructionTable(0xD0, (uintptr_t)&fBNE, eRelative);
-	//BMI(Addressing, address);
-	setInstructionTable(0x30, (uintptr_t)&fBMI, eRelative);
-	//BPL(Addressing, address);
-	setInstructionTable(0x10, (uintptr_t)&fBPL, eRelative);
-	//BVS(Addressing, address);
-	setInstructionTable(0x70, (uintptr_t)&fBVS, eRelative);
-	//BVC(Addressing, address);
-	setInstructionTable(0x50, (uintptr_t)&fBVC, eRelative);
-	//CMP(Addressing, address);
-	setInstructionTable(0xC9, (uintptr_t)&fCMP, eImmediate);
-	setInstructionTable(0xC5, (uintptr_t)&fCMP, eZeroPage);
-	setInstructionTable(0xD5, (uintptr_t)&fCMP, eZeroPageIndexedX);
-	setInstructionTable(0xCD, (uintptr_t)&fCMP, eAbsolute);
-	setInstructionTable(0xDD, (uintptr_t)&fCMP, eAbsoluteIndexedX);
-	setInstructionTable(0xD9, (uintptr_t)&fCMP, eAbsoluteIndexedY);
-	setInstructionTable(0xC1, (uintptr_t)&fCMP, eIndexedIndirect);
-	setInstructionTable(0xD1, (uintptr_t)&fCMP, eIndirectIndexed);
-	//CPX(Addressing, address);
-	setInstructionTable(0xE0, (uintptr_t)&fCPX, eImmediate);
-	setInstructionTable(0xE4, (uintptr_t)&fCPX, eZeroPage);
-	setInstructionTable(0xEC, (uintptr_t)&fCPX, eAbsolute);
-	//CPY(Addressing, address);
-	setInstructionTable(0xC0, (uintptr_t)&fCPY, eImmediate);
-	setInstructionTable(0xC4, (uintptr_t)&fCPY, eZeroPage);
-	setInstructionTable(0xCC, (uintptr_t)&fCPY, eAbsolute);
-	//BIT(Addressing, address);
-	setInstructionTable(0x4C, (uintptr_t)&fBIT, eZeroPage);
-	setInstructionTable(0x6C, (uintptr_t)&fBIT, eAbsolute);
-
-	// Shift and Rotate Instructions
-	//ASL(Addressing, address);
-	setInstructionTable(0x0A, (uintptr_t)&fASL, eAccumulator);
-	setInstructionTable(0x06, (uintptr_t)&fASL, eZeroPage);
-	setInstructionTable(0x16, (uintptr_t)&fASL, eZeroPageIndexedX);
-	setInstructionTable(0x0E, (uintptr_t)&fASL, eAbsolute);
-	setInstructionTable(0x1E, (uintptr_t)&fASL, eAbsoluteIndexedX);
-	//LSR(Addressing, address);
-	setInstructionTable(0x4A, (uintptr_t)&fLSR, eAccumulator);
-	setInstructionTable(0x46, (uintptr_t)&fLSR, eZeroPage);
-	setInstructionTable(0x56, (uintptr_t)&fLSR, eZeroPageIndexedX);
-	setInstructionTable(0x4E, (uintptr_t)&fLSR, eAbsolute);
-	setInstructionTable(0x5E, (uintptr_t)&fLSR, eAbsoluteIndexedX);
-	//ROL(Addressing, address);
-	setInstructionTable(0x2A, (uintptr_t)&fROL, eAccumulator);
-	setInstructionTable(0x26, (uintptr_t)&fROL, eZeroPage);
-	setInstructionTable(0x36, (uintptr_t)&fROL, eZeroPageIndexedX);
-	setInstructionTable(0x2E, (uintptr_t)&fROL, eAbsolute);
-	setInstructionTable(0x3E, (uintptr_t)&fROL, eAbsoluteIndexedX);
-	//ROR(Addressing, address);
-	setInstructionTable(0x6A, (uintptr_t)&fROR, eAccumulator);
-	setInstructionTable(0x66, (uintptr_t)&fROR, eZeroPage);
-	setInstructionTable(0x76, (uintptr_t)&fROR, eZeroPageIndexedX);
-	setInstructionTable(0x6E, (uintptr_t)&fROR, eAbsolute);
-	setInstructionTable(0x7E, (uintptr_t)&fROR, eAbsoluteIndexedX);
-
-	// Transfer Instructions
-	//TAX(Addressing, address);
-	setInstructionTable(0xAA, (uintptr_t)&fTAX, eImplied);
-	//TAY(Addressing, address);
-	setInstructionTable(0xA8, (uintptr_t)&fTAY, eImplied);
-	//TXA(Addressing, address);
-	setInstructionTable(0x8A, (uintptr_t)&fTXA, eImplied);
-	//TYA(Addressing, address);
-	setInstructionTable(0x98, (uintptr_t)&fTYA, eImplied);
-
-	// Stack Instructions
-	//TSX(Addressing, address);
-	setInstructionTable(0xBA, (uintptr_t)&fTSX, eImplied);
-	//TXS(Addressing, address);
-	setInstructionTable(0x9A, (uintptr_t)&fTXS, eImplied);
-	//PHA(Addressing, address);
-	setInstructionTable(0x48, (uintptr_t)&fPHA, eImplied);
-	//PHP(Addressing, address);
-	setInstructionTable(0x08, (uintptr_t)&fPHP, eImplied);
-	//PLA(Addressing, address);
-	setInstructionTable(0x68, (uintptr_t)&fPLA, eImplied);
-	//PLP(Addressing, address);
-	setInstructionTable(0x28, (uintptr_t)&fPLP, eImplied);
-
-	// Subroutine Instructions
-	//JSR(Addressing, address);
-	setInstructionTable(0x20, (uintptr_t)&fJSR, eAbsolute);
-	//RTS(Addressing, address);
-	setInstructionTable(0x60, (uintptr_t)&fRTS, eImplied);
-	//RTI(Addressing, address);
-	setInstructionTable(0x40, (uintptr_t)&fRTI, eImplied);
-
-	// Set/Reset Insutrctions
-	//CLC(Addressing, address);
-	setInstructionTable(0x18, (uintptr_t)&fCLC, eImplied);
-	//CLD(Addressing, address);
-	setInstructionTable(0xD8, (uintptr_t)&fCLD, eImplied);
-	//CLI(Addressing, address);
-	setInstructionTable(0x58, (uintptr_t)&fCLI, eImplied);
-	//CLV(Addressing, address);
-	setInstructionTable(0xB8, (uintptr_t)&fCLV, eImplied);
-	//SEC(Addressing, address);
-	setInstructionTable(0x38, (uintptr_t)&fSEC, eImplied);
-	//SED(Addressing, address);
-	setInstructionTable(0xF8, (uintptr_t)&fSED, eImplied);
-	//SEI(Addressing, address);
-	setInstructionTable(0x78, (uintptr_t)&fSEI, eImplied);
-
-	// NOP/BRK Instructions
-	//NOP(Addressing, address);
-	setInstructionTable(0xEA, (uintptr_t)&fNOP, eImplied);
-	//BRK(Addressing, address);
-	setInstructionTable(0x00, (uintptr_t)&fBRK, eImplied);
-}
-
-
diff --git a/makefile b/makefile
index 636b454..b4327df 100644
--- a/makefile
+++ b/makefile
@@ -1,2 +1,2 @@
 main:
-	gcc test.c -o main
\ No newline at end of file
+	gcc test.c -o a
diff --git a/test.c b/test.c
index 7da793c..2ced76c 100644
--- a/test.c
+++ b/test.c
@@ -4,21 +4,14 @@
 int main(int argc, char *argv[]){
     initInstructionTable();
 
-    uintptr_t*  a;
-    Addressing* b;
-    for(int i = 0; i < 256; i++){
-        a = InstructionTable + (i * sizeof(uintptr_t));
-        printf("\t%x", *a); if(*a < 0x10) printf("\t");
-        if ((i % 4) == 3) printf("\n");
+    byte*  a;
+    for(int i = 0; i < InstructionTableSize; i++){
+        a = InstructionTable + i;
+        printf("%x\t", *a);
+        if ((i % 8) == 7) printf("\n");
     }
-    for(int i = 0; i < 256; i++){
-        b = InstructionTable + (256 * sizeof(uintptr_t)) + (i * sizeof(Addressing));
-        printf("\t%x", *b); if(*b < 0x10) printf("\t");
-        if ((i % 4) == 3) printf("\n");
-    }
-    printf("\n");
 
-    dStatusDump(); dIdataDump(); printf("\n");
-    callInstructionTable(0x00, 0x01);
+    printf("\n"); dStatusDump(); dIdataDump(); printf("%x\n", &fLDA); printf("\n");
+    callInstructionTable(0xA9, 0x01);
     dStatusDump(); dIdataDump(); printf("\n");
 }
\ No newline at end of file
-- 
cgit v1.2.3