summaryrefslogtreecommitdiff
path: root/CPU.h
diff options
context:
space:
mode:
Diffstat (limited to 'CPU.h')
-rw-r--r--CPU.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/CPU.h b/CPU.h
new file mode 100644
index 0000000..6157914
--- /dev/null
+++ b/CPU.h
@@ -0,0 +1,41 @@
+#ifndef _CPU
+#define _CPU
+
+struct CPU{
+ uint8_t register_a;
+ uint8_t register_x;
+ uint8_t register_y;
+ uint8_t status;
+ uint16_t pc;
+ uint8_t memory[0xFFFF];
+};
+
+enum adressing_mode{
+ Immediate = 1,
+ ZeroPage,
+ ZeroPage_X,
+ ZeroPage_Y,
+ Absolute,
+ Absolute_X,
+ Absolute_Y,
+ Indirect_X,
+ Indirect_Y,
+ NoneAddressing,
+};
+
+
+
+struct CPU create_cpu();
+int array_size(uint8_t *program);
+uint8_t mem_read(struct CPU *cpu, uint16_t addr);
+void mem_write(struct CPU *cpu, uint16_t addr, uint8_t data);
+void load(struct CPU *cpu, uint8_t *program);
+void load_and_run(struct CPU *cpu, uint8_t *program);
+void reset_cpu(struct CPU *cpu);
+void update_zero_and_negative_flags(struct CPU *cpu, uint8_t result);
+void lda(struct CPU *cpu, enum adressing_mode mode);
+void interpret(struct CPU *cpu);
+uint16_t mem_read_u16(struct CPU *cpu, uint16_t pos);
+uint16_t get_operand_address(struct CPU *cpu, enum adressing_mode mode);
+
+#endif \ No newline at end of file