diff options
Diffstat (limited to 'frontend')
-rw-r--r-- | frontend/main.c | 202 | ||||
-rw-r--r-- | frontend/main.h | 42 | ||||
-rw-r--r-- | frontend/menu.c | 18 | ||||
-rw-r--r-- | frontend/plat_dummy.c | 8 | ||||
-rw-r--r-- | frontend/plugin.c | 24 |
5 files changed, 203 insertions, 91 deletions
diff --git a/frontend/main.c b/frontend/main.c index 0427ce4..7b45983 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -12,18 +12,20 @@ #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> +#include <signal.h> +#include "main.h" #include "plugin.h" #include "pcnt.h" #include "menu.h" -#include "../gui/Linux.h" #include "../libpcsxcore/misc.h" #include "../plugins/cdrcimg/cdrcimg.h" #include "common/plat.h" #include "common/input.h" int ready_to_go; -int UseGui; +unsigned long gpuDisp; +char cfgfile_basename[MAXPATHLEN]; static char *(*real_getenv)(const char *name); static void make_path(char *buf, size_t size, const char *dir, const char *fname) @@ -228,11 +230,11 @@ int main(int argc, char *argv[]) // If a state has been specified, then load that if (loadst) { - StatesC = loadst - 1; - char *state_filename = get_state_filename(StatesC); - int ret = LoadState(state_filename); + char state_filename[MAXPATHLEN]; + int ret = get_state_filename(state_filename, sizeof(state_filename), loadst - 1); + if (ret == 0) + ret = LoadState(state_filename); printf("%s state %s\n", ret ? "failed to load" : "loaded", state_filename); - free(state_filename); } if (ready_to_go) @@ -289,11 +291,6 @@ void SysClose() { } void SysUpdate() { - PADhandleKey(PAD1_keypressed()); - PADhandleKey(PAD2_keypressed()); -} - -void UpdateMenuSlots() { } void OnFile_Exit() { @@ -304,57 +301,7 @@ void OnFile_Exit() { exit(0); } -void state_save(gchar *state_filename) { - char Text[MAXPATHLEN + 20]; - - GPU_updateLace(); - - if (SaveState(state_filename) == 0) - sprintf(Text, _("Saved state %s."), state_filename); - else - sprintf(Text, _("Error saving state %s!"), state_filename); - - GPU_displayText(Text); -} - -void state_load(gchar *state_filename) { - int ret; - char Text[MAXPATHLEN + 20]; - FILE *fp; - - // check if the state file actually exists - fp = fopen(state_filename, "rb"); - if (fp == NULL) { - // file does not exist - return; - } - - fclose(fp); - - ret = CheckState(state_filename); - - if (ret == 0) { - SysReset(); - ret = LoadState(state_filename); - } - - if (ret == 0) { - // Check the CD-ROM is valid - if (CheckCdrom() == -1) { - ClosePlugins(); - SysRunGui(); - return; - } - - sprintf(Text, _("Loaded state %s."), state_filename); - } else { - sprintf(Text, _("Error loading state %s!"), state_filename); - } - GPU_displayText(Text); -} - -char *get_state_filename(int i) { - char SStateFile[256]; +int get_state_filename(char *buf, int size, int i) { char trimlabel[33]; int j; @@ -366,10 +313,10 @@ char *get_state_filename(int i) { else continue; - snprintf(SStateFile, sizeof(SStateFile), "." STATES_DIR "%.32s-%.9s.%3.3d", + snprintf(buf, size, "." STATES_DIR "%.32s-%.9s.%3.3d", trimlabel, CdromId, i); - return strdup(SStateFile); + return 0; } void SysPrintf(const char *fmt, ...) { @@ -397,6 +344,132 @@ void SysMessage(const char *fmt, ...) { fprintf(stderr, "%s\n", msg); } +static void SignalExit(int sig) { + ClosePlugins(); + OnFile_Exit(); +} + +#define PARSEPATH(dst, src) \ + ptr = src + strlen(src); \ + while (*ptr != '\\' && ptr != src) ptr--; \ + if (ptr != src) { \ + strcpy(dst, ptr+1); \ + } + +static int _OpenPlugins(void) { + int ret; + + signal(SIGINT, SignalExit); + signal(SIGPIPE, SignalExit); + + GPU_clearDynarec(clearDynarec); + + ret = CDR_open(); + if (ret < 0) { SysMessage(_("Error opening CD-ROM plugin!")); return -1; } + ret = SPU_open(); + if (ret < 0) { SysMessage(_("Error opening SPU plugin!")); return -1; } + SPU_registerCallback(SPUirq); + // pcsx-rearmed: we handle gpu elsewhere + //ret = GPU_open(&gpuDisp, "PCSX", NULL); + //if (ret < 0) { SysMessage(_("Error opening GPU plugin!")); return -1; } + ret = PAD1_open(&gpuDisp); + if (ret < 0) { SysMessage(_("Error opening Controller 1 plugin!")); return -1; } + ret = PAD2_open(&gpuDisp); + if (ret < 0) { SysMessage(_("Error opening Controller 2 plugin!")); return -1; } + + if (Config.UseNet && !NetOpened) { + netInfo info; + char path[MAXPATHLEN]; + char dotdir[MAXPATHLEN]; + + MAKE_PATH(dotdir, "/.pcsx/plugins/", NULL); + + strcpy(info.EmuName, "PCSX " PACKAGE_VERSION); + strncpy(info.CdromID, CdromId, 9); + strncpy(info.CdromLabel, CdromLabel, 9); + info.psxMem = psxM; + info.GPU_showScreenPic = GPU_showScreenPic; + info.GPU_displayText = GPU_displayText; + info.GPU_showScreenPic = GPU_showScreenPic; + info.PAD_setSensitive = PAD1_setSensitive; + sprintf(path, "%s%s", Config.BiosDir, Config.Bios); + strcpy(info.BIOSpath, path); + strcpy(info.MCD1path, Config.Mcd1); + strcpy(info.MCD2path, Config.Mcd2); + sprintf(path, "%s%s", dotdir, Config.Gpu); + strcpy(info.GPUpath, path); + sprintf(path, "%s%s", dotdir, Config.Spu); + strcpy(info.SPUpath, path); + sprintf(path, "%s%s", dotdir, Config.Cdr); + strcpy(info.CDRpath, path); + NET_setInfo(&info); + + ret = NET_open(&gpuDisp); + if (ret < 0) { + if (ret == -2) { + // -2 is returned when something in the info + // changed and needs to be synced + char *ptr; + + PARSEPATH(Config.Bios, info.BIOSpath); + PARSEPATH(Config.Gpu, info.GPUpath); + PARSEPATH(Config.Spu, info.SPUpath); + PARSEPATH(Config.Cdr, info.CDRpath); + + strcpy(Config.Mcd1, info.MCD1path); + strcpy(Config.Mcd2, info.MCD2path); + return -2; + } else { + Config.UseNet = FALSE; + } + } else { + if (NET_queryPlayer() == 1) { + if (SendPcsxInfo() == -1) Config.UseNet = FALSE; + } else { + if (RecvPcsxInfo() == -1) Config.UseNet = FALSE; + } + } + NetOpened = TRUE; + } else if (Config.UseNet) { + NET_resume(); + } + + return 0; +} + +int OpenPlugins() { + int ret; + + while ((ret = _OpenPlugins()) == -2) { + ReleasePlugins(); + LoadMcds(Config.Mcd1, Config.Mcd2); + if (LoadPlugins() == -1) return -1; + } + return ret; +} + +void ClosePlugins() { + int ret; + + signal(SIGINT, SIG_DFL); + signal(SIGPIPE, SIG_DFL); + ret = CDR_close(); + if (ret < 0) { SysMessage(_("Error closing CD-ROM plugin!")); return; } + ret = SPU_close(); + if (ret < 0) { SysMessage(_("Error closing SPU plugin!")); return; } + ret = PAD1_close(); + if (ret < 0) { SysMessage(_("Error closing Controller 1 Plugin!")); return; } + ret = PAD2_close(); + if (ret < 0) { SysMessage(_("Error closing Controller 2 plugin!")); return; } + // pcsx-rearmed: we handle gpu elsewhere + //ret = GPU_close(); + //if (ret < 0) { SysMessage(_("Error closing GPU plugin!")); return; } + + if (Config.UseNet) { + NET_pause(); + } +} + #if 1 /* this is to avoid having to hack every plugin to stop using $HOME */ char *getenv(const char *name) @@ -471,4 +544,3 @@ void SysCloseLibrary(void *lib) { dlclose(lib); } - diff --git a/frontend/main.h b/frontend/main.h new file mode 100644 index 0000000..020b675 --- /dev/null +++ b/frontend/main.h @@ -0,0 +1,42 @@ +/* Pcsx - Pc Psx Emulator + * Copyright (C) 1999-2002 Pcsx Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA + */ + +#ifndef __LINUX_H__ +#define __LINUX_H__ + +#include "config.h" + +#define DEFAULT_MEM_CARD_1 "/.pcsx/memcards/card1.mcd" +#define DEFAULT_MEM_CARD_2 "/.pcsx/memcards/card2.mcd" +#define MEMCARD_DIR "/.pcsx/memcards/" +#define PLUGINS_DIR "/.pcsx/plugins/" +#define PLUGINS_CFG_DIR "/.pcsx/plugins/cfg/" +#define PCSX_DOT_DIR "/.pcsx/" +#define BIOS_DIR "/.pcsx/bios/" +#define STATES_DIR "/.pcsx/sstates/" +#define CHEATS_DIR "/.pcsx/cheats/" +#define PATCHES_DIR "/.pcsx/patches/" + +extern char cfgfile_basename[MAXPATHLEN]; + +int get_state_filename(char *buf, int size, int i); + +extern unsigned long gpuDisp; +extern int ready_to_go; + +#endif /* __LINUX_H__ */ diff --git a/frontend/menu.c b/frontend/menu.c index 19ad86f..e04d19e 100644 --- a/frontend/menu.c +++ b/frontend/menu.c @@ -13,13 +13,13 @@ #include <errno.h> #include <dlfcn.h> +#include "main.h" #include "menu.h" #include "config.h" #include "plugin.h" #include "plugin_lib.h" #include "omap.h" #include "common/plat.h" -#include "../gui/Linux.h" #include "../libpcsxcore/misc.h" #include "../libpcsxcore/new_dynarec/new_dynarec.h" #include "revision.h" @@ -57,7 +57,6 @@ enum { SCALE_CUSTOM, }; -extern int ready_to_go; static int last_psx_w, last_psx_h, last_psx_bpp; static int scaling, filter, state_slot, cpu_clock, cpu_clock_st; static char rom_fname_reload[MAXPATHLEN]; @@ -101,32 +100,30 @@ void emu_make_path(char *buff, const char *end, int size) static int emu_check_save_file(int slot) { - char *fname; + char fname[MAXPATHLEN]; int ret; - fname = get_state_filename(slot); - if (fname == NULL) + ret = get_state_filename(fname, sizeof(fname), slot); + if (ret != 0) return 0; ret = CheckState(fname); - free(fname); return ret == 0 ? 1 : 0; } static int emu_save_load_game(int load, int sram) { - char *fname; + char fname[MAXPATHLEN]; int ret; - fname = get_state_filename(state_slot); - if (fname == NULL) + ret = get_state_filename(fname, sizeof(fname), state_slot); + if (ret != 0) return 0; if (load) ret = LoadState(fname); else ret = SaveState(fname); - free(fname); return ret; } @@ -1225,7 +1222,6 @@ void menu_prepare_emu(void) } if (GPU_open != NULL) { - extern unsigned long gpuDisp; int ret = GPU_open(&gpuDisp, "PCSX", NULL); if (ret) fprintf(stderr, "Warning: GPU_open returned %d\n", ret); diff --git a/frontend/plat_dummy.c b/frontend/plat_dummy.c index 0b4f100..a34f900 100644 --- a/frontend/plat_dummy.c +++ b/frontend/plat_dummy.c @@ -19,6 +19,10 @@ int omap_enable_layer(int enabled) return 0; } +void plat_video_menu_enter(int is_rom_loaded) +{ +} + void plat_video_menu_begin(void) { } @@ -27,6 +31,10 @@ void plat_video_menu_end(void) { } +void plat_video_menu_leave(void) +{ +} + void plat_init(void) { } diff --git a/frontend/plugin.c b/frontend/plugin.c index 6c83a44..c11a1f0 100644 --- a/frontend/plugin.c +++ b/frontend/plugin.c @@ -68,17 +68,7 @@ extern uint32_t GPUreadData(void); extern void GPUreadDataMem(uint32_t *, int); extern long GPUdmaChain(uint32_t *,uint32_t); extern void GPUupdateLace(void); -extern long GPUconfigure(void); -extern long GPUtest(void); -extern void GPUabout(void); -extern void GPUmakeSnapshot(void); -extern void GPUkeypressed(int); -extern void GPUdisplayText(char *); extern long GPUfreeze(uint32_t, void *); -extern long GPUgetScreenPic(unsigned char *); -extern long GPUshowScreenPic(unsigned char *); -extern void GPUclearDynarec(void (*callback)(void)); -extern void GPUvBlank(int); #define DUMMY(id, name) \ @@ -87,6 +77,7 @@ extern void GPUvBlank(int); #define DIRECT(id, name) \ { id, #name, name } +#define DUMMY_GPU(name) DUMMY(PLUGIN_GPU, name) #define DUMMY_CDR(name) DUMMY(PLUGIN_CDR, name) #define DUMMY_PAD(name) DUMMY(PLUGIN_PAD, name) #define DIRECT_SPU(name) DIRECT(PLUGIN_SPU, name) @@ -159,9 +150,6 @@ static const struct { DIRECT_GPU(GPUupdateLace), DIRECT_GPU(GPUinit), DIRECT_GPU(GPUshutdown), - DIRECT_GPU(GPUconfigure), - DIRECT_GPU(GPUtest), - DIRECT_GPU(GPUabout), DIRECT_GPU(GPUopen), DIRECT_GPU(GPUclose), DIRECT_GPU(GPUreadStatus), @@ -171,12 +159,18 @@ static const struct { DIRECT_GPU(GPUwriteData), DIRECT_GPU(GPUwriteDataMem), DIRECT_GPU(GPUdmaChain), + DIRECT_GPU(GPUfreeze), + + DUMMY_GPU(GPUdisplayText), +/* DIRECT_GPU(GPUkeypressed), - DIRECT_GPU(GPUdisplayText), DIRECT_GPU(GPUmakeSnapshot), - DIRECT_GPU(GPUfreeze), + DIRECT_GPU(GPUconfigure), + DIRECT_GPU(GPUtest), + DIRECT_GPU(GPUabout), DIRECT_GPU(GPUgetScreenPic), DIRECT_GPU(GPUshowScreenPic), +*/ // DIRECT_GPU(GPUclearDynarec), // DIRECT_GPU(GPUvBlank), }; |