Android: Move hle audio code in to main rsp plugin
This commit is contained in:
parent
924197ca9a
commit
6fbc5c0264
|
@ -32,7 +32,7 @@ xcopy "%base_dir%/Source/Android/PluginInput" "%base_dir%/Android/jni/Plugin-Inp
|
|||
IF %ERRORLEVEL% NEQ 0 (exit /B 1)
|
||||
|
||||
echo copy PluginRSP
|
||||
xcopy "%base_dir%/Source/Android/PluginRSP" "%base_dir%/Android/jni/Plugin-RspHle/" /D /I /F /Y /E
|
||||
xcopy "%base_dir%/Source/Android/PluginRSP" "%base_dir%/Android/jni/Plugin-Rsp/" /D /I /F /Y /E
|
||||
IF %ERRORLEVEL% NEQ 0 (exit /B 1)
|
||||
|
||||
echo copy Project64-bridge
|
||||
|
|
|
@ -44,5 +44,4 @@ dependencies {
|
|||
implementation project(':jni:Project64-video')
|
||||
implementation project(':jni:Project64-audio')
|
||||
implementation project(':jni:Plugin-input')
|
||||
implementation project(':jni:Plugin-RspHle')
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
<manifest package="emu.project64.plugin_rsp" />
|
|
@ -0,0 +1,14 @@
|
|||
cmake_minimum_required(VERSION 2.8.12)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
|
||||
project("Project64-rsp")
|
||||
include_directories(..)
|
||||
|
||||
add_library(Project64-rsp SHARED
|
||||
main.cpp)
|
||||
|
||||
add_definitions(-DANDROID)
|
||||
|
||||
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../Settings ${CMAKE_CURRENT_BINARY_DIR}/Settings)
|
||||
target_link_libraries(Project64-rsp settings)
|
|
@ -1 +0,0 @@
|
|||
<manifest package="emu.project64.plugin_rsphle" />
|
|
@ -1,23 +0,0 @@
|
|||
cmake_minimum_required(VERSION 2.8.12)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
|
||||
project("Project64-rsp-hle")
|
||||
|
||||
add_library(Project64-rsp-hle SHARED
|
||||
alist.cpp
|
||||
alist_audio.cpp
|
||||
alist_naudio.cpp
|
||||
alist_nead.cpp
|
||||
audio.cpp
|
||||
cicx105.cpp
|
||||
hle.cpp
|
||||
jpeg.cpp
|
||||
main.cpp
|
||||
mem.cpp
|
||||
mp3.cpp
|
||||
musyx.cpp)
|
||||
|
||||
add_definitions(-DANDROID)
|
||||
|
||||
target_link_libraries(Project64-rsp-hle)
|
|
@ -0,0 +1 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="emu.project64.project64_rsp_core" />
|
|
@ -0,0 +1,12 @@
|
|||
cmake_minimum_required(VERSION 2.8.12)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
|
||||
project("Project64.rsp.core")
|
||||
|
||||
add_library(Project64.rsp.core STATIC
|
||||
Hle/alist.cpp)
|
||||
|
||||
add_definitions(-DANDROID)
|
||||
|
||||
target_link_libraries(Project64.rsp.core)
|
|
@ -0,0 +1,63 @@
|
|||
apply plugin: 'com.android.library'
|
||||
apply from: '../../config/version.gradle'
|
||||
|
||||
android {
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
ndk {
|
||||
debugSymbolLevel 'FULL'
|
||||
}
|
||||
}
|
||||
debug {
|
||||
minifyEnabled true
|
||||
jniDebuggable true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
ndk {
|
||||
debugSymbolLevel 'FULL'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
version "3.22.1"
|
||||
path "CMakeLists.txt"
|
||||
}
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DANDROID=1", "-DCMAKE_BUILD_TYPE=Release", "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"
|
||||
cppFlags "-fexceptions", "-ffast-math", "-ftree-vectorize"
|
||||
cFlags "-ffast-math", "-ftree-vectorize"
|
||||
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
}
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude 'lib/x86/libc++_shared.so'
|
||||
exclude 'lib/x86_64/libc++_shared.so'
|
||||
exclude 'lib/armeabi-v7a/libc++_shared.so'
|
||||
exclude 'lib/arm64-v8a/libc++_shared.so'
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
|
@ -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', ':jni:Plugin-RspHle'
|
||||
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'
|
||||
|
|
|
@ -60,7 +60,6 @@ EndProject
|
|||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Project64", "Source\Project64\Project64.vcxproj", "{7E534C8E-1ACE-4A88-8807-39A11ED4DA18}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{A7ED562C-63F3-4B7E-B6B3-2CF7848752E1} = {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}
|
||||
{B685BB34-D700-4FCC-8503-9B6AA1A0C95D} = {B685BB34-D700-4FCC-8503-9B6AA1A0C95D}
|
||||
{D3F979CE-8FA7-48C9-A2B3-A33594B48536} = {D3F979CE-8FA7-48C9-A2B3-A33594B48536}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
|
|
|
@ -20,8 +20,7 @@
|
|||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{B685BB34-D700-4FCC-8503-9B6AA1A0C95D}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>RSPhle</RootNamespace>
|
||||
<RootNamespace>RSPbasic</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
@ -33,45 +32,34 @@
|
|||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<PropertyGroup>
|
||||
<TargetName>RSP-HLE</TargetName>
|
||||
<TargetName Condition="'$(Configuration)'=='Debug'">RSP-HLE_d</TargetName>
|
||||
<TargetName>Project64-RSP-Basic</TargetName>
|
||||
<TargetName Condition="'$(Configuration)'=='Debug'">Project64-RSP-Basic_d</TargetName>
|
||||
<OutDir>$(SolutionDir)Plugin\RSP\</OutDir>
|
||||
<OutDir Condition="'$(Platform)'=='x64'">$(SolutionDir)Plugin64\RSP\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DisableSpecificWarnings>4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="alist.cpp" />
|
||||
<ClCompile Include="alist_audio.cpp" />
|
||||
<ClCompile Include="alist_naudio.cpp" />
|
||||
<ClCompile Include="alist_nead.cpp" />
|
||||
<ClCompile Include="audio.cpp" />
|
||||
<ClCompile Include="cicx105.cpp" />
|
||||
<ClCompile Include="hle.cpp" />
|
||||
<ClCompile Include="jpeg.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="mem.cpp" />
|
||||
<ClCompile Include="mp3.cpp" />
|
||||
<ClCompile Include="musyx.cpp" />
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="alist.h" />
|
||||
<ClInclude Include="arithmetics.h" />
|
||||
<ClInclude Include="audio.h" />
|
||||
<ClInclude Include="common.h" />
|
||||
<ClInclude Include="hle.h" />
|
||||
<ClInclude Include="mem.h" />
|
||||
<ClInclude Include="Rsp.h" />
|
||||
<ClInclude Include="stdafx.h" />
|
||||
<ClInclude Include="ucodes.h" />
|
||||
<ClInclude Include="Version.h" />
|
||||
<ProjectReference Include="..\..\Common\Common.vcxproj">
|
||||
<Project>{b4a4b994-9111-42b1-93c2-6f1ca8bc4421}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\Project64-rsp-core\Project64-rsp-core.vcxproj">
|
||||
<Project>{7598f6b8-9da6-4897-b26f-f6865f824bf4}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\Settings\Settings.vcxproj">
|
||||
<Project>{8b9961b1-88d9-4ea3-a752-507a00dd9f3d}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="Project64-rsp.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="resource.h" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -18,72 +18,14 @@
|
|||
<ClCompile Include="main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="hle.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="alist_audio.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="alist.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="audio.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="mem.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="jpeg.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="alist_naudio.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="alist_nead.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="mp3.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="musyx.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="cicx105.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="stdafx.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Rsp.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Version.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="hle.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="ucodes.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="alist.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="common.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="mem.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="arithmetics.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="audio.h">
|
||||
<ResourceCompile Include="Project64-rsp.rc">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="resource.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
#include "../../Project64-rsp-core/Version.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
#include "WinResrc.h"
|
||||
|
||||
#ifdef IDC_STATIC
|
||||
#undef IDC_STATIC
|
||||
#endif
|
||||
#define IDC_STATIC (-1)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (Australia) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENA)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION VER_FILE_VERSION
|
||||
PRODUCTVERSION VER_PRODUCT_VERSION
|
||||
FILEFLAGSMASK 0x3fL
|
||||
FILEFLAGS VER_FILEFLAGS
|
||||
FILEOS VER_FILEOS
|
||||
FILETYPE VER_FILETYPE
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "0c0904b0"
|
||||
BEGIN
|
||||
VALUE "FileDescription", VER_FILE_DESCRIPTION_STR "\0"
|
||||
VALUE "FileVersion", VER_FILE_VERSION_STR "\0"
|
||||
VALUE "InternalName", VER_INTERNAL_NAME_STR "\0"
|
||||
VALUE "LegalCopyright", VER_COPYRIGHT_STR "\0"
|
||||
VALUE "OriginalFilename", VER_ORIGINAL_FILENAME_STR "\0"
|
||||
VALUE "ProductName", VER_PRODUCTNAME_STR
|
||||
VALUE "ProductVersion", VER_PRODUCT_VERSION_STR "\0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // English (Australia) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
#define STRINGIZE2(s) #s
|
||||
#define STRINGIZE(s) STRINGIZE2(s)
|
||||
|
||||
#define VERSION_MAJOR 1
|
||||
#define VERSION_MINOR 0
|
||||
#define VERSION_REVISION 1
|
||||
#define VERSION_BUILD 9999
|
||||
|
||||
#define VER_FILE_DESCRIPTION_STR "RSP HLE Plugin"
|
||||
#define VER_FILE_VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD
|
||||
#define VER_FILE_VERSION_STR STRINGIZE(VERSION_MAJOR) \
|
||||
"." STRINGIZE(VERSION_MINOR) \
|
||||
"." STRINGIZE(VERSION_REVISION) \
|
||||
"." STRINGIZE(VERSION_BUILD) \
|
||||
|
||||
#define VER_PRODUCTNAME_STR "RSP-HLE"
|
||||
#define VER_PRODUCT_VERSION VER_FILE_VERSION
|
||||
#define VER_PRODUCT_VERSION_STR VER_FILE_VERSION_STR
|
||||
#define VER_ORIGINAL_FILENAME_STR VER_PRODUCTNAME_STR ".dll"
|
||||
#define VER_INTERNAL_NAME_STR VER_PRODUCTNAME_STR
|
||||
#define VER_COPYRIGHT_STR "Copyright (C) 2021"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define VER_VER_DEBUG VS_FF_DEBUG
|
||||
#else
|
||||
#define VER_VER_DEBUG 0
|
||||
#endif
|
||||
|
||||
#define VER_FILEOS VOS_NT_WINDOWS32
|
||||
#define VER_FILEFLAGS VER_VER_DEBUG
|
||||
#define VER_FILETYPE VFT_DLL
|
|
@ -1,50 +0,0 @@
|
|||
// Project64 - A Nintendo 64 emulator
|
||||
// https://www.pj64-emu.com/
|
||||
// Copyright(C) 2001-2021 Project64
|
||||
// Copyright(C) 2014 Bobby Smiles
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#pragma once
|
||||
class CHle;
|
||||
|
||||
typedef void(*acmd_callback_t)(CHle* hle, uint32_t w1, uint32_t w2);
|
||||
|
||||
void alist_process(CHle * hle, const acmd_callback_t abi[], unsigned int abi_size);
|
||||
uint32_t alist_get_address(CHle * hle, uint32_t so, const uint32_t *segments, size_t n);
|
||||
void alist_set_address(CHle * hle, uint32_t so, uint32_t *segments, size_t n);
|
||||
void alist_clear(CHle * hle, uint16_t dmem, uint16_t count);
|
||||
void alist_load(CHle * hle, uint16_t dmem, uint32_t address, uint16_t count);
|
||||
void alist_save(CHle * hle, uint16_t dmem, uint32_t address, uint16_t count);
|
||||
void alist_move(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t count);
|
||||
void alist_copy_every_other_sample(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t count);
|
||||
void alist_repeat64(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint8_t count);
|
||||
void alist_copy_blocks(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t block_size, uint8_t count);
|
||||
void alist_interleave(CHle * hle, uint16_t dmemo, uint16_t left, uint16_t right, uint16_t count);
|
||||
void alist_envmix_exp( CHle * hle, bool init, bool aux, uint16_t dmem_dl, uint16_t dmem_dr, uint16_t dmem_wl, uint16_t dmem_wr, uint16_t dmemi, uint16_t count, int16_t dry, int16_t wet, const int16_t *vol, const int16_t *target, const int32_t *rate, uint32_t address);
|
||||
void alist_envmix_ge( CHle * hle, bool init, bool aux, uint16_t dmem_dl, uint16_t dmem_dr, uint16_t dmem_wl, uint16_t dmem_wr, uint16_t dmemi, uint16_t count, int16_t dry, int16_t wet, const int16_t *vol, const int16_t *target, const int32_t *rate, uint32_t address);
|
||||
void alist_envmix_lin( CHle * hle, bool init, uint16_t dmem_dl, uint16_t dmem_dr, uint16_t dmem_wl, uint16_t dmem_wr, uint16_t dmemi, uint16_t count, int16_t dry, int16_t wet, const int16_t *vol, const int16_t *target, const int32_t *rate, uint32_t address);
|
||||
void alist_envmix_nead( CHle * hle, bool swap_wet_LR, uint16_t dmem_dl, uint16_t dmem_dr, uint16_t dmem_wl, uint16_t dmem_wr, uint16_t dmemi, unsigned count, uint16_t *env_values, uint16_t *env_steps, const int16_t *xors);
|
||||
void alist_mix(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t count, int16_t gain);
|
||||
void alist_multQ44(CHle * hle, uint16_t dmem, uint16_t count, int8_t gain);
|
||||
void alist_add(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t count);
|
||||
void alist_adpcm( CHle * hle, bool init, bool loop, bool two_bit_per_sample, uint16_t dmemo, uint16_t dmemi, uint16_t count, const int16_t* codebook, uint32_t loop_address, uint32_t last_frame_address);
|
||||
void alist_resample( CHle * hle, bool init, bool flag2, uint16_t dmemo, uint16_t dmemi, uint16_t count, uint32_t pitch, uint32_t address);
|
||||
void alist_polef( CHle * hle, bool init,uint16_t dmemo, uint16_t dmemi, uint16_t count, uint16_t gain, int16_t* table, uint32_t address);
|
||||
void alist_iirf( CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t count, int16_t* table, uint32_t address);
|
||||
void alist_resample_zoh( CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t count, uint32_t pitch, uint32_t pitch_accu);
|
||||
void alist_filter( CHle * hle, uint16_t dmem, uint16_t count, uint32_t address, const uint32_t* lut_address);
|
||||
|
||||
// Audio flags
|
||||
|
||||
#define A_INIT 0x01
|
||||
#define A_CONTINUE 0x00
|
||||
#define A_LOOP 0x02
|
||||
#define A_OUT 0x02
|
||||
#define A_LEFT 0x02
|
||||
#define A_RIGHT 0x00
|
||||
#define A_VOL 0x04
|
||||
#define A_RATE 0x00
|
||||
#define A_AUX 0x08
|
||||
#define A_NOAUX 0x00
|
||||
#define A_MAIN 0x00
|
||||
#define A_MIX 0x10
|
|
@ -1,114 +0,0 @@
|
|||
// Project64 - A Nintendo 64 emulator
|
||||
// https://www.pj64-emu.com/
|
||||
// Copyright(C) 2001-2021 Project64
|
||||
// Copyright(C) 2014 Bobby Smiles
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <assert.h>
|
||||
#include "audio.h"
|
||||
|
||||
#include "arithmetics.h"
|
||||
|
||||
const int16_t RESAMPLE_LUT[64 * 4] =
|
||||
{
|
||||
(int16_t)0x0c39u, (int16_t)0x66adu, (int16_t)0x0d46u, (int16_t)0xffdfu,
|
||||
(int16_t)0x0b39u, (int16_t)0x6696u, (int16_t)0x0e5fu, (int16_t)0xffd8u,
|
||||
(int16_t)0x0a44u, (int16_t)0x6669u, (int16_t)0x0f83u, (int16_t)0xffd0u,
|
||||
(int16_t)0x095au, (int16_t)0x6626u, (int16_t)0x10b4u, (int16_t)0xffc8u,
|
||||
(int16_t)0x087du, (int16_t)0x65cdu, (int16_t)0x11f0u, (int16_t)0xffbfu,
|
||||
(int16_t)0x07abu, (int16_t)0x655eu, (int16_t)0x1338u, (int16_t)0xffb6u,
|
||||
(int16_t)0x06e4u, (int16_t)0x64d9u, (int16_t)0x148cu, (int16_t)0xffacu,
|
||||
(int16_t)0x0628u, (int16_t)0x643fu, (int16_t)0x15ebu, (int16_t)0xffa1u,
|
||||
(int16_t)0x0577u, (int16_t)0x638fu, (int16_t)0x1756u, (int16_t)0xff96u,
|
||||
(int16_t)0x04d1u, (int16_t)0x62cbu, (int16_t)0x18cbu, (int16_t)0xff8au,
|
||||
(int16_t)0x0435u, (int16_t)0x61f3u, (int16_t)0x1a4cu, (int16_t)0xff7eu,
|
||||
(int16_t)0x03a4u, (int16_t)0x6106u, (int16_t)0x1bd7u, (int16_t)0xff71u,
|
||||
(int16_t)0x031cu, (int16_t)0x6007u, (int16_t)0x1d6cu, (int16_t)0xff64u,
|
||||
(int16_t)0x029fu, (int16_t)0x5ef5u, (int16_t)0x1f0bu, (int16_t)0xff56u,
|
||||
(int16_t)0x022au, (int16_t)0x5dd0u, (int16_t)0x20b3u, (int16_t)0xff48u,
|
||||
(int16_t)0x01beu, (int16_t)0x5c9au, (int16_t)0x2264u, (int16_t)0xff3au,
|
||||
(int16_t)0x015bu, (int16_t)0x5b53u, (int16_t)0x241eu, (int16_t)0xff2cu,
|
||||
(int16_t)0x0101u, (int16_t)0x59fcu, (int16_t)0x25e0u, (int16_t)0xff1eu,
|
||||
(int16_t)0x00aeu, (int16_t)0x5896u, (int16_t)0x27a9u, (int16_t)0xff10u,
|
||||
(int16_t)0x0063u, (int16_t)0x5720u, (int16_t)0x297au, (int16_t)0xff02u,
|
||||
(int16_t)0x001fu, (int16_t)0x559du, (int16_t)0x2b50u, (int16_t)0xfef4u,
|
||||
(int16_t)0xffe2u, (int16_t)0x540du, (int16_t)0x2d2cu, (int16_t)0xfee8u,
|
||||
(int16_t)0xffacu, (int16_t)0x5270u, (int16_t)0x2f0du, (int16_t)0xfedbu,
|
||||
(int16_t)0xff7cu, (int16_t)0x50c7u, (int16_t)0x30f3u, (int16_t)0xfed0u,
|
||||
(int16_t)0xff53u, (int16_t)0x4f14u, (int16_t)0x32dcu, (int16_t)0xfec6u,
|
||||
(int16_t)0xff2eu, (int16_t)0x4d57u, (int16_t)0x34c8u, (int16_t)0xfebdu,
|
||||
(int16_t)0xff0fu, (int16_t)0x4b91u, (int16_t)0x36b6u, (int16_t)0xfeb6u,
|
||||
(int16_t)0xfef5u, (int16_t)0x49c2u, (int16_t)0x38a5u, (int16_t)0xfeb0u,
|
||||
(int16_t)0xfedfu, (int16_t)0x47edu, (int16_t)0x3a95u, (int16_t)0xfeacu,
|
||||
(int16_t)0xfeceu, (int16_t)0x4611u, (int16_t)0x3c85u, (int16_t)0xfeabu,
|
||||
(int16_t)0xfec0u, (int16_t)0x4430u, (int16_t)0x3e74u, (int16_t)0xfeacu,
|
||||
(int16_t)0xfeb6u, (int16_t)0x424au, (int16_t)0x4060u, (int16_t)0xfeafu,
|
||||
(int16_t)0xfeafu, (int16_t)0x4060u, (int16_t)0x424au, (int16_t)0xfeb6u,
|
||||
(int16_t)0xfeacu, (int16_t)0x3e74u, (int16_t)0x4430u, (int16_t)0xfec0u,
|
||||
(int16_t)0xfeabu, (int16_t)0x3c85u, (int16_t)0x4611u, (int16_t)0xfeceu,
|
||||
(int16_t)0xfeacu, (int16_t)0x3a95u, (int16_t)0x47edu, (int16_t)0xfedfu,
|
||||
(int16_t)0xfeb0u, (int16_t)0x38a5u, (int16_t)0x49c2u, (int16_t)0xfef5u,
|
||||
(int16_t)0xfeb6u, (int16_t)0x36b6u, (int16_t)0x4b91u, (int16_t)0xff0fu,
|
||||
(int16_t)0xfebdu, (int16_t)0x34c8u, (int16_t)0x4d57u, (int16_t)0xff2eu,
|
||||
(int16_t)0xfec6u, (int16_t)0x32dcu, (int16_t)0x4f14u, (int16_t)0xff53u,
|
||||
(int16_t)0xfed0u, (int16_t)0x30f3u, (int16_t)0x50c7u, (int16_t)0xff7cu,
|
||||
(int16_t)0xfedbu, (int16_t)0x2f0du, (int16_t)0x5270u, (int16_t)0xffacu,
|
||||
(int16_t)0xfee8u, (int16_t)0x2d2cu, (int16_t)0x540du, (int16_t)0xffe2u,
|
||||
(int16_t)0xfef4u, (int16_t)0x2b50u, (int16_t)0x559du, (int16_t)0x001fu,
|
||||
(int16_t)0xff02u, (int16_t)0x297au, (int16_t)0x5720u, (int16_t)0x0063u,
|
||||
(int16_t)0xff10u, (int16_t)0x27a9u, (int16_t)0x5896u, (int16_t)0x00aeu,
|
||||
(int16_t)0xff1eu, (int16_t)0x25e0u, (int16_t)0x59fcu, (int16_t)0x0101u,
|
||||
(int16_t)0xff2cu, (int16_t)0x241eu, (int16_t)0x5b53u, (int16_t)0x015bu,
|
||||
(int16_t)0xff3au, (int16_t)0x2264u, (int16_t)0x5c9au, (int16_t)0x01beu,
|
||||
(int16_t)0xff48u, (int16_t)0x20b3u, (int16_t)0x5dd0u, (int16_t)0x022au,
|
||||
(int16_t)0xff56u, (int16_t)0x1f0bu, (int16_t)0x5ef5u, (int16_t)0x029fu,
|
||||
(int16_t)0xff64u, (int16_t)0x1d6cu, (int16_t)0x6007u, (int16_t)0x031cu,
|
||||
(int16_t)0xff71u, (int16_t)0x1bd7u, (int16_t)0x6106u, (int16_t)0x03a4u,
|
||||
(int16_t)0xff7eu, (int16_t)0x1a4cu, (int16_t)0x61f3u, (int16_t)0x0435u,
|
||||
(int16_t)0xff8au, (int16_t)0x18cbu, (int16_t)0x62cbu, (int16_t)0x04d1u,
|
||||
(int16_t)0xff96u, (int16_t)0x1756u, (int16_t)0x638fu, (int16_t)0x0577u,
|
||||
(int16_t)0xffa1u, (int16_t)0x15ebu, (int16_t)0x643fu, (int16_t)0x0628u,
|
||||
(int16_t)0xffacu, (int16_t)0x148cu, (int16_t)0x64d9u, (int16_t)0x06e4u,
|
||||
(int16_t)0xffb6u, (int16_t)0x1338u, (int16_t)0x655eu, (int16_t)0x07abu,
|
||||
(int16_t)0xffbfu, (int16_t)0x11f0u, (int16_t)0x65cdu, (int16_t)0x087du,
|
||||
(int16_t)0xffc8u, (int16_t)0x10b4u, (int16_t)0x6626u, (int16_t)0x095au,
|
||||
(int16_t)0xffd0u, (int16_t)0x0f83u, (int16_t)0x6669u, (int16_t)0x0a44u,
|
||||
(int16_t)0xffd8u, (int16_t)0x0e5fu, (int16_t)0x6696u, (int16_t)0x0b39u,
|
||||
(int16_t)0xffdfu, (int16_t)0x0d46u, (int16_t)0x66adu, (int16_t)0x0c39u
|
||||
};
|
||||
|
||||
int32_t rdot(size_t n, const int16_t *x, const int16_t *y)
|
||||
{
|
||||
int32_t accu = 0;
|
||||
|
||||
y += n;
|
||||
|
||||
while (n != 0) {
|
||||
accu += *(x++) * *(--y);
|
||||
--n;
|
||||
}
|
||||
|
||||
return accu;
|
||||
}
|
||||
|
||||
void adpcm_compute_residuals(int16_t* dst, const int16_t* src,
|
||||
const int16_t* cb_entry, const int16_t* last_samples, size_t count)
|
||||
{
|
||||
const int16_t* const book1 = cb_entry;
|
||||
const int16_t* const book2 = cb_entry + 8;
|
||||
|
||||
const int16_t l1 = last_samples[0];
|
||||
const int16_t l2 = last_samples[1];
|
||||
|
||||
size_t i;
|
||||
|
||||
assert(count <= 8);
|
||||
|
||||
for (i = 0; i < count; ++i)
|
||||
{
|
||||
int32_t accu = (int32_t)src[i] << 11;
|
||||
accu += book1[i] * l1 + book2[i] * l2 + rdot(i, book2, src);
|
||||
dst[i] = clamp_s16(accu >> 11);
|
||||
}
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
// Project64 - A Nintendo 64 emulator
|
||||
// https://www.pj64-emu.com/
|
||||
// Copyright(C) 2001-2021 Project64
|
||||
// Copyright(C) 2014 Bobby Smiles
|
||||
// Copyright(C) 2009 Richard Goedeken
|
||||
// Copyright(C) 2002 Hacktarux
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#pragma once
|
||||
|
||||
// Macro for unused variable warning suppression
|
||||
#ifdef __GNUC__
|
||||
# define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))
|
||||
#else
|
||||
# define UNUSED(x) /* x */
|
||||
#endif
|
||||
|
||||
// Macro for inline keyword
|
||||
#ifdef _MSC_VER
|
||||
#define inline __inline
|
||||
#endif
|
||||
|
||||
// DLL function linking
|
||||
#if defined(_WIN32)
|
||||
#define EXPORT extern "C" __declspec(dllexport)
|
||||
#define CALL __cdecl
|
||||
#else
|
||||
#define EXPORT extern "C" __attribute__((visibility("default")))
|
||||
#define CALL
|
||||
#endif
|
||||
|
||||
// Plugin types
|
||||
enum
|
||||
{
|
||||
PLUGIN_TYPE_RSP = 1,
|
||||
PLUGIN_TYPE_VIDEO = 2,
|
||||
PLUGIN_TYPE_AUDIO = 3,
|
||||
PLUGIN_TYPE_CONTROLLER = 4,
|
||||
};
|
||||
|
||||
// Structures
|
||||
typedef struct
|
||||
{
|
||||
uint16_t Version; // Should be set to 0x0101
|
||||
uint16_t Type; // Set to PLUGIN_TYPE_RSP
|
||||
char Name[100]; // Name of the DLL
|
||||
|
||||
// If DLL supports memory, these memory options then set them to TRUE or FALSE if it does not support it
|
||||
int NormalMemory; // A normal BYTE array
|
||||
int MemoryBswaped; // A normal BYTE array where the memory has been pre-bswap'd on a DWORD (32-bits) boundary
|
||||
} PLUGIN_INFO;
|
|
@ -1,158 +0,0 @@
|
|||
// Project64 - A Nintendo 64 emulator
|
||||
// https://www.pj64-emu.com/
|
||||
// Copyright(C) 2001-2021 Project64
|
||||
// Copyright(C) 2014 Bobby Smiles
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
#include "Rsp.h"
|
||||
#include "ucodes.h"
|
||||
|
||||
// Signal processor interface flags
|
||||
|
||||
enum
|
||||
{
|
||||
SP_CLR_HALT = 0x00001, // Bit 0: Clear halt
|
||||
SP_SET_HALT = 0x00002, // Bit 1: Set halt
|
||||
SP_CLR_BROKE = 0x00004, // Bit 2: Clear broke
|
||||
SP_CLR_INTR = 0x00008, // Bit 3: Clear INTR
|
||||
SP_SET_INTR = 0x00010, // Bit 4: Set INTR
|
||||
SP_CLR_SSTEP = 0x00020, // Bit 5: Clear SSTEP
|
||||
SP_SET_SSTEP = 0x00040, // Bit 6: Set SSTEP
|
||||
SP_CLR_INTR_BREAK = 0x00080, // Bit 7: Clear INTR on break
|
||||
SP_SET_INTR_BREAK = 0x00100, // Bit 8: Set INTR on break
|
||||
SP_CLR_SIG0 = 0x00200, // Bit 9: Clear signal 0
|
||||
SP_SET_SIG0 = 0x00400, // Bit 10: Set signal 0
|
||||
SP_CLR_SIG1 = 0x00800, // Bit 11: Clear signal 1
|
||||
SP_SET_SIG1 = 0x01000, // Bit 12: Set signal 1
|
||||
SP_CLR_SIG2 = 0x02000, // Bit 13: Clear signal 2
|
||||
SP_SET_SIG2 = 0x04000, // Bit 14: Set signal 2
|
||||
SP_CLR_SIG3 = 0x08000, // Bit 15: Clear signal 3
|
||||
SP_SET_SIG3 = 0x10000, // Bit 16: Set signal 3
|
||||
SP_CLR_SIG4 = 0x20000, // Bit 17: Clear signal 4
|
||||
SP_SET_SIG4 = 0x40000, // Bit 18: Set signal 4
|
||||
SP_CLR_SIG5 = 0x80000, // Bit 19: Clear signal 5
|
||||
SP_SET_SIG5 = 0x100000, // Bit 20: Set signal 5
|
||||
SP_CLR_SIG6 = 0x200000, // Bit 21: Clear signal 6
|
||||
SP_SET_SIG6 = 0x400000, // Bit 22: Set signal 6
|
||||
SP_CLR_SIG7 = 0x800000, // Bit 23: Clear signal 7
|
||||
SP_SET_SIG7 = 0x1000000, // Bit 24: Set signal 7
|
||||
|
||||
SP_STATUS_HALT = 0x001, // Bit 0: Halt
|
||||
SP_STATUS_BROKE = 0x002, // Bit 1: Broke
|
||||
SP_STATUS_DMA_BUSY = 0x004, // Bit 2: DMA busy
|
||||
SP_STATUS_DMA_FULL = 0x008, // Bit 3: DMA full
|
||||
SP_STATUS_IO_FULL = 0x010, // Bit 4: IO full
|
||||
SP_STATUS_SSTEP = 0x020, // Bit 5: Single step
|
||||
SP_STATUS_INTR_BREAK = 0x040, // Bit 6: Interrupt on break
|
||||
SP_STATUS_SIG0 = 0x080, // Bit 7: Signal 0 set
|
||||
SP_STATUS_SIG1 = 0x100, // Bit 8: Signal 1 set
|
||||
SP_STATUS_SIG2 = 0x200, // Bit 9: Signal 2 set
|
||||
SP_STATUS_SIG3 = 0x400, // Bit 10: Signal 3 set
|
||||
SP_STATUS_SIG4 = 0x800, // Bit 11: Signal 4 set
|
||||
SP_STATUS_SIG5 = 0x1000, // Bit 12: Signal 5 set
|
||||
SP_STATUS_SIG6 = 0x2000, // Bit 13: Signal 6 set
|
||||
SP_STATUS_SIG7 = 0x4000, // Bit 14: Signal 7 set
|
||||
};
|
||||
|
||||
// MIPS interface flags
|
||||
|
||||
enum
|
||||
{
|
||||
MI_INTR_SP = 0x01, // Bit 0: SP INTR
|
||||
MI_INTR_SI = 0x02, // Bit 1: SI INTR
|
||||
MI_INTR_AI = 0x04, // Bit 2: AI INTR
|
||||
MI_INTR_VI = 0x08, // Bit 3: VI INTR
|
||||
MI_INTR_PI = 0x10, // Bit 4: PI INTR
|
||||
MI_INTR_DP = 0x20, // Bit 5: DP INTR
|
||||
};
|
||||
|
||||
class CHle
|
||||
{
|
||||
public:
|
||||
CHle(const RSP_INFO & Rsp_Info);
|
||||
~CHle();
|
||||
|
||||
uint8_t * dram() { return m_dram; }
|
||||
uint8_t * dmem() { return m_dmem; }
|
||||
uint8_t * imem() { return m_imem; }
|
||||
|
||||
bool AudioHle() { return m_AudioHle; }
|
||||
bool GraphicsHle() { return m_GraphicsHle; }
|
||||
struct alist_audio_t & alist_audio() { return m_alist_audio; }
|
||||
struct alist_naudio_t & alist_naudio() { return m_alist_naudio; }
|
||||
struct alist_nead_t & alist_nead() { return m_alist_nead; }
|
||||
uint8_t * mp3_buffer() { return &m_mp3_buffer[0]; }
|
||||
|
||||
uint8_t * alist_buffer() { return &m_alist_buffer[0]; }
|
||||
|
||||
void VerboseMessage(const char *message, ...);
|
||||
void WarnMessage(const char *message, ...);
|
||||
void ErrorMessage(const char *message, ...);
|
||||
|
||||
void rsp_break(uint32_t setbits);
|
||||
void hle_execute(void);
|
||||
|
||||
private:
|
||||
CHle(void);
|
||||
CHle(const CHle&);
|
||||
CHle& operator=(const CHle&);
|
||||
|
||||
bool is_task(void);
|
||||
bool try_fast_audio_dispatching(void);
|
||||
bool try_fast_task_dispatching(void);
|
||||
void normal_task_dispatching(void);
|
||||
void non_task_dispatching(void);
|
||||
|
||||
uint8_t * m_dram;
|
||||
uint8_t * m_dmem;
|
||||
uint8_t * m_imem;
|
||||
|
||||
uint32_t* m_mi_intr;
|
||||
|
||||
uint32_t* m_sp_mem_addr;
|
||||
uint32_t* m_sp_dram_addr;
|
||||
uint32_t* m_sp_rd_length;
|
||||
uint32_t* m_sp_wr_length;
|
||||
uint32_t* m_sp_status;
|
||||
uint32_t* m_sp_dma_full;
|
||||
uint32_t* m_sp_dma_busy;
|
||||
uint32_t* m_sp_pc;
|
||||
uint32_t* m_sp_semaphore;
|
||||
|
||||
uint32_t* m_dpc_start;
|
||||
uint32_t* m_dpc_end;
|
||||
uint32_t* m_dpc_current;
|
||||
uint32_t* m_dpc_status;
|
||||
uint32_t* m_dpc_clock;
|
||||
uint32_t* m_dpc_bufbusy;
|
||||
uint32_t* m_dpc_pipebusy;
|
||||
uint32_t* m_dpc_tmem;
|
||||
|
||||
void(*m_CheckInterrupts)(void);
|
||||
void(*m_ProcessDList)(void);
|
||||
void(*m_ProcessAList)(void);
|
||||
void(*m_ProcessRdpList)(void);
|
||||
void(*m_ShowCFB)(void);
|
||||
|
||||
// alist.cpp
|
||||
uint8_t m_alist_buffer[0x1000];
|
||||
|
||||
// alist_audio.cpp
|
||||
struct alist_audio_t m_alist_audio;
|
||||
|
||||
// alist_naudio.cpp
|
||||
struct alist_naudio_t m_alist_naudio;
|
||||
|
||||
// alist_nead.cpp
|
||||
struct alist_nead_t m_alist_nead;
|
||||
|
||||
// mp3.cpp
|
||||
uint8_t m_mp3_buffer[0x1000];
|
||||
|
||||
bool m_AudioHle;
|
||||
bool m_GraphicsHle;
|
||||
bool m_ForwardAudio;
|
||||
bool m_ForwardGFX;
|
||||
};
|
|
@ -1,7 +1,8 @@
|
|||
#include "stdafx.h"
|
||||
#include "Rsp.h"
|
||||
|
||||
CHle * g_hle = NULL;
|
||||
#include <Project64-rsp-core/RSPInfo.h>
|
||||
#include <Project64-rsp-core/Version.h>
|
||||
#include <Settings/Settings.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
|
@ -25,11 +26,7 @@ Output: None
|
|||
|
||||
void CloseDLL(void)
|
||||
{
|
||||
if (g_hle)
|
||||
{
|
||||
delete g_hle;
|
||||
g_hle = NULL;
|
||||
}
|
||||
FreeRSP();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -47,27 +44,6 @@ void DllAbout(void * hParent)
|
|||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
Function: DoRspCycles
|
||||
Purpose: This function is to allow the RSP to run in parallel with
|
||||
the r4300 switching control back to the r4300 once the
|
||||
function ends.
|
||||
Input: The number of cycles that is meant to be executed
|
||||
Output: The number of cycles that was executed. This value can
|
||||
be greater than the number of cycles that the RSP
|
||||
should have performed.
|
||||
(this value is ignored if the RSP is stopped)
|
||||
*/
|
||||
|
||||
uint32_t DoRspCycles(uint32_t Cycles)
|
||||
{
|
||||
if (g_hle)
|
||||
{
|
||||
g_hle->hle_execute();
|
||||
}
|
||||
return Cycles;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: GetDllInfo
|
||||
Purpose: This function allows the emulator to gather information
|
||||
|
@ -77,24 +53,23 @@ filled by the function. (see def above)
|
|||
Output: None
|
||||
*/
|
||||
|
||||
void GetDllInfo(PLUGIN_INFO * PluginInfo)
|
||||
EXPORT void GetDllInfo(PLUGIN_INFO * PluginInfo)
|
||||
{
|
||||
PluginInfo->Version = 0x0102;
|
||||
PluginInfo->Version = 0x0103;
|
||||
PluginInfo->Type = PLUGIN_TYPE_RSP;
|
||||
#ifdef _DEBUG
|
||||
sprintf(PluginInfo->Name, "RSP HLE debug plugin %s", VER_FILE_VERSION_STR);
|
||||
sprintf(PluginInfo->Name, "RSP Basic Debug Plugin %s", VER_FILE_VERSION_STR);
|
||||
#else
|
||||
sprintf(PluginInfo->Name, "RSP HLE plugin %s", VER_FILE_VERSION_STR);
|
||||
sprintf(PluginInfo->Name, "RSP Basic Plugin %s", VER_FILE_VERSION_STR);
|
||||
#endif
|
||||
PluginInfo->NormalMemory = false;
|
||||
PluginInfo->MemoryBswaped = true;
|
||||
PluginInfo->Reserved2 = false;
|
||||
PluginInfo->Reserved1 = true;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: InitiateRSP
|
||||
Purpose: This function is called when the DLL is started to give
|
||||
information from the emulator that the N64 RSP
|
||||
interface needs
|
||||
information from the emulator that the N64 RSP interface needs.
|
||||
Input: Rsp_Info is passed to this function which is defined
|
||||
above.
|
||||
CycleCount is the number of cycles between switching
|
||||
|
@ -102,38 +77,42 @@ control between the RSP and r4300i core.
|
|||
Output: None
|
||||
*/
|
||||
|
||||
void InitiateRSP(RSP_INFO Rsp_Info, uint32_t * /*CycleCount*/)
|
||||
EXPORT void InitiateRSP(RSP_INFO Rsp_Info, uint32_t * CycleCount)
|
||||
{
|
||||
if (g_hle)
|
||||
{
|
||||
delete g_hle;
|
||||
g_hle = NULL;
|
||||
}
|
||||
g_hle = new CHle(Rsp_Info);
|
||||
InitilizeRSP(Rsp_Info);
|
||||
*CycleCount = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: RomOpen
|
||||
Purpose: This function is called when a ROM is opened
|
||||
Purpose: This function is called when a ROM is opened.
|
||||
Input: None
|
||||
Output: None
|
||||
*/
|
||||
|
||||
void RomOpen(void)
|
||||
EXPORT void RomOpen(void)
|
||||
{
|
||||
RspRomOpened();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: RomClosed
|
||||
Purpose: This function is called when a ROM is closed
|
||||
Purpose: This function is called when a ROM is closed.
|
||||
Input: None
|
||||
Output: None
|
||||
*/
|
||||
|
||||
void RomClosed(void)
|
||||
EXPORT void RomClosed(void)
|
||||
{
|
||||
RspRomClosed();
|
||||
}
|
||||
|
||||
void PluginLoaded(void)
|
||||
{
|
||||
RspPluginLoaded();
|
||||
}
|
||||
|
||||
void UseUnregisteredSetting(int /*SettingID*/)
|
||||
{
|
||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||
}
|
|
@ -1,112 +0,0 @@
|
|||
// Project64 - A Nintendo 64 emulator
|
||||
// https://www.pj64-emu.com/
|
||||
// Copyright(C) 2001-2021 Project64
|
||||
// Copyright(C) 2014 Bobby Smiles
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#pragma once
|
||||
#include <assert.h>
|
||||
|
||||
#define S 1
|
||||
#define S16 2
|
||||
#define S8 3
|
||||
|
||||
enum
|
||||
{
|
||||
TASK_TYPE = 0xfc0,
|
||||
TASK_FLAGS = 0xfc4,
|
||||
TASK_UCODE_BOOT = 0xfc8,
|
||||
TASK_UCODE_BOOT_SIZE = 0xfcc,
|
||||
TASK_UCODE = 0xfd0,
|
||||
TASK_UCODE_SIZE = 0xfd4,
|
||||
TASK_UCODE_DATA = 0xfd8,
|
||||
TASK_UCODE_DATA_SIZE = 0xfdc,
|
||||
TASK_DRAM_STACK = 0xfe0,
|
||||
TASK_DRAM_STACK_SIZE = 0xfe4,
|
||||
TASK_OUTPUT_BUFF = 0xfe8,
|
||||
TASK_OUTPUT_BUFF_SIZE = 0xfec,
|
||||
TASK_DATA_PTR = 0xff0,
|
||||
TASK_DATA_SIZE = 0xff4,
|
||||
TASK_YIELD_DATA_PTR = 0xff8,
|
||||
TASK_YIELD_DATA_SIZE = 0xffc
|
||||
};
|
||||
|
||||
static inline unsigned int align(unsigned int x, unsigned amount)
|
||||
{
|
||||
--amount;
|
||||
return (x + amount) & ~amount;
|
||||
}
|
||||
|
||||
static inline uint8_t* u8(const unsigned char* buffer, unsigned address)
|
||||
{
|
||||
return (uint8_t*)(buffer + (address ^ S8));
|
||||
}
|
||||
|
||||
static inline uint16_t* u16(const unsigned char* buffer, unsigned address)
|
||||
{
|
||||
assert((address & 1) == 0);
|
||||
return (uint16_t*)(buffer + (address ^ S16));
|
||||
}
|
||||
|
||||
static inline uint32_t* u32(const unsigned char* buffer, unsigned address)
|
||||
{
|
||||
assert((address & 3) == 0);
|
||||
return (uint32_t*)(buffer + address);
|
||||
}
|
||||
|
||||
void load_u8 (uint8_t* dst, const unsigned char* buffer, unsigned address, size_t count);
|
||||
void load_u16(uint16_t* dst, const unsigned char* buffer, unsigned address, size_t count);
|
||||
void load_u32(uint32_t* dst, const unsigned char* buffer, unsigned address, size_t count);
|
||||
void store_u16(unsigned char* buffer, unsigned address, const uint16_t* src, size_t count);
|
||||
void store_u32(unsigned char* buffer, unsigned address, const uint32_t* src, size_t count);
|
||||
|
||||
static inline uint32_t* dmem_u32(CHle * hle, uint16_t address)
|
||||
{
|
||||
return u32(hle->dmem(), address & 0xfff);
|
||||
}
|
||||
|
||||
static inline void dmem_store_u32(CHle * hle, const uint32_t* src, uint16_t address, size_t count)
|
||||
{
|
||||
store_u32(hle->dmem(), address & 0xfff, src, count);
|
||||
}
|
||||
|
||||
// Convenient functions DRAM access
|
||||
static inline uint8_t* dram_u8(CHle * hle, uint32_t address)
|
||||
{
|
||||
return u8(hle->dram(), address & 0xffffff);
|
||||
}
|
||||
|
||||
static inline uint16_t* dram_u16(CHle * hle, uint32_t address)
|
||||
{
|
||||
return u16(hle->dram(), address & 0xffffff);
|
||||
}
|
||||
|
||||
static inline uint32_t* dram_u32(CHle * hle, uint32_t address)
|
||||
{
|
||||
return u32(hle->dram(), address & 0xffffff);
|
||||
}
|
||||
|
||||
static inline void dram_load_u8(CHle * hle, uint8_t* dst, uint32_t address, size_t count)
|
||||
{
|
||||
load_u8(dst, hle->dram(), address & 0xffffff, count);
|
||||
}
|
||||
|
||||
static inline void dram_load_u16(CHle * hle, uint16_t* dst, uint32_t address, size_t count)
|
||||
{
|
||||
load_u16(dst, hle->dram(), address & 0xffffff, count);
|
||||
}
|
||||
|
||||
static inline void dram_load_u32(CHle * hle, uint32_t* dst, uint32_t address, size_t count)
|
||||
{
|
||||
load_u32(dst, hle->dram(), address & 0xffffff, count);
|
||||
}
|
||||
|
||||
static inline void dram_store_u16(CHle * hle, const uint16_t* src, uint32_t address, size_t count)
|
||||
{
|
||||
store_u16(hle->dram(), address & 0xffffff, src, count);
|
||||
}
|
||||
|
||||
static inline void dram_store_u32(CHle * hle, const uint32_t* src, uint32_t address, size_t count)
|
||||
{
|
||||
store_u32(hle->dram(), address & 0xffffff, src, count);
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Developer Studio generated include file.
|
||||
// Used by RSP.rc
|
||||
//
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 5001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
|
@ -1 +0,0 @@
|
|||
#include "stdafx.h"
|
|
@ -1,6 +0,0 @@
|
|||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "Version.h"
|
||||
#include "Rsp.h"
|
||||
#include "hle.h"
|
|
@ -6,12 +6,15 @@
|
|||
// Copyright(C) 2002 Hacktarux
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <memory.h>
|
||||
#include "alist.h"
|
||||
#include "arithmetics.h"
|
||||
#include "audio.h"
|
||||
#include "hle.h"
|
||||
#include "mem.h"
|
||||
#include <memory.h>
|
||||
#include <stdint.h>
|
||||
|
||||
aaa
|
||||
|
||||
struct ramp_t
|
||||
{
|
||||
|
@ -146,7 +149,7 @@ void alist_load(CHle * hle, uint16_t dmem, uint32_t address, uint16_t count)
|
|||
// Enforce DMA alignment constraints
|
||||
dmem &= ~3;
|
||||
address &= ~7;
|
||||
count = align(count, 8);
|
||||
count = (uint16_t)align(count, 8);
|
||||
memcpy(hle->alist_buffer() + dmem, hle->dram() + address, count);
|
||||
}
|
||||
|
||||
|
@ -633,7 +636,8 @@ void alist_resample( CHle * hle, bool init, bool flag2, uint16_t dmemo, uint16_t
|
|||
(*sample(hle, ipos) * lut[0]) +
|
||||
(*sample(hle, ipos + 1) * lut[1]) +
|
||||
(*sample(hle, ipos + 2) * lut[2]) +
|
||||
(*sample(hle, ipos + 3) * lut[3]) ) >> 15);
|
||||
(*sample(hle, ipos + 3) * lut[3])) >>
|
||||
15);
|
||||
|
||||
pitch_accu += pitch;
|
||||
ipos += (pitch_accu >> 16);
|
|
@ -0,0 +1,52 @@
|
|||
// Project64 - A Nintendo 64 emulator
|
||||
// https://www.pj64-emu.com/
|
||||
// Copyright(C) 2001-2021 Project64
|
||||
// Copyright(C) 2014 Bobby Smiles
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
|
||||
class CHle;
|
||||
|
||||
typedef void (*acmd_callback_t)(CHle * hle, uint32_t w1, uint32_t w2);
|
||||
|
||||
void alist_process(CHle * hle, const acmd_callback_t abi[], unsigned int abi_size);
|
||||
uint32_t alist_get_address(CHle * hle, uint32_t so, const uint32_t * segments, size_t n);
|
||||
void alist_set_address(CHle * hle, uint32_t so, uint32_t * segments, size_t n);
|
||||
void alist_clear(CHle * hle, uint16_t dmem, uint16_t count);
|
||||
void alist_load(CHle * hle, uint16_t dmem, uint32_t address, uint16_t count);
|
||||
void alist_save(CHle * hle, uint16_t dmem, uint32_t address, uint16_t count);
|
||||
void alist_move(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t count);
|
||||
void alist_copy_every_other_sample(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t count);
|
||||
void alist_repeat64(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint8_t count);
|
||||
void alist_copy_blocks(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t block_size, uint8_t count);
|
||||
void alist_interleave(CHle * hle, uint16_t dmemo, uint16_t left, uint16_t right, uint16_t count);
|
||||
void alist_envmix_exp(CHle * hle, bool init, bool aux, uint16_t dmem_dl, uint16_t dmem_dr, uint16_t dmem_wl, uint16_t dmem_wr, uint16_t dmemi, uint16_t count, int16_t dry, int16_t wet, const int16_t * vol, const int16_t * target, const int32_t * rate, uint32_t address);
|
||||
void alist_envmix_ge(CHle * hle, bool init, bool aux, uint16_t dmem_dl, uint16_t dmem_dr, uint16_t dmem_wl, uint16_t dmem_wr, uint16_t dmemi, uint16_t count, int16_t dry, int16_t wet, const int16_t * vol, const int16_t * target, const int32_t * rate, uint32_t address);
|
||||
void alist_envmix_lin(CHle * hle, bool init, uint16_t dmem_dl, uint16_t dmem_dr, uint16_t dmem_wl, uint16_t dmem_wr, uint16_t dmemi, uint16_t count, int16_t dry, int16_t wet, const int16_t * vol, const int16_t * target, const int32_t * rate, uint32_t address);
|
||||
void alist_envmix_nead(CHle * hle, bool swap_wet_LR, uint16_t dmem_dl, uint16_t dmem_dr, uint16_t dmem_wl, uint16_t dmem_wr, uint16_t dmemi, unsigned count, uint16_t * env_values, uint16_t * env_steps, const int16_t * xors);
|
||||
void alist_mix(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t count, int16_t gain);
|
||||
void alist_multQ44(CHle * hle, uint16_t dmem, uint16_t count, int8_t gain);
|
||||
void alist_add(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t count);
|
||||
void alist_adpcm(CHle * hle, bool init, bool loop, bool two_bit_per_sample, uint16_t dmemo, uint16_t dmemi, uint16_t count, const int16_t * codebook, uint32_t loop_address, uint32_t last_frame_address);
|
||||
void alist_resample(CHle * hle, bool init, bool flag2, uint16_t dmemo, uint16_t dmemi, uint16_t count, uint32_t pitch, uint32_t address);
|
||||
void alist_polef(CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t count, uint16_t gain, int16_t * table, uint32_t address);
|
||||
void alist_iirf(CHle * hle, bool init, uint16_t dmemo, uint16_t dmemi, uint16_t count, int16_t * table, uint32_t address);
|
||||
void alist_resample_zoh(CHle * hle, uint16_t dmemo, uint16_t dmemi, uint16_t count, uint32_t pitch, uint32_t pitch_accu);
|
||||
void alist_filter(CHle * hle, uint16_t dmem, uint16_t count, uint32_t address, const uint32_t * lut_address);
|
||||
|
||||
// Audio flags
|
||||
|
||||
#define A_INIT 0x01
|
||||
#define A_CONTINUE 0x00
|
||||
#define A_LOOP 0x02
|
||||
#define A_OUT 0x02
|
||||
#define A_LEFT 0x02
|
||||
#define A_RIGHT 0x00
|
||||
#define A_VOL 0x04
|
||||
#define A_RATE 0x00
|
||||
#define A_AUX 0x08
|
||||
#define A_NOAUX 0x00
|
||||
#define A_MAIN 0x00
|
||||
#define A_MIX 0x10
|
|
@ -6,16 +6,18 @@
|
|||
// Copyright(C) 2002 Hacktarux
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "alist.h"
|
||||
#include "common.h"
|
||||
#include "hle.h"
|
||||
#include "mem.h"
|
||||
#include "ucodes.h"
|
||||
|
||||
enum { DMEM_BASE = 0x5c0 };
|
||||
enum
|
||||
{
|
||||
DMEM_BASE = 0x5c0
|
||||
};
|
||||
|
||||
// Helper functions
|
||||
|
||||
|
@ -271,8 +273,7 @@ void alist_process_audio(CHle * hle)
|
|||
SPNOOP, ADPCM, CLEARBUFF, ENVMIXER,
|
||||
LOADBUFF, RESAMPLE, SAVEBUFF, SEGMENT,
|
||||
SETBUFF, SETVOL, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, POLEF, SETLOOP
|
||||
};
|
||||
MIXER, INTERLEAVE, POLEF, SETLOOP};
|
||||
|
||||
clear_segments(hle);
|
||||
alist_process(hle, ABI, 0x10);
|
||||
|
@ -285,8 +286,7 @@ void alist_process_audio_ge(CHle * hle)
|
|||
SPNOOP, ADPCM, CLEARBUFF, ENVMIXER_GE,
|
||||
LOADBUFF, RESAMPLE, SAVEBUFF, SEGMENT,
|
||||
SETBUFF, SETVOL, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, POLEF, SETLOOP
|
||||
};
|
||||
MIXER, INTERLEAVE, POLEF, SETLOOP};
|
||||
|
||||
clear_segments(hle);
|
||||
alist_process(hle, ABI, 0x10);
|
||||
|
@ -299,8 +299,7 @@ void alist_process_audio_bc(CHle * hle)
|
|||
SPNOOP, ADPCM, CLEARBUFF, ENVMIXER_GE,
|
||||
LOADBUFF, RESAMPLE, SAVEBUFF, SEGMENT,
|
||||
SETBUFF, SETVOL, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, POLEF, SETLOOP
|
||||
};
|
||||
MIXER, INTERLEAVE, POLEF, SETLOOP};
|
||||
|
||||
clear_segments(hle);
|
||||
alist_process(hle, ABI, 0x10);
|
|
@ -6,13 +6,17 @@
|
|||
// Copyright(C) 2002 Hacktarux
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <stdint.h>
|
||||
|
||||
#include "alist.h"
|
||||
#include "mem.h"
|
||||
|
||||
enum { NAUDIO_COUNT = 0x170 }; // i.e. 184 samples
|
||||
enum {
|
||||
enum
|
||||
{
|
||||
NAUDIO_COUNT = 0x170
|
||||
}; // i.e. 184 samples
|
||||
enum
|
||||
{
|
||||
NAUDIO_MAIN = 0x4f0,
|
||||
NAUDIO_MAIN2 = 0x660,
|
||||
NAUDIO_DRY_LEFT = 0x9d0,
|
||||
|
@ -70,13 +74,16 @@ static void SETVOL(CHle * hle, uint32_t w1, uint32_t w2)
|
|||
{
|
||||
uint8_t flags = (w1 >> 16);
|
||||
|
||||
if (flags & 0x4) {
|
||||
if (flags & 0x2) {
|
||||
if (flags & 0x4)
|
||||
{
|
||||
if (flags & 0x2)
|
||||
{
|
||||
hle->alist_naudio().vol[0] = w1;
|
||||
hle->alist_naudio().dry = (w2 >> 16);
|
||||
hle->alist_naudio().wet = w2;
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
hle->alist_naudio().target[1] = w1;
|
||||
hle->alist_naudio().rate[1] = w2;
|
||||
}
|
||||
|
@ -235,8 +242,7 @@ void alist_process_naudio(CHle * hle)
|
|||
SPNOOP, ADPCM, CLEARBUFF, ENVMIXER,
|
||||
LOADBUFF, RESAMPLE, SAVEBUFF, NAUDIO_0000,
|
||||
NAUDIO_0000, SETVOL, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, NAUDIO_02B0, SETLOOP
|
||||
};
|
||||
MIXER, INTERLEAVE, NAUDIO_02B0, SETLOOP};
|
||||
|
||||
alist_process(hle, ABI, 0x10);
|
||||
}
|
||||
|
@ -249,8 +255,7 @@ void alist_process_naudio_bk(CHle * hle)
|
|||
SPNOOP, ADPCM, CLEARBUFF, ENVMIXER,
|
||||
LOADBUFF, RESAMPLE, SAVEBUFF, NAUDIO_0000,
|
||||
NAUDIO_0000, SETVOL, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, NAUDIO_02B0, SETLOOP
|
||||
};
|
||||
MIXER, INTERLEAVE, NAUDIO_02B0, SETLOOP};
|
||||
|
||||
alist_process(hle, ABI, 0x10);
|
||||
}
|
||||
|
@ -263,8 +268,7 @@ void alist_process_naudio_dk(CHle * hle)
|
|||
SPNOOP, ADPCM, CLEARBUFF, ENVMIXER,
|
||||
LOADBUFF, RESAMPLE, SAVEBUFF, MIXER,
|
||||
MIXER, SETVOL, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, NAUDIO_02B0, SETLOOP
|
||||
};
|
||||
MIXER, INTERLEAVE, NAUDIO_02B0, SETLOOP};
|
||||
|
||||
alist_process(hle, ABI, 0x10);
|
||||
}
|
||||
|
@ -275,8 +279,7 @@ void alist_process_naudio_mp3(CHle * hle)
|
|||
UNKNOWN, ADPCM, CLEARBUFF, ENVMIXER,
|
||||
LOADBUFF, RESAMPLE, SAVEBUFF, MP3,
|
||||
MP3ADDY, SETVOL, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, NAUDIO_14, SETLOOP
|
||||
};
|
||||
MIXER, INTERLEAVE, NAUDIO_14, SETLOOP};
|
||||
|
||||
alist_process(hle, ABI, 0x10);
|
||||
}
|
||||
|
@ -289,8 +292,7 @@ void alist_process_naudio_cbfd(CHle * hle)
|
|||
UNKNOWN, ADPCM, CLEARBUFF, ENVMIXER,
|
||||
LOADBUFF, RESAMPLE, SAVEBUFF, MP3,
|
||||
MP3ADDY, SETVOL, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, NAUDIO_14, SETLOOP
|
||||
};
|
||||
MIXER, INTERLEAVE, NAUDIO_14, SETLOOP};
|
||||
|
||||
alist_process(hle, ABI, 0x10);
|
||||
}
|
|
@ -6,7 +6,8 @@
|
|||
// Copyright(C) 2002 Hacktarux
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "hle.h"
|
||||
#include <stdint.h>
|
||||
|
||||
#include "alist.h"
|
||||
#include "mem.h"
|
||||
|
@ -282,11 +283,13 @@ static void FILTER(CHle * hle, uint32_t w1, uint32_t w2)
|
|||
uint8_t flags = (w1 >> 16);
|
||||
uint32_t address = (w2 & 0xffffff);
|
||||
|
||||
if (flags > 1) {
|
||||
if (flags > 1)
|
||||
{
|
||||
hle->alist_nead().filter_count = w1;
|
||||
hle->alist_nead().filter_lut_address[0] = address; // T6
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
uint16_t dmem = w1;
|
||||
|
||||
hle->alist_nead().filter_lut_address[1] = address + 0x10; // T5
|
||||
|
@ -338,8 +341,7 @@ void alist_process_nead_mk(CHle * hle)
|
|||
NEAD_16, INTERL, ENVSETUP1_MK, ENVMIXER_MK,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, SPNOOP,
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP,
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP
|
||||
};
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP};
|
||||
|
||||
alist_process(hle, ABI, 0x20);
|
||||
}
|
||||
|
@ -354,8 +356,7 @@ void alist_process_nead_sf(CHle * hle)
|
|||
NEAD_16, INTERL, ENVSETUP1, ENVMIXER,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, SPNOOP,
|
||||
HILOGAIN, UNKNOWN, DUPLICATE, SPNOOP,
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP
|
||||
};
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP};
|
||||
|
||||
alist_process(hle, ABI, 0x20);
|
||||
}
|
||||
|
@ -370,8 +371,7 @@ void alist_process_nead_sfj(CHle * hle)
|
|||
NEAD_16, INTERL, ENVSETUP1, ENVMIXER,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN,
|
||||
HILOGAIN, UNKNOWN, DUPLICATE, SPNOOP,
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP
|
||||
};
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP};
|
||||
|
||||
alist_process(hle, ABI, 0x20);
|
||||
}
|
||||
|
@ -386,8 +386,7 @@ void alist_process_nead_fz(CHle * hle)
|
|||
NEAD_16, INTERL, ENVSETUP1, ENVMIXER,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN,
|
||||
SPNOOP, UNKNOWN, DUPLICATE, SPNOOP,
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP
|
||||
};
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP};
|
||||
|
||||
alist_process(hle, ABI, 0x20);
|
||||
}
|
||||
|
@ -402,8 +401,7 @@ void alist_process_nead_wrjb(CHle * hle)
|
|||
NEAD_16, INTERL, ENVSETUP1, ENVMIXER,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN,
|
||||
HILOGAIN, UNKNOWN, DUPLICATE, FILTER,
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP
|
||||
};
|
||||
SPNOOP, SPNOOP, SPNOOP, SPNOOP};
|
||||
|
||||
alist_process(hle, ABI, 0x20);
|
||||
}
|
||||
|
@ -416,8 +414,7 @@ void alist_process_nead_ys(CHle * hle)
|
|||
SETBUFF, DUPLICATE, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, HILOGAIN, SETLOOP,
|
||||
NEAD_16, INTERL, ENVSETUP1, ENVMIXER,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN
|
||||
};
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN};
|
||||
|
||||
alist_process(hle, ABI, 0x18);
|
||||
}
|
||||
|
@ -430,8 +427,7 @@ void alist_process_nead_1080(CHle * hle)
|
|||
SETBUFF, DUPLICATE, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, HILOGAIN, SETLOOP,
|
||||
NEAD_16, INTERL, ENVSETUP1, ENVMIXER,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN
|
||||
};
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN};
|
||||
|
||||
alist_process(hle, ABI, 0x18);
|
||||
}
|
||||
|
@ -444,8 +440,7 @@ void alist_process_nead_oot(CHle * hle)
|
|||
SETBUFF, DUPLICATE, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, HILOGAIN, SETLOOP,
|
||||
NEAD_16, INTERL, ENVSETUP1, ENVMIXER,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN
|
||||
};
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN};
|
||||
|
||||
alist_process(hle, ABI, 0x18);
|
||||
}
|
||||
|
@ -458,8 +453,7 @@ void alist_process_nead_mm(CHle * hle)
|
|||
SETBUFF, DUPLICATE, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, HILOGAIN, SETLOOP,
|
||||
NEAD_16, INTERL, ENVSETUP1, ENVMIXER,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN
|
||||
};
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN};
|
||||
|
||||
alist_process(hle, ABI, 0x18);
|
||||
}
|
||||
|
@ -472,8 +466,7 @@ void alist_process_nead_mmb(CHle * hle)
|
|||
SETBUFF, DUPLICATE, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, HILOGAIN, SETLOOP,
|
||||
NEAD_16, INTERL, ENVSETUP1, ENVMIXER,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN
|
||||
};
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN};
|
||||
|
||||
alist_process(hle, ABI, 0x18);
|
||||
}
|
||||
|
@ -486,8 +479,7 @@ void alist_process_nead_ac(CHle * hle)
|
|||
SETBUFF, DUPLICATE, DMEMMOVE, LOADADPCM,
|
||||
MIXER, INTERLEAVE, HILOGAIN, SETLOOP,
|
||||
NEAD_16, INTERL, ENVSETUP1, ENVMIXER,
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN
|
||||
};
|
||||
LOADBUFF, SAVEBUFF, ENVSETUP2, UNKNOWN};
|
||||
|
||||
alist_process(hle, ABI, 0x18);
|
||||
}
|
|
@ -0,0 +1,114 @@
|
|||
// Project64 - A Nintendo 64 emulator
|
||||
// https://www.pj64-emu.com/
|
||||
// Copyright(C) 2001-2021 Project64
|
||||
// Copyright(C) 2014 Bobby Smiles
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "audio.h"
|
||||
#include <assert.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "arithmetics.h"
|
||||
|
||||
const int16_t RESAMPLE_LUT[64 * 4] =
|
||||
{
|
||||
(int16_t)0x0c39u, (int16_t)0x66adu, (int16_t)0x0d46u, (int16_t)0xffdfu,
|
||||
(int16_t)0x0b39u, (int16_t)0x6696u, (int16_t)0x0e5fu, (int16_t)0xffd8u,
|
||||
(int16_t)0x0a44u, (int16_t)0x6669u, (int16_t)0x0f83u, (int16_t)0xffd0u,
|
||||
(int16_t)0x095au, (int16_t)0x6626u, (int16_t)0x10b4u, (int16_t)0xffc8u,
|
||||
(int16_t)0x087du, (int16_t)0x65cdu, (int16_t)0x11f0u, (int16_t)0xffbfu,
|
||||
(int16_t)0x07abu, (int16_t)0x655eu, (int16_t)0x1338u, (int16_t)0xffb6u,
|
||||
(int16_t)0x06e4u, (int16_t)0x64d9u, (int16_t)0x148cu, (int16_t)0xffacu,
|
||||
(int16_t)0x0628u, (int16_t)0x643fu, (int16_t)0x15ebu, (int16_t)0xffa1u,
|
||||
(int16_t)0x0577u, (int16_t)0x638fu, (int16_t)0x1756u, (int16_t)0xff96u,
|
||||
(int16_t)0x04d1u, (int16_t)0x62cbu, (int16_t)0x18cbu, (int16_t)0xff8au,
|
||||
(int16_t)0x0435u, (int16_t)0x61f3u, (int16_t)0x1a4cu, (int16_t)0xff7eu,
|
||||
(int16_t)0x03a4u, (int16_t)0x6106u, (int16_t)0x1bd7u, (int16_t)0xff71u,
|
||||
(int16_t)0x031cu, (int16_t)0x6007u, (int16_t)0x1d6cu, (int16_t)0xff64u,
|
||||
(int16_t)0x029fu, (int16_t)0x5ef5u, (int16_t)0x1f0bu, (int16_t)0xff56u,
|
||||
(int16_t)0x022au, (int16_t)0x5dd0u, (int16_t)0x20b3u, (int16_t)0xff48u,
|
||||
(int16_t)0x01beu, (int16_t)0x5c9au, (int16_t)0x2264u, (int16_t)0xff3au,
|
||||
(int16_t)0x015bu, (int16_t)0x5b53u, (int16_t)0x241eu, (int16_t)0xff2cu,
|
||||
(int16_t)0x0101u, (int16_t)0x59fcu, (int16_t)0x25e0u, (int16_t)0xff1eu,
|
||||
(int16_t)0x00aeu, (int16_t)0x5896u, (int16_t)0x27a9u, (int16_t)0xff10u,
|
||||
(int16_t)0x0063u, (int16_t)0x5720u, (int16_t)0x297au, (int16_t)0xff02u,
|
||||
(int16_t)0x001fu, (int16_t)0x559du, (int16_t)0x2b50u, (int16_t)0xfef4u,
|
||||
(int16_t)0xffe2u, (int16_t)0x540du, (int16_t)0x2d2cu, (int16_t)0xfee8u,
|
||||
(int16_t)0xffacu, (int16_t)0x5270u, (int16_t)0x2f0du, (int16_t)0xfedbu,
|
||||
(int16_t)0xff7cu, (int16_t)0x50c7u, (int16_t)0x30f3u, (int16_t)0xfed0u,
|
||||
(int16_t)0xff53u, (int16_t)0x4f14u, (int16_t)0x32dcu, (int16_t)0xfec6u,
|
||||
(int16_t)0xff2eu, (int16_t)0x4d57u, (int16_t)0x34c8u, (int16_t)0xfebdu,
|
||||
(int16_t)0xff0fu, (int16_t)0x4b91u, (int16_t)0x36b6u, (int16_t)0xfeb6u,
|
||||
(int16_t)0xfef5u, (int16_t)0x49c2u, (int16_t)0x38a5u, (int16_t)0xfeb0u,
|
||||
(int16_t)0xfedfu, (int16_t)0x47edu, (int16_t)0x3a95u, (int16_t)0xfeacu,
|
||||
(int16_t)0xfeceu, (int16_t)0x4611u, (int16_t)0x3c85u, (int16_t)0xfeabu,
|
||||
(int16_t)0xfec0u, (int16_t)0x4430u, (int16_t)0x3e74u, (int16_t)0xfeacu,
|
||||
(int16_t)0xfeb6u, (int16_t)0x424au, (int16_t)0x4060u, (int16_t)0xfeafu,
|
||||
(int16_t)0xfeafu, (int16_t)0x4060u, (int16_t)0x424au, (int16_t)0xfeb6u,
|
||||
(int16_t)0xfeacu, (int16_t)0x3e74u, (int16_t)0x4430u, (int16_t)0xfec0u,
|
||||
(int16_t)0xfeabu, (int16_t)0x3c85u, (int16_t)0x4611u, (int16_t)0xfeceu,
|
||||
(int16_t)0xfeacu, (int16_t)0x3a95u, (int16_t)0x47edu, (int16_t)0xfedfu,
|
||||
(int16_t)0xfeb0u, (int16_t)0x38a5u, (int16_t)0x49c2u, (int16_t)0xfef5u,
|
||||
(int16_t)0xfeb6u, (int16_t)0x36b6u, (int16_t)0x4b91u, (int16_t)0xff0fu,
|
||||
(int16_t)0xfebdu, (int16_t)0x34c8u, (int16_t)0x4d57u, (int16_t)0xff2eu,
|
||||
(int16_t)0xfec6u, (int16_t)0x32dcu, (int16_t)0x4f14u, (int16_t)0xff53u,
|
||||
(int16_t)0xfed0u, (int16_t)0x30f3u, (int16_t)0x50c7u, (int16_t)0xff7cu,
|
||||
(int16_t)0xfedbu, (int16_t)0x2f0du, (int16_t)0x5270u, (int16_t)0xffacu,
|
||||
(int16_t)0xfee8u, (int16_t)0x2d2cu, (int16_t)0x540du, (int16_t)0xffe2u,
|
||||
(int16_t)0xfef4u, (int16_t)0x2b50u, (int16_t)0x559du, (int16_t)0x001fu,
|
||||
(int16_t)0xff02u, (int16_t)0x297au, (int16_t)0x5720u, (int16_t)0x0063u,
|
||||
(int16_t)0xff10u, (int16_t)0x27a9u, (int16_t)0x5896u, (int16_t)0x00aeu,
|
||||
(int16_t)0xff1eu, (int16_t)0x25e0u, (int16_t)0x59fcu, (int16_t)0x0101u,
|
||||
(int16_t)0xff2cu, (int16_t)0x241eu, (int16_t)0x5b53u, (int16_t)0x015bu,
|
||||
(int16_t)0xff3au, (int16_t)0x2264u, (int16_t)0x5c9au, (int16_t)0x01beu,
|
||||
(int16_t)0xff48u, (int16_t)0x20b3u, (int16_t)0x5dd0u, (int16_t)0x022au,
|
||||
(int16_t)0xff56u, (int16_t)0x1f0bu, (int16_t)0x5ef5u, (int16_t)0x029fu,
|
||||
(int16_t)0xff64u, (int16_t)0x1d6cu, (int16_t)0x6007u, (int16_t)0x031cu,
|
||||
(int16_t)0xff71u, (int16_t)0x1bd7u, (int16_t)0x6106u, (int16_t)0x03a4u,
|
||||
(int16_t)0xff7eu, (int16_t)0x1a4cu, (int16_t)0x61f3u, (int16_t)0x0435u,
|
||||
(int16_t)0xff8au, (int16_t)0x18cbu, (int16_t)0x62cbu, (int16_t)0x04d1u,
|
||||
(int16_t)0xff96u, (int16_t)0x1756u, (int16_t)0x638fu, (int16_t)0x0577u,
|
||||
(int16_t)0xffa1u, (int16_t)0x15ebu, (int16_t)0x643fu, (int16_t)0x0628u,
|
||||
(int16_t)0xffacu, (int16_t)0x148cu, (int16_t)0x64d9u, (int16_t)0x06e4u,
|
||||
(int16_t)0xffb6u, (int16_t)0x1338u, (int16_t)0x655eu, (int16_t)0x07abu,
|
||||
(int16_t)0xffbfu, (int16_t)0x11f0u, (int16_t)0x65cdu, (int16_t)0x087du,
|
||||
(int16_t)0xffc8u, (int16_t)0x10b4u, (int16_t)0x6626u, (int16_t)0x095au,
|
||||
(int16_t)0xffd0u, (int16_t)0x0f83u, (int16_t)0x6669u, (int16_t)0x0a44u,
|
||||
(int16_t)0xffd8u, (int16_t)0x0e5fu, (int16_t)0x6696u, (int16_t)0x0b39u,
|
||||
(int16_t)0xffdfu, (int16_t)0x0d46u, (int16_t)0x66adu, (int16_t)0x0c39u};
|
||||
|
||||
int32_t rdot(size_t n, const int16_t * x, const int16_t * y)
|
||||
{
|
||||
int32_t accu = 0;
|
||||
|
||||
y += n;
|
||||
|
||||
while (n != 0)
|
||||
{
|
||||
accu += *(x++) * *(--y);
|
||||
--n;
|
||||
}
|
||||
|
||||
return accu;
|
||||
}
|
||||
|
||||
void adpcm_compute_residuals(int16_t * dst, const int16_t * src,
|
||||
const int16_t * cb_entry, const int16_t * last_samples, size_t count)
|
||||
{
|
||||
const int16_t * const book1 = cb_entry;
|
||||
const int16_t * const book2 = cb_entry + 8;
|
||||
|
||||
const int16_t l1 = last_samples[0];
|
||||
const int16_t l2 = last_samples[1];
|
||||
|
||||
size_t i;
|
||||
|
||||
assert(count <= 8);
|
||||
|
||||
for (i = 0; i < count; ++i)
|
||||
{
|
||||
int32_t accu = (int32_t)src[i] << 11;
|
||||
accu += book1[i] * l1 + book2[i] * l2 + rdot(i, book2, src);
|
||||
dst[i] = clamp_s16(accu >> 11);
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@
|
|||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
|
||||
extern const int16_t RESAMPLE_LUT[64 * 4];
|
||||
|
|
@ -6,9 +6,11 @@
|
|||
// Copyright(C) 2002 Hacktarux
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "hle.h"
|
||||
|
||||
/*
|
||||
During IPL3 stage of CIC x105 games, the RSP performs some checks and transactions
|
||||
necessary for booting the game.
|
|
@ -6,7 +6,8 @@
|
|||
// Copyright(C) 2002 Hacktarux
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "hle.h"
|
||||
#include <stdint.h>
|
||||
#if defined(_WIN32) && defined(_DEBUG)
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
|
@ -265,7 +266,8 @@ void CHle::normal_task_dispatching(void)
|
|||
const unsigned int sum =
|
||||
sum_bytes((const uint8_t *)dram_u32(this, *dmem_u32(this, TASK_UCODE)), min(*dmem_u32(this, TASK_UCODE_SIZE), 0xf80) >> 1);
|
||||
|
||||
switch (sum) {
|
||||
switch (sum)
|
||||
{
|
||||
// StoreVe12: found in Zelda Ocarina of Time [misleading task->type == 4]
|
||||
case 0x278:
|
||||
// Nothing to emulate
|
||||
|
@ -320,7 +322,7 @@ void CHle::non_task_dispatching(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
void CHle::VerboseMessage(const char *message, ...)
|
||||
void CHle::VerboseMessage(const char * /*message*/, ...)
|
||||
{
|
||||
#if defined(_WIN32) && defined(_DEBUG)
|
||||
// These can get annoying
|
|
@ -0,0 +1,138 @@
|
|||
// Project64 - A Nintendo 64 emulator
|
||||
// https://www.pj64-emu.com/
|
||||
// Copyright(C) 2001-2021 Project64
|
||||
// Copyright(C) 2014 Bobby Smiles
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#pragma once
|
||||
#include "ucodes.h"
|
||||
#include <Project64-rsp-core/RSPInfo.h>
|
||||
#include <Project64-rsp-core/cpu/RSPRegisters.h>
|
||||
#include <stdint.h>
|
||||
|
||||
// Macro for unused variable warning suppression
|
||||
#ifdef __GNUC__
|
||||
#define UNUSED(x) UNUSED_##x __attribute__((__unused__))
|
||||
#else
|
||||
#define UNUSED(x) /* x */
|
||||
#endif
|
||||
|
||||
class CHle
|
||||
{
|
||||
public:
|
||||
CHle(const RSP_INFO & Rsp_Info);
|
||||
~CHle();
|
||||
|
||||
uint8_t * dram()
|
||||
{
|
||||
return m_dram;
|
||||
}
|
||||
uint8_t * dmem()
|
||||
{
|
||||
return m_dmem;
|
||||
}
|
||||
uint8_t * imem()
|
||||
{
|
||||
return m_imem;
|
||||
}
|
||||
|
||||
bool AudioHle()
|
||||
{
|
||||
return m_AudioHle;
|
||||
}
|
||||
bool GraphicsHle()
|
||||
{
|
||||
return m_GraphicsHle;
|
||||
}
|
||||
struct alist_audio_t & alist_audio()
|
||||
{
|
||||
return m_alist_audio;
|
||||
}
|
||||
struct alist_naudio_t & alist_naudio()
|
||||
{
|
||||
return m_alist_naudio;
|
||||
}
|
||||
struct alist_nead_t & alist_nead()
|
||||
{
|
||||
return m_alist_nead;
|
||||
}
|
||||
uint8_t * mp3_buffer()
|
||||
{
|
||||
return &m_mp3_buffer[0];
|
||||
}
|
||||
|
||||
uint8_t * alist_buffer()
|
||||
{
|
||||
return &m_alist_buffer[0];
|
||||
}
|
||||
|
||||
void VerboseMessage(const char * message, ...);
|
||||
void WarnMessage(const char * message, ...);
|
||||
void ErrorMessage(const char * message, ...);
|
||||
|
||||
void rsp_break(uint32_t setbits);
|
||||
void hle_execute(void);
|
||||
|
||||
bool try_fast_audio_dispatching(void);
|
||||
|
||||
private:
|
||||
CHle(void);
|
||||
CHle(const CHle &);
|
||||
CHle & operator=(const CHle &);
|
||||
|
||||
bool is_task(void);
|
||||
bool try_fast_task_dispatching(void);
|
||||
void normal_task_dispatching(void);
|
||||
void non_task_dispatching(void);
|
||||
|
||||
uint8_t * m_dram;
|
||||
uint8_t * m_dmem;
|
||||
uint8_t * m_imem;
|
||||
|
||||
uint32_t * m_mi_intr;
|
||||
|
||||
uint32_t * m_sp_mem_addr;
|
||||
uint32_t * m_sp_dram_addr;
|
||||
uint32_t * m_sp_rd_length;
|
||||
uint32_t * m_sp_wr_length;
|
||||
uint32_t * m_sp_status;
|
||||
uint32_t * m_sp_dma_full;
|
||||
uint32_t * m_sp_dma_busy;
|
||||
uint32_t * m_sp_pc;
|
||||
uint32_t * m_sp_semaphore;
|
||||
|
||||
uint32_t * m_dpc_start;
|
||||
uint32_t * m_dpc_end;
|
||||
uint32_t * m_dpc_current;
|
||||
uint32_t * m_dpc_status;
|
||||
uint32_t * m_dpc_clock;
|
||||
uint32_t * m_dpc_bufbusy;
|
||||
uint32_t * m_dpc_pipebusy;
|
||||
uint32_t * m_dpc_tmem;
|
||||
|
||||
void (*m_CheckInterrupts)(void);
|
||||
void (*m_ProcessDList)(void);
|
||||
void (*m_ProcessAList)(void);
|
||||
void (*m_ProcessRdpList)(void);
|
||||
void (*m_ShowCFB)(void);
|
||||
|
||||
// alist.cpp
|
||||
uint8_t m_alist_buffer[0x1000];
|
||||
|
||||
// alist_audio.cpp
|
||||
struct alist_audio_t m_alist_audio;
|
||||
|
||||
// alist_naudio.cpp
|
||||
struct alist_naudio_t m_alist_naudio;
|
||||
|
||||
// alist_nead.cpp
|
||||
struct alist_nead_t m_alist_nead;
|
||||
|
||||
// mp3.cpp
|
||||
uint8_t m_mp3_buffer[0x1000];
|
||||
|
||||
bool m_AudioHle;
|
||||
bool m_GraphicsHle;
|
||||
bool m_ForwardAudio;
|
||||
bool m_ForwardGFX;
|
||||
};
|
|
@ -6,7 +6,7 @@
|
|||
// Copyright(C) 2002 Hacktarux
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "arithmetics.h"
|
||||
|
@ -68,8 +68,7 @@ static const int16_t DEFAULT_QTABLE[SUBBLOCK_SIZE] = {
|
|||
24, 26, 40, 51, 68, 81, 103, 112,
|
||||
40, 58, 57, 87, 109, 104, 121, 100,
|
||||
51, 60, 69, 80, 103, 113, 120, 103,
|
||||
61, 55, 56, 62, 77, 92, 101, 99
|
||||
};
|
||||
61, 55, 56, 62, 77, 92, 101, 99};
|
||||
|
||||
// Zig-zag indices
|
||||
static const unsigned int ZIGZAG_TABLE[SUBBLOCK_SIZE] = {
|
||||
|
@ -80,8 +79,7 @@ static const unsigned int ZIGZAG_TABLE[SUBBLOCK_SIZE] = {
|
|||
10, 19, 23, 32, 39, 45, 52, 54,
|
||||
20, 22, 33, 38, 46, 51, 55, 60,
|
||||
21, 34, 37, 47, 50, 56, 59, 61,
|
||||
35, 36, 48, 49, 57, 58, 62, 63
|
||||
};
|
||||
35, 36, 48, 49, 57, 58, 62, 63};
|
||||
|
||||
// Transposition indices
|
||||
static const unsigned int TRANSPOSE_TABLE[SUBBLOCK_SIZE] = {
|
||||
|
@ -92,8 +90,7 @@ static const unsigned int TRANSPOSE_TABLE[SUBBLOCK_SIZE] = {
|
|||
4, 12, 20, 28, 36, 44, 52, 60,
|
||||
5, 13, 21, 29, 37, 45, 53, 61,
|
||||
6, 14, 22, 30, 38, 46, 54, 62,
|
||||
7, 15, 23, 31, 39, 47, 55, 63
|
||||
};
|
||||
7, 15, 23, 31, 39, 47, 55, 63};
|
||||
|
||||
/* IDCT related constants
|
||||
* Cn = alpha * cos(n * PI / 16) (alpha is chosen such as C4 = 1) */
|
||||
|
@ -128,7 +125,6 @@ void jpeg_decode_PS(CHle * hle)
|
|||
jpeg_decode_std(hle, "PS", NULL, NULL, EmitRGBATileLine);
|
||||
}
|
||||
|
||||
|
||||
// JPEG decoding microcode found in Ogre Battle and Bottom of the 9th
|
||||
|
||||
void jpeg_decode_OB(CHle * hle)
|
||||
|
@ -339,7 +335,8 @@ static void EmitTilesMode0(CHle * hle, const tile_line_emitter_t emit_line, cons
|
|||
unsigned int y_offset = 0;
|
||||
unsigned int u_offset = 2 * SUBBLOCK_SIZE;
|
||||
|
||||
for (i = 0; i < 8; ++i) {
|
||||
for (i = 0; i < 8; ++i)
|
||||
{
|
||||
emit_line(hle, ¯oblock[y_offset], ¯oblock[u_offset], address);
|
||||
|
||||
y_offset += 8;
|
||||
|
@ -370,12 +367,14 @@ static void decode_macroblock_ob(int16_t *macroblock, int32_t *y_dc, int32_t *u_
|
|||
{
|
||||
int sb;
|
||||
|
||||
for (sb = 0; sb < 6; ++sb) {
|
||||
for (sb = 0; sb < 6; ++sb)
|
||||
{
|
||||
int16_t tmp_sb[SUBBLOCK_SIZE];
|
||||
|
||||
// Update decode
|
||||
int32_t dc = (int32_t)macroblock[0];
|
||||
switch (sb) {
|
||||
switch (sb)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
|
@ -482,7 +481,8 @@ static void ScaleSubBlock(int16_t *dst, const int16_t *src, int16_t scale)
|
|||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < SUBBLOCK_SIZE; ++i) {
|
||||
for (i = 0; i < SUBBLOCK_SIZE; ++i)
|
||||
{
|
||||
int32_t v = src[i] * scale;
|
||||
dst[i] = clamp_s16(v);
|
||||
}
|
|
@ -4,7 +4,8 @@
|
|||
// Copyright(C) 2012 Bobby Smiles
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "mem.h"
|
|
@ -0,0 +1,113 @@
|
|||
// Project64 - A Nintendo 64 emulator
|
||||
// https://www.pj64-emu.com/
|
||||
// Copyright(C) 2001-2021 Project64
|
||||
// Copyright(C) 2014 Bobby Smiles
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#pragma once
|
||||
#include "hle.h"
|
||||
#include <assert.h>
|
||||
|
||||
#define S 1
|
||||
#define S16 2
|
||||
#define S8 3
|
||||
|
||||
enum
|
||||
{
|
||||
TASK_TYPE = 0xfc0,
|
||||
TASK_FLAGS = 0xfc4,
|
||||
TASK_UCODE_BOOT = 0xfc8,
|
||||
TASK_UCODE_BOOT_SIZE = 0xfcc,
|
||||
TASK_UCODE = 0xfd0,
|
||||
TASK_UCODE_SIZE = 0xfd4,
|
||||
TASK_UCODE_DATA = 0xfd8,
|
||||
TASK_UCODE_DATA_SIZE = 0xfdc,
|
||||
TASK_DRAM_STACK = 0xfe0,
|
||||
TASK_DRAM_STACK_SIZE = 0xfe4,
|
||||
TASK_OUTPUT_BUFF = 0xfe8,
|
||||
TASK_OUTPUT_BUFF_SIZE = 0xfec,
|
||||
TASK_DATA_PTR = 0xff0,
|
||||
TASK_DATA_SIZE = 0xff4,
|
||||
TASK_YIELD_DATA_PTR = 0xff8,
|
||||
TASK_YIELD_DATA_SIZE = 0xffc
|
||||
};
|
||||
|
||||
static inline unsigned int align(unsigned int x, unsigned amount)
|
||||
{
|
||||
--amount;
|
||||
return (x + amount) & ~amount;
|
||||
}
|
||||
|
||||
static inline uint8_t * u8(const unsigned char * buffer, unsigned address)
|
||||
{
|
||||
return (uint8_t *)(buffer + (address ^ S8));
|
||||
}
|
||||
|
||||
static inline uint16_t * u16(const unsigned char * buffer, unsigned address)
|
||||
{
|
||||
assert((address & 1) == 0);
|
||||
return (uint16_t *)(buffer + (address ^ S16));
|
||||
}
|
||||
|
||||
static inline uint32_t * u32(const unsigned char * buffer, unsigned address)
|
||||
{
|
||||
assert((address & 3) == 0);
|
||||
return (uint32_t *)(buffer + address);
|
||||
}
|
||||
|
||||
void load_u8(uint8_t * dst, const unsigned char * buffer, unsigned address, size_t count);
|
||||
void load_u16(uint16_t * dst, const unsigned char * buffer, unsigned address, size_t count);
|
||||
void load_u32(uint32_t * dst, const unsigned char * buffer, unsigned address, size_t count);
|
||||
void store_u16(unsigned char * buffer, unsigned address, const uint16_t * src, size_t count);
|
||||
void store_u32(unsigned char * buffer, unsigned address, const uint32_t * src, size_t count);
|
||||
|
||||
static inline uint32_t * dmem_u32(CHle * hle, uint16_t address)
|
||||
{
|
||||
return u32(hle->dmem(), address & 0xfff);
|
||||
}
|
||||
|
||||
static inline void dmem_store_u32(CHle * hle, const uint32_t * src, uint16_t address, size_t count)
|
||||
{
|
||||
store_u32(hle->dmem(), address & 0xfff, src, count);
|
||||
}
|
||||
|
||||
// Convenient functions DRAM access
|
||||
static inline uint8_t * dram_u8(CHle * hle, uint32_t address)
|
||||
{
|
||||
return u8(hle->dram(), address & 0xffffff);
|
||||
}
|
||||
|
||||
static inline uint16_t * dram_u16(CHle * hle, uint32_t address)
|
||||
{
|
||||
return u16(hle->dram(), address & 0xffffff);
|
||||
}
|
||||
|
||||
static inline uint32_t * dram_u32(CHle * hle, uint32_t address)
|
||||
{
|
||||
return u32(hle->dram(), address & 0xffffff);
|
||||
}
|
||||
|
||||
static inline void dram_load_u8(CHle * hle, uint8_t * dst, uint32_t address, size_t count)
|
||||
{
|
||||
load_u8(dst, hle->dram(), address & 0xffffff, count);
|
||||
}
|
||||
|
||||
static inline void dram_load_u16(CHle * hle, uint16_t * dst, uint32_t address, size_t count)
|
||||
{
|
||||
load_u16(dst, hle->dram(), address & 0xffffff, count);
|
||||
}
|
||||
|
||||
static inline void dram_load_u32(CHle * hle, uint32_t * dst, uint32_t address, size_t count)
|
||||
{
|
||||
load_u32(dst, hle->dram(), address & 0xffffff, count);
|
||||
}
|
||||
|
||||
static inline void dram_store_u16(CHle * hle, const uint16_t * src, uint32_t address, size_t count)
|
||||
{
|
||||
store_u16(hle->dram(), address & 0xffffff, src, count);
|
||||
}
|
||||
|
||||
static inline void dram_store_u32(CHle * hle, const uint32_t * src, uint32_t address, size_t count)
|
||||
{
|
||||
store_u32(hle->dram(), address & 0xffffff, src, count);
|
||||
}
|
|
@ -6,7 +6,7 @@
|
|||
// Copyright(C) 2002 Hacktarux
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "arithmetics.h"
|
||||
|
@ -146,8 +146,7 @@ static const uint16_t DeWindowLUT [0x420] = {
|
|||
0x005D, 0x00C8, 0x037A, 0x08CA, 0x0B37, 0x3FF2, 0x7FFF, 0xC00E,
|
||||
0x0B37, 0xF736, 0x037A, 0xFF38, 0x005D, 0xFFF3, 0x0000, 0x000D,
|
||||
0x005D, 0x00C8, 0x037A, 0x08CA, 0x0B37, 0x3FF2, 0x7FFF, 0xC00E,
|
||||
0x0B37, 0xF736, 0x037A, 0xFF38, 0x005D, 0xFFF3, 0x0000, 0x0000
|
||||
};
|
||||
0x0B37, 0xF736, 0x037A, 0xFF38, 0x005D, 0xFFF3, 0x0000, 0x0000};
|
||||
|
||||
static void MP3AB0(int32_t * v)
|
||||
{
|
||||
|
@ -155,8 +154,7 @@ static void MP3AB0(int32_t* v)
|
|||
static const uint16_t LUT2[8] =
|
||||
{
|
||||
0xFEC4, 0xF4FA, 0xC5E4, 0xE1C4,
|
||||
0x1916, 0x4A50, 0xA268, 0x78AE
|
||||
};
|
||||
0x1916, 0x4A50, 0xA268, 0x78AE};
|
||||
static const uint16_t LUT3[4] = {0xFB14, 0xD4DC, 0x31F2, 0x8E3A};
|
||||
int i;
|
||||
|
||||
|
@ -251,8 +249,7 @@ static void InnerLoop(CHle * hle, uint32_t outPtr, uint32_t inPtr, uint32_t t6,
|
|||
0xFFB2, 0xFD3A, 0xF10A, 0xF854,
|
||||
0xBDAE, 0xCDA0, 0xE76C, 0xDB94,
|
||||
0x1920, 0x4B20, 0xAC7C, 0x7C68,
|
||||
0xABEC, 0x9880, 0xDAE8, 0x839C
|
||||
};
|
||||
0xABEC, 0x9880, 0xDAE8, 0x839C};
|
||||
int i;
|
||||
uint32_t t0;
|
||||
uint32_t t1;
|
|
@ -4,7 +4,7 @@
|
|||
// Copyright(C) 2013 Bobby Smiles
|
||||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "arithmetics.h"
|
||||
|
@ -13,10 +13,19 @@
|
|||
|
||||
// Various constants
|
||||
|
||||
enum { SUBFRAME_SIZE = 192 };
|
||||
enum { MAX_VOICES = 32 };
|
||||
enum
|
||||
{
|
||||
SUBFRAME_SIZE = 192
|
||||
};
|
||||
enum
|
||||
{
|
||||
MAX_VOICES = 32
|
||||
};
|
||||
|
||||
enum { SAMPLE_BUFFER_SIZE = 0x200 };
|
||||
enum
|
||||
{
|
||||
SAMPLE_BUFFER_SIZE = 0x200
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -653,7 +662,13 @@ static void mix_voice_samples(CHle * hle, musyx_t *musyx, uint32_t voice_ptr, co
|
|||
v4_dst[2] = musyx->cc0;
|
||||
v4_dst[3] = musyx->e50;
|
||||
|
||||
hle->VerboseMessage("Voice debug: segbase=%d" "\tu16_4e=%04x\n" "\tpitch: frac0=%04x shift=%04x\n" "\tend_point=%04x restart_point=%04x\n" "\tenv = %08x %08x %08x %08x\n" "\tenv_step = %08x %08x %08x %08x\n", segbase, u16_4e, pitch_q16, pitch_shift, end_point, restart_point, v4_env[0], v4_env[1], v4_env[2], v4_env[3], v4_env_step[0], v4_env_step[1], v4_env_step[2], v4_env_step[3]);
|
||||
hle->VerboseMessage("Voice debug: segbase=%d"
|
||||
"\tu16_4e=%04x\n"
|
||||
"\tpitch: frac0=%04x shift=%04x\n"
|
||||
"\tend_point=%04x restart_point=%04x\n"
|
||||
"\tenv = %08x %08x %08x %08x\n"
|
||||
"\tenv_step = %08x %08x %08x %08x\n",
|
||||
segbase, u16_4e, pitch_q16, pitch_shift, end_point, restart_point, v4_env[0], v4_env[1], v4_env[2], v4_env[3], v4_env_step[0], v4_env_step[1], v4_env_step[2], v4_env_step[3]);
|
||||
|
||||
for (i = 0; i < SUBFRAME_SIZE; ++i)
|
||||
{
|
||||
|
@ -741,7 +756,10 @@ static void sfx_stage(CHle * hle, mix_sfx_with_main_subframes_t mix_sfx_with_mai
|
|||
|
||||
hle->VerboseMessage("cbuffer: ptr=%08x length=%x", cbuffer_ptr, cbuffer_length);
|
||||
hle->VerboseMessage("fir4: hgain=%04x hcoeff=%04x %04x %04x %04x", fir4_hgain, fir4_hcoeffs[0], fir4_hcoeffs[1], fir4_hcoeffs[2], fir4_hcoeffs[3]);
|
||||
hle->VerboseMessage("tap count=%d\n" "delays: %08x %08x %08x %08x %08x %08x %08x %08x\n" "gains: %04x %04x %04x %04x %04x %04x %04x %04x", tap_count, tap_delays[0], tap_delays[1], tap_delays[2], tap_delays[3], tap_delays[4], tap_delays[5], tap_delays[6], tap_delays[7], tap_gains[0], tap_gains[1], tap_gains[2], tap_gains[3], tap_gains[4], tap_gains[5], tap_gains[6], tap_gains[7]);
|
||||
hle->VerboseMessage("tap count=%d\n"
|
||||
"delays: %08x %08x %08x %08x %08x %08x %08x %08x\n"
|
||||
"gains: %04x %04x %04x %04x %04x %04x %04x %04x",
|
||||
tap_count, tap_delays[0], tap_delays[1], tap_delays[2], tap_delays[3], tap_delays[4], tap_delays[5], tap_delays[6], tap_delays[7], tap_gains[0], tap_gains[1], tap_gains[2], tap_gains[3], tap_gains[4], tap_gains[5], tap_gains[6], tap_gains[7]);
|
||||
hle->VerboseMessage("sfx_gains=%04x %04x", sfx_gains[0], sfx_gains[1]);
|
||||
|
||||
// Mix up to 8 delayed sub-frames
|
|
@ -5,6 +5,7 @@
|
|||
// GNU/GPLv2 licensed: https://gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
|
||||
class CHle;
|
||||
|
||||
|
@ -14,7 +15,10 @@ void cicx105_ucode(CHle * hle);
|
|||
|
||||
// Audio list microcodes
|
||||
|
||||
enum { N_SEGMENTS = 16 };
|
||||
enum
|
||||
{
|
||||
N_SEGMENTS = 16
|
||||
};
|
||||
|
||||
struct alist_audio_t
|
||||
{
|
|
@ -51,6 +51,17 @@
|
|||
<ClCompile Include="cpu\RSPRegisterHandler.cpp" />
|
||||
<ClCompile Include="cpu\RSPRegisterHandlerPlugin.cpp" />
|
||||
<ClCompile Include="cpu\RspTypes.cpp" />
|
||||
<ClCompile Include="Hle\alist.cpp" />
|
||||
<ClCompile Include="Hle\alist_audio.cpp" />
|
||||
<ClCompile Include="Hle\alist_naudio.cpp" />
|
||||
<ClCompile Include="Hle\alist_nead.cpp" />
|
||||
<ClCompile Include="Hle\audio.cpp" />
|
||||
<ClCompile Include="Hle\cicx105.cpp" />
|
||||
<ClCompile Include="Hle\hle.cpp" />
|
||||
<ClCompile Include="Hle\jpeg.cpp" />
|
||||
<ClCompile Include="Hle\mem.cpp" />
|
||||
<ClCompile Include="Hle\mp3.cpp" />
|
||||
<ClCompile Include="Hle\musyx.cpp" />
|
||||
<ClCompile Include="Recompiler\Mmx.cpp" />
|
||||
<ClCompile Include="Recompiler\RspProfiling.cpp" />
|
||||
<ClCompile Include="Recompiler\RspRecompilerAnalysis.cpp" />
|
||||
|
@ -76,6 +87,12 @@
|
|||
<ClInclude Include="cpu\RSPRegisterHandlerPlugin.h" />
|
||||
<ClInclude Include="cpu\RSPRegisters.h" />
|
||||
<ClInclude Include="cpu\RspTypes.h" />
|
||||
<ClInclude Include="Hle\alist.h" />
|
||||
<ClInclude Include="Hle\arithmetics.h" />
|
||||
<ClInclude Include="Hle\audio.h" />
|
||||
<ClInclude Include="Hle\hle.h" />
|
||||
<ClInclude Include="Hle\mem.h" />
|
||||
<ClInclude Include="Hle\ucodes.h" />
|
||||
<ClInclude Include="Recompiler\RspProfiling.h" />
|
||||
<ClInclude Include="Recompiler\RspRecompilerCPU.h" />
|
||||
<ClInclude Include="Recompiler\RspRecompilerOps.h" />
|
||||
|
|
|
@ -31,6 +31,12 @@
|
|||
<Filter Include="Source Files\Recompiler">
|
||||
<UniqueIdentifier>{bb961984-d173-4bd2-8a8b-f9a0416188f4}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\hle">
|
||||
<UniqueIdentifier>{77e5dadf-84ad-45b1-a66b-f88004e0fcea}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\hle">
|
||||
<UniqueIdentifier>{615a5abd-6592-4b84-8611-cc432c2148ea}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="cpu\RSPiInstruction.cpp">
|
||||
|
@ -99,6 +105,39 @@
|
|||
<ClCompile Include="cpu\RSPRegisterHandlerPlugin.cpp">
|
||||
<Filter>Source Files\cpu</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\alist.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\audio.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\mem.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\hle.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\alist_audio.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\alist_naudio.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\alist_nead.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\cicx105.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\mp3.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\musyx.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hle\jpeg.cpp">
|
||||
<Filter>Source Files\hle</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="cpu\RSPInstruction.h">
|
||||
|
@ -161,5 +200,23 @@
|
|||
<ClInclude Include="cpu\RSPRegisterHandlerPlugin.h">
|
||||
<Filter>Header Files\cpu</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Hle\alist.h">
|
||||
<Filter>Header Files\hle</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Hle\arithmetics.h">
|
||||
<Filter>Header Files\hle</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Hle\audio.h">
|
||||
<Filter>Header Files\hle</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Hle\mem.h">
|
||||
<Filter>Header Files\hle</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Hle\hle.h">
|
||||
<Filter>Header Files\hle</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Hle\ucodes.h">
|
||||
<Filter>Header Files\hle</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,13 +1,118 @@
|
|||
#include "RSPInfo.h"
|
||||
#include <Project64-rsp-core/Hle/hle.h>
|
||||
#include <Project64-rsp-core/Recompiler/RspProfiling.h>
|
||||
#include <Project64-rsp-core/Recompiler/RspRecompilerCPU.h>
|
||||
#include <Project64-rsp-core/Settings/RspSettings.h>
|
||||
#include <Project64-rsp-core/Settings/RspSettingsID.h>
|
||||
#include <Project64-rsp-core/cpu/RSPCpu.h>
|
||||
#include <Project64-rsp-core/cpu/RSPRegisters.h>
|
||||
#include <Project64-rsp-core/cpu/RspLog.h>
|
||||
#include <Project64-rsp-core/cpu/RspMemory.h>
|
||||
#include <Settings/Settings.h>
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
|
||||
RSP_INFO RSPInfo;
|
||||
uint32_t RdramSize = 0;
|
||||
CHle * g_hle = nullptr;
|
||||
|
||||
void ClearAllx86Code(void);
|
||||
|
||||
void DetectCpuSpecs(void)
|
||||
{
|
||||
uint32_t Intel_Features = 0;
|
||||
uint32_t AMD_Features = 0;
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
__try
|
||||
{
|
||||
#ifdef _M_IX86
|
||||
_asm {
|
||||
// Intel features
|
||||
mov eax, 1
|
||||
cpuid
|
||||
mov[Intel_Features], edx
|
||||
|
||||
// AMD features
|
||||
mov eax, 80000001h
|
||||
cpuid
|
||||
or [AMD_Features], edx
|
||||
}
|
||||
#else
|
||||
int cpuInfo[4];
|
||||
__cpuid(cpuInfo, 1);
|
||||
Intel_Features = cpuInfo[3];
|
||||
__cpuid(cpuInfo, 0x80000001);
|
||||
AMD_Features = cpuInfo[3];
|
||||
#endif
|
||||
}
|
||||
__except (EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
AMD_Features = Intel_Features = 0;
|
||||
}
|
||||
#else
|
||||
|
||||
/*
|
||||
TODO: With GCC, there is <cpuid.h>, but __cpuid() there is a macro and
|
||||
needs five arguments, not two. Also, GCC lacks SEH.
|
||||
*/
|
||||
|
||||
AMD_Features = Intel_Features = 0;
|
||||
#endif
|
||||
|
||||
if (Intel_Features & 0x02000000)
|
||||
{
|
||||
Compiler.mmx2 = true;
|
||||
Compiler.sse = true;
|
||||
}
|
||||
if (Intel_Features & 0x00800000)
|
||||
{
|
||||
Compiler.mmx = true;
|
||||
}
|
||||
if (AMD_Features & 0x40000000)
|
||||
{
|
||||
Compiler.mmx2 = true;
|
||||
}
|
||||
if (Intel_Features & 0x00008000)
|
||||
{
|
||||
ConditionalMove = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ConditionalMove = false;
|
||||
}
|
||||
}
|
||||
|
||||
void RspPluginLoaded(void)
|
||||
{
|
||||
BreakOnStart = false;
|
||||
#ifndef _M_X64
|
||||
g_CPUCore = RecompilerCPU;
|
||||
#else
|
||||
g_CPUCore = InterpreterCPU;
|
||||
#endif
|
||||
LogRDP = false;
|
||||
LogX86Code = false;
|
||||
Profiling = false;
|
||||
IndvidualBlock = false;
|
||||
ShowErrors = false;
|
||||
|
||||
memset(&Compiler, 0, sizeof(Compiler));
|
||||
|
||||
Compiler.bDest = true;
|
||||
Compiler.bAlignVector = false;
|
||||
Compiler.bFlags = true;
|
||||
Compiler.bReOrdering = true;
|
||||
Compiler.bSections = true;
|
||||
Compiler.bAccum = true;
|
||||
Compiler.bGPRConstants = true;
|
||||
DetectCpuSpecs();
|
||||
|
||||
InitializeRspSetting();
|
||||
SetCPU(g_CPUCore);
|
||||
}
|
||||
|
||||
void InitilizeRSP(RSP_INFO & Rsp_Info)
|
||||
{
|
||||
|
@ -22,4 +127,51 @@ void InitilizeRSP(RSP_INFO & Rsp_Info)
|
|||
#ifdef GenerateLog
|
||||
Start_Log();
|
||||
#endif
|
||||
|
||||
if (g_hle != nullptr)
|
||||
{
|
||||
delete g_hle;
|
||||
g_hle = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void RspRomOpened(void)
|
||||
{
|
||||
ClearAllx86Code();
|
||||
JumpTableSize = GetSetting(Set_JumpTableSize);
|
||||
Mfc0Count = GetSetting(Set_Mfc0Count);
|
||||
SemaphoreExit = GetSetting(Set_SemaphoreExit);
|
||||
RdramSize = Set_AllocatedRdramSize != 0 ? GetSystemSetting(Set_AllocatedRdramSize) : 0;
|
||||
if (RdramSize == 0)
|
||||
{
|
||||
RdramSize = 0x00400000;
|
||||
}
|
||||
g_RSPRegisterHandler.reset(new RSPRegisterHandlerPlugin(RSPInfo, RdramSize));
|
||||
}
|
||||
|
||||
void RspRomClosed(void)
|
||||
{
|
||||
if (Profiling)
|
||||
{
|
||||
StopTimer();
|
||||
GenerateTimerResults();
|
||||
}
|
||||
g_RSPRegisterHandler.reset(nullptr);
|
||||
ClearAllx86Code();
|
||||
StopRDPLog();
|
||||
StopCPULog();
|
||||
|
||||
#ifdef GenerateLog
|
||||
Stop_Log();
|
||||
#endif
|
||||
}
|
||||
|
||||
void FreeRSP(void)
|
||||
{
|
||||
FreeMemory();
|
||||
if (g_hle != nullptr)
|
||||
{
|
||||
delete g_hle;
|
||||
g_hle = nullptr;
|
||||
}
|
||||
}
|
|
@ -1,6 +1,13 @@
|
|||
#include <Project64-plugin-spec/Rsp.h>
|
||||
|
||||
class CHle;
|
||||
|
||||
extern RSP_INFO RSPInfo;
|
||||
extern uint32_t RdramSize;
|
||||
extern CHle * g_hle;
|
||||
|
||||
void InitilizeRSP(RSP_INFO & Rsp_Info);
|
||||
void RspPluginLoaded(void);
|
||||
void RspRomOpened(void);
|
||||
void RspRomClosed(void);
|
||||
void FreeRSP(void);
|
|
@ -27,6 +27,7 @@ bool ChangedPC;
|
|||
|
||||
RSP_BLOCK CurrentBlock;
|
||||
RSP_CODE RspCode;
|
||||
RSP_COMPILER Compiler;
|
||||
|
||||
uint8_t *pLastSecondary = NULL, *pLastPrimary = NULL;
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include <Settings/Settings.h>
|
||||
|
||||
uint16_t Set_AudioHle = 0, Set_GraphicsHle = 0, Set_AllocatedRdramSize = 0;
|
||||
bool GraphicsHle = true, AudioHle, ConditionalMove;
|
||||
bool GraphicsHle = true, AudioHle, ConditionalMove, HleAlistTask = false;
|
||||
bool DebuggingEnabled = false, Profiling, IndvidualBlock, ShowErrors, BreakOnStart = false, LogRDP = false, LogX86Code = false;
|
||||
|
||||
void InitializeRspSetting(void)
|
||||
|
@ -22,6 +22,7 @@ void InitializeRspSetting(void)
|
|||
RegisterSetting(Set_Profiling, Data_DWORD_General, "Profiling", NULL, Profiling, NULL);
|
||||
RegisterSetting(Set_IndvidualBlock, Data_DWORD_General, "Individual Block", NULL, IndvidualBlock, NULL);
|
||||
RegisterSetting(Set_ShowErrors, Data_DWORD_General, "Show Errors", NULL, ShowErrors, NULL);
|
||||
RegisterSetting(Set_HleAlistTask, Data_DWORD_General, "Hle Alist Task", NULL, HleAlistTask, NULL);
|
||||
|
||||
// Compiler settings
|
||||
RegisterSetting(Set_CheckDest, Data_DWORD_General, "Check Destination Vector", NULL, Compiler.bDest, NULL);
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
void InitializeRspSetting(void);
|
||||
|
||||
extern uint16_t Set_AudioHle, Set_GraphicsHle, Set_AllocatedRdramSize;
|
||||
extern bool GraphicsHle, AudioHle, ConditionalMove;
|
||||
extern bool GraphicsHle, AudioHle, ConditionalMove, HleAlistTask;
|
||||
extern bool DebuggingEnabled, Profiling, IndvidualBlock, ShowErrors, BreakOnStart, LogRDP, LogX86Code;
|
|
@ -9,6 +9,7 @@ enum
|
|||
Set_Profiling,
|
||||
Set_IndvidualBlock,
|
||||
Set_ShowErrors,
|
||||
Set_HleAlistTask,
|
||||
|
||||
// Compiler settings
|
||||
Set_CheckDest,
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "RSPCpu.h"
|
||||
#include <Common/CriticalSection.h>
|
||||
#include <Project64-rsp-core/Hle/hle.h>
|
||||
#include <Project64-rsp-core/RSPDebugger.h>
|
||||
#include <Project64-rsp-core/RSPInfo.h>
|
||||
#include <Project64-rsp-core/Settings/RspSettings.h>
|
||||
|
@ -54,7 +55,10 @@ void Build_RSP(void)
|
|||
SQrootResult.UW = 0;
|
||||
|
||||
SetCPU(g_CPUCore);
|
||||
if (g_RSPDebugger != nullptr)
|
||||
{
|
||||
g_RSPDebugger->ResetTimerList();
|
||||
}
|
||||
|
||||
EleSpec[0].DW = 0x0001020304050607; // None
|
||||
EleSpec[1].DW = 0x0001020304050607; // None
|
||||
|
@ -144,13 +148,30 @@ uint32_t DoRspCycles(uint32_t Cycles)
|
|||
*RSPInfo.DPC_STATUS_REG &= ~0x0002;
|
||||
return Cycles;
|
||||
}
|
||||
else if (TaskType == 2 && HleAlistTask)
|
||||
{
|
||||
if (g_hle == nullptr)
|
||||
{
|
||||
g_hle = new CHle(RSPInfo);
|
||||
}
|
||||
if (g_hle != nullptr)
|
||||
{
|
||||
g_hle->try_fast_audio_dispatching();
|
||||
*RSPInfo.SP_STATUS_REG |= SP_STATUS_SIG2 | SP_STATUS_BROKE | SP_STATUS_HALT;
|
||||
if ((*RSPInfo.SP_STATUS_REG & SP_STATUS_INTR_BREAK) != 0)
|
||||
{
|
||||
*RSPInfo.MI_INTR_REG |= MI_INTR_SP;
|
||||
RSPInfo.CheckInterrupts();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (TaskType == 2 && AudioHle)
|
||||
{
|
||||
if (RSPInfo.ProcessAList != NULL)
|
||||
{
|
||||
RSPInfo.ProcessAList();
|
||||
}
|
||||
*RSPInfo.SP_STATUS_REG |= (0x0203);
|
||||
*RSPInfo.SP_STATUS_REG |= SP_STATUS_SIG2 | SP_STATUS_BROKE | SP_STATUS_HALT;
|
||||
if ((*RSPInfo.SP_STATUS_REG & SP_STATUS_INTR_BREAK) != 0)
|
||||
{
|
||||
*RSPInfo.MI_INTR_REG |= MI_INTR_SP;
|
||||
|
@ -163,17 +184,10 @@ uint32_t DoRspCycles(uint32_t Cycles)
|
|||
RSPInfo.ShowCFB();
|
||||
}
|
||||
|
||||
/*
|
||||
*RSPInfo.SP_STATUS_REG |= (0x0203 );
|
||||
if ((*RSPInfo.SP_STATUS_REG & SP_STATUS_INTR_BREAK) != 0 )
|
||||
if (g_RSPDebugger != nullptr)
|
||||
{
|
||||
*RSPInfo.MI_INTR_REG |= MI_INTR_SP;
|
||||
RSPInfo.CheckInterrupts();
|
||||
}
|
||||
//return Cycles;
|
||||
*/
|
||||
|
||||
g_RSPDebugger->RspCyclesStart();
|
||||
}
|
||||
CGuard Guard(g_CPUCriticalSection);
|
||||
|
||||
switch (g_CPUCore)
|
||||
|
@ -185,6 +199,9 @@ uint32_t DoRspCycles(uint32_t Cycles)
|
|||
RunInterpreterCPU(Cycles);
|
||||
break;
|
||||
}
|
||||
if (g_RSPDebugger != nullptr)
|
||||
{
|
||||
g_RSPDebugger->RspCyclesStop();
|
||||
}
|
||||
return Cycles;
|
||||
}
|
||||
|
|
|
@ -375,13 +375,18 @@ uint32_t RunInterpreterCPU(uint32_t Cycles)
|
|||
{
|
||||
uint32_t CycleCount;
|
||||
RSP_Running = true;
|
||||
if (g_RSPDebugger != nullptr)
|
||||
{
|
||||
g_RSPDebugger->StartingCPU();
|
||||
}
|
||||
CycleCount = 0;
|
||||
|
||||
while (RSP_Running)
|
||||
{
|
||||
if (g_RSPDebugger != nullptr)
|
||||
{
|
||||
g_RSPDebugger->BeforeExecuteOp();
|
||||
|
||||
}
|
||||
RSPOpC.Value = *(uint32_t *)(RSPInfo.IMEM + (*PrgCount & 0xFFC));
|
||||
RSP_Opcode[RSPOpC.op]();
|
||||
RSP_GPR[0].W = 0x00000000; // MIPS $zero hard-wired to 0
|
||||
|
|
|
@ -412,8 +412,11 @@ void RSP_Opcode_BGEZAL(void)
|
|||
// COP0 functions
|
||||
|
||||
void RSP_Cop0_MF(void)
|
||||
{
|
||||
if (g_RSPDebugger != nullptr)
|
||||
{
|
||||
g_RSPDebugger->RDP_LogMF0(*PrgCount, RSPOpC.rd);
|
||||
}
|
||||
switch (RSPOpC.rd)
|
||||
{
|
||||
case 0: RSP_GPR[RSPOpC.rt].UW = g_RSPRegisterHandler->ReadReg(RSPRegister_MEM_ADDR); break;
|
||||
|
@ -1677,6 +1680,9 @@ void RSP_Opcode_SWV(void)
|
|||
// Other functions
|
||||
|
||||
void rsp_UnknownOpcode(void)
|
||||
{
|
||||
if (g_RSPDebugger != nullptr)
|
||||
{
|
||||
g_RSPDebugger->UnknownOpcode();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
#include <Project64-rsp-core/cpu/RspMemory.h>
|
||||
#include <Project64-rsp-core/cpu/RspTypes.h>
|
||||
|
||||
void ClearAllx86Code(void);
|
||||
void ProcessMenuItem(int32_t ID);
|
||||
#ifdef _WIN32
|
||||
BOOL CALLBACK CompilerDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
@ -131,7 +130,7 @@ Output: None
|
|||
|
||||
EXPORT void CloseDLL(void)
|
||||
{
|
||||
FreeMemory();
|
||||
FreeRSP();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -178,6 +177,7 @@ void FixMenuState(void)
|
|||
CheckMenuItem(hRSPMenu, ID_CPUMETHOD_INTERPT, MF_BYCOMMAND | (g_CPUCore == InterpreterCPU ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_BREAKONSTARTOFTASK, MF_BYCOMMAND | (BreakOnStart ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_LOGRDPCOMMANDS, MF_BYCOMMAND | (LogRDP ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_SETTINGS_HLEALISTTASK, MF_BYCOMMAND | (HleAlistTask ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_SETTINGS_LOGX86CODE, MF_BYCOMMAND | (LogX86Code ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_SETTINGS_MULTITHREADED, MF_BYCOMMAND | (MultiThreadedDefault ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_PROFILING_ON, MF_BYCOMMAND | (Profiling ? MFS_CHECKED : MF_UNCHECKED));
|
||||
|
@ -255,74 +255,6 @@ CycleCount is the number of cycles between switching
|
|||
control between the RSP and r4300i core.
|
||||
Output: None
|
||||
*/
|
||||
|
||||
RSP_COMPILER Compiler;
|
||||
|
||||
void DetectCpuSpecs(void)
|
||||
{
|
||||
DWORD Intel_Features = 0;
|
||||
DWORD AMD_Features = 0;
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
__try
|
||||
{
|
||||
#ifdef _M_IX86
|
||||
_asm {
|
||||
// Intel features
|
||||
mov eax, 1
|
||||
cpuid
|
||||
mov [Intel_Features], edx
|
||||
|
||||
// AMD features
|
||||
mov eax, 80000001h
|
||||
cpuid
|
||||
or [AMD_Features], edx
|
||||
}
|
||||
#else
|
||||
int cpuInfo[4];
|
||||
__cpuid(cpuInfo, 1);
|
||||
Intel_Features = cpuInfo[3];
|
||||
__cpuid(cpuInfo, 0x80000001);
|
||||
AMD_Features = cpuInfo[3];
|
||||
#endif
|
||||
}
|
||||
__except (EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
AMD_Features = Intel_Features = 0;
|
||||
}
|
||||
#else
|
||||
|
||||
/*
|
||||
TODO: With GCC, there is <cpuid.h>, but __cpuid() there is a macro and
|
||||
needs five arguments, not two. Also, GCC lacks SEH.
|
||||
*/
|
||||
|
||||
AMD_Features = Intel_Features = 0;
|
||||
#endif
|
||||
|
||||
if (Intel_Features & 0x02000000)
|
||||
{
|
||||
Compiler.mmx2 = true;
|
||||
Compiler.sse = true;
|
||||
}
|
||||
if (Intel_Features & 0x00800000)
|
||||
{
|
||||
Compiler.mmx = true;
|
||||
}
|
||||
if (AMD_Features & 0x40000000)
|
||||
{
|
||||
Compiler.mmx2 = true;
|
||||
}
|
||||
if (Intel_Features & 0x00008000)
|
||||
{
|
||||
ConditionalMove = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ConditionalMove = false;
|
||||
}
|
||||
}
|
||||
|
||||
EXPORT void InitiateRSP(RSP_INFO Rsp_Info, uint32_t * CycleCount)
|
||||
{
|
||||
g_RSPDebuggerUI.reset(new RSPDebuggerUI);
|
||||
|
@ -446,6 +378,13 @@ void ProcessMenuItem(int32_t ID)
|
|||
}
|
||||
break;
|
||||
}
|
||||
case ID_SETTINGS_HLEALISTTASK:
|
||||
{
|
||||
bool Checked = (GetMenuState(hRSPMenu, ID_SETTINGS_HLEALISTTASK, MF_BYCOMMAND) & MFS_CHECKED) != 0;
|
||||
CheckMenuItem(hRSPMenu, ID_SETTINGS_HLEALISTTASK, MF_BYCOMMAND | (Checked ? MFS_UNCHECKED : MFS_CHECKED));
|
||||
SetSetting(Set_HleAlistTask, !Checked);
|
||||
break;
|
||||
}
|
||||
case ID_SETTINGS_MULTITHREADED:
|
||||
{
|
||||
bool Checked = (GetMenuState(hRSPMenu, ID_SETTINGS_MULTITHREADED, MF_BYCOMMAND) & MFS_CHECKED) != 0;
|
||||
|
@ -482,21 +421,11 @@ Output: None
|
|||
|
||||
EXPORT void RomOpen(void)
|
||||
{
|
||||
ClearAllx86Code();
|
||||
RspRomOpened();
|
||||
if (DebuggingEnabled)
|
||||
{
|
||||
EnableDebugging(true);
|
||||
}
|
||||
JumpTableSize = GetSetting(Set_JumpTableSize);
|
||||
Mfc0Count = GetSetting(Set_Mfc0Count);
|
||||
SemaphoreExit = GetSetting(Set_SemaphoreExit);
|
||||
|
||||
RdramSize = Set_AllocatedRdramSize != 0 ? GetSystemSetting(Set_AllocatedRdramSize) : 0;
|
||||
if (RdramSize == 0)
|
||||
{
|
||||
RdramSize = 0x00400000;
|
||||
}
|
||||
g_RSPRegisterHandler.reset(new RSPRegisterHandlerPlugin(RSPInfo, RdramSize));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -508,19 +437,7 @@ Output: None
|
|||
|
||||
EXPORT void RomClosed(void)
|
||||
{
|
||||
if (Profiling)
|
||||
{
|
||||
StopTimer();
|
||||
GenerateTimerResults();
|
||||
}
|
||||
g_RSPRegisterHandler.reset(nullptr);
|
||||
ClearAllx86Code();
|
||||
StopRDPLog();
|
||||
StopCPULog();
|
||||
|
||||
#ifdef GenerateLog
|
||||
Stop_Log();
|
||||
#endif
|
||||
RspRomClosed();
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
|
@ -672,6 +589,7 @@ EXPORT void EnableDebugging(int Enabled)
|
|||
Profiling = GetSetting(Set_Profiling) != 0;
|
||||
IndvidualBlock = GetSetting(Set_IndvidualBlock) != 0;
|
||||
ShowErrors = GetSetting(Set_ShowErrors) != 0;
|
||||
HleAlistTask = GetSetting(Set_HleAlistTask) != 0;
|
||||
|
||||
Compiler.bDest = GetSetting(Set_CheckDest) != 0;
|
||||
Compiler.bAccum = GetSetting(Set_Accum) != 0;
|
||||
|
@ -702,31 +620,7 @@ EXPORT void EnableDebugging(int Enabled)
|
|||
|
||||
EXPORT void PluginLoaded(void)
|
||||
{
|
||||
BreakOnStart = false;
|
||||
#ifndef _M_X64
|
||||
g_CPUCore = RecompilerCPU;
|
||||
#else
|
||||
g_CPUCore = InterpreterCPU;
|
||||
#endif
|
||||
LogRDP = false;
|
||||
LogX86Code = false;
|
||||
Profiling = false;
|
||||
IndvidualBlock = false;
|
||||
ShowErrors = false;
|
||||
|
||||
memset(&Compiler, 0, sizeof(Compiler));
|
||||
|
||||
Compiler.bDest = true;
|
||||
Compiler.bAlignVector = false;
|
||||
Compiler.bFlags = true;
|
||||
Compiler.bReOrdering = true;
|
||||
Compiler.bSections = true;
|
||||
Compiler.bAccum = true;
|
||||
Compiler.bGPRConstants = true;
|
||||
DetectCpuSpecs();
|
||||
|
||||
InitializeRspSetting();
|
||||
SetCPU(g_CPUCore);
|
||||
RspPluginLoaded();
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
|
|
|
@ -190,6 +190,7 @@ BEGIN
|
|||
END
|
||||
POPUP "Settings"
|
||||
BEGIN
|
||||
MENUITEM "HLE alist task", ID_SETTINGS_HLEALISTTASK
|
||||
MENUITEM "Show Compiler Errors", ID_SHOWCOMPILERERRORS
|
||||
MENUITEM "Break on start of task", ID_BREAKONSTARTOFTASK
|
||||
MENUITEM "Log RDP Commands", ID_LOGRDPCOMMANDS
|
||||
|
|
|
@ -67,9 +67,6 @@
|
|||
<ProjectReference Include="..\Settings\Settings.vcxproj">
|
||||
<Project>{8b9961b1-88d9-4ea3-a752-507a00dd9f3d}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\UpdateVersion\UpdateVersion.vcxproj">
|
||||
<Project>{1968162c-0793-491d-91a1-81645a24d399}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="Project64-rsp.rc" />
|
||||
|
|
|
@ -38,13 +38,14 @@
|
|||
#define ID_CPUMETHOD_INTERPT 5017
|
||||
#define ID_SETTINGS_LOGX86CODE 5019
|
||||
#define ID_SETTINGS_MULTITHREADED 5020
|
||||
#define ID_SETTINGS_HLEALISTTASK 5021
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 108
|
||||
#define _APS_NEXT_COMMAND_VALUE 5021
|
||||
#define _APS_NEXT_COMMAND_VALUE 5022
|
||||
#define _APS_NEXT_CONTROL_VALUE 1032
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
|
|
|
@ -12,6 +12,7 @@ set ScanDir[2]="%base_dir%\Source\Project64-core"
|
|||
set ScanDir[3]="%base_dir%\Source\Project64-rsp"
|
||||
set ScanDir[4]="%base_dir%\Source\Project64-rsp-core"
|
||||
set ScanDir[5]="%base_dir%\Source\Android\Bridge"
|
||||
set ScanDir[6]="%base_dir%\Source\Android\PluginRSP"
|
||||
|
||||
set ScanFiles[0]="*.cpp"
|
||||
set ScanFiles[1]="*.h"
|
||||
|
|
Loading…
Reference in New Issue