function pointer are sexy
This commit is contained in:
parent
33f42277fb
commit
e2b815c5ff
12 changed files with 84 additions and 113 deletions
7
Makefile
7
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
|
||||
|
|
|
@ -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(); */
|
||||
|
|
|
@ -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? */
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <sys/types.h>
|
||||
|
||||
#include "runtime_options.h"
|
||||
#include "emulator.h"
|
||||
#include "emulator_inner.h"
|
||||
#include "romio.h"
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "emulator.h"
|
||||
#include "emulator_inner.h"
|
||||
|
||||
extern long nibble_masks[ 16 ];
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <unistd.h>
|
||||
|
||||
#include "runtime_options.h"
|
||||
#include "emulator.h"
|
||||
#include "emulator_inner.h"
|
||||
|
||||
static int wire_fd;
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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 */
|
||||
/**************/
|
||||
|
|
25
src/main.c
25
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 */
|
||||
/*****************************************/
|
||||
|
|
99
src/ui.c
99
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 );
|
||||
|
|
45
src/ui.h
45
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 */
|
||||
|
|
Loading…
Add table
Reference in a new issue