diff --git a/src/game/file.c b/src/game/file.c index e4b42df32..dd89a6295 100644 --- a/src/game/file.c +++ b/src/game/file.c @@ -52,7 +52,7 @@ void func0f166eb4(void *dst, u32 scratchlen, u32 *romaddrptr, struct fileinfo *i if (scratchlen == 0) { // DMA with no inflate - func0000d410(dst, (void *)*romaddrptr, romsize); + dmaExec(dst, (void *)*romaddrptr, romsize); } else { // DMA the compressed data to scratch space then inflate u32 scratchaddr = ((u32)dst + scratchlen) - (romsize + 7 & 0xfffffff8); @@ -60,7 +60,7 @@ void func0f166eb4(void *dst, u32 scratchlen, u32 *romaddrptr, struct fileinfo *i if (scratchaddr - (u32)dst < 8) { info->size = 0; } else { - func0000d410((void *)scratchaddr, (void *)*romaddrptr, romsize); + dmaExec((void *)scratchaddr, (void *)*romaddrptr, romsize); info->size = ALIGN16(rzipInflate((void *)scratchaddr, dst, buffer)); } } @@ -119,7 +119,7 @@ void func0f166ff0(u16 filenum, void *memaddr, s32 offset, u32 len) u32 stack[2]; if (fileGetRomSizeByTableAddress((u32 *)&filetable[filenum])) { - func0000d410(memaddr, (void *)((u32)filetable[filenum] + offset), len); + dmaExec(memaddr, (void *)((u32)filetable[filenum] + offset), len); } } @@ -150,7 +150,7 @@ glabel fileGetInflatedLength /* f1670ac: 00000000 */ nop .L0f1670b0: /* f1670b0: 02012024 */ and $a0,$s0,$at -/* f1670b4: 0c003504 */ jal func0000d410 +/* f1670b4: 0c003504 */ jal dmaExec /* f1670b8: 00808025 */ or $s0,$a0,$zero .L0f1670bc: /* f1670bc: 0c002277 */ jal rzipIs1173 @@ -189,7 +189,7 @@ glabel fileGetInflatedLength // stub0f175f58(func0f166ea8((u32 *) &filetable[filenum]), (u32)alignedbuffer, 16); // } else { // alignedbuffer = (u8 *)(((u32)alignedbuffer) & ~0xf); -// func0000d410((void *)alignedbuffer, romaddr, 0x40); +// dmaExec((void *)alignedbuffer, romaddr, 0x40); // } // // if (rzipIs1173((void *)alignedbuffer)) { diff --git a/src/game/game_00b190.c b/src/game/game_00b190.c index 30ee4bd38..d9f32472b 100644 --- a/src/game/game_00b190.c +++ b/src/game/game_00b190.c @@ -21,5 +21,5 @@ void loadTextureList(void) g_Textures = malloc(len, MEMPOOL_PERMANENT); - func0000d410(g_Textures, &_textureslistSegmentRomStart, len); + dmaExec(g_Textures, &_textureslistSegmentRomStart, len); } diff --git a/src/game/game_015470.c b/src/game/game_015470.c index 4ad69098e..8cecfe215 100644 --- a/src/game/game_015470.c +++ b/src/game/game_015470.c @@ -700,7 +700,7 @@ void getitleInit(void *addr, u32 arg1) var80062498 = 0; var8009cc90 = addr; - func0000d410(var8009cc90, &_getitleSegmentRomStart, ALIGN64(len)); + dmaExec(var8009cc90, &_getitleSegmentRomStart, ALIGN64(len)); } Gfx *getitleRender(Gfx *gdl) diff --git a/src/game/game_1531a0.c b/src/game/game_1531a0.c index 48344da60..1e86567a4 100644 --- a/src/game/game_1531a0.c +++ b/src/game/game_1531a0.c @@ -85,7 +85,7 @@ void fontLoad(u8 *romstart, u8 *romend, struct font **font1, struct font2a4 **fo struct font *font = malloc(len, MEMPOOL_STAGE); struct font2a4 *font2a4 = font->unk2a4; - func0000d410(font, romstart, len); + dmaExec(font, romstart, len); // Convert pointers for (i = 0; i < 94; i++) { diff --git a/src/game/lang.c b/src/game/lang.c index cc913aac0..e02f1cd9c 100644 --- a/src/game/lang.c +++ b/src/game/lang.c @@ -221,7 +221,7 @@ glabel func0f16e3fc /* f16e5c8: 0000c012 */ mflo $t8 /* f16e5cc: 03192821 */ addu $a1,$t8,$t9 /* f16e5d0: afa80024 */ sw $t0,0x24($sp) -/* f16e5d4: 0c003504 */ jal func0000d410 +/* f16e5d4: 0c003504 */ jal dmaExec /* f16e5d8: 010f2021 */ addu $a0,$t0,$t7 /* f16e5dc: 3c0e800b */ lui $t6,%hi(var800aabb4) /* f16e5e0: 8fa80024 */ lw $t0,0x24($sp) @@ -273,7 +273,7 @@ glabel func0f16e3fc /* f16e694: 2718fb40 */ addiu $t8,$t8,-1216 /* f16e698: 000e79c0 */ sll $t7,$t6,0x7 /* f16e69c: 01f82821 */ addu $a1,$t7,$t8 -/* f16e6a0: 0c003504 */ jal func0000d410 +/* f16e6a0: 0c003504 */ jal dmaExec /* f16e6a4: afa80024 */ sw $t0,0x24($sp) /* f16e6a8: 3c19800b */ lui $t9,%hi(var800aabb4) /* f16e6ac: 8fa80024 */ lw $t0,0x24($sp) diff --git a/src/game/objectives/objectives.c b/src/game/objectives/objectives.c index 5e998bf42..d6a69664b 100644 --- a/src/game/objectives/objectives.c +++ b/src/game/objectives/objectives.c @@ -106,7 +106,7 @@ void tagsAllocatePtrs(void) // Read 4KB from a random ROM location within 128KB from the start of // the ROM, and write it to a random memory location between 0x80010000 // and 0x80030ff8. This will corrupt instructions in the lib segment. - func0000d410((u8 *)((random() & 0x1fff8) + 0x80010000), (u8 *)(random() & 0x1fffe), 0x1000); + dmaExec((u8 *)((random() & 0x1fff8) + 0x80010000), (u8 *)(random() & 0x1fffe), 0x1000); } } #endif diff --git a/src/game/propobj.c b/src/game/propobj.c index 7d6b2baa5..aa9e23e05 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -32586,7 +32586,7 @@ glabel func0f082d74 /* f082da0: afa50020 */ sw $a1,0x20($sp) /* f082da4: 00e02025 */ or $a0,$a3,$zero /* f082da8: 24060040 */ addiu $a2,$zero,0x40 -/* f082dac: 0c003504 */ jal func0000d410 +/* f082dac: 0c003504 */ jal dmaExec /* f082db0: afa70074 */ sw $a3,0x74($sp) /* f082db4: 3c098007 */ lui $t1,%hi(var8006abbc) /* f082db8: 8129abbc */ lb $t1,%lo(var8006abbc)($t1) @@ -32613,7 +32613,7 @@ glabel func0f082d74 /* f082e04: 8faa0020 */ lw $t2,0x20($sp) /* f082e08: afa30084 */ sw $v1,0x84($sp) /* f082e0c: afa70074 */ sw $a3,0x74($sp) -/* f082e10: 0c003504 */ jal func0000d410 +/* f082e10: 0c003504 */ jal dmaExec /* f082e14: 01482821 */ addu $a1,$t2,$t0 /* f082e18: 3c098007 */ lui $t1,%hi(var8006abbc) /* f082e1c: 8129abbc */ lb $t1,%lo(var8006abbc)($t1) @@ -34951,7 +34951,7 @@ glabel func0f084cf0 /* f084de8: 39e4000f */ xori $a0,$t7,0xf /* f084dec: 00808025 */ or $s0,$a0,$zero /* f084df0: 00402825 */ or $a1,$v0,$zero -/* f084df4: 0c003504 */ jal func0000d410 +/* f084df4: 0c003504 */ jal dmaExec /* f084df8: 24060010 */ addiu $a2,$zero,0x10 /* f084dfc: 3c04c757 */ lui $a0,0xc757 /* f084e00: 0fc21338 */ jal add43214321 diff --git a/src/game/room.c b/src/game/room.c index 69c8eb464..ec3d8d0c8 100644 --- a/src/game/room.c +++ b/src/game/room.c @@ -4032,7 +4032,7 @@ glabel func0f15b534 /* f15b7e0: 3c010001 */ lui $at,0x1 /* f15b7e4: 3421fffe */ ori $at,$at,0xfffe /* f15b7e8: 00412824 */ and $a1,$v0,$at -/* f15b7ec: 0c003504 */ jal func0000d410 +/* f15b7ec: 0c003504 */ jal dmaExec /* f15b7f0: 24060040 */ addiu $a2,$zero,0x40 .L0f15b7f4: /* f15b7f4: 3c04800a */ lui $a0,%hi(var800a491c) diff --git a/src/game/texture.c b/src/game/texture.c index ea67fb8b1..ad287bcee 100644 --- a/src/game/texture.c +++ b/src/game/texture.c @@ -5443,7 +5443,7 @@ glabel func0f173010 /* f173108: 00065902 */ srl $t3,$a2,0x4 /* f17310c: 000b3100 */ sll $a2,$t3,0x4 /* f173110: 032a2821 */ addu $a1,$t9,$t2 -/* f173114: 0c003504 */ jal func0000d410 +/* f173114: 0c003504 */ jal dmaExec /* f173118: afaf0044 */ sw $t7,0x44($sp) /* f17311c: 8fa30044 */ lw $v1,0x44($sp) /* f173120: 8fac002c */ lw $t4,0x2c($sp) @@ -5805,7 +5805,7 @@ glabel texturesLoadConfigs /* f173600: ac620000 */ sw $v0,0x0($v1) /* f173604: 24a5b270 */ addiu $a1,$a1,%lo(_textureconfigSegmentRomStart) /* f173608: 00402025 */ or $a0,$v0,$zero -/* f17360c: 0c003504 */ jal func0000d410 +/* f17360c: 0c003504 */ jal dmaExec /* f173610: 02203025 */ or $a2,$s1,$zero /* f173614: 3c18800b */ lui $t8,%hi(g_TextureConfigSegment) /* f173618: 8f18b554 */ lw $t8,%lo(g_TextureConfigSegment)($t8) @@ -6083,7 +6083,7 @@ glabel texturesLoadConfigs // s32 i; // // g_TextureConfigSegment = malloc(len, MEMPOOL_STAGE); -// func0000d410(g_TextureConfigSegment, &_textureconfigSegmentRomStart, len); +// dmaExec(g_TextureConfigSegment, &_textureconfigSegmentRomStart, len); // // var800ab550 = (u32)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart); // var800ab564 = (Gfx *)((u32)g_TextureConfigSegment - (u32)&_textureconfigSegmentStart + 0x000); // gdl000 diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 30c5aac1d..8ce33a807 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -7164,10 +7164,10 @@ u32 var80094ad0 = 0; u32 var80094ad4 = 0; u32 var80094ad8 = 0; u32 var80094adc = 0; -volatile u32 var80094ae0 = 0; +volatile u32 g_DmaNumSlotsBusy = 0; u32 var80094ae4 = 0; -struct var80094ae8 var80094ae8[32] = {0}; -u8 var80094de8[32] = {0}; +OSIoMesg g_DmaIoMsgs[32] = {0}; +u8 g_DmaSlotsBusy[32] = {0}; OSMesg var80094e08 = NULL; u32 var80094e0c = 0; u32 var80094e10 = 0; @@ -7200,7 +7200,7 @@ u32 var80094e78 = 0; u32 var80094e7c = 0; u32 var80094e80 = 0; u32 var80094e84 = 0; -OSMesgQueue var80094e88 = {0}; +OSMesgQueue g_DmaMesgQueue = {0}; u32 var80094ea0 = 0; u32 var80094ea4 = 0; u32 var80094ea8 = 0; diff --git a/src/include/PR/os_pi.h b/src/include/PR/os_pi.h index 0da1de6ba..815fb5901 100644 --- a/src/include/PR/os_pi.h +++ b/src/include/PR/os_pi.h @@ -61,7 +61,7 @@ typedef struct /*0x08*/ void *dramAddr; /*0x0C*/ u32 devAddr; /*0x10*/ u32 size; - //OSPiHandle *piHandle; //from the official definition + OSPiHandle *piHandle; //from the official definition } OSIoMesg; typedef struct { diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 037b0dab2..e369874ab 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -391,11 +391,11 @@ extern OSThread g_FaultThread; extern u32 g_FaultSp; extern OSMesgQueue g_FaultMesgQueue; extern OSMesg g_FaultMesg; -extern volatile u32 var80094ae0; -extern struct var80094ae8 var80094ae8[32]; -extern u8 var80094de8[32]; +extern volatile u32 g_DmaNumSlotsBusy; +extern OSIoMesg g_DmaIoMsgs[32]; +extern volatile u8 g_DmaSlotsBusy[32]; extern OSMesg var80094e08; -extern OSMesgQueue var80094e88; +extern OSMesgQueue g_DmaMesgQueue; extern u32 var80094ea0; extern u32 var80094ea4; extern u32 var80094ea8; diff --git a/src/include/lib/lib_0d0a0.h b/src/include/lib/lib_0d0a0.h index fcbe25334..62fcf9d2f 100644 --- a/src/include/lib/lib_0d0a0.h +++ b/src/include/lib/lib_0d0a0.h @@ -4,13 +4,13 @@ #include "types.h" void dmaInit(void); -void func0000d0f8(void *memaddr, void *romaddr, u32 len, bool arg3); +void dmaStart(void *memaddr, u32 romaddr, u32 len, bool priority); u32 xorDeadbeef(u32 value); u32 xorDeadbabe(u32 value); void dmaCheckPiracy(void *memaddr, u32 len); -void func0000d350(void); -void func0000d410(void *memaddr, void *romaddr, u32 len); -void func0000d44c(void *memaddr, void *romaddr, u32 len); +void dmaWait(void); +void dmaExec(void *memaddr, void *romaddr, u32 len); +void dmaExecHighPriority(void *memaddr, void *romaddr, u32 len); void *func0000d488(void *memaddr, void *romaddr, u32 len); #endif diff --git a/src/include/types.h b/src/include/types.h index 23c6d2dac..7f6de5100 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6980,13 +6980,4 @@ struct animationdefinition { u8 flags; }; -struct var80094ae8 { - u32 unk00; - u32 unk04; - u32 unk08; - u32 unk0c; - u32 unk10; - u32 unk14; -}; - #endif diff --git a/src/lib/lib_070d0.c b/src/lib/lib_070d0.c index c496e8e6e..2b3deb868 100644 --- a/src/lib/lib_070d0.c +++ b/src/lib/lib_070d0.c @@ -87,7 +87,7 @@ glabel func000070d0 /* 71d8: 02c0a025 */ or $s4,$s6,$zero /* 71dc: aea40000 */ sw $a0,0x0($s5) /* 71e0: 02402825 */ or $a1,$s2,$zero -/* 71e4: 0c003504 */ jal func0000d410 +/* 71e4: 0c003504 */ jal dmaExec /* 71e8: 39c6000f */ xori $a2,$t6,0xf /* 71ec: 240bfff0 */ addiu $t3,$zero,-16 /* 71f0: 12c0000c */ beqz $s6,.L00007224 @@ -197,7 +197,7 @@ glabel func000070d0 /* 7370: 39e6000f */ xori $a2,$t7,0xf /* 7374: 02402825 */ or $a1,$s2,$zero /* 7378: afb61474 */ sw $s6,0x1474($sp) -/* 737c: 0c003504 */ jal func0000d410 +/* 737c: 0c003504 */ jal dmaExec /* 7380: afb30054 */ sw $s3,0x54($sp) /* 7384: 8fa31474 */ lw $v1,0x1474($sp) /* 7388: 12c0000b */ beqz $s6,.L000073b8 @@ -230,7 +230,7 @@ glabel func000070d0 /* 73e8: 01e53023 */ subu $a2,$t7,$a1 /* 73ec: 24c6000f */ addiu $a2,$a2,0xf /* 73f0: 34d8000f */ ori $t8,$a2,0xf -/* 73f4: 0c003504 */ jal func0000d410 +/* 73f4: 0c003504 */ jal dmaExec /* 73f8: 3b06000f */ xori $a2,$t8,0xf /* 73fc: 8fa40048 */ lw $a0,0x48($sp) /* 7400: 02402825 */ or $a1,$s2,$zero diff --git a/src/lib/lib_0d0a0.c b/src/lib/lib_0d0a0.c index 7c4191d85..8ad1ef5b3 100644 --- a/src/lib/lib_0d0a0.c +++ b/src/lib/lib_0d0a0.c @@ -12,129 +12,59 @@ #include "types.h" u8 g_LoadState = 0; -u32 var8005d9a4 = 0x00000000; -u32 var8005d9a8 = 0x00000000; -u32 var8005d9ac = 0x00000000; void dmaInit(void) { s32 i; - for (i = 0; i < ARRAYCOUNT(var80094de8); i++) { - var80094de8[i] = 0; + for (i = 0; i < ARRAYCOUNT(g_DmaSlotsBusy); i++) { + g_DmaSlotsBusy[i] = 0; } - var80094ae0 = 0; + g_DmaNumSlotsBusy = 0; - osCreateMesgQueue(&var80094e88, &var80094e08, 0x20); + osCreateMesgQueue(&g_DmaMesgQueue, &var80094e08, 0x20); } -GLOBAL_ASM( -glabel func0000d0f8 -/* d0f8: 27bdffa8 */ addiu $sp,$sp,-88 -/* d0fc: afb70044 */ sw $s7,0x44($sp) -/* d100: 3c178009 */ lui $s7,%hi(var80094ae0) -/* d104: 26f74ae0 */ addiu $s7,$s7,%lo(var80094ae0) -/* d108: 8eee0000 */ lw $t6,0x0($s7) -/* d10c: afb40038 */ sw $s4,0x38($sp) -/* d110: afb30034 */ sw $s3,0x34($sp) -/* d114: afb00028 */ sw $s0,0x28($sp) -/* d118: 00c08025 */ or $s0,$a2,$zero -/* d11c: 00809825 */ or $s3,$a0,$zero -/* d120: 00a0a025 */ or $s4,$a1,$zero -/* d124: afbf004c */ sw $ra,0x4c($sp) -/* d128: afbe0048 */ sw $s8,0x48($sp) -/* d12c: afb60040 */ sw $s6,0x40($sp) -/* d130: afb5003c */ sw $s5,0x3c($sp) -/* d134: afb20030 */ sw $s2,0x30($sp) -/* d138: afb1002c */ sw $s1,0x2c($sp) -/* d13c: 11c00003 */ beqz $t6,.L0000d14c -/* d140: afa70064 */ sw $a3,0x64($sp) -/* d144: 0c0034d4 */ jal func0000d350 -/* d148: 00000000 */ nop -.L0000d14c: -/* d14c: 3c010008 */ lui $at,0x8 -/* d150: 0201082b */ sltu $at,$s0,$at -/* d154: 10200005 */ beqz $at,.L0000d16c -/* d158: 02602025 */ or $a0,$s3,$zero -/* d15c: 320f3fff */ andi $t7,$s0,0x3fff -/* d160: 0010f382 */ srl $s8,$s0,0xe -/* d164: 10000003 */ b .L0000d174 -/* d168: afaf0050 */ sw $t7,0x50($sp) -.L0000d16c: -/* d16c: 0000f025 */ or $s8,$zero,$zero -/* d170: afb00050 */ sw $s0,0x50($sp) -.L0000d174: -/* d174: 0c013920 */ jal osInvalDCache -/* d178: 02002825 */ or $a1,$s0,$zero -/* d17c: 13c0001b */ beqz $s8,.L0000d1ec -/* d180: 00009025 */ or $s2,$zero,$zero -/* d184: 3c108009 */ lui $s0,%hi(var80094de8) -/* d188: 3c118009 */ lui $s1,%hi(var80094ae8) -/* d18c: 3c168009 */ lui $s6,%hi(var80094e88) -/* d190: 26d64e88 */ addiu $s6,$s6,%lo(var80094e88) -/* d194: 26314ae8 */ addiu $s1,$s1,%lo(var80094ae8) -/* d198: 26104de8 */ addiu $s0,$s0,%lo(var80094de8) -/* d19c: 24150001 */ addiu $s5,$zero,0x1 -.L0000d1a0: -/* d1a0: a2150000 */ sb $s5,0x0($s0) -/* d1a4: 8ee20000 */ lw $v0,0x0($s7) -/* d1a8: 24194000 */ addiu $t9,$zero,0x4000 -/* d1ac: afb90014 */ sw $t9,0x14($sp) -/* d1b0: 24580001 */ addiu $t8,$v0,0x1 -/* d1b4: aef80000 */ sw $t8,0x0($s7) -/* d1b8: 02202025 */ or $a0,$s1,$zero -/* d1bc: 8fa50064 */ lw $a1,0x64($sp) -/* d1c0: 00003025 */ or $a2,$zero,$zero -/* d1c4: 02803825 */ or $a3,$s4,$zero -/* d1c8: afb30010 */ sw $s3,0x10($sp) -/* d1cc: 0c01394c */ jal osPiStartDma -/* d1d0: afb60018 */ sw $s6,0x18($sp) -/* d1d4: 26520001 */ addiu $s2,$s2,0x1 -/* d1d8: 26100001 */ addiu $s0,$s0,0x1 -/* d1dc: 26310018 */ addiu $s1,$s1,0x18 -/* d1e0: 26944000 */ addiu $s4,$s4,0x4000 -/* d1e4: 165effee */ bne $s2,$s8,.L0000d1a0 -/* d1e8: 26734000 */ addiu $s3,$s3,0x4000 -.L0000d1ec: -/* d1ec: 8fa30050 */ lw $v1,0x50($sp) -/* d1f0: 3c168009 */ lui $s6,%hi(var80094e88) -/* d1f4: 26d64e88 */ addiu $s6,$s6,%lo(var80094e88) -/* d1f8: 10600014 */ beqz $v1,.L0000d24c -/* d1fc: 24150001 */ addiu $s5,$zero,0x1 -/* d200: 3c018009 */ lui $at,%hi(var80094de8) -/* d204: 00320821 */ addu $at,$at,$s2 -/* d208: a0354de8 */ sb $s5,%lo(var80094de8)($at) -/* d20c: 8ee20000 */ lw $v0,0x0($s7) -/* d210: 00124880 */ sll $t1,$s2,0x2 -/* d214: 01324823 */ subu $t1,$t1,$s2 -/* d218: 3c0a8009 */ lui $t2,%hi(var80094ae8) -/* d21c: 254a4ae8 */ addiu $t2,$t2,%lo(var80094ae8) -/* d220: 000948c0 */ sll $t1,$t1,0x3 -/* d224: 24480001 */ addiu $t0,$v0,0x1 -/* d228: aee80000 */ sw $t0,0x0($s7) -/* d22c: 012a2021 */ addu $a0,$t1,$t2 -/* d230: 8fa50064 */ lw $a1,0x64($sp) -/* d234: 00003025 */ or $a2,$zero,$zero -/* d238: 02803825 */ or $a3,$s4,$zero -/* d23c: afb30010 */ sw $s3,0x10($sp) -/* d240: afa30014 */ sw $v1,0x14($sp) -/* d244: 0c01394c */ jal osPiStartDma -/* d248: afb60018 */ sw $s6,0x18($sp) -.L0000d24c: -/* d24c: 8fbf004c */ lw $ra,0x4c($sp) -/* d250: 8fb00028 */ lw $s0,0x28($sp) -/* d254: 8fb1002c */ lw $s1,0x2c($sp) -/* d258: 8fb20030 */ lw $s2,0x30($sp) -/* d25c: 8fb30034 */ lw $s3,0x34($sp) -/* d260: 8fb40038 */ lw $s4,0x38($sp) -/* d264: 8fb5003c */ lw $s5,0x3c($sp) -/* d268: 8fb60040 */ lw $s6,0x40($sp) -/* d26c: 8fb70044 */ lw $s7,0x44($sp) -/* d270: 8fbe0048 */ lw $s8,0x48($sp) -/* d274: 03e00008 */ jr $ra -/* d278: 27bd0058 */ addiu $sp,$sp,0x58 -); +void dmaStart(void *memaddr, u32 romaddr, u32 len, bool priority) +{ + u32 numiterations; + u32 remainder; + s32 i; + + if (g_DmaNumSlotsBusy) { + dmaWait(); + } + + if (len < 0x4000 * ARRAYCOUNT(g_DmaIoMsgs)) { + numiterations = len / 0x4000; + remainder = len % 0x4000; + } else { + // DMA size is 0x80000 or more. It won't fit in the queue, so do it + // all in one call to osPiStartDma using the remainder variable. + numiterations = 0; + remainder = len; + } + + osInvalDCache(memaddr, len); + + for (i = 0; i != numiterations; i++) { + g_DmaSlotsBusy[i] = true; + g_DmaNumSlotsBusy++; + + osPiStartDma(&g_DmaIoMsgs[i], priority, 0, romaddr, memaddr, 0x4000, &g_DmaMesgQueue); + + romaddr += 0x4000; + memaddr = (void *)((u32)memaddr + 0x4000); + } + + if (remainder) { + g_DmaSlotsBusy[i] = true; + g_DmaNumSlotsBusy++; + + osPiStartDma(&g_DmaIoMsgs[i], priority, 0, romaddr, memaddr, remainder, &g_DmaMesgQueue); + } +} u32 xorDeadbeef(u32 value) { @@ -178,37 +108,37 @@ void dmaCheckPiracy(void *memaddr, u32 len) } } -void func0000d350(void) +void dmaWait(void) { u32 stack; - struct var80094ae8 *msg; + OSIoMesg *msg; s32 i; - while (var80094ae0) { - osRecvMesg(&var80094e88, (OSMesg) &msg, OS_MESG_BLOCK); + while (g_DmaNumSlotsBusy) { + osRecvMesg(&g_DmaMesgQueue, (OSMesg) &msg, OS_MESG_BLOCK); - for (i = 0; i < ARRAYCOUNT(var80094ae8); i++) { - if (&var80094ae8[i] == msg) { + for (i = 0; i < ARRAYCOUNT(g_DmaIoMsgs); i++) { + if (&g_DmaIoMsgs[i] == msg) { break; } } - var80094de8[i] = 0; - var80094ae0--; + g_DmaSlotsBusy[i] = false; + g_DmaNumSlotsBusy--; } } -void func0000d410(void *memaddr, void *romaddr, u32 len) +void dmaExec(void *memaddr, void *romaddr, u32 len) { - func0000d0f8(memaddr, romaddr, len, false); - func0000d350(); + dmaStart(memaddr, (u32) romaddr, len, false); + dmaWait(); dmaCheckPiracy(memaddr, len); } -void func0000d44c(void *memaddr, void *romaddr, u32 len) +void dmaExecHighPriority(void *memaddr, void *romaddr, u32 len) { - func0000d0f8(memaddr, romaddr, len, true); - func0000d350(); + dmaStart(memaddr, (u32) romaddr, len, true); + dmaWait(); dmaCheckPiracy(memaddr, len); } @@ -243,7 +173,7 @@ glabel func0000d488 /* d4ec: 3b06000f */ xori $a2,$t8,0xf /* d4f0: afa4001c */ sw $a0,0x1c($sp) /* d4f4: afa30018 */ sw $v1,0x18($sp) -/* d4f8: 0c003504 */ jal func0000d410 +/* d4f8: 0c003504 */ jal dmaExec /* d4fc: 01c02825 */ or $a1,$t6,$zero /* d500: 8fa30018 */ lw $v1,0x18($sp) /* d504: 8fa4001c */ lw $a0,0x1c($sp) diff --git a/src/lib/lib_0e9d0.c b/src/lib/lib_0e9d0.c index b99d47947..cf5d33211 100644 --- a/src/lib/lib_0e9d0.c +++ b/src/lib/lib_0e9d0.c @@ -785,18 +785,18 @@ glabel func0000eb2c /* eb68: ae200000 */ sw $zero,0x0($s1) /* eb6c: 00809025 */ or $s2,$a0,$zero /* eb70: 02002825 */ or $a1,$s0,$zero -/* eb74: 0c003504 */ jal func0000d410 +/* eb74: 0c003504 */ jal dmaExec /* eb78: 24060100 */ addiu $a2,$zero,0x100 /* eb7c: 8e580004 */ lw $t8,0x4($s2) /* eb80: 02402025 */ or $a0,$s2,$zero /* eb84: 24060100 */ addiu $a2,$zero,0x100 -/* eb88: 0c003504 */ jal func0000d410 +/* eb88: 0c003504 */ jal dmaExec /* eb8c: 02182821 */ addu $a1,$s0,$t8 /* eb90: 8e59000c */ lw $t9,0xc($s2) /* eb94: 02402025 */ or $a0,$s2,$zero /* eb98: 24060100 */ addiu $a2,$zero,0x100 /* eb9c: 0219a021 */ addu $s4,$s0,$t9 -/* eba0: 0c003504 */ jal func0000d410 +/* eba0: 0c003504 */ jal dmaExec /* eba4: 02802825 */ or $a1,$s4,$zero /* eba8: 864a000e */ lh $t2,0xe($s2) /* ebac: 3c098009 */ lui $t1,%hi(var80094ea0) @@ -820,7 +820,7 @@ glabel func0000eb2c /* ebf4: ae220000 */ sw $v0,0x0($s1) /* ebf8: 00402025 */ or $a0,$v0,$zero /* ebfc: 02802825 */ or $a1,$s4,$zero -/* ec00: 0c003504 */ jal func0000d410 +/* ec00: 0c003504 */ jal dmaExec /* ec04: 02603025 */ or $a2,$s3,$zero /* ec08: 3c098009 */ lui $t1,%hi(var80094ea0) /* ec0c: 8e2f0000 */ lw $t7,0x0($s1) @@ -949,7 +949,7 @@ glabel func0000ed68 /* edb8: 02402025 */ or $a0,$s2,$zero .L0000edbc: /* edbc: 02802825 */ or $a1,$s4,$zero -/* edc0: 0c003513 */ jal func0000d44c +/* edc0: 0c003513 */ jal dmaExecHighPriority /* edc4: 24060040 */ addiu $a2,$zero,0x40 /* edc8: 00008025 */ or $s0,$zero,$zero /* edcc: 00001825 */ or $v1,$zero,$zero @@ -964,7 +964,7 @@ glabel func0000ed68 /* edec: 020a8021 */ addu $s0,$s0,$t2 /* edf0: 02202025 */ or $a0,$s1,$zero /* edf4: 02802825 */ or $a1,$s4,$zero -/* edf8: 0c003513 */ jal func0000d44c +/* edf8: 0c003513 */ jal dmaExecHighPriority /* edfc: 24060040 */ addiu $a2,$zero,0x40 /* ee00: 00002025 */ or $a0,$zero,$zero /* ee04: 00001025 */ or $v0,$zero,$zero @@ -1028,7 +1028,7 @@ glabel func0000ee88 /* eed8: 02402025 */ or $a0,$s2,$zero .L0000eedc: /* eedc: 02802825 */ or $a1,$s4,$zero -/* eee0: 0c003513 */ jal func0000d44c +/* eee0: 0c003513 */ jal dmaExecHighPriority /* eee4: 24060040 */ addiu $a2,$zero,0x40 /* eee8: 00008025 */ or $s0,$zero,$zero /* eeec: 00001825 */ or $v1,$zero,$zero @@ -1043,7 +1043,7 @@ glabel func0000ee88 /* ef0c: 020a8021 */ addu $s0,$s0,$t2 /* ef10: 02202025 */ or $a0,$s1,$zero /* ef14: 02802825 */ or $a1,$s4,$zero -/* ef18: 0c003513 */ jal func0000d44c +/* ef18: 0c003513 */ jal dmaExecHighPriority /* ef1c: 24060040 */ addiu $a2,$zero,0x40 /* ef20: 00002025 */ or $a0,$zero,$zero /* ef24: 00001025 */ or $v0,$zero,$zero @@ -1107,7 +1107,7 @@ glabel func0000efa8 /* eff8: 02402025 */ or $a0,$s2,$zero .L0000effc: /* effc: 02802825 */ or $a1,$s4,$zero -/* f000: 0c003513 */ jal func0000d44c +/* f000: 0c003513 */ jal dmaExecHighPriority /* f004: 24060140 */ addiu $a2,$zero,0x140 /* f008: 00008025 */ or $s0,$zero,$zero /* f00c: 00001825 */ or $v1,$zero,$zero @@ -1122,7 +1122,7 @@ glabel func0000efa8 /* f02c: 020a8021 */ addu $s0,$s0,$t2 /* f030: 02202025 */ or $a0,$s1,$zero /* f034: 02802825 */ or $a1,$s4,$zero -/* f038: 0c003513 */ jal func0000d44c +/* f038: 0c003513 */ jal dmaExecHighPriority /* f03c: 24060140 */ addiu $a2,$zero,0x140 /* f040: 00002025 */ or $a0,$zero,$zero /* f044: 00001025 */ or $v0,$zero,$zero @@ -1195,7 +1195,7 @@ glabel func0000f0d4 /* f134: 02402025 */ or $a0,$s2,$zero .L0000f138: /* f138: 02802825 */ or $a1,$s4,$zero -/* f13c: 0c003513 */ jal func0000d44c +/* f13c: 0c003513 */ jal dmaExecHighPriority /* f140: 24060040 */ addiu $a2,$zero,0x40 /* f144: 00008025 */ or $s0,$zero,$zero /* f148: 00001825 */ or $v1,$zero,$zero @@ -1210,7 +1210,7 @@ glabel func0000f0d4 /* f168: 020a8021 */ addu $s0,$s0,$t2 /* f16c: 02202025 */ or $a0,$s1,$zero /* f170: 02802825 */ or $a1,$s4,$zero -/* f174: 0c003513 */ jal func0000d44c +/* f174: 0c003513 */ jal dmaExecHighPriority /* f178: 24060040 */ addiu $a2,$zero,0x40 /* f17c: 00002025 */ or $a0,$zero,$zero /* f180: 00001025 */ or $v0,$zero,$zero @@ -1285,7 +1285,7 @@ glabel func0000f228 /* f278: 02402025 */ or $a0,$s2,$zero .L0000f27c: /* f27c: 02802825 */ or $a1,$s4,$zero -/* f280: 0c003513 */ jal func0000d44c +/* f280: 0c003513 */ jal dmaExecHighPriority /* f284: 24060040 */ addiu $a2,$zero,0x40 /* f288: 00008025 */ or $s0,$zero,$zero /* f28c: 00001825 */ or $v1,$zero,$zero @@ -1300,7 +1300,7 @@ glabel func0000f228 /* f2ac: 020a8021 */ addu $s0,$s0,$t2 /* f2b0: 02202025 */ or $a0,$s1,$zero /* f2b4: 02802825 */ or $a1,$s4,$zero -/* f2b8: 0c003513 */ jal func0000d44c +/* f2b8: 0c003513 */ jal dmaExecHighPriority /* f2bc: 24060040 */ addiu $a2,$zero,0x40 /* f2c0: 00002025 */ or $a0,$zero,$zero /* f2c4: 00001025 */ or $v0,$zero,$zero @@ -1524,7 +1524,7 @@ glabel func0000f49c /* f5c4: afab0024 */ sw $t3,0x24($sp) /* f5c8: a7a900aa */ sh $t1,0xaa($sp) /* f5cc: 24060040 */ addiu $a2,$zero,0x40 -/* f5d0: 0c003513 */ jal func0000d44c +/* f5d0: 0c003513 */ jal dmaExecHighPriority /* f5d4: 30f1ffff */ andi $s1,$a3,0xffff /* f5d8: 8e040000 */ lw $a0,0x0($s0) /* f5dc: 0c003b5a */ jal func0000ed68 @@ -1784,7 +1784,7 @@ glabel func0000f804 /* f96c: 00408825 */ or $s1,$v0,$zero /* f970: 24a5bf30 */ addiu $a1,$a1,%lo(_seqctlSegmentRomStart) /* f974: 00402025 */ or $a0,$v0,$zero -/* f978: 0c003504 */ jal func0000d410 +/* f978: 0c003504 */ jal dmaExec /* f97c: 02003025 */ or $a2,$s0,$zero /* f980: 3c0500d0 */ lui $a1,%hi(_seqtblSegmentRomStart) /* f984: 24a55f90 */ addiu $a1,$a1,%lo(_seqtblSegmentRomStart) @@ -1808,7 +1808,7 @@ glabel func0000f804 /* f9cc: ae020000 */ sw $v0,0x0($s0) /* f9d0: 02202825 */ or $a1,$s1,$zero /* f9d4: 00402025 */ or $a0,$v0,$zero -/* f9d8: 0c003504 */ jal func0000d410 +/* f9d8: 0c003504 */ jal dmaExec /* f9dc: 24060010 */ addiu $a2,$zero,0x10 /* f9e0: 8e0d0000 */ lw $t5,0x0($s0) /* f9e4: 3c068009 */ lui $a2,%hi(var800951f0) @@ -1829,7 +1829,7 @@ glabel func0000f804 /* fa20: 00c17824 */ and $t7,$a2,$at /* fa24: 01e03025 */ or $a2,$t7,$zero /* fa28: 00402025 */ or $a0,$v0,$zero -/* fa2c: 0c003504 */ jal func0000d410 +/* fa2c: 0c003504 */ jal dmaExec /* fa30: 02202825 */ or $a1,$s1,$zero /* fa34: 8e040000 */ lw $a0,0x0($s0) /* fa38: 00001825 */ or $v1,$zero,$zero @@ -2040,7 +2040,7 @@ glabel func0000fc48 /* fd04: 00e36021 */ addu $t4,$a3,$v1 /* fd08: 01862023 */ subu $a0,$t4,$a2 /* fd0c: afa40028 */ sw $a0,0x28($sp) -/* fd10: 0c003504 */ jal func0000d410 +/* fd10: 0c003504 */ jal dmaExec /* fd14: afa7143c */ sw $a3,0x143c($sp) /* fd18: 8fa40028 */ lw $a0,0x28($sp) /* fd1c: 8fa5143c */ lw $a1,0x143c($sp) diff --git a/src/lib/lib_233c0.c b/src/lib/lib_233c0.c index 075bead75..b31469569 100644 --- a/src/lib/lib_233c0.c +++ b/src/lib/lib_233c0.c @@ -49,7 +49,7 @@ glabel func000233c0 /* 233fc: 24a5d1a0 */ addiu $a1,$a1,%lo(_animationsTableRomStart) /* 23400: 00402025 */ or $a0,$v0,$zero /* 23404: 02003025 */ or $a2,$s0,$zero -/* 23408: 0c003504 */ jal func0000d410 +/* 23408: 0c003504 */ jal dmaExec /* 2340c: afa20020 */ sw $v0,0x20($sp) /* 23410: 8fa30020 */ lw $v1,0x20($sp) /* 23414: 3c04800a */ lui $a0,%hi(var8009a894) diff --git a/src/lib/main.c b/src/lib/main.c index 759daf28e..6bb6f8daa 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -351,7 +351,7 @@ glabel mainInit /* d764: 256bfe00 */ addiu $t3,$t3,%lo(_accessingpakSegmentRomEnd) /* d768: 39c4003f */ xori $a0,$t6,0x3f /* d76c: 00808025 */ or $s0,$a0,$zero -/* d770: 0c003504 */ jal func0000d410 +/* d770: 0c003504 */ jal dmaExec /* d774: 01653023 */ subu $a2,$t3,$a1 /* d778: 1000000e */ b .L0000d7b4 /* d77c: 3c01ffff */ lui $at,0xffff @@ -366,7 +366,7 @@ glabel mainInit /* d79c: 25eff550 */ addiu $t7,$t7,%lo(_copyrightSegmentRomEnd) /* d7a0: 3b04003f */ xori $a0,$t8,0x3f /* d7a4: 00808025 */ or $s0,$a0,$zero -/* d7a8: 0c003504 */ jal func0000d410 +/* d7a8: 0c003504 */ jal dmaExec /* d7ac: 01e53023 */ subu $a2,$t7,$a1 /* d7b0: 3c01ffff */ lui $at,0xffff .L0000d7b4: @@ -676,9 +676,9 @@ const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400"; // // the texture format can be changed then copied into the framebuffer in // // the correct format. // if (g_DoBootPakMenu) { -// func0000d410(fb, &_accessingpakSegmentRomStart, &_accessingpakSegmentRomEnd - &_accessingpakSegmentRomStart); +// dmaExec(fb, &_accessingpakSegmentRomStart, &_accessingpakSegmentRomEnd - &_accessingpakSegmentRomStart); // } else { -// func0000d410(fb, &_copyrightSegmentRomStart, &_copyrightSegmentRomEnd - &_copyrightSegmentRomStart); +// dmaExec(fb, &_copyrightSegmentRomStart, &_copyrightSegmentRomEnd - &_copyrightSegmentRomStart); // } // // // Prepare space for the texture immediately before the framebuffer