diff --git a/.vscode/settings.json b/.vscode/settings.json
index 98182b37..5e499b4c 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -20,6 +20,8 @@
         "hud.h": "c",
         "global.h": "c",
         "ultratypes.h": "c",
-        "mbi.h": "c"
+        "mbi.h": "c",
+        "common.h": "c",
+        "sf64math.h": "c"
     },
 }
\ No newline at end of file
diff --git a/include/sf64math.h b/include/sf64math.h
index f2d7cff1..ecff4f33 100644
--- a/include/sf64math.h
+++ b/include/sf64math.h
@@ -3,6 +3,16 @@
 
 #include "PR/ultratypes.h"
 
+double fabsf(double f);
+#pragma intrinsic(fabsf)
+
+#define M_PI 3.14159265358979323846f
+#define M_SQRT2 1.41421356237309504880f
+#define M_SQRT1_2 0.70710678118654752440f	/* 1/sqrt(2) */
+#define FLT_MAX 340282346638528859811704183484516925440.0f
+#define SHT_MAX 32767.0f
+#define SHT_MINV (1.0f / SHT_MAX)
+
 typedef struct {
     /* 0x0 */ f32 x;
     /* 0x4 */ f32 y;
diff --git a/linker_scripts/us/symbol_addrs.txt b/linker_scripts/us/symbol_addrs.txt
index b1676d89..911b306b 100644
--- a/linker_scripts/us/symbol_addrs.txt
+++ b/linker_scripts/us/symbol_addrs.txt
@@ -9,6 +9,7 @@ D_800D8560 = 0x800D8560; // force_migration:True
 D_800D55E4_fake = 0x800D55E4; // force_migration:True
 D_800D8570 = 0x800D8570; // force_migration:True
 D_800D8594 = 0x800D8594; // force_migration:True
+D_800C9524 = 0x800C9524; // force_migration:True
 
 D_8019B1EC_E07F2C = 0x8019B1EC; // force_migration:True segment:segment_DF4260
 D_801C171C_E50E4C = 0x801C171C; // force_migration:True segment:segment_E16C50
diff --git a/src/libultra/206B0.c b/src/libultra/206B0.c
new file mode 100644
index 00000000..f3eb6c2d
--- /dev/null
+++ b/src/libultra/206B0.c
@@ -0,0 +1,25 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FAB0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FAE4.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FB04.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FB24.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FB58.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FB88.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FBA8.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FBC8.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FBE8.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FD0C.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FE00.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/206B0/func_8001FE30.s")
diff --git a/src/libultra/28330.c b/src/libultra/28330.c
new file mode 100644
index 00000000..52b51c5a
--- /dev/null
+++ b/src/libultra/28330.c
@@ -0,0 +1,9 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/28330/__osTimerServicesInit.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/28330/__osTimerInterrupt.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/28330/__osSetTimerIntr.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/28330/__osInsertTimer.s")
diff --git a/src/libultra/28820.c b/src/libultra/28820.c
new file mode 100644
index 00000000..289f5252
--- /dev/null
+++ b/src/libultra/28820.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/28820/__osViGetCurrentContext.s")
diff --git a/src/libultra/28B90.c b/src/libultra/28B90.c
new file mode 100644
index 00000000..81b687e8
--- /dev/null
+++ b/src/libultra/28B90.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/28B90/func_80027F90.s")
diff --git a/src/libultra/28C90.c b/src/libultra/28C90.c
new file mode 100644
index 00000000..d3d8cecc
--- /dev/null
+++ b/src/libultra/28C90.c
@@ -0,0 +1,7 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/28C90/func_80028090.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/28C90/func_800280E0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/28C90/func_80028124.s")
diff --git a/src/libultra/294F0.c b/src/libultra/294F0.c
new file mode 100644
index 00000000..1df6d5b2
--- /dev/null
+++ b/src/libultra/294F0.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/294F0/func_800288F0.s")
diff --git a/src/libultra/297E0.c b/src/libultra/297E0.c
new file mode 100644
index 00000000..80a5f840
--- /dev/null
+++ b/src/libultra/297E0.c
@@ -0,0 +1,5 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/297E0/func_80028BE0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/297E0/func_80028C30.s")
diff --git a/src/libultra/2A7A0.c b/src/libultra/2A7A0.c
new file mode 100644
index 00000000..7e7adbd8
--- /dev/null
+++ b/src/libultra/2A7A0.c
@@ -0,0 +1,11 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2A7A0/func_80029BA0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2A7A0/func_80029BF8.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2A7A0/func_80029C6C.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2A7A0/func_80029CD8.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2A7A0/func_80029DA8.s")
diff --git a/src/libultra/2AAB0.c b/src/libultra/2AAB0.c
new file mode 100644
index 00000000..7ae05d9b
--- /dev/null
+++ b/src/libultra/2AAB0.c
@@ -0,0 +1,11 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2AAB0/func_80029EB0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2AAB0/func_80029F80.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2AAB0/func_80029FF4.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2AAB0/func_8002A044.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2AAB0/func_8002A0B0.s")
diff --git a/src/libultra/2AD80.c b/src/libultra/2AD80.c
new file mode 100644
index 00000000..5acaa4fa
--- /dev/null
+++ b/src/libultra/2AD80.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2AD80/func_8002A180.s")
diff --git a/src/libultra/2B830.c b/src/libultra/2B830.c
new file mode 100644
index 00000000..09d4bf86
--- /dev/null
+++ b/src/libultra/2B830.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2B830/func_8002AC30.s")
diff --git a/src/libultra/2BD50.c b/src/libultra/2BD50.c
new file mode 100644
index 00000000..34018c71
--- /dev/null
+++ b/src/libultra/2BD50.c
@@ -0,0 +1,5 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2BD50/func_8002B150.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2BD50/func_8002B15C.s")
diff --git a/src/libultra/2EDE0.c b/src/libultra/2EDE0.c
new file mode 100644
index 00000000..1aabadb7
--- /dev/null
+++ b/src/libultra/2EDE0.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2EDE0/func_8002E1E0.s")
diff --git a/src/libultra/2EE30.c b/src/libultra/2EE30.c
new file mode 100644
index 00000000..d09ebd38
--- /dev/null
+++ b/src/libultra/2EE30.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/2EE30/func_8002E230.s")
diff --git a/src/libultra/gu/cosf.c b/src/libultra/gu/cosf.c
new file mode 100644
index 00000000..8dc3fb06
--- /dev/null
+++ b/src/libultra/gu/cosf.c
@@ -0,0 +1,5 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/gu/cosf/__cosf.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/gu/cosf/D_800C9390.s")
diff --git a/src/libultra/gu/perspective.c b/src/libultra/gu/perspective.c
new file mode 100644
index 00000000..17466356
--- /dev/null
+++ b/src/libultra/gu/perspective.c
@@ -0,0 +1,5 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/gu/perspective/guPerspectiveF.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/gu/perspective/guPerspective.s")
diff --git a/src/libultra/gu/sinf.c b/src/libultra/gu/sinf.c
new file mode 100644
index 00000000..f0f3026f
--- /dev/null
+++ b/src/libultra/gu/sinf.c
@@ -0,0 +1,5 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/gu/sinf/__sinf.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/gu/sinf/D_800C9340.s")
diff --git a/src/libultra/io/devmgr.c b/src/libultra/io/devmgr.c
new file mode 100644
index 00000000..6988e47a
--- /dev/null
+++ b/src/libultra/io/devmgr.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/io/devmgr/__osDevMgrMain.s")
diff --git a/src/libultra/os/stopthread.c b/src/libultra/os/stopthread.c
new file mode 100644
index 00000000..0d42e6d9
--- /dev/null
+++ b/src/libultra/os/stopthread.c
@@ -0,0 +1,35 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/osStopThread.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E340.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E364.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E3A8.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E3BC.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E3E0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E4F8.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E548.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E5E0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E604.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E628.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E64C.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E670.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E694.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E6B8.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/func_8002E6DC.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/stopthread/D_800C9A50.s")
diff --git a/src/libultra/os/thread.c b/src/libultra/os/thread.c
new file mode 100644
index 00000000..846ee03a
--- /dev/null
+++ b/src/libultra/os/thread.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/os/thread/__osDequeueThread.s")
diff --git a/src/libultra/rmon/xldtob.c b/src/libultra/rmon/xldtob.c
new file mode 100644
index 00000000..c72b3642
--- /dev/null
+++ b/src/libultra/rmon/xldtob.c
@@ -0,0 +1,9 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/rmon/xldtob/func_80029080.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/rmon/xldtob/D_800C9580.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/rmon/xldtob/_Ldtob.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/rmon/xldtob/D_800C95D0.s")
diff --git a/src/main/1FA70.c b/src/main/1FA70.c
deleted file mode 100644
index e41ec148..00000000
--- a/src/main/1FA70.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "common.h"
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/1FA70/func_8001EE70.s")
diff --git a/src/main/1FB10.c b/src/main/1FB10.c
deleted file mode 100644
index 23cc3c32..00000000
--- a/src/main/1FB10.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "common.h"
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/1FB10/func_8001EF10.s")
diff --git a/src/main/21520.c b/src/main/21520.c
new file mode 100644
index 00000000..894b7e30
--- /dev/null
+++ b/src/main/21520.c
@@ -0,0 +1,9 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/21520/func_80020920.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/21520/func_80020A88.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/21520/func_80020BF4.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/21520/func_80020D70.s")
diff --git a/src/main/233A0.c b/src/main/233A0.c
new file mode 100644
index 00000000..a37e8321
--- /dev/null
+++ b/src/main/233A0.c
@@ -0,0 +1,5 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/233A0/func_800227A0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/233A0/func_8002296C.s")
diff --git a/src/main/23760.c b/src/main/23760.c
new file mode 100644
index 00000000..086e6269
--- /dev/null
+++ b/src/main/23760.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/23760/func_80022B60.s")
diff --git a/src/main/24C60.c b/src/main/24C60.c
new file mode 100644
index 00000000..63ced48e
--- /dev/null
+++ b/src/main/24C60.c
@@ -0,0 +1,7 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/24C60/func_80024060.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/24C60/_Printf.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/24C60/D_800C93EC.s")
diff --git a/src/main/25950.c b/src/main/25950.c
new file mode 100644
index 00000000..e28c2030
--- /dev/null
+++ b/src/main/25950.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/25950/func_80024D50.s")
diff --git a/src/main/25AC0.c b/src/main/25AC0.c
new file mode 100644
index 00000000..e46e4ff9
--- /dev/null
+++ b/src/main/25AC0.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/25AC0/func_80024EC0.s")
diff --git a/src/main/25CA0.c b/src/main/25CA0.c
new file mode 100644
index 00000000..50b80ee9
--- /dev/null
+++ b/src/main/25CA0.c
@@ -0,0 +1,3 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/25CA0/osAiSetNextBuffer.s")
diff --git a/src/main/25E10.c b/src/main/25E10.c
new file mode 100644
index 00000000..4bdc4e8a
--- /dev/null
+++ b/src/main/25E10.c
@@ -0,0 +1,7 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/25E10/__osSiCreateAccessQueue.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/25E10/__osSiGetAccess.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/25E10/__osSiRelAccess.s")
diff --git a/src/main/271C0.c b/src/main/271C0.c
new file mode 100644
index 00000000..48e6fa1c
--- /dev/null
+++ b/src/main/271C0.c
@@ -0,0 +1,9 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/271C0/func_800265C0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/271C0/func_800267C4.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/271C0/func_80026940.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/271C0/func_80026B5C.s")
diff --git a/src/main/2DF00.c b/src/main/2DF00.c
new file mode 100644
index 00000000..650dda2e
--- /dev/null
+++ b/src/main/2DF00.c
@@ -0,0 +1,29 @@
+#include "common.h"
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002D300.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002D3AC.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002D494.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002D654.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002D660.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002D7BC.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002D9E4.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002DA78.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002DB3C.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002DB7C.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002DC38.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002DC68.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002DCD0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/2DF00/func_8002DD00.s")
diff --git a/src/main/5A20.c b/src/main/5A20.c
index 6e9a5db6..ceea235e 100644
--- a/src/main/5A20.c
+++ b/src/main/5A20.c
@@ -1,11 +1,5 @@
-#include "common.h"
+#include "global.h"
 
-extern f32 D_800C80FC;
-extern f32 D_800C80D8;
-extern f32 D_800C80DC;
-extern f32 D_800C80E0;
-extern f32 D_800C80E4;
-extern f32 D_800C8100;
 extern s32 D_8013B3A0;
 extern s32 D_8013B3A4;
 extern s32 D_8013B3A8;
@@ -44,17 +38,17 @@ f32 func_80005100(f32 arg0, f32 arg1) {
 
     if (arg1 == 0.0f) {
         if (arg0 < 0.0f) {
-            return D_800C80D8;
+            return -M_PI / 2.0f;
         } else {
-            return D_800C80DC;
+            return M_PI / 2.0f;
         }
     }
 
     if (arg1 < 0.0f) {
         if (arg0 < 0.0f) {
-            return -(D_800C80E0 - func_8001FBE8(fabsf(arg0 / arg1)));
+            return -(M_PI - func_8001FBE8(fabsf(arg0 / arg1)));
         } else {
-            return D_800C80E4 - func_8001FBE8(fabsf(arg0 / arg1));
+            return M_PI - func_8001FBE8(fabsf(arg0 / arg1));
         }
     } else {
         return func_8001FBE8(arg0 / arg1);
@@ -70,9 +64,9 @@ f32 func_80005320(f32 arg0, f32 arg1) {
 
     if (arg0 == 0.0f) {
         if (arg1 < 0.0f) {
-            return D_800C80FC;
+            return -M_PI / 2.0f;
         }
-        return D_800C8100;
+        return M_PI / 2.0f;
     }
 
     if (arg1 == 0.0f) {
@@ -125,46 +119,3 @@ void func_80005604(s32* arg0, s32* arg1, s32 arg2, s32 arg3, s32 arg4) {
     }
     *arg0 = arg4;
 }
-
-// https://decomp.me/scratch/8H8k4 100%
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005680.s")
-
-void func_80005708(s32* arg0) {
-    func_80005680(*arg0 + 64, *arg0);
-    *arg0 += 0x40;
-}
-
-void func_80005740(s32* arg0) {
-    *arg0 -= 64;
-}
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005754.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005B00.s")
-
-// https://decomp.me/scratch/v4KEJ 91%
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005C34.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005D44.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005E90.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005FE0.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_8000612C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006500.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_8000671C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006970.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006A20.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006AB8.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006C7C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006E3C.s")
-
-#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006EB8.s")
diff --git a/src/main/6280.c b/src/main/6280.c
new file mode 100644
index 00000000..07600f34
--- /dev/null
+++ b/src/main/6280.c
@@ -0,0 +1,44 @@
+#include "global.h"
+
+// https://decomp.me/scratch/8H8k4 100%
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80005680.s")
+
+void func_80005708(s32* arg0) {
+    func_80005680(*arg0 + 64, *arg0);
+    *arg0 += 0x40;
+}
+
+void func_80005740(s32* arg0) {
+    *arg0 -= 64;
+}
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80005754.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80005B00.s")
+
+// https://decomp.me/scratch/v4KEJ 91%
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80005C34.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80005D44.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80005E90.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80005FE0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_8000612C.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80006500.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_8000671C.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80006970.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80006A20.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80006AB8.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80006C7C.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80006E3C.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80006EB8.s")
diff --git a/src/main/7D30.c b/src/main/7D30.c
index 3ffdb110..ca9d2925 100644
--- a/src/main/7D30.c
+++ b/src/main/7D30.c
@@ -1,3 +1,5 @@
+
+
 #include "common.h"
 
 extern s64 osClockRate;
@@ -36,3 +38,5 @@ s32 func_8000716C(s32 arg0, s32 arg1) {
 #pragma GLOBAL_ASM("asm/us/nonmatchings/main/7D30/func_800071FC.s")
 
 #pragma GLOBAL_ASM("asm/us/nonmatchings/main/7D30/func_800072E0.s")
+
+#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7D30/D_800C8120.s")
diff --git a/yamls/us/main.yaml b/yamls/us/main.yaml
index 60a787aa..bcd5e84e 100644
--- a/yamls/us/main.yaml
+++ b/yamls/us/main.yaml
@@ -13,22 +13,23 @@
       - [0x41D0, c]
       - [0x4650, c]
       - [0x5A20, c] # -O2 -g3
+      - [0x6280, c] # -O2 -g3
       - [0x7B20, c]
       - [0x7D30, c]
       - [0x7FC0, c, 7FC0]
       - [0x8CC0, c, 8CC0]
       - [0xC870, c, C870]
       - [0xF0A0, c, F0A0]
-      - [0x12490, c, 12490]  # don't touch before fixing rodata
+      - [0x12490, c, 12490]
       - [0x14AA0, c, 14AA0]
       - [0x17650, c, 17650] # Sound related
       - [0x1EB50, c, 1EB50] # Sound related
       - [0x1FA60, c]
-      - [0x1FA70, c]
-      - [0x1FB10, c]
+      - [0x1FA70, hasm]
+      - [0x1FB10, hasm]
       - [0x205E0, c]
-      - [0x206B0, asm, ../libultra/206B0]
-      - [0x20A60, asm]
+      - [0x206B0, c, ../libultra/206B0] # math64
+      - [0x20A60, hasm] # fp.text.s
 
     # LIBULTRA
       - [0x20BC0, c, ../libultra/io/controller]
@@ -36,8 +37,8 @@
       - [0x211E0, c, ../libultra/os/recvmesg]
       - [0x21320, c, ../libultra/os/sendmesg]
       - [0x21470, c, ../libultra/io/contquery]
-      - [0x21520, asm]
-      - [0x21B40, asm, ../libultra/gu/perspective] # Problem when trying to C
+      - [0x21520, c]
+      - [0x21B40, c, ../libultra/gu/perspective]
       - [0x21DD0, c, ../libultra/gu/lookat]
       - [0x22100, c, ../libultra/gu/ortho]
       - [0x222C0, hasm, invalicache]
@@ -47,7 +48,7 @@
       - [0x22570, hasm, writebackdcacheall]
       - [0x225A0, c, ../libultra/io/viswapbuf]
       - [0x225F0, c, ../libultra/io/virepeatline]
-      - [0x22660, asm]
+      - [0x22660, hasm] # padding
       - [0x226C0, c, ../libultra/io/visetmode]
       - [0x22730, c, ../libultra/io/visetspecial]
       - [0x228F0, c, ../libultra/os/createmesgqueue]
@@ -60,12 +61,12 @@
       - [0x22DA0, c, ../libultra/os/createthread]
       - [0x22EF0, c, ../libultra/os/startthread]
       - [0x23040, c, ../libultra/io/vimgr]
-      - [0x233A0, asm]
+      - [0x233A0, c]
       - [0x23680, c, ../libultra/os/setthreadpri]
-      - [0x23760, asm]
+      - [0x23760, c]
       - [0x23C00, c, ../libultra/os/gettime]
-      - [0x23C90, asm, ../libultra/gu/sinf] # Problem when trying to C
-      - [0x23E50, asm, ../libultra/gu/cosf] # Problem when trying to C
+      - [0x23C90, c, ../libultra/gu/sinf]
+      - [0x23E50, c, ../libultra/gu/cosf]
       - [0x23FC0, hasm, ../libultra/gu/sqrtf]
       - [0x23FD0, c, ../libultra/os/settimer]
       - [0x240B0, c, ../libultra/conteepread]
@@ -73,23 +74,23 @@
       - [0x24890, c, ../libultra/libc/ll]
       - [0x24B50, c, ../libultra/conteepprobe]
       - [0x24BC0, c, ../libultra/libc/string]
-      - [0x24C60, asm, 24C60]
+      - [0x24C60, c, 24C60]
       - [0x25920, c, ../libultra/os/settime]
-      - [0x25950, asm]
+      - [0x25950, c]
       - [0x25960, c, ../libultra/io/aisetfreq]
-      - [0x25AC0, asm]
+      - [0x25AC0, c]
       - [0x25BB0, c, ../libultra/io/epidma]
       - [0x25C90, c, ../libultra/io/aigetlen]
-      - [0x25CA0, asm]
+      - [0x25CA0, c]
       - [0x25D50, hasm, getcount]
       - [0x25D60, c, ../libultra/io/sirawdma]
-      - [0x25E10, asm]
+      - [0x25E10, c]
       - [0x25ED0, hasm, interrupt]
-      - [0x25F10, asm, ../libultra/os/thread] # Problem when trying to C
-      - [0x25F50, asm]
+      - [0x25F10, c, ../libultra/os/thread]
+      - [0x25F50, hasm]
       - [0x26CD0, c, ../libultra/io/pfsisplug]
       - [0x27040, c, ../libultra/io/crc]
-      - [0x271C0, asm]
+      - [0x271C0, c]
       - [0x278D0, c, ../libultra/mtxutil]
       - [0x27B40, c, ../libultra/os/jammesg]
       - [0x27C90, c, ../libultra/io/pigetcmdq]
@@ -102,34 +103,34 @@
       - [0x28230, c, ../libultra/io/spsetpc]
       - [0x28270, c, ../libultra/io/sprawdma]
       - [0x28300, c, ../libultra/io/sp]
-      - [0x28330, asm, ../libultra/28330]
+      - [0x28330, c, ../libultra/28330]
       - [0x28800, c, ../libultra/os/getthreadpri]
-      - [0x28820, asm, ../libultra/28820]
+      - [0x28820, c, ../libultra/28820]
       - [0x28830, c, ../libultra/io/viswapcontext]
-      - [0x28B90, asm, ../libultra/28B90]
-      - [0x28C90, asm, ../libultra/28C90]
+      - [0x28B90, c, ../libultra/28B90]
+      - [0x28C90, c, ../libultra/28C90]
       - [0x28D50, c, ../libultra/io/pirawdma]
-      - [0x28E30, c, ../libultra/io/epirawdma] # Problem when trying to C
-      - [0x29060, asm, ../libultra/io/devmgr]
-      - [0x294F0, asm, ../libultra/294F0]
+      - [0x28E30, c, ../libultra/io/epirawdma]
+      - [0x29060, c, ../libultra/io/devmgr]
+      - [0x294F0, c, ../libultra/294F0]
       - [0x297B0, hasm, ../libultra/setsr]
       - [0x297C0, hasm, ../libultra/getsr]
       - [0x297D0, hasm, ../libultra/setfpccsr]
-      - [0x297E0, asm, ../libultra/297E0]
+      - [0x297E0, c, ../libultra/297E0]
       - [0x29880, hasm, ../libultra/maptlbrdb]
       - [0x298E0, c, ../libultra/io/pirawread]
       - [0x29940, hasm, ../libultra/bzero]
       - [0x299E0, c, ../libultra/rmon/xlitob]
-      - [0x29C80, asm, ../libultra/rmon/xldtob] # Problem when trying to C
+      - [0x29C80, c, ../libultra/rmon/xldtob]
       - [0x2A740, c, ../libultra/io/ai]
       - [0x2A770, c, ../libultra/io/si]
-      - [0x2A7A0, asm, ../libultra/2A7A0]
-      - [0x2AAB0, asm, ../libultra/2AAB0]
-      - [0x2AD80, asm, ../libultra/2AD80]
+      - [0x2A7A0, c, ../libultra/2A7A0]
+      - [0x2AAB0, c, ../libultra/2AAB0]
+      - [0x2AD80, c, ../libultra/2AD80]
       - [0x2AE10, c, ../libultra/leointerrupt]
       - [0x2B690, hasm, ../libultra/setintmask]
       - [0x2B730, c, ../libultra/os/destroythread]
-      - [0x2B830, asm, ../libultra/2B830]
+      - [0x2B830, c, ../libultra/2B830]
       - [0x2B940, hasm, ../libultra/probetlb]
       - [0x2BA00, hasm, ../libultra/setcompare]
       - [0x2BA10, c, ../libultra/os/resetglobalintmask]
@@ -139,15 +140,15 @@
       - [0x2BB60, c, ../libultra/os/yieldthread]
       - [0x2BBB0, c, ../libultra/libc/ldiv]
       - [0x2BD40, hasm, ../libultra/getcause]
-      - [0x2BD50, asm, ../libultra/2BD50]
+      - [0x2BD50, c, ../libultra/2BD50]
       - [0x2BDF0, c, ../libultra/2BDF0]
       - [0x2C700, c, ../libultra/2C700] # -O1 -g0
       - [0x2D300, c, ../libultra/2D300] # -O1 -g0
-      - [0x2DF00, asm, 2DF00] # Problem when trying to C
+      - [0x2DF00, c, 2DF00]
       - [0x2E9E0, c, ../libultra/2E9E0]
-      - [0x2EDE0, asm, ../libultra/2EDE0]
-      - [0x2EE30, asm, ../libultra/2EE30]
-      - [0x2EE80, asm, ../libultra/os/stopthread] # Problem when trying to C
+      - [0x2EDE0, c, ../libultra/2EDE0]
+      - [0x2EE30, c, ../libultra/2EE30]
+      - [0x2EE80, c, ../libultra/os/stopthread]
 
     # Game engine
       - [0x2F300, c, sf_2F300]
@@ -178,7 +179,9 @@
       - [0xC3EE0, data, libraries]
 
       # RODATA - Libultra
-      - [0xC8CC0, rodata]
+      - [0xC8CC0, .rodata, 5A20]
+      - [0xC8D10, .rodata, 6280]
+      - [0xC8D20, .rodata, 7D30]
       - [0xC8E40, .rodata, 7FC0]
       - [0xC9220, .rodata, 8CC0]
       - [0xC9260, .rodata, C870]
@@ -187,18 +190,18 @@
       - [0xC9320, .rodata, 14AA0]
       - [0xC99D0, .rodata, 17650]
       - [0xC9CF0, .rodata, 1EB50]
-      - [0xC9F10, rodata, ../libultra/206B0]
-      - [0xC9F30, rodata, ../libultra/gu/perspective]
-      - [0xC9F40, rodata, ../libultra/gu/sinf]
-      - [0xC9F90, rodata, ../libultra/gu/cosf]
-      - [0xC9FE0, rodata, 24C60]
-      - [0xCA0E0, rodata, ../libultra/os/thread]
-      - [0xCA150, rodata, ../libultra/io/devmgr]
-      - [0xCA170, rodata]
-      - [0xCA180, rodata, ../libultra/rmon/xldtob]
+      - [0xC9F10, .rodata, ../libultra/206B0]
+      - [0xC9F30, .rodata, ../libultra/gu/perspective]
+      - [0xC9F40, .rodata, ../libultra/gu/sinf]
+      - [0xC9F90, .rodata, ../libultra/gu/cosf]
+      - [0xC9FE0, .rodata, 24C60]
+      - [0xCA0E0, rodata, 25F50] # handwritten
+      - [0xCA150, .rodata, ../libultra/io/devmgr]
+      - [0xCA170, rodata, __libm_qnan_f]
+      - [0xCA180, .rodata, ../libultra/rmon/xldtob]
       - [0xCA1E0, .rodata, ../libultra/2BDF0]
-      - [0xCA5A0, rodata, 2DF00]
-      - [0xCA650, rodata]
+      - [0xCA5A0, .rodata, 2DF00]
+      - [0xCA650, .rodata, ../libultra/os/stopthread]
 
       # DATA - game engine
       - [0xCA690, data, engine]