summaryrefslogtreecommitdiff
path: root/include/fx.h
diff options
context:
space:
mode:
authorMade <made111@gmx.de>2020-05-03 14:49:24 +0200
committerMade <made111@gmx.de>2020-05-03 14:49:24 +0200
commit34dbccce4c71ba80c52cae8f1254c25d950f50c4 (patch)
treee8db0da9bcb0f267cac7cfd234b4dd5f66a5aba9 /include/fx.h
parenta382cad64f6d03d03ae87a9eae33c9cfbf314fde (diff)
decompile FX_mtx44 and update fx header
Diffstat (limited to 'include/fx.h')
-rw-r--r--include/fx.h50
1 files changed, 49 insertions, 1 deletions
diff --git a/include/fx.h b/include/fx.h
index 22ef3d3a..1e9eb291 100644
--- a/include/fx.h
+++ b/include/fx.h
@@ -1,6 +1,11 @@
#ifndef GUARD_FX_H
#define GUARD_FX_H
+#define FX16_INT_MASK 0xF000
+#define FX16_INT_ABS_MASK 0x7000
+#define FX16_FRAC_MASK 0x0FFF
+#define FX16_INT_SHIFT 0xC
+
#define FX32_INT_MASK 0xFFFFF000
#define FX32_INT_ABS_MASK 0x7FFFF000
#define FX32_FRAC_MASK 0x00000FFF
@@ -20,6 +25,10 @@
#define FX_INT_ABS(TYPE, x) (((x) & TYPE ## _INT_ABS_MASK) >> TYPE ## _INT_SHIFT)
#define FX_FRAC(TYPE, x) ((x) & TYPE ## _FRAC_MASK)
+#define FX16_INT(x) FX_INT(FX16, x)
+#define FX16_INT_ABS(x) FX_INT_ABS(FX16, x)
+#define FX16_FRAC(x) FX_FRAC(FX16, x)
+
#define FX32_INT(x) FX_INT(FX32, x)
#define FX32_INT_ABS(x) FX_INT_ABS(FX32, x)
#define FX32_FRAC(x) FX_FRAC(FX32, x)
@@ -33,7 +42,6 @@
#define FX64C_FRAC(x) FX_FRAC(FX64C, x)
-
#define HW_REG_DIVCNT 0x04000280
#define HW_REG_DIV_NUMER 0x04000290
#define HW_REG_DIV_DENOM 0x04000298
@@ -65,6 +73,26 @@ struct Vecx16
s16 z;
};
+struct Mtx44
+{
+ s32 _[16];
+};
+
+struct Mtx43
+{
+ s32 _[12];
+};
+
+struct Mtx33
+{
+ s32 _[9];
+};
+
+struct Mtx22
+{
+ s32 _[4];
+};
+
//FX
void FX_Init();
s32 FX_Modf(s32 x, s32 *iptr);
@@ -78,6 +106,13 @@ void VEC_Add(struct Vecx32 *x, struct Vecx32 *y, struct Vecx32 *dst);
void VEC_Subtract(struct Vecx32 *x, struct Vecx32 *y, struct Vecx32 *dst);
void VEC_Fx16Add(struct Vecx16 *x, struct Vecx16 *y, struct Vecx16 *dst);
s32 VEC_DotProduct(struct Vecx32 *x, struct Vecx32 *y);
+s32 VEC_Fx16DotProduct(struct Vecx16 *a, struct Vecx16 *b);
+void VEC_CrossProduct(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst);
+void VEC_Fx16CrossProduct(struct Vecx16 *a, struct Vecx16 *b, struct Vecx16 *dst);
+s32 VEC_Mag(struct Vecx32 *a);
+void VEC_Normalize(struct Vecx32 *a, struct Vecx32 *dst);
+void VEC_Fx16Normalize(struct Vecx16 *a, struct Vecx16 *dst);
+void VEC_MultAdd(s32 factor, struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst);
//CP
s32 FX_Div(s32 numerator, s32 denominator);
@@ -91,4 +126,17 @@ void FX_DivAsync(s32 numerator, s32 denominator);
s32 FX_DivS32(s32 numerator, s32 denominator);
s32 FX_ModS32(s32 num, s32 mod);
+//Mtx
+//The functions ending in underscores seem to be in assembly originally
+//at least I see no way to recreate the stmia copies and some of them are actually in thumb
+//Mtx44
+void MTX_TransApply44(struct Mtx44 *mtx, struct Mtx44 *dst, s32 x, s32 y, s32 z);
+void MTX_Concat44(struct Mtx44 *a, struct Mtx44 *b, struct Mtx44 *c);
+void MTX_Identity44_(struct Mtx44 *dst);
+void MTX_Copy44To43_(struct Mtx44 *src, struct Mtx43 *dst);
+void MTX_RotX44_(struct Mtx44 *mtx, s32 sinphi, s32 cosphi);
+void MTX_RotY44_(struct Mtx44 *mtx, s32 sinphi, s32 cosphi);
+void MTX_RotZ44_(struct Mtx44 *mtx, s32 sinphi, s32 cosphi);
+
+
#endif //GUARD_FX_H