* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include "common.h"
+#include "font.h"
+
#ifndef _WIN32_WCE
#include <sys/stat.h>
#endif
-#ifndef GP2X_BUILD
-#include "gp2x/cpuctrl.h"
-#endif
-
-#include "common.h"
-#include "font.h"
-
#define MAX_PATH 1024
// Blatantly stolen and trimmed from MZX (megazeux.sourceforge.net)
#ifdef GP2X_BUILD
-#define FILE_LIST_ROWS ((int)((SDL_SCREEN_HEIGHT - 40) / FONT_HEIGHT))
+#define FILE_LIST_ROWS 20
#define FILE_LIST_POSITION 5
#define DIR_LIST_POSITION 260
#ifdef PSP_BUILD
+#define COLOR_BG color16(2, 8, 10)
+
#define color16(red, green, blue) \
(blue << 11) | (green << 5) | red \
#else
-#define color16(red, green, blue) \
- (red << 11) | (green << 5) | blue \
-
-#endif
-
-#ifdef GP2X_BUILD
-
#define COLOR_BG color16(0, 0, 0)
-#else
-
-#define COLOR_BG color16(2, 8, 10)
+#define color16(red, green, blue) \
+ (red << 11) | (green << 5) | blue \
#endif
#define COLOR_FRAMESKIP_BAR color16(15, 31, 31)
#define COLOR_HELP_TEXT color16(16, 40, 24)
+#ifdef PSP_BUILD
+ u8 *clock_speed_options[] =
+ {
+ "33MHz", "66MHz", "100MHz", "133MHz", "166MHz", "200MHz", "233MHz",
+ "266MHz", "300MHz", "333MHz"
+ };
+ #define menu_get_clock_speed() \
+ clock_speed = (clock_speed_number + 1) * 33
+ #define get_clock_speed_number() \
+ clock_speed_number = (clock_speed / 33) - 1
+#elif defined(WIZ_BUILD)
+ u8 *clock_speed_options[] =
+ {
+ "300MHz", "333MHz", "366MHz", "400MHz", "433MHz",
+ "466MHz", "500MHz", "533MHz", "566MHz", "600MHz",
+ "633MHz", "666MHz", "700MHz", "733MHz", "766MHz",
+ "800MHz", "833MHz", "866MHz", "900MHz"
+ };
+ #define menu_get_clock_speed() \
+ clock_speed = 300 + (clock_speed_number * 3333) / 100
+ #define get_clock_speed_number() \
+ clock_speed_number = (clock_speed - 300) / 33
+#elif defined(GP2X_BUILD)
+ u8 *clock_speed_options[] =
+ {
+ "150MHz", "160MHz", "170MHz", "180MHz", "190MHz",
+ "200MHz", "210MHz", "220MHz", "230MHz", "240MHz",
+ "250MHz", "260MHz", "270MHz", "280MHz", "290MHz"
+ };
+ #define menu_get_clock_speed() \
+ clock_speed = 150 + clock_speed_number * 10
+ #define get_clock_speed_number() \
+ clock_speed_number = (clock_speed - 150) / 10
+#else
+ u8 *clock_speed_options[] =
+ {
+ "0"
+ };
+ #define menu_get_clock_speed() 0
+ #define get_clock_speed_number() 0
+#endif
+
+
int sort_function(const void *dest_str_ptr, const void *src_str_ptr)
{
char *dest_str = *((char **)dest_str_ptr);
u32 chosen_file, chosen_dir;
u32 dialog_result = 1;
s32 return_value = 1;
- u32 current_file_selection;
- u32 current_file_scroll_value;
+ s32 current_file_selection;
+ s32 current_file_scroll_value;
u32 current_dir_selection;
u32 current_dir_scroll_value;
- u32 current_file_in_scroll;
+ s32 current_file_in_scroll;
u32 current_dir_in_scroll;
u32 current_file_number, current_dir_number;
u32 current_column = 0;
current_file_in_scroll++;
}
}
+ else
+ {
+ clear_screen(COLOR_BG);
+ current_file_selection = 0;
+ current_file_scroll_value = 0;
+ current_file_in_scroll = 0;
+ }
}
else
{
break;
+ case CURSOR_R:
+ if (current_column != 0)
+ break;
+ clear_screen(COLOR_BG);
+ current_file_selection += FILE_LIST_ROWS;
+ if (current_file_selection > num_files - 1)
+ current_file_selection = num_files - 1;
+ current_file_scroll_value = current_file_selection - FILE_LIST_ROWS / 2;
+ if (current_file_scroll_value < 0)
+ {
+ current_file_scroll_value = 0;
+ current_file_in_scroll = current_file_selection;
+ }
+ else
+ {
+ current_file_in_scroll = FILE_LIST_ROWS / 2;
+ }
+ break;
+
case CURSOR_UP:
if(current_column == 0)
{
current_file_in_scroll--;
}
}
+ else
+ {
+ clear_screen(COLOR_BG);
+ current_file_selection = num_files - 1;
+ current_file_in_scroll = FILE_LIST_ROWS - 1;
+ if (current_file_in_scroll > num_files - 1)
+ current_file_in_scroll = num_files - 1;
+ current_file_scroll_value = num_files - FILE_LIST_ROWS;
+ if (current_file_scroll_value < 0)
+ current_file_scroll_value = 0;
+ }
}
else
{
}
break;
- case CURSOR_RIGHT:
+ case CURSOR_L:
+ if (current_column != 0)
+ break;
+ clear_screen(COLOR_BG);
+ current_file_selection -= FILE_LIST_ROWS;
+ if (current_file_selection < 0)
+ current_file_selection = 0;
+ current_file_scroll_value = current_file_selection - FILE_LIST_ROWS / 2;
+ if (current_file_scroll_value < 0)
+ {
+ current_file_scroll_value = 0;
+ current_file_in_scroll = current_file_selection;
+ }
+ else
+ {
+ current_file_in_scroll = FILE_LIST_ROWS / 2;
+ }
+ break;
+
+ case CURSOR_RIGHT:
if(current_column == 0)
{
if(num_dirs != 0)
#endif
+u8 *scale_options[] =
+{
+#ifdef WIZ_BUILD
+ "unscaled 3:2", "scaled 3:2 (slower)",
+ "unscaled 3:2 (anti-tear)", "scaled 3:2 (anti-tear)"
+#else
+ "unscaled 3:2", "scaled 3:2", "fullscreen", "scaled 3:2 (software)"
+#ifdef PSP_BUILD
+ " 16:9"
+#endif
+#endif
+};
s32 load_game_config_file()
{
random_skip = file_options[2] % 2;
clock_speed = file_options[3];
-#ifdef GP2X_BUILD
+#ifdef WIZ_BUILD
+ if(clock_speed > 900)
+ clock_speed = 533;
+#elif defined(GP2X_BUILD)
if(clock_speed >= 300)
clock_speed = 200;
#else
current_frameskip_type = auto_frameskip;
frameskip_value = 4;
- random_skip = 0;
-#ifdef GP2X_BUILD
- clock_speed = 200;
-#else
- clock_speed = 333;
+#ifdef WIZ_BUILD
+ frameskip_value = 1;
#endif
+ random_skip = 0;
+ clock_speed = default_clock_speed;
for(i = 0; i < 10; i++)
{
{
u8 config_path[512];
- #if (defined(PSP_BUILD) || defined(ARM_ARCH)) && !defined(_WIN32_WCE)
- sprintf(config_path, "%s/%s", main_path, GPSP_CONFIG_FILENAME);
- #else
+ #if defined(_WIN32) || defined(_WIN32_WCE)
sprintf(config_path, "%s\\%s", main_path, GPSP_CONFIG_FILENAME);
+ #else
+ sprintf(config_path, "%s/%s", main_path, GPSP_CONFIG_FILENAME);
#endif
file_open(config_file, config_path, read);
s32 menu_button = -1;
file_read_array(config_file, file_options);
- screen_scale = file_options[0] % 3;
+ screen_scale = file_options[0] %
+ (sizeof(scale_options) / sizeof(scale_options[0]));
screen_filter = file_options[1] % 2;
global_enable_audio = file_options[2] % 2;
{
memset(snapshot_buffer, 0, 240 * 160 * 2);
print_string_ext("No savestate exists for this slot.",
- 0xFFFF, 0x0000, 15, 75, snapshot_buffer, 240, 0);
+ 0xFFFF, 0x0000, 15, 75, snapshot_buffer, 240, 0, 0, FONT_HEIGHT);
print_string("---------- --/--/---- --:--:-- ", COLOR_HELP_TEXT,
COLOR_BG, 10, 40);
}
u32 menu(u16 *original_screen)
{
- u32 clock_speed_number;
-#ifdef GP2X_BUILD
- static u32 clock_speed_old = 200;
-#endif
u8 print_buffer[81];
+ u32 clock_speed_number;
u32 _current_option = 0;
gui_action_type gui_action;
menu_enum _current_menu = MAIN_MENU;
"Does nothing."
};
+ void menu_update_clock()
+ {
+ get_clock_speed_number();
+ if (clock_speed_number < 0 || clock_speed_number >=
+ sizeof(clock_speed_options) / sizeof(clock_speed_options[0]))
+ {
+ clock_speed = default_clock_speed;
+ get_clock_speed_number();
+ }
+ }
+
void menu_exit()
{
if(!first_load)
void menu_quit()
{
- #ifdef PSP_BUILD
- clock_speed = (clock_speed_number + 1) * 33;
- #elif defined(GP2X_BUILD)
- clock_speed = 150 + clock_speed_number * 10;
- #endif
+ menu_get_clock_speed();
save_config_file();
quit();
}
return_value = 1;
repeat = 0;
reg[CHANGED_PC_STATUS] = 1;
+ menu_update_clock();
}
else
{
u8 *yes_no_options[] = { "no", "yes" };
u8 *enable_disable_options[] = { "disabled", "enabled" };
- u8 *scale_options[] =
- {
- "unscaled 3:2", "scaled 3:2", "fullscreen"
-#ifdef PSP_BUILD
- " 16:9"
-#endif
- };
-
u8 *frameskip_options[] = { "automatic", "manual", "off" };
u8 *frameskip_variation_options[] = { "uniform", "random" };
u8 *update_backup_options[] = { "Exit only", "Automatic" };
-#ifdef GP2X_BUILD
- u8 *clock_speed_options[] =
- {
- "150MHz", "160MHz", "170MHz", "180MHz", "190MHz",
- "200MHz", "210MHz", "220MHz", "230MHz", "240MHz",
- "250MHz", "260MHz", "270MHz", "280MHz", "290MHz"
- };
-#else
- u8 *clock_speed_options[] =
- {
- "33MHz", "66MHz", "100MHz", "133MHz", "166MHz", "200MHz", "233MHz",
- "266MHz", "300MHz", "333MHz"
- };
-#endif
-
u8 *gamepad_config_buttons[] =
{
"UP",
{
string_selection_option(NULL, "Display scaling", scale_options,
(u32 *)(&screen_scale),
-#ifdef WIZ_BUILD
- 2,
-#else
- 3,
-#endif
+ sizeof(scale_options) / sizeof(scale_options[0]),
#ifndef GP2X_BUILD
"Determines how the GBA screen is resized in relation to the entire\n"
"screen. Select unscaled 3:2 for GBA resolution, scaled 3:2 for GBA\n"
cheat_option(9),
string_selection_option(NULL, "Clock speed",
clock_speed_options, &clock_speed_number,
-#ifdef GP2X_BUILD
- 15,
-#else
- 10,
-#endif
+ sizeof(clock_speed_options) / sizeof(clock_speed_options[0]),
"Change the clock speed of the device. Higher clock\n"
"speed will yield better performance, but will drain\n"
"battery life further.", 11),
}
}
-#ifdef PSP_BUILD
- clock_speed_number = (clock_speed / 33) - 1;
-#elif defined(GP2X_BUILD)
- clock_speed_number = (clock_speed - 150) / 10;
-#endif
-
+ menu_update_clock();
video_resolution_large();
#ifndef GP2X_BUILD
first_load = 1;
memset(original_screen, 0x00, 240 * 160 * 2);
print_string_ext("No game loaded yet.", 0xFFFF, 0x0000,
- 60, 75,original_screen, 240, 0);
+ 60, 75,original_screen, 240, 0, 0, FONT_HEIGHT);
}
choose_menu(&main_menu);
if(display_option == current_option)
{
print_string_pad(line_buffer, COLOR_ACTIVE_ITEM, COLOR_BG, 10,
- (display_option->line_number * 10) + 40, 36);
+ (display_option->line_number * 10) + 40, 41);
}
else
{
print_string_pad(line_buffer, COLOR_INACTIVE_ITEM, COLOR_BG, 10,
- (display_option->line_number * 10) + 40, 36);
+ (display_option->line_number * 10) + 40, 41);
}
}
set_gba_resolution(screen_scale);
video_resolution_small();
-
- #ifdef PSP_BUILD
- clock_speed = (clock_speed_number + 1) * 33;
- scePowerSetClockFrequency(clock_speed, clock_speed, clock_speed / 2);
- #elif defined(GP2X_BUILD)
- clock_speed = 150 + clock_speed_number * 10;
- if (clock_speed != clock_speed_old)
- {
- printf("about to set CPU clock to %iMHz\n", clock_speed);
- set_FCLK(clock_speed);
- clock_speed_old = clock_speed;
- }
- #endif
+ menu_get_clock_speed();
+ set_clock_speed();
SDL_PauseAudio(0);
+ num_skipped_frames = 100;
return return_value;
}