Added support for loading games from USB port (only FAT)

This commit is contained in:
fabio.olimpieri 2011-06-05 13:46:38 +00:00
parent 1c57b2170e
commit 07b3a3c166
9 changed files with 90 additions and 20 deletions

View File

@ -108,6 +108,7 @@ Prefs::Prefs()
AlwaysCopy = false; AlwaysCopy = false;
SystemKeys = true; SystemKeys = true;
ShowLEDs = true; ShowLEDs = true;
Usbport = false;
this->SetupJoystickDefaults(); this->SetupJoystickDefaults();
@ -527,6 +528,8 @@ void Prefs::Load(const char *filename)
strcpy(Theme, value); strcpy(Theme, value);
else if (!strcmp(keyword, "CursorKeysForJoystick")) else if (!strcmp(keyword, "CursorKeysForJoystick"))
CursorKeysForJoystick = !strcmp(value, "TRUE"); CursorKeysForJoystick = !strcmp(value, "TRUE");
else if (!strcmp(keyword, "Usbport"))
Usbport = !strcmp(value, "TRUE");
} }
} }
fclose(file); fclose(file);
@ -640,6 +643,7 @@ bool Prefs::Save(const char *filename)
maybe_write(file, NetworkRegion != TheDefaultPrefs.NetworkRegion, "NetworkRegion = %d\n", NetworkRegion); maybe_write(file, NetworkRegion != TheDefaultPrefs.NetworkRegion, "NetworkRegion = %d\n", NetworkRegion);
maybe_write(file, strcmp(Theme, TheDefaultPrefs.Theme) != 0, "Theme = %s\n", Theme); maybe_write(file, strcmp(Theme, TheDefaultPrefs.Theme) != 0, "Theme = %s\n", Theme);
maybe_write(file, CursorKeysForJoystick != TheDefaultPrefs.CursorKeysForJoystick, "CursorKeysForJoystick = %s\n", CursorKeysForJoystick ? "TRUE" : "FALSE"); maybe_write(file, CursorKeysForJoystick != TheDefaultPrefs.CursorKeysForJoystick, "CursorKeysForJoystick = %s\n", CursorKeysForJoystick ? "TRUE" : "FALSE");
maybe_write(file, Usbport != TheDefaultPrefs.Usbport, "Usbport = %s\n", Usbport ? "TRUE" : "FALSE");
fclose(file); fclose(file);
ThePrefsOnDisk = *this; ThePrefsOnDisk = *this;
return true; return true;

View File

@ -155,6 +155,7 @@ public:
bool AlwaysCopy; // Always use a work surface (Win32) bool AlwaysCopy; // Always use a work surface (Win32)
bool SystemKeys; // Enable system keys and menu keys (Win32) bool SystemKeys; // Enable system keys and menu keys (Win32)
bool ShowLEDs; // Show LEDs (Win32) bool ShowLEDs; // Show LEDs (Win32)
bool Usbport; // Load from usb port
uint32 MsPerFrame; uint32 MsPerFrame;

View File

@ -24,6 +24,7 @@ extern SDL_Surface *screen;
#define THEME_ROOT_PATH "/frodo/themes" #define THEME_ROOT_PATH "/frodo/themes"
#define METADATA_ROOT_PATH "/frodo/metadata" #define METADATA_ROOT_PATH "/frodo/metadata"
#define GAME_ROOT_PATH "/frodo/images" #define GAME_ROOT_PATH "/frodo/images"
#define GAME_ROOT_PATH_USB "usb:/"
#define TMP_ROOT_PATH "/frodo/tmp" #define TMP_ROOT_PATH "/frodo/tmp"
#define SAVE_GAME_ROOT_PATH "/frodo/saves" #define SAVE_GAME_ROOT_PATH "/frodo/saves"
#else #else
@ -107,6 +108,7 @@ Gui::Gui()
this->theme_base_path = THEME_ROOT_PATH; this->theme_base_path = THEME_ROOT_PATH;
this->metadata_base_path = METADATA_ROOT_PATH; this->metadata_base_path = METADATA_ROOT_PATH;
this->game_base_path = GAME_ROOT_PATH; this->game_base_path = GAME_ROOT_PATH;
this->game_base_path_usb = GAME_ROOT_PATH_USB;
this->tmp_path = TMP_ROOT_PATH; this->tmp_path = TMP_ROOT_PATH;
this->save_game_path = SAVE_GAME_ROOT_PATH; this->save_game_path = SAVE_GAME_ROOT_PATH;

View File

@ -129,6 +129,7 @@ public:
const char *metadata_base_path; const char *metadata_base_path;
const char *theme_base_path; const char *theme_base_path;
const char *game_base_path; const char *game_base_path;
const char *game_base_path_usb;
const char *tmp_path; const char *tmp_path;
const char *save_game_path; const char *save_game_path;

View File

@ -4,7 +4,8 @@
ListenerManager::ListenerManager() ListenerManager::ListenerManager()
{ {
printf("Flushing listeners\n"); //commented since appear under the screen
//printf("Flushing listeners\n");
this->flushListeners(); this->flushListeners();
} }

View File

@ -1,6 +1,8 @@
#include "menu.hh" #include "menu.hh"
#include "dialogue_box.hh" #include "dialogue_box.hh"
extern int usbismount;
class KeyboardTypingListener : public KeyboardListener, TimeoutHandler class KeyboardTypingListener : public KeyboardListener, TimeoutHandler
{ {
public: public:
@ -68,7 +70,9 @@ public:
switch (which) switch (which)
{ {
case 0: /* Insert disc */ case 0: /* Insert disc */
Gui::gui->dv->setDirectory(Gui::gui->game_base_path); if (Gui::gui->np->Usbport & usbismount) Gui::gui->dv->setDirectory(Gui::gui->game_base_path_usb);
else Gui::gui->dv->setDirectory(Gui::gui->game_base_path);
Gui::gui->pushView(Gui::gui->dv); Gui::gui->pushView(Gui::gui->dv);
Gui::gui->dv->runStartSequence(this->p_submenus[0].sel == 0); Gui::gui->dv->runStartSequence(this->p_submenus[0].sel == 0);

View File

@ -138,7 +138,7 @@ const char *frodo_help[11] = {
}; };
const char *main_menu_messages[14] = { const char *main_menu_messages[13] = {
/*00*/ "File", /*00*/ "File",
/*01*/ "^|Start|Insert", /*01*/ "^|Start|Insert",
/*02*/ "States", /*02*/ "States",
@ -154,7 +154,7 @@ const char *main_menu_messages[14] = {
NULL NULL
}; };
const char **main_menu_help[14] = { const char **main_menu_help[13] = {
(const char*[]){ (const char*[]){
"Insert a disc/tape or", "Insert a disc/tape or",
"start it", "start it",
@ -205,7 +205,7 @@ const char **main_menu_help[14] = {
}; };
const char *options_menu_messages[14] = { const char *options_menu_messages[15] = {
/*00*/ "Help", /*00*/ "Help",
/*01*/ " ", /*01*/ " ",
/*02*/ "Map Controller 1 to:", /*02*/ "Map Controller 1 to:",
@ -216,13 +216,14 @@ const char *options_menu_messages[14] = {
/*07*/ "^|window|fullscreen", /*07*/ "^|window|fullscreen",
/*08*/ "Speed (approx. %)", /*08*/ "Speed (approx. %)",
/*09*/ "^|95|100|110", /*09*/ "^|95|100|110",
/*10*/ "Reset the C=64", /*10*/ "Usb port",
/*11*/ " ", /*11*/ "^|ON|OFF",
/*12*/ "Setup GUI theme", /*12*/ "Setup GUI theme",
/*13*/ "Reset the C=64",
NULL NULL
}; };
const char *bind_key_menu_messages[13] = { const char *bind_key_menu_messages[9] = {
/*00*/ "Wiimote", /*00*/ "Wiimote",
/*01*/ "^|A|B|1|2|+|-", /*01*/ "^|A|B|1|2|+|-",
/*02*/ "Nunchuk", /*02*/ "Nunchuk",
@ -234,7 +235,7 @@ const char *bind_key_menu_messages[13] = {
NULL NULL
}; };
const char **options_menu_help[14] = { const char **options_menu_help[15] = {
(const char*[]){ (const char*[]){
"Help and keyboard.", "Help and keyboard.",
"shortcuts", "shortcuts",
@ -273,7 +274,8 @@ const char **options_menu_help[14] = {
}, },
NULL, NULL,
(const char*[]){ (const char*[]){
"Reset the c64.", "Load games from usb port",
"instead of SD card",
NULL, NULL,
}, },
NULL, NULL,
@ -282,6 +284,10 @@ const char **options_menu_help[14] = {
"menus.", "menus.",
NULL, NULL,
}, },
(const char*[]){
"Reset the c64.",
NULL,
},
NULL, NULL,
}; };

View File

@ -28,7 +28,7 @@ public:
Gui::gui->pushDialogueBox(new DialogueBox(frodo_help)); Gui::gui->pushDialogueBox(new DialogueBox(frodo_help));
return; return;
} }
else if (which == 10) else if (which == 13)
{ {
Gui::gui->status_bar->queueMessage("Resetting the C64"); Gui::gui->status_bar->queueMessage("Resetting the C64");
Gui::gui->exitMenu(); Gui::gui->exitMenu();
@ -74,13 +74,14 @@ public:
case 2: case 2:
Gui::gui->np->MsPerFrame = SPEED_110; break; Gui::gui->np->MsPerFrame = SPEED_110; break;
default: default:
panic("Impossible submenu value: %d\n", this->p_submenus[4].sel); panic("Impossible submenu value: %d\n", this->p_submenus[3].sel);
} }
Gui::gui->np->Usbport = !this->p_submenus[4].sel;
} }
void updateSubmenus() void updateSubmenus()
{ {
int submenu_defs[5]; int submenu_defs[4];
submenu_defs[0] = Gui::gui->np->JoystickSwap == true ? 0 : 1; submenu_defs[0] = Gui::gui->np->JoystickSwap == true ? 0 : 1;
submenu_defs[1] = !Gui::gui->np->Emul1541Proc; submenu_defs[1] = !Gui::gui->np->Emul1541Proc;
@ -97,6 +98,7 @@ public:
submenu_defs[3] = 1; break; submenu_defs[3] = 1; break;
} }
submenu_defs[4] = !Gui::gui->np->Usbport;
this->setText(options_menu_messages, submenu_defs); this->setText(options_menu_messages, submenu_defs);
} }

View File

@ -32,7 +32,9 @@
#include "utils.hh" #include "utils.hh"
#if defined(GEKKO) #if defined(GEKKO)
#include <gccore.h>
#include <fat.h> #include <fat.h>
#include <ogc/usbstorage.h>
#endif #endif
@ -43,7 +45,7 @@ extern int init_graphics(void);
// Global variables // Global variables
C64 *TheC64 = NULL; // Global C64 object C64 *TheC64 = NULL; // Global C64 object
char AppDirPath[1024]; // Path of application directory char AppDirPath[1024]; // Path of application directory
int usbismount = 0;
// ROM file names // ROM file names
#ifndef DATADIR #ifndef DATADIR
@ -76,6 +78,48 @@ char AppDirPath[1024]; // Path of application directory
#include "1541_ROM.h" #include "1541_ROM.h"
#if defined(GEKKO)
//init and deinit USB device functions
//code taken from Arikado
int InitUSB()
{
printf("Initializing USB FAT subsytem ...\n\n");
fatUnmount("usb:");
bool isMounted = fatMountSimple("usb", &__io_usbstorage);
if(!isMounted)
{
fatUnmount("usb:");
fatMountSimple("usb", &__io_usbstorage);
bool isInserted = __io_usbstorage.isInserted();
if(isInserted)
{ int retry = 10;
while(retry)
{
isMounted = fatMountSimple("usb", &__io_usbstorage);
if (isMounted) break;
sleep(1);
retry--;
}
}
}
return isMounted;
}
void DeInitUSB()
{
fatUnmount("usb:");
__io_usbstorage.shutdown();
}
#endif
/* /*
* Load C64 ROM files * Load C64 ROM files
*/ */
@ -136,11 +180,18 @@ extern "C" int main(int argc, char **argv)
//initialize libfat library //initialize libfat library
if (!fatInitDefault()) if (!fatInitDefault())
{ {
printf("Couldn't initialize fat subsytem\n"); printf("Couldn't initialize SD fat subsytem\n\n");
sleep(3); sleep(3);
exit(0); exit(0);
} }
usbismount = InitUSB();
if (usbismount)
printf("USB FAT subsytem initialized\n");
else
printf("Impossible to initialize USB FAT subsytem\n");
sleep(2);
//create tmp directory if it does not exist //create tmp directory if it does not exist
dir_tmp = diropen("/frodo/tmp"); dir_tmp = diropen("/frodo/tmp");
if (!dir_tmp) {mkdir("/frodo/tmp",0777);printf("Making tmp directory\n");sleep(3);} else dirclose(dir_tmp); if (!dir_tmp) {mkdir("/frodo/tmp",0777);printf("Making tmp directory\n");sleep(3);} else dirclose(dir_tmp);
@ -154,6 +205,7 @@ extern "C" int main(int argc, char **argv)
delete the_app; delete the_app;
#ifdef GEKKO #ifdef GEKKO
DeInitUSB();
fatUnmount(0); fatUnmount(0);
#endif #endif
@ -288,9 +340,6 @@ void Frodo::ReadyToRun(void)
delete TheC64; delete TheC64;
#if defined(GEKKO)
fatUnmount("sd:");
#endif
} }
/* /*