summaryrefslogtreecommitdiff
path: root/asm/SDK
diff options
context:
space:
mode:
Diffstat (limited to 'asm/SDK')
-rw-r--r--asm/SDK/CX/CXCompression.s351
-rw-r--r--asm/SDK/CX/CXUncompression.s114
2 files changed, 465 insertions, 0 deletions
diff --git a/asm/SDK/CX/CXCompression.s b/asm/SDK/CX/CXCompression.s
new file mode 100644
index 0000000..4eb692e
--- /dev/null
+++ b/asm/SDK/CX/CXCompression.s
@@ -0,0 +1,351 @@
+.include "macros.inc"
+
+.section .text, "ax" # 0x80006980 - 0x803E1E60
+
+.global CXCompressLZ
+CXCompressLZ:
+/* 802A2244 0029DEA4 94 21 FF B0 */ stwu r1, -0x50(r1)
+/* 802A2248 0029DEA8 7C 08 02 A6 */ mflr r0
+/* 802A224C 0029DEAC 90 01 00 54 */ stw r0, 0x54(r1)
+/* 802A2250 0029DEB0 39 61 00 50 */ addi r11, r1, 0x50
+/* 802A2254 0029DEB4 4B F2 4E BD */ bl _savegpr_21
+/* 802A2258 0029DEB8 3C 00 01 00 */ lis r0, 0x100
+/* 802A225C 0029DEBC 7C 77 1B 78 */ mr r23, r3
+/* 802A2260 0029DEC0 7C 04 00 40 */ cmplw r4, r0
+/* 802A2264 0029DEC4 7C 98 23 78 */ mr r24, r4
+/* 802A2268 0029DEC8 40 80 00 30 */ bge lbl_802A2298
+/* 802A226C 0029DECC 54 80 40 2E */ slwi r0, r4, 8
+/* 802A2270 0029DED0 3B 25 00 04 */ addi r25, r5, 4
+/* 802A2274 0029DED4 60 04 00 10 */ ori r4, r0, 0x10
+/* 802A2278 0029DED8 3B C0 00 04 */ li r30, 4
+/* 802A227C 0029DEDC 54 83 42 1E */ rlwinm r3, r4, 8, 8, 0xf
+/* 802A2280 0029DEE0 54 80 C4 2E */ rlwinm r0, r4, 0x18, 0x10, 0x17
+/* 802A2284 0029DEE4 50 83 C0 C6 */ rlwimi r3, r4, 0x18, 3, 3
+/* 802A2288 0029DEE8 50 80 46 3E */ rlwimi r0, r4, 8, 0x18, 0x1f
+/* 802A228C 0029DEEC 7C 60 03 78 */ or r0, r3, r0
+/* 802A2290 0029DEF0 90 05 00 00 */ stw r0, 0(r5)
+/* 802A2294 0029DEF4 48 00 00 2C */ b lbl_802A22C0
+lbl_802A2298:
+/* 802A2298 0029DEF8 54 83 42 1E */ rlwinm r3, r4, 8, 8, 0xf
+/* 802A229C 0029DEFC 54 80 C4 2E */ rlwinm r0, r4, 0x18, 0x10, 0x17
+/* 802A22A0 0029DF00 3C E0 10 00 */ lis r7, 0x1000
+/* 802A22A4 0029DF04 3B 25 00 08 */ addi r25, r5, 8
+/* 802A22A8 0029DF08 50 83 C0 0E */ rlwimi r3, r4, 0x18, 0, 7
+/* 802A22AC 0029DF0C 50 80 46 3E */ rlwimi r0, r4, 8, 0x18, 0x1f
+/* 802A22B0 0029DF10 7C 60 03 78 */ or r0, r3, r0
+/* 802A22B4 0029DF14 90 E5 00 00 */ stw r7, 0(r5)
+/* 802A22B8 0029DF18 3B C0 00 08 */ li r30, 8
+/* 802A22BC 0029DF1C 90 05 00 04 */ stw r0, 4(r5)
+lbl_802A22C0:
+/* 802A22C0 0029DF20 38 E6 20 00 */ addi r7, r6, 0x2000
+/* 802A22C4 0029DF24 38 A6 22 00 */ addi r5, r6, 0x2200
+/* 802A22C8 0029DF28 38 80 00 20 */ li r4, 0x20
+/* 802A22CC 0029DF2C 7F 1A C3 78 */ mr r26, r24
+/* 802A22D0 0029DF30 90 C1 00 14 */ stw r6, 0x14(r1)
+/* 802A22D4 0029DF34 38 60 00 00 */ li r3, 0
+/* 802A22D8 0029DF38 38 00 FF FF */ li r0, -1
+/* 802A22DC 0029DF3C 90 E1 00 18 */ stw r7, 0x18(r1)
+/* 802A22E0 0029DF40 90 A1 00 1C */ stw r5, 0x1c(r1)
+/* 802A22E4 0029DF44 7C 89 03 A6 */ mtctr r4
+lbl_802A22E8:
+/* 802A22E8 0029DF48 80 A1 00 18 */ lwz r5, 0x18(r1)
+/* 802A22EC 0029DF4C 54 64 0B FC */ rlwinm r4, r3, 1, 0xf, 0x1e
+/* 802A22F0 0029DF50 38 63 00 08 */ addi r3, r3, 8
+/* 802A22F4 0029DF54 7C 05 23 2E */ sthx r0, r5, r4
+/* 802A22F8 0029DF58 80 A1 00 1C */ lwz r5, 0x1c(r1)
+/* 802A22FC 0029DF5C 7C 05 23 2E */ sthx r0, r5, r4
+/* 802A2300 0029DF60 80 A1 00 18 */ lwz r5, 0x18(r1)
+/* 802A2304 0029DF64 7C A5 22 14 */ add r5, r5, r4
+/* 802A2308 0029DF68 B0 05 00 02 */ sth r0, 2(r5)
+/* 802A230C 0029DF6C 80 A1 00 1C */ lwz r5, 0x1c(r1)
+/* 802A2310 0029DF70 7C A5 22 14 */ add r5, r5, r4
+/* 802A2314 0029DF74 B0 05 00 02 */ sth r0, 2(r5)
+/* 802A2318 0029DF78 80 A1 00 18 */ lwz r5, 0x18(r1)
+/* 802A231C 0029DF7C 7C A5 22 14 */ add r5, r5, r4
+/* 802A2320 0029DF80 B0 05 00 04 */ sth r0, 4(r5)
+/* 802A2324 0029DF84 80 A1 00 1C */ lwz r5, 0x1c(r1)
+/* 802A2328 0029DF88 7C A5 22 14 */ add r5, r5, r4
+/* 802A232C 0029DF8C B0 05 00 04 */ sth r0, 4(r5)
+/* 802A2330 0029DF90 80 A1 00 18 */ lwz r5, 0x18(r1)
+/* 802A2334 0029DF94 7C A5 22 14 */ add r5, r5, r4
+/* 802A2338 0029DF98 B0 05 00 06 */ sth r0, 6(r5)
+/* 802A233C 0029DF9C 80 A1 00 1C */ lwz r5, 0x1c(r1)
+/* 802A2340 0029DFA0 7C A5 22 14 */ add r5, r5, r4
+/* 802A2344 0029DFA4 B0 05 00 06 */ sth r0, 6(r5)
+/* 802A2348 0029DFA8 80 A1 00 18 */ lwz r5, 0x18(r1)
+/* 802A234C 0029DFAC 7C A5 22 14 */ add r5, r5, r4
+/* 802A2350 0029DFB0 B0 05 00 08 */ sth r0, 8(r5)
+/* 802A2354 0029DFB4 80 A1 00 1C */ lwz r5, 0x1c(r1)
+/* 802A2358 0029DFB8 7C A5 22 14 */ add r5, r5, r4
+/* 802A235C 0029DFBC B0 05 00 08 */ sth r0, 8(r5)
+/* 802A2360 0029DFC0 80 A1 00 18 */ lwz r5, 0x18(r1)
+/* 802A2364 0029DFC4 7C A5 22 14 */ add r5, r5, r4
+/* 802A2368 0029DFC8 B0 05 00 0A */ sth r0, 0xa(r5)
+/* 802A236C 0029DFCC 80 A1 00 1C */ lwz r5, 0x1c(r1)
+/* 802A2370 0029DFD0 7C A5 22 14 */ add r5, r5, r4
+/* 802A2374 0029DFD4 B0 05 00 0A */ sth r0, 0xa(r5)
+/* 802A2378 0029DFD8 80 A1 00 18 */ lwz r5, 0x18(r1)
+/* 802A237C 0029DFDC 7C A5 22 14 */ add r5, r5, r4
+/* 802A2380 0029DFE0 B0 05 00 0C */ sth r0, 0xc(r5)
+/* 802A2384 0029DFE4 80 A1 00 1C */ lwz r5, 0x1c(r1)
+/* 802A2388 0029DFE8 7C A5 22 14 */ add r5, r5, r4
+/* 802A238C 0029DFEC B0 05 00 0C */ sth r0, 0xc(r5)
+/* 802A2390 0029DFF0 80 A1 00 18 */ lwz r5, 0x18(r1)
+/* 802A2394 0029DFF4 7C A5 22 14 */ add r5, r5, r4
+/* 802A2398 0029DFF8 B0 05 00 0E */ sth r0, 0xe(r5)
+/* 802A239C 0029DFFC 80 A1 00 1C */ lwz r5, 0x1c(r1)
+/* 802A23A0 0029E000 7C 85 22 14 */ add r4, r5, r4
+/* 802A23A4 0029E004 B0 04 00 0E */ sth r0, 0xe(r4)
+/* 802A23A8 0029E008 42 00 FF 40 */ bdnz lbl_802A22E8
+/* 802A23AC 0029E00C 38 00 00 00 */ li r0, 0
+/* 802A23B0 0029E010 B0 01 00 10 */ sth r0, 0x10(r1)
+/* 802A23B4 0029E014 B0 01 00 12 */ sth r0, 0x12(r1)
+/* 802A23B8 0029E018 48 00 01 04 */ b lbl_802A24BC
+lbl_802A23BC:
+/* 802A23BC 0029E01C 7F 3C CB 78 */ mr r28, r25
+/* 802A23C0 0029E020 3B A0 00 00 */ li r29, 0
+/* 802A23C4 0029E024 3B 60 00 00 */ li r27, 0
+/* 802A23C8 0029E028 3B 39 00 01 */ addi r25, r25, 1
+/* 802A23CC 0029E02C 3B DE 00 01 */ addi r30, r30, 1
+lbl_802A23D0:
+/* 802A23D0 0029E030 2C 18 00 00 */ cmpwi r24, 0
+/* 802A23D4 0029E034 57 BD 0E 3C */ rlwinm r29, r29, 1, 0x18, 0x1e
+/* 802A23D8 0029E038 41 82 00 D4 */ beq lbl_802A24AC
+/* 802A23DC 0029E03C 7E E4 BB 78 */ mr r4, r23
+/* 802A23E0 0029E040 7F 05 C3 78 */ mr r5, r24
+/* 802A23E4 0029E044 38 61 00 10 */ addi r3, r1, 0x10
+/* 802A23E8 0029E048 38 C1 00 08 */ addi r6, r1, 8
+/* 802A23EC 0029E04C 48 00 01 1D */ bl SearchLZ
+/* 802A23F0 0029E050 54 7F 06 3F */ clrlwi. r31, r3, 0x18
+/* 802A23F4 0029E054 41 82 00 80 */ beq lbl_802A2474
+/* 802A23F8 0029E058 38 1E 00 02 */ addi r0, r30, 2
+/* 802A23FC 0029E05C 63 BD 00 01 */ ori r29, r29, 1
+/* 802A2400 0029E060 7C 00 D0 40 */ cmplw r0, r26
+/* 802A2404 0029E064 41 80 00 0C */ blt lbl_802A2410
+/* 802A2408 0029E068 38 60 00 00 */ li r3, 0
+/* 802A240C 0029E06C 48 00 00 E4 */ b lbl_802A24F0
+lbl_802A2410:
+/* 802A2410 0029E070 A0 61 00 08 */ lhz r3, 8(r1)
+/* 802A2414 0029E074 38 1F FF FD */ addi r0, r31, -3
+/* 802A2418 0029E078 54 04 20 36 */ slwi r4, r0, 4
+/* 802A241C 0029E07C 7E F6 BB 78 */ mr r22, r23
+/* 802A2420 0029E080 38 03 FF FF */ addi r0, r3, -1
+/* 802A2424 0029E084 3A A0 00 00 */ li r21, 0
+/* 802A2428 0029E088 7C 00 46 70 */ srawi r0, r0, 8
+/* 802A242C 0029E08C 3B DE 00 02 */ addi r30, r30, 2
+/* 802A2430 0029E090 7C 80 03 78 */ or r0, r4, r0
+/* 802A2434 0029E094 98 19 00 00 */ stb r0, 0(r25)
+/* 802A2438 0029E098 A0 61 00 08 */ lhz r3, 8(r1)
+/* 802A243C 0029E09C 38 03 FF FF */ addi r0, r3, -1
+/* 802A2440 0029E0A0 98 19 00 01 */ stb r0, 1(r25)
+/* 802A2444 0029E0A4 3B 39 00 02 */ addi r25, r25, 2
+/* 802A2448 0029E0A8 48 00 00 18 */ b lbl_802A2460
+lbl_802A244C:
+/* 802A244C 0029E0AC 7E C4 B3 78 */ mr r4, r22
+/* 802A2450 0029E0B0 38 61 00 10 */ addi r3, r1, 0x10
+/* 802A2454 0029E0B4 3A D6 00 01 */ addi r22, r22, 1
+/* 802A2458 0029E0B8 48 00 01 F9 */ bl SlideByte
+/* 802A245C 0029E0BC 3A B5 00 01 */ addi r21, r21, 1
+lbl_802A2460:
+/* 802A2460 0029E0C0 7C 15 F8 40 */ cmplw r21, r31
+/* 802A2464 0029E0C4 41 80 FF E8 */ blt lbl_802A244C
+/* 802A2468 0029E0C8 7E F7 FA 14 */ add r23, r23, r31
+/* 802A246C 0029E0CC 7F 1F C0 50 */ subf r24, r31, r24
+/* 802A2470 0029E0D0 48 00 00 3C */ b lbl_802A24AC
+lbl_802A2474:
+/* 802A2474 0029E0D4 38 1E 00 01 */ addi r0, r30, 1
+/* 802A2478 0029E0D8 7C 00 D0 40 */ cmplw r0, r26
+/* 802A247C 0029E0DC 41 80 00 0C */ blt lbl_802A2488
+/* 802A2480 0029E0E0 38 60 00 00 */ li r3, 0
+/* 802A2484 0029E0E4 48 00 00 6C */ b lbl_802A24F0
+lbl_802A2488:
+/* 802A2488 0029E0E8 7E E4 BB 78 */ mr r4, r23
+/* 802A248C 0029E0EC 38 61 00 10 */ addi r3, r1, 0x10
+/* 802A2490 0029E0F0 48 00 01 C1 */ bl SlideByte
+/* 802A2494 0029E0F4 88 17 00 00 */ lbz r0, 0(r23)
+/* 802A2498 0029E0F8 3B 18 FF FF */ addi r24, r24, -1
+/* 802A249C 0029E0FC 3B DE 00 01 */ addi r30, r30, 1
+/* 802A24A0 0029E100 3A F7 00 01 */ addi r23, r23, 1
+/* 802A24A4 0029E104 98 19 00 00 */ stb r0, 0(r25)
+/* 802A24A8 0029E108 3B 39 00 01 */ addi r25, r25, 1
+lbl_802A24AC:
+/* 802A24AC 0029E10C 3B 7B 00 01 */ addi r27, r27, 1
+/* 802A24B0 0029E110 28 1B 00 08 */ cmplwi r27, 8
+/* 802A24B4 0029E114 41 80 FF 1C */ blt lbl_802A23D0
+/* 802A24B8 0029E118 9B BC 00 00 */ stb r29, 0(r28)
+lbl_802A24BC:
+/* 802A24BC 0029E11C 2C 18 00 00 */ cmpwi r24, 0
+/* 802A24C0 0029E120 40 82 FE FC */ bne lbl_802A23BC
+/* 802A24C4 0029E124 38 80 00 00 */ li r4, 0
+/* 802A24C8 0029E128 38 60 00 00 */ li r3, 0
+/* 802A24CC 0029E12C 48 00 00 10 */ b lbl_802A24DC
+lbl_802A24D0:
+/* 802A24D0 0029E130 98 79 00 00 */ stb r3, 0(r25)
+/* 802A24D4 0029E134 3B 39 00 01 */ addi r25, r25, 1
+/* 802A24D8 0029E138 38 84 00 01 */ addi r4, r4, 1
+lbl_802A24DC:
+/* 802A24DC 0029E13C 54 80 06 3E */ clrlwi r0, r4, 0x18
+/* 802A24E0 0029E140 7C 1E 02 14 */ add r0, r30, r0
+/* 802A24E4 0029E144 54 00 07 BF */ clrlwi. r0, r0, 0x1e
+/* 802A24E8 0029E148 40 82 FF E8 */ bne lbl_802A24D0
+/* 802A24EC 0029E14C 7F C3 F3 78 */ mr r3, r30
+lbl_802A24F0:
+/* 802A24F0 0029E150 39 61 00 50 */ addi r11, r1, 0x50
+/* 802A24F4 0029E154 4B F2 4C 69 */ bl _restgpr_21
+/* 802A24F8 0029E158 80 01 00 54 */ lwz r0, 0x54(r1)
+/* 802A24FC 0029E15C 7C 08 03 A6 */ mtlr r0
+/* 802A2500 0029E160 38 21 00 50 */ addi r1, r1, 0x50
+/* 802A2504 0029E164 4E 80 00 20 */ blr
+
+SearchLZ:
+/* 802A2508 0029E168 94 21 FF E0 */ stwu r1, -0x20(r1)
+/* 802A250C 0029E16C 7C 08 02 A6 */ mflr r0
+/* 802A2510 0029E170 90 01 00 24 */ stw r0, 0x24(r1)
+/* 802A2514 0029E174 39 61 00 20 */ addi r11, r1, 0x20
+/* 802A2518 0029E178 4B F2 4C 11 */ bl _savegpr_27
+/* 802A251C 0029E17C 28 05 00 03 */ cmplwi r5, 3
+/* 802A2520 0029E180 80 E3 00 04 */ lwz r7, 4(r3)
+/* 802A2524 0029E184 A1 63 00 00 */ lhz r11, 0(r3)
+/* 802A2528 0029E188 38 00 00 02 */ li r0, 2
+/* 802A252C 0029E18C A1 03 00 02 */ lhz r8, 2(r3)
+/* 802A2530 0029E190 40 80 00 0C */ bge lbl_802A253C
+/* 802A2534 0029E194 38 60 00 00 */ li r3, 0
+/* 802A2538 0029E198 48 00 01 00 */ b lbl_802A2638
+lbl_802A253C:
+/* 802A253C 0029E19C 89 24 00 00 */ lbz r9, 0(r4)
+/* 802A2540 0029E1A0 7D 08 20 50 */ subf r8, r8, r4
+/* 802A2544 0029E1A4 81 43 00 08 */ lwz r10, 8(r3)
+/* 802A2548 0029E1A8 7D 8B 20 50 */ subf r12, r11, r4
+/* 802A254C 0029E1AC 55 23 08 3C */ slwi r3, r9, 1
+/* 802A2550 0029E1B0 7D 2B 40 50 */ subf r9, r11, r8
+/* 802A2554 0029E1B4 7F 6A 1A AE */ lhax r27, r10, r3
+/* 802A2558 0029E1B8 48 00 00 BC */ b lbl_802A2614
+lbl_802A255C:
+/* 802A255C 0029E1BC 7C 1B 58 00 */ cmpw r27, r11
+/* 802A2560 0029E1C0 40 80 00 0C */ bge lbl_802A256C
+/* 802A2564 0029E1C4 7F EC DA 14 */ add r31, r12, r27
+/* 802A2568 0029E1C8 48 00 00 08 */ b lbl_802A2570
+lbl_802A256C:
+/* 802A256C 0029E1CC 7F E9 DA 14 */ add r31, r9, r27
+lbl_802A2570:
+/* 802A2570 0029E1D0 89 1F 00 01 */ lbz r8, 1(r31)
+/* 802A2574 0029E1D4 88 64 00 01 */ lbz r3, 1(r4)
+/* 802A2578 0029E1D8 7C 08 18 40 */ cmplw r8, r3
+/* 802A257C 0029E1DC 40 82 00 14 */ bne lbl_802A2590
+/* 802A2580 0029E1E0 89 1F 00 02 */ lbz r8, 2(r31)
+/* 802A2584 0029E1E4 88 64 00 02 */ lbz r3, 2(r4)
+/* 802A2588 0029E1E8 7C 08 18 40 */ cmplw r8, r3
+/* 802A258C 0029E1EC 41 82 00 10 */ beq lbl_802A259C
+lbl_802A2590:
+/* 802A2590 0029E1F0 57 63 08 3C */ slwi r3, r27, 1
+/* 802A2594 0029E1F4 7F 67 1A AE */ lhax r27, r7, r3
+/* 802A2598 0029E1F8 48 00 00 7C */ b lbl_802A2614
+lbl_802A259C:
+/* 802A259C 0029E1FC 7D 5F 20 50 */ subf r10, r31, r4
+/* 802A25A0 0029E200 2C 0A 00 02 */ cmpwi r10, 2
+/* 802A25A4 0029E204 41 80 00 78 */ blt lbl_802A261C
+/* 802A25A8 0029E208 3B DF 00 03 */ addi r30, r31, 3
+/* 802A25AC 0029E20C 3B E4 00 03 */ addi r31, r4, 3
+/* 802A25B0 0029E210 3B 80 00 03 */ li r28, 3
+/* 802A25B4 0029E214 48 00 00 1C */ b lbl_802A25D0
+lbl_802A25B8:
+/* 802A25B8 0029E218 3B 9C 00 01 */ addi r28, r28, 1
+/* 802A25BC 0029E21C 3B FF 00 01 */ addi r31, r31, 1
+/* 802A25C0 0029E220 57 83 06 3E */ clrlwi r3, r28, 0x18
+/* 802A25C4 0029E224 3B DE 00 01 */ addi r30, r30, 1
+/* 802A25C8 0029E228 28 03 00 12 */ cmplwi r3, 0x12
+/* 802A25CC 0029E22C 41 82 00 20 */ beq lbl_802A25EC
+lbl_802A25D0:
+/* 802A25D0 0029E230 7C 64 F8 50 */ subf r3, r4, r31
+/* 802A25D4 0029E234 7C 03 28 40 */ cmplw r3, r5
+/* 802A25D8 0029E238 40 80 00 14 */ bge lbl_802A25EC
+/* 802A25DC 0029E23C 89 1F 00 00 */ lbz r8, 0(r31)
+/* 802A25E0 0029E240 88 7E 00 00 */ lbz r3, 0(r30)
+/* 802A25E4 0029E244 7C 08 18 40 */ cmplw r8, r3
+/* 802A25E8 0029E248 41 82 FF D0 */ beq lbl_802A25B8
+lbl_802A25EC:
+/* 802A25EC 0029E24C 57 88 06 3E */ clrlwi r8, r28, 0x18
+/* 802A25F0 0029E250 54 03 06 3E */ clrlwi r3, r0, 0x18
+/* 802A25F4 0029E254 7C 08 18 40 */ cmplw r8, r3
+/* 802A25F8 0029E258 40 81 00 14 */ ble lbl_802A260C
+/* 802A25FC 0029E25C 28 08 00 12 */ cmplwi r8, 0x12
+/* 802A2600 0029E260 7F 80 E3 78 */ mr r0, r28
+/* 802A2604 0029E264 55 5D 04 3E */ clrlwi r29, r10, 0x10
+/* 802A2608 0029E268 41 82 00 14 */ beq lbl_802A261C
+lbl_802A260C:
+/* 802A260C 0029E26C 57 63 08 3C */ slwi r3, r27, 1
+/* 802A2610 0029E270 7F 67 1A AE */ lhax r27, r7, r3
+lbl_802A2614:
+/* 802A2614 0029E274 2C 1B FF FF */ cmpwi r27, -1
+/* 802A2618 0029E278 40 82 FF 44 */ bne lbl_802A255C
+lbl_802A261C:
+/* 802A261C 0029E27C 54 03 06 3E */ clrlwi r3, r0, 0x18
+/* 802A2620 0029E280 28 03 00 03 */ cmplwi r3, 3
+/* 802A2624 0029E284 40 80 00 0C */ bge lbl_802A2630
+/* 802A2628 0029E288 38 60 00 00 */ li r3, 0
+/* 802A262C 0029E28C 48 00 00 0C */ b lbl_802A2638
+lbl_802A2630:
+/* 802A2630 0029E290 B3 A6 00 00 */ sth r29, 0(r6)
+/* 802A2634 0029E294 7C 03 03 78 */ mr r3, r0
+lbl_802A2638:
+/* 802A2638 0029E298 39 61 00 20 */ addi r11, r1, 0x20
+/* 802A263C 0029E29C 4B F2 4B 39 */ bl _restgpr_27
+/* 802A2640 0029E2A0 80 01 00 24 */ lwz r0, 0x24(r1)
+/* 802A2644 0029E2A4 7C 08 03 A6 */ mtlr r0
+/* 802A2648 0029E2A8 38 21 00 20 */ addi r1, r1, 0x20
+/* 802A264C 0029E2AC 4E 80 00 20 */ blr
+
+SlideByte:
+/* 802A2650 0029E2B0 A0 A3 00 02 */ lhz r5, 2(r3)
+/* 802A2654 0029E2B4 88 E4 00 00 */ lbz r7, 0(r4)
+/* 802A2658 0029E2B8 28 05 10 00 */ cmplwi r5, 0x1000
+/* 802A265C 0029E2BC 81 23 00 08 */ lwz r9, 8(r3)
+/* 802A2660 0029E2C0 81 43 00 04 */ lwz r10, 4(r3)
+/* 802A2664 0029E2C4 81 63 00 0C */ lwz r11, 0xc(r3)
+/* 802A2668 0029E2C8 A0 C3 00 00 */ lhz r6, 0(r3)
+/* 802A266C 0029E2CC 40 82 00 34 */ bne lbl_802A26A0
+/* 802A2670 0029E2D0 88 04 F0 00 */ lbz r0, -0x1000(r4)
+/* 802A2674 0029E2D4 54 04 08 3C */ slwi r4, r0, 1
+/* 802A2678 0029E2D8 7C 09 22 AE */ lhax r0, r9, r4
+/* 802A267C 0029E2DC 54 00 08 3C */ slwi r0, r0, 1
+/* 802A2680 0029E2E0 7C 0A 02 AE */ lhax r0, r10, r0
+/* 802A2684 0029E2E4 2C 00 FF FF */ cmpwi r0, -1
+/* 802A2688 0029E2E8 7C 09 23 2E */ sthx r0, r9, r4
+/* 802A268C 0029E2EC 40 82 00 0C */ bne lbl_802A2698
+/* 802A2690 0029E2F0 38 00 FF FF */ li r0, -1
+/* 802A2694 0029E2F4 7C 0B 23 2E */ sthx r0, r11, r4
+lbl_802A2698:
+/* 802A2698 0029E2F8 7C C8 33 78 */ mr r8, r6
+/* 802A269C 0029E2FC 48 00 00 08 */ b lbl_802A26A4
+lbl_802A26A0:
+/* 802A26A0 0029E300 7C A8 2B 78 */ mr r8, r5
+lbl_802A26A4:
+/* 802A26A4 0029E304 54 E4 0D FC */ rlwinm r4, r7, 1, 0x17, 0x1e
+/* 802A26A8 0029E308 7C 0B 22 AE */ lhax r0, r11, r4
+/* 802A26AC 0029E30C 2C 00 FF FF */ cmpwi r0, -1
+/* 802A26B0 0029E310 40 82 00 0C */ bne lbl_802A26BC
+/* 802A26B4 0029E314 7D 09 23 2E */ sthx r8, r9, r4
+/* 802A26B8 0029E318 48 00 00 0C */ b lbl_802A26C4
+lbl_802A26BC:
+/* 802A26BC 0029E31C 54 00 08 3C */ slwi r0, r0, 1
+/* 802A26C0 0029E320 7D 0A 03 2E */ sthx r8, r10, r0
+lbl_802A26C4:
+/* 802A26C4 0029E324 7D 0B 23 2E */ sthx r8, r11, r4
+/* 802A26C8 0029E328 28 05 10 00 */ cmplwi r5, 0x1000
+/* 802A26CC 0029E32C 55 00 0B FC */ rlwinm r0, r8, 1, 0xf, 0x1e
+/* 802A26D0 0029E330 38 80 FF FF */ li r4, -1
+/* 802A26D4 0029E334 7C 8A 03 2E */ sthx r4, r10, r0
+/* 802A26D8 0029E338 40 82 00 24 */ bne lbl_802A26FC
+/* 802A26DC 0029E33C 38 86 00 01 */ addi r4, r6, 1
+/* 802A26E0 0029E340 54 80 A0 16 */ slwi r0, r4, 0x14
+/* 802A26E4 0029E344 54 84 0F FE */ srwi r4, r4, 0x1f
+/* 802A26E8 0029E348 7C 04 00 50 */ subf r0, r4, r0
+/* 802A26EC 0029E34C 54 00 60 3E */ rotlwi r0, r0, 0xc
+/* 802A26F0 0029E350 7C 00 22 14 */ add r0, r0, r4
+/* 802A26F4 0029E354 B0 03 00 00 */ sth r0, 0(r3)
+/* 802A26F8 0029E358 4E 80 00 20 */ blr
+lbl_802A26FC:
+/* 802A26FC 0029E35C A0 83 00 02 */ lhz r4, 2(r3)
+/* 802A2700 0029E360 38 04 00 01 */ addi r0, r4, 1
+/* 802A2704 0029E364 B0 03 00 02 */ sth r0, 2(r3)
+/* 802A2708 0029E368 4E 80 00 20 */ blr
diff --git a/asm/SDK/CX/CXUncompression.s b/asm/SDK/CX/CXUncompression.s
new file mode 100644
index 0000000..ed93fe0
--- /dev/null
+++ b/asm/SDK/CX/CXUncompression.s
@@ -0,0 +1,114 @@
+.include "macros.inc"
+
+.section .text, "ax" # 0x80006980 - 0x803E1E60
+
+.global CXGetUncompressedSize
+CXGetUncompressedSize:
+/* 802A270C 0029E36C 80 A3 00 00 */ lwz r5, 0(r3)
+/* 802A2710 0029E370 54 A4 42 1E */ rlwinm r4, r5, 8, 8, 0xf
+/* 802A2714 0029E374 54 A0 C4 2E */ rlwinm r0, r5, 0x18, 0x10, 0x17
+/* 802A2718 0029E378 50 A4 C0 0E */ rlwimi r4, r5, 0x18, 0, 7
+/* 802A271C 0029E37C 50 A0 46 3E */ rlwimi r0, r5, 8, 0x18, 0x1f
+/* 802A2720 0029E380 7C 80 03 78 */ or r0, r4, r0
+/* 802A2724 0029E384 54 00 C2 3F */ rlwinm. r0, r0, 0x18, 8, 0x1f
+/* 802A2728 0029E388 40 82 00 1C */ bne lbl_802A2744
+/* 802A272C 0029E38C 80 83 00 04 */ lwz r4, 4(r3)
+/* 802A2730 0029E390 54 83 42 1E */ rlwinm r3, r4, 8, 8, 0xf
+/* 802A2734 0029E394 54 80 C4 2E */ rlwinm r0, r4, 0x18, 0x10, 0x17
+/* 802A2738 0029E398 50 83 C0 0E */ rlwimi r3, r4, 0x18, 0, 7
+/* 802A273C 0029E39C 50 80 46 3E */ rlwimi r0, r4, 8, 0x18, 0x1f
+/* 802A2740 0029E3A0 7C 60 03 78 */ or r0, r3, r0
+lbl_802A2744:
+/* 802A2744 0029E3A4 7C 03 03 78 */ mr r3, r0
+/* 802A2748 0029E3A8 4E 80 00 20 */ blr
+
+# todo: confirm that this symbol is correct
+.global CXUncompressLZ
+CXUncompressLZ:
+/* 802A274C 0029E3AC 80 A3 00 00 */ lwz r5, 0(r3)
+/* 802A2750 0029E3B0 38 E3 00 04 */ addi r7, r3, 4
+/* 802A2754 0029E3B4 54 A3 42 1E */ rlwinm r3, r5, 8, 8, 0xf
+/* 802A2758 0029E3B8 54 A0 C4 2E */ rlwinm r0, r5, 0x18, 0x10, 0x17
+/* 802A275C 0029E3BC 50 A3 C0 0E */ rlwimi r3, r5, 0x18, 0, 7
+/* 802A2760 0029E3C0 50 A0 46 3E */ rlwimi r0, r5, 8, 0x18, 0x1f
+/* 802A2764 0029E3C4 7C 60 03 78 */ or r0, r3, r0
+/* 802A2768 0029E3C8 54 08 C2 3F */ rlwinm. r8, r0, 0x18, 8, 0x1f
+/* 802A276C 0029E3CC 40 82 00 20 */ bne lbl_802A278C
+/* 802A2770 0029E3D0 80 A7 00 00 */ lwz r5, 0(r7)
+/* 802A2774 0029E3D4 38 E7 00 04 */ addi r7, r7, 4
+/* 802A2778 0029E3D8 54 A3 42 1E */ rlwinm r3, r5, 8, 8, 0xf
+/* 802A277C 0029E3DC 54 A0 C4 2E */ rlwinm r0, r5, 0x18, 0x10, 0x17
+/* 802A2780 0029E3E0 50 A3 C0 0E */ rlwimi r3, r5, 0x18, 0, 7
+/* 802A2784 0029E3E4 50 A0 46 3E */ rlwimi r0, r5, 8, 0x18, 0x1f
+/* 802A2788 0029E3E8 7C 68 03 78 */ or r8, r3, r0
+lbl_802A278C:
+/* 802A278C 0029E3EC 38 00 00 04 */ li r0, 4
+/* 802A2790 0029E3F0 48 00 00 E4 */ b lbl_802A2874
+lbl_802A2794:
+/* 802A2794 0029E3F4 89 47 00 00 */ lbz r10, 0(r7)
+/* 802A2798 0029E3F8 39 20 00 00 */ li r9, 0
+/* 802A279C 0029E3FC 7C 09 03 A6 */ mtctr r0
+/* 802A27A0 0029E400 38 E7 00 01 */ addi r7, r7, 1
+lbl_802A27A4:
+/* 802A27A4 0029E404 55 43 06 31 */ rlwinm. r3, r10, 0, 0x18, 0x18
+/* 802A27A8 0029E408 40 82 00 1C */ bne lbl_802A27C4
+/* 802A27AC 0029E40C 88 67 00 00 */ lbz r3, 0(r7)
+/* 802A27B0 0029E410 39 08 FF FF */ addi r8, r8, -1
+/* 802A27B4 0029E414 38 E7 00 01 */ addi r7, r7, 1
+/* 802A27B8 0029E418 98 64 00 00 */ stb r3, 0(r4)
+/* 802A27BC 0029E41C 38 84 00 01 */ addi r4, r4, 1
+/* 802A27C0 0029E420 48 00 00 3C */ b lbl_802A27FC
+lbl_802A27C4:
+/* 802A27C4 0029E424 88 C7 00 00 */ lbz r6, 0(r7)
+/* 802A27C8 0029E428 88 67 00 01 */ lbz r3, 1(r7)
+/* 802A27CC 0029E42C 38 E7 00 02 */ addi r7, r7, 2
+/* 802A27D0 0029E430 7C C5 26 70 */ srawi r5, r6, 4
+/* 802A27D4 0029E434 50 C3 45 2E */ rlwimi r3, r6, 8, 0x14, 0x17
+/* 802A27D8 0029E438 38 C5 00 03 */ addi r6, r5, 3
+/* 802A27DC 0029E43C 38 A3 00 01 */ addi r5, r3, 1
+/* 802A27E0 0029E440 7D 06 40 50 */ subf r8, r6, r8
+lbl_802A27E4:
+/* 802A27E4 0029E444 7C 65 20 50 */ subf r3, r5, r4
+/* 802A27E8 0029E448 34 C6 FF FF */ addic. r6, r6, -1
+/* 802A27EC 0029E44C 88 63 00 00 */ lbz r3, 0(r3)
+/* 802A27F0 0029E450 98 64 00 00 */ stb r3, 0(r4)
+/* 802A27F4 0029E454 38 84 00 01 */ addi r4, r4, 1
+/* 802A27F8 0029E458 41 81 FF EC */ bgt lbl_802A27E4
+lbl_802A27FC:
+/* 802A27FC 0029E45C 2C 08 00 00 */ cmpwi r8, 0
+/* 802A2800 0029E460 41 82 00 74 */ beq lbl_802A2874
+/* 802A2804 0029E464 55 4A 08 3C */ slwi r10, r10, 1
+/* 802A2808 0029E468 55 43 06 31 */ rlwinm. r3, r10, 0, 0x18, 0x18
+/* 802A280C 0029E46C 40 82 00 1C */ bne lbl_802A2828
+/* 802A2810 0029E470 88 67 00 00 */ lbz r3, 0(r7)
+/* 802A2814 0029E474 39 08 FF FF */ addi r8, r8, -1
+/* 802A2818 0029E478 38 E7 00 01 */ addi r7, r7, 1
+/* 802A281C 0029E47C 98 64 00 00 */ stb r3, 0(r4)
+/* 802A2820 0029E480 38 84 00 01 */ addi r4, r4, 1
+/* 802A2824 0029E484 48 00 00 3C */ b lbl_802A2860
+lbl_802A2828:
+/* 802A2828 0029E488 88 C7 00 00 */ lbz r6, 0(r7)
+/* 802A282C 0029E48C 88 67 00 01 */ lbz r3, 1(r7)
+/* 802A2830 0029E490 38 E7 00 02 */ addi r7, r7, 2
+/* 802A2834 0029E494 7C C5 26 70 */ srawi r5, r6, 4
+/* 802A2838 0029E498 50 C3 45 2E */ rlwimi r3, r6, 8, 0x14, 0x17
+/* 802A283C 0029E49C 38 C5 00 03 */ addi r6, r5, 3
+/* 802A2840 0029E4A0 38 A3 00 01 */ addi r5, r3, 1
+/* 802A2844 0029E4A4 7D 06 40 50 */ subf r8, r6, r8
+lbl_802A2848:
+/* 802A2848 0029E4A8 7C 65 20 50 */ subf r3, r5, r4
+/* 802A284C 0029E4AC 34 C6 FF FF */ addic. r6, r6, -1
+/* 802A2850 0029E4B0 88 63 00 00 */ lbz r3, 0(r3)
+/* 802A2854 0029E4B4 98 64 00 00 */ stb r3, 0(r4)
+/* 802A2858 0029E4B8 38 84 00 01 */ addi r4, r4, 1
+/* 802A285C 0029E4BC 41 81 FF EC */ bgt lbl_802A2848
+lbl_802A2860:
+/* 802A2860 0029E4C0 2C 08 00 00 */ cmpwi r8, 0
+/* 802A2864 0029E4C4 41 82 00 10 */ beq lbl_802A2874
+/* 802A2868 0029E4C8 55 4A 08 3C */ slwi r10, r10, 1
+/* 802A286C 0029E4CC 39 29 00 01 */ addi r9, r9, 1
+/* 802A2870 0029E4D0 42 00 FF 34 */ bdnz lbl_802A27A4
+lbl_802A2874:
+/* 802A2874 0029E4D4 2C 08 00 00 */ cmpwi r8, 0
+/* 802A2878 0029E4D8 40 82 FF 1C */ bne lbl_802A2794
+/* 802A287C 0029E4DC 4E 80 00 20 */ blr