/***********************************************************************************1Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.23(c) Copyright 1996 - 2002 Gary Henderson ([email protected]),4Jerremy Koot ([email protected])56(c) Copyright 2002 - 2004 Matthew Kendora78(c) Copyright 2002 - 2005 Peter Bortas ([email protected])910(c) Copyright 2004 - 2005 Joel Yliluoma (http://iki.fi/bisqwit/)1112(c) Copyright 2001 - 2006 John Weidman ([email protected])1314(c) Copyright 2002 - 2006 funkyass ([email protected]),15Kris Bleakley ([email protected])1617(c) Copyright 2002 - 2010 Brad Jorsch ([email protected]),18Nach ([email protected]),1920(c) Copyright 2002 - 2011 zones ([email protected])2122(c) Copyright 2006 - 2007 nitsuja2324(c) Copyright 2009 - 2011 BearOso,25OV2262728BS-X C emulator code29(c) Copyright 2005 - 2006 Dreamer Nom,30zones3132C4 x86 assembler and some C emulation code33(c) Copyright 2000 - 2003 _Demo_ ([email protected]),34Nach,35zsKnight ([email protected])3637C4 C++ code38(c) Copyright 2003 - 2006 Brad Jorsch,39Nach4041DSP-1 emulator code42(c) Copyright 1998 - 2006 _Demo_,43Andreas Naive ([email protected]),44Gary Henderson,45Ivar ([email protected]),46John Weidman,47Kris Bleakley,48Matthew Kendora,49Nach,50neviksti ([email protected])5152DSP-2 emulator code53(c) Copyright 2003 John Weidman,54Kris Bleakley,55Lord Nightmare ([email protected]),56Matthew Kendora,57neviksti5859DSP-3 emulator code60(c) Copyright 2003 - 2006 John Weidman,61Kris Bleakley,62Lancer,63z80 gaiden6465DSP-4 emulator code66(c) Copyright 2004 - 2006 Dreamer Nom,67John Weidman,68Kris Bleakley,69Nach,70z80 gaiden7172OBC1 emulator code73(c) Copyright 2001 - 2004 zsKnight,74pagefault ([email protected]),75Kris Bleakley76Ported from x86 assembler to C by sanmaiwashi7778SPC7110 and RTC C++ emulator code used in 1.39-1.5179(c) Copyright 2002 Matthew Kendora with research by80zsKnight,81John Weidman,82Dark Force8384SPC7110 and RTC C++ emulator code used in 1.52+85(c) Copyright 2009 byuu,86neviksti8788S-DD1 C emulator code89(c) Copyright 2003 Brad Jorsch with research by90Andreas Naive,91John Weidman9293S-RTC C emulator code94(c) Copyright 2001 - 2006 byuu,95John Weidman9697ST010 C++ emulator code98(c) Copyright 2003 Feather,99John Weidman,100Kris Bleakley,101Matthew Kendora102103Super FX x86 assembler emulator code104(c) Copyright 1998 - 2003 _Demo_,105pagefault,106zsKnight107108Super FX C emulator code109(c) Copyright 1997 - 1999 Ivar,110Gary Henderson,111John Weidman112113Sound emulator code used in 1.5-1.51114(c) Copyright 1998 - 2003 Brad Martin115(c) Copyright 1998 - 2006 Charles Bilyue'116117Sound emulator code used in 1.52+118(c) Copyright 2004 - 2007 Shay Green ([email protected])119120SH assembler code partly based on x86 assembler code121(c) Copyright 2002 - 2004 Marcus Comstedt ([email protected])1221232xSaI filter124(c) Copyright 1999 - 2001 Derek Liauw Kie Fa125126HQ2x, HQ3x, HQ4x filters127(c) Copyright 2003 Maxim Stepin ([email protected])128129NTSC filter130(c) Copyright 2006 - 2007 Shay Green131132GTK+ GUI code133(c) Copyright 2004 - 2011 BearOso134135Win32 GUI code136(c) Copyright 2003 - 2006 blip,137funkyass,138Matthew Kendora,139Nach,140nitsuja141(c) Copyright 2009 - 2011 OV2142143Mac OS GUI code144(c) Copyright 1998 - 2001 John Stiles145(c) Copyright 2001 - 2011 zones146147148Specific ports contains the works of other authors. See headers in149individual files.150151152Snes9x homepage: http://www.snes9x.com/153154Permission to use, copy, modify and/or distribute Snes9x in both binary155and source form, for non-commercial purposes, is hereby granted without156fee, providing that this license information and copyright notice appear157with all copies and any derived work.158159This software is provided 'as-is', without any express or implied160warranty. In no event shall the authors be held liable for any damages161arising from the use of this software or it's derivatives.162163Snes9x is freeware for PERSONAL USE only. Commercial users should164seek permission of the copyright holders first. Commercial use includes,165but is not limited to, charging money for Snes9x or software derived from166Snes9x, including Snes9x or derivatives in commercial game bundles, and/or167using Snes9x as a promotion for your commercial product.168169The copyright holders request that bug fixes and improvements to the code170should be forwarded to them so everyone can benefit from the modifications171in future versions.172173Super NES and Super Nintendo Entertainment System are trademarks of174Nintendo Co., Limited and its subsidiary companies.175***********************************************************************************/176177178#ifndef _DSP1_H_179#define _DSP1_H_180181enum182{183M_DSP1_LOROM_S,184M_DSP1_LOROM_L,185M_DSP1_HIROM,186M_DSP2_LOROM,187M_DSP3_LOROM,188M_DSP4_LOROM189};190191struct SDSP0192{193uint32 maptype;194uint32 boundary;195};196197struct SDSP1198{199bool8 waiting4command;200bool8 first_parameter;201uint8 command;202uint32 in_count;203uint32 in_index;204uint32 out_count;205uint32 out_index;206uint8 parameters[512];207uint8 output[512];208209int16 CentreX;210int16 CentreY;211int16 VOffset;212213int16 VPlane_C;214int16 VPlane_E;215216// Azimuth and Zenith angles217int16 SinAas;218int16 CosAas;219int16 SinAzs;220int16 CosAzs;221222// Clipped Zenith angle223int16 SinAZS;224int16 CosAZS;225int16 SecAZS_C1;226int16 SecAZS_E1;227int16 SecAZS_C2;228int16 SecAZS_E2;229230int16 Nx;231int16 Ny;232int16 Nz;233int16 Gx;234int16 Gy;235int16 Gz;236int16 C_Les;237int16 E_Les;238int16 G_Les;239240int16 matrixA[3][3];241int16 matrixB[3][3];242int16 matrixC[3][3];243244int16 Op00Multiplicand;245int16 Op00Multiplier;246int16 Op00Result;247248int16 Op20Multiplicand;249int16 Op20Multiplier;250int16 Op20Result;251252int16 Op10Coefficient;253int16 Op10Exponent;254int16 Op10CoefficientR;255int16 Op10ExponentR;256257int16 Op04Angle;258int16 Op04Radius;259int16 Op04Sin;260int16 Op04Cos;261262int16 Op0CA;263int16 Op0CX1;264int16 Op0CY1;265int16 Op0CX2;266int16 Op0CY2;267268int16 Op02FX;269int16 Op02FY;270int16 Op02FZ;271int16 Op02LFE;272int16 Op02LES;273int16 Op02AAS;274int16 Op02AZS;275int16 Op02VOF;276int16 Op02VVA;277int16 Op02CX;278int16 Op02CY;279280int16 Op0AVS;281int16 Op0AA;282int16 Op0AB;283int16 Op0AC;284int16 Op0AD;285286int16 Op06X;287int16 Op06Y;288int16 Op06Z;289int16 Op06H;290int16 Op06V;291int16 Op06M;292293int16 Op01m;294int16 Op01Zr;295int16 Op01Xr;296int16 Op01Yr;297298int16 Op11m;299int16 Op11Zr;300int16 Op11Xr;301int16 Op11Yr;302303int16 Op21m;304int16 Op21Zr;305int16 Op21Xr;306int16 Op21Yr;307308int16 Op0DX;309int16 Op0DY;310int16 Op0DZ;311int16 Op0DF;312int16 Op0DL;313int16 Op0DU;314315int16 Op1DX;316int16 Op1DY;317int16 Op1DZ;318int16 Op1DF;319int16 Op1DL;320int16 Op1DU;321322int16 Op2DX;323int16 Op2DY;324int16 Op2DZ;325int16 Op2DF;326int16 Op2DL;327int16 Op2DU;328329int16 Op03F;330int16 Op03L;331int16 Op03U;332int16 Op03X;333int16 Op03Y;334int16 Op03Z;335336int16 Op13F;337int16 Op13L;338int16 Op13U;339int16 Op13X;340int16 Op13Y;341int16 Op13Z;342343int16 Op23F;344int16 Op23L;345int16 Op23U;346int16 Op23X;347int16 Op23Y;348int16 Op23Z;349350int16 Op14Zr;351int16 Op14Xr;352int16 Op14Yr;353int16 Op14U;354int16 Op14F;355int16 Op14L;356int16 Op14Zrr;357int16 Op14Xrr;358int16 Op14Yrr;359360int16 Op0EH;361int16 Op0EV;362int16 Op0EX;363int16 Op0EY;364365int16 Op0BX;366int16 Op0BY;367int16 Op0BZ;368int16 Op0BS;369370int16 Op1BX;371int16 Op1BY;372int16 Op1BZ;373int16 Op1BS;374375int16 Op2BX;376int16 Op2BY;377int16 Op2BZ;378int16 Op2BS;379380int16 Op28X;381int16 Op28Y;382int16 Op28Z;383int16 Op28R;384385int16 Op1CX;386int16 Op1CY;387int16 Op1CZ;388int16 Op1CXBR;389int16 Op1CYBR;390int16 Op1CZBR;391int16 Op1CXAR;392int16 Op1CYAR;393int16 Op1CZAR;394int16 Op1CX1;395int16 Op1CY1;396int16 Op1CZ1;397int16 Op1CX2;398int16 Op1CY2;399int16 Op1CZ2;400401uint16 Op0FRamsize;402uint16 Op0FPass;403404int16 Op2FUnknown;405int16 Op2FSize;406407int16 Op08X;408int16 Op08Y;409int16 Op08Z;410int16 Op08Ll;411int16 Op08Lh;412413int16 Op18X;414int16 Op18Y;415int16 Op18Z;416int16 Op18R;417int16 Op18D;418419int16 Op38X;420int16 Op38Y;421int16 Op38Z;422int16 Op38R;423int16 Op38D;424};425426struct SDSP2427{428bool8 waiting4command;429uint8 command;430uint32 in_count;431uint32 in_index;432uint32 out_count;433uint32 out_index;434uint8 parameters[512];435uint8 output[512];436437bool8 Op05HasLen;438int32 Op05Len;439uint8 Op05Transparent;440441bool8 Op06HasLen;442int32 Op06Len;443444uint16 Op09Word1;445uint16 Op09Word2;446447bool8 Op0DHasLen;448int32 Op0DOutLen;449int32 Op0DInLen;450};451452struct SDSP3453{454uint16 DR;455uint16 SR;456uint16 MemoryIndex;457458int16 WinLo;459int16 WinHi;460int16 AddLo;461int16 AddHi;462463uint16 Codewords;464uint16 Outwords;465uint16 Symbol;466uint16 BitCount;467uint16 Index;468uint16 Codes[512];469uint16 BitsLeft;470uint16 ReqBits;471uint16 ReqData;472uint16 BitCommand;473uint8 BaseLength;474uint16 BaseCodes;475uint16 BaseCode;476uint8 CodeLengths[8];477uint16 CodeOffsets[8];478uint16 LZCode;479uint8 LZLength;480481uint16 X;482uint16 Y;483484uint8 Bitmap[8];485uint8 Bitplane[8];486uint16 BMIndex;487uint16 BPIndex;488uint16 Count;489490int16 op3e_x;491int16 op3e_y;492493int16 op1e_terrain[0x2000];494int16 op1e_cost[0x2000];495int16 op1e_weight[0x2000];496497int16 op1e_cell;498int16 op1e_turn;499int16 op1e_search;500501int16 op1e_x;502int16 op1e_y;503504int16 op1e_min_radius;505int16 op1e_max_radius;506507int16 op1e_max_search_radius;508int16 op1e_max_path_radius;509510int16 op1e_lcv_radius;511int16 op1e_lcv_steps;512int16 op1e_lcv_turns;513};514515struct SDSP4516{517bool8 waiting4command;518bool8 half_command;519uint16 command;520uint32 in_count;521uint32 in_index;522uint32 out_count;523uint32 out_index;524uint8 parameters[512];525uint8 output[512];526uint8 byte;527uint16 address;528529// op control530int8 Logic; // controls op flow531532// projection format533int16 lcv; // loop-control variable534int16 distance; // z-position into virtual world535int16 raster; // current raster line536int16 segments; // number of raster lines drawn537538// 1.15.16 or 1.15.0 [sign, integer, fraction]539int32 world_x; // line of x-projection in world540int32 world_y; // line of y-projection in world541int32 world_dx; // projection line x-delta542int32 world_dy; // projection line y-delta543int16 world_ddx; // x-delta increment544int16 world_ddy; // y-delta increment545int32 world_xenv; // world x-shaping factor546int16 world_yofs; // world y-vertical scroll547int16 view_x1; // current viewer-x548int16 view_y1; // current viewer-y549int16 view_x2; // future viewer-x550int16 view_y2; // future viewer-y551int16 view_dx; // view x-delta factor552int16 view_dy; // view y-delta factor553int16 view_xofs1; // current viewer x-vertical scroll554int16 view_yofs1; // current viewer y-vertical scroll555int16 view_xofs2; // future viewer x-vertical scroll556int16 view_yofs2; // future viewer y-vertical scroll557int16 view_yofsenv; // y-scroll shaping factor558int16 view_turnoff_x; // road turnoff data559int16 view_turnoff_dx; // road turnoff delta factor560561// drawing area562int16 viewport_cx; // x-center of viewport window563int16 viewport_cy; // y-center of render window564int16 viewport_left; // x-left of viewport565int16 viewport_right; // x-right of viewport566int16 viewport_top; // y-top of viewport567int16 viewport_bottom; // y-bottom of viewport568569// sprite structure570int16 sprite_x; // projected x-pos of sprite571int16 sprite_y; // projected y-pos of sprite572int16 sprite_attr; // obj attributes573bool8 sprite_size; // sprite size: 8x8 or 16x16574int16 sprite_clipy; // visible line to clip pixels off575int16 sprite_count;576577// generic projection variables designed for two solid polygons + two polygon sides578int16 poly_clipLf[2][2]; // left clip boundary579int16 poly_clipRt[2][2]; // right clip boundary580int16 poly_ptr[2][2]; // HDMA structure pointers581int16 poly_raster[2][2]; // current raster line below horizon582int16 poly_top[2][2]; // top clip boundary583int16 poly_bottom[2][2]; // bottom clip boundary584int16 poly_cx[2][2]; // center for left/right points585int16 poly_start[2]; // current projection points586int16 poly_plane[2]; // previous z-plane distance587588// OAM589int16 OAM_attr[16]; // OAM (size, MSB) data590int16 OAM_index; // index into OAM table591int16 OAM_bits; // offset into OAM table592int16 OAM_RowMax; // maximum number of tiles per 8 aligned pixels (row)593int16 OAM_Row[32]; // current number of tiles per row594};595596extern struct SDSP0 DSP0;597extern struct SDSP1 DSP1;598extern struct SDSP2 DSP2;599extern struct SDSP3 DSP3;600extern struct SDSP4 DSP4;601602uint8 S9xGetDSP (uint16);603void S9xSetDSP (uint8, uint16);604void S9xResetDSP (void);605uint8 DSP1GetByte (uint16);606void DSP1SetByte (uint8, uint16);607uint8 DSP2GetByte (uint16);608void DSP2SetByte (uint8, uint16);609uint8 DSP3GetByte (uint16);610void DSP3SetByte (uint8, uint16);611uint8 DSP4GetByte (uint16);612void DSP4SetByte (uint8, uint16);613void DSP3_Reset (void);614615extern uint8 (*GetDSP) (uint16);616extern void (*SetDSP) (uint8, uint16);617618#endif619620621