aboutsummaryrefslogtreecommitdiff
path: root/source/dsp1.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/dsp1.c')
-rw-r--r--source/dsp1.c143
1 files changed, 1 insertions, 142 deletions
diff --git a/source/dsp1.c b/source/dsp1.c
index 9c62f50..cccae23 100644
--- a/source/dsp1.c
+++ b/source/dsp1.c
@@ -1,93 +1,5 @@
-/*******************************************************************************
- Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
+#include "../copyright"
- (c) Copyright 1996 - 2002 Gary Henderson (gary.henderson@ntlworld.com) and
- Jerremy Koot (jkoot@snes9x.com)
-
- (c) Copyright 2001 - 2004 John Weidman (jweidman@slip.net)
-
- (c) Copyright 2002 - 2004 Brad Jorsch (anomie@users.sourceforge.net),
- funkyass (funkyass@spam.shaw.ca),
- Joel Yliluoma (http://iki.fi/bisqwit/)
- Kris Bleakley (codeviolation@hotmail.com),
- Matthew Kendora,
- Nach (n-a-c-h@users.sourceforge.net),
- Peter Bortas (peter@bortas.org) and
- zones (kasumitokoduck@yahoo.com)
-
- C4 x86 assembler and some C emulation code
- (c) Copyright 2000 - 2003 zsKnight (zsknight@zsnes.com),
- _Demo_ (_demo_@zsnes.com), and Nach
-
- C4 C++ code
- (c) Copyright 2003 Brad Jorsch
-
- DSP-1 emulator code
- (c) Copyright 1998 - 2004 Ivar (ivar@snes9x.com), _Demo_, Gary Henderson,
- John Weidman, neviksti (neviksti@hotmail.com),
- Kris Bleakley, Andreas Naive
-
- DSP-2 emulator code
- (c) Copyright 2003 Kris Bleakley, John Weidman, neviksti, Matthew Kendora, and
- Lord Nightmare (lord_nightmare@users.sourceforge.net
-
- OBC1 emulator code
- (c) Copyright 2001 - 2004 zsKnight, pagefault (pagefault@zsnes.com) and
- Kris Bleakley
- Ported from x86 assembler to C by sanmaiwashi
-
- SPC7110 and RTC C++ emulator code
- (c) Copyright 2002 Matthew Kendora with research by
- zsKnight, John Weidman, and Dark Force
-
- S-DD1 C emulator code
- (c) Copyright 2003 Brad Jorsch with research by
- Andreas Naive and John Weidman
-
- S-RTC C emulator code
- (c) Copyright 2001 John Weidman
-
- ST010 C++ emulator code
- (c) Copyright 2003 Feather, Kris Bleakley, John Weidman and Matthew Kendora
-
- Super FX x86 assembler emulator code
- (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault
-
- Super FX C emulator code
- (c) Copyright 1997 - 1999 Ivar, Gary Henderson and John Weidman
-
-
- SH assembler code partly based on x86 assembler code
- (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se)
-
- (c) Copyright 2014 - 2016 Daniel De Matteis. (UNDER NO CIRCUMSTANCE
- WILL COMMERCIAL RIGHTS EVER BE APPROPRIATED TO ANY PARTY)
-
- Specific ports contains the works of other authors. See headers in
- individual files.
-
- Snes9x homepage: http://www.snes9x.com
-
- Permission to use, copy, modify and distribute Snes9x in both binary and
- source form, for non-commercial purposes, is hereby granted without fee,
- providing that this license information and copyright notice appear with
- all copies and any derived work.
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event shall the authors be held liable for any damages
- arising from the use of this software.
-
- Snes9x is freeware for PERSONAL USE only. Commercial users should
- seek permission of the copyright holders first. Commercial use includes
- charging money for Snes9x or software derived from Snes9x.
-
- The copyright holders request that bug fixes and improvements to the code
- should be forwarded to them so everyone can benefit from the modifications
- in future versions.
-
- Super NES and Super Nintendo Entertainment System are trademarks of
- Nintendo Co., Limited and its subsidiary companies.
-*******************************************************************************/
#include "snes9x.h"
#include "dsp1.h"
#include "missing.h"
@@ -128,22 +40,18 @@ uint8_t S9xGetDSP(uint16_t address)
uint8_t t;
t = (*GetDSP)(address);
- //DSP1GetByte(address);
return (t);
}
void S9xSetDSP(uint8_t byte, uint16_t address)
{
(*SetDSP)(byte, address);
- //DSP1SetByte(byte, address);
}
void DSP1SetByte(uint8_t byte, uint16_t address)
{
if ((address & 0xf000) == 0x6000 || (address & 0x7fff) < 0x4000)
{
- // if ((address & 1) == 0)
- // {
if ((DSP1.command == 0x0A || DSP1.command == 0x1A) && DSP1.out_count != 0)
{
DSP1.out_count--;
@@ -156,7 +64,6 @@ void DSP1SetByte(uint8_t byte, uint16_t address)
DSP1.in_index = 0;
DSP1.waiting4command = false;
DSP1.first_parameter = true;
- // printf("Op%02X\n",byte);
// Mario Kart uses 0x00, 0x02, 0x06, 0x0c, 0x28, 0x0a
switch (byte)
{
@@ -288,9 +195,7 @@ void DSP1SetByte(uint8_t byte, uint16_t address)
case 0x1f:
DSP1.in_count = 1;
break;
- // case 0x80: DSP1.in_count = 2; break;
default:
- //printf("Op%02X\n",byte);
case 0x80:
DSP1.in_count = 0;
DSP1.waiting4command = true;
@@ -316,14 +221,10 @@ void DSP1SetByte(uint8_t byte, uint16_t address)
&& DSP1.in_index == 0)))
{
}
- // else if (DSP1.first_parameter)
- // {
- // }
else
{
if (DSP1.in_count)
{
- //DSP1.parameters [DSP1.in_index] |= (byte << 8);
if (--DSP1.in_count == 0)
{
// Actually execute the command
@@ -413,7 +314,6 @@ void DSP1SetByte(uint8_t byte, uint16_t address)
break;
case 0x38: // Range
-
Op38X = (int16_t)(DSP1.parameters [0] | (DSP1.parameters[1] << 8));
Op38Y = (int16_t)(DSP1.parameters [2] | (DSP1.parameters[3] << 8));
Op38Z = (int16_t)(DSP1.parameters [4] | (DSP1.parameters[5] << 8));
@@ -782,16 +682,11 @@ uint8_t DSP1GetByte(uint16_t address)
{
uint8_t t;
if ((address & 0xf000) == 0x6000 ||
- // (address >= 0x8000 && address < 0xc000))
(address & 0x7fff) < 0x4000)
{
if (DSP1.out_count)
{
- //if ((address & 1) == 0)
t = (uint8_t) DSP1.output [DSP1.out_index];
- //else
- //{
- // t = (uint8_t) (DSP1.output [DSP1.out_index] >> 8);
DSP1.out_index++;
if (--DSP1.out_count == 0)
{
@@ -818,15 +713,10 @@ uint8_t DSP1GetByte(uint16_t address)
}
}
DSP1.waiting4command = true;
- //}
}
else
{
- // Top Gear 3000 requires this value....
- // if(4==Settings.DSPVersion)
t = 0xff;
- //Ballz3d requires this one:
- // else t = 0x00;
}
}
else t = 0x80;
@@ -843,8 +733,6 @@ void DSP2SetByte(uint8_t byte, uint16_t address)
DSP1.command = byte;
DSP1.in_index = 0;
DSP1.waiting4command = false;
- // DSP1.first_parameter = true;
- // printf("Op%02X\n",byte);
switch (byte)
{
case 0x01:
@@ -875,13 +763,11 @@ void DSP2SetByte(uint8_t byte, uint16_t address)
else
{
DSP1.parameters [DSP1.in_index] = byte;
- // DSP1.first_parameter = false;
DSP1.in_index++;
}
if (DSP1.in_count == DSP1.in_index)
{
- //DSP1.parameters [DSP1.in_index] |= (byte << 8);
// Actually execute the command
DSP1.waiting4command = true;
DSP1.out_index = 0;
@@ -965,7 +851,6 @@ void DSP2SetByte(uint8_t byte, uint16_t address)
case 0x03:
DSP2Op05Transparent = DSP1.parameters[0];
- //DSP2Op03();
break;
case 0x0f:
default:
@@ -997,7 +882,6 @@ uint8_t DSP2GetByte(uint16_t address)
//Disable non-working chips?
#ifdef DSP_DUMMY_LOOPS
-//static const uint16_t DSP1ROM[1024] from SNES9X v1.53
uint16_t Dsp3Rom[1024] =
{
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -1141,8 +1025,6 @@ void DSP3SetByte(uint8_t byte, uint16_t address)
DSP1.command = byte;
DSP1.in_index = 0;
DSP1.waiting4command = false;
- // DSP1.first_parameter = true;
- // printf("Op%02X\n",byte);
switch (byte)
{
case 0x2F:
@@ -1158,20 +1040,17 @@ void DSP3SetByte(uint8_t byte, uint16_t address)
DSP1.in_count = 4;
break;
default:
- // printf("Op%02X\n",byte);
break;
}
}
else
{
DSP1.parameters [DSP1.in_index] = byte;
- // DSP1.first_parameter = false;
DSP1.in_index++;
}
if (DSP1.in_count == DSP1.in_index)
{
- //DSP1.parameters [DSP1.in_index] |= (byte << 8);
// Actually execute the command
DSP1.waiting4command = true;
DSP1.out_index = 0;
@@ -1221,7 +1100,6 @@ uint8_t DSP3GetByte(uint16_t address)
t = (uint8_t)Dsp3Rom[DSP1.out_index >> 1];
else
t = Dsp3Rom[DSP1.out_index >> 1] >> 8;
- // t=Dsp3Rom[DSP1.out_index];
DSP1.out_index++;
}
else
@@ -1239,18 +1117,6 @@ uint8_t DSP3GetByte(uint16_t address)
else
{
t = 0x80;
- /* if(DSP1.command=0x38&&DSP1.out_count==0)
- {
- t=0xC0;
- static int Op38c;
- if(Op38c==14)
- {
- Op38c=0;
- t=0x80;
- DSP1.in_count=4;
- }
- Op38c++;
- }*/
}
return t;
}
@@ -1301,7 +1167,6 @@ void DSP4SetByte(uint8_t byte, uint16_t address)
DSP4.command |= (byte << 8);
DSP4.in_index = 0;
DSP4.waiting4command = false;
- // DSP4.first_parameter = true;
DSP4.half_command = 0;
DSP4.out_count = 0;
DSP4.out_index = 0;
@@ -1350,7 +1215,6 @@ void DSP4SetByte(uint8_t byte, uint16_t address)
break;
default:
DSP4.waiting4command = true;
- //printf("(line %d) Unknown Op%02X\n",line,DSP4.command);
break;
}
}
@@ -1363,13 +1227,11 @@ void DSP4SetByte(uint8_t byte, uint16_t address)
else
{
DSP4.parameters [DSP4.in_index] = byte;
- // DSP4.first_parameter = false;
DSP4.in_index++;
}
if (!DSP4.waiting4command && DSP4.in_count == DSP4.in_index)
{
- //DSP4.parameters [DSP4.in_index] |= (byte << 8);
// Actually execute the command
DSP4.waiting4command = true;
DSP4.out_index = 0;
@@ -1476,9 +1338,6 @@ void DSP4SetByte(uint8_t byte, uint16_t address)
// unknown
case 0x000A:
{
- int16_t in1a = DSP4_READ_WORD(0);
- int16_t in2a = DSP4_READ_WORD(2);
- int16_t in3a = DSP4_READ_WORD(4);
int16_t out1a, out2a;
out1a = (int16_t)0xff40;