From 7855ebcd9f990e460f2d010e106cfb5aa8011377 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 7 Jun 2014 17:32:15 +0800 Subject: [PATCH] cellSpurs : initialize eventFlag --- rpcs3/Emu/Cell/SPURSManager.h | 26 ++++++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 12 ++++++++--- rpcs3/Emu/SysCalls/Modules/cellSpurs.h | 3 +-- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/Cell/SPURSManager.h b/rpcs3/Emu/Cell/SPURSManager.h index ab250b44a4..120a096c43 100644 --- a/rpcs3/Emu/Cell/SPURSManager.h +++ b/rpcs3/Emu/Cell/SPURSManager.h @@ -89,13 +89,39 @@ protected: be_t container; }; +class SPURSManagerEventFlag +{ +public: + SPURSManagerEventFlag(u32 flagClearMode, u32 flagDirection) + { + this->flagClearMode = flagClearMode; + this->flagDirection = flagDirection; + } + + u32 _getDirection() + { + return this->flagDirection; + } + + u32 _getClearMode () + { + return this->flagClearMode; + } + +protected: + be_t flagClearMode; + be_t flagDirection; +}; + // Main SPURS manager class. class SPURSManager { public: SPURSManager(SPURSManagerAttribute *attr); + SPURSManager(SPURSManagerEventFlag *eventFlag); void Finalize(); protected: SPURSManagerAttribute *attr; + SPURSManagerEventFlag *eventFlag; }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 2c84fb61a6..daf61c8f6b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -482,7 +482,7 @@ int cellSpursGetInfo(mem_ptr_t spurs, mem_ptr_t info) int _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_t taskset, mem_ptr_t eventFlag, u32 flagClearMode, u32 flagDirection) { - cellSpurs.Error("_cellSpursEventFlagInitialize(spurs_addr=0x%x, taskset_addr=0x%x, eventFlag_addr=0x%x, flagClearMode=%u, flagDirection=%u)", spurs.GetAddr(), taskset.GetAddr(), eventFlag.GetAddr(), flagClearMode, flagDirection); + cellSpurs.Warning("_cellSpursEventFlagInitialize(spurs_addr=0x%x, taskset_addr=0x%x, eventFlag_addr=0x%x, flagClearMode=%u, flagDirection=%u)", spurs.GetAddr(), taskset.GetAddr(), eventFlag.GetAddr(), flagClearMode, flagDirection); if ((taskset.GetAddr() % 128 != 0) || (eventFlag.GetAddr() % 128 != 0)) { @@ -496,6 +496,8 @@ int _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_teventFlag = new SPURSManagerEventFlag(flagClearMode, flagDirection); + return CELL_OK; } @@ -615,7 +617,7 @@ int cellSpursEventFlagTryWait(mem_ptr_t eventFlag, mem16_t m int cellSpursEventFlagGetDirection(mem_ptr_t eventFlag, mem32_t direction) { - cellSpurs.Error("cellSpursEventFlagGetDirection(eventFlag_addr=0x%x, direction_addr=%u)", eventFlag.GetAddr(), direction.GetAddr()); + cellSpurs.Warning("cellSpursEventFlagGetDirection(eventFlag_addr=0x%x, direction_addr=%u)", eventFlag.GetAddr(), direction.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { @@ -629,12 +631,14 @@ int cellSpursEventFlagGetDirection(mem_ptr_t eventFlag, mem3 return CELL_SPURS_TASK_ERROR_NULL_POINTER; } + direction = eventFlag->eventFlag->_getDirection(); + return CELL_OK; } int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem32_t clear_mode) { - cellSpurs.Error("cellSpursEventFlagGetClearMode(eventFlag_addr=0x%x, clear_mode_addr=%u)", eventFlag.GetAddr(), clear_mode.GetAddr()); + cellSpurs.Warning("cellSpursEventFlagGetClearMode(eventFlag_addr=0x%x, clear_mode_addr=%u)", eventFlag.GetAddr(), clear_mode.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { @@ -648,6 +652,8 @@ int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem3 return CELL_SPURS_TASK_ERROR_NULL_POINTER; } + clear_mode = eventFlag->eventFlag->_getClearMode(); + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h index 3609e82b30..4a3a8cf81e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h @@ -242,7 +242,6 @@ struct CellSpursTaskBinInfo CellSpursTaskLsPattern lsPattern; }; -// cellSpurs event flag. struct CellSpursEventFlag { - u8 skip[128]; + SPURSManagerEventFlag *eventFlag; };