Merge pull request #251 from unknownbrackets/save-fixes

sceUtility / savedata fixes
This commit is contained in:
Unknown W. Brackets 2012-12-25 12:20:30 -08:00
commit d9cd067f5a
13 changed files with 186 additions and 243 deletions

View file

@ -53,14 +53,15 @@ void PSPDialog::DisplayMessage(std::string text)
PPGeDrawText(text.c_str(), 480/2, 100, PPGE_ALIGN_CENTER, 0.5f, 0xFFFFFFFF);
}
void PSPDialog::Shutdown()
int PSPDialog::Shutdown()
{
status = SCE_UTILITY_STATUS_SHUTDOWN;
return 0;
}
void PSPDialog::Update()
int PSPDialog::Update()
{
return 0;
}
bool PSPDialog::IsButtonPressed(int checkButton)

View file

@ -45,8 +45,8 @@ public:
PSPDialog();
virtual ~PSPDialog();
virtual void Update();
virtual void Shutdown();
virtual int Update();
virtual int Shutdown();
enum DialogStatus
{

View file

@ -29,18 +29,18 @@ PSPMsgDialog::PSPMsgDialog()
PSPMsgDialog::~PSPMsgDialog() {
}
void PSPMsgDialog::Init(unsigned int paramAddr)
int PSPMsgDialog::Init(unsigned int paramAddr)
{
// Ignore if already running
if (status != SCE_UTILITY_STATUS_NONE && status != SCE_UTILITY_STATUS_SHUTDOWN)
{
return;
return 0;
}
messageDialogAddr = paramAddr;
if (!Memory::IsValidAddress(messageDialogAddr))
{
return;
return 0;
}
Memory::ReadStruct(messageDialogAddr, &messageDialog);
@ -63,7 +63,7 @@ void PSPMsgDialog::Init(unsigned int paramAddr)
status = SCE_UTILITY_STATUS_INITIALIZE;
lastButtons = __CtrlPeekButtons();
return 0;
}
void PSPMsgDialog::DisplayBack()
@ -95,7 +95,7 @@ void PSPMsgDialog::DisplayEnterBack()
PPGeDrawText("Back", 320, 220, PPGE_ALIGN_LEFT, 0.5f, 0xFFFFFFFF);
}
void PSPMsgDialog::Update()
int PSPMsgDialog::Update()
{
switch (status) {
case SCE_UTILITY_STATUS_FINISHED:
@ -105,7 +105,7 @@ void PSPMsgDialog::Update()
if (status != SCE_UTILITY_STATUS_RUNNING)
{
return;
return 0;
}
const char *text;
@ -191,17 +191,18 @@ void PSPMsgDialog::Update()
break;
default:
status = SCE_UTILITY_STATUS_FINISHED;
return;
return 0;
break;
}
lastButtons = buttons;
Memory::WriteStruct(messageDialogAddr, &messageDialog);
return 0;
}
void PSPMsgDialog::Shutdown()
int PSPMsgDialog::Shutdown()
{
PSPDialog::Shutdown();
return PSPDialog::Shutdown();
}

View file

@ -41,9 +41,9 @@ public:
PSPMsgDialog();
virtual ~PSPMsgDialog();
virtual void Init(unsigned int paramAddr);
virtual void Update();
void Shutdown();
virtual int Init(unsigned int paramAddr);
virtual int Update();
int Shutdown();
private :
void DisplayBack();

View file

@ -143,7 +143,7 @@ void PSPOskDialog::RenderKeyboard()
}
void PSPOskDialog::Update()
int PSPOskDialog::Update()
{
buttons = __CtrlReadLatch();
int selectedRow = selectedChar / KEYSPERROW;
@ -230,4 +230,6 @@ void PSPOskDialog::Update()
oskData.result = PSP_UTILITY_OSK_RESULT_CHANGED;
Memory::WriteStruct(oskParams.SceUtilityOskDataPtr, &oskData);
Memory::WriteStruct(oskParamsAddr, &oskParams);
return 0;
}

View file

@ -145,7 +145,7 @@ public:
virtual ~PSPOskDialog();
virtual int Init(u32 oskPtr);
virtual void Update();
virtual int Update();
private:
void HackyGetStringWide(std::string& _string, const u32 em_address);
void RenderKeyboard();

View file

@ -25,12 +25,13 @@ PSPPlaceholderDialog::~PSPPlaceholderDialog() {
}
void PSPPlaceholderDialog::Init()
int PSPPlaceholderDialog::Init()
{
status = SCE_UTILITY_STATUS_INITIALIZE;
return 0;
}
void PSPPlaceholderDialog::Update()
int PSPPlaceholderDialog::Update()
{
//__UtilityUpdate();
if (status == SCE_UTILITY_STATUS_INITIALIZE)
@ -45,4 +46,5 @@ void PSPPlaceholderDialog::Update()
{
status = SCE_UTILITY_STATUS_SHUTDOWN;
}
return 0;
}

View file

@ -24,7 +24,7 @@ public:
PSPPlaceholderDialog();
virtual ~PSPPlaceholderDialog();
virtual void Init();
virtual void Update();
virtual int Init();
virtual int Update();
};

View file

@ -31,7 +31,7 @@ PSPSaveDialog::PSPSaveDialog()
PSPSaveDialog::~PSPSaveDialog() {
}
u32 PSPSaveDialog::Init(int paramAddr)
int PSPSaveDialog::Init(int paramAddr)
{
// Ignore if already running
if (status != SCE_UTILITY_STATUS_NONE && status != SCE_UTILITY_STATUS_SHUTDOWN)
@ -238,7 +238,9 @@ void PSPSaveDialog::DisplaySaveDataInfo1()
}
else
{
char txt[1024];
char txt[2048];
_dbg_assert_msg_(HLE, sizeof(txt) > sizeof(SaveFileInfo), "Local buffer is too small.");
sprintf(txt,"%s\n%02d/%02d/%d %02d:%02d %lld KB\n%s\n%s"
, param.GetFileInfo(currentSelectedSave).title
, param.GetFileInfo(currentSelectedSave).modif_time.tm_mday
@ -315,7 +317,7 @@ void PSPSaveDialog::DisplayBack()
PPGeDrawText("Back", 270, 220, PPGE_ALIGN_LEFT, 0.5f, 0xFFFFFFFF);
}
void PSPSaveDialog::Update()
int PSPSaveDialog::Update()
{
switch (status) {
case SCE_UTILITY_STATUS_FINISHED:
@ -327,12 +329,12 @@ void PSPSaveDialog::Update()
if (status != SCE_UTILITY_STATUS_RUNNING)
{
return;
return 0;
}
if (!param.GetPspParam()) {
status = SCE_UTILITY_STATUS_SHUTDOWN;
return;
return 0;
}
buttons = __CtrlPeekButtons();
@ -684,11 +686,14 @@ void PSPSaveDialog::Update()
Memory::Memcpy(requestAddr,&request,request.size);
}
return 0;
}
void PSPSaveDialog::Shutdown()
int PSPSaveDialog::Shutdown()
{
PSPDialog::Shutdown();
param.SetPspParam(0);
return 0;
}

View file

@ -62,9 +62,9 @@ public:
PSPSaveDialog();
virtual ~PSPSaveDialog();
virtual u32 Init(int paramAddr);
virtual void Update();
void Shutdown();
virtual int Init(int paramAddr);
virtual int Update();
int Shutdown();
private :

View file

@ -16,7 +16,6 @@
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
#include "SavedataParam.h"
#include "../System.h"
#include "image/png_load.h"
#include "../HLE/sceKernelMemory.h"
#include "../ELF/ParamSFO.h"
@ -35,9 +34,40 @@ namespace
{
int getSizeNormalized(int size)
{
int sizeCluster = MemoryStick_SectorSize();
int sizeCluster = (int)MemoryStick_SectorSize();
return ((int)((size + sizeCluster - 1) / sizeCluster)) * sizeCluster;
}
void SetStringFromSFO(ParamSFOData &sfoFile, const char *name, char *str, int strLength)
{
std::string value = sfoFile.GetValueString(name);
strncpy(str, value.c_str(), strLength - 1);
str[strLength - 1] = 0;
}
bool ReadPSPFile(std::string filename, u8 *data, s64 dataSize)
{
u32 handle = pspFileSystem.OpenFile(filename, FILEACCESS_READ);
if (handle == 0)
return false;
int result = pspFileSystem.ReadFile(handle, data, dataSize);
pspFileSystem.CloseFile(handle);
return result != 0;
}
bool WritePSPFile(std::string filename, u8 *data, int dataSize)
{
u32 handle = pspFileSystem.OpenFile(filename, (FileAccess)(FILEACCESS_WRITE | FILEACCESS_CREATE));
if (handle == 0)
return false;
int result = pspFileSystem.WriteFile(handle, data, dataSize);
pspFileSystem.CloseFile(handle);
return result != 0;
}
}
SavedataParam::SavedataParam()
@ -139,22 +169,13 @@ bool SavedataParam::Save(SceUtilitySavedataParam* param, int saveId)
std::string filePath = dirPath+"/"+GetFileName(param);
INFO_LOG(HLE,"Saving file with size %u in %s",param->dataBufSize,filePath.c_str());
unsigned int handle = pspFileSystem.OpenFile(filePath,(FileAccess)(FILEACCESS_WRITE | FILEACCESS_CREATE));
if (handle == 0)
if (!WritePSPFile(filePath, data_, param->dataBufSize))
{
ERROR_LOG(HLE,"Error opening file %s",filePath.c_str());
return false;
}
if (!pspFileSystem.WriteFile(handle, data_, param->dataBufSize))
{
pspFileSystem.CloseFile(handle);
ERROR_LOG(HLE,"Error writing file %s",filePath.c_str());
return false;
}
else
{
pspFileSystem.CloseFile(handle);
// SAVE PARAM.SFO
ParamSFOData sfoFile;
sfoFile.SetValue("TITLE",param->sfoParam.title,128);
@ -169,12 +190,7 @@ bool SavedataParam::Save(SceUtilitySavedataParam* param, int saveId)
size_t sfoSize;
sfoFile.WriteSFO(&sfoData,&sfoSize);
std::string sfopath = dirPath+"/"+sfoName;
handle = pspFileSystem.OpenFile(sfopath,(FileAccess)(FILEACCESS_WRITE | FILEACCESS_CREATE));
if (handle)
{
pspFileSystem.WriteFile(handle, sfoData, sfoSize);
pspFileSystem.CloseFile(handle);
}
WritePSPFile(sfopath, sfoData, sfoSize);
delete[] sfoData;
// SAVE ICON0
@ -182,36 +198,21 @@ bool SavedataParam::Save(SceUtilitySavedataParam* param, int saveId)
{
data_ = (u8*)Memory::GetPointer(*((unsigned int*)&param->icon0FileData.buf));
std::string icon0path = dirPath+"/"+icon0Name;
handle = pspFileSystem.OpenFile(icon0path,(FileAccess)(FILEACCESS_WRITE | FILEACCESS_CREATE));
if (handle)
{
pspFileSystem.WriteFile(handle, data_, param->icon0FileData.bufSize);
pspFileSystem.CloseFile(handle);
}
WritePSPFile(icon0path, data_, param->icon0FileData.bufSize);
}
// SAVE ICON1
if (param->icon1FileData.buf)
{
data_ = (u8*)Memory::GetPointer(*((unsigned int*)&param->icon1FileData.buf));
std::string icon1path = dirPath+"/"+icon1Name;
handle = pspFileSystem.OpenFile(icon1path,(FileAccess)(FILEACCESS_WRITE | FILEACCESS_CREATE));
if (handle)
{
pspFileSystem.WriteFile(handle, data_, param->icon1FileData.bufSize);
pspFileSystem.CloseFile(handle);
}
WritePSPFile(icon1path, data_, param->icon1FileData.bufSize);
}
// SAVE PIC1
if (param->pic1FileData.buf)
{
data_ = (u8*)Memory::GetPointer(*((unsigned int*)&param->pic1FileData.buf));
std::string pic1path = dirPath+"/"+pic1Name;
handle = pspFileSystem.OpenFile(pic1path,(FileAccess)(FILEACCESS_WRITE | FILEACCESS_CREATE));
if (handle)
{
pspFileSystem.WriteFile(handle, data_, param->pic1FileData.bufSize);
pspFileSystem.CloseFile(handle);
}
WritePSPFile(pic1path, data_, param->pic1FileData.bufSize);
}
// Save SND
@ -219,12 +220,7 @@ bool SavedataParam::Save(SceUtilitySavedataParam* param, int saveId)
{
data_ = (u8*)Memory::GetPointer(*((unsigned int*)&param->snd0FileData.buf));
std::string snd0path = dirPath+"/"+snd0Name;
handle = pspFileSystem.OpenFile(snd0path,(FileAccess)(FILEACCESS_WRITE | FILEACCESS_CREATE));
if (handle)
{
pspFileSystem.WriteFile(handle, data_, param->snd0FileData.bufSize);
pspFileSystem.CloseFile(handle);
}
WritePSPFile(snd0path, data_, param->snd0FileData.bufSize);
}
}
return true;
@ -249,19 +245,11 @@ bool SavedataParam::Load(SceUtilitySavedataParam *param, int saveId)
std::string filePath = dirPath+"/"+GetFileName(param);
INFO_LOG(HLE,"Loading file with size %u in %s",param->dataBufSize,filePath.c_str());
u32 handle = pspFileSystem.OpenFile(filePath,FILEACCESS_READ);
if (!handle)
if (!ReadPSPFile(filePath, data_, param->dataBufSize))
{
ERROR_LOG(HLE,"Error opening file %s",filePath.c_str());
return false;
}
if (!pspFileSystem.ReadFile(handle, data_, param->dataBufSize))
{
pspFileSystem.CloseFile(handle);
ERROR_LOG(HLE,"Error reading file %s",filePath.c_str());
return false;
}
pspFileSystem.CloseFile(handle);
return true;
}
@ -310,7 +298,7 @@ bool SavedataParam::GetSizes(SceUtilitySavedataParam *param)
Memory::Write_U32((u32)MemoryStick_SectorSize(),param->msFree); // cluster Size
Memory::Write_U32((u32)(MemoryStick_FreeSpace() / MemoryStick_SectorSize()),param->msFree+4); // Free cluster
Memory::Write_U32((u32)(MemoryStick_FreeSpace() / 0x400),param->msFree+8); // Free space (in KB)
std::string spaceTxt = SavedataParam::GetSpaceText(MemoryStick_FreeSpace());
std::string spaceTxt = SavedataParam::GetSpaceText((int)MemoryStick_FreeSpace());
Memory::Memset(param->msFree+12,0,spaceTxt.size()+1);
Memory::Memcpy(param->msFree+12,spaceTxt.c_str(),spaceTxt.size()); // Text representing free space
}
@ -347,7 +335,7 @@ bool SavedataParam::GetSizes(SceUtilitySavedataParam *param)
total_size += getSizeNormalized(param->pic1FileData.size);
total_size += getSizeNormalized(param->snd0FileData.size);
Memory::Write_U32(total_size / MemoryStick_SectorSize(),param->utilityData); // num cluster
Memory::Write_U32(total_size / (u32)MemoryStick_SectorSize(),param->utilityData); // num cluster
Memory::Write_U32(total_size / 0x400,param->utilityData+4); // save size in KB
std::string spaceTxt = SavedataParam::GetSpaceText(total_size);
Memory::Memset(param->utilityData+8,0,spaceTxt.size()+1);
@ -390,7 +378,7 @@ void SavedataParam::Clear()
}
}
u32 SavedataParam::SetPspParam(SceUtilitySavedataParam *param)
int SavedataParam::SetPspParam(SceUtilitySavedataParam *param)
{
pspParam = param;
if (!pspParam)
@ -430,64 +418,7 @@ u32 SavedataParam::SetPspParam(SceUtilitySavedataParam *param)
PSPFileInfo info = pspFileSystem.GetFileInfo(fileDataPath);
if (info.exists)
{
saveDataList[realCount].size = info.size;
saveDataList[realCount].saveName = saveNameListData[i];
saveDataList[realCount].idx = i;
saveDataList[realCount].modif_time = info.mtime;
// Search save image icon0
// TODO : If icon0 don't exist, need to use icon1 which is a moving icon. Also play sound
std::string fileDataPath2 = savePath+GetGameName(param)+saveNameListData[i]+"/"+icon0Name;
PSPFileInfo info2 = pspFileSystem.GetFileInfo(fileDataPath2);
if (info2.exists)
{
u8 *textureDataPNG = new u8[(size_t)info2.size];
int handle = pspFileSystem.OpenFile(fileDataPath2,FILEACCESS_READ);
pspFileSystem.ReadFile(handle,textureDataPNG,info2.size);
pspFileSystem.CloseFile(handle);
unsigned char* textureData;
int w,h;
pngLoadPtr(textureDataPNG, (int)info2.size, &w, &h, &textureData, false);
delete[] textureDataPNG;
u32 texSize = w*h*4;
u32 atlasPtr = kernelMemory.Alloc(texSize, true, "SaveData Icon");
saveDataList[realCount].textureData = atlasPtr;
Memory::Memcpy(atlasPtr, textureData, texSize);
free(textureData);
saveDataList[realCount].textureWidth = w;
saveDataList[realCount].textureHeight = h;
}
else
{
saveDataList[realCount].textureData = 0;
}
// Load info in PARAM.SFO
fileDataPath2 = savePath+GetGameName(param)+saveNameListData[i]+"/"+sfoName;
info2 = pspFileSystem.GetFileInfo(fileDataPath2);
if (info2.exists)
{
u8 *sfoParam = new u8[(size_t)info2.size];
int handle = pspFileSystem.OpenFile(fileDataPath2,FILEACCESS_READ);
pspFileSystem.ReadFile(handle,sfoParam,info2.size);
pspFileSystem.CloseFile(handle);
ParamSFOData sfoFile;
if (sfoFile.ReadSFO(sfoParam, (size_t)info2.size))
{
std::string title = sfoFile.GetValueString("TITLE");
memcpy(saveDataList[realCount].title,title.c_str(),title.size());
saveDataList[realCount].title[title.size()] = 0;
std::string savetitle = sfoFile.GetValueString("SAVEDATA_TITLE");
memcpy(saveDataList[realCount].saveTitle,savetitle.c_str(),savetitle.size());
saveDataList[realCount].saveTitle[savetitle.size()] = 0;
std::string savedetail = sfoFile.GetValueString("SAVEDATA_DETAIL");
memcpy(saveDataList[realCount].saveDetail,savedetail.c_str(),savedetail.size());
saveDataList[realCount].saveDetail[savedetail.size()] = 0;
}
delete [] sfoParam;
}
SetFileInfo(realCount, info, saveNameListData[i]);
DEBUG_LOG(HLE,"%s Exist",fileDataPath.c_str());
realCount++;
@ -521,64 +452,7 @@ u32 SavedataParam::SetPspParam(SceUtilitySavedataParam *param)
PSPFileInfo info = pspFileSystem.GetFileInfo(fileDataPath);
if (info.exists)
{
saveDataList[0].size = info.size;
saveDataList[0].saveName = GetSaveName(param);
saveDataList[0].idx = 0;
saveDataList[0].modif_time = info.mtime;
// Search save image icon0
// TODO : If icon0 don't exist, need to use icon1 which is a moving icon. Also play sound
std::string fileDataPath2 = savePath+GetGameName(param)+GetSaveName(param)+"/"+icon0Name;
PSPFileInfo info2 = pspFileSystem.GetFileInfo(fileDataPath2);
if (info2.exists)
{
u8 *textureDataPNG = new u8[(size_t)info2.size];
int handle = pspFileSystem.OpenFile(fileDataPath2,FILEACCESS_READ);
pspFileSystem.ReadFile(handle,textureDataPNG,info2.size);
pspFileSystem.CloseFile(handle);
unsigned char *textureData;
int w,h;
pngLoadPtr(textureDataPNG, (int)info2.size, &w, &h, &textureData, false);
delete[] textureDataPNG;
u32 texSize = w*h*4;
u32 atlasPtr = kernelMemory.Alloc(texSize, true, "SaveData Icon");
saveDataList[0].textureData = atlasPtr;
Memory::Memcpy(atlasPtr, textureData, texSize);
free(textureData);
saveDataList[0].textureWidth = w;
saveDataList[0].textureHeight = h;
}
else
{
saveDataList[0].textureData = 0;
}
// Load info in PARAM.SFO
fileDataPath2 = savePath+GetGameName(param)+GetSaveName(param)+"/"+sfoName;
info2 = pspFileSystem.GetFileInfo(fileDataPath2);
if (info2.exists)
{
u8 *sfoParam = new u8[(size_t)info2.size];
int handle = pspFileSystem.OpenFile(fileDataPath2,FILEACCESS_READ);
pspFileSystem.ReadFile(handle,sfoParam,info2.size);
pspFileSystem.CloseFile(handle);
ParamSFOData sfoFile;
if (sfoFile.ReadSFO(sfoParam,(size_t)info2.size))
{
std::string title = sfoFile.GetValueString("TITLE");
memcpy(saveDataList[0].title,title.c_str(),title.size());
saveDataList[0].title[title.size()] = 0;
std::string savetitle = sfoFile.GetValueString("SAVEDATA_TITLE");
memcpy(saveDataList[0].saveTitle,savetitle.c_str(),savetitle.size());
saveDataList[0].saveTitle[savetitle.size()] = 0;
std::string savedetail = sfoFile.GetValueString("SAVEDATA_DETAIL");
memcpy(saveDataList[0].saveDetail,savedetail.c_str(),savedetail.size());
saveDataList[0].saveDetail[savedetail.size()] = 0;
}
delete [] sfoParam;
}
SetFileInfo(0, info, GetSaveName(pspParam));
DEBUG_LOG(HLE,"%s Exist",fileDataPath.c_str());
saveNameListDataCount = 1;
@ -600,6 +474,67 @@ u32 SavedataParam::SetPspParam(SceUtilitySavedataParam *param)
return 0;
}
void SavedataParam::SetFileInfo(int idx, PSPFileInfo &info, std::string saveName)
{
saveDataList[idx].size = info.size;
saveDataList[idx].saveName = saveName;
saveDataList[idx].idx = 0;
saveDataList[idx].modif_time = info.mtime;
// Start with a blank slate.
saveDataList[idx].textureData = 0;
saveDataList[idx].title[0] = 0;
saveDataList[idx].saveTitle[0] = 0;
saveDataList[idx].saveDetail[0] = 0;
// Search save image icon0
// TODO : If icon0 don't exist, need to use icon1 which is a moving icon. Also play sound
std::string fileDataPath2 = savePath + GetGameName(pspParam) + saveName + "/" + icon0Name;
PSPFileInfo info2 = pspFileSystem.GetFileInfo(fileDataPath2);
if (info2.exists)
{
u8 *textureDataPNG = new u8[(size_t)info2.size];
ReadPSPFile(fileDataPath2, textureDataPNG, info2.size);
unsigned char *textureData;
int w,h;
int success = pngLoadPtr(textureDataPNG, (int)info2.size, &w, &h, &textureData, false);
delete[] textureDataPNG;
u32 texSize = w*h*4;
u32 atlasPtr;
if (success)
atlasPtr = kernelMemory.Alloc(texSize, true, "SaveData Icon");
if (success && atlasPtr > 0)
{
saveDataList[idx].textureData = atlasPtr;
Memory::Memcpy(atlasPtr, textureData, texSize);
free(textureData);
saveDataList[idx].textureWidth = w;
saveDataList[idx].textureHeight = h;
}
else
WARN_LOG(HLE, "Unable to load PNG data for savedata.");
}
// Load info in PARAM.SFO
fileDataPath2 = savePath + GetGameName(pspParam) + saveName + "/" + sfoName;
info2 = pspFileSystem.GetFileInfo(fileDataPath2);
if (info2.exists)
{
u8 *sfoParam = new u8[(size_t)info2.size];
ReadPSPFile(fileDataPath2, sfoParam, info2.size);
ParamSFOData sfoFile;
if (sfoFile.ReadSFO(sfoParam,(size_t)info2.size))
{
SetStringFromSFO(sfoFile, "TITLE", saveDataList[idx].title, sizeof(saveDataList[idx].title));
SetStringFromSFO(sfoFile, "SAVEDATA_TITLE", saveDataList[idx].saveTitle, sizeof(saveDataList[idx].saveTitle));
SetStringFromSFO(sfoFile, "SAVEDATA_DETAIL", saveDataList[idx].saveDetail, sizeof(saveDataList[idx].saveDetail));
}
delete [] sfoParam;
}
}
SceUtilitySavedataParam* SavedataParam::GetPspParam()
{
return pspParam;

View file

@ -18,7 +18,7 @@
#pragma once
#include "../HLE/sceKernel.h"
#include "../System.h"
enum SceUtilitySavedataType
{
@ -156,7 +156,7 @@ public:
SavedataParam();
u32 SetPspParam(SceUtilitySavedataParam* param);
int SetPspParam(SceUtilitySavedataParam* param);
SceUtilitySavedataParam* GetPspParam();
int GetFilenameCount();
@ -168,6 +168,7 @@ public:
private:
void Clear();
void SetFileInfo(int idx, PSPFileInfo &info, std::string saveName);
SceUtilitySavedataParam* pspParam;
int selectedSave;

View file

@ -50,14 +50,13 @@ void __UtilityShutdown()
int sceUtilitySavedataInitStart(u32 paramAddr)
{
DEBUG_LOG(HLE,"sceUtilitySavedataInitStart(%08x)", paramAddr);
return (u32)saveDialog.Init(paramAddr);
return saveDialog.Init(paramAddr);
}
int sceUtilitySavedataShutdownStart()
{
DEBUG_LOG(HLE,"sceUtilitySavedataShutdownStart()");
saveDialog.Shutdown();
return 0;
return saveDialog.Shutdown();
}
int sceUtilitySavedataGetStatus()
@ -65,13 +64,10 @@ int sceUtilitySavedataGetStatus()
return saveDialog.GetStatus();
}
void sceUtilitySavedataUpdate(u32 unknown)
int sceUtilitySavedataUpdate(int animSpeed)
{
DEBUG_LOG(HLE,"sceUtilitySavedataUpdate()");
saveDialog.Update();
return;
DEBUG_LOG(HLE,"sceUtilitySavedataUpdate(%d)", animSpeed);
return saveDialog.Update();
}
#define PSP_AV_MODULE_AVCODEC 0
@ -99,26 +95,27 @@ void sceUtilityLoadModule(u32 module)
__KernelReSchedule("utilityloadmodule");
}
void sceUtilityMsgDialogInitStart(u32 structAddr)
int sceUtilityMsgDialogInitStart(u32 structAddr)
{
DEBUG_LOG(HLE,"sceUtilityMsgDialogInitStart(%i)", structAddr);
msgDialog.Init(structAddr);
return msgDialog.Init(structAddr);
}
void sceUtilityMsgDialogShutdownStart(u32 unknown)
int sceUtilityMsgDialogShutdownStart(u32 unknown)
{
DEBUG_LOG(HLE,"FAKE sceUtilityMsgDialogShutdownStart(%i)", unknown);
msgDialog.Shutdown();
return msgDialog.Shutdown();
}
void sceUtilityMsgDialogUpdate(int animSpeed)
int sceUtilityMsgDialogUpdate(int animSpeed)
{
DEBUG_LOG(HLE,"sceUtilityMsgDialogUpdate(%i)", animSpeed);
msgDialog.Update();
return msgDialog.Update();
}
u32 sceUtilityMsgDialogGetStatus()
int sceUtilityMsgDialogGetStatus()
{
DEBUG_LOG(HLE,"sceUtilityMsgDialogGetStatus()");
return msgDialog.GetStatus();
}
@ -134,14 +131,13 @@ int sceUtilityOskInitStart(u32 oskPtr)
int sceUtilityOskShutdownStart()
{
ERROR_LOG(HLE,"FAKE sceUtilityOskShutdownStart(%i)", PARAM(0));
oskDialog.Shutdown();
return 0;
return oskDialog.Shutdown();
}
void sceUtilityOskUpdate(unsigned int unknown)
int sceUtilityOskUpdate(unsigned int unknown)
{
ERROR_LOG(HLE,"FAKE sceUtilityOskUpdate(%i)", unknown);
oskDialog.Update();
return oskDialog.Update();
}
int sceUtilityOskGetStatus()
@ -156,25 +152,25 @@ int sceUtilityOskGetStatus()
}
void sceUtilityNetconfInitStart(unsigned int unknown)
int sceUtilityNetconfInitStart(u32 structAddr)
{
DEBUG_LOG(HLE,"FAKE sceUtilityNetconfInitStart(%i)", unknown);
netDialog.Init();
DEBUG_LOG(HLE,"FAKE sceUtilityNetconfInitStart(%08x)", structAddr);
return netDialog.Init();
}
void sceUtilityNetconfShutdownStart(unsigned int unknown)
int sceUtilityNetconfShutdownStart(unsigned int unknown)
{
DEBUG_LOG(HLE,"FAKE sceUtilityNetconfShutdownStart(%i)", unknown);
netDialog.Shutdown();
return netDialog.Shutdown();
}
void sceUtilityNetconfUpdate(int unknown)
int sceUtilityNetconfUpdate(int animSpeed)
{
DEBUG_LOG(HLE,"FAKE sceUtilityNetconfUpdate(%i)", unknown);
netDialog.Update();
DEBUG_LOG(HLE,"FAKE sceUtilityNetconfUpdate(%i)", animSpeed);
return netDialog.Update();
}
unsigned int sceUtilityNetconfGetStatus()
int sceUtilityNetconfGetStatus()
{
DEBUG_LOG(HLE,"sceUtilityNetconfGetStatus()");
return netDialog.GetStatus();
@ -356,28 +352,28 @@ const HLEFunction sceUtility[] =
{0x64d50c56, &WrapU_U<sceUtilityUnloadNetModule>, "sceUtilityUnloadNetModule"},
{0xf88155f6, &WrapV_U<sceUtilityNetconfShutdownStart>, "sceUtilityNetconfShutdownStart"},
{0x4db1e739, &WrapV_U<sceUtilityNetconfInitStart>, "sceUtilityNetconfInitStart"},
{0x91e70e35, &WrapV_I<sceUtilityNetconfUpdate>, "sceUtilityNetconfUpdate"},
{0x6332aa39, &WrapU_V<sceUtilityNetconfGetStatus>, "sceUtilityNetconfGetStatus"},
{0xf88155f6, &WrapI_U<sceUtilityNetconfShutdownStart>, "sceUtilityNetconfShutdownStart"},
{0x4db1e739, &WrapI_U<sceUtilityNetconfInitStart>, "sceUtilityNetconfInitStart"},
{0x91e70e35, &WrapI_I<sceUtilityNetconfUpdate>, "sceUtilityNetconfUpdate"},
{0x6332aa39, &WrapI_V<sceUtilityNetconfGetStatus>, "sceUtilityNetconfGetStatus"},
{0x5eee6548, 0, "sceUtilityCheckNetParam"},
{0x434d4b3a, 0, "sceUtilityGetNetParam"},
{0x4FED24D8, 0, "sceUtilityGetNetParamLatestID"},
{0x67af3428, &WrapV_U<sceUtilityMsgDialogShutdownStart>, "sceUtilityMsgDialogShutdownStart"},
{0x2ad8e239, &WrapV_U<sceUtilityMsgDialogInitStart>, "sceUtilityMsgDialogInitStart"},
{0x95fc253b, &WrapV_I<sceUtilityMsgDialogUpdate>, "sceUtilityMsgDialogUpdate"},
{0x9a1c91d7, &WrapU_V<sceUtilityMsgDialogGetStatus>, "sceUtilityMsgDialogGetStatus"},
{0x67af3428, &WrapI_U<sceUtilityMsgDialogShutdownStart>, "sceUtilityMsgDialogShutdownStart"},
{0x2ad8e239, &WrapI_U<sceUtilityMsgDialogInitStart>, "sceUtilityMsgDialogInitStart"},
{0x95fc253b, &WrapI_I<sceUtilityMsgDialogUpdate>, "sceUtilityMsgDialogUpdate"},
{0x9a1c91d7, &WrapI_V<sceUtilityMsgDialogGetStatus>, "sceUtilityMsgDialogGetStatus"},
{0x4928bd96, 0, "sceUtilityMsgDialogAbort"},
{0x9790b33c, &WrapI_V<sceUtilitySavedataShutdownStart>, "sceUtilitySavedataShutdownStart"},
{0x50c4cd57, &WrapI_U<sceUtilitySavedataInitStart>, "sceUtilitySavedataInitStart"},
{0xd4b95ffb, &WrapV_U<sceUtilitySavedataUpdate>, "sceUtilitySavedataUpdate"},
{0xd4b95ffb, &WrapI_I<sceUtilitySavedataUpdate>, "sceUtilitySavedataUpdate"},
{0x8874dbe0, &WrapI_V<sceUtilitySavedataGetStatus>, "sceUtilitySavedataGetStatus"},
{0x3dfaeba9, &WrapI_V<sceUtilityOskShutdownStart>, "sceUtilityOskShutdownStart"},
{0xf6269b82, &WrapI_U<sceUtilityOskInitStart>, "sceUtilityOskInitStart"},
{0x4b85c861, &WrapV_U<sceUtilityOskUpdate>, "sceUtilityOskUpdate"},
{0x4b85c861, &WrapI_U<sceUtilityOskUpdate>, "sceUtilityOskUpdate"},
{0xf3f76017, &WrapI_V<sceUtilityOskGetStatus>, "sceUtilityOskGetStatus"},
{0x41e30674, &WrapU_UU<sceUtilitySetSystemParamString>, "sceUtilitySetSystemParamString"},