├── .gitignore ├── 0x81300F50.txt ├── 0x813012D0 - DEMOInit.txt ├── 0x813022F4.txt ├── 0x813025A4.txt ├── 0x81302D2C.txt ├── 0x81307B0C.txt ├── 0x81307D90 - Heap.txt ├── 0x81307E40.txt ├── 0x81307EB8.TXT ├── 0x81308208.txt ├── 0x8130B84C.txt ├── 0x8130BCB4.txt ├── 0x8130BEE8 - BIG.txt ├── 0x8131C5C4.txt ├── 0x8135B160.txt ├── BS2Mach_12.txt ├── BS2Main.c ├── BS2Main_Subcalls ├── 0x81307E1C - DumpHeap.txt ├── 0x8130A86C.txt ├── 0x8130A87C.txt ├── 0x8130AAEC.txt ├── 0x8130BDA0.txt └── list.txt ├── Bootstrap ├── Bootstrap.lcf ├── Bootstrap.mcp ├── boot.s ├── bs.bin └── extract_text.bat ├── Build_Instructions.txt ├── DVDLoader.c ├── DVDLoader.h ├── DVDLoader.txt ├── Heap.c ├── Heap.h ├── IPL.lcf ├── IPL.mcp ├── Jaudio ├── Readme.md ├── aictrl.c ├── aramcall.c ├── astest.c ├── audiothread.c ├── autoload.c ├── bankdrv.c ├── bankloader.c ├── bankread.c ├── ipldec.c ├── ja_calc.c ├── os.c ├── rspsim.c ├── syncstream.c ├── system.c ├── virload.c └── waveread.c ├── MainLoop ├── 0x81301100.txt ├── 0x81301468 - DEMOBeforeRender.txt ├── 0x813015A4.txt ├── 0x81301604 - DEMODoneRender.txt ├── 0x81301644.txt ├── 0x81301724.txt ├── 0x813020C8 - InitDVDLoader.txt ├── 0x813022C4.txt ├── 0x81302368 - BIG.txt ├── 0x81302B24 - DEMOPadRead.txt ├── 0x81302DF0.txt ├── 0x81302FA0.txt ├── 0x8130903C.txt ├── 0x8130BDB8.txt ├── 0x8130BE78.txt ├── 0x8130BEDC.txt ├── 0x8131C268.txt └── SubCalls │ └── list.txt ├── README.md ├── calltree.txt ├── font_compress ├── .gitignore ├── CommonDefs.h ├── SZP.cpp ├── SZP.h ├── main.cpp ├── main.sln └── main.vcxproj ├── images ├── bootrom.jpg ├── font_00.jpg ├── font_01.jpg ├── font_02.jpg ├── font_03.jpg ├── font_04.jpg ├── font_05.jpg ├── font_06.jpg ├── font_07.jpg ├── font_08.jpg ├── font_09.jpg ├── iplmenu.jpg └── tumblr_lrxomiSQsX1qkyzcdo1_500.gif ├── main.c ├── oslomem.h ├── ossram.h └── wiki ├── BS2Main_sub1.md ├── Descrambler.md ├── FontCompress.md └── main.md /.gitignore: -------------------------------------------------------------------------------- 1 | temp -------------------------------------------------------------------------------- /0x81300F50.txt: -------------------------------------------------------------------------------- 1 | 81300F50 C0028000 lfs fr0, -0x8000 (r2) 2 | 81300F54 39400001 li r10, 1 3 | 81300F58 39200000 li r9, 0 4 | 81300F5C D0030000 stfs fr0, 0 (r3) 5 | 81300F60 39000008 li r8, 8 6 | 81300F64 38E00006 li r7, 6 7 | 81300F68 C0028004 lfs fr0, -0x7FFC (r2) 8 | 81300F6C 38C00023 li r6, 35 9 | 81300F70 38A0000A li r5, 10 10 | 81300F74 D0030004 stfs fr0, 4 (r3) 11 | 81300F78 388000FF li r4, 255 12 | 81300F7C 38000046 li r0, 70 13 | 81300F80 C0028008 lfs fr0, -0x7FF8 (r2) 14 | 81300F84 D0030008 stfs fr0, 8 (r3) 15 | 81300F88 C002800C lfs fr0, -0x7FF4 (r2) 16 | 81300F8C D003000C stfs fr0, 12 (r3) 17 | 81300F90 C0028010 lfs fr0, -0x7FF0 (r2) 18 | 81300F94 D0030010 stfs fr0, 16 (r3) 19 | 81300F98 D0030014 stfs fr0, 20 (r3) 20 | 81300F9C C0028014 lfs fr0, -0x7FEC (r2) 21 | 81300FA0 D0030018 stfs fr0, 24 (r3) 22 | 81300FA4 9943001C stb r10, 28 (r3) 23 | 81300FA8 9923001D stb r9, 29 (r3) 24 | 81300FAC 9943001E stb r10, 30 (r3) 25 | 81300FB0 C0028018 lfs fr0, -0x7FE8 (r2) 26 | 81300FB4 D0030020 stfs fr0, 32 (r3) 27 | 81300FB8 C002801C lfs fr0, -0x7FE4 (r2) 28 | 81300FBC D0030024 stfs fr0, 36 (r3) 29 | 81300FC0 99230028 stb r9, 40 (r3) 30 | 81300FC4 99230029 stb r9, 41 (r3) 31 | 81300FC8 9923002A stb r9, 42 (r3) 32 | 81300FCC 9903002B stb r8, 43 (r3) 33 | 81300FD0 B0E3002C sth r7, 44 (r3) 34 | 81300FD4 B0C3002E sth r6, 46 (r3) 35 | 81300FD8 B0A30030 sth r5, 48 (r3) 36 | 81300FDC B0830032 sth r4, 50 (r3) 37 | 81300FE0 B0030034 sth r0, 52 (r3) 38 | 81300FE4 B1230036 sth r9, 54 (r3) 39 | 81300FE8 B0C30038 sth r6, 56 (r3) 40 | 81300FEC B143003A sth r10, 58 (r3) 41 | 81300FF0 4E800020 blr -------------------------------------------------------------------------------- /0x813012D0 - DEMOInit.txt: -------------------------------------------------------------------------------- 1 | DEMOInit (1) 2 | HeapAlloc (1) 3 | OSAllocFromHeap (1) 4 | OSPanic (4) 5 | HeapAlloc (2) ... 6 | VIGetTvFormat (2) 7 | OSPanic (5) 8 | VIConfigure (1) 9 | HeapAlloc (3) ... 10 | GXInit (1) 11 | __DEMOInitGX (1) 12 | GXSetViewport (1) 13 | GXSetDispCopySrc (1) 14 | GXSetDispCopyDst (1) 15 | GXSetCopyFilter (1) 16 | GXSetPixelFmt (1) 17 | 0x81376CA0 (1) 18 | 0x81379B7C (1) 19 | GXSetCopyClamp (1) 20 | GXSetPixelFmt (2) 21 | 0x81376CA0 (2) 22 | GXSetScissor (1) 23 | GXSetCopyClear (1) 24 | GXCopyDisp (1) 25 | GXCopyDisp (2) 26 | GXCopyDisp (3) 27 | GXCopyDisp (4) 28 | GXSetDispCopyGamma (1) 29 | VISetBlack (1) 30 | VISetNextFrameBuffer (1) 31 | VIFlush (1) 32 | VIWaitForRetrace (1) 33 | 34 | DEMOInit 35 | 813012D0 7C0802A6 mflr r0 36 | 813012D4 90010004 stw r0, 4 (r1) 37 | 813012D8 9421FFD0 stwu r1, -48 (r1) 38 | 813012DC 93E1002C stw r31, 44 (r1) 39 | 813012E0 7C9F2378 mr r31, r4 40 | 813012E4 93C10028 stw r30, 40 (r1) 41 | 813012E8 93A10024 stw r29, 36 (r1) 42 | 813012EC 7C7D1B78 mr r29, r3 43 | 813012F0 A0840004 lhz r4, 4 (r4) 44 | 813012F4 A01F0008 lhz r0, 8 (r31) 45 | 813012F8 3864000F addi r3, r4, 15 46 | 813012FC 54630436 rlwinm r3, r3, 0, 16, 27 mask:0x0000FFF0 47 | 81301300 7C0301D6 mullw r0, r3, r0 48 | 81301304 541E083C rlwinm r30, r0, 1, 0, 30 mask:0xFFFFFFFE 49 | 81301308 387E0000 addi r3, r30, 0 50 | 8130130C 48006B35 bl HeapAlloc  51 | 81301310 906D82F0 stw r3, -0x7D10 (r13) 52 | 81301314 7FC3F378 mr r3, r30 53 | 81301318 48006B29 bl HeapAlloc  54 | 8130131C 906D82F4 stw r3, -0x7D0C (r13) 55 | 81301320 281F0000 cmplwi r31, 0 56 | 81301324 800D82F4 lwz r0, -0x7D0C (r13) 57 | 81301328 900D82F8 stw r0, -0x7D08 (r13) 58 | 8130132C 4182000C beq- 0x81301338  59 | 81301330 93ED82FC stw r31, -0x7D04 (r13) 60 | 81301334 48000074 b 0x813013A8  61 | 81301338 480691C1 bl VIGetTvFormat  62 | 8130133C 2C030001 cmpwi r3, 1 63 | 81301340 41820030 beq- 0x81301370  64 | 81301344 40800010 bge- 0x81301354  65 | 81301348 2C030000 cmpwi r3, 0 66 | 8130134C 40800014 bge- 0x81301360  67 | 81301350 48000040 b 0x81301390  68 | 81301354 2C030003 cmpwi r3, 3 69 | 81301358 40800038 bge- 0x81301390  70 | 8130135C 48000024 b 0x81301380  71 | 81301360 3C60814B lis r3, 0x814B 72 | 81301364 3803CA40 subi r0, r3, 0x35C0 73 | 81301368 900D82FC stw r0, -0x7D04 (r13) 74 | 8130136C 4800003C b 0x813013A8  75 | 81301370 3C60814B lis r3, 0x814B 76 | 81301374 3803CAB8 subi r0, r3, 0x3548 77 | 81301378 900D82FC stw r0, -0x7D04 (r13) 78 | 8130137C 4800002C b 0x813013A8  79 | 81301380 3C60814B lis r3, 0x814B 80 | 81301384 3803CA7C subi r0, r3, 0x3584 81 | 81301388 900D82FC stw r0, -0x7D04 (r13) 82 | 8130138C 4800001C b 0x813013A8  83 | 81301390 3C608138 lis r3, 0x8138 84 | 81301394 4CC63182 crclr 6 85 | 81301398 38A31010 addi r5, r3, 0x1010 86 | 8130139C 386D800C subi r3, r13, 0x7FF4 87 | 813013A0 38800066 li r4, 102 88 | 813013A4 4805C601 bl OSPanic  89 | 813013A8 7FE3FB78 mr r3, r31 90 | 813013AC 48068709 bl VIConfigure  91 | 813013B0 381D001F addi r0, r29, 31 92 | 813013B4 541E0034 rlwinm r30, r0, 0, 0, 26 mask:0xFFFFFFE0 93 | 813013B8 387E0000 addi r3, r30, 0 94 | 813013BC 48006A85 bl HeapAlloc  95 | 813013C0 906D8300 stw r3, -0x7D00 (r13) 96 | 813013C4 7FC4F378 mr r4, r30 97 | 813013C8 806D8300 lwz r3, -0x7D00 (r13) 98 | 813013CC 480720FD bl GXInit  99 | 813013D0 906D8304 stw r3, -0x7CFC (r13) 100 | 813013D4 7FE3FB78 mr r3, r31 101 | 813013D8 4BFFFDB9 bl __DEMOInitGX  102 | 813013DC 80028048 lwz r0, -0x7FB8 (r2) 103 | 813013E0 3C800100 lis r4, 0x0100 104 | 813013E4 38610014 addi r3, r1, 20 105 | 813013E8 90010018 stw r0, 24 (r1) 106 | 813013EC 3884FFFF subi r4, r4, 1 107 | 813013F0 80010018 lwz r0, 24 (r1) 108 | 813013F4 90010014 stw r0, 20 (r1) 109 | 813013F8 48075965 bl GXSetCopyClear  110 | 813013FC 806D82F0 lwz r3, -0x7D10 (r13) 111 | 81301400 38800001 li r4, 1 112 | 81301404 48075C05 bl GXCopyDisp  113 | 81301408 806D82F0 lwz r3, -0x7D10 (r13) 114 | 8130140C 38800001 li r4, 1 115 | 81301410 48075BF9 bl GXCopyDisp  116 | 81301414 806D82F4 lwz r3, -0x7D0C (r13) 117 | 81301418 38800001 li r4, 1 118 | 8130141C 48075BED bl GXCopyDisp  119 | 81301420 806D82F4 lwz r3, -0x7D0C (r13) 120 | 81301424 38800001 li r4, 1 121 | 81301428 48075BE1 bl GXCopyDisp  122 | 8130142C 38600000 li r3, 0 123 | 81301430 48075BBD bl GXSetDispCopyGamma  124 | 81301434 38600001 li r3, 1 125 | 81301438 48068E95 bl VISetBlack  126 | 8130143C 806D82F8 lwz r3, -0x7D08 (r13) 127 | 81301440 48068E21 bl VISetNextFrameBuffer  128 | 81301444 48068D01 bl VIFlush  129 | 81301448 480681A5 bl VIWaitForRetrace  130 | 8130144C 80010034 lwz r0, 52 (r1) 131 | 81301450 83E1002C lwz r31, 44 (r1) 132 | 81301454 83C10028 lwz r30, 40 (r1) 133 | 81301458 83A10024 lwz r29, 36 (r1) 134 | 8130145C 38210030 addi r1, r1, 48 135 | 81301460 7C0803A6 mtlr r0 136 | 81301464 4E800020 blr 137 | -------------------------------------------------------------------------------- /0x813022F4.txt: -------------------------------------------------------------------------------- 1 | 813022F4 7C0802A6 mflr r0 2 | 813022F8 90010004 stw r0, 4 (r1) 3 | 813022FC 9421FFF8 stwu r1, -8 (r1) 4 | 81302300 4BFFE669 bl DVDStep  5 | 81302304 906D832C stw r3, -0x7CD4 (r13) 6 | 81302308 480672E5 bl VIWaitForRetrace  7 | 8130230C 800D832C lwz r0, -0x7CD4 (r13) 8 | 81302310 2C000013 cmpwi r0, 19 9 | 81302314 41820044 beq- 0x81302358  10 | 81302318 2C000005 cmpwi r0, 5 11 | 8130231C 4180000C blt- 0x81302328  12 | 81302320 2C000010 cmpwi r0, 16 13 | 81302324 40810034 ble- 0x81302358  14 | 81302328 2C000012 cmpwi r0, 18 15 | 8130232C 4182002C beq- 0x81302358  16 | 81302330 2C000014 cmpwi r0, 20 17 | 81302334 41820024 beq- 0x81302358  18 | 81302338 2C000015 cmpwi r0, 21 19 | 8130233C 4182001C beq- 0x81302358  20 | 81302340 2C000016 cmpwi r0, 22 21 | 81302344 41820014 beq- 0x81302358  22 | 81302348 2C000017 cmpwi r0, 23 23 | 8130234C 4182000C beq- 0x81302358  24 | 81302350 2C000018 cmpwi r0, 24 25 | 81302354 4082FFAC bne+ 0x81302300  26 | 81302358 8001000C lwz r0, 12 (r1) 27 | 8130235C 38210008 addi r1, r1, 8 28 | 81302360 7C0803A6 mtlr r0 29 | 81302364 4E800020 blr -------------------------------------------------------------------------------- /0x813025A4.txt: -------------------------------------------------------------------------------- 1 | 813025A4 7C0802A6 mflr r0 2 | 813025A8 38602000 li r3, 0x2000 3 | 813025AC 90010004 stw r0, 4 (r1) 4 | 813025B0 9421FFF8 stwu r1, -8 (r1) 5 | 813025B4 4800588D bl 0x81307E40  6 | 813025B8 906D8330 stw r3, -0x7CD0 (r13) 7 | 813025BC 38800000 li r4, 0 8 | 813025C0 38A02000 li r5, 0x2000 9 | 813025C4 806D8330 lwz r3, -0x7CD0 (r13) 10 | 813025C8 4BFFDC01 bl memset  11 | 813025CC 806D8330 lwz r3, -0x7CD0 (r13) 12 | 813025D0 38802000 li r4, 0x2000 13 | 813025D4 4BFFE101 bl 0x813006D4  14 | 813025D8 8001000C lwz r0, 12 (r1) 15 | 813025DC 38210008 addi r1, r1, 8 16 | 813025E0 7C0803A6 mtlr r0 17 | 813025E4 4E800020 blr -------------------------------------------------------------------------------- /0x81302D2C.txt: -------------------------------------------------------------------------------- 1 | 81302D2C 7C0802A6 mflr r0 2 | 81302D30 3C60814B lis r3, 0x814B 3 | 81302D34 90010004 stw r0, 4 (r1) 4 | 81302D38 9421FFE0 stwu r1, -32 (r1) 5 | 81302D3C 93E1001C stw r31, 28 (r1) 6 | 81302D40 3BE3F5A0 subi r31, r3, 0x0A60 7 | 81302D44 800D8350 lwz r0, -0x7CB0 (r13) 8 | 81302D48 28000000 cmplwi r0, 0 9 | 81302D4C 40820014 bne- 0x81302D60  10 | 81302D50 48068711 bl PADInit  11 | 81302D54 806D8350 lwz r3, -0x7CB0 (r13) 12 | 81302D58 38030001 addi r0, r3, 1 13 | 81302D5C 900D8350 stw r0, -0x7CB0 (r13) 14 | 81302D60 38000000 li r0, 0 15 | 81302D64 981F003A stb r0, 58 (r31) 16 | 81302D68 981F0046 stb r0, 70 (r31) 17 | 81302D6C 981F0052 stb r0, 82 (r31) 18 | 81302D70 981F005E stb r0, 94 (r31) 19 | 81302D74 B01F006C sth r0, 108 (r31) 20 | 81302D78 981F006E stb r0, 110 (r31) 21 | 81302D7C 981F006F stb r0, 111 (r31) 22 | 81302D80 981F0070 stb r0, 112 (r31) 23 | 81302D84 981F0071 stb r0, 113 (r31) 24 | 81302D88 981F0072 stb r0, 114 (r31) 25 | 81302D8C 981F0073 stb r0, 115 (r31) 26 | 81302D90 981F0074 stb r0, 116 (r31) 27 | 81302D94 981F0075 stb r0, 117 (r31) 28 | 81302D98 981F0076 stb r0, 118 (r31) 29 | 81302D9C B01F0078 sth r0, 120 (r31) 30 | 81302DA0 B01F007A sth r0, 122 (r31) 31 | 81302DA4 B01F007C sth r0, 124 (r31) 32 | 81302DA8 B01F007E sth r0, 126 (r31) 33 | 81302DAC B01F0080 sth r0, 128 (r31) 34 | 81302DB0 B01F0082 sth r0, 130 (r31) 35 | 81302DB4 B01F0084 sth r0, 132 (r31) 36 | 81302DB8 B01F0086 sth r0, 134 (r31) 37 | 81302DBC B01F0088 sth r0, 136 (r31) 38 | 81302DC0 B01F008A sth r0, 138 (r31) 39 | 81302DC4 C0028058 lfs fr0, -0x7FA8 (r2) 40 | 81302DC8 D01F008C stfs fr0, 140 (r31) 41 | 81302DCC 80010024 lwz r0, 36 (r1) 42 | 81302DD0 83E1001C lwz r31, 28 (r1) 43 | 81302DD4 38210020 addi r1, r1, 32 44 | 81302DD8 7C0803A6 mtlr r0 45 | 81302DDC 4E800020 blr -------------------------------------------------------------------------------- /0x81307B0C.txt: -------------------------------------------------------------------------------- 1 | 81307B0C 7C0802A6 mflr r0 2 | 81307B10 5465063E rlwinm r5, r3, 0, 24, 31 mask:0x000000FF 3 | 81307B14 90010004 stw r0, 4 (r1) 4 | 81307B18 20850010 subfic r4, r5, 16 5 | 81307B1C 38000001 li r0, 1 6 | 81307B20 9421FFC0 stwu r1, -64 (r1) 7 | 81307B24 28050000 cmplwi r5, 0 8 | 81307B28 38C00000 li r6, 0 9 | 81307B2C DBE10038 stfd fr31, 56 (r1) 10 | 81307B30 DBC10030 stfd fr30, 48 (r1) 11 | 81307B34 93E1002C stw r31, 44 (r1) 12 | 81307B38 93C10028 stw r30, 40 (r1) 13 | 81307B3C 93A10024 stw r29, 36 (r1) 14 | 81307B40 908D837C stw r4, -0x7C84 (r13) 15 | 81307B44 B00D8378 sth r0, -0x7C88 (r13) 16 | 81307B48 408100AC ble- 0x81307BF4  17 | 18 | 81307B4C 28050008 cmplwi r5, 8 19 | 81307B50 3803FFF8 subi r0, r3, 8 20 | 81307B54 4081007C ble- 0x81307BD0  21 | 81307B58 5400063E rlwinm r0, r0, 0, 24, 31 mask:0x000000FF 22 | 81307B5C 48000068 b 0x81307BC4  23 | 24 | 81307B60 25 | r6 += 8 26 | (u16)(var_7C88) <<= 8; 27 | 28 | 81307BC4 29 | r4 = r6 & 0xff 30 | if ( r4 < r0 ) goto 0x81307B60 31 | 32 | 81307BD0 33 | r0 = r3 & 0xff 34 | goto 0x81307BE8 35 | 36 | 81307BD8 37 | r6++; 38 | (u16)(var_7C88) <<= 1; 39 | 40 | 81307BE8 41 | r3 = r6 & 0xff; 42 | if ( r3 < r0 ) goto 0x81307BD8 43 | 44 | ----- 45 | 46 | 81307BF4 A06D8378 lhz r3, -0x7C88 (r13) 47 | 81307BF8 7C601670 srawi r0, r3, 2 48 | 81307BFC 7C000194 addze r0, r0 49 | 81307C00 7C030214 add r0, r3, r0 50 | 81307C04 5403103A rlwinm r3, r0, 2, 0, 29 mask:0xFFFFFFFC 51 | 81307C08 48000239 bl HeapAlloc  52 | 81307C0C 906D8380 stw r3, -0x7C80 (r13) 53 | 81307C10 800D8380 lwz r0, -0x7C80 (r13) 54 | 81307C14 28000000 cmplwi r0, 0 55 | 81307C18 4082000C bne- 0x81307C24  56 | 57 | 81307C1C 38600000 li r3, 0 58 | 81307C20 4800008C b 0x81307CAC  59 | 60 | 81307C24 C3C28118 lfs fr30, -0x7EE8 (r2) 61 | 81307C28 3BA00000 li r29, 0 62 | 81307C2C CBE28120 lfd fr31, -0x7EE0 (r2) 63 | 81307C30 3BC00000 li r30, 0 64 | 81307C34 3FE04330 lis r31, 0x4330 65 | 81307C38 48000044 b 0x81307C7C  66 | 67 | 81307C3C 9081001C stw r4, 28 (r1) 68 | 81307C40 57A0043E rlwinm r0, r29, 0, 16, 31 mask:0x0000FFFF 69 | 81307C44 93E10018 stw r31, 24 (r1) 70 | 81307C48 C8010018 lfd fr0, 24 (r1) 71 | 81307C4C 90010014 stw r0, 20 (r1) 72 | 81307C50 EC00F828 fsubs fr0, fr0, fr31 73 | 81307C54 93E10010 stw r31, 16 (r1) 74 | 81307C58 EC3E0024 fdivs fr1, fr30, fr0 75 | 81307C5C C8010010 lfd fr0, 16 (r1) 76 | 81307C60 EC00F828 fsubs fr0, fr0, fr31 77 | 81307C64 EC210032 fmuls fr1, fr1, fr0 78 | 81307C68 48076C11 bl sinf  79 | 81307C6C 806D8380 lwz r3, -0x7C80 (r13) 80 | 81307C70 3BBD0001 addi r29, r29, 1 81 | 81307C74 7C23F52E stfsx fr1, r3, r30 82 | 81307C78 3BDE0004 addi r30, r30, 4 83 | 84 | 81307C7C A08D8378 lhz r4, -0x7C88 (r13) 85 | 81307C80 57A3043E rlwinm r3, r29, 0, 16, 31 mask:0x0000FFFF 86 | 81307C84 7C851670 srawi r5, r4, 2 87 | 81307C88 7CA50194 addze r5, r5 88 | 81307C8C 7C042A14 add r0, r4, r5 89 | 81307C90 7C030000 cmpw r3, r0 90 | 81307C94 4180FFA8 blt+ 0x81307C3C  91 | 92 | 81307C98 808D8380 lwz r4, -0x7C80 (r13) 93 | 81307C9C 54A0103A rlwinm r0, r5, 2, 0, 29 mask:0xFFFFFFFC 94 | 81307CA0 38600001 li r3, 1 95 | 81307CA4 7C040214 add r0, r4, r0 96 | 81307CA8 900D8384 stw r0, -0x7C7C (r13) 97 | 98 | 81307CAC 99 | return -------------------------------------------------------------------------------- /0x81307D90 - Heap.txt: -------------------------------------------------------------------------------- 1 | 2 | OSHeapHandle BS2Heap; // 7C78 3 | 4 | void InitHeap (void) 5 | { 6 | void* arenaLo; 7 | void* arenaHi; 8 | void* newArenaLo; 9 | 10 | arenaLo = OSRoundUp32B ( OSGetArenaLo () ); 11 | arenaHi = OSRoundDown32B ( OSGetArenaHi() ); 12 | 13 | newArenaLo = OSInitAlloc ( 0x80700000, arenaHi, 2 ); 14 | OSSetArenaLo ( arenaHi ); 15 | 16 | BS2Heap = OSCreateHeap ( arenaLo, arenaHi ); 17 | OSSetCurrentHeap ( BS2Heap ); 18 | 19 | OSAddToHeap ( BS2Heap, newArenaLo, 0x81100000 ); 20 | 21 | DumpHeap (); 22 | } 23 | 24 | u32 25 | 26 | 81307D90 7C0802A6 mflr r0 27 | 81307D94 90010004 stw r0, 4 (r1) 28 | 81307D98 9421FFE8 stwu r1, -24 (r1) 29 | 81307D9C 93E10014 stw r31, 20 (r1) 30 | 81307DA0 93C10010 stw r30, 16 (r1) 31 | 81307DA4 93A1000C stw r29, 12 (r1) 32 | 81307DA8 48054BE5 bl OSGetArenaLo  33 | 81307DAC 3803001F addi r0, r3, 31 34 | 81307DB0 541F0034 rlwinm r31, r0, 0, 0, 26 mask:0xFFFFFFE0 35 | 81307DB4 48054BD1 bl OSGetArenaHi  36 | 81307DB8 547E0034 rlwinm r30, r3, 0, 0, 26 mask:0xFFFFFFE0 37 | 81307DBC 389E0000 addi r4, r30, 0 38 | 81307DC0 3C608070 lis r3, 0x8070 39 | 81307DC4 38A00002 li r5, 2 40 | 81307DC8 4805497D bl OSInitAlloc  41 | 81307DCC 3BA30000 addi r29, r3, 0 42 | 81307DD0 387E0000 addi r3, r30, 0 43 | 81307DD4 48054BC9 bl OSSetArenaLo  44 | 81307DD8 387F0000 addi r3, r31, 0 45 | 81307DDC 389E0000 addi r4, r30, 0 46 | 81307DE0 480549D5 bl OSCreateHeap  47 | 81307DE4 906D8388 stw r3, -0x7C78 (r13) 48 | 81307DE8 4805494D bl OSSetCurrentHeap  49 | 81307DEC 806D8388 lwz r3, -0x7C78 (r13) 50 | 81307DF0 389D0000 addi r4, r29, 0 51 | 81307DF4 3CA08110 lis r5, 0x8110 52 | 81307DF8 48054A29 bl OSAddToHeap  53 | 81307DFC 48000021 bl 0x81307E1C  54 | 81307E00 8001001C lwz r0, 28 (r1) 55 | 81307E04 83E10014 lwz r31, 20 (r1) 56 | 81307E08 83C10010 lwz r30, 16 (r1) 57 | 81307E0C 83A1000C lwz r29, 12 (r1) 58 | 81307E10 38210018 addi r1, r1, 24 59 | 81307E14 7C0803A6 mtlr r0 60 | 81307E18 4E800020 blr 61 | 62 | r31 = OSRoundUp32B ( 0x8135C98C () ); 63 | r30 = OSRoundDown32B ( 0x8135C984 () ); 64 | 65 | r29 = OSInitAlloc ( 0x80700000, r30, 2 ); 66 | 67 | 0x8135C99C ( r30 ); 68 | 69 | var_7C78 = OSCreateHeap ( r31, r30 ); 70 | 71 | 0x8135C734 (); 72 | 73 | 0x8135C820 ( var_7C78, r29, 0x81100000 ); 74 | 75 | 0x81307E1C (); 76 | 77 | 78 | 81307D90 7C0802A6 mflr r0 79 | 81307D94 90010004 stw r0, 4 (r1) 80 | 81307D98 9421FFE8 stwu r1, -24 (r1) 81 | 81307D9C 93E10014 stw r31, 20 (r1) 82 | 81307DA0 93C10010 stw r30, 16 (r1) 83 | 81307DA4 93A1000C stw r29, 12 (r1) 84 | 81307DA8 48054BE5 bl 0x8135C98C  85 | 81307DAC 3803001F addi r0, r3, 31 86 | 81307DB0 541F0034 rlwinm r31, r0, 0, 0, 26 mask:0xFFFFFFE0 87 | 81307DB4 48054BD1 bl 0x8135C984  88 | 81307DB8 547E0034 rlwinm r30, r3, 0, 0, 26 mask:0xFFFFFFE0 89 | 81307DBC 389E0000 addi r4, r30, 0 90 | 81307DC0 3C608070 lis r3, 0x8070 91 | 81307DC4 38A00002 li r5, 2 92 | 81307DC8 4805497D bl OSInitAlloc  93 | 81307DCC 3BA30000 addi r29, r3, 0 94 | 81307DD0 387E0000 addi r3, r30, 0 95 | 81307DD4 48054BC9 bl 0x8135C99C  96 | 81307DD8 387F0000 addi r3, r31, 0 97 | 81307DDC 389E0000 addi r4, r30, 0 98 | 81307DE0 480549D5 bl OSCreateHeap  99 | 81307DE4 906D8388 stw r3, -0x7C78 (r13) 100 | 81307DE8 4805494D bl 0x8135C734  101 | 81307DEC 806D8388 lwz r3, -0x7C78 (r13) 102 | 81307DF0 389D0000 addi r4, r29, 0 103 | 81307DF4 3CA08110 lis r5, 0x8110 104 | 81307DF8 48054A29 bl 0x8135C820  105 | 81307DFC 48000021 bl 0x81307E1C  106 | 81307E00 8001001C lwz r0, 28 (r1) 107 | 81307E04 83E10014 lwz r31, 20 (r1) 108 | 81307E08 83C10010 lwz r30, 16 (r1) 109 | 81307E0C 83A1000C lwz r29, 12 (r1) 110 | 81307E10 38210018 addi r1, r1, 24 111 | 81307E14 7C0803A6 mtlr r0 112 | 81307E18 4E800020 blr -------------------------------------------------------------------------------- /0x81307E40.txt: -------------------------------------------------------------------------------- 1 | 81307E40 7C0802A6 mflr r0 2 | 81307E44 7C641B78 or r4, r3, r3 3 | 81307E48 90010004 stw r0, 4 (r1) 4 | 81307E4C 9421FFE8 stwu r1, -24 (r1) 5 | 81307E50 93E10014 stw r31, 20 (r1) 6 | 81307E54 806D8388 lwz r3, -0x7C78 (r13) 7 | 81307E58 48054765 bl OSAllocFromHeap  8 | 81307E5C 7C7F1B79 or. r31, r3, r3 9 | 81307E60 40820018 bne- 0x81307E78  10 | 81307E64 4CC63182 crclr 6 11 | 81307E68 386D8020 subi r3, r13, 0x7FE0 12 | 81307E6C 38800041 li r4, 65 13 | 81307E70 38AD8028 subi r5, r13, 0x7FD8 14 | 81307E74 48055B31 bl OSPanic  15 | 81307E78 7FE3FB78 or r3, r31, r31 16 | 81307E7C 8001001C lwz r0, 28 (r1) 17 | 81307E80 83E10014 lwz r31, 20 (r1) 18 | 81307E84 38210018 addi r1, r1, 24 19 | 81307E88 7C0803A6 mtlr r0 20 | 81307E8C 4E800020 blr 21 | -------------------------------------------------------------------------------- /0x81307EB8.TXT: -------------------------------------------------------------------------------- 1 | 81307EB8 7C0802A6 mflr r0 2 | 81307EBC 90010004 stw r0, 4 (r1) 3 | 81307EC0 9421FFF8 stwu r1, -8 (r1) 4 | 81307EC4 4805B8B9 bl OSGetTick  5 | 81307EC8 906D8390 stw r3, -0x7C70 (r13) 6 | 81307ECC 4805B8B1 bl OSGetTick  7 | 81307ED0 906D8394 stw r3, -0x7C6C (r13) 8 | 81307ED4 4805B8A9 bl OSGetTick  9 | 81307ED8 906D8398 stw r3, -0x7C68 (r13) 10 | 81307EDC 4805B8A1 bl OSGetTick  11 | 81307EE0 906D839C stw r3, -0x7C64 (r13) 12 | 81307EE4 48000015 bl 0x81307EF8  13 | 81307EE8 8001000C lwz r0, 12 (r1) 14 | 81307EEC 38210008 addi r1, r1, 8 15 | 81307EF0 7C0803A6 mtlr r0 16 | 81307EF4 4E800020 blr -------------------------------------------------------------------------------- /0x81308208.txt: -------------------------------------------------------------------------------- 1 | 81308208 7C0802A6 mflr r0 2 | 8130820C 3C60814B lis r3, 0x814B 3 | 81308210 90010004 stw r0, 4 (r1) 4 | 81308214 9421FFE0 stwu r1, -32 (r1) 5 | 81308218 93E1001C stw r31, 28 (r1) 6 | 8130821C 3BE3F6C0 subi r31, r3, 0x0940 7 | 81308220 93C10018 stw r30, 24 (r1) 8 | 81308224 93A10014 stw r29, 20 (r1) 9 | 81308228 93810010 stw r28, 16 (r1) 10 | 8130822C 48003249 bl 0x8130B474  11 | 81308230 5460043E rlwinm r0, r3, 0, 16, 31 mask:0x0000FFFF 12 | 81308234 28000002 cmplwi r0, 2 13 | 81308238 40820028 bne- 0x81308260  14 | 8130823C 3F800005 lis r28, 0x0005 15 | 81308240 387CD000 subi r3, r28, 0x3000 16 | 81308244 4BFFFBFD bl 0x81307E40  17 | 81308248 3CA0001B lis r5, 0x001B 18 | 8130824C 3BA30000 addi r29, r3, 0 19 | 81308250 389CD000 subi r4, r28, 0x3000 20 | 81308254 38A5FF00 subi r5, r5, 256 21 | 81308258 4BFFFF2D bl 0x81308184  22 | 8130825C 48000020 b 0x8130827C  23 | 81308260 38603000 li r3, 0x3000 24 | 81308264 4BFFFBDD bl 0x81307E40  25 | 81308268 3C800020 lis r4, 0x0020 26 | 8130826C 38A4CF00 subi r5, r4, 0x3100 27 | 81308270 3BA30000 addi r29, r3, 0 28 | 81308274 38803000 li r4, 0x3000 29 | 81308278 4BFFFF0D bl 0x81308184  30 | 8130827C 881D0000 lbz r0, 0 (r29) 31 | 81308280 28000059 cmplwi r0, 89 32 | 81308284 40820040 bne- 0x813082C4  33 | 81308288 881D0001 lbz r0, 1 (r29) 34 | 8130828C 28000061 cmplwi r0, 97 35 | 81308290 40820034 bne- 0x813082C4  36 | 81308294 881D0002 lbz r0, 2 (r29) 37 | 81308298 28000079 cmplwi r0, 121 38 | 8130829C 40820028 bne- 0x813082C4  39 | 813082A0 881D0005 lbz r0, 5 (r29) 40 | 813082A4 887D0004 lbz r3, 4 (r29) 41 | 813082A8 5400801E rlwinm r0, r0, 16, 0, 15 mask:0xFFFF0000 42 | 813082AC 889D0006 lbz r4, 6 (r29) 43 | 813082B0 5060C00E rlwimi r0, r3, 24, 0, 7 mask:0xFF000000 44 | 813082B4 88BD0007 lbz r5, 7 (r29) 45 | 813082B8 5080442E rlwimi r0, r4, 8, 16, 23 mask:0x0000FF00 46 | 813082BC 7CA30378 or r3, r5, r0 47 | 813082C0 48000008 b 0x813082C8  48 | 813082C4 38600000 li r3, 0 49 | 813082C8 2C030000 cmpwi r3, 0 50 | 813082CC 40810038 ble- 0x81308304  51 | 813082D0 3803001F addi r0, r3, 31 52 | 813082D4 541C0034 rlwinm r28, r0, 0, 0, 26 mask:0xFFFFFFE0 53 | 813082D8 387C0000 addi r3, r28, 0 54 | 813082DC 4BFFFB65 bl 0x81307E40  55 | 813082E0 3BC30000 addi r30, r3, 0 56 | 813082E4 387D0000 addi r3, r29, 0 57 | 813082E8 389E0000 addi r4, r30, 0 58 | 813082EC 4BFFFCCD bl 0x81307FB8  59 | 813082F0 387E0000 addi r3, r30, 0 60 | 813082F4 389C0000 addi r4, r28, 0 61 | 813082F8 480549B9 bl DCStoreRange  62 | 813082FC 7FA3EB78 or r3, r29, r29 63 | 81308300 4BFFFB91 bl 0x81307E90  64 | 81308304 807E0000 lwz r3, 0 (r30) 65 | 81308308 7FDDF378 or r29, r30, r30 66 | 8130830C 801E0004 lwz r0, 4 (r30) 67 | 81308310 907F0000 stw r3, 0 (r31) 68 | 81308314 901F0004 stw r0, 4 (r31) 69 | 81308318 807E0008 lwz r3, 8 (r30) 70 | 8130831C 801E000C lwz r0, 12 (r30) 71 | 81308320 907F0008 stw r3, 8 (r31) 72 | 81308324 901F000C stw r0, 12 (r31) 73 | 81308328 807E0010 lwz r3, 16 (r30) 74 | 8130832C 801E0014 lwz r0, 20 (r30) 75 | 81308330 907F0010 stw r3, 16 (r31) 76 | 81308334 901F0014 stw r0, 20 (r31) 77 | 81308338 807E0018 lwz r3, 24 (r30) 78 | 8130833C 801E001C lwz r0, 28 (r30) 79 | 81308340 907F0018 stw r3, 24 (r31) 80 | 81308344 901F001C stw r0, 28 (r31) 81 | 81308348 807E0020 lwz r3, 32 (r30) 82 | 8130834C 801E0024 lwz r0, 36 (r30) 83 | 81308350 907F0020 stw r3, 32 (r31) 84 | 81308354 901F0024 stw r0, 36 (r31) 85 | 81308358 807E0028 lwz r3, 40 (r30) 86 | 8130835C 801E002C lwz r0, 44 (r30) 87 | 81308360 907F0028 stw r3, 40 (r31) 88 | 81308364 901F002C stw r0, 44 (r31) 89 | 81308368 800D83A0 lwz r0, -0x7C60 (r13) 90 | 8130836C 28000000 cmplwi r0, 0 91 | 81308370 40820020 bne- 0x81308390  92 | 81308374 807F0028 lwz r3, 40 (r31) 93 | 81308378 4BFFFAC9 bl 0x81307E40  94 | 8130837C 906D83A0 stw r3, -0x7C60 (r13) 95 | 81308380 801F0024 lwz r0, 36 (r31) 96 | 81308384 808D83A0 lwz r4, -0x7C60 (r13) 97 | 81308388 7C7D0214 add r3, r29, r0 98 | 8130838C 48000091 bl 0x8130841C  99 | 81308390 A09F001A lhz r4, 26 (r31) 100 | 81308394 A07F001C lhz r3, 28 (r31) 101 | 81308398 800D83A4 lwz r0, -0x7C5C (r13) 102 | 8130839C 7C6419D6 mullw r3, r4, r3 103 | 813083A0 28000000 cmplwi r0, 0 104 | 813083A4 906D83A8 stw r3, -0x7C58 (r13) 105 | 813083A8 4082004C bne- 0x813083F4  106 | 813083AC 3BDF0022 addi r30, r31, 34 107 | 813083B0 801F0024 lwz r0, 36 (r31) 108 | 813083B4 A07F0022 lhz r3, 34 (r31) 109 | 813083B8 7FE30050 subf r31, r3, r0 110 | 813083BC 381F001F addi r0, r31, 31 111 | 813083C0 541C0034 rlwinm r28, r0, 0, 0, 26 mask:0xFFFFFFE0 112 | 813083C4 387C0000 addi r3, r28, 0 113 | 813083C8 4BFFFA79 bl 0x81307E40  114 | 813083CC 906D83A4 stw r3, -0x7C5C (r13) 115 | 813083D0 38BC0000 addi r5, r28, 0 116 | 813083D4 38800000 li r4, 0 117 | 813083D8 806D83A4 lwz r3, -0x7C5C (r13) 118 | 813083DC 4BFF7DED bl memset  119 | 813083E0 A01E0000 lhz r0, 0 (r30) 120 | 813083E4 7FE5FB78 or r5, r31, r31 121 | 813083E8 806D83A4 lwz r3, -0x7C5C (r13) 122 | 813083EC 7C9D0214 add r4, r29, r0 123 | 813083F0 4BFF7ECD bl memcpy  124 | 813083F4 7FA3EB78 or r3, r29, r29 125 | 813083F8 4BFFFA99 bl 0x81307E90  126 | 813083FC 80010024 lwz r0, 36 (r1) 127 | 81308400 83E1001C lwz r31, 28 (r1) 128 | 81308404 83C10018 lwz r30, 24 (r1) 129 | 81308408 83A10014 lwz r29, 20 (r1) 130 | 8130840C 83810010 lwz r28, 16 (r1) 131 | 81308410 38210020 addi r1, r1, 32 132 | 81308414 7C0803A6 mtlr r0 133 | 81308418 4E800020 blr -------------------------------------------------------------------------------- /0x8130B84C.txt: -------------------------------------------------------------------------------- 1 | 8130B84C 7C0802A6 mflr r0 2 | 8130B850 90010004 stw r0, 4 (r1) 3 | 8130B854 9421FFF8 stwu r1, -8 (r1) 4 | 8130B858 48054EE5 bl __OSLockSram  5 | 8130B85C 88830012 lbz r4, 18 (r3) 6 | 8130B860 38600000 li r3, 0 7 | 8130B864 38040004 addi r0, r4, 4 8 | 8130B868 B00D83F0 sth r0, -0x7C10 (r13) 9 | 8130B86C 48055291 bl __OSUnlockSram  10 | 8130B870 4BFFFCA9 bl 0x8130B518  11 | 8130B874 8001000C lwz r0, 12 (r1) 12 | 8130B878 38210008 addi r1, r1, 8 13 | 8130B87C 7C0803A6 mtlr r0 14 | 8130B880 4E800020 blr 15 | -------------------------------------------------------------------------------- /0x8130BCB4.txt: -------------------------------------------------------------------------------- 1 | 8130BCB4 7C0802A6 mflr r0 2 | 8130BCB8 3C608138 lis r3, 0x8138 3 | 8130BCBC 90010004 stw r0, 4 (r1) 4 | 8130BCC0 38031820 addi r0, r3, 0x1820 5 | 8130BCC4 9421FFD8 stwu r1, -40 (r1) 6 | 8130BCC8 BF610014 stmw r27, 20 (r1) 7 | 8130BCCC 3BE00000 li r31, 0 8 | 8130BCD0 900D83C8 stw r0, -0x7C38 (r13) 9 | 8130BCD4 83AD83C8 lwz r29, -0x7C38 (r13) 10 | 8130BCD8 83DD0000 lwz r30, 0 (r29) 11 | 8130BCDC 480000A8 b 0x8130BD84  12 | 8130BCE0 806D83C8 lwz r3, -0x7C38 (r13) 13 | 8130BCE4 801D0004 lwz r0, 4 (r29) 14 | 8130BCE8 7CA30214 add r5, r3, r0 15 | 8130BCEC 88050000 lbz r0, 0 (r5) 16 | 8130BCF0 28000059 cmplwi r0, 89 17 | 8130BCF4 40820040 bne- 0x8130BD34  18 | 8130BCF8 88050001 lbz r0, 1 (r5) 19 | 8130BCFC 28000061 cmplwi r0, 97 20 | 8130BD00 40820034 bne- 0x8130BD34  21 | 8130BD04 88050002 lbz r0, 2 (r5) 22 | 8130BD08 28000079 cmplwi r0, 121 23 | 8130BD0C 40820028 bne- 0x8130BD34  24 | 8130BD10 88050005 lbz r0, 5 (r5) 25 | 8130BD14 88650004 lbz r3, 4 (r5) 26 | 8130BD18 88850006 lbz r4, 6 (r5) 27 | 8130BD1C 5400801E rlwinm r0, r0, 16, 0, 15 mask:0xFFFF0000 28 | 8130BD20 5060C00E rlwimi r0, r3, 24, 0, 7 mask:0xFF000000 29 | 8130BD24 88A50007 lbz r5, 7 (r5) 30 | 8130BD28 5080442E rlwimi r0, r4, 8, 16, 23 mask:0x0000FF00 31 | 8130BD2C 7CBB0378 or r27, r5, r0 32 | 8130BD30 48000008 b 0x8130BD38  33 | 8130BD34 3B600000 li r27, 0 34 | 8130BD38 2C1B0000 cmpwi r27, 0 35 | 8130BD3C 41820040 beq- 0x8130BD7C  36 | 8130BD40 381B001F addi r0, r27, 31 37 | 8130BD44 54030034 rlwinm r3, r0, 0, 0, 26 mask:0xFFFFFFE0 38 | 8130BD48 4BFFC0F9 bl 0x81307E40  39 | 8130BD4C 80AD83C8 lwz r5, -0x7C38 (r13) 40 | 8130BD50 3B830000 addi r28, r3, 0 41 | 8130BD54 801D0004 lwz r0, 4 (r29) 42 | 8130BD58 389C0000 addi r4, r28, 0 43 | 8130BD5C 7C650214 add r3, r5, r0 44 | 8130BD60 4BFFFD89 bl 0x8130BAE8  45 | 8130BD64 800D83C8 lwz r0, -0x7C38 (r13) 46 | 8130BD68 387C0000 addi r3, r28, 0 47 | 8130BD6C 389B0000 addi r4, r27, 0 48 | 8130BD70 7C00E050 subf r0, r0, r28 49 | 8130BD74 901D0004 stw r0, 4 (r29) 50 | 8130BD78 48050F39 bl DCStoreRange  51 | 8130BD7C 3BBD0004 addi r29, r29, 4 52 | 8130BD80 3BFF0001 addi r31, r31, 1 53 | 8130BD84 7C1FF000 cmpw r31, r30 54 | 8130BD88 4180FF58 blt+ 0x8130BCE0  55 | 8130BD8C BB610014 lmw r27, 20 (r1) 56 | 8130BD90 8001002C lwz r0, 44 (r1) 57 | 8130BD94 38210028 addi r1, r1, 40 58 | 8130BD98 7C0803A6 mtlr r0 59 | 8130BD9C 4E800020 blr -------------------------------------------------------------------------------- /0x8130BEE8 - BIG.txt: -------------------------------------------------------------------------------- 1 | 8130BEE8 7C0802A6 mflr r0 2 | 8130BEEC 90010004 stw r0, 4 (r1) 3 | 8130BEF0 9421FFE8 stwu r1, -24 (r1) 4 | 8130BEF4 93E10014 stw r31, 20 (r1) 5 | 8130BEF8 93C10010 stw r30, 16 (r1) 6 | 8130BEFC 7C7E1B78 or r30, r3, r3 7 | 8130BF00 4BFF51F9 bl 0x813010F8  8 | 8130BF04 7C7F1B78 or r31, r3, r3 9 | 8130BF08 4BFF61C1 bl 0x813020C8  10 | 8130BF0C 4BFF61AD bl 0x813020B8  11 | 8130BF10 2C030000 cmpwi r3, 0 12 | 8130BF14 41820010 beq- 0x8130BF24  13 | 8130BF18 38000002 li r0, 2 14 | 8130BF1C 900D83F8 stw r0, -0x7C08 (r13) 15 | 8130BF20 48000048 b 0x8130BF68  16 | 8130BF24 4BFF619D bl 0x813020C0  17 | 8130BF28 2C030000 cmpwi r3, 0 18 | 8130BF2C 41820010 beq- 0x8130BF3C  19 | 8130BF30 38000000 li r0, 0 20 | 8130BF34 900D83F8 stw r0, -0x7C08 (r13) 21 | 8130BF38 48000030 b 0x8130BF68  22 | 8130BF3C 4BFF61B1 bl 0x813020EC  23 | 8130BF40 2C030013 cmpwi r3, 19 24 | 8130BF44 41820010 beq- 0x8130BF54  25 | 8130BF48 4BFF6741 bl 0x81302688  26 | 8130BF4C 2C030000 cmpwi r3, 0 27 | 8130BF50 41820010 beq- 0x8130BF60  28 | 8130BF54 38000003 li r0, 3 29 | 8130BF58 900D83F8 stw r0, -0x7C08 (r13) 30 | 8130BF5C 4800000C b 0x8130BF68  31 | 8130BF60 38000001 li r0, 1 32 | 8130BF64 900D83F8 stw r0, -0x7C08 (r13) 33 | 8130BF68 806D83F8 lwz r3, -0x7C08 (r13) 34 | 8130BF6C 2C1E0000 cmpwi r30, 0 35 | 8130BF70 38000001 li r0, 1 36 | 8130BF74 906D83FC stw r3, -0x7C04 (r13) 37 | 8130BF78 981F001E stb r0, 30 (r31) 38 | 8130BF7C 41820018 beq- 0x8130BF94  39 | 8130BF80 3C60814B lis r3, 0x814B 40 | 8130BF84 3803F878 subi r0, r3, 0x0788 41 | 8130BF88 900D8400 stw r0, -0x7C00 (r13) 42 | 8130BF8C 806D8400 lwz r3, -0x7C00 (r13) 43 | 8130BF90 48000061 bl 0x8130BFF0  44 | 8130BF94 806D8400 lwz r3, -0x7C00 (r13) 45 | 8130BF98 48000199 bl 0x8130C130  46 | 8130BF9C 2C1E0000 cmpwi r30, 0 47 | 8130BFA0 41820008 beq- 0x8130BFA8  48 | 8130BFA4 4800163D bl 0x8130D5E0  49 | 8130BFA8 7FC3F378 or r3, r30, r30 50 | 8130BFAC 480032E1 bl 0x8130F28C  51 | 8130BFB0 7FC3F378 or r3, r30, r30 52 | 8130BFB4 48005361 bl 0x81311314  53 | 8130BFB8 7FC3F378 or r3, r30, r30 54 | 8130BFBC 48009769 bl 0x81315724  55 | 8130BFC0 7FC3F378 or r3, r30, r30 56 | 8130BFC4 480097F5 bl 0x813157B8  57 | 8130BFC8 7FC3F378 or r3, r30, r30 58 | 8130BFCC 48015765 bl 0x81321730  59 | 8130BFD0 7FC3F378 or r3, r30, r30 60 | 8130BFD4 4801581D bl 0x813217F0  61 | 8130BFD8 8001001C lwz r0, 28 (r1) 62 | 8130BFDC 83E10014 lwz r31, 20 (r1) 63 | 8130BFE0 83C10010 lwz r30, 16 (r1) 64 | 8130BFE4 38210018 addi r1, r1, 24 65 | 8130BFE8 7C0803A6 mtlr r0 66 | 8130BFEC 4E800020 blr -------------------------------------------------------------------------------- /0x8131C5C4.txt: -------------------------------------------------------------------------------- 1 | 8131C5C4 7C0802A6 mflr r0 2 | 8131C5C8 3C600059 lis r3, 0x0059 3 | 8131C5CC 90010004 stw r0, 4 (r1) 4 | 8131C5D0 3C80814B lis r4, 0x814B 5 | 8131C5D4 38634C00 addi r3, r3, 0x4C00 6 | 8131C5D8 9421FFD8 stwu r1, -40 (r1) 7 | 8131C5DC BF610014 stmw r27, 20 (r1) 8 | 8131C5E0 3BE47280 addi r31, r4, 0x7280 9 | 8131C5E4 4BFEB85D bl 0x81307E40  10 | 8131C5E8 3BC30000 addi r30, r3, 0 11 | 8131C5EC 38603F80 li r3, 0x3F80 12 | 8131C5F0 4BFEB851 bl 0x81307E40  13 | 8131C5F4 3800000F li r0, 15 14 | 8131C5F8 3FBF0001 addis r29, r31, 1 15 | 8131C5FC 7C0903A6 mtctr r0 16 | 8131C600 3F7F0001 addis r27, r31, 1 17 | 8131C604 399E0000 addi r12, r30, 0 18 | 8131C608 3B830000 addi r28, r3, 0 19 | 8131C60C 38800000 li r4, 0 20 | 8131C610 3BBDCFA8 subi r29, r29, 0x3058 21 | 8131C614 3B7BD3A0 subi r27, r27, 0x2C60 22 | 8131C618 919D0000 stw r12, 0 (r29) 23 | 8131C61C 3D0C0001 addis r8, r12, 1 24 | 8131C620 3CAC0002 addis r5, r12, 2 25 | 8131C624 939B0000 stw r28, 0 (r27) 26 | 8131C628 380C5A00 addi r0, r12, 0x5A00 27 | 8131C62C 3D8C0003 addis r12, r12, 3 28 | 8131C630 901D0004 stw r0, 4 (r29) 29 | 8131C634 38DC0040 addi r6, r28, 64 30 | 8131C638 3808B400 subi r0, r8, 0x4C00 31 | 8131C63C 90DB0004 stw r6, 4 (r27) 32 | 8131C640 38FC0080 addi r7, r28, 128 33 | 8131C644 38C80E00 addi r6, r8, 0x0E00 34 | 8131C648 901D0008 stw r0, 8 (r29) 35 | 8131C64C 39686800 addi r11, r8, 0x6800 36 | 8131C650 381C00C0 addi r0, r28, 192 37 | 8131C654 90FB0008 stw r7, 8 (r27) 38 | 8131C658 395C0100 addi r10, r28, 256 39 | 8131C65C 3925C200 subi r9, r5, 0x3E00 40 | 8131C660 90DD000C stw r6, 12 (r29) 41 | 8131C664 38E51C00 addi r7, r5, 0x1C00 42 | 8131C668 391C0140 addi r8, r28, 0x0140 43 | 8131C66C 901B000C stw r0, 12 (r27) 44 | 8131C670 38DC0180 addi r6, r28, 0x0180 45 | 8131C674 381C01C0 addi r0, r28, 0x01C0 46 | 8131C678 917D0010 stw r11, 16 (r29) 47 | 8131C67C 38A57600 addi r5, r5, 0x7600 48 | 8131C680 398CD000 subi r12, r12, 0x3000 49 | 8131C684 915B0010 stw r10, 16 (r27) 50 | 8131C688 3B9C0200 addi r28, r28, 0x0200 51 | 8131C68C 38840008 addi r4, r4, 8 52 | 8131C690 913D0014 stw r9, 20 (r29) 53 | 8131C694 911B0014 stw r8, 20 (r27) 54 | 8131C698 90FD0018 stw r7, 24 (r29) 55 | 8131C69C 90DB0018 stw r6, 24 (r27) 56 | 8131C6A0 90BD001C stw r5, 28 (r29) 57 | 8131C6A4 3BBD0020 addi r29, r29, 32 58 | 8131C6A8 901B001C stw r0, 28 (r27) 59 | 8131C6AC 3B7B0020 addi r27, r27, 32 60 | 8131C6B0 4200FF68 bdnz+ 0x8131C618  61 | 8131C6B4 48000210 b 0x8131C8C4  62 | 8131C6B8 2004007F subfic r0, r4, 127 63 | 8131C6BC 2C04007F cmpwi r4, 127 64 | 8131C6C0 7C0903A6 mtctr r0 65 | 8131C6C4 4080001C bge- 0x8131C6E0  66 | 8131C6C8 90A70000 stw r5, 0 (r7) 67 | 8131C6CC 38A55A00 addi r5, r5, 0x5A00 68 | 8131C6D0 90C703F8 stw r6, 0x03F8 (r7) 69 | 8131C6D4 38E70004 addi r7, r7, 4 70 | 8131C6D8 38C60040 addi r6, r6, 64 71 | 8131C6DC 4200FFEC bdnz+ 0x8131C6C8  72 | 8131C6E0 3800000F li r0, 15 73 | 8131C6E4 3C9F0001 addis r4, r31, 1 74 | 8131C6E8 7C0903A6 mtctr r0 75 | 8131C6EC 3CBF0001 addis r5, r31, 1 76 | 8131C6F0 38C00000 li r6, 0 77 | 8131C6F4 3884CFA8 subi r4, r4, 0x3058 78 | 8131C6F8 38A5D3A0 subi r5, r5, 0x2C60 79 | 8131C6FC 3906007F addi r8, r6, 127 80 | 8131C700 1C085A00 mulli r0, r8, 0x5A00 81 | 8131C704 7C1E0214 add r0, r30, r0 82 | 8131C708 55093032 rlwinm r9, r8, 6, 0, 25 mask:0xFFFFFFC0 83 | 8131C70C 900401FC stw r0, 0x01FC (r4) 84 | 8131C710 38E60080 addi r7, r6, 128 85 | 8131C714 1C075A00 mulli r0, r7, 0x5A00 86 | 8131C718 7D234A14 add r9, r3, r9 87 | 8131C71C 912501FC stw r9, 0x01FC (r5) 88 | 8131C720 7C1E0214 add r0, r30, r0 89 | 8131C724 54E73032 rlwinm r7, r7, 6, 0, 25 mask:0xFFFFFFC0 90 | 8131C728 39060081 addi r8, r6, 129 91 | 8131C72C 90040200 stw r0, 0x0200 (r4) 92 | 8131C730 7CE33A14 add r7, r3, r7 93 | 8131C734 1C085A00 mulli r0, r8, 0x5A00 94 | 8131C738 90E50200 stw r7, 0x0200 (r5) 95 | 8131C73C 7CFE0214 add r7, r30, r0 96 | 8131C740 55003032 rlwinm r0, r8, 6, 0, 25 mask:0xFFFFFFC0 97 | 8131C744 90E40204 stw r7, 0x0204 (r4) 98 | 8131C748 7D830214 add r12, r3, r0 99 | 8131C74C 39660082 addi r11, r6, 130 100 | 8131C750 91850204 stw r12, 0x0204 (r5) 101 | 8131C754 1CEB5A00 mulli r7, r11, 0x5A00 102 | 8131C758 7CFE3A14 add r7, r30, r7 103 | 8131C75C 556B3032 rlwinm r11, r11, 6, 0, 25 mask:0xFFFFFFC0 104 | 8131C760 90E40208 stw r7, 0x0208 (r4) 105 | 8131C764 39460083 addi r10, r6, 131 106 | 8131C768 1CEA5A00 mulli r7, r10, 0x5A00 107 | 8131C76C 7D635A14 add r11, r3, r11 108 | 8131C770 91650208 stw r11, 0x0208 (r5) 109 | 8131C774 7D7E3A14 add r11, r30, r7 110 | 8131C778 39260084 addi r9, r6, 132 111 | 8131C77C 554A3032 rlwinm r10, r10, 6, 0, 25 mask:0xFFFFFFC0 112 | 8131C780 9164020C stw r11, 0x020C (r4) 113 | 8131C784 1CE95A00 mulli r7, r9, 0x5A00 114 | 8131C788 7D435214 add r10, r3, r10 115 | 8131C78C 9145020C stw r10, 0x020C (r5) 116 | 8131C790 7D5E3A14 add r10, r30, r7 117 | 8131C794 39060085 addi r8, r6, 133 118 | 8131C798 55293032 rlwinm r9, r9, 6, 0, 25 mask:0xFFFFFFC0 119 | 8131C79C 91440210 stw r10, 0x0210 (r4) 120 | 8131C7A0 1CE85A00 mulli r7, r8, 0x5A00 121 | 8131C7A4 7D234A14 add r9, r3, r9 122 | 8131C7A8 91250210 stw r9, 0x0210 (r5) 123 | 8131C7AC 38060086 addi r0, r6, 134 124 | 8131C7B0 7D3E3A14 add r9, r30, r7 125 | 8131C7B4 1CE05A00 mulli r7, r0, 0x5A00 126 | 8131C7B8 91240214 stw r9, 0x0214 (r4) 127 | 8131C7BC 55083032 rlwinm r8, r8, 6, 0, 25 mask:0xFFFFFFC0 128 | 8131C7C0 7D034214 add r8, r3, r8 129 | 8131C7C4 54003032 rlwinm r0, r0, 6, 0, 25 mask:0xFFFFFFC0 130 | 8131C7C8 91050214 stw r8, 0x0214 (r5) 131 | 8131C7CC 7CFE3A14 add r7, r30, r7 132 | 8131C7D0 90E40218 stw r7, 0x0218 (r4) 133 | 8131C7D4 7C030214 add r0, r3, r0 134 | 8131C7D8 38C60008 addi r6, r6, 8 135 | 8131C7DC 90050218 stw r0, 0x0218 (r5) 136 | 8131C7E0 38A50020 addi r5, r5, 32 137 | 8131C7E4 38840020 addi r4, r4, 32 138 | 8131C7E8 4200FF14 bdnz+ 0x8131C6FC  139 | 8131C7EC 480000FC b 0x8131C8E8  140 | 8131C7F0 2006007F subfic r0, r6, 127 141 | 8131C7F4 2C06007F cmpwi r6, 127 142 | 8131C7F8 7C0903A6 mtctr r0 143 | 8131C7FC 4080002C bge- 0x8131C828  144 | 8131C800 38A6007F addi r5, r6, 127 145 | 8131C804 1C055A00 mulli r0, r5, 0x5A00 146 | 8131C808 7C9E0214 add r4, r30, r0 147 | 8131C80C 54A03032 rlwinm r0, r5, 6, 0, 25 mask:0xFFFFFFC0 148 | 8131C810 908701FC stw r4, 0x01FC (r7) 149 | 8131C814 7C030214 add r0, r3, r0 150 | 8131C818 900705F4 stw r0, 0x05F4 (r7) 151 | 8131C81C 38E70004 addi r7, r7, 4 152 | 8131C820 38C60001 addi r6, r6, 1 153 | 8131C824 4200FFDC bdnz+ 0x8131C800  154 | 8131C828 38605A00 li r3, 0x5A00 155 | 8131C82C 4BFEB615 bl 0x81307E40  156 | 8131C830 906D8504 stw r3, -0x7AFC (r13) 157 | 8131C834 3C600004 lis r3, 0x0004 158 | 8131C838 4BFEB609 bl 0x81307E40  159 | 8131C83C 906D8500 stw r3, -0x7B00 (r13) 160 | 8131C840 3FC00001 lis r30, 0x0001 161 | 8131C844 387EA000 subi r3, r30, 0x6000 162 | 8131C848 4BFEB5F9 bl 0x81307E40  163 | 8131C84C 906D84F0 stw r3, -0x7B10 (r13) 164 | 8131C850 387EA000 subi r3, r30, 0x6000 165 | 8131C854 4BFEB5ED bl 0x81307E40  166 | 8131C858 388D84F0 subi r4, r13, 0x7B10 167 | 8131C85C 90640004 stw r3, 4 (r4) 168 | 8131C860 387F0C10 addi r3, r31, 0x0C10 169 | 8131C864 389F0C50 addi r4, r31, 0x0C50 170 | 8131C868 38A00010 li r5, 16 171 | 8131C86C 48043245 bl OSInitMessageQueue  172 | 8131C870 387F0C30 addi r3, r31, 0x0C30 173 | 8131C874 389F0C90 addi r4, r31, 0x0C90 174 | 8131C878 38A00010 li r5, 16 175 | 8131C87C 48043235 bl OSInitMessageQueue  176 | 8131C880 3C608132 lis r3, 0x8132 177 | 8131C884 3CDF0001 addis r6, r31, 1 178 | 8131C888 3883C9F8 subi r4, r3, 0x3608 179 | 8131C88C 387F0CD0 addi r3, r31, 0x0CD0 180 | 8131C890 38FE8000 subi r7, r30, -0x8000 181 | 8131C894 38A00000 li r5, 0 182 | 8131C898 39000011 li r8, 17 183 | 8131C89C 39200001 li r9, 1 184 | 8131C8A0 38C68FE0 subi r6, r6, 0x7020 185 | 8131C8A4 48046511 bl 0x81362DB4  186 | 8131C8A8 387F0CD0 addi r3, r31, 0x0CD0 187 | 8131C8AC 480468C9 bl OSResumeThread  188 | 8131C8B0 48000061 bl 0x8131C910  189 | 8131C8B4 3880000A li r4, 10 190 | 8131C8B8 38A00000 li r5, 0 191 | 8131C8BC 48043255 bl OSSendMessage  192 | 8131C8C0 4800003C b 0x8131C8FC  193 | 8131C8C4 1CC45A00 mulli r6, r4, 0x5A00 194 | 8131C8C8 3CBF0001 addis r5, r31, 1 195 | 8131C8CC 5487103A rlwinm r7, r4, 2, 0, 29 mask:0xFFFFFFFC 196 | 8131C8D0 7CE53A14 add r7, r5, r7 197 | 8131C8D4 54803032 rlwinm r0, r4, 6, 0, 25 mask:0xFFFFFFC0 198 | 8131C8D8 7CBE3214 add r5, r30, r6 199 | 8131C8DC 7CC30214 add r6, r3, r0 200 | 8131C8E0 38E7CFA8 subi r7, r7, 0x3058 201 | 8131C8E4 4BFFFDD4 b 0x8131C6B8  202 | 8131C8E8 3C1F0001 addis r0, r31, 1 203 | 8131C8EC 54C4103A rlwinm r4, r6, 2, 0, 29 mask:0xFFFFFFFC 204 | 8131C8F0 7CE02214 add r7, r0, r4 205 | 8131C8F4 38E7CFA8 subi r7, r7, 0x3058 206 | 8131C8F8 4BFFFEF8 b 0x8131C7F0  207 | 8131C8FC BB610014 lmw r27, 20 (r1) 208 | 8131C900 8001002C lwz r0, 44 (r1) 209 | 8131C904 38210028 addi r1, r1, 40 210 | 8131C908 7C0803A6 mtlr r0 211 | 8131C90C 4E800020 blr -------------------------------------------------------------------------------- /0x8135B160.txt: -------------------------------------------------------------------------------- 1 | 8135B160 7C0802A6 mflr r0 2 | 8135B164 90010004 stw r0, 4 (r1) 3 | 8135B168 9421FFF8 stwu r1, -8 (r1) 4 | 8135B16C 4BFDDAD5 bl 0x81338C40  5 | 8135B170 8001000C lwz r0, 12 (r1) 6 | 8135B174 38210008 addi r1, r1, 8 7 | 8135B178 7C0803A6 mtlr r0 8 | 8135B17C 4E800020 blr 9 | -------------------------------------------------------------------------------- /BS2Mach_12.txt: -------------------------------------------------------------------------------- 1 | case 12: 2 | 81300CC0 818D82B0 lwz r12, -0x7D50 (r13) 3 | 81300CC4 3861004C addi r3, r1, 76 4 | 81300CC8 38810048 addi r4, r1, 72 5 | 81300CCC 38A10044 addi r5, r1, 68 6 | 81300CD0 7D8803A6 mtlr r12 7 | 81300CD4 4E800021 blrl  8 | 81300CD8 2C030000 cmpwi r3, 0 9 | 81300CDC 41820074 beq- 0x81300D50  10 | 81300CE0 8081004C lwz r4, 76 (r1) 11 | 81300CE4 387D008C addi r3, r29, 140 12 | 81300CE8 80A10048 lwz r5, 72 (r1) 13 | 81300CEC 4CC63182 crclr 6 14 | 81300CF0 80C10044 lwz r6, 68 (r1) 15 | 81300CF4 4BFFF8A5 bl 0x81300598  16 | 81300CF8 4805E559 bl OSDisableInterrupts  17 | 81300CFC 3CC08130 lis r6, 0x8130 18 | 81300D00 8081004C lwz r4, 76 (r1) 19 | 81300D04 38E6060C addi r7, r6, 0x060C 20 | 81300D08 80A10048 lwz r5, 72 (r1) 21 | 81300D0C 7C7D1B78 or r29, r3, r3 22 | 81300D10 80C10044 lwz r6, 68 (r1) 23 | 81300D14 387F0040 addi r3, r31, 64 24 | 81300D18 480670E1 bl DVDReadAbsAsyncForBS  25 | 81300D1C 806D82B8 lwz r3, -0x7D48 (r13) 26 | 81300D20 80030000 lwz r0, 0 (r3) 27 | 81300D24 28000000 cmplwi r0, 0 28 | 81300D28 41820014 beq- 0x81300D3C  29 | 81300D2C 38600001 li r3, 1 30 | 81300D30 80010048 lwz r0, 72 (r1) 31 | 81300D34 906D82C4 stw r3, -0x7D3C (r13) 32 | 81300D38 900D82C0 stw r0, -0x7D40 (r13) 33 | 81300D3C 7FA3EB78 or r3, r29, r29 34 | 81300D40 4805E539 bl OSRestoreInterrupts  35 | 81300D44 3800000D li r0, 13 36 | 81300D48 900D82A8 stw r0, -0x7D58 (r13) 37 | 81300D4C 480001C8 b 0x81300F14  38 | 81300D50 4BFFF999 bl 0x813006E8  39 | 81300D54 2C030000 cmpwi r3, 0 40 | 81300D58 40820010 bne- 0x81300D68  41 | 81300D5C 38000014 li r0, 20 42 | 81300D60 900D82A8 stw r0, -0x7D58 (r13) 43 | 81300D64 480001B0 b 0x81300F14  44 | 81300D68 3800000E li r0, 14 45 | 81300D6C 900D82A8 stw r0, -0x7D58 (r13) 46 | 81300D70 480001A4 b 0x81300F14  47 | -------------------------------------------------------------------------------- /BS2Main.c: -------------------------------------------------------------------------------- 1 | 2 | static GXRenderModeObj RenderMode; // 81380FD0 3 | 4 | void BS2Main (void); 5 | 6 | void BS2Main (void) 7 | { 8 | } 9 | 10 | /* 11 | DSPInit (); 12 | ARQInit (); 13 | 14 | InitHeap (); 15 | DEMOInit ( 0x80000, &RenderMode ); 16 | 17 | 0x8135B0C0 ( HeapAlloc ( 0x100000 ), 0x100000, 0x800000 ); 18 | 19 | 0x8130B84C (); 20 | 0x8130BCB4 (); 21 | 0x813025A4 (); 22 | 23 | var_7D18 = 0x814AEB50; 24 | 0x81300F50 (var_7D18); 25 | 26 | 0x8136F318 (0); // ??? 27 | 0x8131C5C4 (); 28 | DEMOPadInit (); 29 | 0x81308208 (0); 30 | 0x81307B0C (12); 31 | 0x81307EB8 (); 32 | 0x813022F4 (); 33 | 0x8130BEE8 (1); 34 | OSGetSoundMode (); 35 | 0x8135B160 (); // ??? 36 | 37 | Main Loop: 38 | 39 | while (1) { 40 | DEMOPadRead (); 41 | InitDVDLoader (); 42 | DEMOBeforeRender (); 43 | 0x8130903C (); 44 | 0x81302DF0 (); 45 | 0x81302FA0 (); 46 | 0x8130BDB8 (); 47 | 0x81301100 (); 48 | 0x8130BE78 (); 49 | 0x813022C4 (); 50 | DEMODoneRender (); 51 | 0x813015A4 (); 52 | 0x81301100 (); 53 | 0x8130BE78 (); 54 | 0x813022C4 (); 55 | 0x81301644 (); 56 | GXFlush (); 57 | 0x81301724 (); 58 | 0x8130BEDC (); // blr 59 | 0x8131C268 (); 60 | 0x81302368 (); 61 | } 62 | 63 | */ -------------------------------------------------------------------------------- /BS2Main_Subcalls/0x81307E1C - DumpHeap.txt: -------------------------------------------------------------------------------- 1 | void DumpHeap (void) 2 | { 3 | OSDumpHeap ( BS2Heap ); 4 | } 5 | 6 | 81307E1C 7C0802A6 mflr r0 7 | 81307E20 90010004 stw r0, 4 (r1) 8 | 81307E24 9421FFF8 stwu r1, -8 (r1) 9 | 81307E28 806D8388 lwz r3, -0x7C78 (r13) 10 | 81307E2C 48054A55 bl 0x8135C880  11 | 81307E30 8001000C lwz r0, 12 (r1) 12 | 81307E34 38210008 addi r1, r1, 8 13 | 81307E38 7C0803A6 mtlr r0 14 | 81307E3C 4E800020 blr -------------------------------------------------------------------------------- /BS2Main_Subcalls/0x8130A86C.txt: -------------------------------------------------------------------------------- 1 | u16 * ptr 2 | 3 | ptr[0] = 0; 4 | ptr[3] = 0; 5 | 6 | 8130A86C 38000000 li r0, 0 7 | 8130A870 B0030000 sth r0, 0 (r3) 8 | 8130A874 B0030006 sth r0, 6 (r3) 9 | 8130A878 4E800020 blr 10 | 11 | -------------------------------------------------------------------------------- /BS2Main_Subcalls/0x8130A87C.txt: -------------------------------------------------------------------------------- 1 | 8130A87C 5480063E rlwinm r0, r4, 0, 24, 31 mask:0x000000FF 2 | 8130A880 2C000001 cmpwi r0, 1 3 | 8130A884 41820050 beq- 0x8130A8D4  4 | 8130A888 40800010 bge- 0x8130A898  5 | 8130A88C 2C000000 cmpwi r0, 0 6 | 8130A890 40800014 bge- 0x8130A8A4  7 | 8130A894 480000C0 b 0x8130A954  8 | 8130A898 2C000003 cmpwi r0, 3 9 | 8130A89C 408000B8 bge- 0x8130A954  10 | 8130A8A0 4800005C b 0x8130A8FC  11 | 8130A8A4 A8830000 lha r4, 0 (r3) 12 | 8130A8A8 38040001 addi r0, r4, 1 13 | 8130A8AC B0030000 sth r0, 0 (r3) 14 | 8130A8B0 A8830002 lha r4, 2 (r3) 15 | 8130A8B4 A8030004 lha r0, 4 (r3) 16 | 8130A8B8 A8A30000 lha r5, 0 (r3) 17 | 8130A8BC 7C040214 add r0, r4, r0 18 | 8130A8C0 7C050000 cmpw r5, r0 19 | 8130A8C4 40810090 ble- 0x8130A954  20 | 8130A8C8 7C000734 extsh r0, r0 21 | 8130A8CC B0030000 sth r0, 0 (r3) 22 | 8130A8D0 48000084 b 0x8130A954  23 | 8130A8D4 A8830000 lha r4, 0 (r3) 24 | 8130A8D8 3804FFFF subi r0, r4, 1 25 | 8130A8DC B0030000 sth r0, 0 (r3) 26 | 8130A8E0 A8830000 lha r4, 0 (r3) 27 | 8130A8E4 A8030004 lha r0, 4 (r3) 28 | 8130A8E8 7C040000 cmpw r4, r0 29 | 8130A8EC 40800068 bge- 0x8130A954  30 | 8130A8F0 38000000 li r0, 0 31 | 8130A8F4 B0030000 sth r0, 0 (r3) 32 | 8130A8F8 4800005C b 0x8130A954  33 | 8130A8FC A8A30000 lha r5, 0 (r3) 34 | 8130A900 A8830004 lha r4, 4 (r3) 35 | 8130A904 7C052000 cmpw r5, r4 36 | 8130A908 41800044 blt- 0x8130A94C  37 | 8130A90C A8030002 lha r0, 2 (r3) 38 | 8130A910 7CC42850 subf r6, r4, r5 39 | 8130A914 7C000E70 srawi r0, r0, 1 40 | 8130A918 7C000194 addze r0, r0 41 | 8130A91C 7C060000 cmpw r6, r0 42 | 8130A920 40810010 ble- 0x8130A930  43 | 8130A924 3805FFFF subi r0, r5, 1 44 | 8130A928 B0030000 sth r0, 0 (r3) 45 | 8130A92C 48000028 b 0x8130A954  46 | 8130A930 40800010 bge- 0x8130A940  47 | 8130A934 38050001 addi r0, r5, 1 48 | 8130A938 B0030000 sth r0, 0 (r3) 49 | 8130A93C 48000018 b 0x8130A954  50 | 8130A940 7C002214 add r0, r0, r4 51 | 8130A944 B0030000 sth r0, 0 (r3) 52 | 8130A948 4800000C b 0x8130A954  53 | 8130A94C 38050001 addi r0, r5, 1 54 | 8130A950 B0030000 sth r0, 0 (r3) 55 | 8130A954 A0830006 lhz r4, 6 (r3) 56 | 8130A958 38040001 addi r0, r4, 1 57 | 8130A95C B0030006 sth r0, 6 (r3) 58 | 8130A960 4E800020 blr -------------------------------------------------------------------------------- /BS2Main_Subcalls/0x8130AAEC.txt: -------------------------------------------------------------------------------- 1 | 8130AAEC 38A00000 li r5, 0 2 | 8130AAF0 B0A30004 sth r5, 4 (r3) 3 | 8130AAF4 38800014 li r4, 20 4 | 8130AAF8 380000FF li r0, 255 5 | 8130AAFC B0A30000 sth r5, 0 (r3) 6 | 8130AB00 B0830002 sth r4, 2 (r3) 7 | 8130AB04 98030009 stb r0, 9 (r3) 8 | 8130AB08 B0A3000A sth r5, 10 (r3) 9 | 8130AB0C 90A3000C stw r5, 12 (r3) 10 | 8130AB10 4E800020 blr -------------------------------------------------------------------------------- /BS2Main_Subcalls/0x8130BDA0.txt: -------------------------------------------------------------------------------- 1 | 2 | r4 = var_7C38 & ~3; 3 | r3 = var_7C38 + (var_7C38 & ~3) 4 | r0 = [r3+4]; 5 | return var_7C38 + r0; 6 | 7 | 8130BDA0 808D83C8 lwz r4, -0x7C38 (r13) 8 | 8130BDA4 5460103A rlwinm r0, r3, 2, 0, 29 mask:0xFFFFFFFC 9 | 8130BDA8 7C640214 add r3, r4, r0 10 | 8130BDAC 80030004 lwz r0, 4 (r3) 11 | 8130BDB0 7C640214 add r3, r4, r0 12 | 8130BDB4 4E800020 blr -------------------------------------------------------------------------------- /BS2Main_Subcalls/list.txt: -------------------------------------------------------------------------------- 1 | 0x81307E1C 2 | 0x81307E40 3 | 0x81301190 4 | 0x8130B518 5 | 0x8130BAE8 6 | 0x813006D4 7 | 8 | 0x8131C910 9 | 0x8131C8FC 10 | 11 | 0x8130B474 12 | 0x81308184 13 | 0x81307FB8 14 | 0x81307E90 15 | 0x8130841C 16 | 17 | 0x81307EF8 18 | 19 | 0x81300968 20 | 21 | BIG: 22 | 0x813010F8 23 | 0x813020C8 24 | 0x813020B8 25 | 0x813020C0 26 | 0x813020EC 27 | 0x81302688 28 | 0x8130BFF0 29 | 0x8130C130 30 | 0x8130D5E0 31 | 0x8130F28C 32 | 0x81311314 33 | 0x81315724 34 | 0x813157B8 35 | 0x81321730 36 | 0x813217F0 37 | 38 | 0x81338C40 39 | -------------------------------------------------------------------------------- /Bootstrap/Bootstrap.lcf: -------------------------------------------------------------------------------- 1 | /* #line 1 "default.lcf.h" /* stack depth 0 */ 2 | /* #line 1 "boot.h" /* stack depth 1 */ 3 | /* #line 34 "default.lcf.h" /* stack depth 0 */ 4 | MEMORY { 5 | text : origin = 0xfff00000 6 | } 7 | SECTIONS { 8 | GROUP:{ 9 | .text ALIGN(0x20):{} 10 | } > text 11 | } 12 | -------------------------------------------------------------------------------- /Bootstrap/Bootstrap.mcp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/Bootstrap/Bootstrap.mcp -------------------------------------------------------------------------------- /Bootstrap/bs.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/Bootstrap/bs.bin -------------------------------------------------------------------------------- /Bootstrap/extract_text.bat: -------------------------------------------------------------------------------- 1 | objcopy -O binary --only-section=.text Bootstrap.elf bs.bin -------------------------------------------------------------------------------- /Build_Instructions.txt: -------------------------------------------------------------------------------- 1 | 2 | 1. Compile BS. 3 | - Open \Bootstrap\Bootstrap.mcp in CodeWarrior and press F7. It should compile Bootstrap.elf 4 | - Now you need to strip .text section from it. Run \Bootstrap\extract_text.bat (you need objcopy tool) 5 | - Finally you get bs.bin which is first 0x800 bytes of bootrom. 6 | 7 | 2. Compile IPL. 8 | 9 | 3. Merge all things together. -------------------------------------------------------------------------------- /DVDLoader.h: -------------------------------------------------------------------------------- 1 | 2 | int DVDStep (void); 3 | -------------------------------------------------------------------------------- /Heap.c: -------------------------------------------------------------------------------- 1 | // Originally located at gBase.c (sight from ASSERT macro) 2 | 3 | #include 4 | 5 | static OSHeapHandle BS2Heap; 6 | 7 | void InitHeap (void) 8 | { 9 | void* arenaLo; 10 | void* arenaHi; 11 | void* newArenaLo; 12 | 13 | arenaLo = OSRoundUp32B ( OSGetArenaLo () ); 14 | arenaHi = OSRoundDown32B ( OSGetArenaHi() ); 15 | 16 | newArenaLo = OSInitAlloc ( 0x80700000, arenaHi, 2 ); 17 | OSSetArenaLo ( arenaHi ); 18 | 19 | BS2Heap = OSCreateHeap ( arenaLo, arenaHi ); 20 | OSSetCurrentHeap ( BS2Heap ); 21 | 22 | OSAddToHeap ( BS2Heap, newArenaLo, 0x81100000 ); 23 | 24 | DumpHeap (); 25 | } 26 | 27 | void DumpHeap (void) 28 | { 29 | OSDumpHeap ( BS2Heap ); 30 | } 31 | 32 | void * HeapAlloc ( int amount ) 33 | { 34 | void * ptr = OSAllocFromHeap ( BS2Heap, amount ); 35 | ASSERTMSG ( ptr != NULL, "" ); 36 | return ptr; 37 | } 38 | 39 | void HeapFree (void *ptr) 40 | { 41 | OSFreeToHeap ( BS2Heap, ptr ); 42 | } 43 | -------------------------------------------------------------------------------- /Heap.h: -------------------------------------------------------------------------------- 1 | void InitHeap (void); 2 | void DumpHeap (void); 3 | -------------------------------------------------------------------------------- /IPL.lcf: -------------------------------------------------------------------------------- 1 | /* #line 1 "default.lcf.h" /* stack depth 0 */ 2 | /* #line 1 "boot.h" /* stack depth 1 */ 3 | /* #line 34 "default.lcf.h" /* stack depth 0 */ 4 | MEMORY { 5 | text : origin = 0x81300000 6 | } 7 | SECTIONS { 8 | GROUP:{ 9 | .init ALIGN(0x20):{} 10 | extab ALIGN(0x20):{} 11 | extabindex ALIGN(0x20):{} 12 | .text ALIGN(0x20):{} 13 | .ctors ALIGN(0x20):{} 14 | .dtors ALIGN(0x20):{} 15 | .rodata ALIGN(0x20):{} 16 | .data ALIGN(0x20):{} 17 | .bss ALIGN(0x20):{} 18 | .sdata ALIGN(0x20):{} 19 | .sbss ALIGN(0x20):{} 20 | .sdata2 ALIGN(0x20):{} 21 | .sbss2 ALIGN(0x20):{} 22 | .stack ALIGN(0x100):{} 23 | } > text 24 | _stack_addr = (_f_sbss2 + SIZEOF(.sbss2) + 65536 + 0x7) & ~0x7; 25 | _stack_end = _f_sbss2 + SIZEOF(.sbss2); 26 | _db_stack_addr = (_stack_addr + 0x2000); 27 | _db_stack_end = _stack_addr; 28 | __ArenaLo = (_db_stack_addr + 0x1f) & ~0x1f; 29 | __ArenaHi = 0x81700000 ; 30 | } 31 | -------------------------------------------------------------------------------- /IPL.mcp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/IPL.mcp -------------------------------------------------------------------------------- /Jaudio/Readme.md: -------------------------------------------------------------------------------- 1 | # Jaudio decompile 2 | -------------------------------------------------------------------------------- /Jaudio/aictrl.c: -------------------------------------------------------------------------------- 1 | 2 | void Jac_HeapSetup(int param_1,int param_2) 3 | { 4 | if (param_1 == 0) { 5 | OSReport(@148); 6 | OSReport(@149); 7 | } 8 | else { 9 | OSReport(...rodata.0); 10 | OSReport(@146); 11 | Nas_HeapInit__FP6ALHeapPUcl(audio_hp,param_1,param_2); 12 | OSReport(@147,param_1,param_1 + param_2 + -1); 13 | } 14 | audio_hp_exist = (uint)(param_1 != 0); 15 | return; 16 | } 17 | 18 | int GetAudioHeapRemain(void) 19 | { 20 | if (audio_hp_exist == 0) { 21 | return 0; 22 | } 23 | return audio_hp._8_4_ - (audio_hp._4_4_ - audio_hp._0_4_); 24 | } 25 | 26 | undefined4 OSAlloc2(undefined4 param_1) 27 | { 28 | undefined4 uVar1; 29 | undefined4 unaff_r31; 30 | 31 | Console_printf(&@159,param_1); 32 | if (audio_hp_exist == 0) { 33 | OSReport(@160); 34 | } 35 | uVar1 = OSDisableInterrupts(); 36 | if (audio_hp_exist == 1) { 37 | unaff_r31 = Nas_HeapAlloc__FP6ALHeapl(audio_hp,param_1); 38 | } 39 | else if ((audio_hp_exist < 1) && (-1 < audio_hp_exist)) { 40 | unaff_r31 = OSAllocFromHeap(uRam00000000,param_1); 41 | } 42 | OSRestoreInterrupts(uVar1); 43 | return unaff_r31; 44 | } 45 | 46 | void OSFree2(undefined4 param_1) 47 | { 48 | if (audio_hp_exist == 1) { 49 | Nas_HeapFree__FP6ALHeap(audio_hp,param_1); 50 | } 51 | else if ((audio_hp_exist < 1) && (-1 < audio_hp_exist)) { 52 | OSFreeToHeap(uRam00000000); 53 | } 54 | return; 55 | } 56 | 57 | void Jac_Init(void) 58 | { 59 | undefined4 uVar1; 60 | int iVar2; 61 | undefined4 *puVar3; 62 | int iVar4; 63 | 64 | OSReport(@172); 65 | iVar2 = 0; 66 | iVar4 = 0; 67 | do { 68 | uVar1 = OSAlloc2(iRam00000000 << 1); 69 | puVar3 = (undefined4 *)(dac + iVar4); 70 | *puVar3 = uVar1; 71 | OSReport(@173,iVar2,*puVar3); 72 | Jac_bzero__FPvl(*puVar3,iRam00000000 << 1); 73 | DCStoreRange(*puVar3,iRam00000000 << 1); 74 | iVar2 = iVar2 + 1; 75 | iVar4 = iVar4 + 4; 76 | } while (iVar2 < 3); 77 | AIInit(0); 78 | AIInitDMA(dac._8_4_,iRam00000000 << 1); 79 | OSReport(@174); 80 | return; 81 | } 82 | 83 | undefined4 Jac_GetCurrentVCounter(void) 84 | { 85 | return JAC_VFRAME_COUNTER; 86 | } 87 | 88 | void HaltDSPSignal(void) 89 | { 90 | DSP_WAIT = 2; 91 | return; 92 | } 93 | 94 | undefined4 HaltDSP(void) 95 | { 96 | undefined4 uVar1; 97 | 98 | uVar1 = DSP_WAIT; 99 | DSP_WAIT = 1; 100 | return uVar1; 101 | } 102 | 103 | undefined4 RunDSP(void) 104 | { 105 | undefined4 uVar1; 106 | 107 | uVar1 = DSP_WAIT; 108 | DSP_WAIT = 0; 109 | return uVar1; 110 | } 111 | 112 | undefined4 CheckHaltDSP(void) 113 | { 114 | return DSP_WAIT; 115 | } 116 | 117 | void MixMonoTrack__FPslPFl_Ps(short *param_1,int param_2,code *param_3) 118 | { 119 | int iVar1; 120 | short *psVar2; 121 | 122 | Probe_Start(5,"MONO-MIX"); 123 | psVar2 = (short *)(*param_3)(param_2); 124 | if ((psVar2 != (short *)0x0) && (Probe_Finish(5), 0 < param_2)) { 125 | do { 126 | iVar1 = (int)*param_1 + (int)*psVar2; 127 | if (iVar1 < -0x8000) { 128 | iVar1 = -0x7fff; 129 | } 130 | if (0x7fff < iVar1) { 131 | iVar1 = 0x7fff; 132 | } 133 | *param_1 = (short)iVar1; 134 | iVar1 = (int)param_1[1] + (int)*psVar2; 135 | if (iVar1 < -0x8000) { 136 | iVar1 = -0x7fff; 137 | } 138 | if (0x7fff < iVar1) { 139 | iVar1 = 0x7fff; 140 | } 141 | psVar2 = psVar2 + 1; 142 | param_1[1] = (short)iVar1; 143 | param_1 = param_1 + 2; 144 | param_2 = param_2 + -1; 145 | } while (param_2 != 0); 146 | } 147 | return; 148 | } 149 | 150 | void MixMonoTrackWide__FPslPFl_Ps(short *param_1,int param_2,code *param_3) 151 | { 152 | int iVar1; 153 | short *psVar2; 154 | 155 | Probe_Start(5,@213); 156 | psVar2 = (short *)(*param_3)(param_2); 157 | if ((psVar2 != (short *)0x0) && (Probe_Finish(5), 0 < param_2)) { 158 | do { 159 | iVar1 = (int)*param_1 + (int)*psVar2; 160 | if (iVar1 < -0x8000) { 161 | iVar1 = -0x7fff; 162 | } 163 | if (0x7fff < iVar1) { 164 | iVar1 = 0x7fff; 165 | } 166 | *param_1 = (short)iVar1; 167 | iVar1 = (int)param_1[1] - (int)*psVar2; 168 | if (iVar1 < -0x8000) { 169 | iVar1 = -0x7fff; 170 | } 171 | if (0x7fff < iVar1) { 172 | iVar1 = 0x7fff; 173 | } 174 | psVar2 = psVar2 + 1; 175 | param_1[1] = (short)iVar1; 176 | param_1 = param_1 + 2; 177 | param_2 = param_2 + -1; 178 | } while (param_2 != 0); 179 | } 180 | return; 181 | } 182 | 183 | void MixExtraTrack__FPslPFl_Ps(short *param_1,int param_2,code *param_3) 184 | { 185 | int iVar1; 186 | short *psVar2; 187 | short *psVar3; 188 | 189 | Probe_Start(5,@230); 190 | psVar2 = (short *)(*param_3)(param_2); 191 | if (psVar2 != (short *)0x0) { 192 | Probe_Finish(5); 193 | Probe_Start(6,@231); 194 | psVar3 = psVar2 + iRam00000000; 195 | if (0 < param_2) { 196 | do { 197 | iVar1 = (int)*param_1 + (int)*psVar3; 198 | if (iVar1 < -0x8000) { 199 | iVar1 = -0x7fff; 200 | } 201 | if (0x7fff < iVar1) { 202 | iVar1 = 0x7fff; 203 | } 204 | *param_1 = (short)iVar1; 205 | iVar1 = (int)param_1[1] + (int)*psVar2; 206 | if (iVar1 < -0x8000) { 207 | iVar1 = -0x7fff; 208 | } 209 | if (0x7fff < iVar1) { 210 | iVar1 = 0x7fff; 211 | } 212 | psVar2 = psVar2 + 1; 213 | param_1[1] = (short)iVar1; 214 | param_1 = param_1 + 2; 215 | psVar3 = psVar3 + 1; 216 | param_2 = param_2 + -1; 217 | } while (param_2 != 0); 218 | } 219 | Probe_Finish(6); 220 | } 221 | return; 222 | } 223 | 224 | void MixInterleaveTrack__FPslPFl_Ps(short *param_1,int param_2,code *param_3) 225 | { 226 | int iVar1; 227 | short *psVar2; 228 | 229 | psVar2 = (short *)(*param_3)(param_2); 230 | if ((psVar2 != (short *)0x0) && (param_2 = param_2 << 1, 0 < param_2)) { 231 | do { 232 | iVar1 = (int)*param_1 + (int)*psVar2; 233 | if (iVar1 < -0x8000) { 234 | iVar1 = -0x7fff; 235 | } 236 | if (0x7fff < iVar1) { 237 | iVar1 = 0x7fff; 238 | } 239 | psVar2 = psVar2 + 1; 240 | *param_1 = (short)iVar1; 241 | param_1 = param_1 + 1; 242 | param_2 = param_2 + -1; 243 | } while (param_2 != 0); 244 | } 245 | return; 246 | } 247 | 248 | undefined4 Jac_GetMixcallback(undefined *param_1) 249 | { 250 | *param_1 = ext_mixmode; 251 | return ext_mixcallback; 252 | } 253 | 254 | void Jac_RegisterMixcallback(undefined4 param_1,undefined param_2) 255 | { 256 | ext_mixcallback = param_1; 257 | ext_mixmode = param_2; 258 | return; 259 | } 260 | 261 | /* WARNING: Removing unreachable block (ram,0x000107dc) */ 262 | void Jac_VframeWork(void) 263 | { 264 | int iVar1; 265 | undefined4 uVar2; 266 | 267 | if (init$246 == '\0') { 268 | dacp$245 = 0; 269 | init$246 = '\x01'; 270 | } 271 | JAC_VFRAME_COUNTER = JAC_VFRAME_COUNTER + 1; 272 | iVar1 = MixDsp__Fl(uRam00000000 >> 1); 273 | Jac_imixcopy__FPsPsPsl 274 | (iVar1 + uRam00000000 * 2,iVar1,*(undefined4 *)(dac + dacp$245 * 4),uRam00000000 >> 1); 275 | if (ext_mixcallback != 0) { 276 | if (ext_mixmode == 2) { 277 | MixExtraTrack__FPslPFl_Ps(*(undefined4 *)(dac + dacp$245 * 4),uRam00000000 >> 1); 278 | } 279 | else if (ext_mixmode < 2) { 280 | if (ext_mixmode == 0) { 281 | MixMonoTrack__FPslPFl_Ps(*(undefined4 *)(dac + dacp$245 * 4),uRam00000000 >> 1); 282 | } 283 | else { 284 | MixMonoTrackWide__FPslPFl_Ps(*(undefined4 *)(dac + dacp$245 * 4),uRam00000000 >> 1); 285 | } 286 | } 287 | else if (ext_mixmode < 4) { 288 | MixInterleaveTrack__FPslPFl_Ps(*(undefined4 *)(dac + dacp$245 * 4),uRam00000000 >> 1); 289 | } 290 | } 291 | uVar2 = OSDisableInterrupts(); 292 | DCStoreRange(*(undefined4 *)(dac + dacp$245 * 4),uRam00000000 << 1); 293 | OSRestoreInterrupts(uVar2); 294 | iVar1 = dacp$245 * 4; 295 | dacp$245 = dacp$245 + 1; 296 | last_rsp_madep = *(undefined4 *)(dac + iVar1); 297 | if (dacp$245 == 3) { 298 | dacp$245 = 0; 299 | } 300 | vframe_work_running = 0; 301 | return; 302 | } 303 | 304 | void Jac_UpdateDAC(void) 305 | { 306 | if (use_rsp_madep == 0) { 307 | use_rsp_madep = last_rsp_madep; 308 | last_rsp_madep = 0; 309 | } 310 | if (use_rsp_madep == 0) { 311 | UNIVERSAL_DACCOUNTER = UNIVERSAL_DACCOUNTER + 1; 312 | } 313 | else { 314 | AIInitDMA(use_rsp_madep,uRam00000000 << 1); 315 | use_rsp_madep = 0; 316 | } 317 | if ((last_rsp_madep == 0) && (vframe_work_running == 0)) { 318 | Jac_VframeWork(); 319 | } 320 | StreamMain__Fv(); 321 | if (DAC_CALLBACK_FUNC != (code *)0x0) { 322 | (*DAC_CALLBACK_FUNC)(last_rsp_madep,uRam00000000 >> 1); 323 | } 324 | return; 325 | } 326 | 327 | void Jac_RegisterDacCallback(undefined4 param_1) 328 | { 329 | DAC_CALLBACK_FUNC = param_1; 330 | return; 331 | } 332 | 333 | void Jac_SetOutputMode(undefined4 param_1) 334 | { 335 | uRam00000000 = param_1; 336 | return; 337 | } 338 | 339 | undefined4 Jac_GetOutputMode(void) 340 | { 341 | return uRam00000000; 342 | } 343 | 344 | void Jac_SetMixerLevel(undefined8 param_1,undefined8 param_2) 345 | { 346 | Channel_SetMixerLevel__Ff(); 347 | DsetMixerLevel__Ff(param_2); 348 | return; 349 | } 350 | 351 | -------------------------------------------------------------------------------- /Jaudio/aramcall.c: -------------------------------------------------------------------------------- 1 | 2 | void Jac_RegisterARAMCallback__FPFPcUlUlPUlP7jaheap__Ul(undefined *param_1) 3 | { 4 | ARCALL = param_1; 5 | return; 6 | } 7 | 8 | undefined4 LoadAram__FPcPUlUl(undefined4 param_1,undefined4 param_2,undefined4 param_3) 9 | { 10 | int iVar1; 11 | 12 | iVar1 = DVDT_LoadtoARAM__FUlPcUlUlUlPUlPFUl_v(0,param_1,param_3,0,0,param_2,0); 13 | if (iVar1 == -1) { 14 | param_3 = 0; 15 | } 16 | return param_3; 17 | } 18 | 19 | undefined4 20 | LoadAramSingle__FPcUlUlPUlUl 21 | (undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, 22 | undefined4 param_5) 23 | { 24 | int iVar1; 25 | 26 | iVar1 = DVDT_LoadtoARAM__FUlPcUlUlUlPUlPFUl_v(0,param_1,param_5,param_2,param_3,param_4,0); 27 | if (iVar1 == -1) { 28 | param_5 = 0; 29 | } 30 | return param_5; 31 | } 32 | 33 | void Jac_WaveDirectorySet__FPc(char *param_1) 34 | { 35 | strcpy(extdir,param_1); 36 | return; 37 | } 38 | 39 | undefined1 * Get_AramMotherHeap__Fv(void) 40 | { 41 | return aram_mother; 42 | } 43 | 44 | void Show_AramMotherHeap__Fv(void) 45 | { 46 | Jac_ShowHeap__FP7jaheap_Ul(aram_mother,0); 47 | return; 48 | } 49 | 50 | void Collect_AramMotherHeap__Fv(void) 51 | { 52 | Jac_GarbageCollection_St__FP7jaheap_(aram_mother); 53 | Show_AramMotherHeap__Fv(); 54 | return; 55 | } 56 | 57 | void Init_AramMotherHeap__Fv(void) 58 | { 59 | undefined4 uVar1; 60 | undefined4 local_8 [2]; 61 | 62 | if (init$64 == '\0') { 63 | inited$63 = 0; 64 | init$64 = '\x01'; 65 | } 66 | if (inited$63 == 0) { 67 | inited$63 = 1; 68 | uVar1 = ARAllocFull__FPUl(local_8); 69 | Jac_InitMotherHeap__FP7jaheap_UlUlUc(aram_mother,uVar1,local_8[0],0); 70 | } 71 | return; 72 | } 73 | 74 | undefined4 75 | LoadAram_Default__FPcUlUlPUlP7jaheap_ 76 | (char *param_1,int param_2,int param_3,undefined4 param_4,int param_5) 77 | { 78 | undefined4 uVar1; 79 | int iVar2; 80 | char acStack_a4 [144]; 81 | 82 | if (first != 0) { 83 | Init_AramMotherHeap__Fv(); 84 | first = 0; 85 | } 86 | strcpy(acStack_a4,extdir); 87 | strcat(acStack_a4,param_1); 88 | if ((param_2 == 0) && (param_3 == 0)) { 89 | uVar1 = DVDT_CheckFile__FPc(acStack_a4); 90 | iVar2 = Jac_AllocHeap__FP7jaheap_P7jaheap_Ul(param_5,aram_mother,uVar1); 91 | if (iVar2 == 0) { 92 | uVar1 = 0; 93 | } 94 | else { 95 | uVar1 = LoadAram__FPcPUlUl(acStack_a4,param_4,*(undefined4 *)(param_5 + 8)); 96 | } 97 | } 98 | else { 99 | iVar2 = Jac_AllocHeap__FP7jaheap_P7jaheap_Ul(param_5,aram_mother,param_3); 100 | if (iVar2 == 0) { 101 | uVar1 = 0; 102 | } 103 | else { 104 | uVar1 = LoadAramSingle__FPcUlUlPUlUl 105 | (acStack_a4,param_2,param_3,param_4,*(undefined4 *)(param_5 + 8)); 106 | } 107 | } 108 | return uVar1; 109 | } 110 | 111 | void LoadAram_All__FPcPUlP7jaheap_(undefined4 param_1,undefined4 param_2,undefined4 param_3) 112 | { 113 | (*(code *)ARCALL)(param_1,0,0,param_2,param_3); 114 | return; 115 | } 116 | 117 | void LoadAram_One__FPcUlUlPUlP7jaheap_(void) 118 | { 119 | (*(code *)ARCALL)(); 120 | return; 121 | } 122 | 123 | -------------------------------------------------------------------------------- /Jaudio/astest.c: -------------------------------------------------------------------------------- 1 | void CopyStc__FP9commonch_P9commonch_(int param_1,int param_2) 2 | { 3 | undefined4 uVar1; 4 | undefined4 *puVar2; 5 | undefined4 *puVar3; 6 | int iVar4; 7 | 8 | iVar4 = 4; 9 | puVar2 = (undefined4 *)(param_2 + -8); 10 | puVar3 = (undefined4 *)(param_1 + -8); 11 | do { 12 | uVar1 = puVar2[3]; 13 | puVar3[2] = puVar2[2]; 14 | puVar3[3] = uVar1; 15 | iVar4 = iVar4 + -1; 16 | puVar2 = puVar2 + 2; 17 | puVar3 = puVar3 + 2; 18 | } while (iVar4 != 0); 19 | return; 20 | } 21 | 22 | -------------------------------------------------------------------------------- /Jaudio/audiothread.c: -------------------------------------------------------------------------------- 1 | 2 | void DspSyncCountClear(undefined4 param_1) 3 | { 4 | intcount = param_1; 5 | return; 6 | } 7 | 8 | undefined4 DspSyncCountCheck(void) 9 | { 10 | return intcount; 11 | } 12 | 13 | double Jac_GetDacRate(void) 14 | { 15 | return (double)fRam00000000; 16 | } 17 | 18 | void DspSync__Fv(void) 19 | { 20 | int iVar1; 21 | 22 | if (audioproc_mq_init == 0) { 23 | DSPReleaseHalt__Fv(); 24 | } 25 | else { 26 | iVar1 = OSSendMessage(audioproc_mq,1,0); 27 | if (iVar1 == 0) { 28 | OSReport(...rodata.0); 29 | } 30 | } 31 | return; 32 | } 33 | 34 | void StopAudioThread(void) 35 | { 36 | int iVar1; 37 | 38 | if ((audioproc_mq_init != 0) && (iVar1 = OSSendMessage(audioproc_mq,3,0), iVar1 == 0)) { 39 | OSCancelThread(jac_audioThread); 40 | } 41 | return; 42 | } 43 | 44 | void AudioSync__Fv(void) 45 | { 46 | int iVar1; 47 | 48 | if (init$71 == '\0') { 49 | first$70 = 1; 50 | init$71 = '\x01'; 51 | } 52 | if (first$70 == 0) { 53 | Probe_Finish(4); 54 | } 55 | first$70 = 0; 56 | Probe_Start(4,"UPDATE-DAC"); 57 | if ((audioproc_mq_init != 0) && (iVar1 = OSSendMessage(audioproc_mq,0,0), iVar1 == 0)) { 58 | OSReport("Miss Send AudioSync\n"); 59 | } 60 | return; 61 | } 62 | 63 | void NeosSync__Fv(void) 64 | { 65 | if (audioproc_mq_init != 0) { 66 | OSSendMessage(audioproc_mq,2,1); 67 | } 68 | return; 69 | } 70 | 71 | /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ 72 | void __DspSync__FsP9OSContext(undefined4 param_1,undefined4 param_2) 73 | { 74 | undefined auStack_2d0 [716]; 75 | 76 | _DAT_cc00500a = _DAT_cc00500a & 0xffd7 | 0x80; 77 | OSClearContext(auStack_2d0); 78 | OSSetCurrentContext(auStack_2d0); 79 | DspSync__Fv(); 80 | OSClearContext(auStack_2d0); 81 | OSSetCurrentContext(param_2); 82 | return; 83 | } 84 | 85 | void __DspReg__Fv(void) 86 | { 87 | undefined4 uVar1; 88 | 89 | uVar1 = OSDisableInterrupts(); 90 | __OSSetInterruptHandler(7,__DspSync__FsP9OSContext); 91 | OSRestoreInterrupts(uVar1); 92 | return; 93 | } 94 | 95 | void audioproc__FPv(void) 96 | { 97 | int local_10 [2]; 98 | 99 | OSReport(@104); 100 | OSInitFastCast(); 101 | OSInitMessageQueue(audioproc_mq,msgbuf,0x10); 102 | audioproc_mq_init = 1; 103 | Jac_Init(); 104 | Jac_InitSinTable__Fv(); 105 | ResetPlayerCallback(); 106 | DspbufProcess__F13DSPBUF_EVENTS(0); 107 | CpubufProcess__F13DSPBUF_EVENTS(0); 108 | DspBoot__Fv(); 109 | DSP_InitBuffer__Fv(); 110 | __DspReg__Fv(); 111 | AISetDSPSampleRate(uRam00000000); 112 | AIRegisterDMACallback(AudioSync__Fv); 113 | AIStartDMA(); 114 | OSReport(@105); 115 | OSReport(@106); 116 | while( true ) { 117 | do { 118 | while( true ) { 119 | while( true ) { 120 | while( true ) { 121 | OSReceiveMessage(audioproc_mq,local_10,1); 122 | if (local_10[0] != 2) break; 123 | CpuFrameEnd__Fv(); 124 | } 125 | if (local_10[0] < 2) break; 126 | if (local_10[0] < 4) { 127 | OSReport(@109); 128 | OSExitThread(0); 129 | OSReport(@110); 130 | } 131 | } 132 | if (local_10[0] != 0) break; 133 | Jac_UpdateDAC(); 134 | } 135 | } while (local_10[0] < 0); 136 | if (intcount == 0) break; 137 | intcount = intcount + -1; 138 | if (intcount == 0) { 139 | Probe_Finish(7); 140 | DspFrameEnd__Fv(); 141 | } 142 | else { 143 | Probe_Start(2,@108); 144 | UpdateDSP__Fv(); 145 | Probe_Finish(2); 146 | } 147 | } 148 | OSReport(@107); 149 | return; 150 | } 151 | 152 | undefined4 OSInitFastCast(void) 153 | { 154 | return 0x70007; 155 | } 156 | 157 | void SetAudioThreadPriority(uint param_1,uint param_2,uint param_3) 158 | { 159 | priority_set = 1; 160 | pri = param_1 & 0xff; 161 | pri2 = param_2 & 0xff; 162 | pri3 = param_3 & 0xff; 163 | return; 164 | } 165 | 166 | void StartAudioThread(undefined4 param_1,undefined4 param_2,undefined4 param_3,uint param_4) 167 | { 168 | int iVar1; 169 | 170 | if (priority_set == 0) { 171 | OSGetCurrentThread(); 172 | iVar1 = OSGetThreadPriority(); 173 | pri = iVar1 + -3; 174 | pri3 = iVar1 + -2; 175 | pri2 = iVar1 + -1; 176 | OSReport(@126); 177 | } 178 | else { 179 | OSReport(@127); 180 | } 181 | OSReport(@128); 182 | Jac_HeapSetup(param_1,param_2); 183 | Jac_SetAudioARAMSize__FUl(param_3); 184 | Jac_InitARAM__FUl(param_4 & 4); 185 | OSReport(@129,pri); 186 | if ((param_4 & 2) != 0) { 187 | OSCreateThread(jac_audioThread,audioproc__FPv,0,neosStack,0x1000,pri,0); 188 | OSResumeThread(jac_audioThread); 189 | OSReport(@130); 190 | } 191 | if ((param_4 & 1) == 0) { 192 | OSReport(@132); 193 | } 194 | else { 195 | jac_dvdproc_init__Fv(); 196 | OSCreateThread(jac_dvdThread,&jac_dvdproc__FPv,0,audioproc_mq,0x1000,pri3,0); 197 | OSResumeThread(jac_dvdThread); 198 | OSReport(@131); 199 | } 200 | if ((param_4 & 4) != 0) { 201 | OSCreateThread(jac_neosThread,&neosproc__FPv,0,dvdStack,0x1000,pri2,0); 202 | OSResumeThread(jac_neosThread); 203 | OSReport(@133); 204 | } 205 | return; 206 | } 207 | 208 | -------------------------------------------------------------------------------- /Jaudio/autoload.c: -------------------------------------------------------------------------------- 1 | void __FinishCall__FUl(void) 2 | { 3 | return; 4 | } 5 | 6 | undefined1 * Jac_GetPhysicalBankFileName(int param_1) 7 | { 8 | return filename_table + param_1 * 0x20; 9 | } 10 | 11 | int OpenDirectory__FPc(char *param_1) 12 | { 13 | int iVar1; 14 | char *pcVar2; 15 | size_t sVar3; 16 | int iVar4; 17 | int iVar5; 18 | int iVar6; 19 | char acStack_1f8 [128]; 20 | char acStack_178 [128]; 21 | char acStack_f8 [128]; 22 | int local_78; 23 | int local_74; 24 | undefined auStack_34 [4]; 25 | int local_30; 26 | char *local_2c; 27 | int local_28; 28 | int local_24; 29 | 30 | iVar6 = 0; 31 | iVar5 = 0; 32 | for (local_78 = 0; local_78 < 0x80; local_78 = local_78 + 1) { 33 | strcpy(filename_table + local_78 * 0x20,(char *)&@123); 34 | } 35 | Bank_Init__Fv(); 36 | Wavegroup_Init__Fv(); 37 | strcpy(acStack_178,param_1); 38 | iVar1 = DVDOpenDir(acStack_178,&local_28); 39 | if (iVar1 != 0) { 40 | local_74 = 1; 41 | strcpy(acStack_f8,acStack_178); 42 | local_24 = local_28 + 1; 43 | while (iVar1 = DVDReadDir(&local_28,auStack_34), iVar1 != 0) { 44 | if (local_30 != 1) { 45 | strcpy(acStack_1f8,acStack_178); 46 | strcat(acStack_1f8,(char *)&@124); 47 | strcat(acStack_1f8,local_2c); 48 | pcVar2 = strstr(acStack_1f8,(char *)&@125); 49 | if (pcVar2 != (char *)0x0) { 50 | Jac_CheckFile__FPc(acStack_1f8); 51 | iVar1 = OSAlloc2(); 52 | if (iVar1 == 0) { 53 | return 0; 54 | } 55 | Jac_LoadFile__FPcPUc(acStack_1f8,iVar1); 56 | Bank_Regist__FPvUl(iVar1,iVar6); 57 | sVar3 = strlen(acStack_1f8); 58 | iVar4 = sVar3 - 1; 59 | iVar1 = iVar4; 60 | if (0 < iVar4) { 61 | do { 62 | if (acStack_1f8[iVar4] == '.') { 63 | acStack_1f8[iVar4] = '\0'; 64 | break; 65 | } 66 | iVar4 = iVar4 + -1; 67 | iVar1 = iVar1 + -1; 68 | } while (iVar1 != 0); 69 | } 70 | pcVar2 = acStack_1f8 + iVar4; 71 | iVar1 = iVar4; 72 | if (0 < iVar4) { 73 | do { 74 | if (*pcVar2 == '/') { 75 | iVar4 = iVar4 + 1; 76 | break; 77 | } 78 | iVar4 = iVar4 + -1; 79 | pcVar2 = pcVar2 + -1; 80 | iVar1 = iVar1 + -1; 81 | } while (iVar1 != 0); 82 | } 83 | strcpy(filename_table + iVar5,acStack_1f8 + iVar4); 84 | strcat(acStack_1f8,(char *)&@126); 85 | Jac_CheckFile__FPc(acStack_1f8); 86 | iVar1 = OSAlloc2(); 87 | if (iVar1 == 0) { 88 | return 0; 89 | } 90 | Jac_LoadFile__FPcPUc(acStack_1f8,iVar1); 91 | Wavegroup_Regist__FPvUl(iVar1,iVar6); 92 | WaveScene_Set__FUlUl(iVar6,0); 93 | Jac_BnkConnectTableSet__FUlUl(iVar6,iVar6); 94 | iVar6 = iVar6 + 1; 95 | iVar5 = iVar5 + 0x20; 96 | } 97 | } 98 | local_74 = local_74 + 1; 99 | } 100 | DVDCloseDir(&local_28); 101 | DVDChangeDir(acStack_178); 102 | } 103 | DVDT_CheckPass__FUlPUlPFUl_v(0x16d,0,0x10000); 104 | return local_74; 105 | } 106 | 107 | void AutoLoad(void) 108 | { 109 | Jac_WaveDirectorySet__FPc("/AutoLoad/"); 110 | OpenDirectory__FPc("/AutoLoad"); 111 | return; 112 | } 113 | 114 | -------------------------------------------------------------------------------- /Jaudio/bankdrv.c: -------------------------------------------------------------------------------- 1 | undefined4 Bank_InstChange__FP5Bank_Ul(int param_1,uint param_2) 2 | { 3 | undefined4 uVar1; 4 | 5 | if (0x7f < param_2) { 6 | OSReport(@46,param_2); 7 | } 8 | if (param_1 == 0) { 9 | uVar1 = 0; 10 | } 11 | else { 12 | uVar1 = *(undefined4 *)(param_1 + param_2 * 4 + 4); 13 | } 14 | return uVar1; 15 | } 16 | 17 | undefined4 Bank_VoiceChange__FP5Bank_Ul(int param_1,uint param_2) 18 | { 19 | undefined4 uVar1; 20 | 21 | if ((param_2 < 0x80) || (0xe3 < param_2)) { 22 | OSReport("Bad VOICE Program Change %d \n",param_2); 23 | } 24 | if (param_1 == 0) { 25 | uVar1 = 0; 26 | } 27 | else { 28 | uVar1 = *(undefined4 *)(param_1 + param_2 * 4 + 4); 29 | } 30 | return uVar1; 31 | } 32 | 33 | undefined4 Bank_PercChange__FP5Bank_Ul(int param_1,uint param_2) 34 | { 35 | undefined4 uVar1; 36 | 37 | if (param_2 < 0xe4) { 38 | OSReport("Bad PERC Program Change %d \n",param_2); 39 | } 40 | if (param_1 == 0) { 41 | uVar1 = 0; 42 | } 43 | else { 44 | uVar1 = *(undefined4 *)(param_1 + param_2 * 4 + 4); 45 | } 46 | return uVar1; 47 | } 48 | 49 | int Bank_GetInstKeymap__FP5Inst_Uc(int param_1,byte param_2) 50 | { 51 | int iVar1; 52 | int iVar2; 53 | int iVar3; 54 | 55 | if (param_1 == 0) { 56 | iVar1 = 0; 57 | } 58 | else { 59 | iVar3 = 0; 60 | iVar2 = 0; 61 | for (iVar1 = *(int *)(param_1 + 0x28); iVar1 != 0; iVar1 = iVar1 + -1) { 62 | if (param_2 <= **(byte **)(param_1 + iVar2 + 0x2c)) { 63 | return iVar3; 64 | } 65 | iVar3 = iVar3 + 1; 66 | iVar2 = iVar2 + 4; 67 | } 68 | OSReport(&@71); 69 | iVar1 = -1; 70 | } 71 | return iVar1; 72 | } 73 | 74 | byte * Bank_GetInstVmap__FP5Inst_UcUc(int param_1,undefined4 param_2,byte param_3) 75 | { 76 | int iVar1; 77 | byte *pbVar2; 78 | int iVar3; 79 | int iVar4; 80 | byte *unaff_r31; 81 | 82 | if (param_1 == 0) { 83 | pbVar2 = (byte *)0x0; 84 | } 85 | else { 86 | pbVar2 = (byte *)Bank_GetInstKeymap__FP5Inst_Uc(param_1); 87 | if (pbVar2 != (byte *)0xffffffff) { 88 | iVar4 = *(int *)(param_1 + (int)pbVar2 * 4 + 0x2c); 89 | iVar3 = 0; 90 | for (iVar1 = *(int *)(iVar4 + 4); iVar1 != 0; iVar1 = iVar1 + -1) { 91 | unaff_r31 = *(byte **)(iVar4 + iVar3 + 8); 92 | if (param_3 <= *unaff_r31) { 93 | return unaff_r31; 94 | } 95 | iVar3 = iVar3 + 4; 96 | } 97 | OSReport(&@87,param_3,*unaff_r31); 98 | pbVar2 = (byte *)0x0; 99 | } 100 | } 101 | return pbVar2; 102 | } 103 | 104 | byte * Bank_GetPercVmap__FP5Perc_UcUc(int param_1,uint param_2,byte param_3) 105 | { 106 | int iVar1; 107 | byte *pbVar2; 108 | int iVar3; 109 | int iVar4; 110 | 111 | if ((param_1 != 0) && (iVar4 = *(int *)(param_1 + (param_2 & 0xff) * 4 + 0x88), iVar4 != 0)) { 112 | iVar3 = 0; 113 | for (iVar1 = *(int *)(iVar4 + 0x10); iVar1 != 0; iVar1 = iVar1 + -1) { 114 | pbVar2 = *(byte **)(iVar4 + iVar3 + 0x14); 115 | if (param_3 <= *pbVar2) { 116 | return pbVar2; 117 | } 118 | iVar3 = iVar3 + 4; 119 | } 120 | OSReport("Error: No V-Map Error\n"); 121 | } 122 | return (byte *)0x0; 123 | } 124 | 125 | undefined4 Bank_GetVoiceMap__FP6Voice_Us(int param_1,uint param_2) 126 | { 127 | return *(undefined4 *)(param_1 + (param_2 & 0xffff) * 4 + 0xc); 128 | } 129 | 130 | double Bank_SenseToOfs__FP6Sense_Uc(int param_1,uint param_2) 131 | { 132 | uint uVar1; 133 | double dVar2; 134 | 135 | if (param_1 == 0) { 136 | dVar2 = (double)@119; 137 | } 138 | else { 139 | uVar1 = (uint)*(byte *)(param_1 + 2); 140 | if ((uVar1 == 0x7f) || (uVar1 == 0)) { 141 | dVar2 = (double)(*(float *)(param_1 + 4) + 142 | ((float)((double)CONCAT44(0x43300000,param_2 & 0xff) - @122) * 143 | (*(float *)(param_1 + 8) - *(float *)(param_1 + 4))) / @120); 144 | } 145 | else { 146 | param_2 = param_2 & 0xff; 147 | if (param_2 < uVar1) { 148 | dVar2 = (double)((@119 - *(float *)(param_1 + 4)) * 149 | ((float)((double)CONCAT44(0x43300000,param_2) - @122) / 150 | (float)((double)CONCAT44(0x43300000,uVar1) - @122)) + 151 | *(float *)(param_1 + 4)); 152 | } 153 | else { 154 | dVar2 = (double)((*(float *)(param_1 + 8) - @119) * 155 | ((float)((double)CONCAT44(0x43300000,param_2 - uVar1 ^ 0x80000000) - @124) 156 | / (float)((double)CONCAT44(0x43300000,0x7f - uVar1 ^ 0x80000000) - @124)) + 157 | @119); 158 | } 159 | } 160 | } 161 | return dVar2; 162 | } 163 | 164 | double Bank_RandToOfs__FP5Rand_(int param_1) 165 | { 166 | float fVar1; 167 | double dVar2; 168 | 169 | fVar1 = @119; 170 | if (param_1 != 0) { 171 | dVar2 = (double)GetRandom_sf32(); 172 | fVar1 = (float)(dVar2 * (double)*(float *)(param_1 + 8)) + *(float *)(param_1 + 4); 173 | } 174 | return (double)fVar1; 175 | } 176 | 177 | double Bank_OscToOfs__FP4Osc_P7Oscbuf_(int param_1,char *param_2) 178 | { 179 | char cVar1; 180 | byte bVar2; 181 | float fVar3; 182 | short sVar4; 183 | ushort uVar5; 184 | short sVar6; 185 | double dVar7; 186 | float fVar8; 187 | float fVar9; 188 | float fVar10; 189 | short *psVar11; 190 | undefined1 *puVar12; 191 | double dVar13; 192 | 193 | if (param_1 == 0) { 194 | dVar13 = (double)@119; 195 | *(float *)(param_2 + 8) = @119; 196 | } 197 | else { 198 | if (*param_2 == '\x04') { 199 | if (*(int *)(param_1 + 8) != *(int *)(param_1 + 0xc)) { 200 | *(undefined2 *)(param_2 + 2) = 0; 201 | *(float *)(param_2 + 4) = @193; 202 | *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(param_2 + 8); 203 | } 204 | if ((*(int *)(param_1 + 0xc) == 0) && (*(short *)(param_2 + 0x14) == 0)) { 205 | *(undefined2 *)(param_2 + 0x14) = 0x10; 206 | } 207 | if (*(short *)(param_2 + 0x14) == 0) { 208 | *param_2 = '\x05'; 209 | } 210 | else { 211 | *param_2 = '\b'; 212 | param_2[1] = (byte)((ushort)*(undefined2 *)(param_2 + 0x14) >> 0xe); 213 | *(float *)(param_2 + 4) = 214 | (float)((double)CONCAT44(0x43300000,*(ushort *)(param_2 + 0x14) & 0x3fff ^ 0x80000000) 215 | - @124) * ((fRam00000000 / @194) / @195); 216 | if (*(float *)(param_2 + 4) < @119) { 217 | *(float *)(param_2 + 4) = @119; 218 | } 219 | *(float *)(param_2 + 0xc) = @193; 220 | *(float *)(param_2 + 0x10) = 221 | (*(float *)(param_2 + 0xc) - *(float *)(param_2 + 8)) / *(float *)(param_2 + 4); 222 | } 223 | } 224 | if (*param_2 == '\x06') { 225 | *(undefined2 *)(param_2 + 2) = 0; 226 | *(float *)(param_2 + 4) = @193; 227 | *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(param_2 + 8); 228 | *param_2 = '\a'; 229 | } 230 | cVar1 = *param_2; 231 | if (cVar1 == '\x05') { 232 | puVar12 = *(undefined1 **)(param_1 + 0xc); 233 | } 234 | else if (cVar1 == '\a') { 235 | puVar12 = FORCE_RELEASE_TABLE; 236 | } 237 | else { 238 | puVar12 = *(undefined1 **)(param_1 + 8); 239 | } 240 | if ((puVar12 == (undefined1 *)0x0) && (cVar1 != '\b')) { 241 | dVar13 = (double)@119; 242 | *(float *)(param_2 + 8) = @119; 243 | } 244 | else if (cVar1 == '\0') { 245 | dVar13 = (double)@119; 246 | } 247 | else if (cVar1 == '\x03') { 248 | dVar13 = (double)(*(float *)(param_2 + 8) * *(float *)(param_1 + 0x10) + 249 | *(float *)(param_1 + 0x14)); 250 | } 251 | else { 252 | if (cVar1 == '\x01') { 253 | *param_2 = '\x02'; 254 | *(undefined2 *)(param_2 + 2) = 0; 255 | fVar3 = @193; 256 | *(float *)(param_2 + 4) = @193; 257 | *(float *)(param_2 + 0xc) = fVar3; 258 | *(undefined2 *)(param_2 + 0x14) = 0; 259 | fVar3 = *(float *)(param_1 + 4); 260 | } 261 | else { 262 | fVar3 = *(float *)(param_1 + 4); 263 | } 264 | if (*param_2 == '\a') { 265 | fVar3 = @119; 266 | } 267 | *(float *)(param_2 + 4) = *(float *)(param_2 + 4) - fVar3; 268 | fVar10 = @196; 269 | fVar9 = @195; 270 | fVar8 = @194; 271 | fVar3 = @193; 272 | dVar7 = @124; 273 | dVar13 = @122; 274 | while (*(float *)(param_2 + 4) <= fVar3) { 275 | *(undefined4 *)(param_2 + 8) = *(undefined4 *)(param_2 + 0xc); 276 | if (*param_2 == '\b') { 277 | *param_2 = '\0'; 278 | break; 279 | } 280 | psVar11 = (short *)(puVar12 + (uint)*(ushort *)(param_2 + 2) * 6); 281 | sVar4 = *psVar11; 282 | uVar5 = psVar11[1]; 283 | sVar6 = psVar11[2]; 284 | if (sVar4 == 0xd) { 285 | *(short *)(param_2 + 2) = sVar6; 286 | } 287 | else { 288 | if (sVar4 == 0xf) { 289 | *param_2 = '\0'; 290 | break; 291 | } 292 | if (sVar4 == 0xe) { 293 | *param_2 = '\x03'; 294 | return (double)(*(float *)(param_2 + 8) * *(float *)(param_1 + 0x10) + 295 | *(float *)(param_1 + 0x14)); 296 | } 297 | param_2[1] = (char)sVar4; 298 | if (uVar5 == 0) { 299 | *(float *)(param_2 + 0xc) = 300 | (float)((double)CONCAT44(0x43300000,(int)sVar6 ^ 0x80000000) - dVar7) / fVar10; 301 | *(short *)(param_2 + 2) = *(short *)(param_2 + 2) + 1; 302 | } 303 | else { 304 | *(float *)(param_2 + 4) = 305 | (float)((double)CONCAT44(0x43300000,(uint)uVar5) - dVar13) * 306 | ((fRam00000000 / fVar8) / fVar9); 307 | *(float *)(param_2 + 0xc) = 308 | (float)((double)CONCAT44(0x43300000,(int)sVar6 ^ 0x80000000) - dVar7) / fVar10; 309 | *(float *)(param_2 + 0x10) = 310 | (*(float *)(param_2 + 0xc) - *(float *)(param_2 + 8)) / *(float *)(param_2 + 4); 311 | *(short *)(param_2 + 2) = *(short *)(param_2 + 2) + 1; 312 | } 313 | } 314 | } 315 | dVar13 = -(double)(*(float *)(param_2 + 0x10) * *(float *)(param_2 + 4) - 316 | *(float *)(param_2 + 0xc)); 317 | *(float *)(param_2 + 8) = (float)dVar13; 318 | bVar2 = param_2[1]; 319 | if (bVar2 == 1) { 320 | if (dVar13 <= (double)@193) { 321 | dVar13 = (double)(float)(-dVar13 * dVar13); 322 | } 323 | else { 324 | dVar13 = (double)(float)(dVar13 * dVar13); 325 | } 326 | } 327 | else if ((bVar2 != 0) && (bVar2 < 3)) { 328 | if (dVar13 <= (double)@193) { 329 | dVar13 = (double)sqrtf2__Ff(-dVar13); 330 | dVar13 = -dVar13; 331 | } 332 | else { 333 | dVar13 = (double)sqrtf2__Ff(); 334 | } 335 | } 336 | dVar13 = (double)(float)(dVar13 * (double)*(float *)(param_1 + 0x10) + 337 | (double)*(float *)(param_1 + 0x14)); 338 | } 339 | } 340 | return dVar13; 341 | } 342 | 343 | -------------------------------------------------------------------------------- /Jaudio/bankloader.c: -------------------------------------------------------------------------------- 1 | void Bank_Setup__FPc(undefined4 param_1) 2 | { 3 | int iVar1; 4 | int *piVar2; 5 | int *piVar3; 6 | uint uVar4; 7 | uint uVar5; 8 | int iVar6; 9 | 10 | OSReport(...rodata.0); 11 | Bank_Init__Fv(); 12 | DVDT_CheckFile__FPc(param_1); 13 | piVar2 = (int *)OSAlloc2(); 14 | if (piVar2 == (int *)0x0) { 15 | Console_printf(@100); 16 | } 17 | DVDT_LoadFile__FPcPUc(param_1,piVar2); 18 | Console_printf(@101); 19 | Wavegroup_Init__Fv(); 20 | iVar1 = *piVar2; 21 | uVar5 = piVar2[1]; 22 | iVar6 = 0; 23 | for (uVar4 = 0; uVar4 < uVar5; uVar4 = uVar4 + 1) { 24 | piVar3 = (int *)((int)piVar2 + iVar6 + iVar1); 25 | if (piVar3[1] != 0) { 26 | Wavegroup_Regist__FPvUl((int)piVar2 + *piVar3,uVar4); 27 | } 28 | iVar6 = iVar6 + 8; 29 | } 30 | OSReport(@102); 31 | iVar1 = piVar2[2]; 32 | uVar5 = piVar2[3]; 33 | iVar6 = 0; 34 | for (uVar4 = 0; uVar4 < uVar5; uVar4 = uVar4 + 1) { 35 | piVar3 = (int *)((int)piVar2 + iVar6 + iVar1); 36 | if (piVar3[1] != 0) { 37 | Bank_Regist__FPvUl((int)piVar2 + *piVar3,uVar4); 38 | } 39 | iVar6 = iVar6 + 8; 40 | } 41 | OSReport(@103); 42 | return; 43 | } 44 | -------------------------------------------------------------------------------- /Jaudio/bankread.c: -------------------------------------------------------------------------------- 1 | void PTconvert__FPPvUl(uint *param_1,uint param_2) 2 | { 3 | uint uVar1; 4 | 5 | uVar1 = *param_1; 6 | if (param_2 <= uVar1) { 7 | return; 8 | } 9 | if (uVar1 == 0) { 10 | return; 11 | } 12 | *param_1 = uVar1 + param_2; 13 | return; 14 | } 15 | 16 | int Bank_Test__FPUc(int param_1) 17 | { 18 | uint uVar1; 19 | uint uVar2; 20 | uint uVar3; 21 | int iVar4; 22 | int iVar5; 23 | int iVar6; 24 | int *piVar7; 25 | int iVar8; 26 | int iVar9; 27 | int iVar10; 28 | 29 | iVar10 = param_1 + 0x20; 30 | if (*(int *)(param_1 + 0x20) == 0x42414e4b) { 31 | uVar1 = 0; 32 | iVar5 = 0; 33 | do { 34 | piVar7 = (int *)(iVar10 + iVar5 + 4); 35 | PTconvert__FPPvUl(piVar7,param_1); 36 | iVar4 = *piVar7; 37 | if (iVar4 != 0) { 38 | uVar3 = 0; 39 | iVar8 = 0; 40 | do { 41 | iVar9 = iVar4 + iVar8; 42 | piVar7 = (int *)(iVar9 + 0x10); 43 | PTconvert__FPPvUl(piVar7,param_1); 44 | PTconvert__FPPvUl(iVar9 + 0x18,param_1); 45 | PTconvert__FPPvUl(iVar9 + 0x20,param_1); 46 | if (*piVar7 != 0) { 47 | PTconvert__FPPvUl(*piVar7 + 8,param_1); 48 | PTconvert__FPPvUl(*piVar7 + 0xc,param_1); 49 | } 50 | uVar3 = uVar3 + 1; 51 | iVar8 = iVar8 + 4; 52 | } while (uVar3 < 2); 53 | iVar8 = 0; 54 | for (uVar3 = 0; uVar3 < *(uint *)(iVar4 + 0x28); uVar3 = uVar3 + 1) { 55 | PTconvert__FPPvUl(iVar4 + iVar8 + 0x2c,param_1); 56 | iVar9 = 0; 57 | for (uVar2 = 0; iVar6 = *(int *)(iVar4 + iVar8 + 0x2c), uVar2 < *(uint *)(iVar6 + 4); 58 | uVar2 = uVar2 + 1) { 59 | PTconvert__FPPvUl(iVar6 + iVar9 + 8,param_1); 60 | iVar9 = iVar9 + 4; 61 | } 62 | iVar8 = iVar8 + 4; 63 | } 64 | } 65 | uVar1 = uVar1 + 1; 66 | iVar5 = iVar5 + 4; 67 | } while (uVar1 < 0x80); 68 | uVar1 = 0; 69 | iVar5 = 0; 70 | do { 71 | piVar7 = (int *)(iVar10 + iVar5 + 0x204); 72 | PTconvert__FPPvUl(piVar7,param_1); 73 | iVar4 = *piVar7; 74 | if (iVar4 != 0) { 75 | iVar8 = 0; 76 | for (uVar3 = 0; uVar3 < *(uint *)(iVar4 + 8); uVar3 = uVar3 + 1) { 77 | PTconvert__FPPvUl(iVar4 + iVar8 + 0xc,param_1); 78 | iVar8 = iVar8 + 4; 79 | } 80 | } 81 | uVar1 = uVar1 + 1; 82 | iVar5 = iVar5 + 4; 83 | } while (uVar1 < 100); 84 | uVar1 = 0; 85 | iVar5 = 0; 86 | do { 87 | piVar7 = (int *)(iVar10 + iVar5 + 0x394); 88 | PTconvert__FPPvUl(piVar7,param_1); 89 | iVar4 = *piVar7; 90 | if (iVar4 != 0) { 91 | uVar3 = 0; 92 | iVar8 = 0; 93 | do { 94 | piVar7 = (int *)(iVar4 + iVar8 + 0x88); 95 | PTconvert__FPPvUl(piVar7,param_1); 96 | iVar9 = *piVar7; 97 | if (iVar9 != 0) { 98 | PTconvert__FPPvUl(iVar9 + 8,param_1); 99 | PTconvert__FPPvUl(iVar9 + 0xc,param_1); 100 | iVar6 = 0; 101 | for (uVar2 = 0; uVar2 < *(uint *)(iVar9 + 0x10); uVar2 = uVar2 + 1) { 102 | PTconvert__FPPvUl(iVar9 + iVar6 + 0x14,param_1); 103 | iVar6 = iVar6 + 4; 104 | } 105 | } 106 | uVar3 = uVar3 + 1; 107 | iVar8 = iVar8 + 4; 108 | } while (uVar3 < 0x80); 109 | } 110 | uVar1 = uVar1 + 1; 111 | iVar5 = iVar5 + 4; 112 | } while (uVar1 < 0xc); 113 | } 114 | else { 115 | iVar10 = 0; 116 | } 117 | return iVar10; 118 | } 119 | 120 | bool __Bank_Regist_Inner__FPUcUlUl(undefined4 param_1,int param_2,undefined4 param_3) 121 | { 122 | int iVar1; 123 | 124 | Jac_BnkConnectTableSet__FUlUl(param_3); 125 | iVar1 = Bank_Test__FPUc(param_1); 126 | *(int *)(bankp + param_2 * 4) = iVar1; 127 | return *(int *)(bankp + param_2 * 4) != 0; 128 | } 129 | 130 | void Bank_Regist__FPvUl(int param_1,undefined4 param_2) 131 | { 132 | __Bank_Regist_Inner__FPUcUlUl(param_1,param_2,*(undefined4 *)(param_1 + 8)); 133 | return; 134 | } 135 | 136 | void Bank_Regist_Direct__FPvUlUl(void) 137 | { 138 | __Bank_Regist_Inner__FPUcUlUl(); 139 | return; 140 | } 141 | 142 | 143 | void Bank_Init__Fv(void) 144 | { 145 | int iVar1; 146 | undefined4 *puVar2; 147 | int iVar3; 148 | 149 | iVar1 = 0; 150 | iVar3 = 0x100; 151 | do { 152 | puVar2 = (undefined4 *)(bankp + iVar1); 153 | iVar1 = iVar1 + 4; 154 | *puVar2 = 0; 155 | iVar3 = iVar3 + -1; 156 | } while (iVar3 != 0); 157 | return; 158 | } 159 | 160 | undefined4 Bank_Get__FUl(uint param_1) 161 | { 162 | if (0xff < param_1) { 163 | return 0; 164 | } 165 | return *(undefined4 *)(bankp + param_1 * 4); 166 | } 167 | 168 | -------------------------------------------------------------------------------- /Jaudio/ipldec.c: -------------------------------------------------------------------------------- 1 | undefined1 * 2 | WriteTask__FUcUlPvPFPv_v(undefined param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) 3 | { 4 | int iVar1; 5 | 6 | if (TASK_REMAIN == '\x04') { 7 | return (undefined1 *)0x0; 8 | } 9 | iVar1 = (uint)TASK_WRITEPTR * 0x10; 10 | EX_DSPTASK[iVar1] = param_1; 11 | *(undefined4 *)(EX_DSPTASK + iVar1 + 4) = param_2; 12 | *(undefined4 *)(EX_DSPTASK + iVar1 + 8) = param_3; 13 | *(undefined4 *)(EX_DSPTASK + iVar1 + 0xc) = param_4; 14 | TASK_WRITEPTR = TASK_WRITEPTR + 1; 15 | if (TASK_WRITEPTR == '\x04') { 16 | TASK_WRITEPTR = '\0'; 17 | } 18 | TASK_REMAIN = TASK_REMAIN + '\x01'; 19 | return EX_DSPTASK; 20 | } 21 | 22 | /* WARNING: Removing unreachable block (ram,0x000100d4) */ 23 | void DoTask__Fv(void) 24 | { 25 | int iVar1; 26 | code *pcVar2; 27 | undefined4 uVar3; 28 | undefined4 uVar4; 29 | 30 | for (; TASK_REMAIN != '\0'; TASK_REMAIN = TASK_REMAIN + -1) { 31 | iVar1 = (uint)TASK_READPTR * 0x10; 32 | uVar4 = *(undefined4 *)(EX_DSPTASK + iVar1 + 8); 33 | uVar3 = *(undefined4 *)(EX_DSPTASK + iVar1 + 4); 34 | pcVar2 = *(code **)(EX_DSPTASK + iVar1 + 0xc); 35 | if (EX_DSPTASK[iVar1] == '\x01') { 36 | OSReport("Do AGB Task \n"); 37 | DagbSec__FUl(uVar3); 38 | OSReport(" AGB Task Finish\n"); 39 | } 40 | else if (EX_DSPTASK[iVar1] == '\0') { 41 | OSReport("Do CARD Task \n"); 42 | DiplSec__FUl(uVar3); 43 | OSReport(" CARD Task Finish\n"); 44 | } 45 | if (pcVar2 == (code *)0x0) { 46 | OSReport(" Audio Error:: DSP_SECURITY_CALLBACK is NULL\n"); 47 | } 48 | else { 49 | (*pcVar2)(uVar4); 50 | } 51 | TASK_READPTR = TASK_READPTR + 1; 52 | if (TASK_READPTR == 4) { 53 | TASK_READPTR = 0; 54 | } 55 | } 56 | return; 57 | } 58 | 59 | undefined4 DspExtraTaskCheck__Fv(void) 60 | { 61 | DoTask__Fv(); 62 | return 1; 63 | } 64 | 65 | undefined4 Jac_IPLDspSec(int param_1) 66 | { 67 | undefined auStack_c [4]; 68 | 69 | if (init$49 == '\0') { 70 | first$48 = '\x01'; 71 | init$49 = '\x01'; 72 | } 73 | if (first$48 != '\0') { 74 | OSInitMessageQueue(dspsec_mq,&msgbuf,1); 75 | first$48 = '\0'; 76 | } 77 | *(undefined4 *)(param_1 + 8) = uRam00000000; 78 | DCStoreRange(param_1,0x10); 79 | OSReceiveMessage(dspsec_mq,auStack_c,0); 80 | DSP_SECURITY_FLAG = param_1; 81 | OSReceiveMessage(dspsec_mq,auStack_c,1); 82 | return 0; 83 | } 84 | 85 | void Jac_DSPcardDecodeAsync__FPvPvPFPv_v(undefined4 param_1,undefined4 param_2,undefined4 param_3) 86 | { 87 | int iVar1; 88 | 89 | do { 90 | iVar1 = WriteTask__FUcUlPvPFPv_v(0,param_2,param_1,param_3); 91 | } while (iVar1 == 0); 92 | return; 93 | } 94 | 95 | void Jac_DSPagbDecodeAsync__FPvPvPFPv_v(undefined4 param_1,undefined4 param_2,undefined4 param_3) 96 | { 97 | int iVar1; 98 | 99 | do { 100 | iVar1 = WriteTask__FUcUlPvPFPv_v(1,param_2,param_1,param_3); 101 | } while (iVar1 == 0); 102 | return; 103 | } 104 | 105 | -------------------------------------------------------------------------------- /Jaudio/ja_calc.c: -------------------------------------------------------------------------------- 1 | void sqrtf2__Ff(void) 2 | { 3 | sqrtf__3stdFf(); 4 | return; 5 | } 6 | 7 | double sqrtf__3stdFf(double param_1) 8 | { 9 | double dVar1; 10 | 11 | if ((double)@109 < param_1) { 12 | dVar1 = 1.0 / SQRT(param_1); 13 | dVar1 = @110 * dVar1 * -(param_1 * dVar1 * dVar1 - @111); 14 | dVar1 = @110 * dVar1 * -(param_1 * dVar1 * dVar1 - @111); 15 | param_1 = (double)(float)(param_1 * @110 * dVar1 * -(param_1 * dVar1 * dVar1 - @111)); 16 | } 17 | return param_1; 18 | } 19 | 20 | double cosf2__Ff(double param_1) 21 | { 22 | float fVar1; 23 | 24 | fVar1 = cosf((float)param_1); 25 | return (double)fVar1; 26 | } 27 | 28 | double atanf2__Fff(double param_1,double param_2) 29 | { 30 | double dVar1; 31 | 32 | dVar1 = atan2(param_1,param_2); 33 | return (double)(float)dVar1; 34 | } 35 | 36 | double sinf2__Ff(double param_1) 37 | { 38 | float fVar1; 39 | 40 | fVar1 = sinf((float)param_1); 41 | return (double)fVar1; 42 | } 43 | 44 | 45 | void Jac_InitSinTable__Fv(void) 46 | { 47 | uint uVar1; 48 | int iVar2; 49 | double dVar3; 50 | double dVar4; 51 | double dVar5; 52 | float fVar6; 53 | 54 | _savefpr_29(); 55 | dVar3 = (double)@121; 56 | dVar5 = (double)@122; 57 | uVar1 = 0; 58 | iVar2 = 0; 59 | dVar4 = @124; 60 | do { 61 | fVar6 = sinf((float)((double)(float)(dVar3 * (double)(float)((double)CONCAT44(0x43300000,uVar1) 62 | - dVar4)) * dVar5)); 63 | uVar1 = uVar1 + 1; 64 | *(float *)(SINTABLE + iVar2) = fVar6; 65 | iVar2 = iVar2 + 4; 66 | } while (uVar1 < 0x101); 67 | _restfpr_29(); 68 | return; 69 | } 70 | 71 | double sinf3__Ff(double param_1) 72 | { 73 | return (double)*(float *)(SINTABLE + (int)((double)@126 * param_1) * 4); 74 | } 75 | 76 | -------------------------------------------------------------------------------- /Jaudio/os.c: -------------------------------------------------------------------------------- 1 | void osWritebackDCacheAll__Fv(void) 2 | { 3 | return; 4 | } 5 | 6 | void osInvalDCache2__FPvl(void) 7 | { 8 | DCInvalidateRange(); 9 | return; 10 | } 11 | 12 | void osWritebackDCache2__FPvl(void) 13 | { 14 | DCStoreRange(); 15 | return; 16 | } 17 | 18 | undefined4 osAiSetNextBuffer2__FPvUl(void) 19 | { 20 | return 0; 21 | } 22 | 23 | void Na_SetDiskType__Fl(int param_1) 24 | { 25 | LBAS_TABLE_TYPE = LBAS_TABLE_TYPE_LIST + param_1 * 0x22; 26 | ZONE_TABLE_TYPE = ZONE_TABLE_TYPE_LIST + param_1 * 0x10; 27 | return; 28 | } 29 | 30 | int GetLbaSize__Fl(int param_1) 31 | { 32 | int iVar1; 33 | int iVar2; 34 | int iVar3; 35 | int iVar4; 36 | 37 | iVar2 = 0; 38 | iVar3 = 1; 39 | iVar1 = 2; 40 | iVar4 = 0xf; 41 | do { 42 | if (param_1 < *(short *)(LBAS_TABLE_TYPE + iVar1)) break; 43 | iVar2 = iVar2 + 1; 44 | iVar3 = iVar3 + 1; 45 | iVar1 = iVar1 + 2; 46 | iVar4 = iVar4 + -1; 47 | } while (iVar4 != 0); 48 | if (iVar3 == 0x10) { 49 | return 0; 50 | } 51 | return (int)*(short *)(BYTES_TABLE + (char)ZONE_TABLE_TYPE[iVar2] * 2); 52 | } 53 | 54 | undefined4 SmzOfsToLBA__FPlPUl(int *param_1,int *param_2) 55 | { 56 | int iVar1; 57 | int iVar2; 58 | int iVar3; 59 | 60 | iVar3 = *param_1; 61 | iVar2 = *param_2; 62 | while( true ) { 63 | iVar1 = GetLbaSize__Fl(iVar3); 64 | if (iVar1 == 0) { 65 | return 0xffffffff; 66 | } 67 | if (iVar2 < iVar1) break; 68 | iVar2 = iVar2 - iVar1; 69 | iVar3 = iVar3 + 1; 70 | } 71 | *param_1 = iVar3; 72 | *param_2 = iVar2; 73 | return 0; 74 | } 75 | 76 | void osCreateMesgQueue__FP13OSMesgQueue_sPPvl(int param_1,undefined4 param_2,undefined4 param_3) 77 | { 78 | *(undefined4 *)(param_1 + 0x14) = param_2; 79 | *(undefined4 *)(param_1 + 0x10) = param_3; 80 | *(undefined4 *)(param_1 + 8) = 0; 81 | *(undefined4 *)(param_1 + 0xc) = 0; 82 | return; 83 | } 84 | 85 | undefined4 osSendMesg__FP13OSMesgQueue_sPvl(int param_1,undefined4 param_2) 86 | { 87 | int iVar1; 88 | int iVar2; 89 | 90 | iVar2 = *(int *)(param_1 + 0x10); 91 | if (*(int *)(param_1 + 8) == iVar2) { 92 | return 0xffffffff; 93 | } 94 | iVar1 = *(int *)(param_1 + 0xc) + *(int *)(param_1 + 8); 95 | if (iVar2 <= iVar1) { 96 | iVar1 = iVar1 - iVar2; 97 | } 98 | *(undefined4 *)(*(int *)(param_1 + 0x14) + iVar1 * 4) = param_2; 99 | *(int *)(param_1 + 8) = *(int *)(param_1 + 8) + 1; 100 | return 0; 101 | } 102 | 103 | undefined4 osRecvMesg__FP13OSMesgQueue_sPPvl(int param_1,undefined4 *param_2,int param_3) 104 | { 105 | if (param_3 == 1) { 106 | do { 107 | } while (*(int *)(param_1 + 8) == 0); 108 | } 109 | if (*(int *)(param_1 + 8) == 0) { 110 | if (param_2 != (undefined4 *)0x0) { 111 | *param_2 = 0; 112 | } 113 | return 0xffffffff; 114 | } 115 | *(int *)(param_1 + 8) = *(int *)(param_1 + 8) + -1; 116 | if (param_2 != (undefined4 *)0x0) { 117 | *param_2 = *(undefined4 *)(*(int *)(param_1 + 0x14) + *(int *)(param_1 + 0xc) * 4); 118 | } 119 | *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1; 120 | if (*(int *)(param_1 + 0xc) == *(int *)(param_1 + 0x10)) { 121 | *(undefined4 *)(param_1 + 0xc) = 0; 122 | } 123 | return 0; 124 | } 125 | 126 | undefined4 osEPiStartDma__FP10OSPiHandleP8OSIoMesgl(undefined4 param_1,int param_2) 127 | { 128 | ARAMStartDMAmesg__FUlUlUlUllP13OSMesgQueue_s 129 | (1,*(undefined4 *)(param_2 + 8),*(undefined4 *)(param_2 + 0xc), 130 | *(undefined4 *)(param_2 + 0x10),0,*(undefined4 *)(param_2 + 4)); 131 | return 0; 132 | } 133 | 134 | void bcopy__FPvPvUl(void) 135 | { 136 | Jac_bcopy__FPvPvl(); 137 | return; 138 | } 139 | 140 | void DumpMemory__FUlUl(undefined4 param_1,uint param_2) 141 | { 142 | uint uVar1; 143 | int iVar2; 144 | 145 | for (uVar1 = 0; uVar1 < param_2; uVar1 = uVar1 + 1) { 146 | iVar2 = 0x10; 147 | do { 148 | iVar2 = iVar2 + -1; 149 | } while (iVar2 != 0); 150 | } 151 | return; 152 | } 153 | 154 | -------------------------------------------------------------------------------- /Jaudio/virload.c: -------------------------------------------------------------------------------- 1 | void JV_InitHeader__FPc(undefined4 param_1) 2 | { 3 | JV_InitHeader_M__FPcPUcPUc(param_1,0,0); 4 | return; 5 | } 6 | 7 | undefined4 JV_InitHeader_M__FPcPUcPUc(char *param_1,int param_2,undefined4 param_3) 8 | { 9 | int iVar1; 10 | size_t sVar2; 11 | char *pcVar3; 12 | size_t sVar4; 13 | 14 | if (param_2 == 0) { 15 | iVar1 = DVDT_CheckFile__FPc(param_1); 16 | if (iVar1 == 0) { 17 | OSReport(...rodata.0,param_1); 18 | return 0; 19 | } 20 | param_2 = OSAlloc2(); 21 | if (param_2 == 0) { 22 | OSReport(@52); 23 | return 0; 24 | } 25 | iVar1 = DVDT_LoadFile__FPcPUc(param_1,param_2); 26 | if (iVar1 == 0) { 27 | OSReport(@53); 28 | return 0; 29 | } 30 | } 31 | sVar2 = strlen(param_1); 32 | sVar2 = sVar2 - 1; 33 | sVar4 = sVar2; 34 | for (pcVar3 = param_1 + sVar2; (sVar4 != 0 && (*pcVar3 != '/')); pcVar3 = pcVar3 + -1) { 35 | sVar2 = sVar2 - 1; 36 | sVar4 = sVar4 - 1; 37 | } 38 | if (sVar2 == 0) { 39 | strcpy(JV_DIR_NAME + JV_CURRENT_ARCS * 0x40,(char *)&@54); 40 | } 41 | else { 42 | strncpy(JV_DIR_NAME + JV_CURRENT_ARCS * 0x40,param_1,sVar2); 43 | } 44 | strcpy(JV_ARC_NAME + JV_CURRENT_ARCS * 0x20,param_1 + sVar2 + 1); 45 | iVar1 = JV_CURRENT_ARCS * 4; 46 | *(int *)(JV_ARC + iVar1) = param_2; 47 | iVar1 = *(int *)(JV_ARC + iVar1); 48 | OSReport(&@55,iVar1,iVar1 + 4,*(undefined4 *)(iVar1 + 0xc)); 49 | *(undefined4 *)(*(int *)(JV_ARC + JV_CURRENT_ARCS * 4) + 8) = param_3; 50 | JV_CURRENT_ARCS = JV_CURRENT_ARCS + 1; 51 | return 1; 52 | } 53 | 54 | int JV_GetArchiveHandle__FPc(char *param_1) 55 | { 56 | int iVar1; 57 | uint uVar2; 58 | int iVar3; 59 | 60 | uVar2 = 0; 61 | iVar3 = 0; 62 | while ((uVar2 < JV_CURRENT_ARCS && (iVar1 = strcmp(param_1,JV_ARC_NAME + iVar3), iVar1 != 0))) { 63 | uVar2 = uVar2 + 1; 64 | iVar3 = iVar3 + 0x20; 65 | } 66 | if (uVar2 == JV_CURRENT_ARCS) { 67 | iVar3 = -1; 68 | } 69 | else { 70 | iVar3 = uVar2 << 0x10; 71 | } 72 | return iVar3; 73 | } 74 | 75 | uint JV_GetLogicalHandleS__FPcPc(char *param_1,char *param_2) 76 | { 77 | uint uVar1; 78 | int iVar2; 79 | uint uVar3; 80 | int iVar4; 81 | int iVar5; 82 | 83 | uVar3 = 0; 84 | iVar4 = 0; 85 | while ((uVar3 < JV_CURRENT_ARCS && (iVar5 = strcmp(param_1,JV_ARC_NAME + iVar4), iVar5 != 0))) { 86 | uVar3 = uVar3 + 1; 87 | iVar4 = iVar4 + 0x20; 88 | } 89 | if (uVar3 == JV_CURRENT_ARCS) { 90 | uVar1 = 0xffffffff; 91 | } 92 | else { 93 | uVar1 = 0; 94 | iVar4 = *(int *)(JV_ARC + uVar3 * 4); 95 | iVar5 = 0; 96 | while ((uVar1 < *(uint *)(iVar4 + 0xc) && 97 | (iVar2 = strcmp((char *)(iVar4 + iVar5 + 0x20),param_2), iVar2 != 0))) { 98 | uVar1 = uVar1 + 1; 99 | iVar5 = iVar5 + 0x20; 100 | } 101 | if (uVar1 == *(uint *)(iVar4 + 0xc)) { 102 | uVar1 = 0xffffffff; 103 | } 104 | else { 105 | uVar1 = uVar3 << 0x10 | uVar1; 106 | } 107 | } 108 | return uVar1; 109 | } 110 | 111 | uint JV_GetLogicalHandle__FPc(char *param_1) 112 | { 113 | size_t sVar1; 114 | char *pcVar2; 115 | uint uVar3; 116 | int iVar4; 117 | uint uVar5; 118 | int iVar6; 119 | int iVar7; 120 | size_t sVar8; 121 | char acStack_114 [128]; 122 | char acStack_94 [132]; 123 | 124 | sVar1 = strlen(param_1); 125 | sVar1 = sVar1 - 1; 126 | sVar8 = sVar1; 127 | for (pcVar2 = param_1 + sVar1; (sVar8 != 0 && (*pcVar2 != '/')); pcVar2 = pcVar2 + -1) { 128 | sVar1 = sVar1 - 1; 129 | sVar8 = sVar8 - 1; 130 | } 131 | if (sVar1 == 0) { 132 | uVar5 = 0; 133 | strcpy(acStack_94,param_1); 134 | } 135 | else { 136 | strncpy(acStack_114,param_1,sVar1); 137 | uVar5 = 0; 138 | acStack_114[sVar1] = '\0'; 139 | strcpy(acStack_94,param_1 + sVar1 + 1); 140 | iVar6 = 0; 141 | while ((uVar5 < JV_CURRENT_ARCS && (iVar7 = strcmp(acStack_114,JV_ARC_NAME + iVar6), iVar7 != 0) 142 | )) { 143 | uVar5 = uVar5 + 1; 144 | iVar6 = iVar6 + 0x20; 145 | } 146 | } 147 | if (uVar5 == JV_CURRENT_ARCS) { 148 | uVar3 = 0xffffffff; 149 | } 150 | else { 151 | uVar3 = 0; 152 | iVar6 = *(int *)(JV_ARC + uVar5 * 4); 153 | iVar7 = 0; 154 | while ((uVar3 < *(uint *)(iVar6 + 0xc) && 155 | (iVar4 = strcmp((char *)(iVar6 + iVar7 + 0x20),acStack_94), iVar4 != 0))) { 156 | uVar3 = uVar3 + 1; 157 | iVar7 = iVar7 + 0x20; 158 | } 159 | if (uVar3 == *(uint *)(iVar6 + 0xc)) { 160 | uVar3 = 0xffffffff; 161 | } 162 | else { 163 | uVar3 = uVar5 << 0x10 | uVar3; 164 | } 165 | } 166 | return uVar3; 167 | } 168 | 169 | int JV_GetHandle__FUl(uint param_1) 170 | { 171 | int iVar1; 172 | 173 | if (JV_CURRENT_ARCS <= param_1 >> 0x10) { 174 | return 0; 175 | } 176 | iVar1 = *(int *)(JV_ARC + (param_1 >> 0x10) * 4); 177 | if (iVar1 == 0) { 178 | return 0; 179 | } 180 | if (*(uint *)(iVar1 + 0xc) <= (param_1 & 0xffff)) { 181 | return 0; 182 | } 183 | return iVar1 + (param_1 & 0xffff) * 0x20 + 0x20; 184 | } 185 | 186 | int JV_GetRealHandle__FUl(uint param_1) 187 | { 188 | uint uVar1; 189 | int iVar2; 190 | int iVar3; 191 | 192 | uVar1 = param_1 & 0xffff; 193 | if (JV_CURRENT_ARCS <= param_1 >> 0x10) { 194 | return 0; 195 | } 196 | iVar3 = *(int *)(JV_ARC + (param_1 >> 0x10) * 4); 197 | if (iVar3 != 0) { 198 | if (uVar1 < *(uint *)(iVar3 + 0xc)) { 199 | do { 200 | iVar2 = iVar3 + uVar1 * 0x20 + 0x20; 201 | uVar1 = (uint)*(ushort *)(iVar2 + 0xe); 202 | } while (uVar1 != 0xffff); 203 | return iVar2; 204 | } 205 | return 0; 206 | } 207 | return 0; 208 | } 209 | 210 | void __JV_Callback__FUl(undefined4 param_1) 211 | { 212 | OSReport("Loaded ID= %d\n",param_1); 213 | return; 214 | } 215 | 216 | int JV_LoadFile__FUlPUcUlUl(uint param_1,undefined4 param_2,int param_3,undefined4 param_4) 217 | { 218 | int iVar1; 219 | int local_ac; 220 | char acStack_a8 [136]; 221 | 222 | local_ac = 0; 223 | iVar1 = JV_GetRealHandle__FUl(); 224 | param_3 = *(int *)(iVar1 + 0x18) + param_3; 225 | strcpy(acStack_a8,JV_DIR_NAME + (param_1 >> 0x10) * 0x40); 226 | strcat(acStack_a8,(char *)&@54); 227 | strcat(acStack_a8,(char *)(*(int *)(JV_ARC + (param_1 >> 0x10) * 4) + 0x10)); 228 | OSReport(&@155,param_1,*(undefined4 *)(iVar1 + 0x18)); 229 | OSReport(@156,acStack_a8,param_4,param_3,param_2); 230 | DVDT_LoadtoDRAM__FUlPcUlUlUlPUlPFUl_v(0,acStack_a8,param_2,param_3,param_4,&local_ac,0); 231 | do { 232 | } while (local_ac == 0); 233 | OSReport(@157); 234 | return local_ac; 235 | } 236 | 237 | undefined4 238 | JV_LoadFile_Async2__FUlPUcUlUlPFUl_vUl 239 | (uint param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined4 param_5, 240 | undefined4 param_6) 241 | { 242 | int iVar1; 243 | char acStack_b0 [140]; 244 | 245 | if (init$159 == '\0') { 246 | first$158 = 1; 247 | init$159 = '\x01'; 248 | } 249 | iVar1 = JV_GetRealHandle__FUl(param_1); 250 | param_3 = *(int *)(iVar1 + 0x18) + param_3; 251 | strcpy(acStack_b0,JV_DIR_NAME + (param_1 >> 0x10) * 0x40); 252 | strcat(acStack_b0,(char *)&@54); 253 | strcat(acStack_b0,(char *)(*(int *)(JV_ARC + (param_1 >> 0x10) * 4) + 0x10)); 254 | OSReport(&@155,param_1,*(undefined4 *)(iVar1 + 0x18)); 255 | OSReport(@162,acStack_b0,param_4,param_3,param_2); 256 | DVDT_LoadtoDRAM__FUlPcUlUlUlPUlPFUl_v(param_6,acStack_b0,param_2,param_3,param_4,0,param_5); 257 | return param_4; 258 | } 259 | 260 | int JV_GetMemoryFile__FUl(uint param_1) 261 | { 262 | int iVar1; 263 | 264 | iVar1 = JV_GetRealHandle__FUl(); 265 | if (iVar1 == 0) { 266 | iVar1 = 0; 267 | } 268 | else if (*(int *)(*(int *)(JV_ARC + (param_1 >> 0x10) * 4) + 8) == 0) { 269 | iVar1 = 0; 270 | } 271 | else { 272 | iVar1 = *(int *)(*(int *)(JV_ARC + (param_1 >> 0x10) * 4) + 8) + *(int *)(iVar1 + 0x18); 273 | } 274 | return iVar1; 275 | } 276 | -------------------------------------------------------------------------------- /Jaudio/waveread.c: -------------------------------------------------------------------------------- 1 | 2 | void PTconvert__FPPvUl(uint *param_1,uint param_2) 3 | { 4 | uint uVar1; 5 | 6 | uVar1 = *param_1; 7 | if (uVar1 == 0) { 8 | *param_1 = 0; 9 | return; 10 | } 11 | if (param_2 <= uVar1) { 12 | return; 13 | } 14 | if (uVar1 == 0) { 15 | return; 16 | } 17 | *param_1 = uVar1 + param_2; 18 | return; 19 | } 20 | 21 | undefined4 Wave_Test__FPUc(int param_1) 22 | { 23 | undefined4 uVar1; 24 | uint uVar2; 25 | uint uVar3; 26 | int *piVar4; 27 | int iVar5; 28 | int iVar6; 29 | int iVar7; 30 | int *piVar8; 31 | int *piVar9; 32 | 33 | PTconvert__FPPvUl(param_1 + 0x10,param_1); 34 | PTconvert__FPPvUl(param_1 + 0x14,param_1); 35 | piVar8 = *(int **)(param_1 + 0x10); 36 | piVar9 = *(int **)(param_1 + 0x14); 37 | CGRP_ARRAY._0_4_ = piVar9; 38 | if (*piVar8 == 0x57494e46) { 39 | if (*piVar9 == 0x57424354) { 40 | iVar5 = 0; 41 | for (uVar2 = 0; uVar2 < (uint)piVar8[1]; uVar2 = uVar2 + 1) { 42 | piVar4 = (int *)((int)piVar8 + iVar5 + 8); 43 | PTconvert__FPPvUl(piVar4,param_1); 44 | iVar7 = *piVar4; 45 | Jac_InitHeap__FP7jaheap_(iVar7 + 0x40); 46 | iVar6 = 0; 47 | *(undefined4 *)(iVar7 + 0x48) = 0; 48 | for (uVar3 = 0; uVar3 < *(uint *)(iVar7 + 0x70); uVar3 = uVar3 + 1) { 49 | PTconvert__FPPvUl(iVar7 + iVar6 + 0x74,param_1); 50 | iVar6 = iVar6 + 4; 51 | } 52 | iVar5 = iVar5 + 4; 53 | } 54 | iVar5 = 0; 55 | for (uVar2 = 0; uVar1 = CGRP_ARRAY._0_4_, uVar2 < (uint)piVar9[2]; uVar2 = uVar2 + 1) { 56 | piVar8 = (int *)((int)piVar9 + iVar5 + 0xc); 57 | PTconvert__FPPvUl(piVar8,param_1); 58 | iVar7 = *piVar8; 59 | PTconvert__FPPvUl(iVar7 + 0xc,param_1); 60 | PTconvert__FPPvUl(iVar7 + 0x10,param_1); 61 | PTconvert__FPPvUl(iVar7 + 0x14,param_1); 62 | piVar8 = *(int **)(iVar7 + 0xc); 63 | if ((piVar8 != (int *)0x0) && (*piVar8 == 0x432d4446)) { 64 | iVar6 = 0; 65 | for (uVar3 = 0; uVar3 < (uint)piVar8[1]; uVar3 = uVar3 + 1) { 66 | piVar4 = (int *)((int)piVar8 + iVar6 + 8); 67 | PTconvert__FPPvUl(piVar4,param_1); 68 | Jac_InitHeap__FP7jaheap_(*piVar4 + 4); 69 | iVar6 = iVar6 + 4; 70 | *(undefined4 *)(*piVar4 + 0xc) = 0; 71 | } 72 | } 73 | piVar8 = *(int **)(iVar7 + 0x10); 74 | if ((piVar8 != (int *)0x0) && (*piVar8 == 0x432d4558)) { 75 | iVar6 = 0; 76 | for (uVar3 = 0; uVar3 < (uint)piVar8[1]; uVar3 = uVar3 + 1) { 77 | piVar4 = (int *)((int)piVar8 + iVar6 + 8); 78 | PTconvert__FPPvUl(piVar4,param_1); 79 | Jac_InitHeap__FP7jaheap_(*piVar4 + 4); 80 | iVar6 = iVar6 + 4; 81 | *(undefined4 *)(*piVar4 + 0xc) = 0; 82 | } 83 | } 84 | piVar8 = *(int **)(iVar7 + 0x14); 85 | if ((piVar8 != (int *)0x0) && (*piVar8 == 0x432d5354)) { 86 | iVar7 = 0; 87 | for (uVar3 = 0; uVar3 < (uint)piVar8[1]; uVar3 = uVar3 + 1) { 88 | piVar4 = (int *)((int)piVar8 + iVar7 + 8); 89 | PTconvert__FPPvUl(piVar4,param_1); 90 | Jac_InitHeap__FP7jaheap_(*piVar4 + 4); 91 | iVar7 = iVar7 + 4; 92 | *(undefined4 *)(*piVar4 + 0xc) = 0; 93 | } 94 | } 95 | iVar5 = iVar5 + 4; 96 | } 97 | } 98 | else { 99 | uVar1 = 0; 100 | } 101 | } 102 | else { 103 | uVar1 = 0; 104 | } 105 | return uVar1; 106 | } 107 | 108 | void GetSound_Test__FUl(undefined4 param_1) 109 | { 110 | GetSoundHandle__FP10CtrlGroup_Ul(CGRP_ARRAY._0_4_,param_1); 111 | return; 112 | } 113 | 114 | bool Wavegroup_Regist__FPvUl(int param_1,int param_2) 115 | { 116 | int iVar1; 117 | 118 | Jac_WsConnectTableSet__FUlUl(*(undefined4 *)(param_1 + 8)); 119 | iVar1 = Wave_Test__FPUc(param_1); 120 | *(int *)(wavegroup + param_2 * 4) = iVar1; 121 | *(undefined4 *)(wavearc + param_2 * 4) = *(undefined4 *)(param_1 + 0x10); 122 | iVar1 = *(int *)(wavegroup + param_2 * 4); 123 | if (iVar1 != 0) { 124 | *(undefined4 *)(iVar1 + 4) = 0; 125 | } 126 | return iVar1 != 0; 127 | } 128 | 129 | void Wavegroup_Init__Fv(void) 130 | { 131 | int iVar1; 132 | undefined4 *puVar2; 133 | int iVar3; 134 | 135 | iVar1 = 0; 136 | iVar3 = 0x100; 137 | do { 138 | puVar2 = (undefined4 *)(wavegroup + iVar1); 139 | iVar1 = iVar1 + 4; 140 | *puVar2 = 0; 141 | iVar3 = iVar3 + -1; 142 | } while (iVar3 != 0); 143 | return; 144 | } 145 | 146 | undefined4 WaveidToWavegroup__FUlUl(undefined4 param_1,uint param_2) 147 | { 148 | undefined4 uVar1; 149 | 150 | if ((short)((uint)param_1 >> 0x10) == -1) { 151 | param_2 = param_2 & 0xffff; 152 | } 153 | else { 154 | param_2 = Jac_WsVirtualToPhysical__FUs(); 155 | } 156 | if ((param_2 & 0xffff) < 0x100) { 157 | uVar1 = *(undefined4 *)(wavegroup + (param_2 & 0xffff) * 4); 158 | } 159 | else { 160 | uVar1 = 0; 161 | } 162 | return uVar1; 163 | } 164 | 165 | undefined4 __WaveScene_Set__FUlUli(uint param_1,uint param_2,undefined4 param_3) 166 | { 167 | undefined4 uVar1; 168 | int iVar2; 169 | 170 | if (param_1 < 0x100) { 171 | iVar2 = *(int *)(wavegroup + param_1 * 4); 172 | if (iVar2 == 0) { 173 | uVar1 = 0; 174 | } 175 | else if (param_2 < *(uint *)(iVar2 + 8)) { 176 | uVar1 = Jac_SceneSet__FP16WaveArchiveBank_P10CtrlGroup_Uli 177 | (*(undefined4 *)(wavearc + param_1 * 4),iVar2,param_2,param_3); 178 | } 179 | else { 180 | uVar1 = 0; 181 | } 182 | } 183 | else { 184 | uVar1 = 0; 185 | } 186 | return uVar1; 187 | } 188 | 189 | void WaveScene_Set__FUlUl(undefined4 param_1,undefined4 param_2) 190 | { 191 | __WaveScene_Set__FUlUli(param_1,param_2,1); 192 | return; 193 | } 194 | 195 | void WaveScene_Load__FUlUl(undefined4 param_1,undefined4 param_2) 196 | { 197 | __WaveScene_Set__FUlUli(param_1,param_2,0); 198 | return; 199 | } 200 | 201 | void __WaveScene_Close__FUlUli(uint param_1,uint param_2,undefined4 param_3) 202 | { 203 | int iVar1; 204 | 205 | if (param_1 < 0x100) { 206 | iVar1 = *(int *)(wavegroup + param_1 * 4); 207 | if ((iVar1 != 0) && (param_2 < *(uint *)(iVar1 + 8))) { 208 | Jac_SceneClose__FP16WaveArchiveBank_P10CtrlGroup_Uli 209 | (*(undefined4 *)(wavearc + param_1 * 4),iVar1,param_2,param_3); 210 | } 211 | } 212 | return; 213 | } 214 | 215 | void WaveScene_Close__FUlUl(undefined4 param_1,undefined4 param_2) 216 | { 217 | __WaveScene_Close__FUlUli(param_1,param_2,1); 218 | return; 219 | } 220 | 221 | void WaveScene_Erase__FUlUl(undefined4 param_1,undefined4 param_2) 222 | { 223 | __WaveScene_Close__FUlUli(param_1,param_2,0); 224 | return; 225 | } 226 | 227 | -------------------------------------------------------------------------------- /MainLoop/0x81301100.txt: -------------------------------------------------------------------------------- 1 | 81301100 7C0802A6 mflr r0 2 | 81301104 90010004 stw r0, 4 (r1) 3 | 81301108 9421FFB0 stwu r1, -80 (r1) 4 | 8130110C 4800B13D bl 0x8130C248  5 | 81301110 808D82E8 lwz r4, -0x7D18 (r13) 6 | 81301114 8804001E lbz r0, 30 (r4) 7 | 81301118 28000000 cmplwi r0, 0 8 | 8130111C 4082002C bne- 0x81301148  9 | 81301120 C0240008 lfs fr1, 8 (r4) 10 | 81301124 3861000C addi r3, r1, 12 11 | 81301128 C0428020 lfs fr2, -0x7FE0 (r2) 12 | 8130112C C0640000 lfs fr3, 0 (r4) 13 | 81301130 C0840004 lfs fr4, 4 (r4) 14 | 81301134 4806364D bl C_MTXPerspective  15 | 81301138 3861000C addi r3, r1, 12 16 | 8130113C 38800000 li r4, 0 17 | 81301140 48078BFD bl GXSetProjection  18 | 81301144 48000030 b 0x81301174  19 | 81301148 C0228024 lfs fr1, -0x7FDC (r2) 20 | 8130114C 3861000C addi r3, r1, 12 21 | 81301150 C0428028 lfs fr2, -0x7FD8 (r2) 22 | 81301154 C062802C lfs fr3, -0x7FD4 (r2) 23 | 81301158 C0828030 lfs fr4, -0x7FD0 (r2) 24 | 8130115C C0A40000 lfs fr5, 0 (r4) 25 | 81301160 C0C40004 lfs fr6, 4 (r4) 26 | 81301164 480636ED bl C_MTXOrtho  27 | 81301168 3861000C addi r3, r1, 12 28 | 8130116C 38800001 li r4, 1 29 | 81301170 48078BCD bl GXSetProjection  30 | 81301174 806D82E8 lwz r3, -0x7D18 (r13) 31 | 81301178 38000000 li r0, 0 32 | 8130117C 9803001C stb r0, 28 (r3) 33 | 81301180 80010054 lwz r0, 84 (r1) 34 | 81301184 38210050 addi r1, r1, 80 35 | 81301188 7C0803A6 mtlr r0 36 | 8130118C 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x81301468 - DEMOBeforeRender.txt: -------------------------------------------------------------------------------- 1 | 0x81301468 (1) 2 | OSGetTime (1) 3 | OSPanic (8) 4 | VIGetNextField (1) 5 | GXSetViewportJitter (1) 6 | GXSetViewport (2) 7 | GXInvalidateVtxCache (1) 8 | GXInvalidateTexAll (1) 9 | GXSetScissor (2) 10 | GXSetScissorBoxOffset (1) 11 | 12 | var_7CF4 = OSGetTime (); 13 | r5 = var_7D04 14 | r0 = (u8)var_7D04+24 15 | 16 | 81301468 7C0802A6 mflr r0 17 | 8130146C 90010004 stw r0, 4 (r1) 18 | 81301470 9421FFE0 stwu r1, -32 (r1) 19 | 81301474 93E1001C stw r31, 28 (r1) 20 | 81301478 480622ED bl OSGetTime  21 | 8130147C 908D830C stw r4, -0x7CF4 (r13) 22 | 81301480 80AD82FC lwz r5, -0x7D04 (r13) 23 | 81301484 906D8308 stw r3, -0x7CF8 (r13) 24 | 81301488 88050018 lbz r0, 24 (r5) 25 | 8130148C 28000000 cmplwi r0, 0 26 | 81301490 4182006C beq- 0x813014FC  27 | 28 | if ( (u8)var_7D04+24 ) 29 | { 30 | } 31 | 32 | 81301494 3C608138 lis r3, 0x8138 33 | 81301498 4CC63182 crclr 6 34 | 8130149C 38A31030 addi r5, r3, 0x1030 35 | 813014A0 386D800C subi r3, r13, 0x7FF4 36 | 813014A4 388000C6 li r4, 198 37 | 813014A8 4805C4FD bl OSPanic  38 | 813014AC 83ED82FC lwz r31, -0x7D04 (r13) 39 | 813014B0 48068F55 bl VIGetNextField  40 | 813014B4 A0BF0004 lhz r5, 4 (r31) 41 | 813014B8 3C804330 lis r4, 0x4330 42 | 813014BC A01F0008 lhz r0, 8 (r31) 43 | 813014C0 90A10014 stw r5, 20 (r1) 44 | 813014C4 C0228038 lfs fr1, -0x7FC8 (r2) 45 | 813014C8 9001000C stw r0, 12 (r1) 46 | 813014CC C8828040 lfd fr4, -0x7FC0 (r2) 47 | 813014D0 FC400890 fmr fr2, fr1 48 | 813014D4 90810010 stw r4, 16 (r1) 49 | 813014D8 FCA00890 fmr fr5, fr1 50 | 813014DC C0C2803C lfs fr6, -0x7FC4 (r2) 51 | 813014E0 90810008 stw r4, 8 (r1) 52 | 813014E4 C8610010 lfd fr3, 16 (r1) 53 | 813014E8 C8010008 lfd fr0, 8 (r1) 54 | 813014EC EC632028 fsubs fr3, fr3, fr4 55 | 813014F0 EC802028 fsubs fr4, fr0, fr4 56 | 813014F4 48078AE5 bl GXSetViewportJitter  57 | 813014F8 48000054 b 0x8130154C  58 | 59 | else 60 | { 61 | } 62 | 63 | 813014FC A0850004 lhz r4, 4 (r5) 64 | 81301500 3C604330 lis r3, 0x4330 65 | 81301504 A0050008 lhz r0, 8 (r5) 66 | 81301508 9081000C stw r4, 12 (r1) 67 | 8130150C C0228038 lfs fr1, -0x7FC8 (r2) 68 | 81301510 90010014 stw r0, 20 (r1) 69 | 81301514 C8828040 lfd fr4, -0x7FC0 (r2) 70 | 81301518 FC400890 fmr fr2, fr1 71 | 8130151C 90610008 stw r3, 8 (r1) 72 | 81301520 FCA00890 fmr fr5, fr1 73 | 81301524 C0E2804C lfs fr7, -0x7FB4 (r2) 74 | 81301528 90610010 stw r3, 16 (r1) 75 | 8130152C C8610008 lfd fr3, 8 (r1) 76 | 81301530 C8010010 lfd fr0, 16 (r1) 77 | 81301534 EC632028 fsubs fr3, fr3, fr4 78 | 81301538 C0C2803C lfs fr6, -0x7FC4 (r2) 79 | 8130153C EC002028 fsubs fr0, fr0, fr4 80 | 81301540 EC67182A fadds fr3, fr7, fr3 81 | 81301544 EC87002A fadds fr4, fr7, fr0 82 | 81301548 48078BAD bl GXSetViewport  83 | 84 | GXInvalidateVtxCache (); 85 | GXInvalidateTexAll (); 86 | if ( (u8)var_7D04+25 && (u16)(var_7D04+8) > 440 ) 87 | { 88 | GXSetScissor ( 0, 0, r4+4, r4+6 ); 89 | GXSetScissorBoxOffset ( 0, 0 ); 90 | } 91 | 92 | 8130154C 48074A55 bl GXInvalidateVtxCache  93 | 81301550 48076DED bl GXInvalidateTexAll  94 | 81301554 808D82FC lwz r4, -0x7D04 (r13) 95 | 81301558 88040019 lbz r0, 25 (r4) 96 | 8130155C 28000000 cmplwi r0, 0 97 | 81301560 41820030 beq- 0x81301590  98 | 81301564 A0040008 lhz r0, 8 (r4) 99 | 81301568 280001B8 cmplwi r0, 0x01B8 100 | 8130156C 41800024 blt- 0x81301590  101 | 81301570 A0A40004 lhz r5, 4 (r4) 102 | 81301574 38600000 li r3, 0 103 | 81301578 A0C40006 lhz r6, 6 (r4) 104 | 8130157C 38800000 li r4, 0 105 | 81301580 48078B99 bl GXSetScissor  106 | 81301584 38600000 li r3, 0 107 | 81301588 38800000 li r4, 0 108 | 8130158C 48078C3D bl GXSetScissorBoxOffset  109 | 110 | 81301590 80010024 lwz r0, 36 (r1) 111 | 81301594 83E1001C lwz r31, 28 (r1) 112 | 81301598 38210020 addi r1, r1, 32 113 | 8130159C 7C0803A6 mtlr r0 114 | 813015A0 4E800020 blr 115 | -------------------------------------------------------------------------------- /MainLoop/0x813015A4.txt: -------------------------------------------------------------------------------- 1 | 813015A4 7C0802A6 mflr r0 2 | 813015A8 90010004 stw r0, 4 (r1) 3 | 813015AC 9421FFF8 stwu r1, -8 (r1) 4 | 813015B0 808D82FC lwz r4, -0x7D04 (r13) 5 | 813015B4 88040019 lbz r0, 25 (r4) 6 | 813015B8 28000000 cmplwi r0, 0 7 | 813015BC 41820038 beq- 0x813015F4  8 | 813015C0 A0040008 lhz r0, 8 (r4) 9 | 813015C4 280001B8 cmplwi r0, 0x01B8 10 | 813015C8 4180002C blt- 0x813015F4  11 | 813015CC A0C40006 lhz r6, 6 (r4) 12 | 813015D0 38600000 li r3, 0 13 | 813015D4 A0A40004 lhz r5, 4 (r4) 14 | 813015D8 3886FFFC subi r4, r6, 4 15 | 813015DC 48078B3D bl GXSetScissor  16 | 813015E0 808D82FC lwz r4, -0x7D04 (r13) 17 | 813015E4 38600000 li r3, 0 18 | 813015E8 A0840006 lhz r4, 6 (r4) 19 | 813015EC 3884FFFC subi r4, r4, 4 20 | 813015F0 48078BD9 bl GXSetScissorBoxOffset  21 | 813015F4 8001000C lwz r0, 12 (r1) 22 | 813015F8 38210008 addi r1, r1, 8 23 | 813015FC 7C0803A6 mtlr r0 24 | 81301600 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x81301604 - DEMODoneRender.txt: -------------------------------------------------------------------------------- 1 | 81301604 7C0802A6 mflr r0 2 | 81301608 38600001 li r3, 1 3 | 8130160C 90010004 stw r0, 4 (r1) 4 | 81301610 38800003 li r4, 3 5 | 81301614 38A00001 li r5, 1 6 | 81301618 9421FFF8 stwu r1, -8 (r1) 7 | 8130161C 48078399 bl GXSetZMode  8 | 81301620 38600001 li r3, 1 9 | 81301624 48078311 bl GXSetColorUpdate  10 | 81301628 806D82F8 lwz r3, -0x7D08 (r13) 11 | 8130162C 38800001 li r4, 1 12 | 81301630 480759D9 bl GXCopyDisp  13 | 81301634 8001000C lwz r0, 12 (r1) 14 | 81301638 38210008 addi r1, r1, 8 15 | 8130163C 7C0803A6 mtlr r0 16 | 81301640 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x81301644.txt: -------------------------------------------------------------------------------- 1 | 81301644 7C0802A6 mflr r0 2 | 81301648 38600001 li r3, 1 3 | 8130164C 90010004 stw r0, 4 (r1) 4 | 81301650 38800003 li r4, 3 5 | 81301654 38A00001 li r5, 1 6 | 81301658 9421FFF0 stwu r1, -16 (r1) 7 | 8130165C 93E1000C stw r31, 12 (r1) 8 | 81301660 93C10008 stw r30, 8 (r1) 9 | 81301664 80ED82FC lwz r7, -0x7D04 (r13) 10 | 81301668 A0C70004 lhz r6, 4 (r7) 11 | 8130166C A0E70006 lhz r7, 6 (r7) 12 | 81301670 3806000F addi r0, r6, 15 13 | 81301674 3BE7FFFE subi r31, r7, 2 14 | 81301678 54060436 rlwinm r6, r0, 0, 16, 27 mask:0x0000FFF0 15 | 8130167C 57E0043E rlwinm r0, r31, 0, 16, 31 mask:0x0000FFFF 16 | 81301680 7C0601D6 mullw r0, r6, r0 17 | 81301684 541E083C rlwinm r30, r0, 1, 0, 30 mask:0xFFFFFFFE 18 | 81301688 4807832D bl GXSetZMode  19 | 8130168C 38600001 li r3, 1 20 | 81301690 480782A5 bl 0x81379934  21 | 81301694 38600002 li r3, 2 22 | 81301698 4807558D bl GXSetCopyClamp  23 | 8130169C 808D82FC lwz r4, -0x7D04 (r13) 24 | 813016A0 38DF0000 addi r6, r31, 0 25 | 813016A4 38600000 li r3, 0 26 | 813016A8 A0A40004 lhz r5, 4 (r4) 27 | 813016AC 38800002 li r4, 2 28 | 813016B0 48075445 bl 0x81376AF4  29 | 813016B4 800D82F8 lwz r0, -0x7D08 (r13) 30 | 813016B8 38800001 li r4, 1 31 | 813016BC 7C60F214 add r3, r0, r30 32 | 813016C0 48075949 bl GXCopyDisp  33 | 813016C4 38600003 li r3, 3 34 | 813016C8 4807555D bl GXSetCopyClamp  35 | 813016CC 80AD82FC lwz r5, -0x7D04 (r13) 36 | 813016D0 38600000 li r3, 0 37 | 813016D4 38800000 li r4, 0 38 | 813016D8 A0A50004 lhz r5, 4 (r5) 39 | 813016DC 38C00002 li r6, 2 40 | 813016E0 48075415 bl 0x81376AF4  41 | 813016E4 3C60814B lis r3, 0x814B 42 | 813016E8 3863EBA0 subi r3, r3, 0x1460 43 | 813016EC 38800001 li r4, 1 44 | 813016F0 48075919 bl GXCopyDisp  45 | 813016F4 80CD82FC lwz r6, -0x7D04 (r13) 46 | 813016F8 38600000 li r3, 0 47 | 813016FC 38800000 li r4, 0 48 | 81301700 A0A60004 lhz r5, 4 (r6) 49 | 81301704 A0C60006 lhz r6, 6 (r6) 50 | 81301708 480753ED bl 0x81376AF4  51 | 8130170C 80010014 lwz r0, 20 (r1) 52 | 81301710 83E1000C lwz r31, 12 (r1) 53 | 81301714 83C10008 lwz r30, 8 (r1) 54 | 81301718 38210010 addi r1, r1, 16 55 | 8130171C 7C0803A6 mtlr r0 56 | 81301720 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x81301724.txt: -------------------------------------------------------------------------------- 1 | 81301724 7C0802A6 mflr r0 2 | 81301728 90010004 stw r0, 4 (r1) 3 | 8130172C 9421FFF0 stwu r1, -16 (r1) 4 | 81301730 93E1000C stw r31, 12 (r1) 5 | 81301734 48074CBD bl GXDrawDone  6 | 81301738 4806202D bl OSGetTime  7 | 8130173C 908D8314 stw r4, -0x7CEC (r13) 8 | 81301740 3C808000 lis r4, 0x8000 9 | 81301744 80E400F8 lwz r7, 248 (r4) 10 | 81301748 3CC0431C lis r6, 0x431C 11 | 8130174C 906D8310 stw r3, -0x7CF0 (r13) 12 | 81301750 800D830C lwz r0, -0x7CF4 (r13) 13 | 81301754 38800008 li r4, 8 14 | 81301758 80AD8314 lwz r5, -0x7CEC (r13) 15 | 8130175C 54E7F0BE rlwinm r7, r7, 30, 2, 31 mask:0x3FFFFFFF 16 | 81301760 38C6DE83 subi r6, r6, 0x217D 17 | 81301764 7CA02810 subfc r5, r0, r5 18 | 81301768 806D8310 lwz r3, -0x7CF0 (r13) 19 | 8130176C 800D8308 lwz r0, -0x7CF8 (r13) 20 | 81301770 7CC63816 mulhwu r6, r6, r7 21 | 81301774 7C001910 subfe r0, r0, r3 22 | 81301778 7C6021D6 mullw r3, r0, r4 23 | 8130177C 7C052016 mulhwu r0, r5, r4 24 | 81301780 3BE00000 li r31, 0 25 | 81301784 7C630214 add r3, r3, r0 26 | 81301788 7C05F9D6 mullw r0, r5, r31 27 | 8130178C 7C8521D6 mullw r4, r5, r4 28 | 81301790 54C68BFE rlwinm r6, r6, 17, 15, 31 mask:0x0001FFFF 29 | 81301794 7C630214 add r3, r3, r0 30 | 81301798 38A00000 li r5, 0 31 | 8130179C 480796E1 bl __div2i  32 | 813017A0 48079A75 bl 0x8137B214  33 | 813017A4 C0028050 lfs fr0, -0x7FB0 (r2) 34 | 813017A8 806D82F8 lwz r3, -0x7D08 (r13) 35 | 813017AC EC010024 fdivs fr0, fr1, fr0 36 | 813017B0 D00D8318 stfs fr0, -0x7CE8 (r13) 37 | 813017B4 48068AAD bl VISetNextFrameBuffer  38 | 813017B8 880D8008 lbz r0, -0x7FF8 (r13) 39 | 813017BC 28000000 cmplwi r0, 0 40 | 813017C0 41820010 beq- 0x813017D0  41 | 813017C4 38600000 li r3, 0 42 | 813017C8 48068B05 bl VISetBlack  43 | 813017CC 9BED8008 stb r31, -0x7FF8 (r13) 44 | 813017D0 48068975 bl VIFlush  45 | 813017D4 48067E19 bl VIWaitForRetrace  46 | 813017D8 800D82F8 lwz r0, -0x7D08 (r13) 47 | 813017DC 806D82F0 lwz r3, -0x7D10 (r13) 48 | 813017E0 7C001840 cmplw r0, r3 49 | 813017E4 40820010 bne- 0x813017F4  50 | 813017E8 800D82F4 lwz r0, -0x7D0C (r13) 51 | 813017EC 900D82F8 stw r0, -0x7D08 (r13) 52 | 813017F0 48000008 b 0x813017F8  53 | 813017F4 906D82F8 stw r3, -0x7D08 (r13) 54 | 813017F8 80010014 lwz r0, 20 (r1) 55 | 813017FC 83E1000C lwz r31, 12 (r1) 56 | 81301800 38210010 addi r1, r1, 16 57 | 81301804 7C0803A6 mtlr r0 58 | 81301808 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x813020C8 - InitDVDLoader.txt: -------------------------------------------------------------------------------- 1 | 813020C8 7C0802A6 mflr r0 2 | 813020CC 90010004 stw r0, 4 (r1) 3 | 813020D0 9421FFF8 stwu r1, -8 (r1) 4 | 813020D4 4BFFE895 bl 0x81300968  5 | 813020D8 906D832C stw r3, -0x7CD4 (r13) 6 | 813020DC 8001000C lwz r0, 12 (r1) 7 | 813020E0 38210008 addi r1, r1, 8 8 | 813020E4 7C0803A6 mtlr r0 9 | 813020E8 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x813022C4.txt: -------------------------------------------------------------------------------- 1 | 813022C4 7C0802A6 mflr r0 2 | 813022C8 90010004 stw r0, 4 (r1) 3 | 813022CC 9421FFF8 stwu r1, -8 (r1) 4 | 813022D0 A86D8328 lha r3, -0x7CD8 (r13) 5 | 813022D4 7C600735 extsh. r0, r3 6 | 813022D8 4081000C ble- 0x813022E4  7 | 813022DC 5463063E rlwinm r3, r3, 0, 24, 31 mask:0x000000FF 8 | 813022E0 4BFFF8E9 bl 0x81301BC8  9 | 813022E4 8001000C lwz r0, 12 (r1) 10 | 813022E8 38210008 addi r1, r1, 8 11 | 813022EC 7C0803A6 mtlr r0 12 | 813022F0 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x81302368 - BIG.txt: -------------------------------------------------------------------------------- 1 | 81302368 7C0802A6 mflr r0 2 | 8130236C 90010004 stw r0, 4 (r1) 3 | 81302370 9421FF98 stwu r1, -104 (r1) 4 | 81302374 93E10064 stw r31, 100 (r1) 5 | 81302378 93C10060 stw r30, 96 (r1) 6 | 8130237C 48009ECD bl 0x8130C248  7 | 81302380 7C7E1B78 or r30, r3, r3 8 | 81302384 4805DEC1 bl 0x81360244  9 | 81302388 800D8324 lwz r0, -0x7CDC (r13) 10 | 8130238C 3BE30000 addi r31, r3, 0 11 | 81302390 2C000000 cmpwi r0, 0 12 | 81302394 418201A4 beq- 0x81302538  13 | 81302398 48019BED bl 0x8131BF84  14 | 8130239C 5460063E rlwinm r0, r3, 0, 24, 31 mask:0x000000FF 15 | 813023A0 28000001 cmplwi r0, 1 16 | 813023A4 418201D0 beq- 0x81302574  17 | 813023A8 A86D8328 lha r3, -0x7CD8 (r13) 18 | 813023AC 38030008 addi r0, r3, 8 19 | 813023B0 B00D8328 sth r0, -0x7CD8 (r13) 20 | 813023B4 A80D8328 lha r0, -0x7CD8 (r13) 21 | 813023B8 2C0000FF cmpwi r0, 255 22 | 813023BC 408101B8 ble- 0x81302574  23 | 813023C0 38000000 li r0, 0 24 | 813023C4 900D8324 stw r0, -0x7CDC (r13) 25 | 813023C8 B00D8328 sth r0, -0x7CD8 (r13) 26 | 813023CC 48058DB5 bl 0x8135B180  27 | 813023D0 48058EF1 bl 0x8135B2C0  28 | 813023D4 2C030000 cmpwi r3, 0 29 | 813023D8 4182FFF8 beq+ 0x813023D0  30 | 813023DC 3BC00000 li r30, 0 31 | 813023E0 4806720D bl VIWaitForRetrace  32 | 813023E4 3BDE0001 addi r30, r30, 1 33 | 813023E8 2C1E000A cmpwi r30, 10 34 | 813023EC 4180FFF4 blt+ 0x813023E0  35 | 813023F0 4805E34D bl __OSLockSram  36 | 813023F4 8BC30010 lbz r30, 16 (r3) 37 | 813023F8 38600000 li r3, 0 38 | 813023FC 7FDE0774 extsb r30, r30 39 | 81302400 4805E6FD bl __OSUnlockSram  40 | 81302404 387E0000 addi r3, r30, 0 41 | 81302408 38800000 li r4, 0 42 | 8130240C 480680F9 bl 0x8136A504  43 | 81302410 3BC00000 li r30, 0 44 | 81302414 93CD831C stw r30, -0x7CE4 (r13) 45 | 81302418 93CD8320 stw r30, -0x7CE0 (r13) 46 | 8130241C 4805E321 bl __OSLockSram  47 | 81302420 7C7F1B78 or r31, r3, r3 48 | 81302424 4805E731 bl __OSCheckSram  49 | 81302428 2C030000 cmpwi r3, 0 50 | 8130242C 40820010 bne- 0x8130243C  51 | 81302430 7FE3FB78 or r3, r31, r31 52 | 81302434 4BFFFA09 bl 0x81301E3C  53 | 81302438 3BC00001 li r30, 1 54 | 8130243C 881F0013 lbz r0, 19 (r31) 55 | 81302440 54000739 rlwinm. r0, r0, 0, 28, 28 mask:0x00000008 56 | 81302444 4082000C bne- 0x81302450  57 | 81302448 38000001 li r0, 1 58 | 8130244C 900D8320 stw r0, -0x7CE0 (r13) 59 | 81302450 7FC3F378 or r3, r30, r30 60 | 81302454 4805E6A9 bl __OSUnlockSram  61 | 81302458 2C1E0000 cmpwi r30, 0 62 | 8130245C 41820010 beq- 0x8130246C  63 | 81302460 4805E6E5 bl __OSSyncSram  64 | 81302464 2C030000 cmpwi r3, 0 65 | 81302468 4182FFF8 beq+ 0x81302460  66 | 8130246C 48019CA9 bl 0x8131C114  67 | 81302470 38610030 addi r3, r1, 48 68 | 81302474 480691FD bl 0x8136B670  69 | 81302478 8801003A lbz r0, 58 (r1) 70 | 8130247C 38600000 li r3, 0 71 | 81302480 7C000774 extsb r0, r0 72 | 81302484 2C00FFFF cmpwi r0, -1 73 | 81302488 41820008 beq- 0x81302490  74 | 8130248C 64638000 oris r3, r3, 0x8000 75 | 81302490 88010046 lbz r0, 70 (r1) 76 | 81302494 7C000774 extsb r0, r0 77 | 81302498 2C00FFFF cmpwi r0, -1 78 | 8130249C 41820008 beq- 0x813024A4  79 | 813024A0 64634000 oris r3, r3, 0x4000 80 | 813024A4 88010052 lbz r0, 82 (r1) 81 | 813024A8 7C000774 extsb r0, r0 82 | 813024AC 2C00FFFF cmpwi r0, -1 83 | 813024B0 41820008 beq- 0x813024B8  84 | 813024B4 64632000 oris r3, r3, 0x2000 85 | 813024B8 8801005E lbz r0, 94 (r1) 86 | 813024BC 7C000774 extsb r0, r0 87 | 813024C0 2C00FFFF cmpwi r0, -1 88 | 813024C4 41820008 beq- 0x813024CC  89 | 813024C8 64631000 oris r3, r3, 0x1000 90 | 813024CC 48068E95 bl 0x8136B360  91 | 813024D0 4BFFE199 bl 0x81300668  92 | 813024D4 4BFFE495 bl 0x81300968  93 | 813024D8 906D832C stw r3, -0x7CD4 (r13) 94 | 813024DC 48067111 bl VIWaitForRetrace  95 | 813024E0 800D832C lwz r0, -0x7CD4 (r13) 96 | 813024E4 2C000013 cmpwi r0, 19 97 | 813024E8 41820044 beq- 0x8130252C  98 | 813024EC 2C000005 cmpwi r0, 5 99 | 813024F0 4180000C blt- 0x813024FC  100 | 813024F4 2C000010 cmpwi r0, 16 101 | 813024F8 40810034 ble- 0x8130252C  102 | 813024FC 2C000012 cmpwi r0, 18 103 | 81302500 4182002C beq- 0x8130252C  104 | 81302504 2C000014 cmpwi r0, 20 105 | 81302508 41820024 beq- 0x8130252C  106 | 8130250C 2C000015 cmpwi r0, 21 107 | 81302510 4182001C beq- 0x8130252C  108 | 81302514 2C000016 cmpwi r0, 22 109 | 81302518 41820014 beq- 0x8130252C  110 | 8130251C 2C000017 cmpwi r0, 23 111 | 81302520 4182000C beq- 0x8130252C  112 | 81302524 2C000018 cmpwi r0, 24 113 | 81302528 4082FFAC bne+ 0x813024D4  114 | 8130252C 38600000 li r3, 0 115 | 81302530 480099B9 bl 0x8130BEE8  116 | 81302534 4800004C b 0x81302580  117 | 81302538 800D833C lwz r0, -0x7CC4 (r13) 118 | 8130253C 2C000000 cmpwi r0, 0 119 | 81302540 41820034 beq- 0x81302574  120 | 81302544 2C1F0000 cmpwi r31, 0 121 | 81302548 4082002C bne- 0x81302574  122 | 8130254C A81E00B0 lha r0, 176 (r30) 123 | 81302550 2C000000 cmpwi r0, 0 124 | 81302554 40820020 bne- 0x81302574  125 | 81302558 38000001 li r0, 1 126 | 8130255C 900D8324 stw r0, -0x7CDC (r13) 127 | 81302560 48019A25 bl 0x8131BF84  128 | 81302564 5460063E rlwinm r0, r3, 0, 24, 31 mask:0x000000FF 129 | 81302568 28000001 cmplwi r0, 1 130 | 8130256C 40820008 bne- 0x81302574  131 | 81302570 48019BD1 bl 0x8131C140  132 | 81302574 93ED833C stw r31, -0x7CC4 (r13) 133 | 81302578 38600001 li r3, 1 134 | 8130257C 48000010 b 0x8130258C  135 | 81302580 38000000 li r0, 0 136 | 81302584 900D833C stw r0, -0x7CC4 (r13) 137 | 81302588 38600001 li r3, 1 138 | 8130258C 8001006C lwz r0, 108 (r1) 139 | 81302590 83E10064 lwz r31, 100 (r1) 140 | 81302594 83C10060 lwz r30, 96 (r1) 141 | 81302598 38210068 addi r1, r1, 104 142 | 8130259C 7C0803A6 mtlr r0 143 | 813025A0 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x81302B24 - DEMOPadRead.txt: -------------------------------------------------------------------------------- 1 | 81302B24 7C0802A6 mflr r0 2 | 81302B28 3C60814B lis r3, 0x814B 3 | 81302B2C 90010004 stw r0, 4 (r1) 4 | 81302B30 9421FFE0 stwu r1, -32 (r1) 5 | 81302B34 BF410008 stmw r26, 8 (r1) 6 | 81302B38 3BE3F5A0 subi r31, r3, 0x0A60 7 | 81302B3C 387F0000 addi r3, r31, 0 8 | 81302B40 48068B31 bl 0x8136B670  9 | 81302B44 7FE3FB78 or r3, r31, r31 10 | 81302B48 48067DB5 bl PADClamp  11 | 81302B4C 38000000 li r0, 0 12 | 81302B50 900D8354 stw r0, -0x7CAC (r13) 13 | 81302B54 387F0060 addi r3, r31, 96 14 | 81302B58 3B400000 li r26, 0 15 | 81302B5C 38800000 li r4, 0 16 | 81302B60 38A0000C li r5, 12 17 | 81302B64 4BFFD665 bl memset  18 | 81302B68 3C608138 lis r3, 0x8138 19 | 81302B6C 3B831050 addi r28, r3, 0x1050 20 | 81302B70 3BDF0000 addi r30, r31, 0 21 | 81302B74 3BBF0030 addi r29, r31, 48 22 | 81302B78 3B600000 li r27, 0 23 | 81302B7C 887E000A lbz r3, 10 (r30) 24 | 81302B80 7C600775 extsb. r0, r3 25 | 81302B84 40820068 bne- 0x81302BEC  26 | 81302B88 808D8354 lwz r4, -0x7CAC (r13) 27 | 81302B8C 387E0000 addi r3, r30, 0 28 | 81302B90 38040001 addi r0, r4, 1 29 | 81302B94 900D8354 stw r0, -0x7CAC (r13) 30 | 81302B98 4BFFFEA9 bl 0x81302A40  31 | 81302B9C A0BF0060 lhz r5, 96 (r31) 32 | 81302BA0 38600000 li r3, 0 33 | 81302BA4 A09E0000 lhz r4, 0 (r30) 34 | 81302BA8 38000001 li r0, 1 35 | 81302BAC 7CA42378 or r4, r5, r4 36 | 81302BB0 B09F0060 sth r4, 96 (r31) 37 | 81302BB4 987F0062 stb r3, 98 (r31) 38 | 81302BB8 987F0063 stb r3, 99 (r31) 39 | 81302BBC 987F0064 stb r3, 100 (r31) 40 | 81302BC0 987F0065 stb r3, 101 (r31) 41 | 81302BC4 987F0066 stb r3, 102 (r31) 42 | 81302BC8 987F0067 stb r3, 103 (r31) 43 | 81302BCC 809E0000 lwz r4, 0 (r30) 44 | 81302BD0 807E0004 lwz r3, 4 (r30) 45 | 81302BD4 909D0000 stw r4, 0 (r29) 46 | 81302BD8 907D0004 stw r3, 4 (r29) 47 | 81302BDC 807E0008 lwz r3, 8 (r30) 48 | 81302BE0 907D0008 stw r3, 8 (r29) 49 | 81302BE4 981D000A stb r0, 10 (r29) 50 | 81302BE8 48000068 b 0x81302C50  51 | 81302BEC 7C600774 extsb r0, r3 52 | 81302BF0 2C00FFFF cmpwi r0, -1 53 | 81302BF4 40820018 bne- 0x81302C0C  54 | 81302BF8 807C0000 lwz r3, 0 (r28) 55 | 81302BFC 38000000 li r0, 0 56 | 81302C00 981D000A stb r0, 10 (r29) 57 | 81302C04 7F5A1B78 or r26, r26, r3 58 | 81302C08 48000048 b 0x81302C50  59 | 81302C0C 881D000A lbz r0, 10 (r29) 60 | 81302C10 7C000775 extsb. r0, r0 61 | 81302C14 4182003C beq- 0x81302C50  62 | 81302C18 806D8354 lwz r3, -0x7CAC (r13) 63 | 81302C1C 38000000 li r0, 0 64 | 81302C20 38630001 addi r3, r3, 1 65 | 81302C24 906D8354 stw r3, -0x7CAC (r13) 66 | 81302C28 A09F0060 lhz r4, 96 (r31) 67 | 81302C2C A07D0000 lhz r3, 0 (r29) 68 | 81302C30 7C831B78 or r3, r4, r3 69 | 81302C34 B07F0060 sth r3, 96 (r31) 70 | 81302C38 981F0062 stb r0, 98 (r31) 71 | 81302C3C 981F0063 stb r0, 99 (r31) 72 | 81302C40 981F0064 stb r0, 100 (r31) 73 | 81302C44 981F0065 stb r0, 101 (r31) 74 | 81302C48 981F0066 stb r0, 102 (r31) 75 | 81302C4C 981F0067 stb r0, 103 (r31) 76 | 81302C50 3B7B0001 addi r27, r27, 1 77 | 81302C54 2C1B0004 cmpwi r27, 4 78 | 81302C58 3BDE000C addi r30, r30, 12 79 | 81302C5C 3BBD000C addi r29, r29, 12 80 | 81302C60 3B9C0004 addi r28, r28, 4 81 | 81302C64 4180FF18 blt+ 0x81302B7C  82 | 81302C68 281A0000 cmplwi r26, 0 83 | 81302C6C 4182000C beq- 0x81302C78  84 | 81302C70 7F43D378 or r3, r26, r26 85 | 81302C74 480685F1 bl 0x8136B264  86 | 81302C78 387F0060 addi r3, r31, 96 87 | 81302C7C 389F006C addi r4, r31, 108 88 | 81302C80 4BFFFA81 bl 0x81302700  89 | 81302C84 887F000A lbz r3, 10 (r31) 90 | 81302C88 7C600775 extsb. r0, r3 91 | 81302C8C 40820064 bne- 0x81302CF0  92 | 81302C90 A01F0000 lhz r0, 0 (r31) 93 | 81302C94 540006F7 rlwinm. r0, r0, 0, 27, 27 mask:0x00000010 94 | 81302C98 41820058 beq- 0x81302CF0  95 | 81302C9C 881F0016 lbz r0, 22 (r31) 96 | 81302CA0 7C000775 extsb. r0, r0 97 | 81302CA4 4082004C bne- 0x81302CF0  98 | 81302CA8 A01F000C lhz r0, 12 (r31) 99 | 81302CAC 540006F7 rlwinm. r0, r0, 0, 27, 27 mask:0x00000010 100 | 81302CB0 41820040 beq- 0x81302CF0  101 | 81302CB4 881F0022 lbz r0, 34 (r31) 102 | 81302CB8 7C000775 extsb. r0, r0 103 | 81302CBC 40820034 bne- 0x81302CF0  104 | 81302CC0 A01F0018 lhz r0, 24 (r31) 105 | 81302CC4 540006F7 rlwinm. r0, r0, 0, 27, 27 mask:0x00000010 106 | 81302CC8 41820028 beq- 0x81302CF0  107 | 81302CCC 881F002E lbz r0, 46 (r31) 108 | 81302CD0 7C000775 extsb. r0, r0 109 | 81302CD4 4082001C bne- 0x81302CF0  110 | 81302CD8 A01F0024 lhz r0, 36 (r31) 111 | 81302CDC 540006F7 rlwinm. r0, r0, 0, 27, 27 mask:0x00000010 112 | 81302CE0 41820010 beq- 0x81302CF0  113 | 81302CE4 38000002 li r0, 2 114 | 81302CE8 900D8344 stw r0, -0x7CBC (r13) 115 | 81302CEC 4800002C b 0x81302D18  116 | 81302CF0 7C600775 extsb. r0, r3 117 | 81302CF4 4082001C bne- 0x81302D10  118 | 81302CF8 A01F0000 lhz r0, 0 (r31) 119 | 81302CFC 540006F7 rlwinm. r0, r0, 0, 27, 27 mask:0x00000010 120 | 81302D00 41820010 beq- 0x81302D10  121 | 81302D04 38000001 li r0, 1 122 | 81302D08 900D8344 stw r0, -0x7CBC (r13) 123 | 81302D0C 4800000C b 0x81302D18  124 | 81302D10 38000000 li r0, 0 125 | 81302D14 900D8344 stw r0, -0x7CBC (r13) 126 | 81302D18 BB410008 lmw r26, 8 (r1) 127 | 81302D1C 80010024 lwz r0, 36 (r1) 128 | 81302D20 38210020 addi r1, r1, 32 129 | 81302D24 7C0803A6 mtlr r0 130 | 81302D28 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x81302DF0.txt: -------------------------------------------------------------------------------- 1 | 81302DF0 7C0802A6 mflr r0 2 | 81302DF4 3C608138 lis r3, 0x8138 3 | 81302DF8 90010004 stw r0, 4 (r1) 4 | 81302DFC 9421FFB0 stwu r1, -80 (r1) 5 | 81302E00 93E1004C stw r31, 76 (r1) 6 | 81302E04 93C10048 stw r30, 72 (r1) 7 | 81302E08 93A10044 stw r29, 68 (r1) 8 | 81302E0C 3BA3EB28 subi r29, r3, 0x14D8 9 | 81302E10 4BFFE2E9 bl 0x813010F8  10 | 81302E14 7C7E1B78 or r30, r3, r3 11 | 81302E18 48009431 bl 0x8130C248  12 | 81302E1C 809D0000 lwz r4, 0 (r29) 13 | 81302E20 7C7F1B78 or r31, r3, r3 14 | 81302E24 801D0004 lwz r0, 4 (r29) 15 | 81302E28 C0028090 lfs fr0, -0x7F70 (r2) 16 | 81302E2C 90810020 stw r4, 32 (r1) 17 | 81302E30 90010024 stw r0, 36 (r1) 18 | 81302E34 801D0008 lwz r0, 8 (r29) 19 | 81302E38 90010028 stw r0, 40 (r1) 20 | 81302E3C 807D000C lwz r3, 12 (r29) 21 | 81302E40 801D0010 lwz r0, 16 (r29) 22 | 81302E44 90610014 stw r3, 20 (r1) 23 | 81302E48 90010018 stw r0, 24 (r1) 24 | 81302E4C 801D0014 lwz r0, 20 (r29) 25 | 81302E50 9001001C stw r0, 28 (r1) 26 | 81302E54 807D0018 lwz r3, 24 (r29) 27 | 81302E58 801D001C lwz r0, 28 (r29) 28 | 81302E5C 90610008 stw r3, 8 (r1) 29 | 81302E60 9001000C stw r0, 12 (r1) 30 | 81302E64 801D0020 lwz r0, 32 (r29) 31 | 81302E68 90010010 stw r0, 16 (r1) 32 | 81302E6C D0010014 stfs fr0, 20 (r1) 33 | 81302E70 D0010018 stfs fr0, 24 (r1) 34 | 81302E74 C0428098 lfs fr2, -0x7F68 (r2) 35 | 81302E78 C03E0008 lfs fr1, 8 (r30) 36 | 81302E7C C002809C lfs fr0, -0x7F64 (r2) 37 | 81302E80 EC220072 fmuls fr1, fr2, fr1 38 | 81302E84 EC210024 fdivs fr1, fr1, fr0 39 | 81302E88 4807B7D9 bl tanf  40 | 81302E8C C0028094 lfs fr0, -0x7F6C (r2) 41 | 81302E90 3C60814B lis r3, 0x814B 42 | 81302E94 3863F660 subi r3, r3, 0x09A0 43 | 81302E98 EC000824 fdivs fr0, fr0, fr1 44 | 81302E9C 38810014 addi r4, r1, 20 45 | 81302EA0 38A10020 addi r5, r1, 32 46 | 81302EA4 38C10008 addi r6, r1, 8 47 | 81302EA8 D001001C stfs fr0, 28 (r1) 48 | 81302EAC 480616F5 bl C_MTXLookAt  49 | 81302EB0 48009031 bl 0x8130BEE0  50 | 81302EB4 2C030005 cmpwi r3, 5 51 | 81302EB8 41820078 beq- 0x81302F30  52 | 81302EBC 4080007C bge- 0x81302F38  53 | 81302EC0 2C030004 cmpwi r3, 4 54 | 81302EC4 40800008 bge- 0x81302ECC  55 | 81302EC8 48000070 b 0x81302F38  56 | 81302ECC 801F003C lwz r0, 60 (r31) 57 | 81302ED0 A89F0028 lha r4, 40 (r31) 58 | 81302ED4 7C002000 cmpw r0, r4 59 | 81302ED8 41810050 bgt- 0x81302F28  60 | 81302EDC 6C008000 xoris r0, r0, 0x8000 61 | 81302EE0 C09E0014 lfs fr4, 20 (r30) 62 | 81302EE4 9001003C stw r0, 60 (r1) 63 | 81302EE8 3C604330 lis r3, 0x4330 64 | 81302EEC 6C808000 xoris r0, r4, 0x8000 65 | 81302EF0 C01E0018 lfs fr0, 24 (r30) 66 | 81302EF4 90610038 stw r3, 56 (r1) 67 | 81302EF8 C86280A0 lfd fr3, -0x7F60 (r2) 68 | 81302EFC EC240028 fsubs fr1, fr4, fr0 69 | 81302F00 90010034 stw r0, 52 (r1) 70 | 81302F04 C8010038 lfd fr0, 56 (r1) 71 | 81302F08 90610030 stw r3, 48 (r1) 72 | 81302F0C EC401828 fsubs fr2, fr0, fr3 73 | 81302F10 C8010030 lfd fr0, 48 (r1) 74 | 81302F14 EC220072 fmuls fr1, fr2, fr1 75 | 81302F18 EC001828 fsubs fr0, fr0, fr3 76 | 81302F1C EC010024 fdivs fr0, fr1, fr0 77 | 81302F20 EC240028 fsubs fr1, fr4, fr0 78 | 81302F24 48000018 b 0x81302F3C  79 | 81302F28 C03E0018 lfs fr1, 24 (r30) 80 | 81302F2C 48000010 b 0x81302F3C  81 | 81302F30 C03E0018 lfs fr1, 24 (r30) 82 | 81302F34 48000008 b 0x81302F3C  83 | 81302F38 C03E0014 lfs fr1, 20 (r30) 84 | 81302F3C C0010018 lfs fr0, 24 (r1) 85 | 81302F40 3C60814B lis r3, 0x814B 86 | 81302F44 3863F630 subi r3, r3, 0x09D0 87 | 81302F48 EC00082A fadds fr0, fr0, fr1 88 | 81302F4C 38810014 addi r4, r1, 20 89 | 81302F50 38A10020 addi r5, r1, 32 90 | 81302F54 38C10008 addi r6, r1, 8 91 | 81302F58 D0010018 stfs fr0, 24 (r1) 92 | 81302F5C C001000C lfs fr0, 12 (r1) 93 | 81302F60 EC00082A fadds fr0, fr0, fr1 94 | 81302F64 D001000C stfs fr0, 12 (r1) 95 | 81302F68 48061639 bl C_MTXLookAt  96 | 81302F6C 80010054 lwz r0, 84 (r1) 97 | 81302F70 83E1004C lwz r31, 76 (r1) 98 | 81302F74 83C10048 lwz r30, 72 (r1) 99 | 81302F78 83A10044 lwz r29, 68 (r1) 100 | 81302F7C 38210050 addi r1, r1, 80 101 | 81302F80 7C0803A6 mtlr r0 102 | 81302F84 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x81302FA0.txt: -------------------------------------------------------------------------------- 1 | 81302FA0 7C0802A6 mflr r0 2 | 81302FA4 90010004 stw r0, 4 (r1) 3 | 81302FA8 9421FF68 stwu r1, -152 (r1) 4 | 81302FAC 93E10094 stw r31, 148 (r1) 5 | 81302FB0 4BFFE149 bl 0x813010F8  6 | 81302FB4 3C608138 lis r3, 0x8138 7 | 81302FB8 38C3EB4C subi r6, r3, 0x14B4 8 | 81302FBC 80860000 lwz r4, 0 (r6) 9 | 81302FC0 3CA08138 lis r5, 0x8138 10 | 81302FC4 80060004 lwz r0, 4 (r6) 11 | 81302FC8 3C60814B lis r3, 0x814B 12 | 81302FCC 3BE3F630 subi r31, r3, 0x09D0 13 | 81302FD0 90810028 stw r4, 40 (r1) 14 | 81302FD4 38810040 addi r4, r1, 64 15 | 81302FD8 38E5EB58 subi r7, r5, 0x14A8 16 | 81302FDC 9001002C stw r0, 44 (r1) 17 | 81302FE0 387F0000 addi r3, r31, 0 18 | 81302FE4 38A40000 addi r5, r4, 0 19 | 81302FE8 80060008 lwz r0, 8 (r6) 20 | 81302FEC 90010030 stw r0, 48 (r1) 21 | 81302FF0 80010028 lwz r0, 40 (r1) 22 | 81302FF4 80C1002C lwz r6, 44 (r1) 23 | 81302FF8 90010040 stw r0, 64 (r1) 24 | 81302FFC 80010030 lwz r0, 48 (r1) 25 | 81303000 90C10044 stw r6, 68 (r1) 26 | 81303004 90010048 stw r0, 72 (r1) 27 | 81303008 80C70000 lwz r6, 0 (r7) 28 | 8130300C 80070004 lwz r0, 4 (r7) 29 | 81303010 90C1001C stw r6, 28 (r1) 30 | 81303014 90010020 stw r0, 32 (r1) 31 | 81303018 80070008 lwz r0, 8 (r7) 32 | 8130301C 90010024 stw r0, 36 (r1) 33 | 81303020 8001001C lwz r0, 28 (r1) 34 | 81303024 80C10020 lwz r6, 32 (r1) 35 | 81303028 90010034 stw r0, 52 (r1) 36 | 8130302C 80010024 lwz r0, 36 (r1) 37 | 81303030 90C10038 stw r6, 56 (r1) 38 | 81303034 9001003C stw r0, 60 (r1) 39 | 81303038 480616F5 bl PSMTXMultVec  40 | 8130303C 38810034 addi r4, r1, 52 41 | 81303040 387F0000 addi r3, r31, 0 42 | 81303044 38A40000 addi r5, r4, 0 43 | 81303048 480616E5 bl PSMTXMultVec  44 | 8130304C C0210040 lfs fr1, 64 (r1) 45 | 81303050 38610050 addi r3, r1, 80 46 | 81303054 C0410044 lfs fr2, 68 (r1) 47 | 81303058 C0610048 lfs fr3, 72 (r1) 48 | 8130305C 480743A5 bl 0x81377400  49 | 81303060 C0210034 lfs fr1, 52 (r1) 50 | 81303064 38610050 addi r3, r1, 80 51 | 81303068 C0410038 lfs fr2, 56 (r1) 52 | 8130306C C061003C lfs fr3, 60 (r1) 53 | 81303070 480743A1 bl GXInitLightDir  54 | 81303074 800280A8 lwz r0, -0x7F58 (r2) 55 | 81303078 38810018 addi r4, r1, 24 56 | 8130307C 38610050 addi r3, r1, 80 57 | 81303080 90010014 stw r0, 20 (r1) 58 | 81303084 80010014 lwz r0, 20 (r1) 59 | 81303088 90010018 stw r0, 24 (r1) 60 | 8130308C 480743A1 bl GXInitLightColor  61 | 81303090 38610050 addi r3, r1, 80 62 | 81303094 38800001 li r4, 1 63 | 81303098 480743BD bl GXLoadLightObjImm  64 | 8130309C 8001009C lwz r0, 156 (r1) 65 | 813030A0 83E10094 lwz r31, 148 (r1) 66 | 813030A4 38210098 addi r1, r1, 152 67 | 813030A8 7C0803A6 mtlr r0 68 | 813030AC 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x8130903C.txt: -------------------------------------------------------------------------------- 1 | 8130903C 7C0802A6 mflr r0 2 | 81309040 90010004 stw r0, 4 (r1) 3 | 81309044 9421FFF8 stwu r1, -8 (r1) 4 | 81309048 4BFF80B1 bl 0x813010F8  5 | 8130904C A8830036 lha r4, 54 (r3) 6 | 81309050 A803003A lha r0, 58 (r3) 7 | 81309054 7C040214 add r0, r4, r0 8 | 81309058 B0030036 sth r0, 54 (r3) 9 | 8130905C A8030036 lha r0, 54 (r3) 10 | 81309060 A8830038 lha r4, 56 (r3) 11 | 81309064 7C002000 cmpw r0, r4 12 | 81309068 40810010 ble- 0x81309078  13 | 8130906C B0830036 sth r4, 54 (r3) 14 | 81309070 3800FFFF li r0, -1 15 | 81309074 B003003A sth r0, 58 (r3) 16 | 81309078 A8030036 lha r0, 54 (r3) 17 | 8130907C 2C000000 cmpwi r0, 0 18 | 81309080 40800014 bge- 0x81309094  19 | 81309084 38000000 li r0, 0 20 | 81309088 B0030036 sth r0, 54 (r3) 21 | 8130908C 38000001 li r0, 1 22 | 81309090 B003003A sth r0, 58 (r3) 23 | 81309094 8001000C lwz r0, 12 (r1) 24 | 81309098 38210008 addi r1, r1, 8 25 | 8130909C 7C0803A6 mtlr r0 26 | 813090A0 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x8130BDB8.txt: -------------------------------------------------------------------------------- 1 | 8130BDB8 7C0802A6 mflr r0 2 | 8130BDBC 90010004 stw r0, 4 (r1) 3 | 8130BDC0 9421FFF8 stwu r1, -8 (r1) 4 | 8130BDC4 800D83FC lwz r0, -0x7C04 (r13) 5 | 8130BDC8 900D83F8 stw r0, -0x7C08 (r13) 6 | 8130BDCC 800D83F8 lwz r0, -0x7C08 (r13) 7 | 8130BDD0 28000006 cmplwi r0, 6 8 | 8130BDD4 41810094 bgt- 0x8130BE68  9 | 10 | 8130BDD8 3C608138 lis r3, 0x8138 11 | 8130BDDC 386310E8 addi r3, r3, 0x10E8 12 | 13 | r3 = 0x813810E8 : 14 | 0x8130BE00 15 | 0x8130BE10 16 | 0x8130BDF0 17 | 0x8130BE20 18 | 0x8130BE30 19 | 0x8130BE44 20 | 0x8130BE68 21 | 22 | 8130BDE0 5400103A rlwinm r0, r0, 2, 0, 29 mask:0xFFFFFFFC 23 | 8130BDE4 7C03002E lwzx r0, r3, r0 24 | 8130BDE8 7C0903A6 mtctr r0 25 | 8130BDEC 4E800420 bctr  26 | 27 | 8130BDF0 48001379 bl 0x8130D168  28 | 8130BDF4 906D83FC stw r3, -0x7C04 (r13) 29 | 8130BDF8 48000B15 bl 0x8130C90C  30 | 8130BDFC 4800006C b 0x8130BE68  31 | 32 | 8130BE00 48001051 bl 0x8130CE50  33 | 8130BE04 906D83FC stw r3, -0x7C04 (r13) 34 | 8130BE08 48000B05 bl 0x8130C90C  35 | 8130BE0C 4800005C b 0x8130BE68  36 | 37 | 8130BE10 48000D65 bl 0x8130CB74  38 | 8130BE14 906D83FC stw r3, -0x7C04 (r13) 39 | 8130BE18 48000AF5 bl 0x8130C90C  40 | 8130BE1C 4800004C b 0x8130BE68  41 | 42 | 8130BE20 480016C1 bl 0x8130D4E0  43 | 8130BE24 906D83FC stw r3, -0x7C04 (r13) 44 | 8130BE28 48000AE5 bl 0x8130C90C  45 | 8130BE2C 4800003C b 0x8130BE68  46 | 47 | 8130BE30 48002F01 bl 0x8130ED30  48 | 8130BE34 38000001 li r0, 1 49 | 8130BE38 906D83FC stw r3, -0x7C04 (r13) 50 | 8130BE3C 900D8030 stw r0, -0x7FD0 (r13) 51 | 8130BE40 48000028 b 0x8130BE68  52 | 53 | 8130BE44 800D8030 lwz r0, -0x7FD0 (r13) 54 | 8130BE48 2C000000 cmpwi r0, 0 55 | 8130BE4C 41820014 beq- 0x8130BE60  56 | 8130BE50 38600000 li r3, 0 57 | 8130BE54 4804EDCD bl 0x8135AC20  58 | 8130BE58 38000000 li r0, 0 59 | 8130BE5C 900D8030 stw r0, -0x7FD0 (r13) 60 | 8130BE60 48006D3D bl 0x81312B9C  61 | 8130BE64 906D83FC stw r3, -0x7C04 (r13) 62 | 63 | 8130BE68 8001000C lwz r0, 12 (r1) 64 | 8130BE6C 38210008 addi r1, r1, 8 65 | 8130BE70 7C0803A6 mtlr r0 66 | 8130BE74 4E800020 blr 67 | -------------------------------------------------------------------------------- /MainLoop/0x8130BE78.txt: -------------------------------------------------------------------------------- 1 | 8130BE78 7C0802A6 mflr r0 2 | 8130BE7C 90010004 stw r0, 4 (r1) 3 | 8130BE80 9421FFF8 stwu r1, -8 (r1) 4 | 8130BE84 800D83F8 lwz r0, -0x7C08 (r13) 5 | 8130BE88 28000006 cmplwi r0, 6 6 | 8130BE8C 41810040 bgt- 0x8130BECC  7 | 8130BE90 3C608138 lis r3, 0x8138 8 | 8130BE94 38631104 addi r3, r3, 0x1104 9 | 8130BE98 5400103A rlwinm r0, r0, 2, 0, 29 mask:0xFFFFFFFC 10 | 8130BE9C 7C03002E lwzx r0, r3, r0 11 | 8130BEA0 7C0903A6 mtctr r0 12 | 8130BEA4 4E800420 bctr  13 | 14 | 0x81381104: 15 | 0x8130BEB0 16 | 0x8130BEA8 17 | 0x8130BEB8 18 | 0x8130BEA8 19 | 0x8130BEC0 20 | 0x8130BEC8 21 | 0x8130BECC 22 | 23 | 8130BEA8 48001895 bl 0x8130D73C  24 | 8130BEAC 48000020 b 0x8130BECC  25 | 26 | 8130BEB0 48001E2D bl 0x8130DCDC  27 | 8130BEB4 48000018 b 0x8130BECC  28 | 29 | 8130BEB8 480022C5 bl 0x8130E17C  30 | 8130BEBC 48000010 b 0x8130BECC  31 | 32 | 8130BEC0 48002509 bl 0x8130E3C8  33 | 8130BEC4 48000008 b 0x8130BECC  34 | 35 | 8130BEC8 480026F9 bl 0x8130E5C0  36 | 37 | 8130BECC 8001000C lwz r0, 12 (r1) 38 | 8130BED0 38210008 addi r1, r1, 8 39 | 8130BED4 7C0803A6 mtlr r0 40 | 8130BED8 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x8130BEDC.txt: -------------------------------------------------------------------------------- 1 | 8130BEDC 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/0x8131C268.txt: -------------------------------------------------------------------------------- 1 | 8131C268 7C0802A6 mflr r0 2 | 8131C26C 3C60814B lis r3, 0x814B 3 | 8131C270 90010004 stw r0, 4 (r1) 4 | 8131C274 9421FFE0 stwu r1, -32 (r1) 5 | 8131C278 93E1001C stw r31, 28 (r1) 6 | 8131C27C 93C10018 stw r30, 24 (r1) 7 | 8131C280 3BC37280 addi r30, r3, 0x7280 8 | 8131C284 93A10014 stw r29, 20 (r1) 9 | 8131C288 93810010 stw r28, 16 (r1) 10 | 8131C28C 880D8509 lbz r0, -0x7AF7 (r13) 11 | 8131C290 28000001 cmplwi r0, 1 12 | 8131C294 408200A8 bne- 0x8131C33C  13 | 8131C298 38600000 li r3, 0 14 | 8131C29C 48054D6D bl CARDProbe  15 | 8131C2A0 2C030000 cmpwi r3, 0 16 | 8131C2A4 41820050 beq- 0x8131C2F4  17 | 8131C2A8 3BFE0002 addi r31, r30, 2 18 | 8131C2AC A81E0002 lha r0, 2 (r30) 19 | 8131C2B0 2C000002 cmpwi r0, 2 20 | 8131C2B4 40800040 bge- 0x8131C2F4  21 | 8131C2B8 3BA00000 li r29, 0 22 | 8131C2BC 3800FFEB li r0, -21 23 | 8131C2C0 9BAD8508 stb r29, -0x7AF8 (r13) 24 | 8131C2C4 93AD850C stw r29, -0x7AF4 (r13) 25 | 8131C2C8 900D8510 stw r0, -0x7AF0 (r13) 26 | 8131C2CC 48000645 bl 0x8131C910  27 | 8131C2D0 38800000 li r4, 0 28 | 8131C2D4 38A00000 li r5, 0 29 | 8131C2D8 48043839 bl OSSendMessage  30 | 8131C2DC 2C030000 cmpwi r3, 0 31 | 8131C2E0 4182005C beq- 0x8131C33C  32 | 8131C2E4 38000003 li r0, 3 33 | 8131C2E8 B01F0000 sth r0, 0 (r31) 34 | 8131C2EC 9BBE0001 stb r29, 1 (r30) 35 | 8131C2F0 4800004C b 0x8131C33C  36 | 8131C2F4 2C030000 cmpwi r3, 0 37 | 8131C2F8 40820044 bne- 0x8131C33C  38 | 8131C2FC A81E0002 lha r0, 2 (r30) 39 | 8131C300 2C000002 cmpwi r0, 2 40 | 8131C304 40810038 ble- 0x8131C33C  41 | 8131C308 3BA00000 li r29, 0 42 | 8131C30C 38600009 li r3, 9 43 | 8131C310 9BAD8508 stb r29, -0x7AF8 (r13) 44 | 8131C314 3800FFEB li r0, -21 45 | 8131C318 906D850C stw r3, -0x7AF4 (r13) 46 | 8131C31C 900D8510 stw r0, -0x7AF0 (r13) 47 | 8131C320 480005F1 bl 0x8131C910  48 | 8131C324 38800009 li r4, 9 49 | 8131C328 38A00000 li r5, 0 50 | 8131C32C 480437E5 bl OSSendMessage  51 | 8131C330 2C030000 cmpwi r3, 0 52 | 8131C334 41820008 beq- 0x8131C33C  53 | 8131C338 9BBE0001 stb r29, 1 (r30) 54 | 8131C33C 880D8509 lbz r0, -0x7AF7 (r13) 55 | 8131C340 28000001 cmplwi r0, 1 56 | 8131C344 408200BC bne- 0x8131C400  57 | 8131C348 38600001 li r3, 1 58 | 8131C34C 48054CBD bl CARDProbe  59 | 8131C350 2C030000 cmpwi r3, 0 60 | 8131C354 41820058 beq- 0x8131C3AC  61 | 8131C358 3B9E0016 addi r28, r30, 22 62 | 8131C35C A81E0016 lha r0, 22 (r30) 63 | 8131C360 2C000002 cmpwi r0, 2 64 | 8131C364 40800048 bge- 0x8131C3AC  65 | 8131C368 38000001 li r0, 1 66 | 8131C36C 3BA00000 li r29, 0 67 | 8131C370 980D8508 stb r0, -0x7AF8 (r13) 68 | 8131C374 3800FFEB li r0, -21 69 | 8131C378 93AD850C stw r29, -0x7AF4 (r13) 70 | 8131C37C 3FE00001 lis r31, 0x0001 71 | 8131C380 900D8510 stw r0, -0x7AF0 (r13) 72 | 8131C384 4800058D bl 0x8131C910  73 | 8131C388 389F0000 addi r4, r31, 0 74 | 8131C38C 38A00000 li r5, 0 75 | 8131C390 48043781 bl OSSendMessage  76 | 8131C394 2C030000 cmpwi r3, 0 77 | 8131C398 41820068 beq- 0x8131C400  78 | 8131C39C 38000003 li r0, 3 79 | 8131C3A0 B01C0000 sth r0, 0 (r28) 80 | 8131C3A4 9BBE0015 stb r29, 21 (r30) 81 | 8131C3A8 48000058 b 0x8131C400  82 | 8131C3AC 2C030000 cmpwi r3, 0 83 | 8131C3B0 40820050 bne- 0x8131C400  84 | 8131C3B4 A81E0016 lha r0, 22 (r30) 85 | 8131C3B8 2C000002 cmpwi r0, 2 86 | 8131C3BC 40810044 ble- 0x8131C400  87 | 8131C3C0 38000001 li r0, 1 88 | 8131C3C4 38600009 li r3, 9 89 | 8131C3C8 980D8508 stb r0, -0x7AF8 (r13) 90 | 8131C3CC 3800FFEB li r0, -21 91 | 8131C3D0 3C800001 lis r4, 0x0001 92 | 8131C3D4 906D850C stw r3, -0x7AF4 (r13) 93 | 8131C3D8 3BA40009 addi r29, r4, 9 94 | 8131C3DC 900D8510 stw r0, -0x7AF0 (r13) 95 | 8131C3E0 48000531 bl 0x8131C910  96 | 8131C3E4 389D0000 addi r4, r29, 0 97 | 8131C3E8 38A00000 li r5, 0 98 | 8131C3EC 48043725 bl OSSendMessage  99 | 8131C3F0 2C030000 cmpwi r3, 0 100 | 8131C3F4 4182000C beq- 0x8131C400  101 | 8131C3F8 38000000 li r0, 0 102 | 8131C3FC 981E0015 stb r0, 21 (r30) 103 | 8131C400 3C608138 lis r3, 0x8138 104 | 8131C404 3BE31300 addi r31, r3, 0x1300 105 | 8131C408 48000184 b 0x8131C58C  106 | 8131C40C 80610008 lwz r3, 8 (r1) 107 | 8131C410 5460063E rlwinm r0, r3, 0, 24, 31 mask:0x000000FF 108 | 8131C414 7C000774 extsb r0, r0 109 | 8131C418 2C00000A cmpwi r0, 10 110 | 8131C41C 547D87FE rlwinm r29, r3, 16, 31, 31 mask:0x00000001 111 | 8131C420 4182000C beq- 0x8131C42C  112 | 8131C424 2C00000B cmpwi r0, 11 113 | 8131C428 40820010 bne- 0x8131C438  114 | 8131C42C 5460C63E rlwinm r0, r3, 24, 24, 31 mask:0x000000FF 115 | 8131C430 980D8509 stb r0, -0x7AF7 (r13) 116 | 8131C434 48000158 b 0x8131C58C  117 | 8131C438 2C00000C cmpwi r0, 12 118 | 8131C43C 40820014 bne- 0x8131C450  119 | 8131C440 38000001 li r0, 1 120 | 8131C444 900D8518 stw r0, -0x7AE8 (r13) 121 | 8131C448 900D851C stw r0, -0x7AE4 (r13) 122 | 8131C44C 48000140 b 0x8131C58C  123 | 8131C450 5460C63E rlwinm r0, r3, 24, 24, 31 mask:0x000000FF 124 | 8131C454 7C030774 extsb r3, r0 125 | 8131C458 3863001B addi r3, r3, 27 126 | 8131C45C 2803001B cmplwi r3, 27 127 | 8131C460 418100A4 bgt- 0x8131C504  128 | 8131C464 5463103A rlwinm r3, r3, 2, 0, 29 mask:0xFFFFFFFC 129 | 8131C468 7C7F182E lwzx r3, r31, r3 130 | 8131C46C 7C6903A6 mtctr r3 131 | 8131C470 4E800420 bctr  132 | 8131C474 7FA30734 extsh r3, r29 133 | 8131C478 1C630014 mulli r3, r3, 20 134 | 8131C47C 38630002 addi r3, r3, 2 135 | 8131C480 38800004 li r4, 4 136 | 8131C484 7C9E1B2E sthx r4, r30, r3 137 | 8131C488 48000090 b 0x8131C518  138 | 8131C48C 7FA30734 extsh r3, r29 139 | 8131C490 1C630014 mulli r3, r3, 20 140 | 8131C494 38630002 addi r3, r3, 2 141 | 8131C498 38800004 li r4, 4 142 | 8131C49C 7C9E1B2E sthx r4, r30, r3 143 | 8131C4A0 48000078 b 0x8131C518  144 | 8131C4A4 7FA30734 extsh r3, r29 145 | 8131C4A8 1C630014 mulli r3, r3, 20 146 | 8131C4AC 38630002 addi r3, r3, 2 147 | 8131C4B0 38800005 li r4, 5 148 | 8131C4B4 7C9E1B2E sthx r4, r30, r3 149 | 8131C4B8 48000060 b 0x8131C518  150 | 8131C4BC 7FA30734 extsh r3, r29 151 | 8131C4C0 1C630014 mulli r3, r3, 20 152 | 8131C4C4 38630002 addi r3, r3, 2 153 | 8131C4C8 38800006 li r4, 6 154 | 8131C4CC 7C9E1B2E sthx r4, r30, r3 155 | 8131C4D0 48000048 b 0x8131C518  156 | 8131C4D4 7FA30734 extsh r3, r29 157 | 8131C4D8 1C630014 mulli r3, r3, 20 158 | 8131C4DC 38630002 addi r3, r3, 2 159 | 8131C4E0 38800008 li r4, 8 160 | 8131C4E4 7C9E1B2E sthx r4, r30, r3 161 | 8131C4E8 48000030 b 0x8131C518  162 | 8131C4EC 7FA30734 extsh r3, r29 163 | 8131C4F0 1C630014 mulli r3, r3, 20 164 | 8131C4F4 38630002 addi r3, r3, 2 165 | 8131C4F8 38800000 li r4, 0 166 | 8131C4FC 7C9E1B2E sthx r4, r30, r3 167 | 8131C500 48000018 b 0x8131C518  168 | 8131C504 7FA30734 extsh r3, r29 169 | 8131C508 1C630014 mulli r3, r3, 20 170 | 8131C50C 38630002 addi r3, r3, 2 171 | 8131C510 3880000A li r4, 10 172 | 8131C514 7C9E1B2E sthx r4, r30, r3 173 | 8131C518 7C030774 extsb r3, r0 174 | 8131C51C 4BFFFCB1 bl 0x8131C1CC  175 | 8131C520 80810008 lwz r4, 8 (r1) 176 | 8131C524 906D8510 stw r3, -0x7AF0 (r13) 177 | 8131C528 5480063E rlwinm r0, r4, 0, 24, 31 mask:0x000000FF 178 | 8131C52C 7C030774 extsb r3, r0 179 | 8131C530 7C600775 extsb. r0, r3 180 | 8131C534 4182003C beq- 0x8131C570  181 | 8131C538 2C030009 cmpwi r3, 9 182 | 8131C53C 41820034 beq- 0x8131C570  183 | 8131C540 5480C63E rlwinm r0, r4, 24, 24, 31 mask:0x000000FF 184 | 8131C544 7C030774 extsb r3, r0 185 | 8131C548 4BFFFC85 bl 0x8131C1CC  186 | 8131C54C 80A10008 lwz r5, 8 (r1) 187 | 8131C550 888D8508 lbz r4, -0x7AF8 (r13) 188 | 8131C554 54A087FE rlwinm r0, r5, 16, 31, 31 mask:0x00000001 189 | 8131C558 906D8514 stw r3, -0x7AEC (r13) 190 | 8131C55C 7C000734 extsh r0, r0 191 | 8131C560 7C040000 cmpw r4, r0 192 | 8131C564 4182000C beq- 0x8131C570  193 | 8131C568 54A0463E rlwinm r0, r5, 8, 24, 31 mask:0x000000FF 194 | 8131C56C 980D850A stb r0, -0x7AF6 (r13) 195 | 8131C570 7FA00734 extsh r0, r29 196 | 8131C574 1C600014 mulli r3, r0, 20 197 | 8131C578 38030001 addi r0, r3, 1 198 | 8131C57C 38600001 li r3, 1 199 | 8131C580 7C7E01AE stbx r3, r30, r0 200 | 8131C584 38000000 li r0, 0 201 | 8131C588 900D851C stw r0, -0x7AE4 (r13) 202 | 8131C58C 48000391 bl 0x8131C91C  203 | 8131C590 38810008 addi r4, r1, 8 204 | 8131C594 38A00000 li r5, 0 205 | 8131C598 48043641 bl 0x8135FBD8  206 | 8131C59C 2C030000 cmpwi r3, 0 207 | 8131C5A0 4082FE6C bne+ 0x8131C40C  208 | 8131C5A4 80010024 lwz r0, 36 (r1) 209 | 8131C5A8 83E1001C lwz r31, 28 (r1) 210 | 8131C5AC 83C10018 lwz r30, 24 (r1) 211 | 8131C5B0 83A10014 lwz r29, 20 (r1) 212 | 8131C5B4 83810010 lwz r28, 16 (r1) 213 | 8131C5B8 38210020 addi r1, r1, 32 214 | 8131C5BC 7C0803A6 mtlr r0 215 | 8131C5C0 4E800020 blr -------------------------------------------------------------------------------- /MainLoop/SubCalls/list.txt: -------------------------------------------------------------------------------- 1 | 0x8130C248 2 | 0x81300968 3 | 0x81301BC8 4 | 0x8131BF84 5 | 0x8135B180 6 | 0x8135B2C0 7 | 8 | BIG: 9 | 10 | 0x81301E3C 11 | 0x8131C114 12 | 0x81300668 13 | 0x8130BEE8 14 | 0x8131C140 15 | 0x81302A40 16 | 0x81302700 17 | 0x813010F8 18 | 0x8130BEE0 19 | 20 | First switch 21 | 22 | 0x8130D168 23 | 0x8130C90C 24 | 0x8130CE50 25 | 0x8130CB74 26 | 0x8130D4E0 27 | 0x8130ED30 28 | 0x8135AC20 29 | 0x81312B9C 30 | 31 | Second switch 32 | 33 | 0x8130D73C 34 | 0x8130DCDC 35 | 0x8130E17C 36 | 0x8130E3C8 37 | 0x8130E5C0 38 | 39 | CARD 40 | 41 | 0x8131C910 42 | 0x8131C1CC 43 | 0x8131C91C 44 | 0x8135FBD8 45 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Open Source GAMECUBE IPL 2 | 3 | :warning: GigaLeak Note. Yes, we know that one of the GigaLeak archives (`bb2.zip`) leaked almost all source code (most missing headers can be found in other archives) that can be built into a working BootROM image. So what of it? :-) The project has nothing to do with GigaLeak. Of course it's tempting to take at least the names of the IPL main code functions from there, but it's not interesting. Most of the information about IPL was already known before the leak. 4 | 5 | **!!! For educational purposes only !!!** 6 | 7 | Project Goals: 8 | - Reverse engineering of retail GameCube bootrom (USA / NTSC version was used as reference) 9 | - Write own bootrom, based on IPL reversing 10 | - Use bootrom in GameCube emulators to have fun :-) 11 | 12 | Toolchain (mostly official): 13 | - CodeWarrior IDE for Nintendo GameCube 14 | - Dolphin SDK 15 | - Dolwin debugger 16 | 17 | Overall Progress: 18 | - Bootstrap 1 stage disassembly **DONE** 19 | - Way to compile it back in binary file **DONE** 20 | - Bootrom fonts investigated **DONE** 21 | - IPL listing **DONE** 22 | - Identify all library calls 23 | - IPL intro 24 | - IPL menus 25 | - Utility to merge all pieces in single binary ROM file 26 | 27 | GameCube Bootrom details: 28 | 29 | Bootrom is located in special chip, designed by Macronix Ltd., and placed near Flipper IC: 30 | 31 | ![bootrom](/images/bootrom.jpg) 32 | 33 | Same chip shares non-volatile memory (SRAM) and real-time clock (RTC). 34 | 35 | Bootrom size is 2 MB. 36 | 37 | First logical part of bootrom (reset vector) called Bootstrap 1 (BS1). This small procedure is written on assembly and started from 0xfff00100 physical address. It prepares GameCube hardware, checks memory, initialize virtual addressing and load second logical part, known as Bootstrap 2 (BS2) or IPL (Intial Program Loader). 38 | 39 | IPL is written on C. It's compiled as DOL executable, by using early version Dolphin SDK as system API. 40 | Code entrypoint for start routine is made to 0x81300000 location (virtual address), by link script. 41 | 42 | Almost 50% of IPL binary payload is occupied by Dolphin SDK library calls. 43 | 44 | Important Note: Bootrom is encrypted itself. Decryption is done by MX chip, during block reading of bootrom data. On early stages (BS1) decryption is done on-the-fly as Gekko load 32-Byte bursts in instruction cache. Later its decrypted by EXI DMA, during BS2 copy. Its very important to watch scrambler not to go out-of-sync, otherwise trash appear as output. Symmetric encryption algorithm (XOR-based) was reversed by segher: [Descrambler](/wiki/Descrambler.md) 45 | 46 | Also Bootrom contains two sets of raster fonts. One for ANSI charset and another for SJIS: 47 | 48 | |![font_00](/images/font_00.jpg)|![font_01](/images/font_01.jpg)|![font_02](/images/font_02.jpg)| 49 | |---|---|---| 50 | 51 | |![font_03](/images/font_03.jpg)|![font_04](/images/font_04.jpg)|![font_05](/images/font_05.jpg)| 52 | |---|---|---| 53 | 54 | |![font_06](/images/font_06.jpg)|![font_07](/images/font_07.jpg)|![font_08](/images/font_08.jpg)| 55 | |---|---|---| 56 | 57 | |![font_09](/images/font_09.jpg)| 58 | |---| 59 | 60 | These fonts are rarely used by some games. Font data is **not** encrypted (BS1 disables bootrom scrambler after BS2 was copied in RAM, so subsequent Font reading is actually done over 0x00000000 XOR stream. Same thing applies to first 0x100 bytes of bootrom with Copyright strings). 61 | 62 | When IPL starts, following sequence appear: 63 | 64 | First is rotating cube intro: 65 | 66 | ![tumblr_lrxomiSQsX1qkyzcdo1_500](/images/tumblr_lrxomiSQsX1qkyzcdo1_500.gif) 67 | 68 | Next IPL menu appear, looking like rotating glass cube: 69 | 70 | ![iplmenu](/images/iplmenu.jpg) 71 | 72 | Each side of cube representing different menus (memory card manager, calendar settings etc.) 73 | 74 | Deep inside cube are floating small cubes, appearing as different patterns. 75 | 76 | YouTube video: 77 | 78 |
79 | 80 | Credits: 81 | - Credits go to GameCube scene members and my good friends : groepaz and tmbinc :=) 82 | - Thanks to Nintendo and ArtX team for such sexy console ^^ 83 | -------------------------------------------------------------------------------- /font_compress/.gitignore: -------------------------------------------------------------------------------- 1 | .vs 2 | Debug 3 | Release 4 | *.vcxproj.user 5 | -------------------------------------------------------------------------------- /font_compress/CommonDefs.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Some application and platform-specific defintions. 3 | */ 4 | 5 | #pragma once 6 | 7 | /* 8 | * Define Platform Here. 9 | */ 10 | 11 | #define WINDOWS 12 | #define WINDOWS_X86 // Allow ASM 13 | 14 | /* 15 | * General Data Types. 16 | */ 17 | 18 | typedef signed char s8; 19 | typedef signed short s16; 20 | typedef signed long s32; 21 | typedef unsigned char u8; 22 | typedef unsigned short u16; 23 | typedef unsigned long u32; 24 | typedef float f32; 25 | typedef double f64; 26 | 27 | #ifdef WINDOWS 28 | typedef unsigned __int64 u64; 29 | typedef signed __int64 s64; 30 | #endif 31 | 32 | #ifndef __cplusplus 33 | typedef enum { false = 0, true } bool; 34 | #endif 35 | 36 | #define FASTCALL __fastcall 37 | #define INLINE __inline 38 | -------------------------------------------------------------------------------- /font_compress/SZP.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include 4 | #include 5 | 6 | #include "Commondefs.h" 7 | 8 | u16 FASTCALL Swap16(u16 data) 9 | { 10 | return ((data & 0x00ff) << 8) | 11 | ((data & 0xff00) >> 8) ; 12 | } 13 | u32 FASTCALL Swap32(u32 data) 14 | { 15 | return ((data >> 24) ) | 16 | ((data >> 8) & 0x0000ff00) | 17 | ((data << 8) & 0x00ff0000) | 18 | ((data << 24) ); 19 | } 20 | 21 | /* 22 | *************************************************************************** 23 | * Compress API. Credits to hotquik for his Compress/Decompress implementation!! 24 | * (SZP is actually LZSS modification). 25 | *************************************************************************** 26 | */ 27 | 28 | #define SZP_ALLOC malloc 29 | #define SZP_FREE free 30 | #define SZP_MAGIC (('0'<<24)+('y'<<16)+('a'<<8)+'Y') // Yay0 31 | 32 | typedef struct SZP_S // Szp Header. 33 | { 34 | u32 check; 35 | u32 decodedSize; 36 | u32 linkOffset; 37 | u32 chunkOffset; 38 | #pragma warning (disable: 4200) 39 | u32 flagTable[]; 40 | } SZP_S; 41 | 42 | // Encodes a data range in a SZP block. 43 | // In: Memory mapped source buffer and its length in bytes. 44 | // Out: Pre-allocated destination buffer (recommended length is twice as source), 45 | // compressed buffer length in bytes. 46 | void SZP_Compress(void *dest, int *encodedSize, void *src, int srcLen) 47 | { 48 | #define OFSBITS 12 49 | 50 | u8 * decodedBuffer = (u8 *)src, *encodedBuffer = (u8 *)dest; 51 | u32 decodedSize = srcLen; 52 | u8 * decPtr, * decEndPtr; 53 | SZP_S * header; 54 | 55 | // masks buffer 56 | u32 maskMaxSize = (decodedSize + 32) >> 3; // 1 bit per byte 57 | u32 maskSize = 0; 58 | u32 maskBitCount = 0, mask = 0; 59 | u32 * maskBuffer, * maskPtr, * maskEndPtr; 60 | 61 | // links buffer 62 | u32 linkMaxSize = decodedSize; 63 | u32 linkSize = 0; 64 | u16 link = 0; 65 | u16 linkOffset; 66 | u16 * linkBuffer, * linkPtr, * linkEndPtr; 67 | u16 maxOffset = 1 << OFSBITS; 68 | u16 minCount = 3, maxCount = 273; 69 | 70 | // chunks buffer 71 | u32 chunkMaxSize = decodedSize; 72 | u32 chunkSize = 0; 73 | u8 chunk = 0; 74 | u8 * chunkBuffer, * chunkPtr, * chunkEndPtr; 75 | 76 | u8 *windowPtr; 77 | int windowLen = 0, length, maxlen; 78 | 79 | // Re-allocate memory needed 80 | 81 | maskBuffer = (u32 *) SZP_ALLOC(maskMaxSize); 82 | linkBuffer = (u16 *) SZP_ALLOC(linkMaxSize); 83 | chunkBuffer = (u8 *) SZP_ALLOC(chunkMaxSize); 84 | 85 | if (maskBuffer == NULL || linkBuffer == NULL || chunkBuffer == NULL) { 86 | SZP_FREE(maskBuffer); 87 | SZP_FREE(linkBuffer); 88 | SZP_FREE(chunkBuffer); 89 | return; 90 | } 91 | 92 | memset(maskBuffer, 0, maskMaxSize); 93 | //memset(linkBuffer, 0, linkMaxSize); // Unnecessary. 94 | //memset(chunkBuffer, 0, chunkMaxSize); 95 | 96 | //set pointers 97 | decPtr = decodedBuffer; 98 | decEndPtr = decPtr + decodedSize; 99 | 100 | maskPtr = maskBuffer; 101 | maskEndPtr = (u32 *)((u8 *)maskPtr + maskMaxSize); 102 | 103 | linkPtr = linkBuffer; 104 | linkEndPtr = (u16 *)((u8 *)linkPtr + linkMaxSize); 105 | 106 | chunkPtr = chunkBuffer; 107 | chunkEndPtr = chunkPtr + chunkMaxSize; 108 | windowPtr = decPtr; 109 | 110 | // start enconding 111 | while (decPtr < decEndPtr) { 112 | // check buffers pointers 113 | #if 0 114 | ASSERTMSG (!(maskPtr >= maskEndPtr), "SZP Encode: Not enough memory for mask buffer"); 115 | ASSERTMSG (!(linkPtr >= linkEndPtr), "SZP Encode: Not enough memory for links buffer"); 116 | ASSERTMSG (!(chunkPtr >= chunkEndPtr), "SZP Encode: Not enough memory for chunks buffer"); 117 | #endif 118 | 119 | if(windowLen >= (1 << OFSBITS)) 120 | { 121 | windowLen = windowLen - (1 << OFSBITS); 122 | windowPtr = decPtr - windowLen; 123 | } 124 | 125 | if((decEndPtr - decPtr) < maxCount) maxCount = (decEndPtr - decPtr); 126 | 127 | // Scan through the window. 128 | maxlen = 0; 129 | for(int i=0; i maxlen) 136 | { 137 | maxlen = length; 138 | linkOffset = windowLen - i; 139 | } 140 | } 141 | length = maxlen; 142 | 143 | mask <<= 1; 144 | if(length >= minCount) // Add Link 145 | { 146 | link = (linkOffset - 1) & 0x0FFF; 147 | 148 | if (length < 18) { 149 | link |= ((length - 2) << 12) ; 150 | } 151 | else{ 152 | // store current count as a chunk. 153 | *chunkPtr++ = (u8)(length - 18); 154 | } 155 | 156 | *linkPtr++ = Swap16(link); 157 | decPtr += length; 158 | windowLen += length; 159 | } 160 | else // Add single byte, increase Window. 161 | { 162 | *chunkPtr++ = *decPtr++; 163 | windowLen++; 164 | mask |= 1; 165 | } 166 | 167 | maskBitCount++; 168 | if (maskBitCount == 32) { 169 | // store current mask 170 | *maskPtr = Swap32(mask); 171 | maskPtr++; 172 | maskBitCount = 0; 173 | } 174 | } 175 | 176 | //flush mask 177 | if (maskBitCount > 0) { 178 | mask <<= (32 - maskBitCount); 179 | // store current mask 180 | *maskPtr = Swap32(mask); 181 | maskPtr++; 182 | maskBitCount = 0; 183 | } 184 | 185 | // now join all pieces 186 | maskSize = (u32)((u8 *)maskPtr - (u8 *)maskBuffer); 187 | linkSize = (u32)((u8 *)linkPtr - (u8 *)linkBuffer); 188 | chunkSize = (u32)((u8 *)chunkPtr - (u8 *)chunkBuffer); 189 | 190 | *encodedSize = sizeof(SZP_S) + maskSize + linkSize + chunkSize; 191 | header = (SZP_S *)encodedBuffer; 192 | 193 | // swap arch. dependent data 194 | header->check = SZP_MAGIC; 195 | header->decodedSize = Swap32(decodedSize); 196 | header->linkOffset = Swap32(sizeof(SZP_S) + maskSize); 197 | header->chunkOffset = Swap32(sizeof(SZP_S) + maskSize + linkSize); 198 | 199 | // copy all buffer to final buffer 200 | memcpy((u8 *)header + sizeof(SZP_S), maskBuffer, maskSize); 201 | memcpy((u8 *)header + sizeof(SZP_S) + maskSize, linkBuffer, linkSize); 202 | memcpy((u8 *)header + sizeof(SZP_S) + maskSize + linkSize, chunkBuffer, chunkSize); 203 | 204 | SZP_FREE(maskBuffer); 205 | SZP_FREE(linkBuffer); 206 | SZP_FREE(chunkBuffer); 207 | } 208 | 209 | // Decodes an SZP block. Decoding is incredibly fast! 210 | // In: Memory mapped compressed buffer and its length in bytes. 211 | // Out: Pre-allocated destination buffer (length can be obtained from buffer's 212 | // header), decompressed buffer length in bytes. 213 | void SZP_Decompress(void *dest, int *destLen, void *src, int srcLen) 214 | { 215 | u8 * encodedBuffer = (u8 *)src; 216 | SZP_S * header; 217 | u8 * decodedBuffer; 218 | 219 | u32 decodedBytes, decodedSize, linkOffset, chunkOffset; 220 | u32 mask, maskBitsLeft, maskOffset; 221 | 222 | u32 aux; 223 | header = (SZP_S *)encodedBuffer; 224 | decodedSize = Swap32(header->decodedSize); // size of decoded data 225 | linkOffset = Swap32(header->linkOffset); // link table 226 | chunkOffset = Swap32(header->chunkOffset); // byte chunks and count modifiers 227 | decodedBytes = 0; // current offset in dest buffer 228 | maskBitsLeft = 0; // mask bit counter 229 | maskOffset = 16; // current offset in mask table 230 | 231 | decodedBuffer = (u8 *)dest; 232 | 233 | //memset(decodedBuffer, 0, decodedSize); 234 | *destLen = decodedSize; 235 | 236 | do 237 | { 238 | 239 | // if all bits are done, get next mask 240 | if(maskBitsLeft == 0) 241 | { 242 | // read word from mask data block 243 | mask = Swap32(*(u32 *)(encodedBuffer + maskOffset)); 244 | maskOffset += 4; 245 | maskBitsLeft = 32; // bit counter 246 | } 247 | 248 | // if next bit is set, chunk is non-linked 249 | if(mask & 0x80000000) 250 | { 251 | // get next byte 252 | *(u8 *)(decodedBuffer + decodedBytes) = *(u8 *)(encodedBuffer + chunkOffset); 253 | chunkOffset++, decodedBytes++; 254 | } 255 | // do copy, otherwise 256 | else 257 | { 258 | u16 link; 259 | u32 count; 260 | u8 * pointer; 261 | 262 | // read 16-bit from link table 263 | link = Swap16(*(u16 *)(encodedBuffer + linkOffset)); 264 | 265 | linkOffset += 2; 266 | // 'offset' 267 | pointer = decodedBuffer + decodedBytes - ( (link & 0xfff) + 1); 268 | // 'count' 269 | count = link >> 12; 270 | 271 | if(count == 0) 272 | { 273 | // get 'count' from chunks table 274 | count = *(u8 *)(encodedBuffer + chunkOffset) + 18; 275 | chunkOffset++; 276 | } 277 | else count += 2; 278 | 279 | // do block copy 280 | for(aux=0; auxcheck != SZP_MAGIC) 365 | { 366 | free(filedata); 367 | return false; 368 | } 369 | void *buf = SZP_ALLOC(Swap32(header->decodedSize)); 370 | if(buf == NULL) 371 | { 372 | free(filedata); 373 | return false; 374 | } 375 | SZP_Decompress(buf, (int *)&unpackedSize, filedata, (int)filesize); 376 | bool result = FileSave(to, buf, unpackedSize, "wb"); 377 | free(filedata); 378 | SZP_FREE(buf); 379 | return result; 380 | } 381 | -------------------------------------------------------------------------------- /font_compress/SZP.h: -------------------------------------------------------------------------------- 1 | 2 | bool FileCompress(char *to, char *from); 3 | bool FileDecompress(char *to, char *from); 4 | -------------------------------------------------------------------------------- /font_compress/main.cpp: -------------------------------------------------------------------------------- 1 | // Dolphin BootROM font compress/decompress tool. 2 | 3 | #include 4 | #include 5 | 6 | #include "CommonDefs.h" 7 | #include "SZP.h" 8 | 9 | static void usage (void) 10 | { 11 | printf ("Compress : yay -c source dest\n"); 12 | printf ("Decompress: yay -d source dest\n"); 13 | } 14 | 15 | int main (int argc, char **argv) 16 | { 17 | printf ("YAY - Dolphin BootROM font compression tool.\n"); 18 | 19 | if (argc != 4) 20 | { 21 | usage (); 22 | return 0; 23 | } 24 | 25 | if (!_stricmp (argv[1], "-c")) 26 | { 27 | FileCompress (argv[3], argv[2]); 28 | return 1; 29 | } 30 | 31 | if (!_stricmp (argv[1], "-d")) 32 | { 33 | FileDecompress (argv[3], argv[2]); 34 | return 1; 35 | } 36 | 37 | usage (); 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /font_compress/main.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.32002.261 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "main", "main.vcxproj", "{FF35E9D7-90FE-404E-81A2-9CD9787976DE}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x86 = Debug|x86 11 | Release|x86 = Release|x86 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {FF35E9D7-90FE-404E-81A2-9CD9787976DE}.Debug|x86.ActiveCfg = Debug|Win32 15 | {FF35E9D7-90FE-404E-81A2-9CD9787976DE}.Debug|x86.Build.0 = Debug|Win32 16 | {FF35E9D7-90FE-404E-81A2-9CD9787976DE}.Release|x86.ActiveCfg = Release|Win32 17 | {FF35E9D7-90FE-404E-81A2-9CD9787976DE}.Release|x86.Build.0 = Release|Win32 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {BFE710CC-D3A2-4F95-BC42-1785AC24FB3F} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /font_compress/main.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | 15 | 16 | {FF35E9D7-90FE-404E-81A2-9CD9787976DE} 17 | 18 | 19 | 20 | Application 21 | v142 22 | false 23 | MultiByte 24 | 25 | 26 | Application 27 | v142 28 | false 29 | MultiByte 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | .\Release\ 45 | .\Release\ 46 | 47 | 48 | .\Debug\ 49 | .\Debug\ 50 | 51 | 52 | 53 | true 54 | Level3 55 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 56 | .\Release\ 57 | .\Release\main.pch 58 | .\Release\ 59 | .\Release\ 60 | 61 | 62 | .\Release\main.tlb 63 | 64 | 65 | 0x0419 66 | NDEBUG;%(PreprocessorDefinitions) 67 | 68 | 69 | true 70 | .\Release\main.bsc 71 | 72 | 73 | 74 | 75 | 76 | true 77 | Level3 78 | EditAndContinue 79 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 80 | .\Debug\ 81 | .\Debug\main.pch 82 | .\Debug\ 83 | .\Debug\ 84 | 85 | 86 | .\Debug\main.tlb 87 | 88 | 89 | 0x0419 90 | _DEBUG;%(PreprocessorDefinitions) 91 | 92 | 93 | true 94 | .\Debug\main.bsc 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /images/bootrom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/bootrom.jpg -------------------------------------------------------------------------------- /images/font_00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/font_00.jpg -------------------------------------------------------------------------------- /images/font_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/font_01.jpg -------------------------------------------------------------------------------- /images/font_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/font_02.jpg -------------------------------------------------------------------------------- /images/font_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/font_03.jpg -------------------------------------------------------------------------------- /images/font_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/font_04.jpg -------------------------------------------------------------------------------- /images/font_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/font_05.jpg -------------------------------------------------------------------------------- /images/font_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/font_06.jpg -------------------------------------------------------------------------------- /images/font_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/font_07.jpg -------------------------------------------------------------------------------- /images/font_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/font_08.jpg -------------------------------------------------------------------------------- /images/font_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/font_09.jpg -------------------------------------------------------------------------------- /images/iplmenu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/iplmenu.jpg -------------------------------------------------------------------------------- /images/tumblr_lrxomiSQsX1qkyzcdo1_500.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ogamespec/gc-ipl/0d8ec091b89f223b088b1debfbab3d0e83938f09/images/tumblr_lrxomiSQsX1qkyzcdo1_500.gif -------------------------------------------------------------------------------- /main.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include "oslomem.h" 4 | #include "ossram.h" 5 | 6 | u32 var_76f8; // unused ? 7 | BOOL CounterBiasModified; 8 | BOOL SramFlag008Cleared; // 7CE0 9 | int LastDvdStep; 10 | 11 | double zero = 0.0; // 7D60 12 | 13 | void ClearUnusedBatRegisters (void); 14 | void ClearFPURegisters (void); 15 | void BS2Init (void); 16 | void BS2Main (void); 17 | void CheckSram (void); 18 | void SetTimeBaseCounter (void); 19 | void InitDVDLoader (void); 20 | 21 | int DVDStep (void); 22 | 23 | BOOL AD16Init (void); 24 | BOOL AD16WriteReg (u32 value); 25 | BOOL AD16ReadReg (u32 *value); 26 | BOOL AD16Probe (void); 27 | 28 | void __VIInit (VITVMode mode); 29 | 30 | BOOL __OSGetRTC ( OSTime * clock ); 31 | void __OSSetTime ( OSTime clock ); 32 | 33 | asm void ClearUnusedBatRegisters (void) 34 | { 35 | nofralloc; 36 | isync; 37 | li r4, 0; 38 | mtspr DBAT2L, r4; 39 | mtspr DBAT2U, r4; 40 | mtspr DBAT3L, r4; 41 | mtspr DBAT3U, r4; 42 | mtspr IBAT1L, r4; 43 | mtspr IBAT1U, r4; 44 | mtspr IBAT2L, r4; 45 | mtspr IBAT2U, r4; 46 | mtspr IBAT3L, r4; 47 | mtspr IBAT3U, r4; 48 | isync; 49 | blr; 50 | } 51 | 52 | asm void ClearFPURegisters (void) 53 | { 54 | nofralloc; 55 | lfd fp0, zero; 56 | fmr fp1, fp0; 57 | fmr fp2, fp0; 58 | fmr fp3, fp0; 59 | fmr fp4, fp0; 60 | fmr fp5, fp0; 61 | fmr fp6, fp0; 62 | fmr fp7, fp0; 63 | fmr fp8, fp0; 64 | fmr fp9, fp0; 65 | fmr fp10, fp0; 66 | fmr fp11, fp0; 67 | fmr fp12, fp0; 68 | fmr fp13, fp0; 69 | fmr fp14, fp0; 70 | fmr fp15, fp0; 71 | fmr fp16, fp0; 72 | fmr fp17, fp0; 73 | fmr fp18, fp0; 74 | fmr fp19, fp0; 75 | fmr fp20, fp0; 76 | fmr fp21, fp0; 77 | fmr fp22, fp0; 78 | fmr fp23, fp0; 79 | fmr fp24, fp0; 80 | fmr fp25, fp0; 81 | fmr fp26, fp0; 82 | fmr fp27, fp0; 83 | fmr fp28, fp0; 84 | fmr fp29, fp0; 85 | fmr fp30, fp0; 86 | fmr fp31, fp0; 87 | blr; 88 | } 89 | 90 | void BS2Init (void) 91 | { 92 | // Clear OS low memory. 93 | memset ( (void *) (OS_BASE_CACHED | 0x0000), 0, 256 ); 94 | memset ( (void *) (OS_BASE_CACHED | 0x3000), 0, 256 ); 95 | 96 | ClearUnusedBatRegisters (); 97 | __OSPhysMemSize = 24*1024*1024; 98 | __OSConsoleType = OS_CONSOLE_RETAIL1; 99 | //__OSConsoleType += ([0xCC00302C] >> 28) & 0xF; 100 | var_76f8 = 0xFFFFFFFF; 101 | 102 | ClearFPURegisters (); 103 | } 104 | 105 | void main() 106 | { 107 | BS2Init (); 108 | OSInit (); 109 | AD16Init (); 110 | AD16WriteReg (0x08000000); 111 | 112 | DVDInit (); 113 | AD16WriteReg (0x09000000); 114 | 115 | CARDInit (); 116 | AD16WriteReg (0x0A000000); 117 | 118 | CheckSram (); 119 | __VIInit (VI_TVMODE_PAL_INT); 120 | VIInit (); 121 | AD16WriteReg (0x0B000000); 122 | 123 | __OSBusClock = 162000000; 124 | __OSCoreClock = 486000000; 125 | SetTimeBaseCounter (); 126 | InitDVDLoader (); 127 | PADSetSpec (PAD_SPEC_5); 128 | PADInit (); 129 | AD16WriteReg (0x0C000000); 130 | 131 | BS2Main (); 132 | OSHalt ("BS2 ERROR >>> SHOULD NEVER REACH HERE"); 133 | } 134 | 135 | void CheckSram (void) 136 | { 137 | OSSram * sram; 138 | OSTime RealTimeClock; 139 | OSCalendarTime td; 140 | s32 counterBias; 141 | BOOL writeBackSram = FALSE; 142 | 143 | CounterBiasModified = SramFlag008Cleared = FALSE; 144 | 145 | sram = __OSLockSram (); 146 | 147 | if ( __OSCheckSram () == FALSE ) 148 | { 149 | counterBias = sram->counterBias; 150 | if ( __OSGetRTC (&RealTimeClock) ) 151 | { 152 | OSTicksToCalendarTime ( OSSecondsToTicks (RealTimeClock) * counterBias, &td ); 153 | if ( td.year < 2000 || td.year > 2007 ) counterBias = 0; 154 | } 155 | else counterBias = 0; 156 | 157 | memset ( sram, 0, 20 ); 158 | sram->counterBias = counterBias; 159 | sram->flags |= 0x10; 160 | sram->flags |= 0x04; 161 | CounterBiasModified = TRUE; 162 | writeBackSram = TRUE; 163 | } 164 | 165 | if ( (sram->flags & 0x08) == 0 ) SramFlag008Cleared = TRUE; 166 | 167 | __OSUnlockSram (writeBackSram); 168 | if ( writeBackSram ) { 169 | while ( __OSSyncSram () == 0 ) {} 170 | } 171 | } 172 | 173 | void SetTimeBaseCounter (void) 174 | { 175 | OSTime RealTimeClock; 176 | OSSram * sram = __OSLockSram (); 177 | 178 | if ( __OSGetRTC (&RealTimeClock) ) 179 | { 180 | __OSSetTime ( OSSecondsToTicks (RealTimeClock) ); 181 | } 182 | 183 | __OSUnlockSram (FALSE); 184 | } 185 | 186 | void InitDVDLoader (void) 187 | { 188 | LastDvdStep = DVDStep (); 189 | } 190 | -------------------------------------------------------------------------------- /oslomem.h: -------------------------------------------------------------------------------- 1 | // OS Global Variables. 2 | // This is private header used only in library code. Usual GC applications 3 | // must not use OS globals. 4 | 5 | // 0x80000000...0x800000FF 6 | 7 | volatile u32 __OSPhysMemSize AT_ADDRESS(OS_BASE_CACHED | 0x0028); 8 | volatile u32 __OSConsoleType AT_ADDRESS(OS_BASE_CACHED | 0x002C); 9 | 10 | volatile OSThread *__OSDefaultThread AT_ADDRESS(OS_BASE_CACHED | 0x00D8); 11 | volatile OSThreadLink __OSLinkActive AT_ADDRESS(OS_BASE_CACHED | 0x00DC); 12 | volatile OSThread *__OSCurrentThread AT_ADDRESS(OS_BASE_CACHED | 0x00E4); 13 | 14 | // 0x80003000...0x800030FF 15 | -------------------------------------------------------------------------------- /ossram.h: -------------------------------------------------------------------------------- 1 | typedef struct OSSram 2 | { 3 | u16 checkSum; // SRAM byte checksum (discovered by Costis) 4 | u16 checkSumInv; // inverted checksum (see YAGCD) 5 | u32 ead0; 6 | u32 ead1; 7 | s32 counterBias; // now we already know meaning of this one too :) 8 | s8 displayOffsetH; // used by VI library 9 | u8 ntd; 10 | u8 language; 11 | u8 flags; 12 | u8 dummy[44]; 13 | } OSSram; 14 | 15 | OSSram * __OSLockSram (void); 16 | BOOL __OSCheckSram (void); 17 | void __OSUnlockSram (BOOL writeBack); 18 | BOOL __OSSyncSram (void); 19 | -------------------------------------------------------------------------------- /wiki/BS2Main_sub1.md: -------------------------------------------------------------------------------- 1 | 2 | ```c++ 3 | 0x81307D90 (1) 4 | 0x8135C98C (1) 5 | 0x8135C984 (1) 6 | OSInitAlloc (1) 7 | 0x8135C99C (1) 8 | OSCreateHeap (1) 9 | 0x8135C734 (1) 10 | 0x8135C820 (1) 11 | 0x81307E1C (1) 12 | 0x8135C880 (1) 13 | ``` -------------------------------------------------------------------------------- /wiki/Descrambler.md: -------------------------------------------------------------------------------- 1 | # EXI Descrambler. 2 | 3 | ```c++ 4 | // bootrom descrambler reversed by segher 5 | // Copyright 2008 Segher Boessenkool 6 | void Descrambler(u8* data, u32 size) 7 | { 8 | u8 acc = 0; 9 | u8 nacc = 0; 10 | 11 | u16 t = 0x2953; 12 | u16 u = 0xd9c2; 13 | u16 v = 0x3ff1; 14 | 15 | u8 x = 1; 16 | 17 | for (u32 it = 0; it < size;) 18 | { 19 | int t0 = t & 1; 20 | int t1 = (t >> 1) & 1; 21 | int u0 = u & 1; 22 | int u1 = (u >> 1) & 1; 23 | int v0 = v & 1; 24 | 25 | x ^= t1 ^ v0; 26 | x ^= (u0 | u1); 27 | x ^= (t0 ^ u1 ^ v0) & (t0 ^ u0); 28 | 29 | if (t0 == u0) 30 | { 31 | v >>= 1; 32 | if (v0) 33 | v ^= 0xb3d0; 34 | } 35 | 36 | if (t0 == 0) 37 | { 38 | u >>= 1; 39 | if (u0) 40 | u ^= 0xfb10; 41 | } 42 | 43 | t >>= 1; 44 | if (t0) 45 | t ^= 0xa740; 46 | 47 | nacc++; 48 | acc = 2*acc + x; 49 | if (nacc == 8) 50 | { 51 | data[it++] ^= acc; 52 | nacc = 0; 53 | } 54 | } 55 | } 56 | ``` 57 | 58 | segher is supercomputer +1 59 | -------------------------------------------------------------------------------- /wiki/FontCompress.md: -------------------------------------------------------------------------------- 1 | ## BootROM Fonts Data format 2 | 3 | First 16 bytes are 'Yay0' header: 4 | 5 | |offset |size| description| 6 | |:------|:---|:---------------| 7 | | +0 |4 |'Yay0' signature| 8 | |+4 |4 |size of decoded data, in bytes| 9 | |+8 |4 |link table offset| 10 | |+12 |4 |non-linked chunks and count modifiers table offset| 11 | |+16 | |chunk description mask (words). each word describes incoming 32 chunks. if bit is set, then next chunk is non-linked (1 byte), otherwise next chunk is copied from previous data
Example mask : 0b 1101 0010 0000 0010 0000 0000 1101 1001,
bit 0 = 1, chunk 0 is non-linked, grab next byte from [+12] buffer
bit 1 = 1, chunk 1 is non-linked, grab next byte from [+12] buffer
bit 2 = 0, chunk 2 is linked, do block copy, using [+8] table
and so on...
12 | [+8] chunks link table (offsets) 13 | [+12] non-linked chunks and count modifiers buffer 14 | 15 | Total size of decoded data buffer calculated as header size (16 bytes) and size of decoded data ([+4] in header). Typical values are :
16 |
17 | ANSI font = 65824 bytes, SJIS font = 593636 bytes
18 |
19 | Average packing ratio is 20-50% (depends on data size)
20 |
21 |

Description of 'decoding'

22 | 23 | I dont know much about other data compression algorithms, so I will not be surprised, if Yay0 is just LZ modification :)
24 |
25 | Recipe : general idea to repeat previously unpacked block of data.
26 |
27 |
  1. if next bit in mask is '1', copy one byte to destination buffer from [+12] table, otherwise do following steps.
    28 |
  2. read 16-bit halfword from 'chunks link table' area :
    29 |
            [cccc] [oooo oooo oooo]
    30 |
    31 |
    first 4-bits are 'count' modifier. it counts bytes to copy.
    32 | next 12-bits are 'offset' modifier.
    33 |
  3. adjust modifiers :
    34 |
            id('count' == 0)
    35 | {
    36 | 'cmod' = grab next byte from 'count modifiers buffer'
    37 | 'count' = 'cmod' + 18;
    38 | }
    39 | else 'count' = 'count' + 2;
    40 |
    41 | 'offset' = 'offset' - 1;
    42 |
    43 |
    (assuming, that current offset is in destination buffer)
    44 |
  4. copy 'count' bytes from 'current offset' - 'offset'.
45 | 46 |

Reversing of decoding routine

47 | 48 |
void Decode(void *s, void *d)
49 | {
50 | i, j, k
51 | p, q
52 | cnt
53 |
54 | i = r21 = *(u32 *)(s + 4); // size of decoded data
55 | j = r29 = *(u32 *)(s + 8); // link table
56 | k = r23 = *(u32 *)(s + 12); // byte chunks and count modifiers
57 |
58 | q = r31 = 0 // current offset in dest buffer
59 | cnt = r28 = 0 // mask bit counter
60 | p = r24 = 16 // current offset in mask table
61 |
62 | do
63 | {
64 | // if all bits are done, get next mask
65 | if(cnt == 0)
66 | {
67 | // read word from mask data block
68 | r22 = *(u32 *)(s + p);
69 | p += 4;
70 | cnt = 32; // bit counter
71 | }
72 |
73 | // if next bit is set, chunk is non-linked
74 | if(r22 & 0x80000000)
75 | {
76 | // get next byte
77 | *(u8 *)(d + q) = *(u8 *)(s + k);
78 | k++, q++;
79 | }
80 | // do copy, otherwise
81 | else
82 | {
83 | // read 16-bit from link table
84 | r26 = *(u16 *)(s + j);
85 | j += 2;
86 |
87 | // 'offset'
88 | r25 = q - (r26 & 0xfff);
89 |
90 | // 'count'
91 | r30 = r26 >> 12;
92 |
93 | if(r30 == 0)
94 | {
95 | // get 'count' modifier
96 | r5 = *(u8 *)(s + k);
97 | k++;
98 | r30 = r5 + 18
99 | }
100 | else r30 += 2;
101 |
102 | // do block copy
103 | r5 = d + r25
104 | for(i=0; i<r30; i++)
105 | {
106 | *(u8 *)(d + q) = *(u8 *)(r5 - 1);
107 | q++, r5++;
108 | }
109 | }
110 |
111 | // next bit in mask
112 | r22 <<= 1;
113 | cnt--;
114 | } while(q < i);
115 | }
116 |
117 | 118 | Notes : I found that some files on gamecube DVDs which have "SZP" extension are also compressed as "Yay0", so probably Nintendo's term for this compression algo is 'SZP'-compression.
119 |
120 | Dolphin SDK contain OSFont API to load font and convert it to texture for graphics output. 121 | -------------------------------------------------------------------------------- /wiki/main.md: -------------------------------------------------------------------------------- 1 | 2 | ```c++ 3 | main (1) 4 | BS2Init (1) 5 | memset (1) 6 | __fill_mem (1) 7 | memset (2) 8 | __fill_mem (2) 9 | ClearUnusedBatRegisters (1) 10 | ClearFPURegisters (1) 11 | OSInit (1) 12 | AD16Init (1) 13 | AD16WriteReg (1) 14 | DVDInit (1) 15 | AD16WriteReg (2) 16 | CARDInit (1) 17 | AD16WriteReg (3) 18 | 0x81301F0C (1) <---- CheckSram 19 | __OSLockSram (1) 20 | __OSCheckSram (1) 21 | __OSGetRTC (1) 22 | OSTicksToCalendarTime (1) 23 | memset (3) 24 | __fill_mem (3) 25 | __OSUnlockSram (1) 26 | __OSSyncSram (1) 27 | __VIInit (1) 28 | VIInit (1) 29 | AD16WriteReg (4) 30 | BS2SetTime (1) 31 | __OSLockSram (2) 32 | __OSGetRTC (2) 33 | __OSSetTime (1) 34 | __OSUnlockSram (2) 35 | 0x813020C8 (1) 36 | 0x81300968 (1) <---- DVD loader here 37 | OSDisableInterrupts (1) 38 | __OSGetSystemTime (1) 39 | 0x81365770 (1) 40 | DVDReset (1) 41 | __OSGetSystemTime (2) 42 | __OSGetSystemTime (3) 43 | 0x81365770 (2) 44 | DVDReset (2) 45 | DVDReadDiskID (1) 46 | 0x813008B0 (1) 47 | 0x813682E4 (1) 48 | 0x81368128 (1) 49 | 0x81368128 (2) 50 | 0x813008B0 (2) 51 | 0x813682E4 (2) 52 | DVDReadAbsAsyncForBS (1) 53 | 0x813008B0 (3) 54 | 0x813682E4 (3) 55 | 0x81300598 (1) 56 | 0x81300598 (2) 57 | DVDReadAbsAsyncForBS (2) 58 | 0x813008B0 (4) 59 | 0x813682E4 (4) 60 | 0x81300598 (3) 61 | 0x81300598 (4) 62 | OSDisableInterrupts (2) 63 | DVDReadAbsAsyncForBS (3) 64 | OSRestoreInterrupts (1) 65 | 0x813006E8 (1) 66 | 0x8136A4F8 (1) 67 | 0x8135F1F0 (1) 68 | 0x813008B0 (5) 69 | 0x813682E4 (5) 70 | __DVDFSInit (1) 71 | DVDConvertPathToEntrynum (1) 72 | 0x81365BE4 (1) 73 | OSPanic (1) 74 | OSPanic (2) 75 | DVDReadAbsAsyncForBS (4) 76 | DVDLowWaitCoverClose (1) 77 | 0x813008B0 (6) 78 | 0x813682E4 (6) 79 | DVDLowWaitCoverClose (2) 80 | 0x81365770 (3) 81 | 0x813008B0 (7) 82 | 0x813682E4 (7) 83 | 0x813681E4 (1) 84 | 0x813008B0 (8) 85 | 0x813682E4 (8) 86 | 0x813008B0 (9) 87 | 0x813682E4 (9) 88 | OSPanic (3) 89 | OSRestoreInterrupts (2) 90 | 0x813657E0 (1) 91 | PADSetSpec (1) 92 | PADInit (1) 93 | AD16WriteReg (5) 94 | BS2Main (1) 95 | OSPanic (401) 96 | ``` 97 | 98 | This function is reversed, including subcalls. Although not tested. --------------------------------------------------------------------------------