summaryrefslogtreecommitdiff
path: root/6502/include/lcq/6502.h
diff options
context:
space:
mode:
Diffstat (limited to '6502/include/lcq/6502.h')
-rw-r--r--6502/include/lcq/6502.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/6502/include/lcq/6502.h b/6502/include/lcq/6502.h
new file mode 100644
index 0000000..cb3b1fa
--- /dev/null
+++ b/6502/include/lcq/6502.h
@@ -0,0 +1,37 @@
+#ifndef LCOLONQ_6502_H
+#define LCOLONQ_6502_H
+
+#include <lcq/6502/types.h>
+
+typedef enum {
+ L6502_FLAG_CARRY = 1 << 1,
+ L6502_FLAG_ZERO = 1 << 2,
+ L6502_FLAG_INTERRUPT_DISABLE = 1 << 3,
+ L6502_FLAG_DECIMAL = 1 << 4,
+ L6502_FLAG_BREAK_COMMAND = 1 << 5,
+ L6502_FLAG_OVERFLOW = 1 << 6,
+ L6502_FLAG_NEGATIVE = 1 << 7,
+} l6502_flag;
+
+typedef struct {
+ u16 pc;
+ u8 sp, a, x, y, flags;
+} l6502_regs;
+
+typedef u8 (*l6502_mem_read_handler)(void *data, u16 addr);
+typedef void (*l6502_mem_write_handler)(void *data, u16 addr, u8 val);
+typedef struct {
+ l6502_mem_read_handler rh;
+ l6502_mem_write_handler wh;
+ void *data;
+} l6502_mem;
+void l6502_mem_basic_new(l6502_mem *m);
+
+typedef struct {
+ l6502_regs regs;
+ l6502_mem mem;
+} l6502_emu;
+
+void l6502_emulate(l6502_emu *e);
+
+#endif