CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
Path: blob/master/Core/HLE/HLETables.cpp
Views: 1401
// Copyright (c) 2012- PPSSPP Project.12// This program is free software: you can redistribute it and/or modify3// it under the terms of the GNU General Public License as published by4// the Free Software Foundation, version 2.0 or later versions.56// This program is distributed in the hope that it will be useful,7// but WITHOUT ANY WARRANTY; without even the implied warranty of8// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9// GNU General Public License 2.0 for more details.1011// A copy of the GPL 2.0 should have been included with the program.12// If not, see http://www.gnu.org/licenses/1314// Official git repository and contact information can be found at15// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.1617#include "Core/HLE/HLE.h"18#include "Core/HLE/HLETables.h"19#include "Core/HLE/FunctionWrappers.h"2021#include "sceAtrac.h"22#include "sceAudio.h"23#include "sceAudiocodec.h"24#include "sceAudioRouting.h"25#include "sceCcc.h"26#include "sceChnnlsv.h"27#include "sceCtrl.h"28#include "sceDeflt.h"29#include "sceDisplay.h"30#include "sceDmac.h"31#include "sceFont.h"32#include "sceGameUpdate.h"33#include "sceGe.h"34#include "sceHeap.h"35#include "sceHprm.h"36#include "sceHttp.h"37#include "sceImpose.h"38#include "sceIo.h"39#include "sceJpeg.h"40#include "sceKernel.h"41#include "sceKernelEventFlag.h"42#include "sceKernelHeap.h"43#include "sceKernelMemory.h"44#include "sceKernelInterrupt.h"45#include "sceKernelModule.h"46#include "sceKernelSemaphore.h"47#include "sceKernelThread.h"48#include "sceKernelTime.h"49#include "sceMd5.h"50#include "sceMp4.h"51#include "sceMp3.h"52#include "sceNet.h"53#include "sceNetAdhoc.h"54#include "sceNp.h"55#include "sceMpeg.h"56#include "sceOpenPSID.h"57#include "sceP3da.h"58#include "sceParseHttp.h"59#include "sceParseUri.h"60#include "scePauth.h"61#include "scePower.h"62#include "scePspNpDrm_user.h"63#include "scePsmf.h"64#include "sceRtc.h"65#include "sceSas.h"66#include "sceSircs.h"67#include "sceSsl.h"68#include "sceUmd.h"69#include "sceUsb.h"70#include "sceUsbAcc.h"71#include "sceUsbCam.h"72#include "sceUsbGps.h"73#include "sceUsbMic.h"74#include "sceUtility.h"75#include "sceVaudio.h"76#include "sceMt19937.h"77#include "sceSha256.h"78#include "sceAdler.h"79#include "sceSfmt19937.h"80#include "sceG729.h"81#include "KUBridge.h"8283#define N(s) s8485//\*\*\ found\:\ {[a-zA-Z]*}\ {0x[a-zA-Z0-9]*}\ \*\*86//{FID(\2),0,N("\1")},8788//Metal Gear Acid modules:89//kjfs90//sound91//zlibdec92const HLEFunction FakeSysCalls[] = {93{NID_THREADRETURN, __KernelReturnFromThread, "__KernelReturnFromThread", 'x', ""},94{NID_CALLBACKRETURN, __KernelReturnFromMipsCall, "__KernelReturnFromMipsCall", 'x', ""},95{NID_INTERRUPTRETURN, __KernelReturnFromInterrupt, "__KernelReturnFromInterrupt", 'x', ""},96{NID_EXTENDRETURN, __KernelReturnFromExtendStack, "__KernelReturnFromExtendStack", 'x', ""},97{NID_MODULERETURN, __KernelReturnFromModuleFunc, "__KernelReturnFromModuleFunc", 'x', ""},98{NID_IDLE, __KernelIdle, "_sceKernelIdle", 'x', ""},99{NID_GPUREPLAY, __KernelGPUReplay, "__KernelGPUReplay", 'x', ""},100{NID_HLECALLRETURN, HLEReturnFromMipsCall, "HLEReturnFromMipsCall", 'x', ""},101};102103const HLEFunction UtilsForUser[] =104{105{0X91E4F6A7, &WrapU_V<sceKernelLibcClock>, "sceKernelLibcClock", 'x', "" },106{0X27CC57F0, &WrapU_U<sceKernelLibcTime>, "sceKernelLibcTime", 'x', "x" },107{0X71EC4271, &WrapU_UU<sceKernelLibcGettimeofday>, "sceKernelLibcGettimeofday", 'x', "xx" },108{0XBFA98062, &WrapI_UI<sceKernelDcacheInvalidateRange>, "sceKernelDcacheInvalidateRange", 'i', "xi" },109{0XC8186A58, &WrapI_UIU<sceKernelUtilsMd5Digest>, "sceKernelUtilsMd5Digest", 'i', "xix"},110{0X9E5C5086, &WrapI_U<sceKernelUtilsMd5BlockInit>, "sceKernelUtilsMd5BlockInit", 'i', "x" },111{0X61E1E525, &WrapI_UUI<sceKernelUtilsMd5BlockUpdate>, "sceKernelUtilsMd5BlockUpdate", 'i', "xxi"},112{0XB8D24E78, &WrapI_UU<sceKernelUtilsMd5BlockResult>, "sceKernelUtilsMd5BlockResult", 'i', "xx" },113{0X840259F1, &WrapI_UIU<sceKernelUtilsSha1Digest>, "sceKernelUtilsSha1Digest", 'i', "xix"},114{0XF8FCD5BA, &WrapI_U<sceKernelUtilsSha1BlockInit>, "sceKernelUtilsSha1BlockInit", 'i', "x" },115{0X346F6DA8, &WrapI_UUI<sceKernelUtilsSha1BlockUpdate>, "sceKernelUtilsSha1BlockUpdate", 'i', "xxi"},116{0X585F1C09, &WrapI_UU<sceKernelUtilsSha1BlockResult>, "sceKernelUtilsSha1BlockResult", 'i', "xx" },117{0XE860E75E, &WrapU_UU<sceKernelUtilsMt19937Init>, "sceKernelUtilsMt19937Init", 'x', "xx" },118{0X06FB8A63, &WrapU_U<sceKernelUtilsMt19937UInt>, "sceKernelUtilsMt19937UInt", 'x', "x" },119{0X37FB5C42, &WrapU_V<sceKernelGetGPI>, "sceKernelGetGPI", 'x', "" },120{0X6AD345D7, &WrapV_U<sceKernelSetGPO>, "sceKernelSetGPO", 'v', "x" },121{0X79D1C3FA, &WrapI_V<sceKernelDcacheWritebackAll>, "sceKernelDcacheWritebackAll", 'i', "" },122{0XB435DEC5, &WrapI_V<sceKernelDcacheWritebackInvalidateAll>, "sceKernelDcacheWritebackInvalidateAll", 'i', "" },123{0X3EE30821, &WrapI_UI<sceKernelDcacheWritebackRange>, "sceKernelDcacheWritebackRange", 'i', "xi" },124{0X34B9FA9E, &WrapI_UI<sceKernelDcacheWritebackInvalidateRange>, "sceKernelDcacheWritebackInvalidateRange", 'i', "xi" },125{0XC2DF770E, &WrapI_UI<sceKernelIcacheInvalidateRange>, "sceKernelIcacheInvalidateRange", 'i', "xi" },126{0X80001C4C, nullptr, "sceKernelDcacheProbe", '?', "" },127{0X16641D70, nullptr, "sceKernelDcacheReadTag", '?', "" },128{0X4FD31C9D, nullptr, "sceKernelIcacheProbe", '?', "" },129{0XFB05FAD0, nullptr, "sceKernelIcacheReadTag", '?', "" },130{0X920F104A, &WrapU_V<sceKernelIcacheInvalidateAll>, "sceKernelIcacheInvalidateAll", 'x', "" }131};132133const HLEFunction LoadCoreForKernel[] =134{135{0XACE23476, nullptr, "sceKernelCheckPspConfig", '?', "" },136{0X7BE1421C, nullptr, "sceKernelCheckExecFile", '?', "" },137{0XBF983EF2, nullptr, "sceKernelProbeExecutableObject", '?', "" },138{0X7068E6BA, nullptr, "sceKernelLoadExecutableObject", '?', "" },139{0XB4D6FECC, nullptr, "sceKernelApplyElfRelSection", '?', "" },140{0X54AB2675, nullptr, "sceKernelApplyPspRelSection", '?', "" },141{0X2952F5AC, nullptr, "sceKernelDcacheWBinvAll", '?', "" },142{0xD8779AC6, &WrapU_V<sceKernelIcacheClearAll>, "sceKernelIcacheClearAll", 'x', "", HLE_KERNEL_SYSCALL },143{0X99A695F0, nullptr, "sceKernelRegisterLibrary", '?', "" },144{0X5873A31F, nullptr, "sceKernelRegisterLibraryForUser", '?', "" },145{0X0B464512, nullptr, "sceKernelReleaseLibrary", '?', "" },146{0X9BAF90F6, nullptr, "sceKernelCanReleaseLibrary", '?', "" },147{0X0E760DBA, nullptr, "sceKernelLinkLibraryEntries", '?', "" },148{0X0DE1F600, nullptr, "sceKernelLinkLibraryEntriesForUser", '?', "" },149{0XDA1B09AA, nullptr, "sceKernelUnLinkLibraryEntries", '?', "" },150{0XC99DD47A, nullptr, "sceKernelQueryLoadCoreCB", '?', "" },151{0X616FCCCD, nullptr, "sceKernelSetBootCallbackLevel", '?', "" },152{0XF32A2940, nullptr, "sceKernelModuleFromUID", '?', "" },153{0XCD0F3BAC, nullptr, "sceKernelCreateModule", '?', "" },154{0X6B2371C2, nullptr, "sceKernelDeleteModule", '?', "" },155{0X7320D964, nullptr, "sceKernelModuleAssign", '?', "" },156{0X44B292AB, nullptr, "sceKernelAllocModule", '?', "" },157{0XBD61D4D5, nullptr, "sceKernelFreeModule", '?', "" },158{0XAE7C6E76, nullptr, "sceKernelRegisterModule", '?', "" },159{0X74CF001A, nullptr, "sceKernelReleaseModule", '?', "" },160{0XFB8AE27D, nullptr, "sceKernelFindModuleByAddress", '?', "" },161{0XCCE4A157, &WrapU_U<sceKernelFindModuleByUID>, "sceKernelFindModuleByUID", 'x', "x" , HLE_KERNEL_SYSCALL },162{0X82CE54ED, nullptr, "sceKernelModuleCount", '?', "" },163{0XC0584F0C, nullptr, "sceKernelGetModuleList", '?', "" },164{0XCF8A41B1, &WrapU_C<sceKernelFindModuleByName>, "sceKernelFindModuleByName", 'x', "s", HLE_KERNEL_SYSCALL },165{0XB95FA50D, nullptr, "LoadCoreForKernel_B95FA50D", '?', "" },166};167168169const HLEFunction KDebugForKernel[] =170{171{0XE7A3874D, nullptr, "sceKernelRegisterAssertHandler", '?', "" },172{0X2FF4E9F9, nullptr, "sceKernelAssert", '?', "" },173{0X9B868276, nullptr, "sceKernelGetDebugPutchar", '?', "" },174{0XE146606D, nullptr, "sceKernelRegisterDebugPutchar", '?', "" },175{0X7CEB2C09, &WrapU_V<sceKernelRegisterKprintfHandler>, "sceKernelRegisterKprintfHandler", 'x', "", HLE_KERNEL_SYSCALL },176{0X84F370BC, nullptr, "Kprintf", '?', "" },177{0X5CE9838B, nullptr, "sceKernelDebugWrite", '?', "" },178{0X66253C4E, nullptr, "sceKernelRegisterDebugWrite", '?', "" },179{0XDBB5597F, nullptr, "sceKernelDebugRead", '?', "" },180{0XE6554FDA, nullptr, "sceKernelRegisterDebugRead", '?', "" },181{0XB9C643C9, nullptr, "sceKernelDebugEcho", '?', "" },182{0X7D1C74F0, nullptr, "sceKernelDebugEchoSet", '?', "" },183{0X24C32559, nullptr, "sceKernelDipsw", '?', "" },184{0XD636B827, nullptr, "sceKernelRemoveByDebugSection", '?', "" },185{0X5282DD5E, nullptr, "sceKernelDipswSet", '?', "" },186{0X9F8703E4, nullptr, "sceKernelDipswCpTime", '?', "" },187{0X333DCEC7, nullptr, "sceKernelSm1RegisterOperations", '?', "" },188{0XE892D9A1, nullptr, "sceKernelSm1ReferOperations", '?', "" },189{0XA126F497, nullptr, "KDebugForKernel_A126F497", '?', "" },190{0XB7251823, nullptr, "sceKernelAcceptMbogoSig", '?', "" },191};192193const HLEFunction pspeDebug[] =194{195{0XDEADBEAF, nullptr, "pspeDebugWrite", '?', "" },196};197198199const HLEModule moduleList[] =200{201{"FakeSysCalls", ARRAY_SIZE(FakeSysCalls), FakeSysCalls},202{"UtilsForUser", ARRAY_SIZE(UtilsForUser), UtilsForUser},203{"KDebugForKernel", ARRAY_SIZE(KDebugForKernel), KDebugForKernel},204{"sceSAScore"},205{"SceBase64_Library"},206{"sceCert_Loader"},207{"SceFont_Library"},208{"sceNetApctl"},209{"sceSIRCS_IrDA_Driver"},210{"Pspnet_Scan"},211{"Pspnet_Show_MacAddr"},212{"pspeDebug", ARRAY_SIZE(pspeDebug), pspeDebug},213};214215static const int numModules = ARRAY_SIZE(moduleList);216217void RegisterAllModules() {218Register_Kernel_Library();219Register_ThreadManForUser();220Register_ThreadManForKernel();221Register_LoadExecForUser();222Register_UtilsForKernel();223Register_SysMemUserForUser();224Register_InterruptManager();225Register_IoFileMgrForUser();226Register_ModuleMgrForUser();227Register_ModuleMgrForKernel();228Register_StdioForUser();229230Register_sceHprm();231Register_sceCcc();232Register_sceCtrl();233Register_sceDisplay();234Register_sceAudio();235Register_sceSasCore();236Register_sceFont();237Register_sceNet();238Register_sceNetAdhoc();239Register_sceRtc();240Register_sceWlanDrv();241Register_sceMpeg();242Register_sceMp3();243Register_sceHttp();244Register_scePower();245Register_sceImpose();246Register_sceSuspendForUser();247Register_sceGe_user();248Register_sceUmdUser();249Register_sceDmac();250Register_sceUtility();251Register_sceAtrac3plus();252Register_scePsmf();253Register_scePsmfPlayer();254Register_sceOpenPSID();255Register_sceParseUri();256Register_sceSsl();257Register_sceParseHttp();258Register_sceVaudio();259Register_sceUsb();260Register_sceChnnlsv();261Register_sceNpDrm();262Register_sceP3da();263Register_sceGameUpdate();264Register_sceDeflt();265Register_sceMp4();266Register_scePauth();267Register_sceNp();268Register_sceNpCommerce2();269Register_sceNpService();270Register_sceNpAuth();271Register_sceMd5();272Register_sceJpeg();273Register_sceAudiocodec();274Register_sceHeap();275276for (int i = 0; i < numModules; i++) {277RegisterModule(moduleList[i].name, moduleList[i].numFunctions, moduleList[i].funcTable);278}279280// IMPORTANT: New modules have to be added at the end, or they will break savestates.281282Register_StdioForKernel();283RegisterModule("LoadCoreForKernel", ARRAY_SIZE(LoadCoreForKernel), LoadCoreForKernel);284Register_IoFileMgrForKernel();285Register_LoadExecForKernel();286Register_SysMemForKernel();287Register_sceMt19937();288Register_SysclibForKernel();289Register_sceCtrl_driver();290Register_sceDisplay_driver();291Register_sceMpegbase();292Register_sceUsbGps();293Register_sceLibFttt();294Register_sceSha256();295Register_sceAdler();296Register_sceSfmt19937();297Register_sceAudioRouting();298Register_sceUsbCam();299Register_sceG729();300Register_sceNetUpnp();301Register_sceNetIfhandle();302Register_KUBridge();303Register_sceUsbAcc();304Register_sceUsbMic();305Register_sceOpenPSID_driver();306Register_semaphore();307Register_sceDdrdb();308Register_mp4msv();309Register_InterruptManagerForKernel();310Register_sceSircs();311// add new modules here.312}313314315316