diff options
author | notaz | 2011-02-08 18:21:17 +0200 |
---|---|---|
committer | notaz | 2011-02-10 02:07:54 +0200 |
commit | 1df403c52368a3930b67dedabf8c0e1d522f1cc3 (patch) | |
tree | 2c5b522c3626332d287704a3a1800aa9f923d809 | |
parent | cdb31c9557f464b452ce6dc78b58b7e73cd423d8 (diff) | |
download | pcsx_rearmed-1df403c52368a3930b67dedabf8c0e1d522f1cc3.tar.gz pcsx_rearmed-1df403c52368a3930b67dedabf8c0e1d522f1cc3.tar.bz2 pcsx_rearmed-1df403c52368a3930b67dedabf8c0e1d522f1cc3.zip |
add cd swap functionality
-rw-r--r-- | frontend/menu.c | 38 | ||||
-rw-r--r-- | libpcsxcore/cdrom.h | 1 | ||||
-rw-r--r-- | libpcsxcore/plugins.c | 17 | ||||
-rw-r--r-- | libpcsxcore/plugins.h | 3 |
4 files changed, 58 insertions, 1 deletions
diff --git a/frontend/menu.c b/frontend/menu.c index 7762905..20d334c 100644 --- a/frontend/menu.c +++ b/frontend/menu.c @@ -22,6 +22,7 @@ #include "omap.h" #include "common/plat.h" #include "../libpcsxcore/misc.h" +#include "../libpcsxcore/cdrom.h" #include "../libpcsxcore/psemu_plugin_defs.h" #include "revision.h" @@ -36,6 +37,7 @@ typedef enum MA_MAIN_LOAD_STATE, MA_MAIN_RESET_GAME, MA_MAIN_LOAD_ROM, + MA_MAIN_SWAP_CD, MA_MAIN_RUN_BIOS, MA_MAIN_CONTROLS, MA_MAIN_CREDITS, @@ -1335,6 +1337,36 @@ static int romsel_run(void) return 0; } +static int swap_cd_image(void) +{ + char *fname; + + fname = menu_loop_romsel(last_selected_fname, sizeof(last_selected_fname)); + if (fname == NULL) + return -1; + + printf("selected file: %s\n", fname); + + CdromId[0] = '\0'; + CdromLabel[0] = '\0'; + + set_cd_image(fname); + if (ReloadCdromPlugin() < 0) { + me_update_msg("failed to load cdr plugin"); + return -1; + } + if (CDR_open() < 0) { + me_update_msg("failed to open cdr plugin"); + return -1; + } + + SetCdOpenCaseTime(time(NULL) + 2); + LidInterrupt(); + + strcpy(last_selected_fname, rom_fname_reload); + return 0; +} + static int main_menu_handler(int id, int keys) { switch (id) @@ -1359,6 +1391,10 @@ static int main_menu_handler(int id, int keys) if (romsel_run() == 0) return 1; break; + case MA_MAIN_SWAP_CD: + if (swap_cd_image() == 0) + return 1; + break; case MA_MAIN_RUN_BIOS: if (run_bios() == 0) return 1; @@ -1387,6 +1423,7 @@ static menu_entry e_menu_main[] = mee_handler_id("Load State", MA_MAIN_LOAD_STATE, main_menu_handler), mee_handler_id("Reset game", MA_MAIN_RESET_GAME, main_menu_handler), mee_handler_id("Load CD image", MA_MAIN_LOAD_ROM, main_menu_handler), + mee_handler_id("Change CD image", MA_MAIN_SWAP_CD, main_menu_handler), mee_handler_id("Run BIOS", MA_MAIN_RUN_BIOS, main_menu_handler), mee_handler ("Options", menu_loop_options), mee_handler ("Controls", menu_loop_keyconfig), @@ -1409,6 +1446,7 @@ void menu_loop(void) me_enable(e_menu_main, MA_MAIN_SAVE_STATE, ready_to_go && CdromId[0]); me_enable(e_menu_main, MA_MAIN_LOAD_STATE, ready_to_go && CdromId[0]); me_enable(e_menu_main, MA_MAIN_RESET_GAME, ready_to_go); + me_enable(e_menu_main, MA_MAIN_SWAP_CD, ready_to_go); me_enable(e_menu_main, MA_MAIN_RUN_BIOS, bios_sel != 0); in_set_config_int(0, IN_CFG_BLOCKING, 1); diff --git a/libpcsxcore/cdrom.h b/libpcsxcore/cdrom.h index 90523c3..1f70ff3 100644 --- a/libpcsxcore/cdrom.h +++ b/libpcsxcore/cdrom.h @@ -108,6 +108,7 @@ void cdrRepplayInterrupt(); void cdrLidSeekInterrupt(); void cdrPlayInterrupt(); void cdrDmaInterrupt(); +void LidInterrupt(); unsigned char cdrRead0(void); unsigned char cdrRead1(void); unsigned char cdrRead2(void); diff --git a/libpcsxcore/plugins.c b/libpcsxcore/plugins.c index f965e0d..57e7ef2 100644 --- a/libpcsxcore/plugins.c +++ b/libpcsxcore/plugins.c @@ -794,6 +794,23 @@ void ReleasePlugins() { #endif
}
+// for CD swap
+int ReloadCdromPlugin()
+{
+ if (hCDRDriver != NULL || cdrIsoActive()) CDR_shutdown();
+ if (hCDRDriver != NULL) SysCloseLibrary(hCDRDriver); hCDRDriver = NULL;
+
+ if (UsingIso()) {
+ LoadCDRplugin(NULL);
+ } else {
+ char Plugin[MAXPATHLEN];
+ sprintf(Plugin, "%s/%s", Config.PluginsDir, Config.Cdr);
+ if (LoadCDRplugin(Plugin) == -1) return -1;
+ }
+
+ return CDR_init();
+}
+
void SetIsoFile(const char *filename) {
if (filename == NULL) {
IsoFile[0] = '\0';
diff --git a/libpcsxcore/plugins.h b/libpcsxcore/plugins.h index 9c24ece..8084143 100644 --- a/libpcsxcore/plugins.h +++ b/libpcsxcore/plugins.h @@ -60,6 +60,7 @@ int LoadPlugins(); void ReleasePlugins();
int OpenPlugins();
void ClosePlugins();
+int ReloadCdromPlugin();
typedef unsigned long (CALLBACK* PSEgetLibType)(void);
typedef unsigned long (CALLBACK* PSEgetLibVersion)(void);
@@ -150,7 +151,7 @@ struct SubQ { unsigned char IndexNumber;
unsigned char TrackRelativeAddress[3];
unsigned char Filler;
- unsigned char AbsoluteAddress[3]; + unsigned char AbsoluteAddress[3];
unsigned char CRC[2];
char res1[72];
};
|