#ifndef LCOLONQ_6502_H #define LCOLONQ_6502_H #include 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