diff --git a/asmjit b/asmjit index d7fc62d9e9..9ead0cfb4c 160000 --- a/asmjit +++ b/asmjit @@ -1 +1 @@ -Subproject commit d7fc62d9e905859579f5965eee6f7f99b65c2246 +Subproject commit 9ead0cfb4cb5eb1bcf8c12b4a1ea115e438c44fa diff --git a/ffmpeg b/ffmpeg index 8bcaa2485c..352fdfbbfa 160000 --- a/ffmpeg +++ b/ffmpeg @@ -1 +1 @@ -Subproject commit 8bcaa2485c2434d7d7a9da17491bafb58de42bb6 +Subproject commit 352fdfbbfa6d7b26142f00b43d7e1802a03c68a8 diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index e6999655cf..36c522670a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -609,7 +609,7 @@ int cellAdecQueryAttr(vm::ptr type, vm::ptr attr) // TODO: check values attr->adecVerLower = 0x280000; // from dmux attr->adecVerUpper = 0x260000; - attr->workMemSize = 4 * 1024 * 1024; + attr->workMemSize = 4194304; // 4MB return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp index 4b69b5aa72..1e583d3c9e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp @@ -1,4 +1,6 @@ #include "stdafx.h" +#include "Ini.h" +#include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" #include "cellCamera.h" @@ -7,27 +9,29 @@ void cellCamera_init(); //Module cellCamera(0x0023, cellCamera_init); Module *cellCamera = nullptr; -// Error Codes -enum +struct cellCameraInternal { - CELL_CAMERA_ERROR_ALREADY_INIT = 0x80140801, - CELL_CAMERA_ERROR_NOT_INIT = 0x80140803, - CELL_CAMERA_ERROR_PARAM = 0x80140804, - CELL_CAMERA_ERROR_ALREADY_OPEN = 0x80140805, - CELL_CAMERA_ERROR_NOT_OPEN = 0x80140806, - CELL_CAMERA_ERROR_DEVICE_NOT_FOUND = 0x80140807, - CELL_CAMERA_ERROR_DEVICE_DEACTIVATED = 0x80140808, - CELL_CAMERA_ERROR_NOT_STARTED = 0x80140809, - CELL_CAMERA_ERROR_FORMAT_UNKNOWN = 0x8014080a, - CELL_CAMERA_ERROR_RESOLUTION_UNKNOWN = 0x8014080b, - CELL_CAMERA_ERROR_BAD_FRAMERATE = 0x8014080c, - CELL_CAMERA_ERROR_TIMEOUT = 0x8014080d, - CELL_CAMERA_ERROR_FATAL = 0x8014080f, + bool m_bInitialized; + + cellCameraInternal() + : m_bInitialized(false) + { + } }; +cellCameraInternal cellCameraInstance; + int cellCameraInit() { - UNIMPLEMENTED_FUNC(cellCamera); + cellCamera->Warning("cellCameraInit()"); + + if (cellCameraInstance.m_bInitialized) + return CELL_CAMERA_ERROR_ALREADY_INIT; + + // TODO: Check if camera is connected, if not return CELL_CAMERA_ERROR_DEVICE_NOT_FOUND + + cellCameraInstance.m_bInitialized = true; + return CELL_OK; } @@ -61,9 +65,19 @@ int cellCameraGetDeviceGUID() return CELL_OK; } -int cellCameraGetType() +int cellCameraGetType(s32 dev_num, CellCameraType type) { - UNIMPLEMENTED_FUNC(cellCamera); + cellCamera->Warning("cellCameraGetType(dev_num=%d, type_addr=0x%x)", dev_num, type); + + if (Ini.CameraType.GetValue() == 1) + type = CELL_CAMERA_EYETOY; + else if (Ini.CameraType.GetValue() == 2) + type = CELL_CAMERA_EYETOY2; + else if (Ini.CameraType.GetValue() == 3) + type == CELL_CAMERA_USBVIDEOCLASS; + else + type = CELL_CAMERA_TYPE_UNKNOWN; + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellCamera.h b/rpcs3/Emu/SysCalls/Modules/cellCamera.h index 165aaf5c97..c56aae37fa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCamera.h +++ b/rpcs3/Emu/SysCalls/Modules/cellCamera.h @@ -1,5 +1,23 @@ #pragma once +// Error Codes +enum +{ + CELL_CAMERA_ERROR_ALREADY_INIT = 0x80140801, + CELL_CAMERA_ERROR_NOT_INIT = 0x80140803, + CELL_CAMERA_ERROR_PARAM = 0x80140804, + CELL_CAMERA_ERROR_ALREADY_OPEN = 0x80140805, + CELL_CAMERA_ERROR_NOT_OPEN = 0x80140806, + CELL_CAMERA_ERROR_DEVICE_NOT_FOUND = 0x80140807, + CELL_CAMERA_ERROR_DEVICE_DEACTIVATED = 0x80140808, + CELL_CAMERA_ERROR_NOT_STARTED = 0x80140809, + CELL_CAMERA_ERROR_FORMAT_UNKNOWN = 0x8014080a, + CELL_CAMERA_ERROR_RESOLUTION_UNKNOWN = 0x8014080b, + CELL_CAMERA_ERROR_BAD_FRAMERATE = 0x8014080c, + CELL_CAMERA_ERROR_TIMEOUT = 0x8014080d, + CELL_CAMERA_ERROR_FATAL = 0x8014080f, +}; + // Camera types enum CellCameraType { diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp index 055ac56dd8..10854f1892 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" #include "cellGem.h" @@ -7,6 +8,18 @@ void cellGem_init(); //Module cellGem(0x005a, cellGem_init); Module *cellGem = nullptr; +struct cellGemInternal +{ + bool m_bInitialized; + + cellGemInternal() + : m_bInitialized(false) + { + } +}; + +cellGemInternal cellGemInstance; + int cellGemCalibrate() { UNIMPLEMENTED_FUNC(cellGem); @@ -117,7 +130,7 @@ s32 cellGemGetMemorySize(be_t max_connect) if (max_connect > CELL_GEM_MAX_NUM) return CELL_GEM_ERROR_INVALID_PARAMETER; - return (1024 * 1024) * max_connect; // 1MB * max_connect + return 1048576 * max_connect; // 1MB * max_connect } int cellGemGetRGB() @@ -156,9 +169,15 @@ int cellGemHSVtoRGB() return CELL_OK; } -int cellGemInit() +int cellGemInit(vm::ptr attribute) { - UNIMPLEMENTED_FUNC(cellGem); + cellGem->Warning("cellGemInit(attribute_addr=0x%x)", attribute.addr()); + + if (cellGemInstance.m_bInitialized) + return CELL_GEM_ERROR_ALREADY_INITIALIZED; + + cellGemInstance.m_bInitialized = true; + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index b246d231e0..f0dcb78267 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -664,7 +664,7 @@ int cellHddGameCheck(u32 version, vm::ptr dirName, u32 errDialog, vm vm::var get; vm::var set; - get->hddFreeSizeKB = 40 * 1024 * 1024; // 40 GB, TODO: Use the free space of the computer's HDD where RPCS3 is being run. + get->hddFreeSizeKB = 419430400; // 40 MB, TODO: Use the free space of the computer's HDD where RPCS3 is being run. get->isNewData = CELL_HDDGAME_ISNEWDATA_EXIST; get->sysSizeKB = 0; // TODO get->st_atime__ = 0; // TODO @@ -709,12 +709,9 @@ int cellHddGameCheck(u32 version, vm::ptr dirName, u32 errDialog, vm // TODO ? funcStat(result, get, set); - - /* - if (result->result != CELL_HDDGAME_CBRESULT_OK && // error on compiling in MVS. Needs to use LE byte order? + if (result->result != CELL_HDDGAME_CBRESULT_OK && result->result != CELL_HDDGAME_CBRESULT_OK_CANCEL) return CELL_HDDGAME_ERROR_CBRESULT; - */ // TODO ? @@ -794,7 +791,7 @@ int cellWebBrowserEstimate2(const vm::ptr config, v // TODO: When cellWebBrowser stuff is implemented, change this to some real // needed memory buffer size. - *memSize = 1024 * 1024 * 1; // 1 MB + *memSize = 1048576; // 1 MB return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index adcc418cdc..15bca18cc7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -174,7 +174,7 @@ u32 vdecQueryAttr(CellVdecCodecType type, u32 profile, u32 spec_addr /* may be 0 // TODO: check values attr->decoderVerLower = 0x280000; // from dmux attr->decoderVerUpper = 0x260000; - attr->memSize = 4 * 1024 * 1024; + attr->memSize = 4194304; // 4MB attr->cmdDepth = 16; return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index 16ee6c464a..e9be058a25 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -21,7 +21,7 @@ int cellVpostQueryAttr(vm::ptr cfgParam, vm::ptrdelay = 0; - attr->memSize = 4 * 1024 * 1024; + attr->memSize = 4194304; // 4MB attr->vpostVerLower = 0x280000; // from dmux attr->vpostVerUpper = 0x260000; diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index b2d6da9860..a66e16a185 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -590,8 +590,8 @@ s32 cellFsStReadInit(u32 fd, vm::ptr ringbuf) fs_config.m_ring_buffer = *ringbuf; if(ringbuf->ringbuf_size < 0x40000000) // If the size is less than 1MB - fs_config.m_alloc_mem_size = (((u32)ringbuf->ringbuf_size + 64 * 1024 - 1) / (64 * 1024)) * (64 * 1024); - fs_config.m_alloc_mem_size = (((u32)ringbuf->ringbuf_size + 1024 * 1024 - 1) / (1024 * 1024)) * (1024 * 1024); + fs_config.m_alloc_mem_size = (((u32)ringbuf->ringbuf_size + 65535) / (65536)) * (65536); + fs_config.m_alloc_mem_size = (((u32)ringbuf->ringbuf_size + 1048575) / (1048576)) * (1048576); // alloc memory fs_config.m_buffer = (u32)Memory.Alloc(fs_config.m_alloc_mem_size, 1024); diff --git a/rpcs3/Gui/ConLogFrame.cpp b/rpcs3/Gui/ConLogFrame.cpp index 0dd80f269e..9e9d0209fc 100644 --- a/rpcs3/Gui/ConLogFrame.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -11,10 +11,10 @@ wxDEFINE_EVENT(EVT_LOG_COMMAND, wxCommandEvent); //amount of memory in bytes used to buffer log messages for the gui -const int BUFFER_MAX_SIZE = 1024 * 1024; +const int BUFFER_MAX_SIZE = 1048576; // 1MB //amount of characters in the TextCtrl text-buffer for the emulation log -const int GUI_BUFFER_MAX_SIZE = 1024 * 1024; +const int GUI_BUFFER_MAX_SIZE = 1048576; // 1MB enum { diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index dca2b82f88..cbf75c2c4f 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -331,8 +331,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) } wxDialog diag(this, wxID_ANY, "Settings", wxDefaultPosition); + static const u32 width = 425; static const u32 height = 400; - static const u32 width = 385; // Settings panels wxNotebook* nb_config = new wxNotebook(&diag, wxID_ANY, wxPoint(6,6), wxSize(width, height)); @@ -340,12 +340,14 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxPanel* p_cpu = new wxPanel(nb_config, wxID_ANY); wxPanel* p_graphics = new wxPanel(nb_config, wxID_ANY); wxPanel* p_audio = new wxPanel(nb_config, wxID_ANY); + wxPanel* p_camera = new wxPanel(nb_config, wxID_ANY); wxPanel* p_io = new wxPanel(nb_config, wxID_ANY); wxPanel* p_hle = new wxPanel(nb_config, wxID_ANY); nb_config->AddPage(p_cpu, wxT("Core")); nb_config->AddPage(p_graphics, wxT("Graphics")); nb_config->AddPage(p_audio, wxT("Audio")); + nb_config->AddPage(p_camera, wxT("Camera")); nb_config->AddPage(p_io, wxT("Input / Output")); nb_config->AddPage(p_hle, wxT("HLE / Misc.")); nb_config->AddPage(p_system, wxT("System")); @@ -354,6 +356,7 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxBoxSizer* s_subpanel_cpu = new wxBoxSizer(wxVERTICAL); wxBoxSizer* s_subpanel_graphics = new wxBoxSizer(wxVERTICAL); wxBoxSizer* s_subpanel_audio = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* s_subpanel_camera = new wxBoxSizer(wxVERTICAL); wxBoxSizer* s_subpanel_io = new wxBoxSizer(wxVERTICAL); wxBoxSizer* s_subpanel_hle = new wxBoxSizer(wxVERTICAL); @@ -374,6 +377,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) // Audio wxStaticBoxSizer* s_round_audio_out = new wxStaticBoxSizer(wxVERTICAL, p_audio, _("Audio Out")); + // Camera + wxStaticBoxSizer* s_round_camera_type = new wxStaticBoxSizer(wxVERTICAL, p_camera, _("Camera type")); + // HLE / Misc. wxStaticBoxSizer* s_round_hle_log_lvl = new wxStaticBoxSizer(wxVERTICAL, p_hle, _("Log Level")); @@ -389,6 +395,7 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxComboBox* cbox_keyboard_handler = new wxComboBox(p_io, wxID_ANY); wxComboBox* cbox_mouse_handler = new wxComboBox(p_io, wxID_ANY); wxComboBox* cbox_audio_out = new wxComboBox(p_audio, wxID_ANY); + wxComboBox* cbox_camera_type = new wxComboBox(p_camera, wxID_ANY); wxComboBox* cbox_hle_loglvl = new wxComboBox(p_hle, wxID_ANY); wxComboBox* cbox_sys_lang = new wxComboBox(p_system, wxID_ANY); @@ -444,6 +451,11 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) cbox_audio_out->Append("Null"); cbox_audio_out->Append("OpenAL"); + cbox_camera_type->Append("Unknown"); + cbox_camera_type->Append("EyeToy"); + cbox_camera_type->Append("PlayStation Eye"); + cbox_camera_type->Append("USB Video Class 1.1"); + cbox_hle_loglvl->Append("All"); cbox_hle_loglvl->Append("Success"); cbox_hle_loglvl->Append("Warnings"); @@ -495,6 +507,7 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) cbox_keyboard_handler->SetSelection(Ini.KeyboardHandlerMode.GetValue()); cbox_mouse_handler ->SetSelection(Ini.MouseHandlerMode.GetValue()); cbox_audio_out ->SetSelection(Ini.AudioOutMode.GetValue()); + cbox_camera_type ->SetSelection(Ini.CameraType.GetValue()); cbox_hle_loglvl ->SetSelection(Ini.HLELogLvl.GetValue()); cbox_sys_lang ->SetSelection(Ini.SysLanguage.GetValue()); @@ -517,6 +530,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_round_audio_out->Add(cbox_audio_out, wxSizerFlags().Border(wxALL, 5).Expand()); + s_round_camera_type->Add(cbox_camera_type, wxSizerFlags().Border(wxALL, 5).Expand()); + s_round_hle_log_lvl->Add(cbox_hle_loglvl, wxSizerFlags().Border(wxALL, 5).Expand()); s_round_sys_lang->Add(cbox_sys_lang, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -544,6 +559,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_subpanel_audio->Add(chbox_audio_dump, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_audio->Add(chbox_audio_conv, wxSizerFlags().Border(wxALL, 5).Expand()); + // Camera + s_subpanel_camera->Add(s_round_camera_type, wxSizerFlags().Border(wxALL, 5).Expand()); + // HLE / Misc. s_subpanel_hle->Add(s_round_hle_log_lvl, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_logging, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -569,6 +587,7 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) diag.SetSizerAndFit(s_subpanel_graphics, false); diag.SetSizerAndFit(s_subpanel_io, false); diag.SetSizerAndFit(s_subpanel_audio, false); + diag.SetSizerAndFit(s_subpanel_camera, false); diag.SetSizerAndFit(s_subpanel_hle, false); diag.SetSizerAndFit(s_subpanel_system, false); diag.SetSizerAndFit(s_b_panel, false); @@ -592,6 +611,7 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.AudioOutMode.SetValue(cbox_audio_out->GetSelection()); Ini.AudioDumpToFile.SetValue(chbox_audio_dump->GetValue()); Ini.AudioConvertToU16.SetValue(chbox_audio_conv->GetValue()); + Ini.CameraType.SetValue(cbox_camera_type->GetSelection()); Ini.HLELogging.SetValue(chbox_hle_logging->GetValue()); Ini.HLEHookStFunc.SetValue(chbox_hle_hook_stfunc->GetValue()); Ini.HLESaveTTY.SetValue(chbox_hle_savetty->GetValue()); diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index efb7813cde..a7be1a2a5d 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -114,6 +114,9 @@ public: IniEntry AudioDumpToFile; IniEntry AudioConvertToU16; + // Camera + IniEntry CameraType; + // Input/Output IniEntry PadHandlerMode; IniEntry KeyboardHandlerMode; @@ -183,6 +186,9 @@ public: AudioDumpToFile.Init("Audio_AudioDumpToFile", path); AudioConvertToU16.Init("Audio_AudioConvertToU16", path); + // Camera + CameraType.Init("Camera_Type", path); + // Input/Output PadHandlerMode.Init("IO_PadHandlerMode", path); KeyboardHandlerMode.Init("IO_KeyboardHandlerMode", path); @@ -248,6 +254,9 @@ public: AudioDumpToFile.Load(false); AudioConvertToU16.Load(false); + // Camera + CameraType.Load(2); + // Input/Ouput PadHandlerMode.Load(1); KeyboardHandlerMode.Load(0); @@ -314,6 +323,9 @@ public: AudioDumpToFile.Save(); AudioConvertToU16.Save(); + // Camera + CameraType.Save(); + // Input/Output PadHandlerMode.Save(); KeyboardHandlerMode.Save();