function pointer are sexy

This commit is contained in:
Gwenhael Le Moine 2023-09-18 16:32:22 +02:00
parent 33f42277fb
commit e2b815c5ff
No known key found for this signature in database
GPG key ID: FDFE3669426707A7
12 changed files with 84 additions and 113 deletions

View file

@ -20,16 +20,12 @@ ifeq ($(FULL_WARNINGS), yes)
endif endif
### SDL UI ### SDL UI
# ifeq ($(GUI), sdl)
CFLAGS += $(shell pkg-config --cflags SDL_gfx sdl12_compat) CFLAGS += $(shell pkg-config --cflags SDL_gfx sdl12_compat)
LIBS += $(shell pkg-config --libs SDL_gfx sdl12_compat) LIBS += $(shell pkg-config --libs SDL_gfx sdl12_compat)
# endif
### X11 UI ### X11 UI
# ifeq ($(GUI), x11)
CFLAGS += $(shell pkg-config --cflags x11 xext) -D_GNU_SOURCE=1 -DGUI_IS_X11=1 CFLAGS += $(shell pkg-config --cflags x11 xext) -D_GNU_SOURCE=1 -DGUI_IS_X11=1
LIBS += $(shell pkg-config --libs x11 xext) LIBS += $(shell pkg-config --libs x11 xext)
# endif
DOTOS = src/emu_serial.o \ DOTOS = src/emu_serial.o \
src/emu_emulate.o \ src/emu_emulate.o \
@ -109,7 +105,6 @@ install: all
install -m 755 -d -- $(DESTDIR)$(PREFIX)/share/applications install -m 755 -d -- $(DESTDIR)$(PREFIX)/share/applications
sed "s|@PREFIX@|$(PREFIX)|g" dist/x48ng.desktop > $(DESTDIR)$(PREFIX)/share/applications/x48ng.desktop 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 -m 755 -d -- $(DESTDIR)/etc/X11/app-defaults
install -c -m 644 dist/X48NG.ad $(DESTDIR)/etc/X11/app-defaults/X48NG install -c -m 644 dist/X48NG.ad $(DESTDIR)/etc/X11/app-defaults/X48NG
# endif

View file

@ -2,6 +2,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include "emulator.h"
#include "emulator_inner.h" #include "emulator_inner.h"
#include "romio.h" #include "romio.h"
#include "ui.h" /* ui__get_event(); ui__update_LCD(); */ #include "ui.h" /* ui__get_event(); ui__update_LCD(); */

View file

@ -6,6 +6,7 @@
#include "runtime_options.h" /* throttle */ #include "runtime_options.h" /* throttle */
#include "ui.h" /* ui__get_event(); ui__adjust_contrast(); ui__update_LCD(); ui__draw_annunc(); */ #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 "debugger.h" /* enter_debugger, TRAP_INSTRUCTION, ILLEGAL_INSTRUCTION */
#include "emulator.h"
#include "emulator_inner.h" #include "emulator_inner.h"
#define P_FIELD 0 /* unused? */ #define P_FIELD 0 /* unused? */

View file

@ -8,6 +8,7 @@
#include <sys/types.h> #include <sys/types.h>
#include "runtime_options.h" #include "runtime_options.h"
#include "emulator.h"
#include "emulator_inner.h" #include "emulator_inner.h"
#include "romio.h" #include "romio.h"

View file

@ -4,6 +4,7 @@
#include <sys/time.h> #include <sys/time.h>
#include <unistd.h> #include <unistd.h>
#include "emulator.h"
#include "emulator_inner.h" #include "emulator_inner.h"
#include "romio.h" #include "romio.h"
#include "ui.h" /* ui__disp_draw_nibble(); ui__menu_draw_nibble(); */ #include "ui.h" /* ui__disp_draw_nibble(); ui__menu_draw_nibble(); */
@ -25,17 +26,13 @@
#define DISP_INSTR_OFF 0x10 #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, long nibble_masks[ 16 ] = { 0x0000000f, 0x000000f0, 0x00000f00, 0x0000f000,
0x000f0000, 0x00f00000, 0x0f000000, 0xf0000000, 0x000f0000, 0x00f00000, 0x0f000000, 0xf0000000,
0x0000000f, 0x000000f0, 0x00000f00, 0x0000f000, 0x0000000f, 0x000000f0, 0x00000f00, 0x0000f000,
0x000f0000, 0x00f00000, 0x0f000000, 0xf0000000 }; 0x000f0000, 0x00f00000, 0x0f000000, 0xf0000000 };
display_t display;
void ( *write_nibble )( long addr, int val ); void ( *write_nibble )( long addr, int val );
int ( *read_nibble )( long addr ); int ( *read_nibble )( long addr );
int ( *read_nibble_crc )( long addr ); int ( *read_nibble_crc )( long addr );

View file

@ -1,6 +1,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "emulator.h"
#include "emulator_inner.h" #include "emulator_inner.h"
extern long nibble_masks[ 16 ]; extern long nibble_masks[ 16 ];

View file

@ -8,6 +8,7 @@
#include <unistd.h> #include <unistd.h>
#include "runtime_options.h" #include "runtime_options.h"
#include "emulator.h"
#include "emulator_inner.h" #include "emulator_inner.h"
static int wire_fd; static int wire_fd;

View file

@ -7,6 +7,7 @@
#include <sys/time.h> #include <sys/time.h>
#include "romio.h" #include "romio.h"
#include "emulator.h"
#include "emulator_inner.h" #include "emulator_inner.h"
#include "debugger.h" /* used for in_debugger */ #include "debugger.h" /* used for in_debugger */

View file

@ -228,6 +228,12 @@ extern display_t display;
extern saturn_t saturn; 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 */ /* emu_init.c */
/**************/ /**************/

View file

@ -38,6 +38,31 @@ int main( int argc, char** argv ) {
/**********/ /**********/
parse_args( argc, 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 */ /* handlers for SIGALRM, SIGPIPE */
/*****************************************/ /*****************************************/

View file

@ -1,93 +1,10 @@
#include "ui.h" #include "ui.h"
#include "runtime_options.h"
display_t display; void ( *ui__disp_draw_nibble )( word_20 addr, word_4 val );
void ( *ui__menu_draw_nibble )( word_20 addr, word_4 val );
extern void ui_sdl__disp_draw_nibble( word_20 addr, word_4 val ); int ( *ui__get_event )( void );
extern void ui_x11__disp_draw_nibble( word_20 addr, word_4 val ); void ( *ui__update_LCD )( void );
void ui__disp_draw_nibble( word_20 addr, word_4 val ) { void ( *ui__adjust_contrast )( void );
switch ( frontend_type ) { void ( *ui__draw_annunc )( void );
case FRONTEND_SDL: void ( *ui__init_LCD )( void );
return ui_sdl__disp_draw_nibble( addr, val ); void ( *init_ui )( int argc, char** argv );
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 );
}
}

View file

@ -3,41 +3,66 @@
#include "emulator.h" /* word_4; word_20; */ #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 */ /* public API: if it's there it's used elsewhere */
/*************************************************/ /*************************************************/
/*************************/ /*************************/
/* used in: emu_memory.c */ /* used in: emu_memory.c */
/*************************/ /*************************/
extern void ui__disp_draw_nibble( word_20 addr, word_4 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 ); extern void ( *ui__menu_draw_nibble )( word_20 addr, word_4 val );
/* extern void ui__draw_nibble( int c, int r, int val ); */
/*****************************************/ /*****************************************/
/* used in: emu_actions.c, emu_emulate.c */ /* 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 */ /* 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 */ /* used in: emu_emulate.c */
/**************************/ /**************************/
extern void ui__adjust_contrast( void ); extern void ( *ui__adjust_contrast )( void );
extern void ui__draw_annunc( void ); extern void ( *ui__draw_annunc )( void );
/*********************************/ /*********************************/
/* used in: debugger.c, ui_sdl.c */ /* used in: debugger.c, ui_sdl.c */
/*********************************/ /*********************************/
extern void ui__init_LCD( void ); extern void ( *ui__init_LCD )( void );
/*******************/ /*******************/
/* used in: main.c */ /* used in: main.c */
/*******************/ /*******************/
extern void init_ui( int argc, char** argv ); extern void ( *init_ui )( int argc, char** argv );
#endif /* !_X48_GUI_H */ #endif /* !_X48_GUI_H */