From 6b8d29b21ea163f167df4009404076e3bdb79905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Kujawa?= Date: Wed, 8 Nov 2017 16:50:56 +0100 Subject: [PATCH] Add minimal support for guile. --- src/Makefile | 18 ++++++++------ src/g65c02.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ src/rk65c02cli.c | 63 ------------------------------------------------ 3 files changed, 74 insertions(+), 70 deletions(-) create mode 100644 src/g65c02.c delete mode 100644 src/rk65c02cli.c diff --git a/src/Makefile b/src/Makefile index ea7ee87..f58bdd0 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,13 +1,14 @@ -CLI=rk65c02cli -CLI_OBJS=rk65c02cli.o +CLI=g65c02 +CLI_OBJ=$(CLI).o LIB_OBJS=rk65c02.o bus.o instruction.o emulation.o debug.o device_ram.o device_serial.o LIB_SO=librk65c02.so LIB_STATIC=librk65c02.a LDFLAGS_SO=-shared -LDFLAGS_CLI=-lreadline -CFLAGS=-Wall -fpic -ggdb +LDFLAGS_CLI=`pkg-config --libs guile-2.2` +CFLAGS=-Wall -fpic -ggdb $(CFLAGS_EXTRA) +CFLAGS_CLI=`pkg-config --cflags guile-2.2` 65C02ISA=65c02isa EMULATION=emulation @@ -16,8 +17,11 @@ DEVICE=device all : $(LIB_SO) $(LIB_STATIC) $(CLI) -$(CLI) : $(CLI_OBJS) - $(CC) -o $(CLI) $(LDFLAGS_CLI) $(CLI_OBJS) $(LIB_STATIC) +$(CLI) : $(CLI_OBJ) + $(CC) -o $(CLI) $(LDFLAGS_CLI) $(CLI_OBJ) $(LIB_STATIC) + +$(CLI_OBJ) : $(CLI).c + $(CC) $(CFLAGS_CLI) -c $< $(LIB_SO) : $(LIB_OBJS) $(CC) -o $(LIB_SO) $(LDFLAGS_SO) $(LIB_OBJS) @@ -37,6 +41,6 @@ $(EMULATION).h : $(65C02ISA).csv $(EMULATION).awk clean : rm -f $(65C02ISA).h $(EMULATION).h - rm -f $(LIB_OBJS) $(CLI_OBJS) + rm -f $(LIB_OBJS) $(CLI_OBJ) rm -f $(LIB_SO) $(LIB_STATIC) $(CLI) diff --git a/src/g65c02.c b/src/g65c02.c new file mode 100644 index 0000000..b82ce1e --- /dev/null +++ b/src/g65c02.c @@ -0,0 +1,63 @@ +#include +#include + +#include + +#include + +#include "bus.h" +#include "rk65c02.h" + +static void guile_main(void *, int, char**); + +static SCM wrap_bus_init(void); +static SCM wrap_rk65c02_init(void); + +static rk65c02emu_t e; +static bool rk65c02emu_inited; +static bus_t b; +static bool bus_inited; + +int +main(int argc, char **argv) +{ + scm_boot_guile(argc, argv, guile_main, 0); + + return 0; +} + +static void +guile_main(void* data, int argc, char** argv) { + scm_c_define_gsubr("bus-init", 0, 0, 0, wrap_bus_init); + scm_c_define_gsubr("rk65c02-init", 0, 0, 0, wrap_rk65c02_init); + + scm_shell(argc, argv); +} + +static SCM +wrap_bus_init(void) +{ + if (bus_inited) + return SCM_BOOL_F; + + /* XXX: make this customizable */ + b = bus_init_with_default_devs(); + + bus_inited = true; + + return SCM_BOOL_T; +} + +static SCM +wrap_rk65c02_init(void) +{ + if (rk65c02_inited) + return SCM_BOOL_F; + + e = rk65c02_init(&b); + + rk65c02emu_inited = true; + + return SCM_BOOL_T; +} + diff --git a/src/rk65c02cli.c b/src/rk65c02cli.c deleted file mode 100644 index 1e24534..0000000 --- a/src/rk65c02cli.c +++ /dev/null @@ -1,63 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "bus.h" -#include "instruction.h" -#include "rk65c02.h" - - -/* -int -main(void) -{ - bus_t b; - - b = bus_init(); - - bus_write_1(&b, 0, OP_INX); - bus_write_1(&b, 1, OP_NOP); - bus_write_1(&b, 2, OP_LDY_IMM); - bus_write_1(&b, 3, 0x1); - bus_write_1(&b, 4, OP_TSB_ZP); - bus_write_1(&b, 5, 0x3); - bus_write_1(&b, 6, OP_JSR); - bus_write_1(&b, 7, 0x09); - bus_write_1(&b, 8, 0x0); - bus_write_1(&b, 9, OP_STP); - - rk6502_start(&b, 0); - - bus_finish(&b); -} -*/ - - -int main() -{ - char* input, shell_prompt[100]; - - rl_bind_key('\t', rl_complete); - - while(true) { - snprintf(shell_prompt, sizeof(shell_prompt), "> "); - - input = readline(shell_prompt); - - if (!input) - break; - - add_history(input); - - free(input); - } - return EXIT_SUCCESS; -} -