From ad80a78904dfd1e10dfa52ac49723810ab74bf1c Mon Sep 17 00:00:00 2001 From: "kev :)" Date: Sat, 10 Nov 2012 23:04:10 +0000 Subject: [PATCH 1/7] Add some impose commands --- Core/FileSystems/ISOFileSystem.cpp | 2 +- Core/HLE/sceImpose.cpp | 28 ++++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Core/FileSystems/ISOFileSystem.cpp b/Core/FileSystems/ISOFileSystem.cpp index 2082472475..b1c1c4f2b7 100644 --- a/Core/FileSystems/ISOFileSystem.cpp +++ b/Core/FileSystems/ISOFileSystem.cpp @@ -512,7 +512,7 @@ std::vector ISOFileSystem::GetDirListing(std::string path) { TreeEntry *e = entry->children[i]; - if(!strcmp(e->name, ".") || !strcmp(e->name, "..")) // do not include the relative entries in the list + if(e->name == "." || e->name == "..") // do not include the relative entries in the list continue; PSPFileInfo x; diff --git a/Core/HLE/sceImpose.cpp b/Core/HLE/sceImpose.cpp index d6b0a17182..7e8875206f 100644 --- a/Core/HLE/sceImpose.cpp +++ b/Core/HLE/sceImpose.cpp @@ -19,6 +19,9 @@ #include "FunctionWrappers.h" #include "../MIPS/MIPS.h" +u32 iLanguage = 0; +u32 iButtonValue = 0; + u32 sceImposeGetBatteryIconStatus(u32 chargingPtr, u32 iconStatusPtr) { DEBUG_LOG(HLE,"%i=sceImposeGetBatteryIconStatus(%08x, %08x)", chargingPtr, iconStatusPtr); @@ -29,13 +32,34 @@ u32 sceImposeGetBatteryIconStatus(u32 chargingPtr, u32 iconStatusPtr) return 0; } +u32 sceImposeSetLanguageMode(u32 languageVal, u32 buttonVal) +{ + DEBUG_LOG(HLE,"%i=sceImposeSetLanguageMode(%08x, %08x)", languageVal, buttonVal); + iLanguage = languageVal; + iButtonValue = buttonVal; + return 0; +} + + + + + +u32 sceImposeGetLanguageMode(u32 languagePtr, u32 btnPtr) +{ + DEBUG_LOG(HLE,"%i=sceImposeGetLanguageMode(%08x, %08x)", languagePtr, btnPtr); + if (Memory::IsValidAddress(languagePtr)) + Memory::Write_U32(iLanguage, languagePtr); + if (Memory::IsValidAddress(btnPtr)) + Memory::Write_U32(iButtonValue, btnPtr); + return 0; +} //OSD stuff? home button? const HLEFunction sceImpose[] = { - {0x36aa6e91, 0, "sceImposeSetLanguageMode"}, // Seen + {0x36aa6e91, &WrapU_UU, "sceImposeSetLanguageMode"}, // Seen {0x381bd9e7, 0, "sceImposeHomeButton"}, - {0x24fd7bcf, 0, "sceImposeGetLanguageMode"}, + {0x24fd7bcf, &WrapU_UU, "sceImposeGetLanguageMode"}, {0x8c943191, &WrapU_UU, "sceImposeGetBatteryIconStatus"}, }; From d67e473e814bb149cf9c6fbbb93062c415aeed2a Mon Sep 17 00:00:00 2001 From: "kev :)" Date: Sat, 10 Nov 2012 23:08:46 +0000 Subject: [PATCH 2/7] Small clean up on sceGeDrawSync Doesnt fix anything, obviously :) --- Core/HLE/sceGe.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Core/HLE/sceGe.cpp b/Core/HLE/sceGe.cpp index 1cd3180218..9e4e475a73 100644 --- a/Core/HLE/sceGe.cpp +++ b/Core/HLE/sceGe.cpp @@ -107,10 +107,9 @@ void sceGeListSync(u32 displayListID, u32 mode) //0 : wait for completion 1:che DEBUG_LOG(HLE,"sceGeListSync(dlid=%08x, mode=%08x)", displayListID,mode); } -u32 sceGeDrawSync(u32) +u32 sceGeDrawSync(u32 mode) { //wait/check entire drawing state - u32 mode = PARAM(0); //0 : wait for completion 1:check and return DEBUG_LOG(HLE,"FAKE sceGeDrawSync(mode=%d) (0=wait for completion)",mode); gpu->DrawSync(mode); return 0; From ba63a4ea2a0001e37b7d7a7b426ad44e4db3c0b7 Mon Sep 17 00:00:00 2001 From: "kev :)" Date: Sat, 10 Nov 2012 23:14:07 +0000 Subject: [PATCH 3/7] FIx breakage --- Core/FileSystems/ISOFileSystem.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Core/FileSystems/ISOFileSystem.cpp b/Core/FileSystems/ISOFileSystem.cpp index b5719c20b6..59b756161c 100644 --- a/Core/FileSystems/ISOFileSystem.cpp +++ b/Core/FileSystems/ISOFileSystem.cpp @@ -512,11 +512,8 @@ std::vector ISOFileSystem::GetDirListing(std::string path) { TreeEntry *e = entry->children[i]; -<<<<<<< HEAD + if(e->name == "." || e->name == "..") // do not include the relative entries in the list -======= - if(!strcmp(e->name.c_str(), ".") || !strcmp(e->name.c_str(), "..")) // do not include the relative entries in the list ->>>>>>> upstream/master continue; PSPFileInfo x; From b9ff4295e745073555c540f5d1e769375cf7a154 Mon Sep 17 00:00:00 2001 From: "kev :)" Date: Sun, 11 Nov 2012 00:33:16 +0000 Subject: [PATCH 4/7] Make RTC tests pass --- Core/HLE/HLETables.cpp | 4 ++-- Core/HLE/sceKernelTime.cpp | 36 ++++++++++++++++++++++++++++++++++++ Core/HLE/sceKernelTime.h | 2 ++ test.py | 2 +- 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/Core/HLE/HLETables.cpp b/Core/HLE/HLETables.cpp index f3546d8f69..53143d0c6a 100644 --- a/Core/HLE/HLETables.cpp +++ b/Core/HLE/HLETables.cpp @@ -104,8 +104,8 @@ const HLEFunction sceRtc[] = {0x34885E0D, 0, "sceRtcConvertUtcToLocalTime"}, {0x779242A2, 0, "sceRtcConvertLocalTimeToUTC"}, {0x42307A17, 0, "sceRtcIsLeapYear"}, - {0x05ef322c, 0, "sceRtcGetDaysInMonth"}, - {0x57726bc1, 0, "sceRtcGetDayOfWeek"}, + {0x05ef322c, &WrapU_UU, "sceRtcGetDaysInMonth"}, + {0x57726bc1, &WrapU_UUU, "sceRtcGetDayOfWeek"}, {0x4B1B5E82, 0, "sceRtcCheckValid"}, {0x3a807cc8, 0, "sceRtcSetTime_t"}, {0x27c4594c, 0, "sceRtcGetTime_t"}, diff --git a/Core/HLE/sceKernelTime.cpp b/Core/HLE/sceKernelTime.cpp index 47eee10720..c88f6966eb 100644 --- a/Core/HLE/sceKernelTime.cpp +++ b/Core/HLE/sceKernelTime.cpp @@ -150,6 +150,42 @@ void sceRtcGetTick() RETURN(0); } +u32 sceRtcGetDayOfWeek(u32 year, u32 month, u32 day) +{ + static u32 t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; + + year -= month < 3; + return ( year + year/4 - year/100 + year/400 + t[month-1] + day) % 7; +} + +u32 sceRtcGetDaysInMonth(u32 year, u32 month) +{ + DEBUG_LOG(HLE,"0=sceRtcGetDaysInMonth()"); + u32 numberOfDays; + + switch (month) + { + case 4: + case 6: + case 9: + case 11: + numberOfDays = 30; + break; + case 2: + if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) + numberOfDays = 29; + else + numberOfDays = 28; + break; + + default: + numberOfDays = 31; + break; + } + + return numberOfDays; +} + void sceRtcGetTickResolution() { DEBUG_LOG(HLE,"100=sceRtcGetTickResolution()"); diff --git a/Core/HLE/sceKernelTime.h b/Core/HLE/sceKernelTime.h index 0905a61a6b..6eaf4b5e5a 100644 --- a/Core/HLE/sceKernelTime.h +++ b/Core/HLE/sceKernelTime.h @@ -29,3 +29,5 @@ void sceKernelSysClock2USecWide(); void sceRtcGetCurrentClockLocalTime(); void sceRtcGetTickResolution(); void sceRtcGetTick(); +u32 sceRtcGetDaysInMonth(u32 year, u32 month); +u32 sceRtcGetDayOfWeek(u32 year, u32 month, u32 day); \ No newline at end of file diff --git a/test.py b/test.py index 9b87789165..c1d3cc04df 100644 --- a/test.py +++ b/test.py @@ -26,6 +26,7 @@ tests_good = [ "string/string", "gpu/callbacks/ge_callbacks", "threads/mbx/mbx", + "rtc/rtc", ] # These are the next tests up for fixing. @@ -44,7 +45,6 @@ tests_next = [ "mstick/mstick", "modules/loadexec/loader", "power/power", - "rtc/rtc", "sysmem/sysmem", "threads/events/events", "threads/fpl/fpl", From 476f858388ebdf594840bfb7339ce2b50a226c92 Mon Sep 17 00:00:00 2001 From: "kev :)" Date: Sun, 11 Nov 2012 00:41:27 +0000 Subject: [PATCH 5/7] Revert "FIx breakage" This reverts commit ba63a4ea2a0001e37b7d7a7b426ad44e4db3c0b7. --- Core/FileSystems/ISOFileSystem.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Core/FileSystems/ISOFileSystem.cpp b/Core/FileSystems/ISOFileSystem.cpp index 59b756161c..b5719c20b6 100644 --- a/Core/FileSystems/ISOFileSystem.cpp +++ b/Core/FileSystems/ISOFileSystem.cpp @@ -512,8 +512,11 @@ std::vector ISOFileSystem::GetDirListing(std::string path) { TreeEntry *e = entry->children[i]; - +<<<<<<< HEAD if(e->name == "." || e->name == "..") // do not include the relative entries in the list +======= + if(!strcmp(e->name.c_str(), ".") || !strcmp(e->name.c_str(), "..")) // do not include the relative entries in the list +>>>>>>> upstream/master continue; PSPFileInfo x; From f4ed7104205258ccc85aa8e0d03c3c2b8a39a7cb Mon Sep 17 00:00:00 2001 From: "kev :)" Date: Sun, 11 Nov 2012 00:47:24 +0000 Subject: [PATCH 6/7] FIx broken merge --- Core/FileSystems/ISOFileSystem.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Core/FileSystems/ISOFileSystem.cpp b/Core/FileSystems/ISOFileSystem.cpp index b5719c20b6..cfd30cb189 100644 --- a/Core/FileSystems/ISOFileSystem.cpp +++ b/Core/FileSystems/ISOFileSystem.cpp @@ -512,11 +512,7 @@ std::vector ISOFileSystem::GetDirListing(std::string path) { TreeEntry *e = entry->children[i]; -<<<<<<< HEAD - if(e->name == "." || e->name == "..") // do not include the relative entries in the list -======= if(!strcmp(e->name.c_str(), ".") || !strcmp(e->name.c_str(), "..")) // do not include the relative entries in the list ->>>>>>> upstream/master continue; PSPFileInfo x; From 44ae67413af4feeec22879a9b3b5df25d72280cd Mon Sep 17 00:00:00 2001 From: Sacha Date: Sun, 11 Nov 2012 21:45:48 +1000 Subject: [PATCH 7/7] Blackberry: Update version to 0.2, update icon, simply build and package script --- SDL/CMakeLists.txt | 3 --- SDL/bar-descriptor.xml | 2 +- SDL/blackberry_build.sh | 13 ------------- SDL/blackberry_package.sh | 1 - SDL/icon-114.png | Bin 17606 -> 12303 bytes 5 files changed, 1 insertion(+), 18 deletions(-) diff --git a/SDL/CMakeLists.txt b/SDL/CMakeLists.txt index 12f42148ce..4118413d92 100644 --- a/SDL/CMakeLists.txt +++ b/SDL/CMakeLists.txt @@ -14,13 +14,10 @@ endif() # TODO: Rely on compiler define instead. __BLACKBERRY__ ? if (BLACKBERRY) - message("Building for Blackberry") add_definitions(-DBLACKBERRY) if (BLACKBERRY GREATER 10) add_definitions(-DBLACKBERRY10) endif() -else() - message("Not building for Blackberry") endif() diff --git a/SDL/bar-descriptor.xml b/SDL/bar-descriptor.xml index 67ca11344c..3ce9c914df 100644 --- a/SDL/bar-descriptor.xml +++ b/SDL/bar-descriptor.xml @@ -3,7 +3,7 @@ com.Qtness.PPSSPP PPSSPP ppsspp - 0.0.1 + 0.2 1 Playstation portable emulator. diff --git a/SDL/blackberry_build.sh b/SDL/blackberry_build.sh index 30ccc88178..ecbc4dc272 100755 --- a/SDL/blackberry_build.sh +++ b/SDL/blackberry_build.sh @@ -24,7 +24,6 @@ PKG_CONFIG_PATH=${PROJECT_ROOT}/install/lib/pkgconfig PKG_CONFIG_LIBDIR=${PROJECT_ROOT}/install/lib/pkgconfig SDL_PROJECT=${PROJECT_ROOT}/SDL -SDLIMAGE_PROJECT=${PROJECT_ROOT}/SDL_image SDLMIXER_PROJECT=${PROJECT_ROOT}/SDL_mixer while true; do @@ -44,7 +43,6 @@ while true; do echo "Dependency Paths (defaults are under project root): " echo " --sdl PATH SDL 1.2 project directory (default is SDL)" echo " --tco PATH TouchControlOverlay project directory (default is TouchControlOverlay)" - echo " --sdl_image PATH SDL_image project directory (default is SDL_image)" echo " --sdl_mixer PATH SDL_mixer project directory (default is SDL_mixer)" echo " --ogg PATH ogg project directory (default is ogg)" echo " --vorbis PATH vorbis project directory (default is vorbis)" @@ -55,7 +53,6 @@ while true; do -p | --project-root ) PROJECT_ROOT="$2"; shift 2 ;; --pkg-config ) PKG_CONFIG_PATH="$2"; PKG_CONFIG_LIBDIR="$2"; shift 2 ;; --sdl ) SDL_PROJECT="$2"; shift 2 ;; - --sdl_image ) SDLIMAGE_PROJECT="$2"; shift 2 ;; --sdl_mixer ) SDLMIXER_PROJECT="$2"; shift 2 ;; --tco ) TCO_PROJECT="$2"; shift 2 ;; --ogg ) OGG_PROJECT="$2"; shift 2 ;; @@ -68,9 +65,6 @@ done if [ -z "$SDL_PROJECT" ]; then SDL_PROJECT="$PROJECT_ROOT/SDL" fi -if [ -z "$SDLIMAGE_PROJECT" ]; then - SDLIMAGE_PROJECT="$PROJECT_ROOT/SDL_image" -fi if [ -z "$SDLMIXER_PROJECT" ]; then SDLMIXER_PROJECT="$PROJECT_ROOT/SDL_mixer" fi @@ -95,16 +89,9 @@ cmake \ -DCMAKE_C_COMPILER="${QNX_HOST}/usr/bin/ntoarmv7-gcc" \ -DCMAKE_CXX_COMPILER="${QNX_HOST}/usr/bin/ntoarmv7-g++" \ -DTHREADS_PTHREAD_ARG="" \ --DLIBINTL_INCLUDE_DIR="${QNX_TARGET}/usr/include" \ --DLIBINTL_LIB_FOUND=TRUE \ --DLIBINTL_LIBRARIES="${QNX_TARGET}/armle-v7/usr/lib/libintl.so" \ --DLIBINTL_LIBC_HAS_DGETTEXT=FALSE \ -DSDL_INCLUDE_DIR="${SDL_PROJECT}/include" \ -DSDL_LIBRARY="${SDL_PROJECT}/Device-${BUILD_TYPE}/libSDL12.so;${TCO_PROJECT}/Device-${BUILD_TYPE}/libTouchControlOverlay.so" \ -DSDL_FOUND=ON \ --DSDLIMAGE_INCLUDE_DIR="${SDLIMAGE_PROJECT}" \ --DSDLIMAGE_LIBRARY="${SDLIMAGE_PROJECT}/Device-${BUILD_TYPE}/libSDL_image.so" \ --DSDLIMAGE_FOUND=ON \ -DSDLMIXER_INCLUDE_DIR="${SDLMIXER_PROJECT}" \ -DSDLMIXER_LIBRARY="${SDLMIXER_PROJECT}/Device-${BUILD_TYPE}/libSDL_mixer.so;${OGG_PROJECT}/Device-${BUILD_TYPE}/libogg.so;${VORBIS_PROJECT}/Device-${BUILD_TYPE}/libvorbis.so" \ -DSDLMIXER_FOUND=ON \ diff --git a/SDL/blackberry_package.sh b/SDL/blackberry_package.sh index bb52f854b5..cdac8adeab 100755 --- a/SDL/blackberry_package.sh +++ b/SDL/blackberry_package.sh @@ -9,5 +9,4 @@ blackberry-nativepackager -package PPSSPP.bar bar-descriptor.xml ppsspp \ -e ../android/assets assets \ -e ${WORKSPACE}/SDL12/${TYPE}/libSDL12.so lib/libSDL12.so \ -e ${WORKSPACE}/TouchControlOverlay/${TYPE}/libTouchControlOverlay.so lib/libTouchControlOverlay.so \ --e ${WORKSPACE}/SDL_image/${TYPE}/libSDL_image.so lib/libSDL_image.so \ -e ${WORKSPACE}/SDL_mixer/${TYPE}/libSDL_mixer.so lib/libSDL_mixer.so diff --git a/SDL/icon-114.png b/SDL/icon-114.png index 1a153b5fd1aee40884c6fb274a08d7b8c168e21d..bef28a250464fc8f22b6af75b95189625935737f 100755 GIT binary patch literal 12303 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 literal 17606 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