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
### 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

View file

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

View file

@ -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? */

View file

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

View file

@ -4,6 +4,7 @@
#include <sys/time.h>
#include <unistd.h>
#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 );

View file

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

View file

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

View file

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

View file

@ -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 */
/**************/

View file

@ -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 */
/*****************************************/

View file

@ -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 );

View file

@ -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 */