summaryrefslogtreecommitdiff
path: root/6502/include/lcq
diff options
context:
space:
mode:
Diffstat (limited to '6502/include/lcq')
-rw-r--r--6502/include/lcq/6502.h24
1 files changed, 16 insertions, 8 deletions
diff --git a/6502/include/lcq/6502.h b/6502/include/lcq/6502.h
index 3d10301..2a8a845 100644
--- a/6502/include/lcq/6502.h
+++ b/6502/include/lcq/6502.h
@@ -4,11 +4,12 @@
#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_CARRY = 1 << 0,
+ L6502_FLAG_ZERO = 1 << 1,
+ L6502_FLAG_INTERRUPT_DISABLE = 1 << 2,
+ L6502_FLAG_DECIMAL = 1 << 3,
+ L6502_FLAG_BREAK_COMMAND = 1 << 4,
+ L6502_FLAG_UNUSED = 1 << 5,
L6502_FLAG_OVERFLOW = 1 << 6,
L6502_FLAG_NEGATIVE = 1 << 7,
} l6502_flag;
@@ -49,18 +50,25 @@ static inline u16 l6502_read_addr(l6502_emu *e, u16 addr) {
u8 ahi = l6502_read(e, addr + 1);
return ahi << 8 | alo;
}
+static inline u16 l6502_read_addr_wrap_page(l6502_emu *e, u16 addr) {
+ u16 page = addr & 0xff00;
+ u8 off = (u8) addr;
+ u8 alo = l6502_read(e, page + off);
+ u8 ahi = l6502_read(e, page + (u8) (off + 1));
+ return ahi << 8 | alo;
+}
static inline u8 l6502_pop(l6502_emu *e) { return l6502_read(e, 0x0100 + (u16) ++e->regs[L6502_REG_SP]); }
static inline void l6502_push(l6502_emu *e, u8 val) { l6502_write(e, 0x0100 + (u16) e->regs[L6502_REG_SP]--, val); }
static inline u16 l6502_pop_addr(l6502_emu *e) {
- u8 ahi = l6502_pop(e);
u8 alo = l6502_pop(e);
+ u8 ahi = l6502_pop(e);
return ahi << 8 | alo;
}
static inline void l6502_push_addr(l6502_emu *e, u16 addr) {
- l6502_push(e, (u8) (addr & 0xff));
l6502_push(e, (u8) (addr >> 8));
+ l6502_push(e, (u8) (addr & 0xff));
}
-void l6502_emulate(l6502_emu *e);
+const char *l6502_emulate(l6502_emu *e);
#endif