From 839ce07e9c0cc4ebef5c4280b77ad10725b9f663 Mon Sep 17 00:00:00 2001 From: Stefan Arentz Date: Mon, 2 Oct 2017 20:32:43 -0400 Subject: [PATCH] Fixes #164 - Make Lua Optional (#165) --- src/Makefile | 29 +- src/cpu.c | 13 + src/cpu.h | 4 + src/cpu_test.c | 8 +- src/dsk.c | 8 + src/dsk.h | 9 +- src/ins.c | 1035 ++++++++++++++++++++++++------------------------ src/two.c | 27 ++ 8 files changed, 606 insertions(+), 527 deletions(-) diff --git a/src/Makefile b/src/Makefile index a423c0b..ab25104 100644 --- a/src/Makefile +++ b/src/Makefile @@ -34,25 +34,34 @@ else LDFLAGS += -g endif -LUA_LIBS=-llua -ifeq ($(UNAME), Linux) - LUA_LIBS = -llua5.1 - CFLAGS += -I/usr/include/lua5.1 - LDFLAGS += -L/usr/lib/arm-linux-gnueabihf +ifdef LUA + CFLAGS += -DEWM_LUA + ifeq ($(UNAME), Linux) + LUA_LIBS = -llua5.1 + CFLAGS += -I/usr/include/lua5.1 + LDFLAGS += -L/usr/lib/arm-linux-gnueabihf + else + LUA_LIBS=-llua + endif +endif + +CPU_SOURCES=cpu.c mem.c fmt.c ins.c utl.c +ifdef LUA + CPU_SOURCES += lua.c endif EWM_EXECUTABLE=ewm -EWM_SOURCES=cpu.c ins.c pia.c mem.c ewm.c fmt.c two.c scr.c dsk.c chr.c alc.c one.c tty.c utl.c boo.c lua.c sdl.c +EWM_SOURCES=$(CPU_SOURCES) pia.c ewm.c two.c scr.c dsk.c chr.c alc.c one.c tty.c boo.c sdl.c EWM_OBJECTS=$(EWM_SOURCES:.c=.o) EWM_LIBS=-lSDL2 $(LUA_LIBS) CPU_TEST_EXECUTABLE=cpu_test -CPU_TEST_SOURCES=cpu.c ins.c mem.c fmt.c utl.c cpu_test.c lua.c +CPU_TEST_SOURCES=$(CPU_SOURCES) cpu_test.c CPU_TEST_OBJECTS=$(CPU_TEST_SOURCES:.c=.o) CPU_TEST_LIBS=$(LUA_LIBS) SCR_TEST_EXECUTABLE=scr_test -SCR_TEST_SOURCES=cpu.c ins.c mem.c fmt.c two.c scr.c dsk.c chr.c alc.c utl.c scr_test.c lua.c sdl.c +SCR_TEST_SOURCES=$(CPU_SOURCES) two.c scr.c dsk.c chr.c alc.c scr_test.c sdl.c SCR_TEST_OBJECTS=$(SCR_TEST_SOURCES:.c=.o) SCR_TEST_LIBS=-lSDL2 $(LUA_LIBS) @@ -62,12 +71,12 @@ TTY_TEST_OBJECTS=$(TTY_TEST_SOURCES:.c=.o) TTY_TEST_LIBS=-lSDL2 $(LUA_LIBS) CPU_BENCH=cpu_bench -CPU_BENCH_SOURCES=cpu.c ins.c mem.c fmt.c utl.c cpu_bench.c lua.c +CPU_BENCH_SOURCES=$(CPU_SOURCES) cpu_bench.c CPU_BENCH_OBJECTS=$(CPU_BENCH_SOURCES:.c=.o) CPU_BENCH_LIBS=$(LUA_LIBS) MEM_BENCH=mem_bench -MEM_BENCH_SOURCES=cpu.c ins.c mem.c fmt.c utl.c mem_bench.c lua.c +MEM_BENCH_SOURCES=$(CPU_SOURCES) mem_bench.c MEM_BENCH_OBJECTS=$(MEM_BENCH_SOURCES:.c=.o) MEM_BENCH_LIBS=$(LUA_LIBS) diff --git a/src/cpu.c b/src/cpu.c index c011b0a..9fe2769 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -37,7 +37,10 @@ #include "ins.h" #include "mem.h" #include "fmt.h" + +#if defined(EWM_LUA) #include "lua.h" +#endif // Stack management. @@ -102,6 +105,7 @@ static int cpu_execute_instruction(struct cpu_t *cpu) { uint16_t pc = cpu->state.pc; cpu->state.pc += i->bytes; +#if defined(EWM_LUA) if (i->lua_before_handler != LUA_NOREF) { lua_rawgeti(cpu->lua->state, LUA_REGISTRYINDEX, i->lua_before_handler); ewm_lua_push_cpu(cpu->lua, cpu); @@ -121,6 +125,7 @@ static int cpu_execute_instruction(struct cpu_t *cpu) { printf("cpu: script error: %s\n", lua_tostring(cpu->lua->state, -1)); } } +#endif /* Execute instruction */ switch (i->bytes) { @@ -135,6 +140,7 @@ static int cpu_execute_instruction(struct cpu_t *cpu) { break; } +#if defined(EWM_LUA) if (i->lua_after_handler != LUA_NOREF) { lua_rawgeti(cpu->lua->state, LUA_REGISTRYINDEX, i->lua_after_handler); ewm_lua_push_cpu(cpu->lua, cpu); @@ -154,6 +160,7 @@ static int cpu_execute_instruction(struct cpu_t *cpu) { printf("cpu: script error: %s\n", lua_tostring(cpu->lua->state, -1)); } } +#endif cpu->counter += i->cycles; @@ -432,7 +439,11 @@ int cpu_step(struct cpu_t *cpu) { return cpu_execute_instruction(cpu); } +#if defined(EWM_LUA) + +// // Lua support +// // cpu state functions @@ -702,3 +713,5 @@ int ewm_cpu_init_lua(struct cpu_t *cpu, struct ewm_lua_t *lua) { return 0; } + +#endif diff --git a/src/cpu.h b/src/cpu.h index e252300..46cb1a1 100644 --- a/src/cpu.h +++ b/src/cpu.h @@ -59,7 +59,9 @@ struct cpu_t { uint8_t *ram; size_t ram_size; +#if defined(EWM_LUA) struct ewm_lua_t *lua; +#endif }; typedef void (*cpu_instruction_handler_t)(struct cpu_t *cpu); @@ -125,6 +127,8 @@ uint8_t cpu_memory_get_byte(struct cpu_t *cpu, uint16_t addr); void cpu_memory_set_word(struct cpu_t *cpu, uint16_t addr, uint16_t v); void cpu_memory_set_byte(struct cpu_t *cpu, uint16_t addr, uint8_t v); +#if defined(EWM_LUA) int ewm_cpu_init_lua(struct cpu_t *cpu, struct ewm_lua_t *lua); +#endif #endif diff --git a/src/cpu_test.c b/src/cpu_test.c index 3611306..9a39104 100644 --- a/src/cpu_test.c +++ b/src/cpu_test.c @@ -30,7 +30,9 @@ #include "cpu.h" #include "mem.h" #include "utl.h" +#if defined(EWM_LUA) #include "lua.h" +#endif int test(int model, uint16_t start_addr, uint16_t success_addr, char *rom_path, int with_lua) { struct cpu_t *cpu = cpu_create(model); @@ -38,6 +40,7 @@ int test(int model, uint16_t start_addr, uint16_t success_addr, char *rom_path, cpu_reset(cpu); cpu->state.pc = start_addr; +#if defined(EWM_LUA) if (with_lua) { cpu->lua = ewm_lua_create(); ewm_cpu_init_lua(cpu, cpu->lua); @@ -47,7 +50,8 @@ int test(int model, uint16_t start_addr, uint16_t success_addr, char *rom_path, exit(1); } } - +#endif + uint16_t last_pc = cpu->state.pc; struct timespec start; @@ -118,8 +122,10 @@ int main(int argc, char **argv) { fprintf(stderr, "TEST Running 65C02 tests\n"); test(EWM_CPU_MODEL_65C02, 0x0400, 0x24a8, "rom/65C02_extended_opcodes_test.bin", 0); +#if defined(EWM_LUA) fprintf(stderr, "TEST Running 6502 tests - With Lua\n"); test(EWM_CPU_MODEL_6502, 0x0400, 0x3399, "rom/6502_functional_test.bin", 1); fprintf(stderr, "TEST Running 65C02 tests - With Lua\n"); test(EWM_CPU_MODEL_65C02, 0x0400, 0x24a8, "rom/65C02_extended_opcodes_test.bin", 1); +#endif } diff --git a/src/dsk.c b/src/dsk.c index 95c1cf7..e2a6b7d 100644 --- a/src/dsk.c +++ b/src/dsk.c @@ -30,7 +30,9 @@ #include "mem.h" #include "cpu.h" #include "utl.h" +#if defined(EWM_LUA) #include "lua.h" +#endif #include "dsk.h" // @@ -555,9 +557,15 @@ int ewm_dsk_set_disk_file(struct ewm_dsk_t *dsk, uint8_t drive, bool readonly, c return result; } +#if defined(EWM_LUA) + +// // Lua Support +// int ewm_dsk_init_lua(struct ewm_dsk_t *dsk, struct ewm_lua_t *lua) { dsk->lua = lua; return 0; } + +#endif diff --git a/src/dsk.h b/src/dsk.h index c48e2cb..7b69f32 100644 --- a/src/dsk.h +++ b/src/dsk.h @@ -26,9 +26,12 @@ #include #include +#if defined(EWM_LUA) +#include "lua.h" +#endif + struct cpu_t; struct mem_t; -struct ewm_lua_t; #define EWM_DSK_DRIVE1 (0) #define EWM_DSK_DRIVE2 (1) @@ -62,7 +65,9 @@ struct ewm_dsk_t { struct ewm_dsk_drive_t drives[2]; uint8_t drive; // 0 based int skip; +#if defined(EWM_LUA) struct ewm_lua_t *lua; +#endif }; #define EWM_DSK_TYPE_UNKNOWN (-1) @@ -74,6 +79,8 @@ struct ewm_dsk_t *ewm_dsk_create(struct cpu_t *cpu); int ewm_dsk_set_disk_data(struct ewm_dsk_t *dsk, uint8_t index, bool readonly, void *data, size_t length, int type); int ewm_dsk_set_disk_file(struct ewm_dsk_t *dsk, uint8_t index, bool readonly, char *path); +#if defined(EWM_LUA) int ewm_dsk_init_lua(struct ewm_dsk_t *dsk, struct ewm_lua_t *lua); +#endif #endif diff --git a/src/ins.c b/src/ins.c index ad10b00..4a2ba73 100644 --- a/src/ins.c +++ b/src/ins.c @@ -23,13 +23,18 @@ #include #include -#include -#include -#include +/* #if defined(EWM_LUA) */ +/* #include */ +/* #include */ +/* #include */ +/* #endif */ #include "ins.h" #include "cpu.h" #include "mem.h" +#if defined(EWM_LUA) +#include "lua.h" +#endif static void update_zn(struct cpu_t *cpu, uint8_t v) { cpu->state.z = (v == 0x00); @@ -918,269 +923,269 @@ static void unimplemented(struct cpu_t *cpu) { /* Instruction dispatch table */ struct cpu_instruction_t instructions[256] = { - /* 0x00 */ { "BRK", 0x00, 1, 2, 3, (void*) brk, LUA_NOREF, LUA_NOREF }, - /* 0x01 */ { "ORA", 0x01, 2, 6, 0, (void*) ora_indx, LUA_NOREF, LUA_NOREF }, - /* 0x02 */ { "???", 0x02, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x03 */ { "???", 0x03, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x04 */ { "???", 0x04, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x05 */ { "ORA", 0x05, 2, 2, 0, (void*) ora_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x06 */ { "ASL", 0x06, 2, 5, 0, (void*) asl_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x07 */ { "???", 0x07, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x08 */ { "PHP", 0x08, 1, 3, 0, (void*) php, LUA_NOREF, LUA_NOREF }, - /* 0x09 */ { "ORA", 0x09, 2, 2, 0, (void*) ora_imm, LUA_NOREF, LUA_NOREF }, - /* 0x0a */ { "ASL", 0x0a, 1, 2, 0, (void*) asl_acc, LUA_NOREF, LUA_NOREF }, - /* 0x0b */ { "???", 0x0b, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x0c */ { "???", 0x0c, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x0d */ { "ORA", 0x0d, 3, 4, 0, (void*) ora_abs, LUA_NOREF, LUA_NOREF }, - /* 0x0e */ { "ASL", 0x0e, 3, 6, 0, (void*) asl_abs, LUA_NOREF, LUA_NOREF }, - /* 0x0f */ { "???", 0x0f, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x10 */ { "BPL", 0x10, 2, 2, 0, (void*) bpl, LUA_NOREF, LUA_NOREF }, - /* 0x11 */ { "ORA", 0x11, 2, 5, 0, (void*) ora_indy, LUA_NOREF, LUA_NOREF }, - /* 0x12 */ { "???", 0x12, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x13 */ { "???", 0x13, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x14 */ { "???", 0x14, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x15 */ { "ORA", 0x15, 2, 3, 0, (void*) ora_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x16 */ { "ASL", 0x16, 2, 6, 0, (void*) asl_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x17 */ { "???", 0x17, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x18 */ { "CLC", 0x18, 1, 2, 0, (void*) clc, LUA_NOREF, LUA_NOREF }, - /* 0x19 */ { "ORA", 0x19, 3, 4, 0, (void*) ora_absy, LUA_NOREF, LUA_NOREF }, - /* 0x1a */ { "???", 0x1a, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x1b */ { "???", 0x1b, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x1c */ { "???", 0x1c, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x1d */ { "ORA", 0x1d, 3, 4, 0, (void*) ora_absx, LUA_NOREF, LUA_NOREF }, - /* 0x1e */ { "ASL", 0x1e, 3, 7, 0, (void*) asl_absx, LUA_NOREF, LUA_NOREF }, - /* 0x1f */ { "???", 0x1f, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, + /* 0x00 */ { "BRK", 0x00, 1, 2, 3, (void*) brk, -2, -2 }, + /* 0x01 */ { "ORA", 0x01, 2, 6, 0, (void*) ora_indx, -2, -2 }, + /* 0x02 */ { "???", 0x02, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x03 */ { "???", 0x03, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x04 */ { "???", 0x04, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x05 */ { "ORA", 0x05, 2, 2, 0, (void*) ora_zpg, -2, -2 }, + /* 0x06 */ { "ASL", 0x06, 2, 5, 0, (void*) asl_zpg, -2, -2 }, + /* 0x07 */ { "???", 0x07, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x08 */ { "PHP", 0x08, 1, 3, 0, (void*) php, -2, -2 }, + /* 0x09 */ { "ORA", 0x09, 2, 2, 0, (void*) ora_imm, -2, -2 }, + /* 0x0a */ { "ASL", 0x0a, 1, 2, 0, (void*) asl_acc, -2, -2 }, + /* 0x0b */ { "???", 0x0b, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x0c */ { "???", 0x0c, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x0d */ { "ORA", 0x0d, 3, 4, 0, (void*) ora_abs, -2, -2 }, + /* 0x0e */ { "ASL", 0x0e, 3, 6, 0, (void*) asl_abs, -2, -2 }, + /* 0x0f */ { "???", 0x0f, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x10 */ { "BPL", 0x10, 2, 2, 0, (void*) bpl, -2, -2 }, + /* 0x11 */ { "ORA", 0x11, 2, 5, 0, (void*) ora_indy, -2, -2 }, + /* 0x12 */ { "???", 0x12, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x13 */ { "???", 0x13, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x14 */ { "???", 0x14, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x15 */ { "ORA", 0x15, 2, 3, 0, (void*) ora_zpgx, -2, -2 }, + /* 0x16 */ { "ASL", 0x16, 2, 6, 0, (void*) asl_zpgx, -2, -2 }, + /* 0x17 */ { "???", 0x17, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x18 */ { "CLC", 0x18, 1, 2, 0, (void*) clc, -2, -2 }, + /* 0x19 */ { "ORA", 0x19, 3, 4, 0, (void*) ora_absy, -2, -2 }, + /* 0x1a */ { "???", 0x1a, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x1b */ { "???", 0x1b, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x1c */ { "???", 0x1c, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x1d */ { "ORA", 0x1d, 3, 4, 0, (void*) ora_absx, -2, -2 }, + /* 0x1e */ { "ASL", 0x1e, 3, 7, 0, (void*) asl_absx, -2, -2 }, + /* 0x1f */ { "???", 0x1f, 1, 2, 0, (void*) unimplemented, -2, -2 }, - /* 0x20 */ { "JSR", 0x20, 3, 6, 2, (void*) jsr_abs, LUA_NOREF, LUA_NOREF }, - /* 0x21 */ { "AND", 0x21, 2, 6, 0, (void*) and_indx, LUA_NOREF, LUA_NOREF }, - /* 0x22 */ { "???", 0x22, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x23 */ { "???", 0x23, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x24 */ { "BIT", 0x24, 2, 3, 0, (void*) bit_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x25 */ { "AND", 0x25, 2, 3, 0, (void*) and_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x26 */ { "ROL", 0x26, 2, 5, 0, (void*) rol_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x27 */ { "???", 0x27, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x28 */ { "PLP", 0x28, 1, 4, 0, (void*) plp, LUA_NOREF, LUA_NOREF }, - /* 0x29 */ { "AND", 0x29, 2, 2, 0, (void*) and_imm, LUA_NOREF, LUA_NOREF }, - /* 0x2a */ { "ROL", 0x2a, 1, 2, 0, (void*) rol_acc, LUA_NOREF, LUA_NOREF }, - /* 0x2b */ { "???", 0x2b, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x2c */ { "BIT", 0x2c, 3, 4, 0, (void*) bit_abs, LUA_NOREF, LUA_NOREF }, - /* 0x2d */ { "AND", 0x2d, 3, 4, 0, (void*) and_abs, LUA_NOREF, LUA_NOREF }, - /* 0x2e */ { "ROL", 0x2e, 3, 6, 0, (void*) rol_abs, LUA_NOREF, LUA_NOREF }, - /* 0x2f */ { "???", 0x2f, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x30 */ { "BMI", 0x30, 2, 2, 0, (void*) bmi, LUA_NOREF, LUA_NOREF }, - /* 0x31 */ { "AND", 0x31, 2, 5, 0, (void*) and_indy, LUA_NOREF, LUA_NOREF }, - /* 0x32 */ { "???", 0x32, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x33 */ { "???", 0x33, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x34 */ { "???", 0x34, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x35 */ { "AND", 0x35, 2, 4, 0, (void*) and_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x36 */ { "ROL", 0x36, 2, 6, 0, (void*) rol_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x37 */ { "???", 0x37, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x38 */ { "SEC", 0x38, 1, 2, 0, (void*) sec, LUA_NOREF, LUA_NOREF }, - /* 0x39 */ { "AND", 0x39, 3, 4, 0, (void*) and_absy, LUA_NOREF, LUA_NOREF }, - /* 0x3a */ { "???", 0x3a, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x3b */ { "???", 0x3b, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x3c */ { "???", 0x3c, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x3d */ { "AND", 0x3d, 3, 4, 0, (void*) and_absx, LUA_NOREF, LUA_NOREF }, - /* 0x3e */ { "ROL", 0x3e, 3, 7, 0, (void*) rol_absx, LUA_NOREF, LUA_NOREF }, - /* 0x3f */ { "???", 0x3f, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, + /* 0x20 */ { "JSR", 0x20, 3, 6, 2, (void*) jsr_abs, -2, -2 }, + /* 0x21 */ { "AND", 0x21, 2, 6, 0, (void*) and_indx, -2, -2 }, + /* 0x22 */ { "???", 0x22, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x23 */ { "???", 0x23, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x24 */ { "BIT", 0x24, 2, 3, 0, (void*) bit_zpg, -2, -2 }, + /* 0x25 */ { "AND", 0x25, 2, 3, 0, (void*) and_zpg, -2, -2 }, + /* 0x26 */ { "ROL", 0x26, 2, 5, 0, (void*) rol_zpg, -2, -2 }, + /* 0x27 */ { "???", 0x27, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x28 */ { "PLP", 0x28, 1, 4, 0, (void*) plp, -2, -2 }, + /* 0x29 */ { "AND", 0x29, 2, 2, 0, (void*) and_imm, -2, -2 }, + /* 0x2a */ { "ROL", 0x2a, 1, 2, 0, (void*) rol_acc, -2, -2 }, + /* 0x2b */ { "???", 0x2b, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x2c */ { "BIT", 0x2c, 3, 4, 0, (void*) bit_abs, -2, -2 }, + /* 0x2d */ { "AND", 0x2d, 3, 4, 0, (void*) and_abs, -2, -2 }, + /* 0x2e */ { "ROL", 0x2e, 3, 6, 0, (void*) rol_abs, -2, -2 }, + /* 0x2f */ { "???", 0x2f, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x30 */ { "BMI", 0x30, 2, 2, 0, (void*) bmi, -2, -2 }, + /* 0x31 */ { "AND", 0x31, 2, 5, 0, (void*) and_indy, -2, -2 }, + /* 0x32 */ { "???", 0x32, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x33 */ { "???", 0x33, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x34 */ { "???", 0x34, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x35 */ { "AND", 0x35, 2, 4, 0, (void*) and_zpgx, -2, -2 }, + /* 0x36 */ { "ROL", 0x36, 2, 6, 0, (void*) rol_zpgx, -2, -2 }, + /* 0x37 */ { "???", 0x37, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x38 */ { "SEC", 0x38, 1, 2, 0, (void*) sec, -2, -2 }, + /* 0x39 */ { "AND", 0x39, 3, 4, 0, (void*) and_absy, -2, -2 }, + /* 0x3a */ { "???", 0x3a, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x3b */ { "???", 0x3b, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x3c */ { "???", 0x3c, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x3d */ { "AND", 0x3d, 3, 4, 0, (void*) and_absx, -2, -2 }, + /* 0x3e */ { "ROL", 0x3e, 3, 7, 0, (void*) rol_absx, -2, -2 }, + /* 0x3f */ { "???", 0x3f, 1, 2, 0, (void*) unimplemented, -2, -2 }, - /* 0x40 */ { "RTI", 0x40, 1, 6, -3, (void*) rti, LUA_NOREF, LUA_NOREF }, - /* 0x41 */ { "EOR", 0x41, 2, 6, 0, (void*) eor_indx, LUA_NOREF, LUA_NOREF }, - /* 0x42 */ { "???", 0x42, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x43 */ { "???", 0x43, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x44 */ { "???", 0x44, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x45 */ { "EOR", 0x45, 2, 3, 0, (void*) eor_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x46 */ { "LSR", 0x46, 2, 5, 0, (void*) lsr_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x47 */ { "???", 0x47, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x48 */ { "PHA", 0x48, 1, 3, 1, (void*) pha, LUA_NOREF, LUA_NOREF }, - /* 0x49 */ { "EOR", 0x49, 2, 2, 0, (void*) eor_imm, LUA_NOREF, LUA_NOREF }, - /* 0x4a */ { "LSR", 0x4a, 1, 2, 0, (void*) lsr_acc, LUA_NOREF, LUA_NOREF }, - /* 0x4b */ { "???", 0x4b, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x4c */ { "JMP", 0x4c, 3, 3, 0, (void*) jmp_abs, LUA_NOREF, LUA_NOREF }, - /* 0x4d */ { "EOR", 0x4d, 3, 4, 0, (void*) eor_abs, LUA_NOREF, LUA_NOREF }, - /* 0x4e */ { "LSR", 0x4e, 3, 6, 0, (void*) lsr_abs, LUA_NOREF, LUA_NOREF }, - /* 0x4f */ { "???", 0x4f, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x50 */ { "BVC", 0x50, 2, 2, 0, (void*) bvc, LUA_NOREF, LUA_NOREF }, - /* 0x51 */ { "EOR", 0x51, 2, 5, 0, (void*) eor_indy, LUA_NOREF, LUA_NOREF }, - /* 0x52 */ { "???", 0x52, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x53 */ { "???", 0x53, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x54 */ { "???", 0x54, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x55 */ { "EOR", 0x55, 2, 4, 0, (void*) eor_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x56 */ { "LSR", 0x56, 2, 6, 0, (void*) lsr_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x57 */ { "???", 0x57, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x58 */ { "CLI", 0x58, 1, 2, 0, (void*) cli, LUA_NOREF, LUA_NOREF }, - /* 0x59 */ { "EOR", 0x59, 3, 4, 0, (void*) eor_absy, LUA_NOREF, LUA_NOREF }, - /* 0x5a */ { "???", 0x5a, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x5b */ { "???", 0x5b, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x5c */ { "???", 0x5c, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x5d */ { "EOR", 0x5d, 3, 4, 0, (void*) eor_absx, LUA_NOREF, LUA_NOREF }, - /* 0x5e */ { "LSR", 0x5e, 3, 7, 0, (void*) lsr_absx, LUA_NOREF, LUA_NOREF }, - /* 0x5f */ { "???", 0x5f, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, + /* 0x40 */ { "RTI", 0x40, 1, 6, -3, (void*) rti, -2, -2 }, + /* 0x41 */ { "EOR", 0x41, 2, 6, 0, (void*) eor_indx, -2, -2 }, + /* 0x42 */ { "???", 0x42, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x43 */ { "???", 0x43, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x44 */ { "???", 0x44, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x45 */ { "EOR", 0x45, 2, 3, 0, (void*) eor_zpg, -2, -2 }, + /* 0x46 */ { "LSR", 0x46, 2, 5, 0, (void*) lsr_zpg, -2, -2 }, + /* 0x47 */ { "???", 0x47, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x48 */ { "PHA", 0x48, 1, 3, 1, (void*) pha, -2, -2 }, + /* 0x49 */ { "EOR", 0x49, 2, 2, 0, (void*) eor_imm, -2, -2 }, + /* 0x4a */ { "LSR", 0x4a, 1, 2, 0, (void*) lsr_acc, -2, -2 }, + /* 0x4b */ { "???", 0x4b, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x4c */ { "JMP", 0x4c, 3, 3, 0, (void*) jmp_abs, -2, -2 }, + /* 0x4d */ { "EOR", 0x4d, 3, 4, 0, (void*) eor_abs, -2, -2 }, + /* 0x4e */ { "LSR", 0x4e, 3, 6, 0, (void*) lsr_abs, -2, -2 }, + /* 0x4f */ { "???", 0x4f, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x50 */ { "BVC", 0x50, 2, 2, 0, (void*) bvc, -2, -2 }, + /* 0x51 */ { "EOR", 0x51, 2, 5, 0, (void*) eor_indy, -2, -2 }, + /* 0x52 */ { "???", 0x52, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x53 */ { "???", 0x53, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x54 */ { "???", 0x54, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x55 */ { "EOR", 0x55, 2, 4, 0, (void*) eor_zpgx, -2, -2 }, + /* 0x56 */ { "LSR", 0x56, 2, 6, 0, (void*) lsr_zpgx, -2, -2 }, + /* 0x57 */ { "???", 0x57, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x58 */ { "CLI", 0x58, 1, 2, 0, (void*) cli, -2, -2 }, + /* 0x59 */ { "EOR", 0x59, 3, 4, 0, (void*) eor_absy, -2, -2 }, + /* 0x5a */ { "???", 0x5a, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x5b */ { "???", 0x5b, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x5c */ { "???", 0x5c, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x5d */ { "EOR", 0x5d, 3, 4, 0, (void*) eor_absx, -2, -2 }, + /* 0x5e */ { "LSR", 0x5e, 3, 7, 0, (void*) lsr_absx, -2, -2 }, + /* 0x5f */ { "???", 0x5f, 1, 2, 0, (void*) unimplemented, -2, -2 }, - /* 0x60 */ { "RTS", 0x60, 1, 6, -2, (void*) rts, LUA_NOREF, LUA_NOREF }, - /* 0x61 */ { "ADC", 0x61, 2, 6, 0, (void*) adc_indx, LUA_NOREF, LUA_NOREF }, - /* 0x62 */ { "???", 0x62, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x63 */ { "???", 0x63, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x64 */ { "???", 0x64, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x65 */ { "ADC", 0x65, 2, 3, 0, (void*) adc_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x66 */ { "ROR", 0x66, 2, 5, 0, (void*) ror_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x67 */ { "???", 0x67, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x68 */ { "PLA", 0x68, 1, 4, -1, (void*) pla, LUA_NOREF, LUA_NOREF }, - /* 0x69 */ { "ADC", 0x69, 2, 2, 0, (void*) adc_imm, LUA_NOREF, LUA_NOREF }, - /* 0x6a */ { "ROR", 0x6a, 1, 2, 0, (void*) ror_acc, LUA_NOREF, LUA_NOREF }, - /* 0x6b */ { "???", 0x6b, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x6c */ { "JMP", 0x6c, 3, 5, 0, (void*) jmp_ind, LUA_NOREF, LUA_NOREF }, - /* 0x6d */ { "ADC", 0x6d, 3, 4, 0, (void*) adc_abs, LUA_NOREF, LUA_NOREF }, - /* 0x6e */ { "ROR", 0x6e, 3, 6, 0, (void*) ror_abs, LUA_NOREF, LUA_NOREF }, - /* 0x6f */ { "???", 0x6f, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x70 */ { "BVS", 0x70, 2, 2, 0, (void*) bvs, LUA_NOREF, LUA_NOREF }, - /* 0x71 */ { "ADC", 0x71, 2, 5, 0, (void*) adc_indy, LUA_NOREF, LUA_NOREF }, - /* 0x72 */ { "???", 0x72, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x73 */ { "???", 0x73, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x74 */ { "???", 0x74, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x75 */ { "ADC", 0x75, 2, 4, 0, (void*) adc_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x76 */ { "ROR", 0x76, 2, 6, 0, (void*) ror_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x77 */ { "???", 0x77, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x78 */ { "SEI", 0x78, 1, 2, 0, (void*) sei, LUA_NOREF, LUA_NOREF }, - /* 0x79 */ { "ADC", 0x79, 3, 4, 0, (void*) adc_absy, LUA_NOREF, LUA_NOREF }, - /* 0x7a */ { "???", 0x7a, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x7b */ { "???", 0x7b, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x7c */ { "???", 0x7c, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x7d */ { "ADC", 0x7d, 3, 4, 0, (void*) adc_absx, LUA_NOREF, LUA_NOREF }, - /* 0x7e */ { "ROR", 0x7e, 3, 7, 0, (void*) ror_absx, LUA_NOREF, LUA_NOREF }, - /* 0x7f */ { "???", 0x7f, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, + /* 0x60 */ { "RTS", 0x60, 1, 6, -2, (void*) rts, -2, -2 }, + /* 0x61 */ { "ADC", 0x61, 2, 6, 0, (void*) adc_indx, -2, -2 }, + /* 0x62 */ { "???", 0x62, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x63 */ { "???", 0x63, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x64 */ { "???", 0x64, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x65 */ { "ADC", 0x65, 2, 3, 0, (void*) adc_zpg, -2, -2 }, + /* 0x66 */ { "ROR", 0x66, 2, 5, 0, (void*) ror_zpg, -2, -2 }, + /* 0x67 */ { "???", 0x67, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x68 */ { "PLA", 0x68, 1, 4, -1, (void*) pla, -2, -2 }, + /* 0x69 */ { "ADC", 0x69, 2, 2, 0, (void*) adc_imm, -2, -2 }, + /* 0x6a */ { "ROR", 0x6a, 1, 2, 0, (void*) ror_acc, -2, -2 }, + /* 0x6b */ { "???", 0x6b, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x6c */ { "JMP", 0x6c, 3, 5, 0, (void*) jmp_ind, -2, -2 }, + /* 0x6d */ { "ADC", 0x6d, 3, 4, 0, (void*) adc_abs, -2, -2 }, + /* 0x6e */ { "ROR", 0x6e, 3, 6, 0, (void*) ror_abs, -2, -2 }, + /* 0x6f */ { "???", 0x6f, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x70 */ { "BVS", 0x70, 2, 2, 0, (void*) bvs, -2, -2 }, + /* 0x71 */ { "ADC", 0x71, 2, 5, 0, (void*) adc_indy, -2, -2 }, + /* 0x72 */ { "???", 0x72, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x73 */ { "???", 0x73, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x74 */ { "???", 0x74, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x75 */ { "ADC", 0x75, 2, 4, 0, (void*) adc_zpgx, -2, -2 }, + /* 0x76 */ { "ROR", 0x76, 2, 6, 0, (void*) ror_zpgx, -2, -2 }, + /* 0x77 */ { "???", 0x77, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x78 */ { "SEI", 0x78, 1, 2, 0, (void*) sei, -2, -2 }, + /* 0x79 */ { "ADC", 0x79, 3, 4, 0, (void*) adc_absy, -2, -2 }, + /* 0x7a */ { "???", 0x7a, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x7b */ { "???", 0x7b, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x7c */ { "???", 0x7c, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x7d */ { "ADC", 0x7d, 3, 4, 0, (void*) adc_absx, -2, -2 }, + /* 0x7e */ { "ROR", 0x7e, 3, 7, 0, (void*) ror_absx, -2, -2 }, + /* 0x7f */ { "???", 0x7f, 1, 2, 0, (void*) unimplemented, -2, -2 }, - /* 0x80 */ { "???", 0x80, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x81 */ { "STA", 0x81, 2, 6, 0, (void*) sta_indx, LUA_NOREF, LUA_NOREF }, - /* 0x82 */ { "???", 0x82, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x83 */ { "???", 0x83, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x84 */ { "STY", 0x84, 2, 3, 0, (void*) sty_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x85 */ { "STA", 0x85, 2, 3, 0, (void*) sta_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x86 */ { "STX", 0x86, 2, 3, 0, (void*) stx_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x87 */ { "???", 0x87, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x88 */ { "DEY", 0x88, 1, 2, 0, (void*) dey, LUA_NOREF, LUA_NOREF }, - /* 0x89 */ { "???", 0x89, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x8a */ { "TXA", 0x8a, 1, 2, 0, (void*) txa, LUA_NOREF, LUA_NOREF }, - /* 0x8b */ { "???", 0x8b, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x8c */ { "STY", 0x8c, 3, 4, 0, (void*) sty_abs, LUA_NOREF, LUA_NOREF }, - /* 0x8d */ { "STA", 0x8d, 3, 4, 0, (void*) sta_abs, LUA_NOREF, LUA_NOREF }, - /* 0x8e */ { "STX", 0x8e, 3, 4, 0, (void*) stx_abs, LUA_NOREF, LUA_NOREF }, - /* 0x8f */ { "???", 0x8f, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x90 */ { "BCC", 0x90, 2, 2, 0, (void*) bcc, LUA_NOREF, LUA_NOREF }, - /* 0x91 */ { "STA", 0x91, 2, 6, 0, (void*) sta_indy, LUA_NOREF, LUA_NOREF }, - /* 0x92 */ { "???", 0x92, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x93 */ { "???", 0x93, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x94 */ { "STY", 0x94, 2, 4, 0, (void*) sty_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x95 */ { "STA", 0x95, 2, 4, 0, (void*) sta_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x96 */ { "STX", 0x96, 2, 4, 0, (void*) stx_zpgy, LUA_NOREF, LUA_NOREF }, - /* 0x97 */ { "???", 0x97, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x98 */ { "TYA", 0x98, 1, 2, 0, (void*) tya, LUA_NOREF, LUA_NOREF }, - /* 0x99 */ { "STA", 0x99, 3, 5, 0, (void*) sta_absy, LUA_NOREF, LUA_NOREF }, - /* 0x9a */ { "TXS", 0x9a, 1, 2, 0, (void*) txs, LUA_NOREF, LUA_NOREF }, - /* 0x9b */ { "???", 0x9b, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x9c */ { "???", 0x9c, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x9d */ { "STA", 0x9d, 3, 5, 0, (void*) sta_absx, LUA_NOREF, LUA_NOREF }, - /* 0x9e */ { "???", 0x9e, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0x9f */ { "???", 0x9f, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, + /* 0x80 */ { "???", 0x80, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x81 */ { "STA", 0x81, 2, 6, 0, (void*) sta_indx, -2, -2 }, + /* 0x82 */ { "???", 0x82, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x83 */ { "???", 0x83, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x84 */ { "STY", 0x84, 2, 3, 0, (void*) sty_zpg, -2, -2 }, + /* 0x85 */ { "STA", 0x85, 2, 3, 0, (void*) sta_zpg, -2, -2 }, + /* 0x86 */ { "STX", 0x86, 2, 3, 0, (void*) stx_zpg, -2, -2 }, + /* 0x87 */ { "???", 0x87, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x88 */ { "DEY", 0x88, 1, 2, 0, (void*) dey, -2, -2 }, + /* 0x89 */ { "???", 0x89, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x8a */ { "TXA", 0x8a, 1, 2, 0, (void*) txa, -2, -2 }, + /* 0x8b */ { "???", 0x8b, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x8c */ { "STY", 0x8c, 3, 4, 0, (void*) sty_abs, -2, -2 }, + /* 0x8d */ { "STA", 0x8d, 3, 4, 0, (void*) sta_abs, -2, -2 }, + /* 0x8e */ { "STX", 0x8e, 3, 4, 0, (void*) stx_abs, -2, -2 }, + /* 0x8f */ { "???", 0x8f, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x90 */ { "BCC", 0x90, 2, 2, 0, (void*) bcc, -2, -2 }, + /* 0x91 */ { "STA", 0x91, 2, 6, 0, (void*) sta_indy, -2, -2 }, + /* 0x92 */ { "???", 0x92, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x93 */ { "???", 0x93, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x94 */ { "STY", 0x94, 2, 4, 0, (void*) sty_zpgx, -2, -2 }, + /* 0x95 */ { "STA", 0x95, 2, 4, 0, (void*) sta_zpgx, -2, -2 }, + /* 0x96 */ { "STX", 0x96, 2, 4, 0, (void*) stx_zpgy, -2, -2 }, + /* 0x97 */ { "???", 0x97, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x98 */ { "TYA", 0x98, 1, 2, 0, (void*) tya, -2, -2 }, + /* 0x99 */ { "STA", 0x99, 3, 5, 0, (void*) sta_absy, -2, -2 }, + /* 0x9a */ { "TXS", 0x9a, 1, 2, 0, (void*) txs, -2, -2 }, + /* 0x9b */ { "???", 0x9b, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x9c */ { "???", 0x9c, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x9d */ { "STA", 0x9d, 3, 5, 0, (void*) sta_absx, -2, -2 }, + /* 0x9e */ { "???", 0x9e, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0x9f */ { "???", 0x9f, 1, 2, 0, (void*) unimplemented, -2, -2 }, - /* 0xa0 */ { "LDY", 0xa0, 2, 2, 0, (void*) ldy_imm, LUA_NOREF, LUA_NOREF }, - /* 0xa1 */ { "LDA", 0xa1, 2, 6, 0, (void*) lda_indx, LUA_NOREF, LUA_NOREF }, - /* 0xa2 */ { "LDX", 0xa2, 2, 2, 0, (void*) ldx_imm, LUA_NOREF, LUA_NOREF }, - /* 0xa3 */ { "???", 0xa3, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xa4 */ { "LDY", 0xa4, 2, 3, 0, (void*) ldy_zpg, LUA_NOREF, LUA_NOREF }, - /* 0xa5 */ { "LDA", 0xa5, 2, 3, 0, (void*) lda_zpg, LUA_NOREF, LUA_NOREF }, - /* 0xa6 */ { "LDX", 0xa6, 2, 3, 0, (void*) ldx_zpg, LUA_NOREF, LUA_NOREF }, - /* 0xa7 */ { "???", 0xa7, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xa8 */ { "TAY", 0xa8, 1, 2, 0, (void*) tay, LUA_NOREF, LUA_NOREF }, - /* 0xa9 */ { "LDA", 0xa9, 2, 2, 0, (void*) lda_imm, LUA_NOREF, LUA_NOREF }, - /* 0xaa */ { "TAX", 0xaa, 1, 2, 0, (void*) tax, LUA_NOREF, LUA_NOREF }, - /* 0xab */ { "???", 0xab, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xac */ { "LDY", 0xac, 3, 4, 0, (void*) ldy_abs, LUA_NOREF, LUA_NOREF }, - /* 0xad */ { "LDA", 0xad, 3, 4, 0, (void*) lda_abs, LUA_NOREF, LUA_NOREF }, - /* 0xae */ { "LDX", 0xae, 3, 4, 0, (void*) ldx_abs, LUA_NOREF, LUA_NOREF }, - /* 0xaf */ { "???", 0xaf, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xb0 */ { "BCS", 0xb0, 2, 2, 0, (void*) bcs, LUA_NOREF, LUA_NOREF }, - /* 0xb1 */ { "LDA", 0xb1, 2, 5, 0, (void*) lda_indy, LUA_NOREF, LUA_NOREF }, - /* 0xb2 */ { "???", 0xb2, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xb3 */ { "???", 0xb3, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xb4 */ { "LDY", 0xb4, 2, 4, 0, (void*) ldy_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0xb5 */ { "LDA", 0xb5, 2, 4, 0, (void*) lda_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0xb6 */ { "LDX", 0xb6, 2, 4, 0, (void*) ldx_zpgy, LUA_NOREF, LUA_NOREF }, - /* 0xb7 */ { "???", 0xb7, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xb8 */ { "CLV", 0xb8, 1, 2, 0, (void*) clv, LUA_NOREF, LUA_NOREF }, - /* 0xb9 */ { "LDA", 0xb9, 3, 4, 0, (void*) lda_absy, LUA_NOREF, LUA_NOREF }, - /* 0xba */ { "TSX", 0xba, 1, 2, 0, (void*) tsx, LUA_NOREF, LUA_NOREF }, - /* 0xbb */ { "???", 0xbb, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xbc */ { "LDY", 0xbc, 3, 4, 0, (void*) ldy_absx, LUA_NOREF, LUA_NOREF }, - /* 0xbd */ { "LDA", 0xbd, 3, 4, 0, (void*) lda_absx, LUA_NOREF, LUA_NOREF }, - /* 0xbe */ { "LDX", 0xbe, 3, 4, 0, (void*) ldx_absy, LUA_NOREF, LUA_NOREF }, - /* 0xbf */ { "???", 0xbf, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, + /* 0xa0 */ { "LDY", 0xa0, 2, 2, 0, (void*) ldy_imm, -2, -2 }, + /* 0xa1 */ { "LDA", 0xa1, 2, 6, 0, (void*) lda_indx, -2, -2 }, + /* 0xa2 */ { "LDX", 0xa2, 2, 2, 0, (void*) ldx_imm, -2, -2 }, + /* 0xa3 */ { "???", 0xa3, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xa4 */ { "LDY", 0xa4, 2, 3, 0, (void*) ldy_zpg, -2, -2 }, + /* 0xa5 */ { "LDA", 0xa5, 2, 3, 0, (void*) lda_zpg, -2, -2 }, + /* 0xa6 */ { "LDX", 0xa6, 2, 3, 0, (void*) ldx_zpg, -2, -2 }, + /* 0xa7 */ { "???", 0xa7, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xa8 */ { "TAY", 0xa8, 1, 2, 0, (void*) tay, -2, -2 }, + /* 0xa9 */ { "LDA", 0xa9, 2, 2, 0, (void*) lda_imm, -2, -2 }, + /* 0xaa */ { "TAX", 0xaa, 1, 2, 0, (void*) tax, -2, -2 }, + /* 0xab */ { "???", 0xab, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xac */ { "LDY", 0xac, 3, 4, 0, (void*) ldy_abs, -2, -2 }, + /* 0xad */ { "LDA", 0xad, 3, 4, 0, (void*) lda_abs, -2, -2 }, + /* 0xae */ { "LDX", 0xae, 3, 4, 0, (void*) ldx_abs, -2, -2 }, + /* 0xaf */ { "???", 0xaf, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xb0 */ { "BCS", 0xb0, 2, 2, 0, (void*) bcs, -2, -2 }, + /* 0xb1 */ { "LDA", 0xb1, 2, 5, 0, (void*) lda_indy, -2, -2 }, + /* 0xb2 */ { "???", 0xb2, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xb3 */ { "???", 0xb3, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xb4 */ { "LDY", 0xb4, 2, 4, 0, (void*) ldy_zpgx, -2, -2 }, + /* 0xb5 */ { "LDA", 0xb5, 2, 4, 0, (void*) lda_zpgx, -2, -2 }, + /* 0xb6 */ { "LDX", 0xb6, 2, 4, 0, (void*) ldx_zpgy, -2, -2 }, + /* 0xb7 */ { "???", 0xb7, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xb8 */ { "CLV", 0xb8, 1, 2, 0, (void*) clv, -2, -2 }, + /* 0xb9 */ { "LDA", 0xb9, 3, 4, 0, (void*) lda_absy, -2, -2 }, + /* 0xba */ { "TSX", 0xba, 1, 2, 0, (void*) tsx, -2, -2 }, + /* 0xbb */ { "???", 0xbb, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xbc */ { "LDY", 0xbc, 3, 4, 0, (void*) ldy_absx, -2, -2 }, + /* 0xbd */ { "LDA", 0xbd, 3, 4, 0, (void*) lda_absx, -2, -2 }, + /* 0xbe */ { "LDX", 0xbe, 3, 4, 0, (void*) ldx_absy, -2, -2 }, + /* 0xbf */ { "???", 0xbf, 1, 2, 0, (void*) unimplemented, -2, -2 }, - /* 0xc0 */ { "CPY", 0xc0, 2, 2, 0, (void*) cpy_imm, LUA_NOREF, LUA_NOREF }, - /* 0xc1 */ { "CMP", 0xc1, 2, 6, 0, (void*) cmp_indx, LUA_NOREF, LUA_NOREF }, - /* 0xc2 */ { "???", 0xc2, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xc3 */ { "???", 0xc3, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xc4 */ { "CPY", 0xc4, 2, 3, 0, (void*) cpy_zpg, LUA_NOREF, LUA_NOREF }, - /* 0xc5 */ { "CMP", 0xc5, 2, 3, 0, (void*) cmp_zpg, LUA_NOREF, LUA_NOREF }, - /* 0xc6 */ { "DEC", 0xc6, 2, 5, 0, (void*) dec_zpg, LUA_NOREF, LUA_NOREF }, - /* 0xc7 */ { "???", 0xc7, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xc8 */ { "INY", 0xc8, 1, 2, 0, (void*) iny, LUA_NOREF, LUA_NOREF }, - /* 0xc9 */ { "CMP", 0xc9, 2, 2, 0, (void*) cmp_imm, LUA_NOREF, LUA_NOREF }, - /* 0xca */ { "DEX", 0xca, 1, 2, 0, (void*) dex, LUA_NOREF, LUA_NOREF }, - /* 0xcb */ { "???", 0xcb, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xcc */ { "CPY", 0xcc, 3, 4, 0, (void*) cpy_abs, LUA_NOREF, LUA_NOREF }, - /* 0xcd */ { "CMP", 0xcd, 3, 4, 0, (void*) cmp_abs, LUA_NOREF, LUA_NOREF }, - /* 0xce */ { "DEC", 0xce, 3, 3, 0, (void*) dec_abs, LUA_NOREF, LUA_NOREF }, - /* 0xcf */ { "???", 0xcf, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xd0 */ { "BNE", 0xd0, 2, 2, 0, (void*) bne, LUA_NOREF, LUA_NOREF }, - /* 0xd1 */ { "CMP", 0xd1, 2, 5, 0, (void*) cmp_indy, LUA_NOREF, LUA_NOREF }, - /* 0xd2 */ { "???", 0xd2, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xd3 */ { "???", 0xd3, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xd4 */ { "???", 0xd4, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xd5 */ { "CMP", 0xd5, 2, 4, 0, (void*) cmp_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0xd6 */ { "DEC", 0xd6, 2, 6, 0, (void*) dec_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0xd7 */ { "???", 0xd7, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xd8 */ { "CLD", 0xd8, 1, 2, 0, (void*) cld, LUA_NOREF, LUA_NOREF }, - /* 0xd9 */ { "CMP", 0xd9, 3, 4, 0, (void*) cmp_absy, LUA_NOREF, LUA_NOREF }, - /* 0xda */ { "???", 0xda, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xdb */ { "???", 0xdb, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xdc */ { "???", 0xdc, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xdd */ { "CMP", 0xdd, 3, 4, 0, (void*) cmp_absx, LUA_NOREF, LUA_NOREF }, - /* 0xde */ { "DEC", 0xde, 3, 7, 0, (void*) dec_absx, LUA_NOREF, LUA_NOREF }, - /* 0xdf */ { "???", 0xdf, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, + /* 0xc0 */ { "CPY", 0xc0, 2, 2, 0, (void*) cpy_imm, -2, -2 }, + /* 0xc1 */ { "CMP", 0xc1, 2, 6, 0, (void*) cmp_indx, -2, -2 }, + /* 0xc2 */ { "???", 0xc2, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xc3 */ { "???", 0xc3, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xc4 */ { "CPY", 0xc4, 2, 3, 0, (void*) cpy_zpg, -2, -2 }, + /* 0xc5 */ { "CMP", 0xc5, 2, 3, 0, (void*) cmp_zpg, -2, -2 }, + /* 0xc6 */ { "DEC", 0xc6, 2, 5, 0, (void*) dec_zpg, -2, -2 }, + /* 0xc7 */ { "???", 0xc7, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xc8 */ { "INY", 0xc8, 1, 2, 0, (void*) iny, -2, -2 }, + /* 0xc9 */ { "CMP", 0xc9, 2, 2, 0, (void*) cmp_imm, -2, -2 }, + /* 0xca */ { "DEX", 0xca, 1, 2, 0, (void*) dex, -2, -2 }, + /* 0xcb */ { "???", 0xcb, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xcc */ { "CPY", 0xcc, 3, 4, 0, (void*) cpy_abs, -2, -2 }, + /* 0xcd */ { "CMP", 0xcd, 3, 4, 0, (void*) cmp_abs, -2, -2 }, + /* 0xce */ { "DEC", 0xce, 3, 3, 0, (void*) dec_abs, -2, -2 }, + /* 0xcf */ { "???", 0xcf, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xd0 */ { "BNE", 0xd0, 2, 2, 0, (void*) bne, -2, -2 }, + /* 0xd1 */ { "CMP", 0xd1, 2, 5, 0, (void*) cmp_indy, -2, -2 }, + /* 0xd2 */ { "???", 0xd2, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xd3 */ { "???", 0xd3, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xd4 */ { "???", 0xd4, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xd5 */ { "CMP", 0xd5, 2, 4, 0, (void*) cmp_zpgx, -2, -2 }, + /* 0xd6 */ { "DEC", 0xd6, 2, 6, 0, (void*) dec_zpgx, -2, -2 }, + /* 0xd7 */ { "???", 0xd7, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xd8 */ { "CLD", 0xd8, 1, 2, 0, (void*) cld, -2, -2 }, + /* 0xd9 */ { "CMP", 0xd9, 3, 4, 0, (void*) cmp_absy, -2, -2 }, + /* 0xda */ { "???", 0xda, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xdb */ { "???", 0xdb, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xdc */ { "???", 0xdc, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xdd */ { "CMP", 0xdd, 3, 4, 0, (void*) cmp_absx, -2, -2 }, + /* 0xde */ { "DEC", 0xde, 3, 7, 0, (void*) dec_absx, -2, -2 }, + /* 0xdf */ { "???", 0xdf, 1, 2, 0, (void*) unimplemented, -2, -2 }, - /* 0xe0 */ { "CPX", 0xe0, 2, 2, 0, (void*) cpx_imm, LUA_NOREF, LUA_NOREF }, - /* 0xe1 */ { "SBC", 0xe1, 2, 2, 0, (void*) sbc_indx, LUA_NOREF, LUA_NOREF }, - /* 0xe2 */ { "???", 0xe2, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xe3 */ { "???", 0xe3, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xe4 */ { "CPX", 0xe4, 2, 3, 0, (void*) cpx_zpg, LUA_NOREF, LUA_NOREF }, - /* 0xe5 */ { "SBC", 0xe5, 2, 2, 0, (void*) sbc_zpg, LUA_NOREF, LUA_NOREF }, - /* 0xe6 */ { "INC", 0xe6, 2, 5, 0, (void*) inc_zpg, LUA_NOREF, LUA_NOREF }, - /* 0xe7 */ { "???", 0xe7, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xe8 */ { "INX", 0xe8, 1, 2, 0, (void*) inx, LUA_NOREF, LUA_NOREF }, - /* 0xe9 */ { "SBC", 0xe9, 2, 2, 0, (void*) sbc_imm, LUA_NOREF, LUA_NOREF }, - /* 0xea */ { "NOP", 0xea, 1, 2, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xeb */ { "???", 0xeb, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xec */ { "CPX", 0xec, 3, 4, 0, (void*) cpx_abs, LUA_NOREF, LUA_NOREF }, - /* 0xed */ { "SBC", 0xed, 3, 2, 0, (void*) sbc_abs, LUA_NOREF, LUA_NOREF }, - /* 0xee */ { "INC", 0xee, 3, 6, 0, (void*) inc_abs, LUA_NOREF, LUA_NOREF }, - /* 0xef */ { "???", 0xef, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xf0 */ { "BEQ", 0xf0, 2, 2, 0, (void*) beq, LUA_NOREF, LUA_NOREF }, - /* 0xf1 */ { "SBC", 0xf1, 2, 2, 0, (void*) sbc_indy, LUA_NOREF, LUA_NOREF }, - /* 0xf2 */ { "???", 0xf2, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xf3 */ { "???", 0xf3, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xf4 */ { "???", 0xf4, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xf5 */ { "SBC", 0xf5, 2, 2, 0, (void*) sbc_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0xf6 */ { "INC", 0xf6, 2, 6, 0, (void*) inc_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0xf7 */ { "???", 0xf7, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xf8 */ { "SED", 0xf8, 1, 2, 0, (void*) sed, LUA_NOREF, LUA_NOREF }, - /* 0xf9 */ { "SBC", 0xf9, 3, 2, 0, (void*) sbc_absy, LUA_NOREF, LUA_NOREF }, - /* 0xfa */ { "???", 0xfa, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xfb */ { "???", 0xfb, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xfc */ { "???", 0xfc, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF }, - /* 0xfd */ { "SBC", 0xfd, 3, 2, 0, (void*) sbc_absx, LUA_NOREF, LUA_NOREF }, - /* 0xfe */ { "INC", 0xfe, 3, 7, 0, (void*) inc_absx, LUA_NOREF, LUA_NOREF }, - /* 0xff */ { "???", 0xff, 1, 2, 0, (void*) unimplemented, LUA_NOREF, LUA_NOREF } + /* 0xe0 */ { "CPX", 0xe0, 2, 2, 0, (void*) cpx_imm, -2, -2 }, + /* 0xe1 */ { "SBC", 0xe1, 2, 2, 0, (void*) sbc_indx, -2, -2 }, + /* 0xe2 */ { "???", 0xe2, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xe3 */ { "???", 0xe3, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xe4 */ { "CPX", 0xe4, 2, 3, 0, (void*) cpx_zpg, -2, -2 }, + /* 0xe5 */ { "SBC", 0xe5, 2, 2, 0, (void*) sbc_zpg, -2, -2 }, + /* 0xe6 */ { "INC", 0xe6, 2, 5, 0, (void*) inc_zpg, -2, -2 }, + /* 0xe7 */ { "???", 0xe7, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xe8 */ { "INX", 0xe8, 1, 2, 0, (void*) inx, -2, -2 }, + /* 0xe9 */ { "SBC", 0xe9, 2, 2, 0, (void*) sbc_imm, -2, -2 }, + /* 0xea */ { "NOP", 0xea, 1, 2, 0, (void*) nop, -2, -2 }, + /* 0xeb */ { "???", 0xeb, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xec */ { "CPX", 0xec, 3, 4, 0, (void*) cpx_abs, -2, -2 }, + /* 0xed */ { "SBC", 0xed, 3, 2, 0, (void*) sbc_abs, -2, -2 }, + /* 0xee */ { "INC", 0xee, 3, 6, 0, (void*) inc_abs, -2, -2 }, + /* 0xef */ { "???", 0xef, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xf0 */ { "BEQ", 0xf0, 2, 2, 0, (void*) beq, -2, -2 }, + /* 0xf1 */ { "SBC", 0xf1, 2, 2, 0, (void*) sbc_indy, -2, -2 }, + /* 0xf2 */ { "???", 0xf2, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xf3 */ { "???", 0xf3, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xf4 */ { "???", 0xf4, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xf5 */ { "SBC", 0xf5, 2, 2, 0, (void*) sbc_zpgx, -2, -2 }, + /* 0xf6 */ { "INC", 0xf6, 2, 6, 0, (void*) inc_zpgx, -2, -2 }, + /* 0xf7 */ { "???", 0xf7, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xf8 */ { "SED", 0xf8, 1, 2, 0, (void*) sed, -2, -2 }, + /* 0xf9 */ { "SBC", 0xf9, 3, 2, 0, (void*) sbc_absy, -2, -2 }, + /* 0xfa */ { "???", 0xfa, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xfb */ { "???", 0xfb, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xfc */ { "???", 0xfc, 1, 2, 0, (void*) unimplemented, -2, -2 }, + /* 0xfd */ { "SBC", 0xfd, 3, 2, 0, (void*) sbc_absx, -2, -2 }, + /* 0xfe */ { "INC", 0xfe, 3, 7, 0, (void*) inc_absx, -2, -2 }, + /* 0xff */ { "???", 0xff, 1, 2, 0, (void*) unimplemented, -2, -2 } }; // EWM_CPU_MODEL_65C02 @@ -1458,275 +1463,275 @@ static void smb7(struct cpu_t *cpu, uint8_t oper) { /* Instruction dispatch table */ struct cpu_instruction_t instructions_65C02[256] = { - /* 0x00 */ { "???", 0x00, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x01 */ { "???", 0x01, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x02 */ { "NOP", 0x02, 2, 2, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x03 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x04 */ { "TSB", 0x04, 2, 5, 0, (void*) tsb_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x05 */ { "???", 0x05, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x06 */ { "???", 0x06, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x07 */ { "RMB", 0x07, 2, 5, 0, (void*) rmb0, LUA_NOREF, LUA_NOREF }, - /* 0x08 */ { "???", 0x08, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x09 */ { "???", 0x09, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x0a */ { "???", 0x0a, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x0b */ { "NOP", 0x0b, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x0c */ { "TSB", 0x0c, 3, 6, 0, (void*) tsb_abs, LUA_NOREF, LUA_NOREF }, - /* 0x0d */ { "???", 0x0d, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x0e */ { "???", 0x0e, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x0f */ { "BBR", 0x0f, 3, 5, 0, (void*) bbr0, LUA_NOREF, LUA_NOREF }, + /* 0x00 */ { "???", 0x00, 0, 0, 0, NULL, -2, -2 }, + /* 0x01 */ { "???", 0x01, 0, 0, 0, NULL, -2, -2 }, + /* 0x02 */ { "NOP", 0x02, 2, 2, 0, (void*) nop, -2, -2 }, + /* 0x03 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x04 */ { "TSB", 0x04, 2, 5, 0, (void*) tsb_zpg, -2, -2 }, + /* 0x05 */ { "???", 0x05, 0, 0, 0, NULL, -2, -2 }, + /* 0x06 */ { "???", 0x06, 0, 0, 0, NULL, -2, -2 }, + /* 0x07 */ { "RMB", 0x07, 2, 5, 0, (void*) rmb0, -2, -2 }, + /* 0x08 */ { "???", 0x08, 0, 0, 0, NULL, -2, -2 }, + /* 0x09 */ { "???", 0x09, 0, 0, 0, NULL, -2, -2 }, + /* 0x0a */ { "???", 0x0a, 0, 0, 0, NULL, -2, -2 }, + /* 0x0b */ { "NOP", 0x0b, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x0c */ { "TSB", 0x0c, 3, 6, 0, (void*) tsb_abs, -2, -2 }, + /* 0x0d */ { "???", 0x0d, 0, 0, 0, NULL, -2, -2 }, + /* 0x0e */ { "???", 0x0e, 0, 0, 0, NULL, -2, -2 }, + /* 0x0f */ { "BBR", 0x0f, 3, 5, 0, (void*) bbr0, -2, -2 }, - /* 0x10 */ { "???", 0x10, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x11 */ { "???", 0x12, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x12 */ { "ORA", 0x12, 2, 5, 0, (void*) ora_ind, LUA_NOREF, LUA_NOREF }, - /* 0x13 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x14 */ { "TRB", 0x14, 2, 5, 0, (void*) trb_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x15 */ { "???", 0x15, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x16 */ { "???", 0x16, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x17 */ { "RMB", 0x17, 2, 5, 0, (void*) rmb1, LUA_NOREF, LUA_NOREF }, - /* 0x18 */ { "???", 0x18, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x19 */ { "???", 0x19, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x1a */ { "INC", 0x1a, 1, 2, 0, (void*) inc_acc, LUA_NOREF, LUA_NOREF }, - /* 0x1b */ { "NOP", 0x1b, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x1c */ { "TRB", 0x1c, 3, 6, 0, (void*) trb_abs, LUA_NOREF, LUA_NOREF }, - /* 0x1d */ { "???", 0x1d, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x1e */ { "???", 0x1e, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x1f */ { "BBR", 0x1f, 3, 5, 0, (void*) bbr1, LUA_NOREF, LUA_NOREF }, + /* 0x10 */ { "???", 0x10, 0, 0, 0, NULL, -2, -2 }, + /* 0x11 */ { "???", 0x12, 0, 0, 0, NULL, -2, -2 }, + /* 0x12 */ { "ORA", 0x12, 2, 5, 0, (void*) ora_ind, -2, -2 }, + /* 0x13 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x14 */ { "TRB", 0x14, 2, 5, 0, (void*) trb_zpg, -2, -2 }, + /* 0x15 */ { "???", 0x15, 0, 0, 0, NULL, -2, -2 }, + /* 0x16 */ { "???", 0x16, 0, 0, 0, NULL, -2, -2 }, + /* 0x17 */ { "RMB", 0x17, 2, 5, 0, (void*) rmb1, -2, -2 }, + /* 0x18 */ { "???", 0x18, 0, 0, 0, NULL, -2, -2 }, + /* 0x19 */ { "???", 0x19, 0, 0, 0, NULL, -2, -2 }, + /* 0x1a */ { "INC", 0x1a, 1, 2, 0, (void*) inc_acc, -2, -2 }, + /* 0x1b */ { "NOP", 0x1b, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x1c */ { "TRB", 0x1c, 3, 6, 0, (void*) trb_abs, -2, -2 }, + /* 0x1d */ { "???", 0x1d, 0, 0, 0, NULL, -2, -2 }, + /* 0x1e */ { "???", 0x1e, 0, 0, 0, NULL, -2, -2 }, + /* 0x1f */ { "BBR", 0x1f, 3, 5, 0, (void*) bbr1, -2, -2 }, - /* 0x20 */ { "???", 0x20, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x21 */ { "???", 0x21, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x22 */ { "NOP", 0x22, 2, 2, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x23 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x24 */ { "???", 0x24, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x25 */ { "???", 0x25, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x26 */ { "???", 0x26, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x27 */ { "RMB", 0x27, 2, 5, 0, (void*) rmb2, LUA_NOREF, LUA_NOREF }, - /* 0x28 */ { "???", 0x28, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x29 */ { "???", 0x29, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x2a */ { "???", 0x2a, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x2b */ { "NOP", 0x2b, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x2c */ { "???", 0x2c, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x2d */ { "???", 0x2d, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x2e */ { "???", 0x2e, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x2f */ { "BBR", 0x2f, 3, 5, 0, (void*) bbr2, LUA_NOREF, LUA_NOREF }, + /* 0x20 */ { "???", 0x20, 0, 0, 0, NULL, -2, -2 }, + /* 0x21 */ { "???", 0x21, 0, 0, 0, NULL, -2, -2 }, + /* 0x22 */ { "NOP", 0x22, 2, 2, 0, (void*) nop, -2, -2 }, + /* 0x23 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x24 */ { "???", 0x24, 0, 0, 0, NULL, -2, -2 }, + /* 0x25 */ { "???", 0x25, 0, 0, 0, NULL, -2, -2 }, + /* 0x26 */ { "???", 0x26, 0, 0, 0, NULL, -2, -2 }, + /* 0x27 */ { "RMB", 0x27, 2, 5, 0, (void*) rmb2, -2, -2 }, + /* 0x28 */ { "???", 0x28, 0, 0, 0, NULL, -2, -2 }, + /* 0x29 */ { "???", 0x29, 0, 0, 0, NULL, -2, -2 }, + /* 0x2a */ { "???", 0x2a, 0, 0, 0, NULL, -2, -2 }, + /* 0x2b */ { "NOP", 0x2b, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x2c */ { "???", 0x2c, 0, 0, 0, NULL, -2, -2 }, + /* 0x2d */ { "???", 0x2d, 0, 0, 0, NULL, -2, -2 }, + /* 0x2e */ { "???", 0x2e, 0, 0, 0, NULL, -2, -2 }, + /* 0x2f */ { "BBR", 0x2f, 3, 5, 0, (void*) bbr2, -2, -2 }, - /* 0x30 */ { "???", 0x30, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x31 */ { "???", 0x31, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x32 */ { "AND", 0x32, 2, 5, 0, (void*) and_ind, LUA_NOREF, LUA_NOREF }, - /* 0x33 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x34 */ { "BIT", 0x34, 2, 4, 0, (void*) bit_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x35 */ { "???", 0x35, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x36 */ { "???", 0x36, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x37 */ { "RMB", 0x37, 2, 5, 0, (void*) rmb3, LUA_NOREF, LUA_NOREF }, - /* 0x38 */ { "???", 0x38, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x39 */ { "???", 0x39, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x3a */ { "DEC", 0x3a, 1, 2, 0, (void*) dec_acc, LUA_NOREF, LUA_NOREF }, - /* 0x3b */ { "NOP", 0x3b, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x3c */ { "BIT", 0x3c, 3, 4, 0, (void*) bit_absx, LUA_NOREF, LUA_NOREF }, - /* 0x3d */ { "???", 0x3d, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x3e */ { "???", 0x3e, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x3f */ { "BBR", 0x3f, 3, 5, 0, (void*) bbr3, LUA_NOREF, LUA_NOREF }, + /* 0x30 */ { "???", 0x30, 0, 0, 0, NULL, -2, -2 }, + /* 0x31 */ { "???", 0x31, 0, 0, 0, NULL, -2, -2 }, + /* 0x32 */ { "AND", 0x32, 2, 5, 0, (void*) and_ind, -2, -2 }, + /* 0x33 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x34 */ { "BIT", 0x34, 2, 4, 0, (void*) bit_zpgx, -2, -2 }, + /* 0x35 */ { "???", 0x35, 0, 0, 0, NULL, -2, -2 }, + /* 0x36 */ { "???", 0x36, 0, 0, 0, NULL, -2, -2 }, + /* 0x37 */ { "RMB", 0x37, 2, 5, 0, (void*) rmb3, -2, -2 }, + /* 0x38 */ { "???", 0x38, 0, 0, 0, NULL, -2, -2 }, + /* 0x39 */ { "???", 0x39, 0, 0, 0, NULL, -2, -2 }, + /* 0x3a */ { "DEC", 0x3a, 1, 2, 0, (void*) dec_acc, -2, -2 }, + /* 0x3b */ { "NOP", 0x3b, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x3c */ { "BIT", 0x3c, 3, 4, 0, (void*) bit_absx, -2, -2 }, + /* 0x3d */ { "???", 0x3d, 0, 0, 0, NULL, -2, -2 }, + /* 0x3e */ { "???", 0x3e, 0, 0, 0, NULL, -2, -2 }, + /* 0x3f */ { "BBR", 0x3f, 3, 5, 0, (void*) bbr3, -2, -2 }, - /* 0x40 */ { "???", 0x40, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x41 */ { "???", 0x41, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x42 */ { "NOP", 0x42, 2, 2, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x43 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x44 */ { "NOP", 0x44, 2, 3, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x45 */ { "???", 0x45, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x46 */ { "???", 0x46, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x47 */ { "RMB", 0x47, 2, 5, 0, (void*) rmb4, LUA_NOREF, LUA_NOREF }, - /* 0x48 */ { "???", 0x48, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x49 */ { "???", 0x49, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x4a */ { "???", 0x4a, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x4b */ { "NOP", 0x4b, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x4c */ { "???", 0x4c, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x4d */ { "???", 0x4d, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x4e */ { "???", 0x4e, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x4f */ { "BBR", 0x4f, 3, 5, 0, (void*) bbr4, LUA_NOREF, LUA_NOREF }, + /* 0x40 */ { "???", 0x40, 0, 0, 0, NULL, -2, -2 }, + /* 0x41 */ { "???", 0x41, 0, 0, 0, NULL, -2, -2 }, + /* 0x42 */ { "NOP", 0x42, 2, 2, 0, (void*) nop, -2, -2 }, + /* 0x43 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x44 */ { "NOP", 0x44, 2, 3, 0, (void*) nop, -2, -2 }, + /* 0x45 */ { "???", 0x45, 0, 0, 0, NULL, -2, -2 }, + /* 0x46 */ { "???", 0x46, 0, 0, 0, NULL, -2, -2 }, + /* 0x47 */ { "RMB", 0x47, 2, 5, 0, (void*) rmb4, -2, -2 }, + /* 0x48 */ { "???", 0x48, 0, 0, 0, NULL, -2, -2 }, + /* 0x49 */ { "???", 0x49, 0, 0, 0, NULL, -2, -2 }, + /* 0x4a */ { "???", 0x4a, 0, 0, 0, NULL, -2, -2 }, + /* 0x4b */ { "NOP", 0x4b, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x4c */ { "???", 0x4c, 0, 0, 0, NULL, -2, -2 }, + /* 0x4d */ { "???", 0x4d, 0, 0, 0, NULL, -2, -2 }, + /* 0x4e */ { "???", 0x4e, 0, 0, 0, NULL, -2, -2 }, + /* 0x4f */ { "BBR", 0x4f, 3, 5, 0, (void*) bbr4, -2, -2 }, - /* 0x50 */ { "???", 0x50, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x51 */ { "???", 0x51, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x52 */ { "EOR", 0x52, 2, 5, 0, (void*) eor_ind, LUA_NOREF, LUA_NOREF }, - /* 0x53 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x54 */ { "NOP", 0x54, 2, 4, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x55 */ { "???", 0x55, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x56 */ { "???", 0x56, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x57 */ { "RMB", 0x57, 2, 5, 0, (void*) rmb5, LUA_NOREF, LUA_NOREF }, - /* 0x58 */ { "???", 0x58, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x59 */ { "???", 0x59, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x5a */ { "PHY", 0x5a, 1, 3, 0, (void*) phy, LUA_NOREF, LUA_NOREF }, - /* 0x5b */ { "NOP", 0x5b, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x5c */ { "NOP", 0x5c, 3, 8, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x5d */ { "???", 0x5d, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x5e */ { "???", 0x5e, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x5f */ { "BBR", 0x5f, 3, 5, 0, (void*) bbr5, LUA_NOREF, LUA_NOREF }, + /* 0x50 */ { "???", 0x50, 0, 0, 0, NULL, -2, -2 }, + /* 0x51 */ { "???", 0x51, 0, 0, 0, NULL, -2, -2 }, + /* 0x52 */ { "EOR", 0x52, 2, 5, 0, (void*) eor_ind, -2, -2 }, + /* 0x53 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x54 */ { "NOP", 0x54, 2, 4, 0, (void*) nop, -2, -2 }, + /* 0x55 */ { "???", 0x55, 0, 0, 0, NULL, -2, -2 }, + /* 0x56 */ { "???", 0x56, 0, 0, 0, NULL, -2, -2 }, + /* 0x57 */ { "RMB", 0x57, 2, 5, 0, (void*) rmb5, -2, -2 }, + /* 0x58 */ { "???", 0x58, 0, 0, 0, NULL, -2, -2 }, + /* 0x59 */ { "???", 0x59, 0, 0, 0, NULL, -2, -2 }, + /* 0x5a */ { "PHY", 0x5a, 1, 3, 0, (void*) phy, -2, -2 }, + /* 0x5b */ { "NOP", 0x5b, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x5c */ { "NOP", 0x5c, 3, 8, 0, (void*) nop, -2, -2 }, + /* 0x5d */ { "???", 0x5d, 0, 0, 0, NULL, -2, -2 }, + /* 0x5e */ { "???", 0x5e, 0, 0, 0, NULL, -2, -2 }, + /* 0x5f */ { "BBR", 0x5f, 3, 5, 0, (void*) bbr5, -2, -2 }, - /* 0x60 */ { "???", 0x60, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x61 */ { "???", 0x61, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x62 */ { "NOP", 0x62, 2, 2, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x63 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x64 */ { "STZ", 0x64, 2, 3, 0, (void*) stz_zpg, LUA_NOREF, LUA_NOREF }, - /* 0x65 */ { "???", 0x65, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x66 */ { "???", 0x66, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x67 */ { "RMB", 0x67, 2, 5, 0, (void*) rmb6, LUA_NOREF, LUA_NOREF }, - /* 0x68 */ { "???", 0x68, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x69 */ { "???", 0x69, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x6a */ { "???", 0x6a, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x6b */ { "NOP", 0x6b, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x6c */ { "???", 0x6c, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x6d */ { "???", 0x6d, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x6e */ { "???", 0x6e, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x6f */ { "BBR", 0x6f, 3, 5, 0, (void*) bbr6, LUA_NOREF, LUA_NOREF }, + /* 0x60 */ { "???", 0x60, 0, 0, 0, NULL, -2, -2 }, + /* 0x61 */ { "???", 0x61, 0, 0, 0, NULL, -2, -2 }, + /* 0x62 */ { "NOP", 0x62, 2, 2, 0, (void*) nop, -2, -2 }, + /* 0x63 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x64 */ { "STZ", 0x64, 2, 3, 0, (void*) stz_zpg, -2, -2 }, + /* 0x65 */ { "???", 0x65, 0, 0, 0, NULL, -2, -2 }, + /* 0x66 */ { "???", 0x66, 0, 0, 0, NULL, -2, -2 }, + /* 0x67 */ { "RMB", 0x67, 2, 5, 0, (void*) rmb6, -2, -2 }, + /* 0x68 */ { "???", 0x68, 0, 0, 0, NULL, -2, -2 }, + /* 0x69 */ { "???", 0x69, 0, 0, 0, NULL, -2, -2 }, + /* 0x6a */ { "???", 0x6a, 0, 0, 0, NULL, -2, -2 }, + /* 0x6b */ { "NOP", 0x6b, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x6c */ { "???", 0x6c, 0, 0, 0, NULL, -2, -2 }, + /* 0x6d */ { "???", 0x6d, 0, 0, 0, NULL, -2, -2 }, + /* 0x6e */ { "???", 0x6e, 0, 0, 0, NULL, -2, -2 }, + /* 0x6f */ { "BBR", 0x6f, 3, 5, 0, (void*) bbr6, -2, -2 }, - /* 0x70 */ { "???", 0x70, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x71 */ { "???", 0x71, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x72 */ { "ADC", 0x72, 2, 5, 0, (void*) adc_ind, LUA_NOREF, LUA_NOREF }, - /* 0x73 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x74 */ { "STZ", 0x74, 2, 4, 0, (void*) stz_zpgx, LUA_NOREF, LUA_NOREF }, - /* 0x75 */ { "???", 0x75, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x76 */ { "???", 0x76, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x77 */ { "RMB", 0x77, 2, 5, 0, (void*) rmb7, LUA_NOREF, LUA_NOREF }, - /* 0x78 */ { "???", 0x78, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x79 */ { "???", 0x79, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x7a */ { "PLY", 0x7a, 1, 4, 0, (void*) ply, LUA_NOREF, LUA_NOREF }, - /* 0x7b */ { "NOP", 0x7b, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x7c */ { "JMP", 0x7c, 3, 6, 0, (void*) jmp_absx, LUA_NOREF, LUA_NOREF }, - /* 0x7d */ { "???", 0x7d, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x7e */ { "???", 0x7e, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x7f */ { "BBR", 0x7f, 3, 5, 0, (void*) bbr7, LUA_NOREF, LUA_NOREF }, + /* 0x70 */ { "???", 0x70, 0, 0, 0, NULL, -2, -2 }, + /* 0x71 */ { "???", 0x71, 0, 0, 0, NULL, -2, -2 }, + /* 0x72 */ { "ADC", 0x72, 2, 5, 0, (void*) adc_ind, -2, -2 }, + /* 0x73 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x74 */ { "STZ", 0x74, 2, 4, 0, (void*) stz_zpgx, -2, -2 }, + /* 0x75 */ { "???", 0x75, 0, 0, 0, NULL, -2, -2 }, + /* 0x76 */ { "???", 0x76, 0, 0, 0, NULL, -2, -2 }, + /* 0x77 */ { "RMB", 0x77, 2, 5, 0, (void*) rmb7, -2, -2 }, + /* 0x78 */ { "???", 0x78, 0, 0, 0, NULL, -2, -2 }, + /* 0x79 */ { "???", 0x79, 0, 0, 0, NULL, -2, -2 }, + /* 0x7a */ { "PLY", 0x7a, 1, 4, 0, (void*) ply, -2, -2 }, + /* 0x7b */ { "NOP", 0x7b, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x7c */ { "JMP", 0x7c, 3, 6, 0, (void*) jmp_absx, -2, -2 }, + /* 0x7d */ { "???", 0x7d, 0, 0, 0, NULL, -2, -2 }, + /* 0x7e */ { "???", 0x7e, 0, 0, 0, NULL, -2, -2 }, + /* 0x7f */ { "BBR", 0x7f, 3, 5, 0, (void*) bbr7, -2, -2 }, - /* 0x80 */ { "BRA", 0x80, 2, 3, 0, (void*) bra, LUA_NOREF, LUA_NOREF }, - /* 0x81 */ { "???", 0x81, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x82 */ { "NOP", 0x82, 2, 2, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x83 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x84 */ { "???", 0x84, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x85 */ { "???", 0x85, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x86 */ { "???", 0x86, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x87 */ { "SMB", 0x87, 2, 5, 0, (void*) smb0, LUA_NOREF, LUA_NOREF }, - /* 0x88 */ { "???", 0x88, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x89 */ { "BIT", 0x89, 2, 2, 0, (void*) bit_imm, LUA_NOREF, LUA_NOREF }, - /* 0x8a */ { "???", 0x8a, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x8b */ { "NOP", 0x8b, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x8c */ { "???", 0x8c, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x8d */ { "???", 0x8d, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x8e */ { "???", 0x8e, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x8f */ { "BBS", 0x8f, 3, 5, 0, (void*) bbs0, LUA_NOREF, LUA_NOREF }, + /* 0x80 */ { "BRA", 0x80, 2, 3, 0, (void*) bra, -2, -2 }, + /* 0x81 */ { "???", 0x81, 0, 0, 0, NULL, -2, -2 }, + /* 0x82 */ { "NOP", 0x82, 2, 2, 0, (void*) nop, -2, -2 }, + /* 0x83 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x84 */ { "???", 0x84, 0, 0, 0, NULL, -2, -2 }, + /* 0x85 */ { "???", 0x85, 0, 0, 0, NULL, -2, -2 }, + /* 0x86 */ { "???", 0x86, 0, 0, 0, NULL, -2, -2 }, + /* 0x87 */ { "SMB", 0x87, 2, 5, 0, (void*) smb0, -2, -2 }, + /* 0x88 */ { "???", 0x88, 0, 0, 0, NULL, -2, -2 }, + /* 0x89 */ { "BIT", 0x89, 2, 2, 0, (void*) bit_imm, -2, -2 }, + /* 0x8a */ { "???", 0x8a, 0, 0, 0, NULL, -2, -2 }, + /* 0x8b */ { "NOP", 0x8b, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x8c */ { "???", 0x8c, 0, 0, 0, NULL, -2, -2 }, + /* 0x8d */ { "???", 0x8d, 0, 0, 0, NULL, -2, -2 }, + /* 0x8e */ { "???", 0x8e, 0, 0, 0, NULL, -2, -2 }, + /* 0x8f */ { "BBS", 0x8f, 3, 5, 0, (void*) bbs0, -2, -2 }, - /* 0x90 */ { "???", 0x90, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x91 */ { "???", 0x91, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x92 */ { "STA", 0x92, 2, 5, 0, (void*) sta_ind, LUA_NOREF, LUA_NOREF }, - /* 0x93 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x94 */ { "???", 0x94, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x95 */ { "???", 0x95, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x96 */ { "???", 0x96, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x97 */ { "SMB", 0x97, 2, 5, 0, (void*) smb1, LUA_NOREF, LUA_NOREF }, - /* 0x98 */ { "???", 0x98, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x99 */ { "???", 0x99, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x9a */ { "???", 0x9a, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x9b */ { "NOP", 0x9b, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0x9c */ { "STZ", 0x9c, 3, 4, 0, (void*) stz_abs, LUA_NOREF, LUA_NOREF }, - /* 0x9d */ { "???", 0x9d, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0x9e */ { "STZ", 0x9e, 3, 5, 0, (void*) stz_absx, LUA_NOREF, LUA_NOREF }, - /* 0x9f */ { "BBS", 0x9f, 3, 5, 0, (void*) bbs1, LUA_NOREF, LUA_NOREF }, + /* 0x90 */ { "???", 0x90, 0, 0, 0, NULL, -2, -2 }, + /* 0x91 */ { "???", 0x91, 0, 0, 0, NULL, -2, -2 }, + /* 0x92 */ { "STA", 0x92, 2, 5, 0, (void*) sta_ind, -2, -2 }, + /* 0x93 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x94 */ { "???", 0x94, 0, 0, 0, NULL, -2, -2 }, + /* 0x95 */ { "???", 0x95, 0, 0, 0, NULL, -2, -2 }, + /* 0x96 */ { "???", 0x96, 0, 0, 0, NULL, -2, -2 }, + /* 0x97 */ { "SMB", 0x97, 2, 5, 0, (void*) smb1, -2, -2 }, + /* 0x98 */ { "???", 0x98, 0, 0, 0, NULL, -2, -2 }, + /* 0x99 */ { "???", 0x99, 0, 0, 0, NULL, -2, -2 }, + /* 0x9a */ { "???", 0x9a, 0, 0, 0, NULL, -2, -2 }, + /* 0x9b */ { "NOP", 0x9b, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0x9c */ { "STZ", 0x9c, 3, 4, 0, (void*) stz_abs, -2, -2 }, + /* 0x9d */ { "???", 0x9d, 0, 0, 0, NULL, -2, -2 }, + /* 0x9e */ { "STZ", 0x9e, 3, 5, 0, (void*) stz_absx, -2, -2 }, + /* 0x9f */ { "BBS", 0x9f, 3, 5, 0, (void*) bbs1, -2, -2 }, - /* 0xa0 */ { "???", 0xa0, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xa1 */ { "???", 0xa1, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xa2 */ { "???", 0xa2, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xa3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xa4 */ { "???", 0xa4, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xa5 */ { "???", 0xa5, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xa6 */ { "???", 0xa6, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xa7 */ { "SMB", 0xa7, 2, 5, 0, (void*) smb2, LUA_NOREF, LUA_NOREF }, - /* 0xa8 */ { "???", 0xa8, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xa9 */ { "???", 0xa9, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xaa */ { "???", 0xaa, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xab */ { "NOP", 0xab, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xac */ { "???", 0xac, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xad */ { "???", 0xad, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xae */ { "???", 0xae, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xaf */ { "BBS", 0xaf, 3, 5, 0, (void*) bbs2, LUA_NOREF, LUA_NOREF }, + /* 0xa0 */ { "???", 0xa0, 0, 0, 0, NULL, -2, -2 }, + /* 0xa1 */ { "???", 0xa1, 0, 0, 0, NULL, -2, -2 }, + /* 0xa2 */ { "???", 0xa2, 0, 0, 0, NULL, -2, -2 }, + /* 0xa3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xa4 */ { "???", 0xa4, 0, 0, 0, NULL, -2, -2 }, + /* 0xa5 */ { "???", 0xa5, 0, 0, 0, NULL, -2, -2 }, + /* 0xa6 */ { "???", 0xa6, 0, 0, 0, NULL, -2, -2 }, + /* 0xa7 */ { "SMB", 0xa7, 2, 5, 0, (void*) smb2, -2, -2 }, + /* 0xa8 */ { "???", 0xa8, 0, 0, 0, NULL, -2, -2 }, + /* 0xa9 */ { "???", 0xa9, 0, 0, 0, NULL, -2, -2 }, + /* 0xaa */ { "???", 0xaa, 0, 0, 0, NULL, -2, -2 }, + /* 0xab */ { "NOP", 0xab, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xac */ { "???", 0xac, 0, 0, 0, NULL, -2, -2 }, + /* 0xad */ { "???", 0xad, 0, 0, 0, NULL, -2, -2 }, + /* 0xae */ { "???", 0xae, 0, 0, 0, NULL, -2, -2 }, + /* 0xaf */ { "BBS", 0xaf, 3, 5, 0, (void*) bbs2, -2, -2 }, - /* 0xb0 */ { "???", 0xb0, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xb1 */ { "???", 0xb1, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xb2 */ { "LDA", 0xb2, 2, 5, 0, (void*) lda_ind, LUA_NOREF, LUA_NOREF }, - /* 0xb3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xb4 */ { "???", 0xb4, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xb5 */ { "???", 0xb5, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xb6 */ { "???", 0xb6, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xb7 */ { "SMB", 0xb7, 2, 5, 0, (void*) smb3, LUA_NOREF, LUA_NOREF }, - /* 0xb8 */ { "???", 0xb8, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xb9 */ { "???", 0xb9, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xba */ { "???", 0xba, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xbb */ { "NOP", 0xbb, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xbc */ { "???", 0xbc, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xbd */ { "???", 0xbd, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xbe */ { "???", 0xbe, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xbf */ { "BBS", 0xbf, 3, 5, 0, (void*) bbs3, LUA_NOREF, LUA_NOREF }, + /* 0xb0 */ { "???", 0xb0, 0, 0, 0, NULL, -2, -2 }, + /* 0xb1 */ { "???", 0xb1, 0, 0, 0, NULL, -2, -2 }, + /* 0xb2 */ { "LDA", 0xb2, 2, 5, 0, (void*) lda_ind, -2, -2 }, + /* 0xb3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xb4 */ { "???", 0xb4, 0, 0, 0, NULL, -2, -2 }, + /* 0xb5 */ { "???", 0xb5, 0, 0, 0, NULL, -2, -2 }, + /* 0xb6 */ { "???", 0xb6, 0, 0, 0, NULL, -2, -2 }, + /* 0xb7 */ { "SMB", 0xb7, 2, 5, 0, (void*) smb3, -2, -2 }, + /* 0xb8 */ { "???", 0xb8, 0, 0, 0, NULL, -2, -2 }, + /* 0xb9 */ { "???", 0xb9, 0, 0, 0, NULL, -2, -2 }, + /* 0xba */ { "???", 0xba, 0, 0, 0, NULL, -2, -2 }, + /* 0xbb */ { "NOP", 0xbb, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xbc */ { "???", 0xbc, 0, 0, 0, NULL, -2, -2 }, + /* 0xbd */ { "???", 0xbd, 0, 0, 0, NULL, -2, -2 }, + /* 0xbe */ { "???", 0xbe, 0, 0, 0, NULL, -2, -2 }, + /* 0xbf */ { "BBS", 0xbf, 3, 5, 0, (void*) bbs3, -2, -2 }, - /* 0xc0 */ { "???", 0xc0, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xc1 */ { "???", 0xc1, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xc2 */ { "NOP", 0xc2, 2, 2, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xc3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xc4 */ { "???", 0xc4, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xc5 */ { "???", 0xc5, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xc6 */ { "???", 0xc6, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xc7 */ { "SMB", 0xc7, 2, 5, 0, (void*) smb4, LUA_NOREF, LUA_NOREF }, - /* 0xc8 */ { "???", 0xc8, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xc9 */ { "???", 0xc9, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xca */ { "???", 0xca, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xcb */ { "NOP", 0xcb, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xcc */ { "???", 0xcc, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xcd */ { "???", 0xcd, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xce */ { "???", 0xce, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xcf */ { "BBS", 0xcf, 3, 5, 0, (void*) bbs4, LUA_NOREF, LUA_NOREF }, + /* 0xc0 */ { "???", 0xc0, 0, 0, 0, NULL, -2, -2 }, + /* 0xc1 */ { "???", 0xc1, 0, 0, 0, NULL, -2, -2 }, + /* 0xc2 */ { "NOP", 0xc2, 2, 2, 0, (void*) nop, -2, -2 }, + /* 0xc3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xc4 */ { "???", 0xc4, 0, 0, 0, NULL, -2, -2 }, + /* 0xc5 */ { "???", 0xc5, 0, 0, 0, NULL, -2, -2 }, + /* 0xc6 */ { "???", 0xc6, 0, 0, 0, NULL, -2, -2 }, + /* 0xc7 */ { "SMB", 0xc7, 2, 5, 0, (void*) smb4, -2, -2 }, + /* 0xc8 */ { "???", 0xc8, 0, 0, 0, NULL, -2, -2 }, + /* 0xc9 */ { "???", 0xc9, 0, 0, 0, NULL, -2, -2 }, + /* 0xca */ { "???", 0xca, 0, 0, 0, NULL, -2, -2 }, + /* 0xcb */ { "NOP", 0xcb, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xcc */ { "???", 0xcc, 0, 0, 0, NULL, -2, -2 }, + /* 0xcd */ { "???", 0xcd, 0, 0, 0, NULL, -2, -2 }, + /* 0xce */ { "???", 0xce, 0, 0, 0, NULL, -2, -2 }, + /* 0xcf */ { "BBS", 0xcf, 3, 5, 0, (void*) bbs4, -2, -2 }, - /* 0xd0 */ { "???", 0xd0, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xd1 */ { "???", 0xd1, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xd2 */ { "CMP", 0xd2, 2, 5, 0, (void*) cmp_ind, LUA_NOREF, LUA_NOREF }, - /* 0xd3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xd4 */ { "NOP", 0xd4, 2, 4, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xd5 */ { "???", 0xd5, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xd6 */ { "???", 0xd6, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xd7 */ { "SMB", 0xd7, 2, 5, 0, (void*) smb5, LUA_NOREF, LUA_NOREF }, - /* 0xd8 */ { "???", 0xd8, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xd9 */ { "???", 0xd9, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xda */ { "PHX", 0xda, 1, 3, 0, (void*) phx, LUA_NOREF, LUA_NOREF }, - /* 0xdb */ { "NOP", 0xdb, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xdc */ { "NOP", 0xdc, 3, 4, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xdd */ { "???", 0xdd, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xde */ { "???", 0xde, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xdf */ { "BBS", 0xdf, 3, 5, 0, (void*) bbs5, LUA_NOREF, LUA_NOREF }, + /* 0xd0 */ { "???", 0xd0, 0, 0, 0, NULL, -2, -2 }, + /* 0xd1 */ { "???", 0xd1, 0, 0, 0, NULL, -2, -2 }, + /* 0xd2 */ { "CMP", 0xd2, 2, 5, 0, (void*) cmp_ind, -2, -2 }, + /* 0xd3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xd4 */ { "NOP", 0xd4, 2, 4, 0, (void*) nop, -2, -2 }, + /* 0xd5 */ { "???", 0xd5, 0, 0, 0, NULL, -2, -2 }, + /* 0xd6 */ { "???", 0xd6, 0, 0, 0, NULL, -2, -2 }, + /* 0xd7 */ { "SMB", 0xd7, 2, 5, 0, (void*) smb5, -2, -2 }, + /* 0xd8 */ { "???", 0xd8, 0, 0, 0, NULL, -2, -2 }, + /* 0xd9 */ { "???", 0xd9, 0, 0, 0, NULL, -2, -2 }, + /* 0xda */ { "PHX", 0xda, 1, 3, 0, (void*) phx, -2, -2 }, + /* 0xdb */ { "NOP", 0xdb, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xdc */ { "NOP", 0xdc, 3, 4, 0, (void*) nop, -2, -2 }, + /* 0xdd */ { "???", 0xdd, 0, 0, 0, NULL, -2, -2 }, + /* 0xde */ { "???", 0xde, 0, 0, 0, NULL, -2, -2 }, + /* 0xdf */ { "BBS", 0xdf, 3, 5, 0, (void*) bbs5, -2, -2 }, - /* 0xe0 */ { "???", 0xe0, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xe1 */ { "???", 0xe1, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xe2 */ { "NOP", 0xe2, 2, 2, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xe3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xe4 */ { "???", 0xe4, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xe5 */ { "???", 0xe5, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xe6 */ { "???", 0xe6, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xe7 */ { "SMB", 0xe7, 2, 5, 0, (void*) smb6, LUA_NOREF, LUA_NOREF }, - /* 0xe8 */ { "???", 0xe8, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xe9 */ { "???", 0xe9, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xea */ { "???", 0xea, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xeb */ { "NOP", 0xeb, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xec */ { "???", 0xec, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xed */ { "???", 0xed, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xee */ { "???", 0xee, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xef */ { "BBS", 0xef, 3, 5, 0, (void*) bbs6, LUA_NOREF, LUA_NOREF }, + /* 0xe0 */ { "???", 0xe0, 0, 0, 0, NULL, -2, -2 }, + /* 0xe1 */ { "???", 0xe1, 0, 0, 0, NULL, -2, -2 }, + /* 0xe2 */ { "NOP", 0xe2, 2, 2, 0, (void*) nop, -2, -2 }, + /* 0xe3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xe4 */ { "???", 0xe4, 0, 0, 0, NULL, -2, -2 }, + /* 0xe5 */ { "???", 0xe5, 0, 0, 0, NULL, -2, -2 }, + /* 0xe6 */ { "???", 0xe6, 0, 0, 0, NULL, -2, -2 }, + /* 0xe7 */ { "SMB", 0xe7, 2, 5, 0, (void*) smb6, -2, -2 }, + /* 0xe8 */ { "???", 0xe8, 0, 0, 0, NULL, -2, -2 }, + /* 0xe9 */ { "???", 0xe9, 0, 0, 0, NULL, -2, -2 }, + /* 0xea */ { "???", 0xea, 0, 0, 0, NULL, -2, -2 }, + /* 0xeb */ { "NOP", 0xeb, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xec */ { "???", 0xec, 0, 0, 0, NULL, -2, -2 }, + /* 0xed */ { "???", 0xed, 0, 0, 0, NULL, -2, -2 }, + /* 0xee */ { "???", 0xee, 0, 0, 0, NULL, -2, -2 }, + /* 0xef */ { "BBS", 0xef, 3, 5, 0, (void*) bbs6, -2, -2 }, - /* 0xf0 */ { "???", 0xf0, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xf1 */ { "???", 0xf1, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xf2 */ { "SBC", 0xf2, 2, 5, 0, (void*) sbc_ind, LUA_NOREF, LUA_NOREF }, - /* 0xf3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xf4 */ { "NOP", 0xf4, 2, 4, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xf5 */ { "???", 0xf5, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xf6 */ { "???", 0xf6, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xf7 */ { "SMB", 0xf7, 2, 5, 0, (void*) smb7, LUA_NOREF, LUA_NOREF }, - /* 0xf8 */ { "???", 0xf8, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xf9 */ { "???", 0xf9, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xfa */ { "PLX", 0xfa, 1, 4, 0, (void*) plx, LUA_NOREF, LUA_NOREF }, - /* 0xfb */ { "NOP", 0xfb, 1, 1, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xfc */ { "NOP", 0xfc, 3, 4, 0, (void*) nop, LUA_NOREF, LUA_NOREF }, - /* 0xfd */ { "???", 0xfd, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xfe */ { "???", 0xfe, 0, 0, 0, NULL, LUA_NOREF, LUA_NOREF }, - /* 0xff */ { "BBS", 0xff, 3, 5, 0, (void*) bbs7, LUA_NOREF, LUA_NOREF } + /* 0xf0 */ { "???", 0xf0, 0, 0, 0, NULL, -2, -2 }, + /* 0xf1 */ { "???", 0xf1, 0, 0, 0, NULL, -2, -2 }, + /* 0xf2 */ { "SBC", 0xf2, 2, 5, 0, (void*) sbc_ind, -2, -2 }, + /* 0xf3 */ { "NOP", 0x03, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xf4 */ { "NOP", 0xf4, 2, 4, 0, (void*) nop, -2, -2 }, + /* 0xf5 */ { "???", 0xf5, 0, 0, 0, NULL, -2, -2 }, + /* 0xf6 */ { "???", 0xf6, 0, 0, 0, NULL, -2, -2 }, + /* 0xf7 */ { "SMB", 0xf7, 2, 5, 0, (void*) smb7, -2, -2 }, + /* 0xf8 */ { "???", 0xf8, 0, 0, 0, NULL, -2, -2 }, + /* 0xf9 */ { "???", 0xf9, 0, 0, 0, NULL, -2, -2 }, + /* 0xfa */ { "PLX", 0xfa, 1, 4, 0, (void*) plx, -2, -2 }, + /* 0xfb */ { "NOP", 0xfb, 1, 1, 0, (void*) nop, -2, -2 }, + /* 0xfc */ { "NOP", 0xfc, 3, 4, 0, (void*) nop, -2, -2 }, + /* 0xfd */ { "???", 0xfd, 0, 0, 0, NULL, -2, -2 }, + /* 0xfe */ { "???", 0xfe, 0, 0, 0, NULL, -2, -2 }, + /* 0xff */ { "BBS", 0xff, 3, 5, 0, (void*) bbs7, -2, -2 } }; diff --git a/src/two.c b/src/two.c index 84d75cb..8f5956e 100644 --- a/src/two.c +++ b/src/two.c @@ -34,9 +34,12 @@ #include "alc.h" #include "chr.h" #include "scr.h" +#if defined(EWM_LUA) #include "lua.h" +#endif #include "two.h" + #define EWM_A2P_SS_KBD 0xc000 #define EWM_A2P_SS_KBDSTRB 0xc010 #define EWM_A2P_SS_SPKR 0xc030 @@ -258,8 +261,10 @@ static int ewm_two_init(struct ewm_two_t *two, int type, SDL_Renderer *renderer, two->type = type; +#if defined(EWM_LUA) two->lua_key_down_fn = LUA_NOREF; two->lua_key_up_fn = LUA_NOREF; +#endif switch (type) { case EWM_TWO_TYPE_APPLE2: { @@ -325,7 +330,11 @@ void ewm_two_destroy(struct ewm_two_t *two) { // TODO Or maybe not. } +#if defined(EWM_LUA) + +// // Lua support +// static int two_lua_index(lua_State *state) { //void *two_data = luaL_checkudata(state, 1, "two_meta_table"); @@ -429,6 +438,8 @@ int ewm_two_init_lua(struct ewm_two_t *two, struct ewm_lua_t *lua) { return 0; } +#endif + // External API int ewm_two_load_disk(struct ewm_two_t *two, int drive, char *path) { @@ -467,6 +478,7 @@ static bool ewm_two_poll_event(struct ewm_two_t *two, SDL_Window *window) { // T break; case SDL_KEYDOWN: +#if defined(EWM_LUA) if (two->lua_key_down_fn != LUA_NOREF) { lua_rawgeti(two->lua->state, LUA_REGISTRYINDEX, two->lua_key_down_fn); ewm_lua_push_two(two->lua, two); @@ -486,6 +498,7 @@ static bool ewm_two_poll_event(struct ewm_two_t *two, SDL_Window *window) { // T return true; } } +#endif if (event.key.keysym.mod & KMOD_CTRL) { if (event.key.keysym.sym >= SDLK_a && event.key.keysym.sym <= SDLK_z) { @@ -541,6 +554,7 @@ static bool ewm_two_poll_event(struct ewm_two_t *two, SDL_Window *window) { // T break; case SDL_KEYUP: +#if defined(EWM_LUA) if (two->lua_key_up_fn != LUA_NOREF) { lua_rawgeti(two->lua->state, LUA_REGISTRYINDEX, two->lua_key_up_fn); ewm_lua_push_two(two->lua, two); @@ -560,6 +574,7 @@ static bool ewm_two_poll_event(struct ewm_two_t *two, SDL_Window *window) { // T return true; } } +#endif if (event.key.keysym.mod & KMOD_ALT) { switch (event.key.keysym.sym) { @@ -656,7 +671,9 @@ static void ewm_two_update_status_bar(struct ewm_two_t *two, double mhz) { #define EWM_TWO_OPT_TRACE (6) #define EWM_TWO_OPT_STRICT (7) #define EWM_TWO_OPT_DEBUG (8) +#if defined(EWM_LUA) #define EWM_TWO_OPT_SCRIPT (9) +#endif static struct option one_options[] = { { "help", no_argument, NULL, EWM_TWO_OPT_HELP }, @@ -668,7 +685,9 @@ static struct option one_options[] = { { "trace", optional_argument, NULL, EWM_TWO_OPT_TRACE }, { "strict", no_argument, NULL, EWM_TWO_OPT_STRICT }, { "debug", no_argument, NULL, EWM_TWO_OPT_DEBUG }, +#if defined(EWM_LUA) { "script", required_argument, NULL, EWM_TWO_OPT_SCRIPT }, +#endif { NULL, 0, NULL, 0 } }; @@ -682,7 +701,9 @@ static void usage() { fprintf(stderr, " --trace trace cpu to file\n"); fprintf(stderr, " --strict run emulator in strict mode\n"); fprintf(stderr, " --debug print debug info\n"); +#if defined(EWM_LUA) fprintf(stderr, " --script