| 
									
										
										
										
											2009-07-28 21:32:10 +00:00
										 |  |  | // Copyright (C) 2003 Dolphin Project.
 | 
					
						
							| 
									
										
										
										
											2009-07-06 02:10:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // This program is free software: you can redistribute it and/or modify
 | 
					
						
							|  |  |  | // it under the terms of the GNU General Public License as published by
 | 
					
						
							|  |  |  | // the Free Software Foundation, version 2.0.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful,
 | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					
						
							|  |  |  | // GNU General Public License 2.0 for more details.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // A copy of the GPL 2.0 should have been included with the program.
 | 
					
						
							|  |  |  | // If not, see http://www.gnu.org/licenses/
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Official SVN repository and contact information can be found at
 | 
					
						
							|  |  |  | // http://code.google.com/p/dolphin-emu/
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _DSPINTERPRETER_H
 | 
					
						
							|  |  |  | #define _DSPINTERPRETER_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "DSPTables.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define DSP_REG_MASK    0x1f
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace DSPInterpreter { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void Step(); | 
					
						
							|  |  |  | void Run(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-06 19:19:03 +00:00
										 |  |  | // See: DspIntBranch.cpp
 | 
					
						
							|  |  |  | void HandleLoop(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-06 02:10:26 +00:00
										 |  |  | // If these simply return the same number of cycles as was passed into them,
 | 
					
						
							|  |  |  | // chances are that the DSP is halted.
 | 
					
						
							|  |  |  | // The difference between them is that the debug one obeys breakpoints.
 | 
					
						
							|  |  |  | int RunCycles(int cycles); | 
					
						
							|  |  |  | int RunCyclesDebug(int cycles); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void Stop(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void WriteCR(u16 val); | 
					
						
							|  |  |  | u16  ReadCR(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-24 05:05:25 +00:00
										 |  |  | typedef void (*DSPInterpreterFunc)(const UDSPInstruction opc); | 
					
						
							| 
									
										
										
										
											2009-07-06 02:10:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // All the opcode functions.
 | 
					
						
							| 
									
										
										
										
											2010-03-24 05:05:25 +00:00
										 |  |  | void unknown(const UDSPInstruction opc); | 
					
						
							|  |  |  | void call(const UDSPInstruction opc); | 
					
						
							|  |  |  | void callr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void ifcc(const UDSPInstruction opc); | 
					
						
							|  |  |  | void jcc(const UDSPInstruction opc);	 | 
					
						
							|  |  |  | void jmprcc(const UDSPInstruction opc); | 
					
						
							|  |  |  | void ret(const UDSPInstruction opc);	 | 
					
						
							|  |  |  | void halt(const UDSPInstruction opc); | 
					
						
							|  |  |  | void loop(const UDSPInstruction opc); | 
					
						
							|  |  |  | void loopi(const UDSPInstruction opc); | 
					
						
							|  |  |  | void bloop(const UDSPInstruction opc); | 
					
						
							|  |  |  | void bloopi(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mrr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lrr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lrrd(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lrri(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lrrn(const UDSPInstruction opc); | 
					
						
							|  |  |  | void srr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void srrd(const UDSPInstruction opc); | 
					
						
							|  |  |  | void srri(const UDSPInstruction opc); | 
					
						
							|  |  |  | void srrn(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lri(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lris(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void sr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void si(const UDSPInstruction opc); | 
					
						
							|  |  |  | void tstaxh(const UDSPInstruction opc); | 
					
						
							|  |  |  | void clr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void clrl(const UDSPInstruction opc); | 
					
						
							|  |  |  | void clrp(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulc(const UDSPInstruction opc); | 
					
						
							|  |  |  | void cmpar(const UDSPInstruction opc); | 
					
						
							|  |  |  | void cmp(const UDSPInstruction opc); | 
					
						
							|  |  |  | void tst(const UDSPInstruction opc); | 
					
						
							|  |  |  | void addaxl(const UDSPInstruction opc); | 
					
						
							|  |  |  | void addarn(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulcac(const UDSPInstruction opc); | 
					
						
							|  |  |  | void movr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void movax(const UDSPInstruction opc); | 
					
						
							|  |  |  | void xorr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void andr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void orr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void andc(const UDSPInstruction opc); | 
					
						
							|  |  |  | void orc(const UDSPInstruction opc); | 
					
						
							|  |  |  | void xorc(const UDSPInstruction opc); | 
					
						
							|  |  |  | void notc(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lsrnrx(const UDSPInstruction opc); | 
					
						
							|  |  |  | void asrnrx(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lsrnr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void asrnr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void add(const UDSPInstruction opc); | 
					
						
							|  |  |  | void addp(const UDSPInstruction opc); | 
					
						
							|  |  |  | void cmpis(const UDSPInstruction opc); | 
					
						
							|  |  |  | void addpaxz(const UDSPInstruction opc); | 
					
						
							|  |  |  | void movpz(const UDSPInstruction opc); | 
					
						
							|  |  |  | void decm(const UDSPInstruction opc); | 
					
						
							|  |  |  | void dec(const UDSPInstruction opc); | 
					
						
							|  |  |  | void inc(const UDSPInstruction opc); | 
					
						
							|  |  |  | void incm(const UDSPInstruction opc); | 
					
						
							|  |  |  | void neg(const UDSPInstruction opc); | 
					
						
							|  |  |  | void addax(const UDSPInstruction opc); | 
					
						
							|  |  |  | void addr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void subr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void subp(const UDSPInstruction opc); | 
					
						
							|  |  |  | void subax(const UDSPInstruction opc); | 
					
						
							|  |  |  | void addis(const UDSPInstruction opc); | 
					
						
							|  |  |  | void addi(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lsl16(const UDSPInstruction opc); | 
					
						
							|  |  |  | void madd(const UDSPInstruction opc); | 
					
						
							|  |  |  | void msub(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lsr16(const UDSPInstruction opc); | 
					
						
							|  |  |  | void asr16(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lsl(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lsr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void asl(const UDSPInstruction opc); | 
					
						
							|  |  |  | void asr(const UDSPInstruction opc);   | 
					
						
							|  |  |  | void lsrn(const UDSPInstruction opc); | 
					
						
							|  |  |  | void asrn(const UDSPInstruction opc); | 
					
						
							|  |  |  | void dar(const UDSPInstruction opc); | 
					
						
							|  |  |  | void iar(const UDSPInstruction opc); | 
					
						
							|  |  |  | void subarn(const UDSPInstruction opc); | 
					
						
							|  |  |  | void sbclr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void sbset(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mov(const UDSPInstruction opc); | 
					
						
							|  |  |  | void movp(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mul(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulac(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulmv(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulmvz(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulx(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulxac(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulxmv(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulxmvz(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulcmvz(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulcmv(const UDSPInstruction opc); | 
					
						
							|  |  |  | void movnp(const UDSPInstruction opc); | 
					
						
							|  |  |  | void sub(const UDSPInstruction opc); | 
					
						
							|  |  |  | void maddx(const UDSPInstruction opc); | 
					
						
							|  |  |  | void msubx(const UDSPInstruction opc); | 
					
						
							|  |  |  | void maddc(const UDSPInstruction opc); | 
					
						
							|  |  |  | void msubc(const UDSPInstruction opc); | 
					
						
							|  |  |  | void srs(const UDSPInstruction opc); | 
					
						
							|  |  |  | void lrs(const UDSPInstruction opc); | 
					
						
							|  |  |  | void nx(const UDSPInstruction opc); | 
					
						
							|  |  |  | void cmpi(const UDSPInstruction opc); | 
					
						
							|  |  |  | void rti(const UDSPInstruction opc); | 
					
						
							|  |  |  | void ilrr(const UDSPInstruction opc); | 
					
						
							|  |  |  | void ilrrd(const UDSPInstruction opc); | 
					
						
							|  |  |  | void ilrri(const UDSPInstruction opc); | 
					
						
							|  |  |  | void ilrrn(const UDSPInstruction opc); | 
					
						
							|  |  |  | void andcf(const UDSPInstruction opc); | 
					
						
							|  |  |  | void andf(const UDSPInstruction opc); | 
					
						
							|  |  |  | void xori(const UDSPInstruction opc); | 
					
						
							|  |  |  | void andi(const UDSPInstruction opc); | 
					
						
							|  |  |  | void ori(const UDSPInstruction opc); | 
					
						
							|  |  |  | void srbith(const UDSPInstruction opc); | 
					
						
							|  |  |  | void mulaxh(const UDSPInstruction opc); | 
					
						
							|  |  |  | void tstprod(const UDSPInstruction opc); | 
					
						
							|  |  |  | void abs(const UDSPInstruction opc); | 
					
						
							| 
									
										
										
										
											2009-07-06 02:10:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | }  // namespace
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // _DSPINTERPRETER_H
 |