Imported Upstream version 1.99.2
Sven Eckelmann
14 years ago
0 | 0 | repo: 3fe0288fa7047c7a29c217b2bf6f05f32f8627d5 |
1 | node: 052d3c41920efde9707aac6380782d216b4e68be | |
1 | node: c8e88b942fdfd9c1efd303e41edc6fca2deacd34 |
0 | 0 | RSP High-Level Emulation plugin for Mupen64Plus |
1 | 1 | ----------------------------------------------- |
2 | ||
3 | Mupen64Plus-rsp-hle v1.99.2 - January 6, 2010 | |
4 | ------------------------------------------------- | |
5 | - new feature: added MSVC8 project file for RSP-HLE plugin, fixed a few minor incompatibilities | |
6 | - Makefile improvements: | |
7 | - throw error if OS/CPU not supported | |
8 | - use DESTDIR in install/uninstall paths | |
9 | - Allow user-specified CC/CXX/LD paths | |
10 | - use C++ compiler to link instead of LD, because the compiler knows where the standard C++ libs are | |
2 | 11 | |
3 | 12 | Mupen64Plus-rsp-hle v1.99.1 - December 14, 2009 |
4 | 13 | ------------------------------------------------- |
0 | <?xml version="1.0" encoding="Windows-1252"?> | |
1 | <VisualStudioProject | |
2 | ProjectType="Visual C++" | |
3 | Version="8.00" | |
4 | Name="mupen64plus-rsp-hle" | |
5 | ProjectGUID="{2EC7CEE3-C7A7-4F2E-B2C8-4DF6AFEC3E9A}" | |
6 | RootNamespace="mupen64plusrsphle" | |
7 | Keyword="Win32Proj" | |
8 | > | |
9 | <Platforms> | |
10 | <Platform | |
11 | Name="Win32" | |
12 | /> | |
13 | </Platforms> | |
14 | <ToolFiles> | |
15 | </ToolFiles> | |
16 | <Configurations> | |
17 | <Configuration | |
18 | Name="Debug|Win32" | |
19 | OutputDirectory="$(SolutionDir)$(ConfigurationName)" | |
20 | IntermediateDirectory="$(ConfigurationName)" | |
21 | ConfigurationType="2" | |
22 | CharacterSet="2" | |
23 | > | |
24 | <Tool | |
25 | Name="VCPreBuildEventTool" | |
26 | /> | |
27 | <Tool | |
28 | Name="VCCustomBuildTool" | |
29 | /> | |
30 | <Tool | |
31 | Name="VCXMLDataGeneratorTool" | |
32 | /> | |
33 | <Tool | |
34 | Name="VCWebServiceProxyGeneratorTool" | |
35 | /> | |
36 | <Tool | |
37 | Name="VCMIDLTool" | |
38 | /> | |
39 | <Tool | |
40 | Name="VCCLCompilerTool" | |
41 | Optimization="0" | |
42 | AdditionalIncludeDirectories="..\..\..\mupen64plus-core\src\api" | |
43 | PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE" | |
44 | MinimalRebuild="true" | |
45 | BasicRuntimeChecks="3" | |
46 | RuntimeLibrary="3" | |
47 | UsePrecompiledHeader="0" | |
48 | WarningLevel="3" | |
49 | Detect64BitPortabilityProblems="false" | |
50 | DebugInformationFormat="4" | |
51 | CompileAs="0" | |
52 | /> | |
53 | <Tool | |
54 | Name="VCManagedResourceCompilerTool" | |
55 | /> | |
56 | <Tool | |
57 | Name="VCResourceCompilerTool" | |
58 | /> | |
59 | <Tool | |
60 | Name="VCPreLinkEventTool" | |
61 | /> | |
62 | <Tool | |
63 | Name="VCLinkerTool" | |
64 | LinkIncremental="2" | |
65 | GenerateDebugInformation="true" | |
66 | SubSystem="2" | |
67 | TargetMachine="1" | |
68 | /> | |
69 | <Tool | |
70 | Name="VCALinkTool" | |
71 | /> | |
72 | <Tool | |
73 | Name="VCManifestTool" | |
74 | /> | |
75 | <Tool | |
76 | Name="VCXDCMakeTool" | |
77 | /> | |
78 | <Tool | |
79 | Name="VCBscMakeTool" | |
80 | /> | |
81 | <Tool | |
82 | Name="VCFxCopTool" | |
83 | /> | |
84 | <Tool | |
85 | Name="VCAppVerifierTool" | |
86 | /> | |
87 | <Tool | |
88 | Name="VCWebDeploymentTool" | |
89 | /> | |
90 | <Tool | |
91 | Name="VCPostBuildEventTool" | |
92 | /> | |
93 | </Configuration> | |
94 | <Configuration | |
95 | Name="Release|Win32" | |
96 | OutputDirectory="$(SolutionDir)$(ConfigurationName)" | |
97 | IntermediateDirectory="$(ConfigurationName)" | |
98 | ConfigurationType="2" | |
99 | CharacterSet="2" | |
100 | WholeProgramOptimization="1" | |
101 | > | |
102 | <Tool | |
103 | Name="VCPreBuildEventTool" | |
104 | /> | |
105 | <Tool | |
106 | Name="VCCustomBuildTool" | |
107 | /> | |
108 | <Tool | |
109 | Name="VCXMLDataGeneratorTool" | |
110 | /> | |
111 | <Tool | |
112 | Name="VCWebServiceProxyGeneratorTool" | |
113 | /> | |
114 | <Tool | |
115 | Name="VCMIDLTool" | |
116 | /> | |
117 | <Tool | |
118 | Name="VCCLCompilerTool" | |
119 | AdditionalIncludeDirectories="..\..\..\mupen64plus-core\src\api" | |
120 | PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE" | |
121 | RuntimeLibrary="2" | |
122 | UsePrecompiledHeader="0" | |
123 | WarningLevel="3" | |
124 | Detect64BitPortabilityProblems="false" | |
125 | DebugInformationFormat="3" | |
126 | CompileAs="0" | |
127 | /> | |
128 | <Tool | |
129 | Name="VCManagedResourceCompilerTool" | |
130 | /> | |
131 | <Tool | |
132 | Name="VCResourceCompilerTool" | |
133 | /> | |
134 | <Tool | |
135 | Name="VCPreLinkEventTool" | |
136 | /> | |
137 | <Tool | |
138 | Name="VCLinkerTool" | |
139 | LinkIncremental="1" | |
140 | GenerateDebugInformation="true" | |
141 | SubSystem="2" | |
142 | OptimizeReferences="2" | |
143 | EnableCOMDATFolding="2" | |
144 | TargetMachine="1" | |
145 | /> | |
146 | <Tool | |
147 | Name="VCALinkTool" | |
148 | /> | |
149 | <Tool | |
150 | Name="VCManifestTool" | |
151 | /> | |
152 | <Tool | |
153 | Name="VCXDCMakeTool" | |
154 | /> | |
155 | <Tool | |
156 | Name="VCBscMakeTool" | |
157 | /> | |
158 | <Tool | |
159 | Name="VCFxCopTool" | |
160 | /> | |
161 | <Tool | |
162 | Name="VCAppVerifierTool" | |
163 | /> | |
164 | <Tool | |
165 | Name="VCWebDeploymentTool" | |
166 | /> | |
167 | <Tool | |
168 | Name="VCPostBuildEventTool" | |
169 | /> | |
170 | </Configuration> | |
171 | </Configurations> | |
172 | <References> | |
173 | </References> | |
174 | <Files> | |
175 | <Filter | |
176 | Name="Source Files" | |
177 | Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" | |
178 | UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" | |
179 | > | |
180 | <File | |
181 | RelativePath="..\..\src\jpeg.c" | |
182 | > | |
183 | </File> | |
184 | <File | |
185 | RelativePath="..\..\src\main.c" | |
186 | > | |
187 | </File> | |
188 | <File | |
189 | RelativePath="..\..\src\ucode1.cpp" | |
190 | > | |
191 | </File> | |
192 | <File | |
193 | RelativePath="..\..\src\ucode2.cpp" | |
194 | > | |
195 | </File> | |
196 | <File | |
197 | RelativePath="..\..\src\ucode3.cpp" | |
198 | > | |
199 | </File> | |
200 | <File | |
201 | RelativePath="..\..\src\ucode3mp3.cpp" | |
202 | > | |
203 | </File> | |
204 | </Filter> | |
205 | <Filter | |
206 | Name="Header Files" | |
207 | Filter="h;hpp;hxx;hm;inl;inc;xsd" | |
208 | UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" | |
209 | > | |
210 | <File | |
211 | RelativePath="..\..\src\hle.h" | |
212 | > | |
213 | </File> | |
214 | </Filter> | |
215 | </Files> | |
216 | <Globals> | |
217 | </Globals> | |
218 | </VisualStudioProject> |
20 | 20 | # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ |
21 | 21 | # Makefile for Mupen64 HLE RSP plugin in Mupen64plus. |
22 | 22 | |
23 | # detect operation system | |
23 | # detect operating system | |
24 | 24 | UNAME = $(shell uname -s) |
25 | OS := NONE | |
25 | 26 | ifeq ("$(UNAME)","Linux") |
26 | 27 | OS = LINUX |
27 | 28 | SO_EXTENSION = so |
42 | 43 | SO_EXTENSION = so |
43 | 44 | SHARED = -shared |
44 | 45 | endif |
46 | ifeq ("$(OS)","NONE") | |
47 | $(error OS type "$(UNAME)" not supported. Please file bug report at 'http://code.google.com/p/mupen64plus/issues') | |
48 | endif | |
45 | 49 | |
46 | 50 | # detect system architecture |
47 | 51 | HOST_CPU ?= $(shell uname -m) |
48 | 52 | NO_ASM ?= 1 |
53 | CPU := NONE | |
49 | 54 | ifneq ("$(filter x86_64 amd64,$(HOST_CPU))","") |
50 | 55 | CPU := X86 |
51 | 56 | ifeq ("$(BITS)", "32") |
58 | 63 | CPU := X86 |
59 | 64 | ARCH_DETECTED := 32BITS |
60 | 65 | endif |
61 | ifneq ("$(filter ppc powerpc,$(HOST_CPU))","") | |
62 | CPU := PPC | |
63 | ARCH_DETECTED := 32BITS | |
64 | endif | |
65 | ifneq ("$(filter ppc64 powerpc64,$(HOST_CPU))","") | |
66 | CPU := PPC | |
67 | ARCH_DETECTED := 64BITS | |
66 | # PPC doesn't work yet | |
67 | #ifneq ("$(filter ppc powerpc,$(HOST_CPU))","") | |
68 | # CPU := PPC | |
69 | # ARCH_DETECTED := 32BITS | |
70 | #endif | |
71 | #ifneq ("$(filter ppc64 powerpc64,$(HOST_CPU))","") | |
72 | # CPU := PPC | |
73 | # ARCH_DETECTED := 64BITS | |
74 | #endif | |
75 | ifeq ("$(CPU)","NONE") | |
76 | $(error CPU type "$(HOST_CPU)" not supported. Please file bug report at 'http://code.google.com/p/mupen64plus/issues') | |
68 | 77 | endif |
69 | 78 | |
70 | 79 | # base CFLAGS, LIBS, and LDFLAGS |
133 | 142 | endif |
134 | 143 | |
135 | 144 | # set shell function names |
136 | CC = gcc | |
137 | CXX = g++ | |
138 | LD = g++ | |
139 | INSTALL = install | |
140 | ifeq ($(OS),LINUX) | |
141 | STRIP = strip -s | |
142 | endif | |
145 | CC ?= gcc | |
146 | CXX ?= g++ | |
147 | LD ?= g++ | |
148 | INSTALL ?= install | |
143 | 149 | ifeq ($(OS),OSX) |
144 | STRIP = strip -x | |
150 | STRIP ?= strip -x | |
151 | else | |
152 | STRIP ?= strip -s | |
145 | 153 | endif |
146 | 154 | |
147 | 155 | # set special flags for given Makefile parameters |
193 | 201 | @echo " Install Options:" |
194 | 202 | @echo " PREFIX=path == install/uninstall prefix (default: /usr/local)" |
195 | 203 | @echo " LIBDIR=path == path to install plugin libraries (default: PREFIX/lib/mupen64plus)" |
204 | @echo " DESTDIR=path == path to prepend to all installation paths (only for packagers)" | |
196 | 205 | @echo " Debugging Options:" |
197 | 206 | @echo " DEBUG=1 == add debugging symbols" |
198 | 207 | |
199 | 208 | all: $(TARGET) |
200 | 209 | |
201 | 210 | install: $(TARGET) |
202 | $(INSTALL) -d -v "$(LIBDIR)" | |
203 | $(INSTALL) -m 0644 $(TARGET) "$(LIBDIR)" | |
211 | $(INSTALL) -d -v "$(DESTDIR)$(LIBDIR)" | |
212 | $(INSTALL) -m 0644 $(TARGET) "$(DESTDIR)$(LIBDIR)" | |
204 | 213 | |
205 | 214 | uninstall: |
206 | rm -f "$(LIBDIR)/$(TARGET)" | |
215 | rm -f "$(DESTDIR)$(LIBDIR)/$(TARGET)" | |
207 | 216 | |
208 | 217 | clean: |
209 | 218 | rm -rf ./_obj/* $(TARGET) |
213 | 222 | # build rules |
214 | 223 | |
215 | 224 | $(TARGET): $(OBJECTS) |
216 | $(LD) $(SHARED) $^ $(LDFLAGS) -o $@ | |
225 | $(CXX) $(SHARED) $^ $(LDFLAGS) -o $@ | |
217 | 226 | $(STRIP) $@ |
218 | 227 | |
219 | 228 | $(OBJDIR)/%.o: $(SRCDIR)/%.c |
23 | 23 | |
24 | 24 | #include "m64p_plugin.h" |
25 | 25 | |
26 | #define RSP_HLE_VERSION 0x016301 | |
26 | #define RSP_HLE_VERSION 0x016302 | |
27 | 27 | |
28 | 28 | #ifdef _BIG_ENDIAN |
29 | 29 | #define S 0 |
24 | 24 | extern "C" { |
25 | 25 | #include "hle.h" |
26 | 26 | } |
27 | ||
28 | extern "C" void (*ABI1[])(void); | |
27 | 29 | |
28 | 30 | //#include "rsp.h" |
29 | 31 | //#define SAFE_MEMORY |
87 | 89 | 0xF80..0xFFF <Unknown> |
88 | 90 | ***************************************************/ |
89 | 91 | |
90 | static void SPNOOP () { | |
92 | static void SPNOOP (void) { | |
91 | 93 | //MessageBox (NULL, "Unknown Audio Command in ABI 1", "Audio HLE Error", MB_OK); |
92 | 94 | } |
93 | 95 | |
151 | 153 | 0xFFD8, 0x0E5F, 0x6696, 0x0B39, 0xFFDF, 0x0D46, 0x66AD, 0x0C39 |
152 | 154 | }; |
153 | 155 | |
154 | static void CLEARBUFF () { | |
156 | static void CLEARBUFF (void) { | |
155 | 157 | u32 addr = (u32)(inst1 & 0xffff); |
156 | 158 | u32 count = (u32)(inst2 & 0xffff); |
157 | 159 | addr &= 0xFFFC; |
160 | 162 | |
161 | 163 | //FILE *dfile = fopen ("d:\\envmix.txt", "wt"); |
162 | 164 | |
163 | static void ENVMIXER () { | |
165 | static void ENVMIXER (void) { | |
164 | 166 | //static int envmixcnt = 0; |
165 | 167 | u8 flags = (u8)((inst1 >> 16) & 0xff); |
166 | 168 | u32 addy = (inst2 & 0xFFFFFF);// + SEGMENTS[(inst2>>24)&0xf]; |
237 | 239 | if (LAdderStart != LTrg) { |
238 | 240 | LAcc = LAdderStart; |
239 | 241 | LVol = (LAdderEnd - LAdderStart) >> 3; |
240 | LAdderEnd = ((s64)LAdderEnd * (s64)LRamp) >> 16; | |
241 | LAdderStart = ((s64)LAcc * (s64)LRamp) >> 16; | |
242 | LAdderEnd = (s32) (((s64)LAdderEnd * (s64)LRamp) >> 16); | |
243 | LAdderStart = (s32) (((s64)LAcc * (s64)LRamp) >> 16); | |
242 | 244 | } else { |
243 | 245 | LAcc = LTrg; |
244 | 246 | LVol = 0; |
247 | 249 | if (RAdderStart != RTrg) { |
248 | 250 | RAcc = RAdderStart; |
249 | 251 | RVol = (RAdderEnd - RAdderStart) >> 3; |
250 | RAdderEnd = ((s64)RAdderEnd * (s64)RRamp) >> 16; | |
251 | RAdderStart = ((s64)RAcc * (s64)RRamp) >> 16; | |
252 | RAdderEnd = (s32) (((s64)RAdderEnd * (s64)RRamp) >> 16); | |
253 | RAdderStart = (s32) (((s64)RAcc * (s64)RRamp) >> 16); | |
252 | 254 | } else { |
253 | 255 | RAcc = RTrg; |
254 | 256 | RVol = 0; |
385 | 387 | memcpy(rsp.RDRAM+addy, (u8 *)hleMixerWorkArea,80); |
386 | 388 | } |
387 | 389 | |
388 | static void RESAMPLE () { | |
390 | static void RESAMPLE (void) { | |
389 | 391 | unsigned char Flags=(u8)((inst1>>16)&0xff); |
390 | 392 | unsigned int Pitch=((inst1&0xffff))<<1; |
391 | 393 | u32 addy = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf]; |
460 | 462 | *(u16 *)(rsp.RDRAM+addy+10) = Accum; |
461 | 463 | } |
462 | 464 | |
463 | static void SETVOL () { | |
465 | static void SETVOL (void) { | |
464 | 466 | // Might be better to unpack these depending on the flags... |
465 | 467 | u8 flags = (u8)((inst1 >> 16) & 0xff); |
466 | 468 | u16 vol = (s16)(inst1 & 0xffff); |
505 | 507 | } |
506 | 508 | } |
507 | 509 | |
508 | static void UNKNOWN () {} | |
509 | ||
510 | static void SETLOOP () { | |
510 | static void UNKNOWN (void) {} | |
511 | ||
512 | static void SETLOOP (void) { | |
511 | 513 | loopval = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf]; |
512 | 514 | //VolTrg_Left = (s16)(loopval>>16); // m_LeftVol |
513 | 515 | //VolRamp_Left = (s16)(loopval); // m_LeftVolTarget |
514 | 516 | } |
515 | 517 | |
516 | static void ADPCM () { // Work in progress! :) | |
518 | static void ADPCM (void) { // Work in progress! :) | |
517 | 519 | unsigned char Flags=(u8)(inst1>>16)&0xff; |
518 | 520 | //unsigned short Gain=(u16)(inst1&0xffff); |
519 | 521 | unsigned int Address=(inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf]; |
758 | 760 | memcpy(&rsp.RDRAM[Address],out,32); |
759 | 761 | } |
760 | 762 | |
761 | static void LOADBUFF () { // memcpy causes static... endianess issue :( | |
763 | static void LOADBUFF (void) { // memcpy causes static... endianess issue :( | |
762 | 764 | u32 v0; |
763 | 765 | //u32 cnt; |
764 | 766 | if (AudioCount == 0) |
767 | 769 | memcpy (BufferSpace+(AudioInBuffer&0xFFFC), rsp.RDRAM+v0, (AudioCount+3)&0xFFFC); |
768 | 770 | } |
769 | 771 | |
770 | static void SAVEBUFF () { // memcpy causes static... endianess issue :( | |
772 | static void SAVEBUFF (void) { // memcpy causes static... endianess issue :( | |
771 | 773 | u32 v0; |
772 | 774 | //u32 cnt; |
773 | 775 | if (AudioCount == 0) |
776 | 778 | memcpy (rsp.RDRAM+v0, BufferSpace+(AudioOutBuffer&0xFFFC), (AudioCount+3)&0xFFFC); |
777 | 779 | } |
778 | 780 | |
779 | static void SETBUFF () { // Should work ;-) | |
781 | static void SETBUFF (void) { // Should work ;-) | |
780 | 782 | if ((inst1 >> 0x10) & 0x8) { // A_AUX - Auxillary Sound Buffer Settings |
781 | 783 | AudioAuxA = u16(inst1); |
782 | 784 | AudioAuxC = u16((inst2 >> 0x10)); |
788 | 790 | } |
789 | 791 | } |
790 | 792 | |
791 | static void DMEMMOVE () { // Doesn't sound just right?... will fix when HLE is ready - 03-11-01 | |
793 | static void DMEMMOVE (void) { // Doesn't sound just right?... will fix when HLE is ready - 03-11-01 | |
792 | 794 | u32 v0, v1; |
793 | 795 | u32 cnt; |
794 | 796 | if ((inst2 & 0xffff)==0) |
807 | 809 | } |
808 | 810 | } |
809 | 811 | |
810 | static void LOADADPCM () { // Loads an ADPCM table - Works 100% Now 03-13-01 | |
812 | static void LOADADPCM (void) { // Loads an ADPCM table - Works 100% Now 03-13-01 | |
811 | 813 | u32 v0; |
812 | 814 | v0 = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf]; |
813 | 815 | /* if (v0 > (1024*1024*8)) |
832 | 834 | } |
833 | 835 | |
834 | 836 | |
835 | static void INTERLEAVE () { // Works... - 3-11-01 | |
837 | static void INTERLEAVE (void) { // Works... - 3-11-01 | |
836 | 838 | u32 inL, inR; |
837 | 839 | u16 *outbuff = (u16 *)(AudioOutBuffer+BufferSpace); |
838 | 840 | u16 *inSrcR; |
857 | 859 | } |
858 | 860 | |
859 | 861 | |
860 | static void MIXER () { // Fixed a sign issue... 03-14-01 | |
862 | static void MIXER (void) { // Fixed a sign issue... 03-14-01 | |
861 | 863 | u32 dmemin = (u16)(inst2 >> 0x10); |
862 | 864 | u32 dmemout = (u16)(inst2 & 0xFFFF); |
863 | 865 | //u8 flags = (u8)((inst1 >> 16) & 0xff); |
892 | 894 | //Command: RESAMPLE - Calls: 48 - Total Time: 276354 - Avg Time: 5757.38 - Percent: 22.95% |
893 | 895 | |
894 | 896 | |
895 | void (*ABI1[0x20])() = { // TOP Performace Hogs: MIXER, RESAMPLE, ENVMIXER | |
897 | void (*ABI1[0x20])(void) = { // TOP Performace Hogs: MIXER, RESAMPLE, ENVMIXER | |
896 | 898 | SPNOOP , ADPCM , CLEARBUFF, ENVMIXER , LOADBUFF, RESAMPLE , SAVEBUFF, UNKNOWN, |
897 | 899 | SETBUFF, SETVOL, DMEMMOVE , LOADADPCM , MIXER , INTERLEAVE, UNKNOWN , SETLOOP, |
898 | 900 | SPNOOP , SPNOOP, SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP, |
900 | 902 | }; |
901 | 903 | |
902 | 904 | /* BACKUPS |
903 | void MIXER () { // Fixed a sign issue... 03-14-01 | |
905 | void MIXER (void) { // Fixed a sign issue... 03-14-01 | |
904 | 906 | u16 dmemin = (u16)(inst2 >> 0x10); |
905 | 907 | u16 dmemout = (u16)(inst2 & 0xFFFF); |
906 | 908 | u16 gain = (u16)(inst1 & 0xFFFF); |
27 | 27 | #include "hle.h" |
28 | 28 | } |
29 | 29 | |
30 | extern "C" void (*ABI2[])(void); | |
31 | ||
30 | 32 | extern u8 BufferSpace[0x10000]; |
31 | 33 | |
32 | static void SPNOOP () { | |
34 | static void SPNOOP (void) { | |
33 | 35 | DebugMessage(M64MSG_ERROR, "Unknown/Unimplemented Audio Command %i in ABI 2", (int)(inst1 >> 24)); |
34 | 36 | } |
35 | 37 | extern u16 AudioInBuffer; // 0x0000(T8) |
45 | 47 | bool isMKABI = false; |
46 | 48 | bool isZeldaABI = false; |
47 | 49 | |
48 | static void LOADADPCM2 () { // Loads an ADPCM table - Works 100% Now 03-13-01 | |
50 | static void LOADADPCM2 (void) { // Loads an ADPCM table - Works 100% Now 03-13-01 | |
49 | 51 | u32 v0; |
50 | 52 | v0 = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf]; |
51 | 53 | u16 *table = (u16 *)(rsp.RDRAM+v0); // Zelda2 Specific... |
66 | 68 | } |
67 | 69 | } |
68 | 70 | |
69 | static void SETLOOP2 () { | |
71 | static void SETLOOP2 (void) { | |
70 | 72 | loopval = inst2 & 0xffffff; // No segment? |
71 | 73 | } |
72 | 74 | |
73 | static void SETBUFF2 () { | |
75 | static void SETBUFF2 (void) { | |
74 | 76 | AudioInBuffer = u16(inst1); // 0x00 |
75 | 77 | AudioOutBuffer = u16((inst2 >> 0x10)); // 0x02 |
76 | 78 | AudioCount = u16(inst2); // 0x04 |
77 | 79 | } |
78 | 80 | |
79 | static void ADPCM2 () { // Verified to be 100% Accurate... | |
81 | static void ADPCM2 (void) { // Verified to be 100% Accurate... | |
80 | 82 | unsigned char Flags=(u8)(inst1>>16)&0xff; |
81 | 83 | //unsigned short Gain=(u16)(inst1&0xffff); |
82 | 84 | unsigned int Address=(inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf]; |
355 | 357 | memcpy(&rsp.RDRAM[Address],out,32); |
356 | 358 | } |
357 | 359 | |
358 | static void CLEARBUFF2 () { | |
360 | static void CLEARBUFF2 (void) { | |
359 | 361 | u16 addr = (u16)(inst1 & 0xffff); |
360 | 362 | u16 count = (u16)(inst2 & 0xffff); |
361 | 363 | if (count > 0) |
362 | 364 | memset(BufferSpace+addr, 0, count); |
363 | 365 | } |
364 | 366 | |
365 | static void LOADBUFF2 () { // Needs accuracy verification... | |
367 | static void LOADBUFF2 (void) { // Needs accuracy verification... | |
366 | 368 | u32 v0; |
367 | 369 | u32 cnt = (((inst1 >> 0xC)+3)&0xFFC); |
368 | 370 | v0 = (inst2 & 0xfffffc);// + SEGMENTS[(inst2>>24)&0xf]; |
369 | 371 | memcpy (BufferSpace+(inst1&0xfffc), rsp.RDRAM+v0, (cnt+3)&0xFFFC); |
370 | 372 | } |
371 | 373 | |
372 | static void SAVEBUFF2 () { // Needs accuracy verification... | |
374 | static void SAVEBUFF2 (void) { // Needs accuracy verification... | |
373 | 375 | u32 v0; |
374 | 376 | u32 cnt = (((inst1 >> 0xC)+3)&0xFFC); |
375 | 377 | v0 = (inst2 & 0xfffffc);// + SEGMENTS[(inst2>>24)&0xf]; |
377 | 379 | } |
378 | 380 | |
379 | 381 | |
380 | static void MIXER2 () { // Needs accuracy verification... | |
382 | static void MIXER2 (void) { // Needs accuracy verification... | |
381 | 383 | u16 dmemin = (u16)(inst2 >> 0x10); |
382 | 384 | u16 dmemout = (u16)(inst2 & 0xFFFF); |
383 | 385 | u32 count = ((inst1 >> 12) & 0xFF0); |
399 | 401 | } |
400 | 402 | |
401 | 403 | |
402 | static void RESAMPLE2 () { | |
404 | static void RESAMPLE2 (void) { | |
403 | 405 | unsigned char Flags=(u8)((inst1>>16)&0xff); |
404 | 406 | unsigned int Pitch=((inst1&0xffff))<<1; |
405 | 407 | u32 addy = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf]; |
461 | 463 | //memcpy (RSWORK, src+srcPtr, 0x8); |
462 | 464 | } |
463 | 465 | |
464 | static void DMEMMOVE2 () { // Needs accuracy verification... | |
466 | static void DMEMMOVE2 (void) { // Needs accuracy verification... | |
465 | 467 | u32 v0, v1; |
466 | 468 | u32 cnt; |
467 | 469 | if ((inst2 & 0xffff)==0) |
483 | 485 | u32 t3, s5, s6; |
484 | 486 | u16 env[8]; |
485 | 487 | |
486 | static void ENVSETUP1 () { | |
488 | static void ENVSETUP1 (void) { | |
487 | 489 | u32 tmp; |
488 | 490 | |
489 | 491 | //fprintf (dfile, "ENVSETUP1: inst1 = %08X, inst2 = %08X\n", inst1, inst2); |
497 | 499 | //fprintf (dfile, " t3 = %X / s5 = %X / s6 = %X / env[4] = %X / env[5] = %X\n", t3, s5, s6, env[4], env[5]); |
498 | 500 | } |
499 | 501 | |
500 | static void ENVSETUP2 () { | |
502 | static void ENVSETUP2 (void) { | |
501 | 503 | u32 tmp; |
502 | 504 | |
503 | 505 | //fprintf (dfile, "ENVSETUP2: inst1 = %08X, inst2 = %08X\n", inst1, inst2); |
512 | 514 | //fprintf (dfile, " env[0] = %X / env[1] = %X / env[2] = %X / env[3] = %X\n", env[0], env[1], env[2], env[3]); |
513 | 515 | } |
514 | 516 | |
515 | static void ENVMIXER2 () { | |
517 | static void ENVMIXER2 (void) { | |
516 | 518 | //fprintf (dfile, "ENVMIXER: inst1 = %08X, inst2 = %08X\n", inst1, inst2); |
517 | 519 | |
518 | 520 | s16 *bufft6, *bufft7, *buffs0, *buffs1; |
615 | 617 | } |
616 | 618 | } |
617 | 619 | |
618 | static void DUPLICATE2() { | |
620 | static void DUPLICATE2(void) { | |
619 | 621 | unsigned short Count = (inst1 >> 16) & 0xff; |
620 | 622 | unsigned short In = inst1&0xffff; |
621 | 623 | unsigned short Out = (inst2>>16); |
631 | 633 | } |
632 | 634 | } |
633 | 635 | /* |
634 | static void INTERL2 () { // Make your own... | |
636 | static void INTERL2 (void) { // Make your own... | |
635 | 637 | short Count = inst1 & 0xffff; |
636 | 638 | unsigned short Out = inst2 & 0xffff; |
637 | 639 | unsigned short In = (inst2 >> 16); |
662 | 664 | } |
663 | 665 | */ |
664 | 666 | |
665 | static void INTERL2 () { | |
667 | static void INTERL2 (void) { | |
666 | 668 | short Count = inst1 & 0xffff; |
667 | 669 | unsigned short Out = inst2 & 0xffff; |
668 | 670 | unsigned short In = (inst2 >> 16); |
678 | 680 | } |
679 | 681 | } |
680 | 682 | |
681 | static void INTERLEAVE2 () { // Needs accuracy verification... | |
683 | static void INTERLEAVE2 (void) { // Needs accuracy verification... | |
682 | 684 | u32 inL, inR; |
683 | 685 | u16 *outbuff; |
684 | 686 | u16 *inSrcR; |
710 | 712 | } |
711 | 713 | } |
712 | 714 | |
713 | static void ADDMIXER () { | |
715 | static void ADDMIXER (void) { | |
714 | 716 | short Count = (inst1 >> 12) & 0x00ff0; |
715 | 717 | u16 InBuffer = (inst2 >> 16); |
716 | 718 | u16 OutBuffer = inst2 & 0xffff; |
726 | 728 | } |
727 | 729 | } |
728 | 730 | |
729 | static void HILOGAIN () { | |
731 | static void HILOGAIN (void) { | |
730 | 732 | u16 cnt = inst1 & 0xffff; |
731 | 733 | u16 out = (inst2 >> 16) & 0xffff; |
732 | 734 | s16 hi = (s16)((inst1 >> 4) & 0xf000); |
748 | 750 | } |
749 | 751 | } |
750 | 752 | |
751 | static void FILTER2 () { | |
753 | static void FILTER2 (void) { | |
752 | 754 | static int cnt = 0; |
753 | 755 | static s16 *lutt6; |
754 | 756 | static s16 *lutt5; |
873 | 875 | memcpy (BufferSpace+(inst1&0xffff), outbuff, cnt); |
874 | 876 | } |
875 | 877 | |
876 | static void SEGMENT2 () { | |
878 | static void SEGMENT2 (void) { | |
877 | 879 | if (isZeldaABI) { |
878 | 880 | FILTER2 (); |
879 | 881 | return; |
888 | 890 | } |
889 | 891 | } |
890 | 892 | |
891 | static void UNKNOWN () { | |
893 | static void UNKNOWN (void) { | |
892 | 894 | } |
893 | 895 | /* |
894 | void (*ABI2[0x20])() = { | |
896 | void (*ABI2[0x20])(void) = { | |
895 | 897 | SPNOOP, ADPCM2, CLEARBUFF2, SPNOOP, SPNOOP, RESAMPLE2, SPNOOP, SEGMENT2, |
896 | 898 | SETBUFF2, SPNOOP, DMEMMOVE2, LOADADPCM2, MIXER2, INTERLEAVE2, HILOGAIN, SETLOOP2, |
897 | 899 | SPNOOP, INTERL2, ENVSETUP1, ENVMIXER2, LOADBUFF2, SAVEBUFF2, ENVSETUP2, SPNOOP, |
898 | 900 | SPNOOP, SPNOOP, SPNOOP, SPNOOP, SPNOOP, SPNOOP, SPNOOP, SPNOOP |
899 | 901 | };*/ |
900 | 902 | |
901 | void (*ABI2[0x20])() = { | |
903 | void (*ABI2[0x20])(void) = { | |
902 | 904 | SPNOOP , ADPCM2, CLEARBUFF2, UNKNOWN, ADDMIXER, RESAMPLE2, UNKNOWN, SEGMENT2, |
903 | 905 | SETBUFF2 , DUPLICATE2, DMEMMOVE2, LOADADPCM2, MIXER2, INTERLEAVE2, HILOGAIN, SETLOOP2, |
904 | 906 | SPNOOP, INTERL2 , ENVSETUP1, ENVMIXER2, LOADBUFF2, SAVEBUFF2, ENVSETUP2, SPNOOP, |
905 | 907 | HILOGAIN , SPNOOP, DUPLICATE2 , UNKNOWN , SPNOOP , SPNOOP , SPNOOP , SPNOOP |
906 | 908 | }; |
907 | 909 | /* |
908 | void (*ABI2[0x20])() = { | |
910 | void (*ABI2[0x20])(void) = { | |
909 | 911 | SPNOOP , ADPCM2, CLEARBUFF2, SPNOOP, SPNOOP, RESAMPLE2 , SPNOOP , SEGMENT2, |
910 | 912 | SETBUFF2 , DUPLICATE2, DMEMMOVE2, LOADADPCM2, MIXER2, INTERLEAVE2, SPNOOP, SETLOOP2, |
911 | 913 | SPNOOP, INTERL2 , ENVSETUP1, ENVMIXER2, LOADBUFF2, SAVEBUFF2, ENVSETUP2, SPNOOP, |
27 | 27 | #include "hle.h" |
28 | 28 | } |
29 | 29 | |
30 | static void SPNOOP () { | |
30 | extern "C" void (*ABI3[])(void); | |
31 | ||
32 | static void SPNOOP (void) { | |
31 | 33 | DebugMessage(M64MSG_ERROR, "Unknown/Unimplemented Audio Command %i in ABI 3", (int)(inst1 >> 24)); |
32 | 34 | } |
33 | 35 | |
53 | 55 | extern u8 BufferSpace[0x10000]; |
54 | 56 | |
55 | 57 | /* |
56 | static void SETVOL3 () { // Swapped Rate_Left and Vol | |
58 | static void SETVOL3 (void) { // Swapped Rate_Left and Vol | |
57 | 59 | u8 Flags = (u8)(inst1 >> 0x10); |
58 | 60 | if (Flags & 0x4) { // 288 |
59 | 61 | if (Flags & 0x2) { // 290 |
70 | 72 | } |
71 | 73 | } |
72 | 74 | */ |
73 | static void SETVOL3 () { | |
75 | static void SETVOL3 (void) { | |
74 | 76 | u8 Flags = (u8)(inst1 >> 0x10); |
75 | 77 | if (Flags & 0x4) { // 288 |
76 | 78 | if (Flags & 0x2) { // 290 |
88 | 90 | } |
89 | 91 | } |
90 | 92 | |
91 | static void ENVMIXER3 () { | |
93 | static void ENVMIXER3 (void) { | |
92 | 94 | u8 flags = (u8)((inst1 >> 16) & 0xff); |
93 | 95 | u32 addy = (inst2 & 0xFFFFFF); |
94 | 96 | |
246 | 248 | memcpy(rsp.RDRAM+addy, (u8 *)hleMixerWorkArea,80); |
247 | 249 | } |
248 | 250 | //*/ |
249 | static void ENVMIXER3o () { | |
251 | static void ENVMIXER3o (void) { | |
250 | 252 | u8 flags = (u8)((inst1 >> 16) & 0xff); |
251 | 253 | u32 addy = (inst2 & 0xFFFFFF);// + SEGMENTS[(inst2>>24)&0xf]; |
252 | 254 | //static FILE *dfile = fopen ("d:\\envmix.txt", "wt"); |
403 | 405 | memcpy(rsp.RDRAM+addy, (u8 *)hleMixerWorkArea,80); |
404 | 406 | } |
405 | 407 | /* |
406 | static void ENVMIXER3 () { // Borrowed from RCP... | |
408 | static void ENVMIXER3 (void) { // Borrowed from RCP... | |
407 | 409 | u8 flags = (u8)((inst1 >> 16) & 0xff); |
408 | 410 | u32 addy = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf]; |
409 | 411 | |
482 | 484 | }*/ |
483 | 485 | |
484 | 486 | |
485 | static void CLEARBUFF3 () { | |
487 | static void CLEARBUFF3 (void) { | |
486 | 488 | u16 addr = (u16)(inst1 & 0xffff); |
487 | 489 | u16 count = (u16)(inst2 & 0xffff); |
488 | 490 | memset(BufferSpace+addr+0x4f0, 0, count); |
489 | 491 | } |
490 | 492 | |
491 | static void MIXER3 () { // Needs accuracy verification... | |
493 | static void MIXER3 (void) { // Needs accuracy verification... | |
492 | 494 | u16 dmemin = (u16)(inst2 >> 0x10) + 0x4f0; |
493 | 495 | u16 dmemout = (u16)(inst2 & 0xFFFF) + 0x4f0; |
494 | 496 | //u8 flags = (u8)((inst1 >> 16) & 0xff); |
508 | 510 | } |
509 | 511 | } |
510 | 512 | |
511 | static void LOADBUFF3 () { | |
513 | static void LOADBUFF3 (void) { | |
512 | 514 | u32 v0; |
513 | 515 | u32 cnt = (((inst1 >> 0xC)+3)&0xFFC); |
514 | 516 | v0 = (inst2 & 0xfffffc); |
516 | 518 | memcpy (BufferSpace+src, rsp.RDRAM+v0, cnt); |
517 | 519 | } |
518 | 520 | |
519 | static void SAVEBUFF3 () { | |
521 | static void SAVEBUFF3 (void) { | |
520 | 522 | u32 v0; |
521 | 523 | u32 cnt = (((inst1 >> 0xC)+3)&0xFFC); |
522 | 524 | v0 = (inst2 & 0xfffffc); |
524 | 526 | memcpy (rsp.RDRAM+v0, BufferSpace+src, cnt); |
525 | 527 | } |
526 | 528 | |
527 | static void LOADADPCM3 () { // Loads an ADPCM table - Works 100% Now 03-13-01 | |
529 | static void LOADADPCM3 (void) { // Loads an ADPCM table - Works 100% Now 03-13-01 | |
528 | 530 | u32 v0; |
529 | 531 | v0 = (inst2 & 0xffffff); |
530 | 532 | //memcpy (dmem+0x3f0, rsp.RDRAM+v0, inst1&0xffff); |
546 | 548 | } |
547 | 549 | } |
548 | 550 | |
549 | static void DMEMMOVE3 () { // Needs accuracy verification... | |
551 | static void DMEMMOVE3 (void) { // Needs accuracy verification... | |
550 | 552 | u32 v0, v1; |
551 | 553 | u32 cnt; |
552 | 554 | v0 = (inst1 & 0xFFFF) + 0x4f0; |
559 | 561 | } |
560 | 562 | } |
561 | 563 | |
562 | static void SETLOOP3 () { | |
564 | static void SETLOOP3 (void) { | |
563 | 565 | loopval = (inst2 & 0xffffff); |
564 | 566 | } |
565 | 567 | |
566 | static void ADPCM3 () { // Verified to be 100% Accurate... | |
568 | static void ADPCM3 (void) { // Verified to be 100% Accurate... | |
567 | 569 | unsigned char Flags=(u8)(inst2>>0x1c)&0xff; |
568 | 570 | //unsigned short Gain=(u16)(inst1&0xffff); |
569 | 571 | unsigned int Address=(inst1 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf]; |
819 | 821 | memcpy(&rsp.RDRAM[Address],out,32); |
820 | 822 | } |
821 | 823 | |
822 | static void RESAMPLE3 () { | |
824 | static void RESAMPLE3 (void) { | |
823 | 825 | unsigned char Flags=(u8)((inst2>>0x1e)); |
824 | 826 | unsigned int Pitch=((inst2>>0xe)&0xffff)<<1; |
825 | 827 | u32 addy = (inst1 & 0xffffff); |
917 | 919 | *(u16 *)(rsp.RDRAM+addy+10) = Accum; |
918 | 920 | } |
919 | 921 | |
920 | static void INTERLEAVE3 () { // Needs accuracy verification... | |
922 | static void INTERLEAVE3 (void) { // Needs accuracy verification... | |
921 | 923 | //u32 inL, inR; |
922 | 924 | u16 *outbuff = (u16 *)(BufferSpace + 0x4f0);//(u16 *)(AudioOutBuffer+dmem); |
923 | 925 | u16 *inSrcR; |
950 | 952 | } |
951 | 953 | } |
952 | 954 | |
953 | //static void UNKNOWN (); | |
955 | //static void UNKNOWN (void); | |
954 | 956 | /* |
955 | 957 | typedef struct { |
956 | 958 | unsigned char sync; |
976 | 978 | FILE *mp3dat; |
977 | 979 | */ |
978 | 980 | |
979 | static void WHATISTHIS () { | |
981 | static void WHATISTHIS (void) { | |
980 | 982 | } |
981 | 983 | |
982 | 984 | //static FILE *fp = fopen ("d:\\mp3info.txt", "wt"); |
983 | 985 | u32 setaddr; |
984 | static void MP3ADDY () { | |
986 | static void MP3ADDY (void) { | |
985 | 987 | setaddr = (inst2 & 0xffffff); |
986 | 988 | } |
987 | 989 | |
988 | 990 | extern "C" { |
989 | void rsp_run(); | |
991 | void rsp_run(void); | |
990 | 992 | void mp3setup (unsigned int inst1, unsigned int inst2, unsigned int t8); |
991 | 993 | } |
992 | 994 | |
994 | 996 | extern "C" { |
995 | 997 | extern char *pDMEM; |
996 | 998 | } |
997 | void MP3 (); | |
999 | void MP3 (void); | |
998 | 1000 | /* |
999 | 1001 | { |
1000 | 1002 | // return; |
1012 | 1014 | memcpy (imem+0x238, rsp.RDRAM+((u32*)BufferSpace)[0x008/4], 0x9C0); |
1013 | 1015 | ((u32*)BufferSpace)[0xFF4/4] = setaddr; |
1014 | 1016 | pDMEM = (char *)BufferSpace; |
1015 | rsp_run (); | |
1017 | rsp_run (void); | |
1016 | 1018 | dmembase = ((u32*)BufferSpace)[0xFF8/4]; |
1017 | 1019 | loopval = ((u32*)BufferSpace)[0xFFC/4]; |
1018 | 1020 | //0x1A98 SW S1, 0x0FF4 (R0) |
1043 | 1045 | (integrated-services-digital-network) to be the future high-bandwidth pipe to the home. |
1044 | 1046 | |
1045 | 1047 | */ |
1046 | static void DISABLE () { | |
1048 | static void DISABLE (void) { | |
1047 | 1049 | //MessageBox (NULL, "Help", "ABI 3 Command 0", MB_OK); |
1048 | 1050 | //ChangeABI (5); |
1049 | 1051 | } |
1050 | 1052 | |
1051 | 1053 | |
1052 | void (*ABI3[0x20])() = { | |
1054 | void (*ABI3[0x20])(void) = { | |
1053 | 1055 | DISABLE , ADPCM3 , CLEARBUFF3, ENVMIXER3 , LOADBUFF3, RESAMPLE3 , SAVEBUFF3, MP3, |
1054 | 1056 | MP3ADDY, SETVOL3, DMEMMOVE3 , LOADADPCM3 , MIXER3 , INTERLEAVE3, WHATISTHIS , SETLOOP3, |
1055 | 1057 | SPNOOP , SPNOOP, SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP, |
1056 | 1058 | SPNOOP , SPNOOP, SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP |
1057 | 1059 | }; |
1058 | #if 0 | |
1059 | void (*ABI3[32])(void) = | |
1060 | { | |
1061 | SPNOOP , ADPCM3 , CLEARBUFF3, SPNOOP , | |
1062 | MIXER3 , RESAMPLE3 , SPNOOP , MP3 , | |
1063 | MP3ADDY , SETVOL3 , DMEMMOVE3 , LOADADPCM3, | |
1064 | MIXER3 , INTERLEAVE3, WHATISTHIS , SETLOOP3 , | |
1065 | SPNOOP , /*MEMHALVE , ENVSET1*/ SPNOOP, SPNOOP , ENVMIXER3 , | |
1066 | LOADBUFF3, SAVEBUFF3 , /*ENVSET2*/SPNOOP , SPNOOP , | |
1067 | SPNOOP , SPNOOP , SPNOOP , SPNOOP , | |
1068 | SPNOOP , SPNOOP , SPNOOP , SPNOOP | |
1069 | }; | |
1070 | #endif | |
1071 | ||
1060 | ||
1061 |