Codebase list mupen64plus-rsp-hle / upstream/1.99.2
Imported Upstream version 1.99.2 Sven Eckelmann 14 years ago
9 changed file(s) with 340 addition(s) and 108 deletion(s). Raw diff Collapse all Expand all
00 repo: 3fe0288fa7047c7a29c217b2bf6f05f32f8627d5
1 node: 052d3c41920efde9707aac6380782d216b4e68be
1 node: c8e88b942fdfd9c1efd303e41edc6fca2deacd34
0 052d3c41920efde9707aac6380782d216b4e68be 1.99.1
00 RSP High-Level Emulation plugin for Mupen64Plus
11 -----------------------------------------------
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
211
312 Mupen64Plus-rsp-hle v1.99.1 - December 14, 2009
413 -------------------------------------------------
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>
2020 # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2121 # Makefile for Mupen64 HLE RSP plugin in Mupen64plus.
2222
23 # detect operation system
23 # detect operating system
2424 UNAME = $(shell uname -s)
25 OS := NONE
2526 ifeq ("$(UNAME)","Linux")
2627 OS = LINUX
2728 SO_EXTENSION = so
4243 SO_EXTENSION = so
4344 SHARED = -shared
4445 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
4549
4650 # detect system architecture
4751 HOST_CPU ?= $(shell uname -m)
4852 NO_ASM ?= 1
53 CPU := NONE
4954 ifneq ("$(filter x86_64 amd64,$(HOST_CPU))","")
5055 CPU := X86
5156 ifeq ("$(BITS)", "32")
5863 CPU := X86
5964 ARCH_DETECTED := 32BITS
6065 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')
6877 endif
6978
7079 # base CFLAGS, LIBS, and LDFLAGS
133142 endif
134143
135144 # 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
143149 ifeq ($(OS),OSX)
144 STRIP = strip -x
150 STRIP ?= strip -x
151 else
152 STRIP ?= strip -s
145153 endif
146154
147155 # set special flags for given Makefile parameters
193201 @echo " Install Options:"
194202 @echo " PREFIX=path == install/uninstall prefix (default: /usr/local)"
195203 @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)"
196205 @echo " Debugging Options:"
197206 @echo " DEBUG=1 == add debugging symbols"
198207
199208 all: $(TARGET)
200209
201210 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)"
204213
205214 uninstall:
206 rm -f "$(LIBDIR)/$(TARGET)"
215 rm -f "$(DESTDIR)$(LIBDIR)/$(TARGET)"
207216
208217 clean:
209218 rm -rf ./_obj/* $(TARGET)
213222 # build rules
214223
215224 $(TARGET): $(OBJECTS)
216 $(LD) $(SHARED) $^ $(LDFLAGS) -o $@
225 $(CXX) $(SHARED) $^ $(LDFLAGS) -o $@
217226 $(STRIP) $@
218227
219228 $(OBJDIR)/%.o: $(SRCDIR)/%.c
2323
2424 #include "m64p_plugin.h"
2525
26 #define RSP_HLE_VERSION 0x016301
26 #define RSP_HLE_VERSION 0x016302
2727
2828 #ifdef _BIG_ENDIAN
2929 #define S 0
2424 extern "C" {
2525 #include "hle.h"
2626 }
27
28 extern "C" void (*ABI1[])(void);
2729
2830 //#include "rsp.h"
2931 //#define SAFE_MEMORY
8789 0xF80..0xFFF <Unknown>
8890 ***************************************************/
8991
90 static void SPNOOP () {
92 static void SPNOOP (void) {
9193 //MessageBox (NULL, "Unknown Audio Command in ABI 1", "Audio HLE Error", MB_OK);
9294 }
9395
151153 0xFFD8, 0x0E5F, 0x6696, 0x0B39, 0xFFDF, 0x0D46, 0x66AD, 0x0C39
152154 };
153155
154 static void CLEARBUFF () {
156 static void CLEARBUFF (void) {
155157 u32 addr = (u32)(inst1 & 0xffff);
156158 u32 count = (u32)(inst2 & 0xffff);
157159 addr &= 0xFFFC;
160162
161163 //FILE *dfile = fopen ("d:\\envmix.txt", "wt");
162164
163 static void ENVMIXER () {
165 static void ENVMIXER (void) {
164166 //static int envmixcnt = 0;
165167 u8 flags = (u8)((inst1 >> 16) & 0xff);
166168 u32 addy = (inst2 & 0xFFFFFF);// + SEGMENTS[(inst2>>24)&0xf];
237239 if (LAdderStart != LTrg) {
238240 LAcc = LAdderStart;
239241 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);
242244 } else {
243245 LAcc = LTrg;
244246 LVol = 0;
247249 if (RAdderStart != RTrg) {
248250 RAcc = RAdderStart;
249251 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);
252254 } else {
253255 RAcc = RTrg;
254256 RVol = 0;
385387 memcpy(rsp.RDRAM+addy, (u8 *)hleMixerWorkArea,80);
386388 }
387389
388 static void RESAMPLE () {
390 static void RESAMPLE (void) {
389391 unsigned char Flags=(u8)((inst1>>16)&0xff);
390392 unsigned int Pitch=((inst1&0xffff))<<1;
391393 u32 addy = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf];
460462 *(u16 *)(rsp.RDRAM+addy+10) = Accum;
461463 }
462464
463 static void SETVOL () {
465 static void SETVOL (void) {
464466 // Might be better to unpack these depending on the flags...
465467 u8 flags = (u8)((inst1 >> 16) & 0xff);
466468 u16 vol = (s16)(inst1 & 0xffff);
505507 }
506508 }
507509
508 static void UNKNOWN () {}
509
510 static void SETLOOP () {
510 static void UNKNOWN (void) {}
511
512 static void SETLOOP (void) {
511513 loopval = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf];
512514 //VolTrg_Left = (s16)(loopval>>16); // m_LeftVol
513515 //VolRamp_Left = (s16)(loopval); // m_LeftVolTarget
514516 }
515517
516 static void ADPCM () { // Work in progress! :)
518 static void ADPCM (void) { // Work in progress! :)
517519 unsigned char Flags=(u8)(inst1>>16)&0xff;
518520 //unsigned short Gain=(u16)(inst1&0xffff);
519521 unsigned int Address=(inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf];
758760 memcpy(&rsp.RDRAM[Address],out,32);
759761 }
760762
761 static void LOADBUFF () { // memcpy causes static... endianess issue :(
763 static void LOADBUFF (void) { // memcpy causes static... endianess issue :(
762764 u32 v0;
763765 //u32 cnt;
764766 if (AudioCount == 0)
767769 memcpy (BufferSpace+(AudioInBuffer&0xFFFC), rsp.RDRAM+v0, (AudioCount+3)&0xFFFC);
768770 }
769771
770 static void SAVEBUFF () { // memcpy causes static... endianess issue :(
772 static void SAVEBUFF (void) { // memcpy causes static... endianess issue :(
771773 u32 v0;
772774 //u32 cnt;
773775 if (AudioCount == 0)
776778 memcpy (rsp.RDRAM+v0, BufferSpace+(AudioOutBuffer&0xFFFC), (AudioCount+3)&0xFFFC);
777779 }
778780
779 static void SETBUFF () { // Should work ;-)
781 static void SETBUFF (void) { // Should work ;-)
780782 if ((inst1 >> 0x10) & 0x8) { // A_AUX - Auxillary Sound Buffer Settings
781783 AudioAuxA = u16(inst1);
782784 AudioAuxC = u16((inst2 >> 0x10));
788790 }
789791 }
790792
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
792794 u32 v0, v1;
793795 u32 cnt;
794796 if ((inst2 & 0xffff)==0)
807809 }
808810 }
809811
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
811813 u32 v0;
812814 v0 = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf];
813815 /* if (v0 > (1024*1024*8))
832834 }
833835
834836
835 static void INTERLEAVE () { // Works... - 3-11-01
837 static void INTERLEAVE (void) { // Works... - 3-11-01
836838 u32 inL, inR;
837839 u16 *outbuff = (u16 *)(AudioOutBuffer+BufferSpace);
838840 u16 *inSrcR;
857859 }
858860
859861
860 static void MIXER () { // Fixed a sign issue... 03-14-01
862 static void MIXER (void) { // Fixed a sign issue... 03-14-01
861863 u32 dmemin = (u16)(inst2 >> 0x10);
862864 u32 dmemout = (u16)(inst2 & 0xFFFF);
863865 //u8 flags = (u8)((inst1 >> 16) & 0xff);
892894 //Command: RESAMPLE - Calls: 48 - Total Time: 276354 - Avg Time: 5757.38 - Percent: 22.95%
893895
894896
895 void (*ABI1[0x20])() = { // TOP Performace Hogs: MIXER, RESAMPLE, ENVMIXER
897 void (*ABI1[0x20])(void) = { // TOP Performace Hogs: MIXER, RESAMPLE, ENVMIXER
896898 SPNOOP , ADPCM , CLEARBUFF, ENVMIXER , LOADBUFF, RESAMPLE , SAVEBUFF, UNKNOWN,
897899 SETBUFF, SETVOL, DMEMMOVE , LOADADPCM , MIXER , INTERLEAVE, UNKNOWN , SETLOOP,
898900 SPNOOP , SPNOOP, SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP,
900902 };
901903
902904 /* BACKUPS
903 void MIXER () { // Fixed a sign issue... 03-14-01
905 void MIXER (void) { // Fixed a sign issue... 03-14-01
904906 u16 dmemin = (u16)(inst2 >> 0x10);
905907 u16 dmemout = (u16)(inst2 & 0xFFFF);
906908 u16 gain = (u16)(inst1 & 0xFFFF);
2727 #include "hle.h"
2828 }
2929
30 extern "C" void (*ABI2[])(void);
31
3032 extern u8 BufferSpace[0x10000];
3133
32 static void SPNOOP () {
34 static void SPNOOP (void) {
3335 DebugMessage(M64MSG_ERROR, "Unknown/Unimplemented Audio Command %i in ABI 2", (int)(inst1 >> 24));
3436 }
3537 extern u16 AudioInBuffer; // 0x0000(T8)
4547 bool isMKABI = false;
4648 bool isZeldaABI = false;
4749
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
4951 u32 v0;
5052 v0 = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf];
5153 u16 *table = (u16 *)(rsp.RDRAM+v0); // Zelda2 Specific...
6668 }
6769 }
6870
69 static void SETLOOP2 () {
71 static void SETLOOP2 (void) {
7072 loopval = inst2 & 0xffffff; // No segment?
7173 }
7274
73 static void SETBUFF2 () {
75 static void SETBUFF2 (void) {
7476 AudioInBuffer = u16(inst1); // 0x00
7577 AudioOutBuffer = u16((inst2 >> 0x10)); // 0x02
7678 AudioCount = u16(inst2); // 0x04
7779 }
7880
79 static void ADPCM2 () { // Verified to be 100% Accurate...
81 static void ADPCM2 (void) { // Verified to be 100% Accurate...
8082 unsigned char Flags=(u8)(inst1>>16)&0xff;
8183 //unsigned short Gain=(u16)(inst1&0xffff);
8284 unsigned int Address=(inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf];
355357 memcpy(&rsp.RDRAM[Address],out,32);
356358 }
357359
358 static void CLEARBUFF2 () {
360 static void CLEARBUFF2 (void) {
359361 u16 addr = (u16)(inst1 & 0xffff);
360362 u16 count = (u16)(inst2 & 0xffff);
361363 if (count > 0)
362364 memset(BufferSpace+addr, 0, count);
363365 }
364366
365 static void LOADBUFF2 () { // Needs accuracy verification...
367 static void LOADBUFF2 (void) { // Needs accuracy verification...
366368 u32 v0;
367369 u32 cnt = (((inst1 >> 0xC)+3)&0xFFC);
368370 v0 = (inst2 & 0xfffffc);// + SEGMENTS[(inst2>>24)&0xf];
369371 memcpy (BufferSpace+(inst1&0xfffc), rsp.RDRAM+v0, (cnt+3)&0xFFFC);
370372 }
371373
372 static void SAVEBUFF2 () { // Needs accuracy verification...
374 static void SAVEBUFF2 (void) { // Needs accuracy verification...
373375 u32 v0;
374376 u32 cnt = (((inst1 >> 0xC)+3)&0xFFC);
375377 v0 = (inst2 & 0xfffffc);// + SEGMENTS[(inst2>>24)&0xf];
377379 }
378380
379381
380 static void MIXER2 () { // Needs accuracy verification...
382 static void MIXER2 (void) { // Needs accuracy verification...
381383 u16 dmemin = (u16)(inst2 >> 0x10);
382384 u16 dmemout = (u16)(inst2 & 0xFFFF);
383385 u32 count = ((inst1 >> 12) & 0xFF0);
399401 }
400402
401403
402 static void RESAMPLE2 () {
404 static void RESAMPLE2 (void) {
403405 unsigned char Flags=(u8)((inst1>>16)&0xff);
404406 unsigned int Pitch=((inst1&0xffff))<<1;
405407 u32 addy = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf];
461463 //memcpy (RSWORK, src+srcPtr, 0x8);
462464 }
463465
464 static void DMEMMOVE2 () { // Needs accuracy verification...
466 static void DMEMMOVE2 (void) { // Needs accuracy verification...
465467 u32 v0, v1;
466468 u32 cnt;
467469 if ((inst2 & 0xffff)==0)
483485 u32 t3, s5, s6;
484486 u16 env[8];
485487
486 static void ENVSETUP1 () {
488 static void ENVSETUP1 (void) {
487489 u32 tmp;
488490
489491 //fprintf (dfile, "ENVSETUP1: inst1 = %08X, inst2 = %08X\n", inst1, inst2);
497499 //fprintf (dfile, " t3 = %X / s5 = %X / s6 = %X / env[4] = %X / env[5] = %X\n", t3, s5, s6, env[4], env[5]);
498500 }
499501
500 static void ENVSETUP2 () {
502 static void ENVSETUP2 (void) {
501503 u32 tmp;
502504
503505 //fprintf (dfile, "ENVSETUP2: inst1 = %08X, inst2 = %08X\n", inst1, inst2);
512514 //fprintf (dfile, " env[0] = %X / env[1] = %X / env[2] = %X / env[3] = %X\n", env[0], env[1], env[2], env[3]);
513515 }
514516
515 static void ENVMIXER2 () {
517 static void ENVMIXER2 (void) {
516518 //fprintf (dfile, "ENVMIXER: inst1 = %08X, inst2 = %08X\n", inst1, inst2);
517519
518520 s16 *bufft6, *bufft7, *buffs0, *buffs1;
615617 }
616618 }
617619
618 static void DUPLICATE2() {
620 static void DUPLICATE2(void) {
619621 unsigned short Count = (inst1 >> 16) & 0xff;
620622 unsigned short In = inst1&0xffff;
621623 unsigned short Out = (inst2>>16);
631633 }
632634 }
633635 /*
634 static void INTERL2 () { // Make your own...
636 static void INTERL2 (void) { // Make your own...
635637 short Count = inst1 & 0xffff;
636638 unsigned short Out = inst2 & 0xffff;
637639 unsigned short In = (inst2 >> 16);
662664 }
663665 */
664666
665 static void INTERL2 () {
667 static void INTERL2 (void) {
666668 short Count = inst1 & 0xffff;
667669 unsigned short Out = inst2 & 0xffff;
668670 unsigned short In = (inst2 >> 16);
678680 }
679681 }
680682
681 static void INTERLEAVE2 () { // Needs accuracy verification...
683 static void INTERLEAVE2 (void) { // Needs accuracy verification...
682684 u32 inL, inR;
683685 u16 *outbuff;
684686 u16 *inSrcR;
710712 }
711713 }
712714
713 static void ADDMIXER () {
715 static void ADDMIXER (void) {
714716 short Count = (inst1 >> 12) & 0x00ff0;
715717 u16 InBuffer = (inst2 >> 16);
716718 u16 OutBuffer = inst2 & 0xffff;
726728 }
727729 }
728730
729 static void HILOGAIN () {
731 static void HILOGAIN (void) {
730732 u16 cnt = inst1 & 0xffff;
731733 u16 out = (inst2 >> 16) & 0xffff;
732734 s16 hi = (s16)((inst1 >> 4) & 0xf000);
748750 }
749751 }
750752
751 static void FILTER2 () {
753 static void FILTER2 (void) {
752754 static int cnt = 0;
753755 static s16 *lutt6;
754756 static s16 *lutt5;
873875 memcpy (BufferSpace+(inst1&0xffff), outbuff, cnt);
874876 }
875877
876 static void SEGMENT2 () {
878 static void SEGMENT2 (void) {
877879 if (isZeldaABI) {
878880 FILTER2 ();
879881 return;
888890 }
889891 }
890892
891 static void UNKNOWN () {
893 static void UNKNOWN (void) {
892894 }
893895 /*
894 void (*ABI2[0x20])() = {
896 void (*ABI2[0x20])(void) = {
895897 SPNOOP, ADPCM2, CLEARBUFF2, SPNOOP, SPNOOP, RESAMPLE2, SPNOOP, SEGMENT2,
896898 SETBUFF2, SPNOOP, DMEMMOVE2, LOADADPCM2, MIXER2, INTERLEAVE2, HILOGAIN, SETLOOP2,
897899 SPNOOP, INTERL2, ENVSETUP1, ENVMIXER2, LOADBUFF2, SAVEBUFF2, ENVSETUP2, SPNOOP,
898900 SPNOOP, SPNOOP, SPNOOP, SPNOOP, SPNOOP, SPNOOP, SPNOOP, SPNOOP
899901 };*/
900902
901 void (*ABI2[0x20])() = {
903 void (*ABI2[0x20])(void) = {
902904 SPNOOP , ADPCM2, CLEARBUFF2, UNKNOWN, ADDMIXER, RESAMPLE2, UNKNOWN, SEGMENT2,
903905 SETBUFF2 , DUPLICATE2, DMEMMOVE2, LOADADPCM2, MIXER2, INTERLEAVE2, HILOGAIN, SETLOOP2,
904906 SPNOOP, INTERL2 , ENVSETUP1, ENVMIXER2, LOADBUFF2, SAVEBUFF2, ENVSETUP2, SPNOOP,
905907 HILOGAIN , SPNOOP, DUPLICATE2 , UNKNOWN , SPNOOP , SPNOOP , SPNOOP , SPNOOP
906908 };
907909 /*
908 void (*ABI2[0x20])() = {
910 void (*ABI2[0x20])(void) = {
909911 SPNOOP , ADPCM2, CLEARBUFF2, SPNOOP, SPNOOP, RESAMPLE2 , SPNOOP , SEGMENT2,
910912 SETBUFF2 , DUPLICATE2, DMEMMOVE2, LOADADPCM2, MIXER2, INTERLEAVE2, SPNOOP, SETLOOP2,
911913 SPNOOP, INTERL2 , ENVSETUP1, ENVMIXER2, LOADBUFF2, SAVEBUFF2, ENVSETUP2, SPNOOP,
2727 #include "hle.h"
2828 }
2929
30 static void SPNOOP () {
30 extern "C" void (*ABI3[])(void);
31
32 static void SPNOOP (void) {
3133 DebugMessage(M64MSG_ERROR, "Unknown/Unimplemented Audio Command %i in ABI 3", (int)(inst1 >> 24));
3234 }
3335
5355 extern u8 BufferSpace[0x10000];
5456
5557 /*
56 static void SETVOL3 () { // Swapped Rate_Left and Vol
58 static void SETVOL3 (void) { // Swapped Rate_Left and Vol
5759 u8 Flags = (u8)(inst1 >> 0x10);
5860 if (Flags & 0x4) { // 288
5961 if (Flags & 0x2) { // 290
7072 }
7173 }
7274 */
73 static void SETVOL3 () {
75 static void SETVOL3 (void) {
7476 u8 Flags = (u8)(inst1 >> 0x10);
7577 if (Flags & 0x4) { // 288
7678 if (Flags & 0x2) { // 290
8890 }
8991 }
9092
91 static void ENVMIXER3 () {
93 static void ENVMIXER3 (void) {
9294 u8 flags = (u8)((inst1 >> 16) & 0xff);
9395 u32 addy = (inst2 & 0xFFFFFF);
9496
246248 memcpy(rsp.RDRAM+addy, (u8 *)hleMixerWorkArea,80);
247249 }
248250 //*/
249 static void ENVMIXER3o () {
251 static void ENVMIXER3o (void) {
250252 u8 flags = (u8)((inst1 >> 16) & 0xff);
251253 u32 addy = (inst2 & 0xFFFFFF);// + SEGMENTS[(inst2>>24)&0xf];
252254 //static FILE *dfile = fopen ("d:\\envmix.txt", "wt");
403405 memcpy(rsp.RDRAM+addy, (u8 *)hleMixerWorkArea,80);
404406 }
405407 /*
406 static void ENVMIXER3 () { // Borrowed from RCP...
408 static void ENVMIXER3 (void) { // Borrowed from RCP...
407409 u8 flags = (u8)((inst1 >> 16) & 0xff);
408410 u32 addy = (inst2 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf];
409411
482484 }*/
483485
484486
485 static void CLEARBUFF3 () {
487 static void CLEARBUFF3 (void) {
486488 u16 addr = (u16)(inst1 & 0xffff);
487489 u16 count = (u16)(inst2 & 0xffff);
488490 memset(BufferSpace+addr+0x4f0, 0, count);
489491 }
490492
491 static void MIXER3 () { // Needs accuracy verification...
493 static void MIXER3 (void) { // Needs accuracy verification...
492494 u16 dmemin = (u16)(inst2 >> 0x10) + 0x4f0;
493495 u16 dmemout = (u16)(inst2 & 0xFFFF) + 0x4f0;
494496 //u8 flags = (u8)((inst1 >> 16) & 0xff);
508510 }
509511 }
510512
511 static void LOADBUFF3 () {
513 static void LOADBUFF3 (void) {
512514 u32 v0;
513515 u32 cnt = (((inst1 >> 0xC)+3)&0xFFC);
514516 v0 = (inst2 & 0xfffffc);
516518 memcpy (BufferSpace+src, rsp.RDRAM+v0, cnt);
517519 }
518520
519 static void SAVEBUFF3 () {
521 static void SAVEBUFF3 (void) {
520522 u32 v0;
521523 u32 cnt = (((inst1 >> 0xC)+3)&0xFFC);
522524 v0 = (inst2 & 0xfffffc);
524526 memcpy (rsp.RDRAM+v0, BufferSpace+src, cnt);
525527 }
526528
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
528530 u32 v0;
529531 v0 = (inst2 & 0xffffff);
530532 //memcpy (dmem+0x3f0, rsp.RDRAM+v0, inst1&0xffff);
546548 }
547549 }
548550
549 static void DMEMMOVE3 () { // Needs accuracy verification...
551 static void DMEMMOVE3 (void) { // Needs accuracy verification...
550552 u32 v0, v1;
551553 u32 cnt;
552554 v0 = (inst1 & 0xFFFF) + 0x4f0;
559561 }
560562 }
561563
562 static void SETLOOP3 () {
564 static void SETLOOP3 (void) {
563565 loopval = (inst2 & 0xffffff);
564566 }
565567
566 static void ADPCM3 () { // Verified to be 100% Accurate...
568 static void ADPCM3 (void) { // Verified to be 100% Accurate...
567569 unsigned char Flags=(u8)(inst2>>0x1c)&0xff;
568570 //unsigned short Gain=(u16)(inst1&0xffff);
569571 unsigned int Address=(inst1 & 0xffffff);// + SEGMENTS[(inst2>>24)&0xf];
819821 memcpy(&rsp.RDRAM[Address],out,32);
820822 }
821823
822 static void RESAMPLE3 () {
824 static void RESAMPLE3 (void) {
823825 unsigned char Flags=(u8)((inst2>>0x1e));
824826 unsigned int Pitch=((inst2>>0xe)&0xffff)<<1;
825827 u32 addy = (inst1 & 0xffffff);
917919 *(u16 *)(rsp.RDRAM+addy+10) = Accum;
918920 }
919921
920 static void INTERLEAVE3 () { // Needs accuracy verification...
922 static void INTERLEAVE3 (void) { // Needs accuracy verification...
921923 //u32 inL, inR;
922924 u16 *outbuff = (u16 *)(BufferSpace + 0x4f0);//(u16 *)(AudioOutBuffer+dmem);
923925 u16 *inSrcR;
950952 }
951953 }
952954
953 //static void UNKNOWN ();
955 //static void UNKNOWN (void);
954956 /*
955957 typedef struct {
956958 unsigned char sync;
976978 FILE *mp3dat;
977979 */
978980
979 static void WHATISTHIS () {
981 static void WHATISTHIS (void) {
980982 }
981983
982984 //static FILE *fp = fopen ("d:\\mp3info.txt", "wt");
983985 u32 setaddr;
984 static void MP3ADDY () {
986 static void MP3ADDY (void) {
985987 setaddr = (inst2 & 0xffffff);
986988 }
987989
988990 extern "C" {
989 void rsp_run();
991 void rsp_run(void);
990992 void mp3setup (unsigned int inst1, unsigned int inst2, unsigned int t8);
991993 }
992994
994996 extern "C" {
995997 extern char *pDMEM;
996998 }
997 void MP3 ();
999 void MP3 (void);
9981000 /*
9991001 {
10001002 // return;
10121014 memcpy (imem+0x238, rsp.RDRAM+((u32*)BufferSpace)[0x008/4], 0x9C0);
10131015 ((u32*)BufferSpace)[0xFF4/4] = setaddr;
10141016 pDMEM = (char *)BufferSpace;
1015 rsp_run ();
1017 rsp_run (void);
10161018 dmembase = ((u32*)BufferSpace)[0xFF8/4];
10171019 loopval = ((u32*)BufferSpace)[0xFFC/4];
10181020 //0x1A98 SW S1, 0x0FF4 (R0)
10431045 (integrated-services-digital-network) to be the future high-bandwidth pipe to the home.
10441046
10451047 */
1046 static void DISABLE () {
1048 static void DISABLE (void) {
10471049 //MessageBox (NULL, "Help", "ABI 3 Command 0", MB_OK);
10481050 //ChangeABI (5);
10491051 }
10501052
10511053
1052 void (*ABI3[0x20])() = {
1054 void (*ABI3[0x20])(void) = {
10531055 DISABLE , ADPCM3 , CLEARBUFF3, ENVMIXER3 , LOADBUFF3, RESAMPLE3 , SAVEBUFF3, MP3,
10541056 MP3ADDY, SETVOL3, DMEMMOVE3 , LOADADPCM3 , MIXER3 , INTERLEAVE3, WHATISTHIS , SETLOOP3,
10551057 SPNOOP , SPNOOP, SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP,
10561058 SPNOOP , SPNOOP, SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP , SPNOOP
10571059 };
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