Skip to content

Commit 698c29d

Browse files
committed
add FunKey menu
Signed-off-by: Vincent-FK <[email protected]>
1 parent dbfc95d commit 698c29d

File tree

8 files changed

+1377
-54
lines changed

8 files changed

+1377
-54
lines changed

Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,15 +211,15 @@ DRIVER_OBJS = $(SRC)drivers/dingux-sdl/config.o $(SRC)drivers/dingux-sdl/input.o
211211
$(SRC)drivers/dingux-sdl/dingoo.o $(SRC)drivers/dingux-sdl/dingoo-joystick.o \
212212
$(SRC)drivers/dingux-sdl/dingoo-throttle.o $(SRC)drivers/dingux-sdl/dingoo-sound.o \
213213
$(SRC)drivers/dingux-sdl/dingoo-video.o $(SRC)drivers/dingux-sdl/dummy-netplay.o \
214-
$(SRC)drivers/dingux-sdl/scaler.o $(MINIMAL_OBJS) $(GUI_OBJS)
214+
$(SRC)drivers/dingux-sdl/scaler.o $(SRC)drivers/dingux-sdl/menu.o $(MINIMAL_OBJS) $(GUI_OBJS)
215215

216216
OBJS = $(CORE_OBJS) $(BOARDS_OBJS) $(INPUT_OBJS) $(MAPPERS_OBJS) $(UTILS_OBJS) \
217217
$(COMMON_DRIVER_OBJS) $(DRIVER_OBJS)
218218

219219
INCLUDEDIR=$(CHAINPREFIX)/include
220-
CFLAGS = -I$(INCLUDEDIR) -I$(SRC) -flto
221-
CXXFLAGS = -I$(INCLUDEDIR) -flto
222-
LDFLAGS = -s $(SDL_LIBS) -lSDL_image -flto
220+
CFLAGS += -I$(INCLUDEDIR) -I$(SRC) -flto
221+
CXXFLAGS += -I$(INCLUDEDIR) -flto
222+
LDFLAGS = -s -lpthread -lz -lpng -lm -lgcc $(SDL_LIBS) -lSDL_ttf -lSDL_image -flto
223223

224224
W_OPTS = -Wno-write-strings -Wno-sign-compare
225225

fceux/fceux.man.txt

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
FCEUX port for OpenDingux
2-
----
2+
-------------------------------------------------------------
3+
4+
Thanks go to all people who worked on each incarnation of FCEUX: the_gama, ValdikSS and DiegoSLTS, Steward-fu, gameblabla, pingflood.
35

46
Controls
57

6-
FCEUX Nes
7-
----
8+
RS97 Nes
9+
-----------------------------------------------------
810
Pad Pad
911
B A
1012
Y B
@@ -13,19 +15,20 @@ Controls
1315
Select Select
1416
Start Start
1517

16-
POWER Open menu
18+
L Shoulder Fast forward
19+
R Shoulder Hotkey combo
20+
POWER Open GUI screen
1721

18-
Default Hotkeys
19-
----
20-
Select + L Load state (current slot from gui is used)
21-
Select + R Save state (current slot from gui is used)
22-
Select + X Change scaling
23-
Select + Y Show FPS
24-
Select + A Take a screenshot
25-
Select + B Change FDS disk
26-
Select + Left Insert vsuni coin
27-
Select + Start Open menu
22+
*Default Hotkeys*
2823

24+
R + A Save state (current slot from gui is used)
25+
R + B Load state (current slot from gui is used)
26+
R + X Toggle fullscreen
27+
R + Y Flip fds disk
28+
R + UP Toggle framerate display
29+
R + LEFT Insert vsuni coin
30+
R + SELECT Save snapshot
31+
R + START Pause emulation
2932

3033
HOWTO INSTALL FOR RITMIX RZX-50 AND DINGOO A380/A320e:
3134
- copy folder FCEUX with its contents to "emulator" folder of inner flash-memory of your handheld
@@ -54,7 +57,7 @@ Noticed bugs/features:
5457

5558
FCEUX v0.3
5659
FCEUx port for Dingux
57-
----
60+
-------------------------------------------------------------
5861

5962
Features
6063

@@ -155,7 +158,3 @@ Noticed bugs/features:
155158

156159
gama
157160
158-
159-
----
160-
161-
Thanks go to all people who worked on each incarnation of FCEUX: the_gama, ValdikSS and DiegoSLTS, Steward-fu, gameblabla, pingflood.

src/driver.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ void FCEUI_LoadState(const char *fname, bool display_message=true);
169169
void FCEUD_SaveStateAs(void);
170170
void FCEUD_LoadStateFrom(void);
171171

172+
bool file_exists(const char * filename);
173+
172174
//at the minimum, you should call FCEUI_SetInput, FCEUI_SetInputFC, and FCEUI_SetInputFourscore
173175
//you may also need to maintain your own internal state
174176
void FCEUD_SetInput(bool fourscore, bool microphone, ESI port0, ESI port1, ESIFC fcexp);

src/drivers/dingux-sdl/dingoo-video.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@
2626
#include <stdlib.h>
2727
#include <stdbool.h>
2828
#include <SDL/SDL.h>
29+
#include <SDL/SDL_ttf.h>
2930
#include <SDL/SDL_image.h>
3031

3132
#include "dingoo.h"
3233
#include "dingoo-video.h"
3334
#include "scaler.h"
35+
#include "menu.h"
3436

3537
#include "../common/vidblit.h"
3638
#include "../../fceu.h"
@@ -103,6 +105,10 @@ int KillVideo() {
103105
if (s_inited == 0)
104106
return -1;
105107

108+
deinit_menu_SDL();
109+
110+
TTF_Quit();
111+
106112
SDL_FreeSurface(nes_screen);
107113
s_inited = 0;
108114
return 0;
@@ -166,6 +172,11 @@ int InitVideo(FCEUGI *gi) {
166172
s_VideoModeSet = true;
167173
}
168174

175+
if (TTF_Init()) {
176+
fprintf(stderr, "Error TTF_Init: %s\n", TTF_GetError());
177+
exit(EXIT_FAILURE);
178+
}
179+
169180
// a hack to bind inner buffer to nes_screen surface
170181
extern uint8 *XBuf;
171182

@@ -179,13 +190,17 @@ int InitVideo(FCEUGI *gi) {
179190
/* clear screen */
180191
dingoo_clear_video();
181192

193+
194+
init_menu_SDL();
195+
182196
return 0;
183197
}
184198

185199
/**
186200
* Toggles the full-screen display.
187201
*/
188202
void ToggleFS() {
203+
dingoo_clear_video();
189204
}
190205

191206
/* Taken from /src/drivers/common/vidblit.cpp */

src/drivers/dingux-sdl/input.cpp

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
#include "dingoo-video.h"
3030
#include "dingoo.h"
31+
#include "menu.h"
3132

3233
#include "gui/gui.h"
3334

@@ -302,20 +303,38 @@ static void KeyboardCommands() {
302303

303304
if (MenuRequested) {
304305
SilenceSound(1);
306+
printf("Menu requested\n");
305307
MenuRequested = false;
306-
FCEUGUI_Run();
307-
while (ispressed(DINGOO_A) || ispressed(DINGOO_B)) { // wait for keyup
308+
run_menu_loop();
309+
while (ispressed(FUNKEY_MENU) || ispressed(SDLK_b) || ispressed(SDLK_a)) { // wait for keyup
308310
SDL_PumpEvents();
309311
}
310312
SilenceSound(0);
311313
return;
312314
}
313315

314-
// toggle fastforwad
315-
if(ispressed(DINGOO_L)) {
316-
fastforward = !fastforward;
317-
resetkey(DINGOO_L);
318-
}
316+
317+
if (ispressed(FUNKEY_AR_CHANGE)) {
318+
printf("Aspect ration change\n");
319+
resetkey(FUNKEY_AR_CHANGE);
320+
aspect_ratio = (aspect_ratio+1)%NB_ASPECT_RATIOS_TYPES;
321+
322+
char shell_cmd[100];
323+
FILE *fp;
324+
sprintf(shell_cmd, "%s %d \" DISPLAY MODE: %s\"",
325+
SHELL_CMD_NOTIF, NOTIF_SECONDS_DISP, aspect_ratio_name[aspect_ratio]);
326+
fp = popen(shell_cmd, "r");
327+
if (fp == NULL) {
328+
printf("Failed to run command %s\n", shell_cmd);
329+
}
330+
}
331+
332+
// toggle fastforwad
333+
if(ispressed(DINGOO_L)) {
334+
fastforward = !fastforward;
335+
resetkey(DINGOO_L);
336+
}
337+
319338
// R shift + combokeys
320339
if(ispressed(DINGOO_R)) {
321340
extern int g_slot; // import from gui.cpp
@@ -660,10 +679,8 @@ static void UpdatePhysicalInput()
660679
}
661680
break;
662681
case SDL_KEYDOWN:
663-
if (
664-
((inputmenu == 0 || inputmenu == 1) && event.key.keysym.sym == DINGOO_MENU)
665-
|| ((inputmenu == 0 || inputmenu == 2) && (g_keyState[DINGOO_SELECT] && event.key.keysym.sym == DINGOO_START))
666-
) {
682+
if (event.key.keysym.sym == FUNKEY_MENU)
683+
{
667684
// Because a KEYUP is sent straight after the KEYDOWN for the
668685
// Power switch, SDL_GetKeyState will not ever see this.
669686
// Keep a record of it.
@@ -714,8 +731,7 @@ static int DTestButton(ButtConfig *bc){
714731

715732
ButtConfig GamePadConfig[4][10] = {
716733
/* Gamepad 1 */
717-
{ MK(LCTRL), MK(LALT), MK(ESCAPE), MK(RETURN), MK(UP), MK(DOWN), MK(LEFT), MK(RIGHT),
718-
MK(SPACE), MK(LSHIFT) },
734+
{ MK(A), MK(B), MK(K), MK(S), MK(U), MK(D), MK(L), MK(R), MK(N), MK(M) },
719735

720736
/* Gamepad 2 */
721737
GPZ(),
@@ -756,6 +772,7 @@ static void UpdateGamepad(void) {
756772
}
757773

758774
// rapid-fire a, rapid-fire b
775+
rapidAlternator = 0;
759776
if (rapidAlternator) {
760777
for (x = 0; x < 2; x++) {
761778
if (DTestButton(&GamePadConfig[wg][8 + x])) {
@@ -1244,16 +1261,17 @@ void UpdateInput(Config *config) {
12441261
// input device key.
12451262
int type, devnum, button;
12461263

1247-
// gamepad 0 - 3
1248-
for (unsigned int i = 0; i < GAMEPAD_NUM_DEVICES; i++) {
1264+
// gamepad 0 - 3 ---> Nope, let FunKey default in code for now
1265+
/*for (unsigned int i = 0; i < GAMEPAD_NUM_DEVICES; i++) {
12491266
char buf[64];
12501267
snprintf(buf, 20, "SDL.Input.GamePad.%d.", i);
12511268
prefix = buf;
12521269
12531270
config->getOption(prefix + "DeviceType", &device);
12541271
if (device.find("Keyboard") != std::string::npos) {
12551272
type = BUTTC_KEYBOARD;
1256-
} else if (device.find("Joystick") != std::string::npos) {
1273+
printf("Device type = keyboard\n");
1274+
} else if (device.find("Joystick") != std::string::npos) {
12571275
type = BUTTC_JOYSTICK;
12581276
} else {
12591277
type = 0;
@@ -1267,8 +1285,10 @@ void UpdateInput(Config *config) {
12671285
GamePadConfig[i][j].DeviceNum[0] = devnum;
12681286
GamePadConfig[i][j].ButtonNum[0] = button;
12691287
GamePadConfig[i][j].NumC = 1;
1288+
1289+
printf("*** GamePadConfig[%d][%d].ButtonNum[0] = %d\n", i, j, GamePadConfig[i][j].ButtonNum[0]);
12701290
}
1271-
}
1291+
}*/
12721292

12731293
#if 0
12741294
// PowerPad 0 - 1
@@ -1436,7 +1456,7 @@ const char *DefaultGamePadDevice[GAMEPAD_NUM_DEVICES] =
14361456

14371457
const int DefaultGamePad[GAMEPAD_NUM_DEVICES][GAMEPAD_NUM_BUTTONS] =
14381458
{
1439-
{ SDLK_LCTRL, SDLK_LALT, SDLK_ESCAPE, SDLK_RETURN, SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, SDLK_SPACE, SDLK_LSHIFT },
1459+
{ SDLK_a, SDLK_b, SDLK_k, SDLK_s, SDLK_u, SDLK_d, SDLK_l, SDLK_r, SDLK_n, SDLK_m },
14401460
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
14411461
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
14421462
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }

src/drivers/dingux-sdl/keyscan.h

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,19 @@
5151

5252
#define MKK_COUNT (SDLK_LAST+1)
5353

54-
#define DINGOO_UP SDLK_UP
55-
#define DINGOO_DOWN SDLK_DOWN
56-
#define DINGOO_LEFT SDLK_LEFT
57-
#define DINGOO_RIGHT SDLK_RIGHT
58-
#define DINGOO_A SDLK_LCTRL
59-
#define DINGOO_B SDLK_LALT
60-
#define DINGOO_X SDLK_SPACE
61-
#define DINGOO_Y SDLK_LSHIFT
62-
#define DINGOO_L SDLK_TAB
63-
#define DINGOO_R SDLK_BACKSPACE
64-
#define DINGOO_START SDLK_RETURN
65-
#define DINGOO_SELECT SDLK_ESCAPE
66-
#define DINGOO_MENU SDLK_END
54+
#define DINGOO_UP SDLK_QUOTE
55+
#define DINGOO_DOWN SDLK_QUOTE
56+
#define DINGOO_LEFT SDLK_QUOTE
57+
#define DINGOO_RIGHT SDLK_QUOTE
58+
#define DINGOO_A SDLK_QUOTE
59+
#define DINGOO_B SDLK_QUOTE
60+
#define DINGOO_X SDLK_QUOTE
61+
#define DINGOO_Y SDLK_QUOTE
62+
#define DINGOO_L SDLK_QUOTE
63+
#define DINGOO_R SDLK_QUOTE
64+
#define DINGOO_START SDLK_QUOTE
65+
#define DINGOO_SELECT SDLK_QUOTE
66+
#define DINGOO_MENU SDLK_QUOTE
67+
68+
#define FUNKEY_MENU SDLK_q
69+
#define FUNKEY_AR_CHANGE SDLK_h

0 commit comments

Comments
 (0)