diff --git a/Makefile b/Makefile index cf1ce0f..7484126 100644 --- a/Makefile +++ b/Makefile @@ -20,16 +20,12 @@ ifeq ($(FULL_WARNINGS), yes) endif ### SDL UI -# ifeq ($(GUI), sdl) CFLAGS += $(shell pkg-config --cflags SDL_gfx sdl12_compat) LIBS += $(shell pkg-config --libs SDL_gfx sdl12_compat) -# endif ### X11 UI -# ifeq ($(GUI), x11) CFLAGS += $(shell pkg-config --cflags x11 xext) -D_GNU_SOURCE=1 -DGUI_IS_X11=1 LIBS += $(shell pkg-config --libs x11 xext) -# endif DOTOS = src/emu_serial.o \ src/emu_emulate.o \ @@ -109,7 +105,6 @@ install: all install -m 755 -d -- $(DESTDIR)$(PREFIX)/share/applications sed "s|@PREFIX@|$(PREFIX)|g" dist/x48ng.desktop > $(DESTDIR)$(PREFIX)/share/applications/x48ng.desktop -# ifeq ($(GUI), x11) + install -m 755 -d -- $(DESTDIR)/etc/X11/app-defaults install -c -m 644 dist/X48NG.ad $(DESTDIR)/etc/X11/app-defaults/X48NG -# endif diff --git a/src/emu_actions.c b/src/emu_actions.c index 9f6460b..06d403c 100644 --- a/src/emu_actions.c +++ b/src/emu_actions.c @@ -2,6 +2,7 @@ #include #include +#include "emulator.h" #include "emulator_inner.h" #include "romio.h" #include "ui.h" /* ui__get_event(); ui__update_LCD(); */ diff --git a/src/emu_emulate.c b/src/emu_emulate.c index f52c1b8..469db66 100644 --- a/src/emu_emulate.c +++ b/src/emu_emulate.c @@ -6,6 +6,7 @@ #include "runtime_options.h" /* throttle */ #include "ui.h" /* ui__get_event(); ui__adjust_contrast(); ui__update_LCD(); ui__draw_annunc(); */ #include "debugger.h" /* enter_debugger, TRAP_INSTRUCTION, ILLEGAL_INSTRUCTION */ +#include "emulator.h" #include "emulator_inner.h" #define P_FIELD 0 /* unused? */ diff --git a/src/emu_init.c b/src/emu_init.c index aea5041..10bf9e5 100644 --- a/src/emu_init.c +++ b/src/emu_init.c @@ -8,6 +8,7 @@ #include #include "runtime_options.h" +#include "emulator.h" #include "emulator_inner.h" #include "romio.h" diff --git a/src/emu_memory.c b/src/emu_memory.c index 877c639..ff9f1ba 100644 --- a/src/emu_memory.c +++ b/src/emu_memory.c @@ -4,6 +4,7 @@ #include #include +#include "emulator.h" #include "emulator_inner.h" #include "romio.h" #include "ui.h" /* ui__disp_draw_nibble(); ui__menu_draw_nibble(); */ @@ -25,17 +26,13 @@ #define DISP_INSTR_OFF 0x10 -extern int device_check; -extern short port1_is_ram; -extern long port1_mask; -extern short port2_is_ram; -extern long port2_mask; - long nibble_masks[ 16 ] = { 0x0000000f, 0x000000f0, 0x00000f00, 0x0000f000, 0x000f0000, 0x00f00000, 0x0f000000, 0xf0000000, 0x0000000f, 0x000000f0, 0x00000f00, 0x0000f000, 0x000f0000, 0x00f00000, 0x0f000000, 0xf0000000 }; +display_t display; + void ( *write_nibble )( long addr, int val ); int ( *read_nibble )( long addr ); int ( *read_nibble_crc )( long addr ); diff --git a/src/emu_register.c b/src/emu_register.c index ab331af..26615d8 100644 --- a/src/emu_register.c +++ b/src/emu_register.c @@ -1,6 +1,7 @@ #include #include +#include "emulator.h" #include "emulator_inner.h" extern long nibble_masks[ 16 ]; diff --git a/src/emu_serial.c b/src/emu_serial.c index 16807ff..53eb660 100644 --- a/src/emu_serial.c +++ b/src/emu_serial.c @@ -8,6 +8,7 @@ #include #include "runtime_options.h" +#include "emulator.h" #include "emulator_inner.h" static int wire_fd; diff --git a/src/emu_timer.c b/src/emu_timer.c index 0d7eeae..4fa68f0 100644 --- a/src/emu_timer.c +++ b/src/emu_timer.c @@ -7,6 +7,7 @@ #include #include "romio.h" +#include "emulator.h" #include "emulator_inner.h" #include "debugger.h" /* used for in_debugger */ diff --git a/src/emulator.h b/src/emulator.h index 69afbdd..b7a67eb 100644 --- a/src/emulator.h +++ b/src/emulator.h @@ -228,6 +228,12 @@ extern display_t display; extern saturn_t saturn; +extern int device_check; +extern short port1_is_ram; +extern long port1_mask; +extern short port2_is_ram; +extern long port2_mask; + /**************/ /* emu_init.c */ /**************/ diff --git a/src/main.c b/src/main.c index 84e49a8..d357144 100644 --- a/src/main.c +++ b/src/main.c @@ -38,6 +38,31 @@ int main( int argc, char** argv ) { /**********/ parse_args( argc, argv ); + switch ( frontend_type ) { + case FRONTEND_SDL: + ui__disp_draw_nibble = ui_sdl__disp_draw_nibble; + ui__menu_draw_nibble = ui_sdl__menu_draw_nibble; + ui__get_event = ui_sdl__get_event; + ui__update_LCD = ui_sdl__update_LCD; + ui__adjust_contrast = ui_sdl__adjust_contrast; + ui__draw_annunc = ui_sdl__draw_annunc; + ui__init_LCD = ui_sdl__init_LCD; + init_ui = init_sdl_ui; + break; + + case FRONTEND_X11: + default: + ui__disp_draw_nibble = ui_x11__disp_draw_nibble; + ui__menu_draw_nibble = ui_x11__menu_draw_nibble; + ui__get_event = ui_x11__get_event; + ui__update_LCD = ui_x11__update_LCD; + ui__adjust_contrast = ui_x11__adjust_contrast; + ui__draw_annunc = ui_x11__draw_annunc; + ui__init_LCD = ui_x11__init_LCD; + init_ui = init_x11_ui; + break; + } + /*****************************************/ /* handlers for SIGALRM, SIGPIPE */ /*****************************************/ diff --git a/src/ui.c b/src/ui.c index 1132cda..35de3f9 100644 --- a/src/ui.c +++ b/src/ui.c @@ -1,93 +1,10 @@ #include "ui.h" -#include "runtime_options.h" -display_t display; - -extern void ui_sdl__disp_draw_nibble( word_20 addr, word_4 val ); -extern void ui_x11__disp_draw_nibble( word_20 addr, word_4 val ); -void ui__disp_draw_nibble( word_20 addr, word_4 val ) { - switch ( frontend_type ) { - case FRONTEND_SDL: - return ui_sdl__disp_draw_nibble( addr, val ); - case FRONTEND_X11: - return ui_x11__disp_draw_nibble( addr, val ); - } -} - -extern void ui_sdl__menu_draw_nibble( word_20 addr, word_4 val ); -extern void ui_x11__menu_draw_nibble( word_20 addr, word_4 val ); -void ui__menu_draw_nibble( word_20 addr, word_4 val ) { - switch ( frontend_type ) { - case FRONTEND_SDL: - return ui_sdl__menu_draw_nibble( addr, val ); - case FRONTEND_X11: - return ui_x11__menu_draw_nibble( addr, val ); - } -} - -extern int ui_sdl__get_event( void ); -extern int ui_x11__get_event( void ); -int ui__get_event( void ) { - switch ( frontend_type ) { - case FRONTEND_SDL: - return ui_sdl__get_event(); - case FRONTEND_X11: - return ui_x11__get_event(); - } - return -1; -} - -extern void ui_sdl__update_LCD( void ); -extern void ui_x11__update_LCD( void ); -void ui__update_LCD( void ) { - switch ( frontend_type ) { - case FRONTEND_SDL: - return ui_sdl__update_LCD(); - case FRONTEND_X11: - return ui_x11__update_LCD(); - } -} - -extern void ui_sdl__adjust_contrast( void ); -extern void ui_x11__adjust_contrast( void ); -void ui__adjust_contrast( void ) { - switch ( frontend_type ) { - case FRONTEND_SDL: - return ui_sdl__adjust_contrast(); - case FRONTEND_X11: - return ui_x11__adjust_contrast(); - } -} - -extern void ui_sdl__draw_annunc( void ); -extern void ui_x11__draw_annunc( void ); -void ui__draw_annunc( void ) { - switch ( frontend_type ) { - case FRONTEND_SDL: - return ui_sdl__draw_annunc(); - case FRONTEND_X11: - return ui_x11__draw_annunc(); - } -} - -extern void ui_sdl__init_LCD( void ); -extern void ui_x11__init_LCD( void ); -void ui__init_LCD( void ) { - switch ( frontend_type ) { - case FRONTEND_SDL: - return ui_sdl__init_LCD(); - case FRONTEND_X11: - return ui_x11__init_LCD(); - } -} - -extern void init_sdl_ui( int argc, char** argv ); -extern void init_x11_ui( int argc, char** argv ); -void init_ui( int argc, char** argv ) { - switch ( frontend_type ) { - case FRONTEND_SDL: - return init_sdl_ui( argc, argv ); - case FRONTEND_X11: - return init_x11_ui( argc, argv ); - } -} +void ( *ui__disp_draw_nibble )( word_20 addr, word_4 val ); +void ( *ui__menu_draw_nibble )( word_20 addr, word_4 val ); +int ( *ui__get_event )( void ); +void ( *ui__update_LCD )( void ); +void ( *ui__adjust_contrast )( void ); +void ( *ui__draw_annunc )( void ); +void ( *ui__init_LCD )( void ); +void ( *init_ui )( int argc, char** argv ); diff --git a/src/ui.h b/src/ui.h index b405e19..c717fc6 100644 --- a/src/ui.h +++ b/src/ui.h @@ -3,41 +3,66 @@ #include "emulator.h" /* word_4; word_20; */ +/*************/ +/* functions */ +/*************/ +extern void ui_sdl__disp_draw_nibble( word_20 addr, word_4 val ); +extern void ui_x11__disp_draw_nibble( word_20 addr, word_4 val ); + +extern void ui_sdl__menu_draw_nibble( word_20 addr, word_4 val ); +extern void ui_x11__menu_draw_nibble( word_20 addr, word_4 val ); + +extern int ui_sdl__get_event( void ); +extern int ui_x11__get_event( void ); + +extern void ui_sdl__update_LCD( void ); +extern void ui_x11__update_LCD( void ); + +extern void ui_sdl__adjust_contrast( void ); +extern void ui_x11__adjust_contrast( void ); + +extern void ui_sdl__draw_annunc( void ); +extern void ui_x11__draw_annunc( void ); + +extern void ui_sdl__init_LCD( void ); +extern void ui_x11__init_LCD( void ); + +extern void init_sdl_ui( int argc, char** argv ); +extern void init_x11_ui( int argc, char** argv ); + /*************************************************/ /* public API: if it's there it's used elsewhere */ /*************************************************/ /*************************/ /* used in: emu_memory.c */ /*************************/ -extern void ui__disp_draw_nibble( word_20 addr, word_4 val ); -extern void ui__menu_draw_nibble( word_20 addr, word_4 val ); - -/* extern void ui__draw_nibble( int c, int r, int val ); */ +extern void ( *ui__disp_draw_nibble )( word_20 addr, word_4 val ); +extern void ( *ui__menu_draw_nibble )( word_20 addr, word_4 val ); /*****************************************/ /* used in: emu_actions.c, emu_emulate.c */ /*****************************************/ -extern int ui__get_event( void ); +extern int ( *ui__get_event )( void ); /*****************************************************/ /* used in: emu_actions.c, emu_emulate.c, debugger.c */ /*****************************************************/ -extern void ui__update_LCD( void ); +extern void ( *ui__update_LCD )( void ); /**************************/ /* used in: emu_emulate.c */ /**************************/ -extern void ui__adjust_contrast( void ); -extern void ui__draw_annunc( void ); +extern void ( *ui__adjust_contrast )( void ); +extern void ( *ui__draw_annunc )( void ); /*********************************/ /* used in: debugger.c, ui_sdl.c */ /*********************************/ -extern void ui__init_LCD( void ); +extern void ( *ui__init_LCD )( void ); /*******************/ /* used in: main.c */ /*******************/ -extern void init_ui( int argc, char** argv ); +extern void ( *init_ui )( int argc, char** argv ); #endif /* !_X48_GUI_H */