From 4e5cc07d70f93a4df48855031ad302295dcb2929 Mon Sep 17 00:00:00 2001 From: Hominem te esse Date: Sun, 4 Mar 2012 14:36:46 +0100 Subject: [PATCH] SilverBull: apply a delay to CDVDMAN functions (initially for Shadow Heart 2) The GUI variable define the timer to apply (the real value applied to CDVDMAN is multiplied by 250, so a value in GUI of 50, apply a 12500 timer to CDVDMAN). Some values tu use depending of the game and the device mode (SMB/HDD/USB) - thanks to BatBastard/RandQalan: SLUS_214.45 HDD=50 (Ar Tonelico 1) SLUS_217.88 HDD=50 (Ar Tonelico 2) SLUS_207.63 HDD=50 (Beyond Good & Evil) <--- (fixes looping audio/fully playable) SLUS_201.91 HDD=50 (Defender) SLUS_213.73 HDD=50 (Drakengard 2) SLUS_212.44 HDD=50 (Fatal Frame 3) SLUS_209.63 HDD=50 (Final Fantasy 12) SLUS_204.14 HDD=50 (Legaia 2 Duel Saga) SLUS_218.90 HDD=50 (Mana Khemia 2) SLUS_214.10 HDD=50 (MK Armageddon) SLUS_208.81 HDD=50 (MK Deception) SLUS_210.87 HDD=50 (MK Shaolin Monks) SLUS_211.15 HDD=50 (Okami) SLUS_206.88 HDD=50 (PsiOps: The Mindgate Conspiracy) SLUS_211.11 HDD=50 (Scarface) SLUS_210.33 HDD=50 (Second Sight) (might still need UDMA 2 for cut-scene lag/freezes that don't break the game) SLUS_203.47 HDD=50 (Shadow Hearts 1) SLUS_210.41 HDD=50 SMB=6 (Shadow Hearts 2 Disk 1) SLUS_210.44 HDD=50 SMB=6 (Shadow Hearts 2 Disk 2) SLUS_213.26 HDD=50 (Shadow Hearts 3 FTNW) SLUS_214.31 HDD=50 (SMT Devil Summoner 1) SLUS_218.45 HDD=50 (SMT Devil Summoner 2) SLUS_209.74 HDD=50 (SMT Digital Devil Saga 1) SLUS_211.52 HDD=50 (SMT Digital Devil Saga 2) SLUS_209.11 HDD=50 (SMT Nocturne) SLUS_217.82 HDD=50 (SMT Persona 4) SCUS_975.45 HDD=50 (SOCOM: Combined Assault) SLUS_212.91 HDD=50 (Suikoden V) <--- might break or obsolete previous fix - further testing needed SLUS_212.45 HDD=50 (Suikoden Tactics) SLUS_212.01 HDD=50 (Tales Of Legendia) <--- slight music sync issues on world map - might need 10000 instead SLUS_213.86 HDD=50 (Tales Of The Abyss) <--- for compatibility's sake - doesn't fix audio issues though SLUS_214.52 HDD=50 (Valkyrie Profile 2: Silmeria) SLUS_972.03 HDD=50 (Wild Arms 3) SLUS_209.37 HDD=50 (Wild Arms ACF) SLUS_204.69 HDD=50 (Xenosaga 1) SLUS_208.92 HDD=50 (Xenosaga 2 Disk 1) SLUS_211.33 HDD=50 (Xenosaga 2 Disk 2) SLUS_213.89 HDD=50 (Xenosaga 3 Disk 1) SLUS_214.17 HDD=50 (Xenosaga 3 Disk 2) SLUS_213.48 HDD=50 (Yakuza) SLUS_217.69 HDD=50 (Yakuza 2) Read more here: http://psx-scene.com/forums/f150/does-shadow-hearts-2-covenant-work-any-opl-hdd-85727/#post813142 http://psx-scene.com/forums/f150/does-shadow-hearts-2-covenant-work-any-opl-hdd-85727/index2.html#post814869 http://psx-scene.com/forums/f150/does-shadow-hearts-2-covenant-work-any-opl-hdd-85727/index3.html#post894166 --- include/config.h | 23 ++++----- include/dialogs.h | 1 + include/lang.h | 4 +- lng/lang_English.lng | 4 +- lng/lang_French.lng | 4 +- lng/lang_Spanish.lng | 93 +++++++++++++++++++++++++------------ modules/iopcore/cdvdman/cdvdman.c | 8 ++-- modules/iopcore/cdvdman/imports.lst | 1 + src/dialogs.c | 1 + src/gui.c | 10 ++++ src/hddsupport.c | 35 ++++++++------ src/lang.c | 4 +- src/supportbase.c | 15 +++++- src/themes.c | 4 +- 14 files changed, 142 insertions(+), 65 deletions(-) diff --git a/include/config.h b/include/config.h index 005bea4..58f7efc 100644 --- a/include/config.h +++ b/include/config.h @@ -9,17 +9,18 @@ #define CONFIG_FILE_NUM 3 -#define CONFIG_ITEM_NAME "#Name" -#define CONFIG_ITEM_LONGNAME "#LongName" -#define CONFIG_ITEM_SIZE "#Size" -#define CONFIG_ITEM_FORMAT "#Format" -#define CONFIG_ITEM_MEDIA "#Media" -#define CONFIG_ITEM_STARTUP "#Startup" -#define CONFIG_ITEM_ALTSTARTUP "$AltStartup" -#define CONFIG_ITEM_VMC "$VMC" -#define CONFIG_ITEM_COMPAT "$Compatibility" -#define CONFIG_ITEM_DMA "$DMA" -#define CONFIG_ITEM_DNAS "$DNAS" +#define CONFIG_ITEM_NAME "#Name" +#define CONFIG_ITEM_LONGNAME "#LongName" +#define CONFIG_ITEM_SIZE "#Size" +#define CONFIG_ITEM_FORMAT "#Format" +#define CONFIG_ITEM_MEDIA "#Media" +#define CONFIG_ITEM_STARTUP "#Startup" +#define CONFIG_ITEM_ALTSTARTUP "$AltStartup" +#define CONFIG_ITEM_VMC "$VMC" +#define CONFIG_ITEM_COMPAT "$Compatibility" +#define CONFIG_ITEM_DMA "$DMA" +#define CONFIG_ITEM_DNAS "$DNAS" +#define CONFIG_ITEM_CDVDMAN_TIMER "$CallbackTimer" struct config_value_t { char key[32]; diff --git a/include/dialogs.h b/include/dialogs.h index 71c2c0a..d8081ec 100644 --- a/include/dialogs.h +++ b/include/dialogs.h @@ -5,6 +5,7 @@ #define COMPAT_MODE_BASE 200 +#define COMPAT_CDVDMAN_TIMER 98 #define COMPAT_DMA 99 #define COMPAT_ALTSTARTUP 100 #define COMPAT_GAME 101 diff --git a/include/lang.h b/include/lang.h index d4f8ded..1e2b074 100644 --- a/include/lang.h +++ b/include/lang.h @@ -139,8 +139,10 @@ #define _STR_MODE7 134 #define _STR_MODE8 135 #define _STR_MODE9 136 +#define _STR_CDVDMAN_TIMER 137 +#define _STR_HINT_CDVDMAN_TIMER 138 -#define LANG_STR_COUNT 137 +#define LANG_STR_COUNT 139 // Maximum external languages supported #define MAX_LANGUAGE_FILES 15 diff --git a/lng/lang_English.lng b/lng/lang_English.lng index 1ef1f50..cd1e1fe 100644 --- a/lng/lang_English.lng +++ b/lng/lang_English.lng @@ -164,4 +164,6 @@ Mode 5 Mode 6 Mode 7 Mode 8 -Mode 9 \ No newline at end of file +Mode 9 +Callback timer +Apply a delay to CDVD functions (0 is default) \ No newline at end of file diff --git a/lng/lang_French.lng b/lng/lang_French.lng index bb27aa5..5ef6d34 100644 --- a/lng/lang_French.lng +++ b/lng/lang_French.lng @@ -135,4 +135,6 @@ Mode 5 Mode 6 Mode 7 Mode 8 -Mode 9 \ No newline at end of file +Mode 9 +Temporisation callback +Applique un délai aux opérations du CDVD (0 par défaut) \ No newline at end of file diff --git a/lng/lang_Spanish.lng b/lng/lang_Spanish.lng index dab4fc7..8c73604 100644 --- a/lng/lang_Spanish.lng +++ b/lng/lang_Spanish.lng @@ -3,16 +3,16 @@ Spanish BIENVENIDO AL OPEN PS2 LOADER. EL CÓDIGO PRINCIPAL ESTA BASADO EN EL DEL HD PROJECT ADAPTADO AL FORMATO DEL USB ADVANCE E INTERFAZ GRÁFICA INICIAL POR IFCARO LA MAYOR PARTE DEL NÚCLEO DEL CARGADOR ES REALIZADA POR JIMMIKAELKAEL. TODAS LAS MEJORAS EN LA INTERFAZ SON REALIZADAS POR VOLCA. GRACIAS POR USAR NUESTRO PROGRAMA ^^ Open PS2 Loader %s Guardar cambios -O Atrás -Configurar red +Atrás +Ajustes de red -Configuración guardada... +Configuración guardada. ¡Error al guardar la configuración! Salir Configuración Juegos por USB -Juegos por HDD -Juegos por RED +Juegos por Disco duro +Juegos por Red Aplicaciones Estilo Idioma @@ -20,9 +20,9 @@ Error al iniciar red: %d Activado Desactivado Aceptar -Preferencias juego -Borrar todas las preferencias -Preferencias para el juego borradas +Ajustes del juego +Borrar todos los ajustes +Ajustes del juego borrados Desplazamiento Lento Medio @@ -30,29 +30,29 @@ Rápido Menú por defecto Cargar del disco Espera por favor -Error al cargar la ID del juego +Error al cargar el código ID del juego Listas ordenadas por alfabeto -Error al cargar archivo de idioma +Error al cargar el archivo de idioma No mostrar los colores para depuración Mando no encontrado, esperando... Carátulas, serigrafías y fondos Pantalla panorámica Apagar PS2 -Cargando configuración -Guardando configuración +Cargando configuración... +Guardando configuración... Iniciar dispositivo -Modo de inicio para dispositivo USB -Modo de inicio para dispositivo HDD -Modo de inicio para dispositivo ETH +Modo de inicio para USB +Modo de inicio para Disco duro +Modo de inicio para Red Modo de inicio para Aplicaciones Automático Manual -Iniciar servidor HDL -Iniciando servidor HDL... -Servidor HDL conectado... Pulsa [O] para desconectar -Pulsa [X] para cerrar servidor HDL... -Cerrando servidor HDL... -Salida hacia +Iniciar servidor HDLDump +Iniciando servidor HDLDump... +Servidor HDLDump conectado... Pulsa [O] para desconectar +Pulsa [X] para cerrar servidor HDLDump... +Cerrando servidor HDLDump... +Salida del IGR Color de fondo Color de texto Dirección IP @@ -62,8 +62,8 @@ Puerto Unidad o carpeta compartida Cuenta de usuario compartida Contraseña - -X Aceptar + +Aceptar El archivo se borrará definitivamente, ¿continuar? Renombrar Borrar @@ -71,18 +71,18 @@ Iniciar Preferencias de pantalla Mostrar las operaciones de Borrar y Renombrar Comprobar fragmentación de juego USB -Recordar último juego jugado +Recordar último juego en uso Error, el juego está fragmentado Error, no se pudo iniciar el archivo Test -Dejar vacío para autentificar como GUEST +Dejar en blanco para autentificar como GUEST Cargar núcleo alternativo Método de lectura de datos alternativo -Remover llamadas del sistema -Saltar lectura archivos PSS +Eliminar llamadas del sistema +Omitir lectura de archivos PSS Sin soporte DVD-DL Sin soporte IGR -Buffer cdvdfsv reducido +No usado Ocultar módulo dev9 Combinación de IGR alternativa Cambiar el tamaño formateará la VMC @@ -99,7 +99,40 @@ Progreso Archivo VMC creado Archivo VMC inválido, el tamaño es incorrecto El archivo VMC debe ser creado -Error con el archivo VMC, ¿continuar con la MC física? +Error con el archivo VMC %s, ¿continuar con la tarjeta física (slot %d)? Refresco automático de las listas Acerca del OPL -Desarrolladores \ No newline at end of file +Desarrolladores +Tiempo de espera para inicio dispositivo USB +Ruta predeterminada dispositivo USB +Dejar en blanco para salida hacia el menú de PS2 +Valor en minutos, 0 para desactivar el paro automático +Paro automático de la rotación del Disco duro +Señal de vídeo +Color de diálogos +Color de selección +Mostrar pantalla de información +Info. +Archivo ELF personalizado +Seleccionar color +Reconexión +Dejar en blanco para mostrar todas las unidades o carpetas compartidas +Ruta predeterminada conexión de red +Retroceso +Espacio +Intro +Modo +Ranura VMC 1 +Ranura VMC 2 +ID del juego +Modo DMA +Sincronización vertical +Modo 1 +Modo 2 +Modo 3 +Modo 4 +Modo 5 +Modo 6 +Modo 7 +Modo 8 +Modo 9 \ No newline at end of file diff --git a/modules/iopcore/cdvdman/cdvdman.c b/modules/iopcore/cdvdman/cdvdman.c index 89b22b8..cb480b9 100644 --- a/modules/iopcore/cdvdman/cdvdman.c +++ b/modules/iopcore/cdvdman/cdvdman.c @@ -47,8 +47,9 @@ static char g_tag[] = "###### GAMESETTINGS ######"; static char g_ISO_parts=0x69; static char g_ISO_media=0x69; static char g_gamesetting_alt_read=0; -static int g_gamesetting_disable_DVDDL=0; -static int g_gamesetting_0_pss=0; +static u16 g_gamesetting_disable_DVDDL=0; +static u16 g_gamesetting_0_pss=0; +static u32 g_gamesetting_timer=100; #define ISO_MAX_PARTS 16 static int g_part_start[ISO_MAX_PARTS] = { @@ -2747,8 +2748,7 @@ int cdvdman_cb_event(int reason) *((u32 *)&ptr[0]) = (u32)user_cb; *((u32 *)&ptr[4]) = reason; - sys_clock.lo = 100; - sys_clock.hi = 0; + USec2SysClock(g_gamesetting_timer, &sys_clock); DPRINTF("cdvdman_cb_event reason: %d - setting cb alarm...\n", reason); diff --git a/modules/iopcore/cdvdman/imports.lst b/modules/iopcore/cdvdman/imports.lst index 484659d..62cb37e 100644 --- a/modules/iopcore/cdvdman/imports.lst +++ b/modules/iopcore/cdvdman/imports.lst @@ -75,6 +75,7 @@ I_DelayThread I_SetAlarm I_iSetAlarm I_CancelAlarm +I_USec2SysClock thbase_IMPORTS_end thevent_IMPORTS_start diff --git a/src/dialogs.c b/src/dialogs.c index d3b41b0..0a89562 100644 --- a/src/dialogs.c +++ b/src/dialogs.c @@ -89,6 +89,7 @@ struct UIItem diaCompatConfig[] = { {UI_BREAK}, + {UI_LABEL, 0, 1, -1, 0, 0, {.label = {NULL, _STR_CDVDMAN_TIMER}}}, {UI_SPACER}, {UI_INT, COMPAT_CDVDMAN_TIMER, 1, _STR_HINT_CDVDMAN_TIMER, 0, 0, {.intvalue = {0, 0, 0, 255}}}, {UI_BREAK}, {UI_LABEL, 0, 1, -1, 0, 0, {.label = {NULL, _STR_DMA_MODE}}}, {UI_SPACER}, {UI_ENUM, COMPAT_DMA, 1, -1, 0, 0, {.intvalue = {0, 0}}}, {UI_SPLITTER}, diff --git a/src/gui.c b/src/gui.c index 2ab8529..c8957f7 100644 --- a/src/gui.c +++ b/src/gui.c @@ -629,6 +629,10 @@ int guiShowCompatConfig(int id, item_list_t *support, config_set_t* configSet) { for (i = 0; i < COMPAT_MODE_COUNT; ++i) diaSetInt(diaCompatConfig, COMPAT_MODE_BASE + i, (compatMode & (1 << i)) > 0 ? 1 : 0); + int timer = 0; + configGetInt(configSet, CONFIG_ITEM_CDVDMAN_TIMER, &timer); + diaSetInt(diaCompatConfig, COMPAT_CDVDMAN_TIMER, timer); + // Find out the current game ID char hexid[32]; configGetStrCopy(configSet, CONFIG_ITEM_DNAS, hexid); @@ -722,6 +726,12 @@ int guiShowCompatConfig(int id, item_list_t *support, config_set_t* configSet) { else configRemoveKey(configSet, CONFIG_ITEM_COMPAT); + diaGetInt(diaCompatConfig, COMPAT_CDVDMAN_TIMER, &timer); + if (timer != 0) + configSetInt(configSet, CONFIG_ITEM_CDVDMAN_TIMER, timer); + else + configRemoveKey(configSet, CONFIG_ITEM_CDVDMAN_TIMER); + diaGetString(diaCompatConfig, COMPAT_GAMEID, hexid); if (hexid[0] != '\0') configSetStr(configSet, CONFIG_ITEM_DNAS, hexid); diff --git a/src/hddsupport.c b/src/hddsupport.c index fc55c9d..84431ae 100644 --- a/src/hddsupport.c +++ b/src/hddsupport.c @@ -346,8 +346,8 @@ static void hddLaunchGame(int id, config_set_t* configSet) { configGetDiscIDBinary(configSet, gid); int dmaType = 0, dmaMode = 0, compatMode = 0; - configGetInt(configSet, CONFIG_ITEM_DMA, &dmaMode); configGetInt(configSet, CONFIG_ITEM_COMPAT, &compatMode); + configGetInt(configSet, CONFIG_ITEM_DMA, &dmaMode); if(dmaMode < 3) dmaType = 0x20; else { @@ -370,39 +370,48 @@ static void hddLaunchGame(int id, config_set_t* configSet) { irx = &hdd_cdvdman_irx; } - for (i=0;istart_sector, 4); + memcpy((void*)((u32)irx + i + 44), &game->start_sector, 4); - for (i=0;iparts, 1); + memcpy((void*)((u32)cdvdman_irx + i + 34), &game->media, 1); + if (compatmask & COMPAT_MODE_2) { u32 alt_read_mode = 1; memcpy((void*)((u32)cdvdman_irx + i + 35), &alt_read_mode, 1); } + if (compatmask & COMPAT_MODE_5) { u32 no_dvddl = 1; - memcpy((void*)((u32)cdvdman_irx + i + 36), &no_dvddl, 4); + memcpy((void*)((u32)cdvdman_irx + i + 36), &no_dvddl, 2); } + if (compatmask & COMPAT_MODE_4) { u32 no_pss = 1; - memcpy((void*)((u32)cdvdman_irx + i + 40), &no_pss, 4); + memcpy((void*)((u32)cdvdman_irx + i + 38), &no_pss, 2); + } + + // patch cdvdman timer + int timer = 0; + if (configGetInt(configSet, CONFIG_ITEM_CDVDMAN_TIMER, &timer)) { + u32 cdvdmanTimer = timer * 250; + memcpy((void*)((u32)cdvdman_irx + i + 40), &cdvdmanTimer, 4); } *patchindex = i; diff --git a/src/themes.c b/src/themes.c index 43c0e46..d0291e9 100644 --- a/src/themes.c +++ b/src/themes.c @@ -1017,8 +1017,10 @@ static void thmLoadFonts(config_set_t* themeConfig, const char* themePath, theme if (customFont) fntReplace(FNT_DEFAULT, customFont, size, 1, 0); - } else + } else { + // TODO reload the language font file fntSetDefault(FNT_DEFAULT); + } } else { snprintf(fullPath, 128, "%s%s", themePath, fntFile); int fntHandle = fntLoadFile(fullPath); -- 2.11.4.GIT