From 7361b4e079a5f54387c757406b95448dab822f6d Mon Sep 17 00:00:00 2001
From: Nekotekina <nekotekina@gmail.com>
Date: Thu, 30 Jul 2015 03:10:36 +0300
Subject: [PATCH] cellImeJp, cellMusic(|Decode|Export), cellSysutilMisc

---
 rpcs3/Emu/SysCalls/ModuleManager.cpp          |  23 +-
 rpcs3/Emu/SysCalls/Modules/cellImejp.cpp      | 263 +++++++++---------
 rpcs3/Emu/SysCalls/Modules/cellMusic.cpp      | 142 ++++++++++
 .../Emu/SysCalls/Modules/cellMusicDecode.cpp  | 103 +++++--
 .../Emu/SysCalls/Modules/cellMusicExport.cpp  |  21 +-
 .../Emu/SysCalls/Modules/cellSysutilMisc.cpp  |  15 +
 rpcs3/emucore.vcxproj                         |   2 +
 rpcs3/emucore.vcxproj.filters                 |  24 +-
 8 files changed, 419 insertions(+), 174 deletions(-)
 create mode 100644 rpcs3/Emu/SysCalls/Modules/cellMusic.cpp
 create mode 100644 rpcs3/Emu/SysCalls/Modules/cellSysutilMisc.cpp

diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp
index 492463da07..ba94ab5f8e 100644
--- a/rpcs3/Emu/SysCalls/ModuleManager.cpp
+++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp
@@ -25,11 +25,15 @@ extern Module cellGifDec;
 extern Module cellHttp;
 extern Module cellHttps;
 extern Module cellHttpUtil;
+extern Module cellImeJp;
 extern Module cellJpgDec;
 extern Module cellJpgEnc;
 extern Module cellKey2char;
 extern Module cellL10n;
 extern Module cellMic;
+extern Module cellMusic;
+extern Module cellMusicDecode;
+extern Module cellMusicExport;
 extern Module cellNetCtl;
 extern Module cellOvis;
 extern Module cellPamf;
@@ -56,6 +60,7 @@ extern Module cellSysmodule;
 extern Module cellSysutil;
 extern Module cellSysutilAp;
 extern Module cellSysutilAvc2;
+extern Module cellSysutilMisc;
 extern Module cellUsbd;
 extern Module cellUsbPspcm;
 extern Module cellUserInfo;
@@ -127,7 +132,7 @@ const g_module_list[] =
 	{ 0x0018, "cellPngDec", &cellPngDec },
 	{ 0x0019, "cellFont", &cellFont },
 	{ 0x001a, "cellFontFT", &cellFontFT },
-	{ 0x001b, "cellFreetype", nullptr },
+	{ 0x001b, "cell_FreeType2", nullptr },
 	{ 0x001c, "cellUsbd", &cellUsbd },
 	{ 0x001d, "cellSail", &cellSail },
 	{ 0x001e, "cellL10n", &cellL10n },
@@ -160,7 +165,7 @@ const g_module_list[] =
 	{ 0x003d, "cellJpgEnc", &cellJpgEnc },
 	{ 0x003e, "cellGame", &cellGame },
 	{ 0x003f, "cellBGDLUtility", &cellBGDL },
-	{ 0x0040, "cellFreetypeTT", nullptr },
+	{ 0x0040, "cell_FreeType2", nullptr },
 	{ 0x0041, "cellSysutilVideoUpload", nullptr },
 	{ 0x0042, "cellSysutilSysconfExt", nullptr },
 	{ 0x0043, "cellFiber", &cellFiber },
@@ -169,13 +174,13 @@ const g_module_list[] =
 	{ 0x0046, "cellVoice", &cellVoice },
 	{ 0x0047, "cellAdecCelp8", nullptr },
 	{ 0x0048, "cellCelp8Enc", &cellCelp8Enc },
-	{ 0x0049, "cellLicenseArea", nullptr },
-	{ 0x004a, "cellMusic2", nullptr },
+	{ 0x0049, "cellSysutilMisc", &cellSysutilMisc },
+	{ 0x004a, "cellMusicUtility", &cellMusic }, // 2
 	{ 0x004e, "cellScreenShotUtility", &cellScreenshot },
-	{ 0x004f, "cellMusicDecode", nullptr },
+	{ 0x004f, "cellMusicDecodeUtility", &cellMusicDecode },
 	{ 0x0050, "cellSpursJq", &cellSpursJq },
 	{ 0x0052, "cellPngEnc", &cellPngEnc },
-	{ 0x0053, "cellMusicDecode2", nullptr },
+	{ 0x0053, "cellMusicDecodeUtility", &cellMusicDecode }, // 2
 	{ 0x0055, "cellSync2", &cellSync2 },
 	{ 0x0056, "sceNpUtil", &sceNpUtil },
 	{ 0x0057, "cellRudp", &cellRudp },
@@ -187,12 +192,12 @@ const g_module_list[] =
 	{ 0xf01b, "cellAdecM2bc", nullptr },
 	{ 0xf01d, "cellAdecM4aac", nullptr },
 	{ 0xf01e, "cellAdecMp3", nullptr },
-	{ 0xf023, "cellImejp", nullptr },
-	{ 0xf028, "cellMusic", nullptr },
+	{ 0xf023, "cellImeJpUtility", &cellImeJp },
+	{ 0xf028, "cellMusicUtility", &cellMusic },
 	{ 0xf029, "cellPhotoExport", nullptr },
 	{ 0xf02a, "cellPrint", nullptr },
 	{ 0xf02b, "cellPhotoImport", nullptr },
-	{ 0xf02c, "cellMusicExport", nullptr },
+	{ 0xf02c, "cellMusicExportUtility", &cellMusicExport },
 	{ 0xf02e, "cellPhotoDecode", nullptr },
 	{ 0xf02f, "cellSearch", &cellSearch },
 	{ 0xf030, "cellSysutilAvc2", &cellSysutilAvc2 },
diff --git a/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp b/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp
index f7e0966fd1..21f1cebe4e 100644
--- a/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp
+++ b/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp
@@ -1,8 +1,8 @@
 #include "stdafx.h"
-#if 0
+#include "Emu/Memory/Memory.h"
+#include "Emu/SysCalls/Modules.h"
 
-void cellImejp_init();
-Module cellImejp(0xf023, cellImejp_init);
+extern Module cellImeJp;
 
 // Return Codes
 enum
@@ -16,291 +16,296 @@ enum
 	CELL_IMEJP_ERROR_OTHER              = 0x8002bfff,
 };
 
-int cellImeJpOpen()
+s32 cellImeJpOpen()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpOpen2()
+s32 cellImeJpOpen2()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpOpen3()
+s32 cellImeJpOpen3()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpClose()
+s32 cellImeJpClose()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpSetKanaInputMode()
+s32 cellImeJpSetKanaInputMode()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpSetInputCharType()
+s32 cellImeJpSetInputCharType()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpSetFixInputMode()
+s32 cellImeJpSetFixInputMode()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpReset()
+s32 cellImeJpAllowExtensionCharacters()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetStatus()
+s32 cellImeJpReset()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpEnterChar()
+s32 cellImeJpGetStatus()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpEnterCharExt()
+s32 cellImeJpEnterChar()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpEnterString()
+s32 cellImeJpEnterCharExt()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpEnterStringExt()
+s32 cellImeJpEnterString()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpModeCaretRight()
+s32 cellImeJpEnterStringExt()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpModeCaretLeft()
+s32 cellImeJpModeCaretRight()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpBackspaceWord()
+s32 cellImeJpModeCaretLeft()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpDeleteWord()
+s32 cellImeJpBackspaceWord()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpAllDeleteConvertString()
+s32 cellImeJpDeleteWord()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpConvertForward()
+s32 cellImeJpAllDeleteConvertString()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpConvertBackward()
+s32 cellImeJpConvertForward()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpCurrentPartConfirm()
+s32 cellImeJpConvertBackward()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpAllConfirm()
+s32 cellImeJpCurrentPartConfirm()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpConvertCancel()
+s32 cellImeJpAllConfirm()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpAllConvertCancel()
+s32 cellImeJpConvertCancel()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpExtendConvertArea()
+s32 cellImeJpAllConvertCancel()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpShortenConvertArea()
+s32 cellImeJpExtendConvertArea()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpTemporalConfirm()
+s32 cellImeJpShortenConvertArea()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpPostConvert()
+s32 cellImeJpTemporalConfirm()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpMoveFocusClause()
+s32 cellImeJpPostConvert()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetFocusTop()
+s32 cellImeJpMoveFocusClause()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetFocusLength()
+s32 cellImeJpGetFocusTop()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetConfirmYomiString()
+s32 cellImeJpGetFocusLength()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetConfirmString()
+s32 cellImeJpGetConfirmYomiString()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetConvertYomiString()
+s32 cellImeJpGetConfirmString()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetConvertString()
+s32 cellImeJpGetConvertYomiString()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetCandidateListSize()
+s32 cellImeJpGetConvertString()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetCandidateList()
+s32 cellImeJpGetCandidateListSize()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetCandidateSelect()
+s32 cellImeJpGetCandidateList()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpGetPredictList()
+s32 cellImeJpGetCandidateSelect()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-int cellImeJpConfirmPrediction()
+s32 cellImeJpGetPredictList()
 {
-	UNIMPLEMENTED_FUNC(cellImejp);
+	UNIMPLEMENTED_FUNC(cellImeJp);
 	return CELL_OK;
 }
 
-void cellImejp_init()
+s32 cellImeJpConfirmPrediction()
 {
-	REG_FUNC(cellImejp, cellImeJpOpen);
-	REG_FUNC(cellImejp, cellImeJpOpen2);
-	REG_FUNC(cellImejp, cellImeJpOpen3);
-	REG_FUNC(cellImejp, cellImeJpClose);
-
-	REG_FUNC(cellImejp, cellImeJpSetKanaInputMode);
-	REG_FUNC(cellImejp, cellImeJpSetInputCharType);
-	REG_FUNC(cellImejp, cellImeJpSetFixInputMode);
-	//cellImejp.AddFunc(, cellImeJpAllowExtensionCharacters);
-	REG_FUNC(cellImejp, cellImeJpReset);
-
-	REG_FUNC(cellImejp, cellImeJpGetStatus);
-
-	REG_FUNC(cellImejp, cellImeJpEnterChar);
-	REG_FUNC(cellImejp, cellImeJpEnterCharExt);
-	REG_FUNC(cellImejp, cellImeJpEnterString);
-	REG_FUNC(cellImejp, cellImeJpEnterStringExt);
-	REG_FUNC(cellImejp, cellImeJpModeCaretRight);
-	REG_FUNC(cellImejp, cellImeJpModeCaretLeft);
-	REG_FUNC(cellImejp, cellImeJpBackspaceWord);
-	REG_FUNC(cellImejp, cellImeJpDeleteWord);
-	REG_FUNC(cellImejp, cellImeJpAllDeleteConvertString);
-	REG_FUNC(cellImejp, cellImeJpConvertForward);
-	REG_FUNC(cellImejp, cellImeJpConvertBackward);
-	REG_FUNC(cellImejp, cellImeJpCurrentPartConfirm);
-	REG_FUNC(cellImejp, cellImeJpAllConfirm);
-	REG_FUNC(cellImejp, cellImeJpConvertCancel);
-	REG_FUNC(cellImejp, cellImeJpAllConvertCancel);
-	REG_FUNC(cellImejp, cellImeJpExtendConvertArea);
-	REG_FUNC(cellImejp, cellImeJpShortenConvertArea);
-	REG_FUNC(cellImejp, cellImeJpTemporalConfirm);
-	REG_FUNC(cellImejp, cellImeJpPostConvert);
-	REG_FUNC(cellImejp, cellImeJpMoveFocusClause);
-	REG_FUNC(cellImejp, cellImeJpGetFocusTop);
-	REG_FUNC(cellImejp, cellImeJpGetFocusLength);
-	REG_FUNC(cellImejp, cellImeJpGetConfirmYomiString);
-	REG_FUNC(cellImejp, cellImeJpGetConfirmString);
-	REG_FUNC(cellImejp, cellImeJpGetConvertYomiString);
-	REG_FUNC(cellImejp, cellImeJpGetConvertString);
-	REG_FUNC(cellImejp, cellImeJpGetCandidateListSize);
-	REG_FUNC(cellImejp, cellImeJpGetCandidateList);
-	REG_FUNC(cellImejp, cellImeJpGetCandidateSelect);
-	REG_FUNC(cellImejp, cellImeJpGetPredictList);
-	REG_FUNC(cellImejp, cellImeJpConfirmPrediction);
+	UNIMPLEMENTED_FUNC(cellImeJp);
+	return CELL_OK;
 }
-#endif
+
+Module cellImeJp("cellImeJp", []()
+{
+	REG_FUNC(cellImeJp, cellImeJpOpen);
+	REG_FUNC(cellImeJp, cellImeJpOpen2);
+	REG_FUNC(cellImeJp, cellImeJpOpen3);
+	REG_FUNC(cellImeJp, cellImeJpClose);
+
+	REG_FUNC(cellImeJp, cellImeJpSetKanaInputMode);
+	REG_FUNC(cellImeJp, cellImeJpSetInputCharType);
+	REG_FUNC(cellImeJp, cellImeJpSetFixInputMode);
+	REG_FUNC(cellImeJp, cellImeJpAllowExtensionCharacters);
+	REG_FUNC(cellImeJp, cellImeJpReset);
+
+	REG_FUNC(cellImeJp, cellImeJpGetStatus);
+
+	REG_FUNC(cellImeJp, cellImeJpEnterChar);
+	REG_FUNC(cellImeJp, cellImeJpEnterCharExt);
+	REG_FUNC(cellImeJp, cellImeJpEnterString);
+	REG_FUNC(cellImeJp, cellImeJpEnterStringExt);
+	REG_FUNC(cellImeJp, cellImeJpModeCaretRight);
+	REG_FUNC(cellImeJp, cellImeJpModeCaretLeft);
+	REG_FUNC(cellImeJp, cellImeJpBackspaceWord);
+	REG_FUNC(cellImeJp, cellImeJpDeleteWord);
+	REG_FUNC(cellImeJp, cellImeJpAllDeleteConvertString);
+	REG_FUNC(cellImeJp, cellImeJpConvertForward);
+	REG_FUNC(cellImeJp, cellImeJpConvertBackward);
+	REG_FUNC(cellImeJp, cellImeJpCurrentPartConfirm);
+	REG_FUNC(cellImeJp, cellImeJpAllConfirm);
+	REG_FUNC(cellImeJp, cellImeJpConvertCancel);
+	REG_FUNC(cellImeJp, cellImeJpAllConvertCancel);
+	REG_FUNC(cellImeJp, cellImeJpExtendConvertArea);
+	REG_FUNC(cellImeJp, cellImeJpShortenConvertArea);
+	REG_FUNC(cellImeJp, cellImeJpTemporalConfirm);
+	REG_FUNC(cellImeJp, cellImeJpPostConvert);
+	REG_FUNC(cellImeJp, cellImeJpMoveFocusClause);
+	REG_FUNC(cellImeJp, cellImeJpGetFocusTop);
+	REG_FUNC(cellImeJp, cellImeJpGetFocusLength);
+	REG_FUNC(cellImeJp, cellImeJpGetConfirmYomiString);
+	REG_FUNC(cellImeJp, cellImeJpGetConfirmString);
+	REG_FUNC(cellImeJp, cellImeJpGetConvertYomiString);
+	REG_FUNC(cellImeJp, cellImeJpGetConvertString);
+	REG_FUNC(cellImeJp, cellImeJpGetCandidateListSize);
+	REG_FUNC(cellImeJp, cellImeJpGetCandidateList);
+	REG_FUNC(cellImeJp, cellImeJpGetCandidateSelect);
+	REG_FUNC(cellImeJp, cellImeJpGetPredictList);
+	REG_FUNC(cellImeJp, cellImeJpConfirmPrediction);
+});
diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusic.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusic.cpp
new file mode 100644
index 0000000000..ed3b438b2d
--- /dev/null
+++ b/rpcs3/Emu/SysCalls/Modules/cellMusic.cpp
@@ -0,0 +1,142 @@
+#include "stdafx.h"
+#include "Emu/Memory/Memory.h"
+#include "Emu/SysCalls/Modules.h"
+
+extern Module cellMusic;
+
+s32 cellMusicGetSelectionContext()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicSetSelectionContext2()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicSetVolume2()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicGetContentsId()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicSetSelectionContext()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicInitialize2SystemWorkload()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicGetPlaybackStatus2()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicGetContentsId2()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicFinalize()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicInitializeSystemWorkload()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicInitialize()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicFinalize2()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicGetSelectionContext2()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicGetVolume()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicGetPlaybackStatus()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicSetPlaybackCommand2()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicSetPlaybackCommand()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicSelectContents2()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicSelectContents()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicInitialize2()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicSetVolume()
+{
+	throw EXCEPTION("");
+}
+
+s32 cellMusicGetVolume2()
+{
+	throw EXCEPTION("");
+}
+
+
+Module cellMusic("cellMusic", []()
+{
+	REG_FUNC(cellMusic, cellMusicGetSelectionContext);
+	REG_FUNC(cellMusic, cellMusicSetSelectionContext2);
+	REG_FUNC(cellMusic, cellMusicSetVolume2);
+	REG_FUNC(cellMusic, cellMusicGetContentsId);
+	REG_FUNC(cellMusic, cellMusicSetSelectionContext);
+	REG_FUNC(cellMusic, cellMusicInitialize2SystemWorkload);
+	REG_FUNC(cellMusic, cellMusicGetPlaybackStatus2);
+	REG_FUNC(cellMusic, cellMusicGetContentsId2);
+	REG_FUNC(cellMusic, cellMusicFinalize);
+	REG_FUNC(cellMusic, cellMusicInitializeSystemWorkload);
+	REG_FUNC(cellMusic, cellMusicInitialize);
+	REG_FUNC(cellMusic, cellMusicFinalize2);
+	REG_FUNC(cellMusic, cellMusicGetSelectionContext2);
+	REG_FUNC(cellMusic, cellMusicGetVolume);
+	REG_FUNC(cellMusic, cellMusicGetPlaybackStatus);
+	REG_FUNC(cellMusic, cellMusicSetPlaybackCommand2);
+	REG_FUNC(cellMusic, cellMusicSetPlaybackCommand);
+	REG_FUNC(cellMusic, cellMusicSelectContents2);
+	REG_FUNC(cellMusic, cellMusicSelectContents);
+	REG_FUNC(cellMusic, cellMusicInitialize2);
+	REG_FUNC(cellMusic, cellMusicSetVolume);
+	REG_FUNC(cellMusic, cellMusicGetVolume2);
+});
diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp
index da47cfdcef..f0fbb5dcd7 100644
--- a/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp
+++ b/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp
@@ -1,8 +1,8 @@
 #include "stdafx.h"
-#if 0
+#include "Emu/Memory/Memory.h"
+#include "Emu/SysCalls/Modules.h"
 
-void cellMusicDecode_init();
-Module cellMusicDecode(0x004f, cellMusicDecode_init);
+extern Module cellMusicDecode;
 
 // Return Codes
 enum
@@ -24,67 +24,128 @@ enum
 	CELL_MUSIC_DECODE_ERROR_GENERIC           = 0x8002C1FF,
 };
 
-int cellMusicDecodeInitialize()
+s32 cellMusicDecodeInitialize()
 {
 	UNIMPLEMENTED_FUNC(cellMusicDecode);
 	return CELL_OK;
 }
 
-int cellMusicDecodeInitializeSystemWorkload()
+s32 cellMusicDecodeInitializeSystemWorkload()
 {
 	UNIMPLEMENTED_FUNC(cellMusicDecode);
 	return CELL_OK;
 }
 
-int cellMusicDecodeFinalize()
+s32 cellMusicDecodeFinalize()
 {
 	UNIMPLEMENTED_FUNC(cellMusicDecode);
 	return CELL_OK;
 }
 
-int cellMusicDecodeSelectContents()
+s32 cellMusicDecodeSelectContents()
 {
 	UNIMPLEMENTED_FUNC(cellMusicDecode);
 	return CELL_OK;
 }
 
-int cellMusicDecodeSetDecodeCommand()
+s32 cellMusicDecodeSetDecodeCommand()
 {
 	UNIMPLEMENTED_FUNC(cellMusicDecode);
 	return CELL_OK;
 }
 
-int cellMusicDecodeGetDecodeStatus()
+s32 cellMusicDecodeGetDecodeStatus()
 {
 	UNIMPLEMENTED_FUNC(cellMusicDecode);
 	return CELL_OK;
 }
 
-int cellMusicDecodeRead()
+s32 cellMusicDecodeRead()
 {
 	UNIMPLEMENTED_FUNC(cellMusicDecode);
 	return CELL_OK;
 }
 
-int cellMusicDecodeGetSelectionContext()
+s32 cellMusicDecodeGetSelectionContext()
 {
 	UNIMPLEMENTED_FUNC(cellMusicDecode);
 	return CELL_OK;
 }
 
-int cellMusicDecodeSetSelectionContext()
+s32 cellMusicDecodeSetSelectionContext()
 {
 	UNIMPLEMENTED_FUNC(cellMusicDecode);
 	return CELL_OK;
 }
 
-int cellMusicDecodeGetContentsId()
+s32 cellMusicDecodeGetContentsId()
 {
 	UNIMPLEMENTED_FUNC(cellMusicDecode);
 	return CELL_OK;
 }
 
-void cellMusicDecode_init()
+s32 cellMusicDecodeInitialize2()
+{
+	UNIMPLEMENTED_FUNC(cellMusicDecode);
+	return CELL_OK;
+}
+
+s32 cellMusicDecodeInitialize2SystemWorkload()
+{
+	UNIMPLEMENTED_FUNC(cellMusicDecode);
+	return CELL_OK;
+}
+
+s32 cellMusicDecodeFinalize2()
+{
+	UNIMPLEMENTED_FUNC(cellMusicDecode);
+	return CELL_OK;
+}
+
+s32 cellMusicDecodeSelectContents2()
+{
+	UNIMPLEMENTED_FUNC(cellMusicDecode);
+	return CELL_OK;
+}
+
+s32 cellMusicDecodeSetDecodeCommand2()
+{
+	UNIMPLEMENTED_FUNC(cellMusicDecode);
+	return CELL_OK;
+}
+
+s32 cellMusicDecodeGetDecodeStatus2()
+{
+	UNIMPLEMENTED_FUNC(cellMusicDecode);
+	return CELL_OK;
+}
+
+s32 cellMusicDecodeRead2()
+{
+	UNIMPLEMENTED_FUNC(cellMusicDecode);
+	return CELL_OK;
+}
+
+s32 cellMusicDecodeGetSelectionContext2()
+{
+	UNIMPLEMENTED_FUNC(cellMusicDecode);
+	return CELL_OK;
+}
+
+s32 cellMusicDecodeSetSelectionContext2()
+{
+	UNIMPLEMENTED_FUNC(cellMusicDecode);
+	return CELL_OK;
+}
+
+s32 cellMusicDecodeGetContentsId2()
+{
+	UNIMPLEMENTED_FUNC(cellMusicDecode);
+	return CELL_OK;
+}
+
+
+Module cellMusicDecode("cellMusicDecode", []()
 {
 	REG_FUNC(cellMusicDecode, cellMusicDecodeInitialize);
 	REG_FUNC(cellMusicDecode, cellMusicDecodeInitializeSystemWorkload);
@@ -96,5 +157,15 @@ void cellMusicDecode_init()
 	REG_FUNC(cellMusicDecode, cellMusicDecodeGetSelectionContext);
 	REG_FUNC(cellMusicDecode, cellMusicDecodeSetSelectionContext);
 	REG_FUNC(cellMusicDecode, cellMusicDecodeGetContentsId);
-}
-#endif
+
+	REG_FUNC(cellMusicDecode, cellMusicDecodeInitialize2);
+	REG_FUNC(cellMusicDecode, cellMusicDecodeInitialize2SystemWorkload);
+	REG_FUNC(cellMusicDecode, cellMusicDecodeFinalize2);
+	REG_FUNC(cellMusicDecode, cellMusicDecodeSelectContents2);
+	REG_FUNC(cellMusicDecode, cellMusicDecodeSetDecodeCommand2);
+	REG_FUNC(cellMusicDecode, cellMusicDecodeGetDecodeStatus2);
+	REG_FUNC(cellMusicDecode, cellMusicDecodeRead2);
+	REG_FUNC(cellMusicDecode, cellMusicDecodeGetSelectionContext2);
+	REG_FUNC(cellMusicDecode, cellMusicDecodeSetSelectionContext2);
+	REG_FUNC(cellMusicDecode, cellMusicDecodeGetContentsId2);
+});
diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp
index 0eccd57292..571a4a5e88 100644
--- a/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp
+++ b/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp
@@ -1,8 +1,8 @@
 #include "stdafx.h"
-#if 0
+#include "Emu/Memory/Memory.h"
+#include "Emu/SysCalls/Modules.h"
 
-void cellMusicExport_init();
-Module cellMusicExport(0xf02c, cellMusicExport_init);
+extern Module cellMusicExport;
 
 // Return Codes
 enum
@@ -21,42 +21,41 @@ enum
 	CELL_MUSIC_EXPORT_UTIL_ERROR_INITIALIZE   = 0x8002c60a,
 };
 
-int cellMusicExportInitialize()
+s32 cellMusicExportInitialize()
 {
 	UNIMPLEMENTED_FUNC(cellMusicExport);
 	return CELL_OK;
 }
 
-int cellMusicExportInitialize2()
+s32 cellMusicExportInitialize2()
 {
 	UNIMPLEMENTED_FUNC(cellMusicExport);
 	return CELL_OK;
 }
 
-int cellMusicExportFinalize()
+s32 cellMusicExportFinalize()
 {
 	UNIMPLEMENTED_FUNC(cellMusicExport);
 	return CELL_OK;
 }
 
-int cellMusicExportFromFile()
+s32 cellMusicExportFromFile()
 {
 	UNIMPLEMENTED_FUNC(cellMusicExport);
 	return CELL_OK;
 }
 
-int cellMusicExportProgress()
+s32 cellMusicExportProgress()
 {
 	UNIMPLEMENTED_FUNC(cellMusicExport);
 	return CELL_OK;
 }
 
-void cellMusicExport_init()
+Module cellMusicExport("cellMusicExport", []()
 {
 	REG_FUNC(cellMusicExport, cellMusicExportInitialize);
 	REG_FUNC(cellMusicExport, cellMusicExportInitialize2);
 	REG_FUNC(cellMusicExport, cellMusicExportFinalize);
 	REG_FUNC(cellMusicExport, cellMusicExportFromFile);
 	REG_FUNC(cellMusicExport, cellMusicExportProgress);
-}
-#endif
+});
diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutilMisc.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutilMisc.cpp
new file mode 100644
index 0000000000..7658cbee4c
--- /dev/null
+++ b/rpcs3/Emu/SysCalls/Modules/cellSysutilMisc.cpp
@@ -0,0 +1,15 @@
+#include "stdafx.h"
+#include "Emu/Memory/Memory.h"
+#include "Emu/SysCalls/Modules.h"
+
+extern Module cellSysutilMisc;
+
+s32 cellSysutilGetLicenseArea()
+{
+	throw EXCEPTION("");
+}
+
+Module cellSysutilMisc("cellSysutilMisc", []()
+{
+	REG_FUNC(cellSysutilMisc, cellSysutilGetLicenseArea);
+});
diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj
index 70ae05db53..57ffc2c322 100644
--- a/rpcs3/emucore.vcxproj
+++ b/rpcs3/emucore.vcxproj
@@ -48,6 +48,7 @@
     <ClCompile Include="Emu\SysCalls\Modules\cellDaisy.cpp" />
     <ClCompile Include="Emu\SysCalls\Modules\cellFs.cpp" />
     <ClCompile Include="Emu\SysCalls\Modules\cellGameExec.cpp" />
+    <ClCompile Include="Emu\SysCalls\Modules\cellMusic.cpp" />
     <ClCompile Include="Emu\SysCalls\Modules\cellSpudll.cpp" />
     <ClCompile Include="Emu\SysCalls\Modules\cellSpursSpu.cpp" />
     <ClCompile Include="Crypto\aes.cpp" />
@@ -263,6 +264,7 @@
     <ClCompile Include="Emu\SysCalls\Modules\cellSysutilAp.cpp" />
     <ClCompile Include="Emu\SysCalls\Modules\cellSaveData.cpp" />
     <ClCompile Include="Emu\SysCalls\Modules\cellSysutilAvc2.cpp" />
+    <ClCompile Include="Emu\SysCalls\Modules\cellSysutilMisc.cpp" />
     <ClCompile Include="Emu\SysCalls\Modules\cellUsbd.cpp" />
     <ClCompile Include="Emu\SysCalls\Modules\cellUsbpspcm.cpp" />
     <ClCompile Include="Emu\SysCalls\Modules\cellUserInfo.cpp" />
diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters
index 9360ffc050..54855a1986 100644
--- a/rpcs3/emucore.vcxproj.filters
+++ b/rpcs3/emucore.vcxproj.filters
@@ -413,15 +413,6 @@
     <ClCompile Include="Emu\SysCalls\ModuleManager.cpp">
       <Filter>Emu\SysCalls</Filter>
     </ClCompile>
-    <ClCompile Include="Emu\SysCalls\Modules\cellImejp.cpp">
-      <Filter>Emu\SysCalls\currently_unused</Filter>
-    </ClCompile>
-    <ClCompile Include="Emu\SysCalls\Modules\cellMusicDecode.cpp">
-      <Filter>Emu\SysCalls\currently_unused</Filter>
-    </ClCompile>
-    <ClCompile Include="Emu\SysCalls\Modules\cellMusicExport.cpp">
-      <Filter>Emu\SysCalls\currently_unused</Filter>
-    </ClCompile>
     <ClCompile Include="Emu\SysCalls\Modules\cellPhotoDecode.cpp">
       <Filter>Emu\SysCalls\currently_unused</Filter>
     </ClCompile>
@@ -899,6 +890,21 @@
     <ClCompile Include="Emu\SysCalls\Modules\cellGameExec.cpp">
       <Filter>Emu\SysCalls\Modules</Filter>
     </ClCompile>
+    <ClCompile Include="Emu\SysCalls\Modules\cellImejp.cpp">
+      <Filter>Emu\SysCalls\Modules</Filter>
+    </ClCompile>
+    <ClCompile Include="Emu\SysCalls\Modules\cellSysutilMisc.cpp">
+      <Filter>Emu\SysCalls\Modules</Filter>
+    </ClCompile>
+    <ClCompile Include="Emu\SysCalls\Modules\cellMusicDecode.cpp">
+      <Filter>Emu\SysCalls\Modules</Filter>
+    </ClCompile>
+    <ClCompile Include="Emu\SysCalls\Modules\cellMusicExport.cpp">
+      <Filter>Emu\SysCalls\Modules</Filter>
+    </ClCompile>
+    <ClCompile Include="Emu\SysCalls\Modules\cellMusic.cpp">
+      <Filter>Emu\SysCalls\Modules</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="Crypto\aes.h">