From d361c5504c6a4f6edbe43f5de00be3bc5f325e2e Mon Sep 17 00:00:00 2001 From: Jaby Date: Wed, 31 Jan 2024 22:22:25 -0500 Subject: [PATCH] Support retriving rotation matrix --- include/PSX/GTE/gte.hpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/PSX/GTE/gte.hpp b/include/PSX/GTE/gte.hpp index 13716db9..f275d6b6 100644 --- a/include/PSX/GTE/gte.hpp +++ b/include/PSX/GTE/gte.hpp @@ -41,6 +41,26 @@ namespace JabyEngine { __asm__ volatile("ctc2 $14, $4" :: "r"(&matrix) : "$12", "$13", "$14"); } + static MATRIX get_rot_matrix() { + MATRIX matrix = {0}; + + // TODO: v why is this needed? + // TODO: v what is this? v + // TODO: v v what exactly is this register? + __asm__ volatile("cfc2 $12, $0" :: "r"(&matrix) : "$12", "$13", "$14", "memory"); + __asm__ volatile("cfc2 $13, $1" :: "r"(&matrix) : "$12", "$13", "$14", "memory"); + __asm__ volatile("sw $12, 0(%0)" :: "r"(&matrix) : "$12", "$13", "$14", "memory"); + __asm__ volatile("sw $13, 4(%0)" :: "r"(&matrix) : "$12", "$13", "$14", "memory"); + __asm__ volatile("cfc2 $12, $2" :: "r"(&matrix) : "$12", "$13", "$14", "memory"); + __asm__ volatile("cfc2 $13, $3" :: "r"(&matrix) : "$12", "$13", "$14", "memory"); + __asm__ volatile("cfc2 $14, $4" :: "r"(&matrix) : "$12", "$13", "$14", "memory"); + __asm__ volatile("sw $12, 8(%0)" :: "r"(&matrix) : "$12", "$13", "$14", "memory"); + __asm__ volatile("sw $13, 12(%0)" :: "r"(&matrix) : "$12", "$13", "$14", "memory"); + __asm__ volatile("sw $14, 16(%0)" :: "r"(&matrix) : "$12", "$13", "$14", "memory"); + + return matrix; + } + /* SetTransMatrix