Skip to content

Commit 9c6f263

Browse files
authored
gte simulator (#231)
* gte simulator * Clean up macros some, compile is still broken. * gte simulator works and passes all unit tests * fixes after rebase, passes all tests.
1 parent e41d53d commit 9c6f263

6 files changed

Lines changed: 831 additions & 17 deletions

File tree

include/ctr/gte.h

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
#pragma once
22

3+
#define EMULATE_GTE //enable me to enable gte simulation (and do not emit gte asm).
4+
35
#include <ctr/math.h>
6+
#if !defined(EMULATE_GTE)
47
#include <ctr/nugget/inline_n.h>
8+
#include <ctr/gte_extended.h>
9+
#else
10+
#include <ctr/gte_simulator.h>
11+
#endif
512

613
typedef enum GTE_ROW_INDEX
714
{
@@ -27,6 +34,14 @@ typedef enum GTE_VECTOR
2734
GTE_VECTOR_MAC, /* Vec */
2835
} GTE_VECTOR;
2936

37+
typedef enum GTE_TRANS_VECTOR
38+
{
39+
GTE_TRANS_TRANSLATION, /*Vec*/
40+
GTE_TRANS_BG_COLOR, /*Vec*/
41+
GTE_TRANS_FAR_COLOR, /*Vec*/
42+
GTE_TRANS_NONE
43+
} GTE_TRANS_VECTOR;
44+
3045
typedef enum GTE_IR
3146
{
3247
GTE_IR_0, /* s16 */
@@ -53,6 +68,7 @@ typedef enum GTE_CALC
5368
#define _CAT(a, b) a##b
5469
#define CAT(a, b) _CAT(a, b)
5570
#define CAT3(a, b, c) CAT(CAT(a, b), c)
71+
#define CAT4(a, b, c, d) CAT(CAT(CAT(a, b), c), d)
5672

5773
/* Private definitions */
5874
#define _gte_loadSVecMatrix_GTE_MATRIX_ROT_GTE_ROW_INDEX_0(v) gte_ldsvrtrow0(v)
@@ -63,12 +79,7 @@ typedef enum GTE_CALC
6379
#define _gte_loadSVec_GTE_VECTOR_2(v) gte_ldv2(v)
6480
#define _gte_loadSVec_GTE_VECTOR_IR(v) gte_ldsv(v)
6581
#define _gte_loadVec_GTE_VECTOR_IR(v) gte_ldlvl(v)
66-
#define _gte_loadVec_GTE_VECTOR_MAC(v) __asm__ volatile ( \
67-
"lwc2 $25, 0( %0 );" \
68-
"lwc2 $26, 4( %0 );" \
69-
"lwc2 $27, 8( %0 );" \
70-
: \
71-
: "r"( v ) )
82+
#define _gte_loadVec_GTE_VECTOR_MAC(v) _Impl_gte_loadVec_GTE_VECTOR_MAC(v)
7283
#define _gte_readMac_GTE_MAC_0(out) gte_stopz(out)
7384
#define _gte_readMac_GTE_MAC_1(out) gte_stlvnl0(out)
7485
#define _gte_readMac_GTE_MAC_2(out) gte_stlvnl1(out)
@@ -86,15 +97,7 @@ typedef enum GTE_CALC
8697
#define _gte_interpolate_GTE_CALC_FLOATING_POINT() gte_gpf12()
8798
#define _gte_interpolateBase_GTE_CALC_INT() gte_gpl0()
8899
#define _gte_interpolateBase_GTE_CALC_FLOATING_POINT() gte_gpl12()
89-
#define _gte_leadingZeroes(out, in) __asm__ volatile ( \
90-
"mtc2 %1, $30;" \
91-
"nop;" \
92-
"nop;" \
93-
"swc2 $31, 0( %0 );" \
94-
: \
95-
: "r"( out ), "r"( in ) \
96-
: "memory" \
97-
)
100+
#define _gte_leadingZeroes(out, in) _Impl_gte_leadingZeroes(out, in)
98101

99102
/* API */
100103
#define gte_readMac(out, macType) CAT(_gte_readMac_, macType)(out)

include/ctr/gte_extended.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#pragma once
2+
3+
#define _Impl_gte_loadVec_GTE_VECTOR_MAC(v) __asm__ volatile ( \
4+
"lwc2 $25, 0( %0 );" \
5+
"lwc2 $26, 4( %0 );" \
6+
"lwc2 $27, 8( %0 );" \
7+
: \
8+
: "r"( v ) )
9+
#define _Impl_gte_leadingZeroes(out, in) __asm__ volatile ( \
10+
"mtc2 %1, $30;" \
11+
"nop;" \
12+
"nop;" \
13+
"swc2 $31, 0( %0 );" \
14+
: \
15+
: "r"( out ), "r"( in ) \
16+
: "memory" \
17+
)

0 commit comments

Comments
 (0)