Arachnoid GLESv1.1 plugin. Compile and run (a bit glitchy and no frameskip) on the...
[mupen64plus-pandora.git] / source / mupen64plus-video-arachnoid / src / ucodes / UCode0.h
CommitLineData
22726e4d 1/******************************************************************************
2 * Arachnoid Graphics Plugin for Mupen64Plus
3 * http://bitbucket.org/wahrhaft/mupen64plus-video-arachnoid/
4 *
5 * Copyright (C) 2007 Kristofer Karlsson, Rickard Niklasson
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 *****************************************************************************/
21
22#ifndef UCODE_0_H_
23#define UCODE_0_H_
24
25//Includes
26#include "UCodeDefs.h"
27
28//Forward declaration
29class GBI;
30class RSP;
31class RDP;
32class Memory;
33class DisplayListParser;
34
35//Definitions
36#define F3D_MTX_STACKSIZE 10
37
38#define F3D_MTX_MODELVIEW 0x00
39#define F3D_MTX_PROJECTION 0x01
40#define F3D_MTX_MUL 0x00
41#define F3D_MTX_LOAD 0x02
42#define F3D_MTX_NOPUSH 0x00
43#define F3D_MTX_PUSH 0x04
44
45#define F3D_TEXTURE_ENABLE 0x00000002
46#define F3D_SHADING_SMOOTH 0x00000200
47#define F3D_CULL_FRONT 0x00001000
48#define F3D_CULL_BACK 0x00002000
49#define F3D_CULL_BOTH 0x00003000
50#define F3D_CLIPPING 0x00000000
51
52#define F3D_MV_VIEWPORT 0x80
53
54#define F3D_MWO_aLIGHT_1 0x00
55#define F3D_MWO_bLIGHT_1 0x04
56#define F3D_MWO_aLIGHT_2 0x20
57#define F3D_MWO_bLIGHT_2 0x24
58#define F3D_MWO_aLIGHT_3 0x40
59#define F3D_MWO_bLIGHT_3 0x44
60#define F3D_MWO_aLIGHT_4 0x60
61#define F3D_MWO_bLIGHT_4 0x64
62#define F3D_MWO_aLIGHT_5 0x80
63#define F3D_MWO_bLIGHT_5 0x84
64#define F3D_MWO_aLIGHT_6 0xa0
65#define F3D_MWO_bLIGHT_6 0xa4
66#define F3D_MWO_aLIGHT_7 0xc0
67#define F3D_MWO_bLIGHT_7 0xc4
68#define F3D_MWO_aLIGHT_8 0xe0
69#define F3D_MWO_bLIGHT_8 0xe4
70
71// FAST3D commands
72#define F3D_SPNOOP 0x00
73#define F3D_MTX 0x01
74#define F3D_RESERVED0 0x02
75#define F3D_MOVEMEM 0x03
76#define F3D_VTX 0x04
77#define F3D_RESERVED1 0x05
78#define F3D_DL 0x06
79#define F3D_RESERVED2 0x07
80#define F3D_RESERVED3 0x08
81#define F3D_SPRITE2D_BASE 0x09
82
83#define F3D_TRI1 0xBF
84#define F3D_CULLDL 0xBE
85#define F3D_POPMTX 0xBD
86#define F3D_MOVEWORD 0xBC
87#define F3D_TEXTURE 0xBB
88#define F3D_SETOTHERMODE_H 0xBA
89#define F3D_SETOTHERMODE_L 0xB9
90#define F3D_ENDDL 0xB8
91#define F3D_SETGEOMETRYMODE 0xB7
92#define F3D_CLEARGEOMETRYMODE 0xB6
93//#define F3D_LINE3D 0xB5 // Only used in Line3D
94#define F3D_QUAD 0xB5
95#define F3D_RDPHALF_1 0xB4
96#define F3D_RDPHALF_2 0xB3
97#define F3D_RDPHALF_CONT 0xB2
98#define F3D_TRI4 0xB1
99
100//*****************************************************************************
101//! UCode0 (aka F3D - Fast 3D)
102//! Microcode used for Super Mario 64!!!
103//*****************************************************************************
104class UCode0
105{
106public:
107
108 UCode0();
109 ~UCode0();
110
111 static void initialize(RSP* rsp, RDP* rdp, Memory* memory, DisplayListParser* dlp);
112 static void initializeGBI(GBI* gbi);
113
114public:
115
116 // Matrix Functions
117 static void F3D_Mtx(MicrocodeArgument* ucode);
118 static void F3D_PopMtx(MicrocodeArgument* ucode);
119
120 //Vertex and indices
121 static void F3D_Vtx(MicrocodeArgument* ucode);
122 static void F3D_Tri1(MicrocodeArgument* ucode);
123 static void F3D_Tri4(MicrocodeArgument* ucode);
124 static void F3D_Quad(MicrocodeArgument* ucode);
125
126 //Display list
127 static void F3D_DList(MicrocodeArgument* ucode);
128 static void F3D_EndDL(MicrocodeArgument* ucode);
129 static void F3D_CullDL(MicrocodeArgument* ucode); //Unimplemented
130
131 // Texture
132 static void F3D_Texture(MicrocodeArgument* ucode);
133
134 // Half
135 static void F3D_RDPHalf_1(MicrocodeArgument* ucode);
136 static void F3D_RDPHalf_2(MicrocodeArgument* ucode);
137 static void F3D_RDPHalf_Cont(MicrocodeArgument* ucode); //Unimplmeneted
138
139 // Geometry Mode
140 static void F3D_SetGeometryMode(MicrocodeArgument* ucode);
141 static void F3D_ClearGeometryMode(MicrocodeArgument* ucode);
142
143 // Set Other Modes
144 static void F3D_SetOtherMode_H(MicrocodeArgument* ucode);
145 static void F3D_SetOtherMode_L(MicrocodeArgument* ucode);
146
147 // Other
148 static void F3D_MoveMem(MicrocodeArgument* ucode);
149 static void F3D_MoveWord(MicrocodeArgument* ucode);
150 static void F3D_Sprite2D_Base(MicrocodeArgument* ucode); //Unimplemented
151
152 //Unimportant
153 static void F3D_SPNoOp(MicrocodeArgument* ucode);
154 static void F3D_Reserved0(MicrocodeArgument* ucode);
155 static void F3D_Reserved1(MicrocodeArgument* ucode);
156 static void F3D_Reserved2(MicrocodeArgument* ucode);
157 static void F3D_Reserved3(MicrocodeArgument* ucode);
158
159private:
160
161 static RSP* m_rsp; //!< Pointer to Reality Signal Processor
162 static RDP* m_rdp; //!< Pointer to Reality Drawing Processor
163 static Memory* m_memory; //!< Pointer to Memory Manager
164 static DisplayListParser* m_displayListParser; //!< Pointer to Display List Parser
165
166};
167
168#endif