Skip to content

Commit

Permalink
Android: Get RSP core to compile on android
Browse files Browse the repository at this point in the history
  • Loading branch information
project64 committed Nov 9, 2023
1 parent 09cc344 commit 0c8b10b
Show file tree
Hide file tree
Showing 25 changed files with 324 additions and 259 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -63,6 +63,8 @@ Thumbs.db
/Plugin/RSP/RSP_d 1.7.dll
/Plugin/RSP/RSP-HLE_d.dll
/Plugin/RSP/RSP-HLE.dll
/Plugin/RSP/Project64-RSP-Basic_d.dll
/Plugin/RSP/Project64-RSP-Basic.dll
/Plugin64/AndroidAudio
/Plugin64/Audio/AndroidAudio_d.dll
/Plugin64/Audio/AndroidAudio.dll
Expand Down
1 change: 1 addition & 0 deletions Android/Script/UpdateVersionNumber.cmd
Expand Up @@ -8,6 +8,7 @@ cd /d %origdir%

"%base_dir%\Android\Script\UpdateVersion.exe" "%base_dir%\Android\config\version.gradle.in" "%base_dir%\Android\config\version.gradle"
"%base_dir%\Android\Script\UpdateVersion.exe" "%base_dir%\Source\Project64-core\Version.h.in" "%base_dir%\Source\Project64-core\Version.h"
"%base_dir%\Android\Script\UpdateVersion.exe" "%base_dir%\Source\Project64-rsp-core\Version.h.in" "%base_dir%\Source\Project64-rsp-core\Version.h"
"%base_dir%\Android\Script\UpdateVersion.exe" "%base_dir%\Source\Project64-audio\Version.h.in" "%base_dir%\Source\Project64-audio\Version.h"
"%base_dir%\Android\Script\UpdateVersion.exe" "%base_dir%\Source\Project64-video\Version.h.in" "%base_dir%\Source\Project64-video\Version.h"
"%base_dir%\Android\Script\UpdateVersion.exe" "%base_dir%\Source\RSP\Version.h.in" "%base_dir%\Source\RSP\Version.h"
Expand Down
2 changes: 2 additions & 0 deletions Android/app/build.gradle
Expand Up @@ -39,9 +39,11 @@ dependencies {
implementation project(':jni:3rdParty:zlib')
implementation project(':jni:Common')
implementation project(':jni:Settings')
implementation project(':jni:Project64-rsp-core')
implementation project(':jni:Project64-core')
implementation project(':jni:Project64-bridge')
implementation project(':jni:Project64-video')
implementation project(':jni:Project64-audio')
implementation project(':jni:Plugin-input')
implementation project(':jni:Plugin-rsp')
}
8 changes: 5 additions & 3 deletions Android/jni/Plugin-Rsp/CMakeLists.txt
Expand Up @@ -2,13 +2,15 @@ cmake_minimum_required(VERSION 2.8.12)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_STANDARD 99)

project("Project64-rsp")
project("Plugin-rsp")
include_directories(..)

add_library(Project64-rsp SHARED
add_library(Plugin-rsp SHARED
main.cpp)

add_definitions(-DANDROID)

ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../Common ${CMAKE_CURRENT_BINARY_DIR}/Common)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../Project64-rsp-core ${CMAKE_CURRENT_BINARY_DIR}/Project64-rsp-core)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../Settings ${CMAKE_CURRENT_BINARY_DIR}/Settings)
target_link_libraries(Project64-rsp settings)
target_link_libraries(Plugin-rsp Project64-rsp-core settings Common)
3 changes: 2 additions & 1 deletion Android/jni/Project64-bridge/CMakeLists.txt
Expand Up @@ -20,5 +20,6 @@ add_definitions(-DANDROID)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../3rdParty/asmjit ${CMAKE_CURRENT_BINARY_DIR}/3rdParty/asmjit)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../3rdParty/zlib ${CMAKE_CURRENT_BINARY_DIR}/3rdParty/zlib)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../Common ${CMAKE_CURRENT_BINARY_DIR}/Common)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../Project64-rsp-core ${CMAKE_CURRENT_BINARY_DIR}/Project64-rsp-core)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../Project64-core ${CMAKE_CURRENT_BINARY_DIR}/Project64-core)
target_link_libraries(Project64-bridge asmjit zlib Project64-core Common log)
target_link_libraries(Project64-bridge asmjit zlib Project64-rsp-core Project64-core Common log)
3 changes: 1 addition & 2 deletions Android/jni/Project64-core/CMakeLists.txt
Expand Up @@ -106,8 +106,7 @@ add_library(Project64-core STATIC
Settings/SettingType/SettingsType-TempString.cpp
Settings/DebugSettings.cpp
Settings/GameSettings.cpp
Settings/N64SystemSettings.cpp
../Project64-rsp-core/cpu/RSPRegisterHandler.cpp)
Settings/N64SystemSettings.cpp)

add_definitions(-DANDROID)

Expand Down
2 changes: 2 additions & 0 deletions Android/jni/Project64-rsp-core/.gitignore
@@ -1,3 +1,5 @@
/.cxx
/build
*.c
*.cpp
*.h
Expand Down
40 changes: 36 additions & 4 deletions Android/jni/Project64-rsp-core/CMakeLists.txt
Expand Up @@ -2,11 +2,43 @@ cmake_minimum_required(VERSION 2.8.12)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_STANDARD 99)

project("Project64.rsp.core")
project("Project64-rsp-core")

add_library(Project64.rsp.core STATIC
Hle/alist.cpp)
add_library(Project64-rsp-core STATIC
cpu/RspClamp.cpp
cpu/RSPCpu.cpp
cpu/RSPiInstruction.cpp
cpu/RSPInterpreterCPU.cpp
cpu/RSPInterpreterOps.cpp
cpu/RspLog.cpp
cpu/RspMemory.cpp
cpu/RSPRegister.cpp
cpu/RSPRegisterHandler.cpp
cpu/RSPRegisterHandlerPlugin.cpp
cpu/RspTypes.cpp
Hle/alist.cpp
Hle/alist_audio.cpp
Hle/alist_naudio.cpp
Hle/alist_nead.cpp
Hle/audio.cpp
Hle/cicx105.cpp
Hle/hle.cpp
Hle/jpeg.cpp
Hle/mem.cpp
Hle/mp3.cpp
Hle/musyx.cpp
Recompiler/Mmx.cpp
Recompiler/RspProfiling.cpp
Recompiler/RspRecompilerAnalysis.cpp
Recompiler/RspRecompilerCPU.cpp
Recompiler/RspRecompilerOps.cpp
Recompiler/RspRecompilerSections.cpp
Recompiler/Sse.cpp
Recompiler/X86.cpp
Settings/RspSettings.cpp
RSPDebugger.cpp
RSPInfo.cpp)

add_definitions(-DANDROID)

target_link_libraries(Project64.rsp.core)
target_link_libraries(Project64-rsp-core)
2 changes: 1 addition & 1 deletion Android/settings.gradle
@@ -1,2 +1,2 @@
rootProject.name = 'Project64'
include ':app', ':jni:3rdParty:asmjit', ':jni:3rdParty:png', ':jni:3rdParty:zlib', ':jni:Common', ':jni:Settings', ':jni:Project64-core', ':jni:Project64-bridge', ':jni:Project64-video', ':jni:Project64-audio', ':jni:Plugin-input'
include ':app', ':jni:3rdParty:asmjit', ':jni:3rdParty:png', ':jni:3rdParty:zlib', ':jni:Common', ':jni:Settings', ':jni:Project64-rsp-core', ':jni:Project64-core', ':jni:Project64-bridge', ':jni:Project64-video', ':jni:Project64-audio', ':jni:Plugin-input', ':jni:Plugin-rsp'
18 changes: 11 additions & 7 deletions Source/Project64-rsp-core/RSPDebugger.h
@@ -1,15 +1,19 @@
#pragma once
#include <stdint.h>

#if !defined(_WIN32) && !defined(__interface)
#define __interface struct
#endif

__interface RSPDebugger
{
void ResetTimerList(void) = 0;
void StartingCPU(void) = 0;
void RspCyclesStart(void) = 0;
void RspCyclesStop(void) = 0;
void BeforeExecuteOp(void) = 0;
void UnknownOpcode(void) = 0;
void RDP_LogMF0(uint32_t PC, uint32_t Reg) = 0;
virtual void ResetTimerList(void) = 0;
virtual void StartingCPU(void) = 0;
virtual void RspCyclesStart(void) = 0;
virtual void RspCyclesStop(void) = 0;
virtual void BeforeExecuteOp(void) = 0;
virtual void UnknownOpcode(void) = 0;
virtual void RDP_LogMF0(uint32_t PC, uint32_t Reg) = 0;
};

extern RSPDebugger * g_RSPDebugger;
20 changes: 10 additions & 10 deletions Source/Project64-rsp-core/Recompiler/Mmx.cpp
@@ -1,4 +1,4 @@
#include "x86.h"
#include "X86.h"
#include <Project64-rsp-core/cpu/RSPRegisters.h>
#include <Project64-rsp-core/cpu/RspLog.h>
#include <Project64-rsp-core/cpu/RspMemory.h>
Expand Down Expand Up @@ -60,7 +60,7 @@ void MmxMoveRegToReg(int Dest, int Source)
PUTDST8(RecompPos, 0xC0 | x86Command);
}

void MmxMoveQwordVariableToReg(int Dest, void * Variable, char * VariableName)
void MmxMoveQwordVariableToReg(int Dest, void * Variable, const char * VariableName)
{
uint8_t x86Command = 0;

Expand All @@ -83,7 +83,7 @@ void MmxMoveQwordVariableToReg(int Dest, void * Variable, char * VariableName)
PUTDSTPTR(RecompPos, Variable);
}

void MmxMoveQwordRegToVariable(int Dest, void * Variable, char * VariableName)
void MmxMoveQwordRegToVariable(int Dest, void * Variable, const char * VariableName)
{
uint8_t x86Command = 0;

Expand Down Expand Up @@ -138,7 +138,7 @@ void MmxPorRegToReg(int Dest, int Source)
PUTDST8(RecompPos, 0xC0 | x86Command);
}

void MmxPorVariableToReg(void * Variable, char * VariableName, int Dest)
void MmxPorVariableToReg(void * Variable, const char * VariableName, int Dest)
{
uint8_t x86Command = 0;

Expand Down Expand Up @@ -193,7 +193,7 @@ void MmxPandRegToReg(int Dest, int Source)
PUTDST8(RecompPos, 0xC0 | x86Command);
}

void MmxPandVariableToReg(void * Variable, char * VariableName, int Dest)
void MmxPandVariableToReg(void * Variable, const char * VariableName, int Dest)
{
uint8_t x86Command = 0;

Expand Down Expand Up @@ -280,7 +280,7 @@ void MmxXorRegToReg(int Dest, int Source)
PUTDST8(RecompPos, 0xC0 | x86Command);
}

void MmxShuffleMemoryToReg(int Dest, void * Variable, char * VariableName, uint8_t Immed)
void MmxShuffleMemoryToReg(int Dest, void * Variable, const char * VariableName, uint8_t Immed)
{
uint8_t x86Command = 0;

Expand Down Expand Up @@ -368,7 +368,7 @@ void MmxPmullwRegToReg(int Dest, int Source)
PUTDST8(RecompPos, 0xC0 | x86Command);
}

void MmxPmullwVariableToReg(int Dest, void * Variable, char * VariableName)
void MmxPmullwVariableToReg(int Dest, void * Variable, const char * VariableName)
{
uint8_t x86Command = 0;

Expand Down Expand Up @@ -454,7 +454,7 @@ void MmxPmulhwRegToReg(int Dest, int Source)
PUTDST8(RecompPos, 0xC0 | x86Command);
}

void MmxPmulhwRegToVariable(int Dest, void * Variable, char * VariableName)
void MmxPmulhwRegToVariable(int Dest, void * Variable, const char * VariableName)
{
uint8_t x86Command = 0;

Expand Down Expand Up @@ -609,7 +609,7 @@ void MmxPsubswRegToReg(int Dest, int Source)
PUTDST8(RecompPos, 0xC0 | x86Command);
}

void MmxPaddswVariableToReg(int Dest, void * Variable, char * VariableName)
void MmxPaddswVariableToReg(int Dest, void * Variable, const char * VariableName)
{
uint8_t x86Command = 0;

Expand All @@ -632,7 +632,7 @@ void MmxPaddswVariableToReg(int Dest, void * Variable, char * VariableName)
PUTDSTPTR(RecompPos, Variable);
}

void MmxPsubswVariableToReg(int Dest, void * Variable, char * VariableName)
void MmxPsubswVariableToReg(int Dest, void * Variable, const char * VariableName)
{
uint8_t x86Command = 0;

Expand Down
15 changes: 8 additions & 7 deletions Source/Project64-rsp-core/Recompiler/RspProfiling.cpp
Expand Up @@ -5,12 +5,13 @@
#include <Common/File.h>
#include <Common/Log.h>
#include <Common/StdString.h>
#include <Settings/Settings.h>
#include <map>
#include <vector>

class CRspProfiling
{
typedef std::map<uint32_t, __int64> PROFILE_ENRTIES;
typedef std::map<uint32_t, int64_t> PROFILE_ENRTIES;
typedef PROFILE_ENRTIES::iterator PROFILE_ENRTY;
typedef PROFILE_ENRTIES::value_type PROFILE_VALUE;
typedef struct
Expand Down Expand Up @@ -47,7 +48,7 @@ class CRspProfiling
m_StartTimeHi = HiValue;
m_StartTimeLo = LoValue;
#else
__debugbreak();
g_Notify->BreakPoint(__FILE__, __LINE__);
#endif
return OldTimerAddr;
}
Expand All @@ -68,9 +69,9 @@ class CRspProfiling
popad
}

__int64 StopTime = ((unsigned __int64)HiValue << 32) + (unsigned __int64)LoValue;
__int64 StartTime = ((unsigned __int64)m_StartTimeHi << 32) + (unsigned __int64)m_StartTimeLo;
__int64 TimeTaken = StopTime - StartTime;
int64_t StopTime = ((uint64_t)HiValue << 32) + (uint64_t)LoValue;
int64_t StartTime = ((uint64_t)m_StartTimeHi << 32) + (uint64_t)m_StartTimeLo;
int64_t TimeTaken = StopTime - StartTime;

PROFILE_ENRTY Entry = m_Entries.find(m_CurrentTimerAddr);
if (Entry != m_Entries.end())
Expand All @@ -82,7 +83,7 @@ class CRspProfiling
m_Entries.insert(PROFILE_ENRTIES::value_type(m_CurrentTimerAddr, TimeTaken));
}
#else
__debugbreak();
g_Notify->BreakPoint(__FILE__, __LINE__);
#endif

uint32_t OldTimerAddr = m_CurrentTimerAddr;
Expand All @@ -106,7 +107,7 @@ class CRspProfiling
LogFileName = Log.FileName();

// Get the total time
__int64 TotalTime = 0;
int64_t TotalTime = 0;
for (PROFILE_ENRTY itemTime = m_Entries.begin(); itemTime != m_Entries.end(); itemTime++)
{
TotalTime += itemTime->second;
Expand Down
10 changes: 5 additions & 5 deletions Source/Project64-rsp-core/Recompiler/RspRecompilerCPU.cpp
@@ -1,7 +1,7 @@
#include "RspRecompilerCPU.h"
#include "RspProfiling.h"
#include "RspRecompilerOps.h"
#include "x86.h"
#include "X86.h"
#include <Common/StdString.h>
#include <Project64-rsp-core/RSPInfo.h>
#include <Project64-rsp-core/cpu/RSPCpu.h>
Expand Down Expand Up @@ -791,7 +791,7 @@ void CompilerRSPBlock(void)
// Align the block to a boundary
if (X86BaseAddress & 7)
{
register size_t Count;
size_t Count;
const size_t Padding = (8 - (X86BaseAddress & 7)) & 7;

for (Count = 0; Count < Padding; Count++)
Expand Down Expand Up @@ -864,7 +864,7 @@ void CompilerRSPBlock(void)
char str[40];
sprintf(str, "%X", CompilePC);
PushImm32(str, CompilePC);
Call_Direct(RDP_LogLoc, "RDP_LogLoc");
Call_Direct((void *)RDP_LogLoc, "RDP_LogLoc");
AddConstToX86Reg(x86_ESP, 4);
}

Expand Down Expand Up @@ -1003,7 +1003,7 @@ uint32_t RunRecompilerCPU(uint32_t Cycles)
popad
}
#else
__debugbreak();
g_Notify->BreakPoint(__FILE__, __LINE__);
#endif
if (Profiling && IndvidualBlock)
{
Expand All @@ -1020,7 +1020,7 @@ uint32_t RunRecompilerCPU(uint32_t Cycles)
#if defined(_M_IX86) && defined(_MSC_VER)
_asm emms
#else
__debugbreak();
g_Notify->BreakPoint(__FILE__, __LINE__);
#endif
}
return Cycles;
Expand Down

0 comments on commit 0c8b10b

Please sign in to comment.