summaryrefslogtreecommitdiff
path: root/6502/include
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-07-11 00:34:23 -0400
committerLLLL Colonq <llll@colonq>2026-07-11 00:34:23 -0400
commitca8daa96caed9d53db95336bad917d2e03e7b00f (patch)
tree39c7ec19c9beba0932b3240d5033e2fbfd4e2f6c /6502/include
parentb6f00172b4e7045a14cebba0a7d4011528a28741 (diff)
6502: All tests pass!
Diffstat (limited to '6502/include')
-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