* cleaning do_DMA
* factored some code in read/write_acl * skeleton for 3D vertices
This commit is contained in:
parent
8b44d9fade
commit
0013777236
File diff suppressed because it is too large
Load Diff
|
@ -11,6 +11,7 @@ libdesmume_a_SOURCES = \
|
|||
Disassembler.c Disassembler.h \
|
||||
dscard.h fat.h FIFO.c FIFO.h \
|
||||
GPU.c GPU.h \
|
||||
gl_vertex.c gl_vertex.h \
|
||||
mem.h mc.c mc.h \
|
||||
wifi.c wifi.h \
|
||||
MMU.c MMU.h NDSSystem.c NDSSystem.h registers.h \
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
/* gl_vertex.c - this file is part of DeSmuME
|
||||
*
|
||||
* Copyright (C) 2007 Damien Nozay (damdoum)
|
||||
* Author: damdoum at users.sourceforge.net
|
||||
*
|
||||
* based on http://nocash.emubase.de/gbatek.htm
|
||||
*
|
||||
* This file 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; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This file 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 for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "gl_vertex.h"
|
||||
|
||||
static u16 vx=0,vy=0,vz=0;
|
||||
|
||||
INLINE void gl_VTX_one() {
|
||||
float vfx,vfy,vfz;
|
||||
vfx = vx / 4096.;
|
||||
vfy = vy / 4096.;
|
||||
vfz = vz / 4096.;
|
||||
printf ("\tVTX (x=%.12f,y=%.12f,z=%.12f)\n",vfx,vfy,vfz);
|
||||
}
|
||||
|
||||
void gl_VTX_begin(u32 val) {
|
||||
//see 4000500h - Cmd 40h - BEGIN_VTXS - Start of Vertex List (W)
|
||||
vx=vy=vz=0;
|
||||
printf ("VTX_begin : ");
|
||||
switch(val) {
|
||||
case 0 : // separate triangles (3 vertices for each triangle)
|
||||
printf ("GL_TRIANGLES\n");
|
||||
break;
|
||||
case 1 : // separate quads (4 vertices for each triangle)
|
||||
printf ("GL_QUADS\n");
|
||||
break;
|
||||
// strips : 1st triangle or quad defined by all vertices
|
||||
// next ones share a segment (so 2 vertices less)
|
||||
case 2 : // triangle strips (1st : 3, next : 1)
|
||||
printf ("GL_TRIANGLE_STRIP\n");
|
||||
break;
|
||||
case 3 : // quad strips (1st : 4, next : 2)
|
||||
printf ("GL_QUAD_STRIP\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
void gl_VTX_end() {
|
||||
//see 4000504h - Cmd 41h - END_VTXS - End of Vertex List (W)
|
||||
printf ("VTX_end.\n");
|
||||
}
|
||||
|
||||
|
||||
void gl_VTX_16 (u32 xxyy, u32 zz__) {
|
||||
//see 400048Ch - Cmd 23h - VTX_16 - Set Vertex XYZ Coordinates (W)
|
||||
_VTX_16 xy, z_;
|
||||
xy.val = xxyy;
|
||||
z_.val = zz__;
|
||||
vx = xy.bits.low ;
|
||||
vy = xy.bits.high;
|
||||
vz = z_.bits.low ;
|
||||
gl_VTX_one();
|
||||
}
|
||||
void gl_VTX_10 (u32 xyz) {
|
||||
//see 4000490h - Cmd 24h - VTX_10 - Set Vertex XYZ Coordinates (W)
|
||||
_VTX_10 vt;
|
||||
vt.val = xyz;
|
||||
vx = vt.bits.low << 6;
|
||||
vy = vt.bits.mid << 6;
|
||||
vz = vt.bits.high << 6;
|
||||
gl_VTX_one();
|
||||
}
|
||||
|
||||
|
||||
void gl_VTX_XY (u32 xy) {
|
||||
//see 4000494h - Cmd 25h - VTX_XY - Set Vertex XY Coordinates (W)
|
||||
_VTX_16 vt;
|
||||
vt.val = xy;
|
||||
vx = vt.bits.low ;
|
||||
vy = vt.bits.high;
|
||||
gl_VTX_one();
|
||||
}
|
||||
void gl_VTX_XZ (u32 xz) {
|
||||
//see 4000498h - Cmd 26h - VTX_XZ - Set Vertex XZ Coordinates (W)
|
||||
_VTX_16 vt;
|
||||
vt.val = xz;
|
||||
vx = vt.bits.low ;
|
||||
vz = vt.bits.high;
|
||||
gl_VTX_one();
|
||||
}
|
||||
void gl_VTX_YZ (u32 yz) {
|
||||
//see 400049Ch - Cmd 27h - VTX_YZ - Set Vertex YZ Coordinates (W)
|
||||
_VTX_16 vt;
|
||||
vt.val = yz;
|
||||
vy = vt.bits.low ;
|
||||
vz = vt.bits.high;
|
||||
gl_VTX_one();
|
||||
}
|
||||
|
||||
|
||||
void gl_VTX_DIFF (u32 diff) {
|
||||
//see 40004A0h - Cmd 28h - VTX_DIFF - Set Relative Vertex Coordinates (W)
|
||||
_VTX_10 vt;
|
||||
vt.val = diff;
|
||||
vx += vt.bits.low << 3;
|
||||
vy += vt.bits.mid << 3;
|
||||
vz += vt.bits.high << 3;
|
||||
gl_VTX_one();
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
/* gl_vertex.h - this file is part of DeSmuME
|
||||
*
|
||||
* Copyright (C) 2007 Damien Nozay (damdoum)
|
||||
* Author: damdoum at users.sourceforge.net
|
||||
*
|
||||
* based on http://nocash.emubase.de/gbatek.htm
|
||||
*
|
||||
* This file 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; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This file 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 for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "types.h"
|
||||
|
||||
typedef union {
|
||||
u32 val;
|
||||
struct {
|
||||
unsigned primitive:2;
|
||||
unsigned :30;
|
||||
} bits;
|
||||
} _VTX_BEGIN_cmd ;
|
||||
typedef union {
|
||||
u32 val;
|
||||
struct { // 12 bit fractionnal
|
||||
signed low:16;
|
||||
signed high:16;
|
||||
} bits;
|
||||
} _VTX_16 ;
|
||||
typedef union {
|
||||
u32 val;
|
||||
struct { // 6 bit fractionnal
|
||||
signed low:10;
|
||||
signed mid:10;
|
||||
signed high:10;
|
||||
signed :2;
|
||||
} bits;
|
||||
} _VTX_10 ;
|
||||
|
||||
void gl_VTX_begin(u32 val);
|
||||
//see 4000500h - Cmd 40h - BEGIN_VTXS - Start of Vertex List (W)
|
||||
void gl_VTX_end();
|
||||
//see 4000504h - Cmd 41h - END_VTXS - End of Vertex List (W)
|
||||
|
||||
void gl_VTX_16 (u32 xxyy, u32 zz__);
|
||||
//see 400048Ch - Cmd 23h - VTX_16 - Set Vertex XYZ Coordinates (W)
|
||||
void gl_VTX_10 (u32 xyz);
|
||||
//see 4000490h - Cmd 24h - VTX_10 - Set Vertex XYZ Coordinates (W)
|
||||
|
||||
void gl_VTX_XY (u32 xy);
|
||||
//see 4000494h - Cmd 25h - VTX_XY - Set Vertex XY Coordinates (W)
|
||||
void gl_VTX_XZ (u32 xz);
|
||||
//see 4000498h - Cmd 26h - VTX_XZ - Set Vertex XZ Coordinates (W)
|
||||
void gl_VTX_YZ (u32 yz);
|
||||
//see 400049Ch - Cmd 27h - VTX_YZ - Set Vertex YZ Coordinates (W)
|
||||
|
||||
void gl_VTX_DIFF (u32 diff);
|
||||
//see 40004A0h - Cmd 28h - VTX_DIFF - Set Relative Vertex Coordinates (W)
|
Loading…
Reference in New Issue