diff --git a/README.md b/README.md index 4023a291..95a07fca 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ This repo contains a work-in-progress decompilation of Diddy Kong Racing for the Currently, only the US 1.0 version (SHA1 = 0cb115d8716dbbc2922fda38e533b9fe63bb9670) of the game is supported. US 1.1, EU 1.0, EU 1.1, and JP are not supported at this time. -As of July 4, 2024, this is our current score: +As of February 14, 2025, this is our current score:     Decomp progress: 67.74% -    Documentation progress: 49.32% +    Documentation progress: 49.72% --- @@ -126,15 +126,15 @@ s32 is_drumstick_unlocked(void) { ``` -As of July 4th, 2024, this is our current score: +As of February 14th, 2025, this is our current score: ``` ============================================= ADVENTURE ONE (ASM -> C Decompilation) - --- 67.74% Complete (70.25% NON_MATCHING) --- + --- 67.74% Complete (70.43% NON_MATCHING) --- # Decompiled functions: 1695 # GLOBAL_ASM remaining: 150 - # NON_MATCHING functions: 14 - # NON_EQUIVALENT WIP functions: 49 + # NON_MATCHING functions: 16 + # NON_EQUIVALENT WIP functions: 47 ---------------- Game Status ---------------- Balloons: 32/47, Keys: 3/4, Trophies: 3/5 T.T. Amulets: 3/4, Wizpig Amulets: 3/4 @@ -142,14 +142,14 @@ As of July 4th, 2024, this is our current score: We are racing in Greenwood Village. (Lap 3/3) ============================================= ADVENTURE TWO (Cleanup & Documentation) - -------------- 49.32% Complete -------------- - # Documented functions: 1080 - # Undocumented remaining: 488 + -------------- 49.72% Complete -------------- + # Documented functions: 1091 + # Undocumented remaining: 477 ---------------- Game Status ---------------- Balloons: 24/47, Keys: 3/4, Trophies: 2/5 T.T. Amulets: 2/4, Wizpig Amulets: 2/4 --------------------------------------------- - We are racing in Pirate Lagoon. (Lap 2/3) + We are racing in Pirate Lagoon. (Lap 3/3) ============================================= ``` diff --git a/asm/get_stack_pointer.s b/asm/get_stack_pointer.s index bb632142..0017b303 100644 --- a/asm/get_stack_pointer.s +++ b/asm/get_stack_pointer.s @@ -9,7 +9,7 @@ .set noreorder # dont insert nops after branches .set gp=64 # 64-bit instructions are used -glabel get_stack_pointer +glabel stack_pointer jr $ra move $v0, $sp \ No newline at end of file diff --git a/asm/math_util/disable_interrupts.s b/asm/math_util/disable_interrupts.s index 5a336c38..7446d4a1 100644 --- a/asm/math_util/disable_interrupts.s +++ b/asm/math_util/disable_interrupts.s @@ -1,4 +1,4 @@ -glabel disable_interrupts /* Official name: disableInterrupts */ +glabel interrupts_disable /* Official name: disableInterrupts */ /* 070110 8006F510 3C08800E */ lui $t0, %hi(gIntDisFlag) # $t0, 0x800e /* 070114 8006F514 8108D430 */ lb $t0, %lo(gIntDisFlag)($t0) /* 070118 8006F518 11000006 */ beqz $t0, .L8006F534 diff --git a/asm/math_util/enable_interrupts.s b/asm/math_util/enable_interrupts.s index 590078a8..8a2ab4d5 100644 --- a/asm/math_util/enable_interrupts.s +++ b/asm/math_util/enable_interrupts.s @@ -1,4 +1,4 @@ -glabel enable_interrupts /* Official name: enableInterrupts */ +glabel interrupts_enable /* Official name: enableInterrupts */ /* 07013C 8006F53C 3C08800E */ lui $t0, %hi(gIntDisFlag) # $t0, 0x800e /* 070140 8006F540 8108D430 */ lb $t0, %lo(gIntDisFlag)($t0) /* 070144 8006F544 11000005 */ beqz $t0, .L8006F55C # Identical to __osRestoreInt below this line diff --git a/asm/non_matchings/audio_spatial/func_80008040.s b/asm/non_matchings/audio_spatial/func_80008040.s index 27eb604e..3d960d9c 100644 --- a/asm/non_matchings/audio_spatial/func_80008040.s +++ b/asm/non_matchings/audio_spatial/func_80008040.s @@ -8,20 +8,20 @@ glabel func_80008040 /* 008C58 80008058 00003025 */ move $a2, $zero /* 008C5C 8000805C 3C0500FF */ lui $a1, (0x00FFFFFF >> 16) # lui $a1, 0xff /* 008C60 80008060 34A5FFFF */ ori $a1, (0x00FFFFFF & 0xFFFF) # ori $a1, $a1, 0xffff -/* 008C64 80008064 0C01C327 */ jal allocate_from_main_pool_safe +/* 008C64 80008064 0C01C327 */ jal mempool_alloc_safe /* 008C68 80008068 240405A0 */ li $a0, 1440 /* 008C6C 8000806C 3C068012 */ lui $a2, %hi(gSoundMaskHeap) # $a2, 0x8012 /* 008C70 80008070 24C69C48 */ addiu $a2, %lo(gSoundMaskHeap) # addiu $a2, $a2, -0x63b8 /* 008C74 80008074 3C0500FF */ lui $a1, (0x00FFFFFF >> 16) # lui $a1, 0xff /* 008C78 80008078 ACC20000 */ sw $v0, ($a2) /* 008C7C 8000807C 34A5FFFF */ ori $a1, (0x00FFFFFF & 0xFFFF) # ori $a1, $a1, 0xffff -/* 008C80 80008080 0C01C327 */ jal allocate_from_main_pool_safe +/* 008C80 80008080 0C01C327 */ jal mempool_alloc_safe /* 008C84 80008084 240400A0 */ li $a0, 160 /* 008C88 80008088 3C018012 */ lui $at, %hi(gSoundMaskHeapFree) # $at, 0x8012 /* 008C8C 8000808C 3C0500FF */ lui $a1, (0x00FFFFFF >> 16) # lui $a1, 0xff /* 008C90 80008090 AC229C50 */ sw $v0, %lo(gSoundMaskHeapFree)($at) /* 008C94 80008094 34A5FFFF */ ori $a1, (0x00FFFFFF & 0xFFFF) # ori $a1, $a1, 0xffff -/* 008C98 80008098 0C01C327 */ jal allocate_from_main_pool_safe +/* 008C98 80008098 0C01C327 */ jal mempool_alloc_safe /* 008C9C 8000809C 240400A0 */ li $a0, 160 /* 008CA0 800080A0 3C018012 */ lui $at, %hi(gSoundMaskHeapUsed) # $at, 0x8012 /* 008CA4 800080A4 AC229C44 */ sw $v0, %lo(gSoundMaskHeapUsed)($at) diff --git a/asm/non_matchings/audio_vehicle/func_80004B40.s b/asm/non_matchings/audio_vehicle/func_80004B40.s index 8af6a50a..9b091967 100644 --- a/asm/non_matchings/audio_vehicle/func_80004B40.s +++ b/asm/non_matchings/audio_vehicle/func_80004B40.s @@ -51,7 +51,7 @@ glabel func_80004B40 /* 0057E4 80004BE4 0019C880 */ sll $t9, $t9, 2 /* 0057E8 80004BE8 02402825 */ move $a1, $s2 /* 0057EC 80004BEC 2404004C */ li $a0, 76 -/* 0057F0 80004BF0 0C01C327 */ jal allocate_from_main_pool_safe +/* 0057F0 80004BF0 0C01C327 */ jal mempool_alloc_safe /* 0057F4 80004BF4 01F98821 */ addu $s1, $t7, $t9 /* 0057F8 80004BF8 0040A825 */ move $s5, $v0 /* 0057FC 80004BFC 24040027 */ li $a0, 39 @@ -60,7 +60,7 @@ glabel func_80004B40 /* 005808 80004C08 0C01DB9A */ jal load_asset_to_address /* 00580C 80004C0C 2407004C */ li $a3, 76 /* 005810 80004C10 240400E0 */ li $a0, 224 -/* 005814 80004C14 0C01C327 */ jal allocate_from_main_pool_safe +/* 005814 80004C14 0C01C327 */ jal mempool_alloc_safe /* 005818 80004C18 02402825 */ move $a1, $s2 /* 00581C 80004C1C AFA20044 */ sw $v0, 0x44($sp) /* 005820 80004C20 00401825 */ move $v1, $v0 @@ -364,9 +364,9 @@ glabel func_80004B40 /* 005C8C 8000508C E4520054 */ swc1 $f18, 0x54($v0) .L80005090: /* 005C90 80005090 8FA4003C */ lw $a0, 0x3c($sp) -/* 005C94 80005094 0C01C450 */ jal free_from_memory_pool +/* 005C94 80005094 0C01C450 */ jal mempool_free /* 005C98 80005098 00000000 */ nop -/* 005C9C 8000509C 0C01C450 */ jal free_from_memory_pool +/* 005C9C 8000509C 0C01C450 */ jal mempool_free /* 005CA0 800050A0 02A02025 */ move $a0, $s5 /* 005CA4 800050A4 8FBF0034 */ lw $ra, 0x34($sp) /* 005CA8 800050A8 8FA20044 */ lw $v0, 0x44($sp) diff --git a/asm/non_matchings/camera/func_80066CDC.s b/asm/non_matchings/camera/func_80066CDC.s index ce2d48c9..28cab89f 100644 --- a/asm/non_matchings/camera/func_80066CDC.s +++ b/asm/non_matchings/camera/func_80066CDC.s @@ -22,7 +22,7 @@ glabel func_80066CDC /* 06792C 80066D2C AFEF0000 */ sw $t7, ($ra) /* 067930 80066D30 00004825 */ move $t1, $zero .L80066D34: -/* 067934 80066D34 0C01E948 */ jal get_video_width_and_height_as_s32 +/* 067934 80066D34 0C01E948 */ jal fb_size /* 067938 80066D38 AFA90030 */ sw $t1, 0x30($sp) /* 06793C 80066D3C 8FA90030 */ lw $t1, 0x30($sp) /* 067940 80066D40 240B0034 */ li $t3, 52 diff --git a/asm/non_matchings/fade_transition/func_800C15D4.s b/asm/non_matchings/fade_transition/func_800C15D4.s index 0efa3b75..34d3125c 100644 --- a/asm/non_matchings/fade_transition/func_800C15D4.s +++ b/asm/non_matchings/fade_transition/func_800C15D4.s @@ -12,7 +12,7 @@ glabel func_800C15D4 /* 0C21FC 800C15FC E7B50010 */ swc1 $f21, 0x10($sp) /* 0C2200 800C1600 E7B40014 */ swc1 $f20, 0x14($sp) /* 0C2204 800C1604 34A500FF */ ori $a1, (0xFFFF00FF & 0xFFFF) # ori $a1, $a1, 0xff -/* 0C2208 800C1608 0C01C327 */ jal allocate_from_main_pool_safe +/* 0C2208 800C1608 0C01C327 */ jal mempool_alloc_safe /* 0C220C 800C160C 24040DA0 */ li $a0, 3488 /* 0C2210 800C1610 3C04800E */ lui $a0, %hi(sTransitionVtx) # $a0, 0x800e /* 0C2214 800C1614 3C05800E */ lui $a1, %hi(sTransitionTris) # $a1, 0x800e diff --git a/asm/non_matchings/game_ui/func_800AA600.s b/asm/non_matchings/game_ui/func_800AA600.s index d79321bd..56963098 100644 --- a/asm/non_matchings/game_ui/func_800AA600.s +++ b/asm/non_matchings/game_ui/func_800AA600.s @@ -305,7 +305,7 @@ glabel func_800AA600 /* 0AB65C 800AAA5C 24846CFC */ addiu $a0, %lo(gHUDCurrDisplayList) # addiu $a0, $a0, 0x6cfc /* 0AB660 800AAA60 27A50088 */ addiu $a1, $sp, 0x88 /* 0AB664 800AAA64 E7B20010 */ swc1 $f18, 0x10($sp) -/* 0AB668 800AAA68 0C01E340 */ jal render_texture_rectangle_scaled +/* 0AB668 800AAA68 0C01E340 */ jal texrect_draw_scaled /* 0AB66C 800AAA6C E7A80014 */ swc1 $f8, 0x14($sp) /* 0AB670 800AAA70 10000018 */ b .L800AAAD4 /* 0AB674 800AAA74 00000000 */ nop @@ -320,7 +320,7 @@ glabel func_800AA600 /* 0AB694 800AAA94 27A50088 */ addiu $a1, $sp, 0x88 /* 0AB698 800AAA98 00003025 */ move $a2, $zero /* 0AB69C 800AAA9C 00003825 */ move $a3, $zero -/* 0AB6A0 800AAAA0 0C01E2AE */ jal render_textured_rectangle +/* 0AB6A0 800AAAA0 0C01E2AE */ jal texrect_draw /* 0AB6A4 800AAAA4 AFA3001C */ sw $v1, 0x1c($sp) /* 0AB6A8 800AAAA8 1000000A */ b .L800AAAD4 /* 0AB6AC 800AAAAC 00000000 */ nop @@ -332,7 +332,7 @@ glabel func_800AA600 /* 0AB6C0 800AAAC0 AFAD0010 */ sw $t5, 0x10($sp) /* 0AB6C4 800AAAC4 24846CFC */ addiu $a0, %lo(gHUDCurrDisplayList) # addiu $a0, $a0, 0x6cfc /* 0AB6C8 800AAAC8 AFAE0018 */ sw $t6, 0x18($sp) -/* 0AB6CC 800AAACC 0C01E2AE */ jal render_textured_rectangle +/* 0AB6CC 800AAACC 0C01E2AE */ jal texrect_draw /* 0AB6D0 800AAAD0 AFA3001C */ sw $v1, 0x1c($sp) .L800AAAD4: /* 0AB6D4 800AAAD4 3C0F8000 */ lui $t7, %hi(osTvType) # $t7, 0x8000 @@ -387,7 +387,7 @@ glabel func_800AA600 /* 0AB790 800AAB90 AFB80018 */ sw $t8, 0x18($sp) /* 0AB794 800AAB94 E7A00010 */ swc1 $f0, 0x10($sp) /* 0AB798 800AAB98 46204420 */ cvt.s.d $f16, $f8 -/* 0AB79C 800AAB9C 0C01E340 */ jal render_texture_rectangle_scaled +/* 0AB79C 800AAB9C 0C01E340 */ jal texrect_draw_scaled /* 0AB7A0 800AABA0 E7B00014 */ swc1 $f16, 0x14($sp) /* 0AB7A4 800AABA4 100000D7 */ b .L800AAF04 /* 0AB7A8 800AABA8 86080006 */ lh $t0, 6($s0) @@ -480,7 +480,7 @@ glabel func_800AA600 /* 0AB8FC 800AACFC AFAB0014 */ sw $t3, 0x14($sp) /* 0AB900 800AAD00 27A50058 */ addiu $a1, $sp, 0x58 /* 0AB904 800AAD04 00003025 */ move $a2, $zero -/* 0AB908 800AAD08 0C01E2AE */ jal render_textured_rectangle +/* 0AB908 800AAD08 0C01E2AE */ jal texrect_draw /* 0AB90C 800AAD0C 00003825 */ move $a3, $zero /* 0AB910 800AAD10 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 /* 0AB914 800AAD14 0C01ECF4 */ jal reset_render_settings @@ -513,7 +513,7 @@ glabel func_800AA600 /* 0AB97C 800AAD7C AFAF001C */ sw $t7, 0x1c($sp) /* 0AB980 800AAD80 AFAE0018 */ sw $t6, 0x18($sp) /* 0AB984 800AAD84 E7A00014 */ swc1 $f0, 0x14($sp) -/* 0AB988 800AAD88 0C01E340 */ jal render_texture_rectangle_scaled +/* 0AB988 800AAD88 0C01E340 */ jal texrect_draw_scaled /* 0AB98C 800AAD8C E7A00010 */ swc1 $f0, 0x10($sp) /* 0AB990 800AAD90 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 /* 0AB994 800AAD94 0C01ECF4 */ jal reset_render_settings diff --git a/asm/non_matchings/menu/func_8007FFEC.s b/asm/non_matchings/menu/func_8007FFEC.s index 017c5af5..1ddcd7fe 100644 --- a/asm/non_matchings/menu/func_8007FFEC.s +++ b/asm/non_matchings/menu/func_8007FFEC.s @@ -33,7 +33,7 @@ glabel func_8007FFEC /* 080C64 80080064 AFB80020 */ sw $t8, 0x20($sp) /* 080C68 80080068 AFAC0028 */ sw $t4, 0x28($sp) /* 080C6C 8008006C AFAD0024 */ sw $t5, 0x24($sp) -/* 080C70 80080070 0C01C327 */ jal allocate_from_main_pool_safe +/* 080C70 80080070 0C01C327 */ jal mempool_alloc_safe /* 080C74 80080074 2405FFFF */ li $a1, -1 /* 080C78 80080078 8FA30020 */ lw $v1, 0x20($sp) /* 080C7C 8008007C 3C07800E */ lui $a3, %hi(gWoodPanelTriangles) # $a3, 0x800e diff --git a/asm/non_matchings/menu/func_80084854.s b/asm/non_matchings/menu/func_80084854.s index c25846d6..77884264 100644 --- a/asm/non_matchings/menu/func_80084854.s +++ b/asm/non_matchings/menu/func_80084854.s @@ -174,7 +174,7 @@ glabel func_80084854 /* 0856E8 80084AE8 AFAD0010 */ sw $t5, 0x10($sp) /* 0856EC 80084AEC 02002825 */ move $a1, $s0 /* 0856F0 80084AF0 02402025 */ move $a0, $s2 -/* 0856F4 80084AF4 0C01E2AE */ jal render_textured_rectangle +/* 0856F4 80084AF4 0C01E2AE */ jal texrect_draw /* 0856F8 80084AF8 24070078 */ li $a3, 120 /* 0856FC 80084AFC 3C06800E */ lui $a2, %hi(gMusicVolumeSliderValue) # $a2, 0x800e /* 085700 80084B00 8CC6FAC4 */ lw $a2, %lo(gMusicVolumeSliderValue)($a2) @@ -190,7 +190,7 @@ glabel func_80084854 /* 085728 80084B28 AFA80010 */ sw $t0, 0x10($sp) /* 08572C 80084B2C 02402025 */ move $a0, $s2 /* 085730 80084B30 02002825 */ move $a1, $s0 -/* 085734 80084B34 0C01E2AE */ jal render_textured_rectangle +/* 085734 80084B34 0C01E2AE */ jal texrect_draw /* 085738 80084B38 240700A0 */ li $a3, 160 /* 08573C 80084B3C 0C01ECF4 */ jal reset_render_settings /* 085740 80084B40 02402025 */ move $a0, $s2 diff --git a/asm/non_matchings/menu/func_80092188.s b/asm/non_matchings/menu/func_80092188.s index 36a3e4a7..abc16b0b 100644 --- a/asm/non_matchings/menu/func_80092188.s +++ b/asm/non_matchings/menu/func_80092188.s @@ -572,7 +572,7 @@ glabel L8009287C /* 093594 80092994 3C028012 */ lui $v0, %hi(gTrackSelectCursorX) # $v0, 0x8012 /* 093598 80092998 3C01800E */ lui $at, %hi(gMenuDelay) # $at, 0x800e /* 09359C 8009299C AC3FF47C */ sw $ra, %lo(gMenuDelay)($at) -/* 0935A0 800929A0 0C01E2AB */ jal set_background_draw_function +/* 0935A0 800929A0 0C01E2AB */ jal bgdraw_set_func /* 0935A4 800929A4 00002025 */ move $a0, $zero /* 0935A8 800929A8 3C01800E */ lui $at, %hi(gIsInTracksMenu) # $at, 0x800e /* 0935AC 800929AC 0C030060 */ jal disable_new_screen_transitions diff --git a/asm/non_matchings/menu/menu_credits_loop.s b/asm/non_matchings/menu/menu_credits_loop.s index 23c1a1ad..73be073c 100644 --- a/asm/non_matchings/menu/menu_credits_loop.s +++ b/asm/non_matchings/menu/menu_credits_loop.s @@ -85,7 +85,7 @@ glabel menu_credits_loop /* 09C050 8009B450 0014C080 */ sll $t8, $s4, 2 /* 09C054 8009B454 0314C021 */ addu $t8, $t8, $s4 /* 09C058 8009B458 8C750000 */ lw $s5, ($v1) -/* 09C05C 8009B45C 0C01E948 */ jal get_video_width_and_height_as_s32 +/* 09C05C 8009B45C 0C01E948 */ jal fb_size /* 09C060 8009B460 27140048 */ addiu $s4, $t8, 0x48 /* 09C064 8009B464 00029443 */ sra $s2, $v0, 0x11 /* 09C068 8009B468 32597FFF */ andi $t9, $s2, 0x7fff @@ -127,7 +127,7 @@ glabel menu_credits_loop /* 09C0F4 8009B4F4 00006812 */ mflo $t5 /* 09C0F8 8009B4F8 000D7403 */ sra $t6, $t5, 0x10 /* 09C0FC 8009B4FC 01D23821 */ addu $a3, $t6, $s2 -/* 09C100 8009B500 0C01E2AE */ jal render_textured_rectangle +/* 09C100 8009B500 0C01E2AE */ jal texrect_draw /* 09C104 8009B504 24E7FFEC */ addiu $a3, $a3, -0x14 /* 09C108 8009B508 26100004 */ addiu $s0, $s0, 4 /* 09C10C 8009B50C 1616FFDE */ bne $s0, $s6, .L8009B488 diff --git a/asm/non_matchings/menu/menu_track_select_init.s b/asm/non_matchings/menu/menu_track_select_init.s index db3c8b7e..ff39f671 100644 --- a/asm/non_matchings/menu/menu_track_select_init.s +++ b/asm/non_matchings/menu/menu_track_select_init.s @@ -35,7 +35,7 @@ glabel menu_track_select_init /* 08F424 8008E824 AC200418 */ sw $zero, %lo(gTracksMenuAdventureHighlightIndex)($at) /* 08F428 8008E828 AC600000 */ sw $zero, ($v1) .L8008E82C: -/* 08F42C 8008E82C 0C01E948 */ jal get_video_width_and_height_as_s32 +/* 08F42C 8008E82C 0C01E948 */ jal fb_size /* 08F430 8008E830 00000000 */ nop /* 08F434 8008E834 3C068012 */ lui $a2, %hi(gTrackSelectViewPortX) # $a2, 0x8012 /* 08F438 8008E838 24C6647C */ addiu $a2, %lo(gTrackSelectViewPortX) # addiu $a2, $a2, 0x647c @@ -97,7 +97,7 @@ glabel menu_track_select_init /* 08F518 8008E918 00000000 */ nop /* 08F51C 8008E91C 24040032 */ li $a0, 50 /* 08F520 8008E920 24050069 */ li $a1, 105 -/* 08F524 8008E924 0C01DED7 */ jal set_background_fill_colour +/* 08F524 8008E924 0C01DED7 */ jal bgdraw_fillcolour /* 08F528 8008E928 240600DF */ li $a2, 223 /* 08F52C 8008E92C 3C11800E */ lui $s1, %hi(gTracksMenuBgTextureIndices) # $s1, 0x800e /* 08F530 8008E930 3C168012 */ lui $s6, %hi(gMenuAssets) # $s6, 0x8012 @@ -147,7 +147,7 @@ glabel menu_track_select_init /* 08F5CC 8008E9CC 26310006 */ addiu $s1, $s1, 6 /* 08F5D0 8008E9D0 3C05FFFF */ lui $a1, (0xFFFF00FF >> 16) # lui $a1, 0xffff /* 08F5D4 8008E9D4 34A500FF */ ori $a1, (0xFFFF00FF & 0xFFFF) # ori $a1, $a1, 0xff -/* 08F5D8 8008E9D8 0C01C327 */ jal allocate_from_main_pool_safe +/* 08F5D8 8008E9D8 0C01C327 */ jal mempool_alloc_safe /* 08F5DC 8008E9DC 24040B40 */ li $a0, 2880 /* 08F5E0 8008E9E0 3C05800E */ lui $a1, %hi(gTrackSelectBgTriangles) # $a1, 0x800e /* 08F5E4 8008E9E4 24A50970 */ addiu $a1, %lo(gTrackSelectBgTriangles) # addiu $a1, $a1, 0x970 @@ -311,7 +311,7 @@ glabel menu_track_select_init /* 08F854 8008EC54 3C018012 */ lui $at, %hi(gTrackSelectVertsFlip) # $at, 0x8012 /* 08F858 8008EC58 3C048009 */ lui $a0, %hi(func_8008F618) # $a0, 0x8009 /* 08F85C 8008EC5C AC206924 */ sw $zero, %lo(gTrackSelectVertsFlip)($at) -/* 08F860 8008EC60 0C01E2AB */ jal set_background_draw_function +/* 08F860 8008EC60 0C01E2AB */ jal bgdraw_set_func /* 08F864 8008EC64 2484F618 */ addiu $a0, %lo(func_8008F618) # addiu $a0, $a0, -0x9e8 /* 08F868 8008EC68 8FC20000 */ lw $v0, ($fp) /* 08F86C 8008EC6C 00002025 */ move $a0, $zero diff --git a/asm/non_matchings/object_models/func_8006017C.s b/asm/non_matchings/object_models/func_8006017C.s index 9e6dc109..4dcd6b3d 100644 --- a/asm/non_matchings/object_models/func_8006017C.s +++ b/asm/non_matchings/object_models/func_8006017C.s @@ -50,17 +50,17 @@ glabel func_8006017C /* 060E34 80060234 2442000C */ addiu $v0, $v0, 0xc .L80060238: /* 060E38 80060238 001420C0 */ sll $a0, $s4, 3 -/* 060E3C 8006023C 0C01C344 */ jal allocate_from_main_pool +/* 060E3C 8006023C 0C01C344 */ jal mempool_alloc /* 060E40 80060240 02002825 */ move $a1, $s0 /* 060E44 80060244 1040019A */ beqz $v0, .L800608B0 /* 060E48 80060248 AE42000C */ sw $v0, 0xc($s2) /* 060E4C 8006024C 00142180 */ sll $a0, $s4, 6 -/* 060E50 80060250 0C01C344 */ jal allocate_from_main_pool +/* 060E50 80060250 0C01C344 */ jal mempool_alloc /* 060E54 80060254 02002825 */ move $a1, $s0 /* 060E58 80060258 14400006 */ bnez $v0, .L80060274 /* 060E5C 8006025C AE420010 */ sw $v0, 0x10($s2) /* 060E60 80060260 8E44000C */ lw $a0, 0xc($s2) -/* 060E64 80060264 0C01C450 */ jal free_from_memory_pool +/* 060E64 80060264 0C01C450 */ jal mempool_free /* 060E68 80060268 00000000 */ nop /* 060E6C 8006026C 10000190 */ b .L800608B0 /* 060E70 80060270 AE40000C */ sw $zero, 0xc($s2) diff --git a/asm/non_matchings/object_models/func_80060EA8.s b/asm/non_matchings/object_models/func_80060EA8.s index 132bd773..57f636bf 100644 --- a/asm/non_matchings/object_models/func_80060EA8.s +++ b/asm/non_matchings/object_models/func_80060EA8.s @@ -61,7 +61,7 @@ glabel func_80060EA8 /* 061B84 80060F84 0004C080 */ sll $t8, $a0, 2 /* 061B88 80060F88 0304C023 */ subu $t8, $t8, $a0 /* 061B8C 80060F8C 00182080 */ sll $a0, $t8, 2 -/* 061B90 80060F90 0C01C344 */ jal allocate_from_main_pool +/* 061B90 80060F90 0C01C344 */ jal mempool_alloc /* 061B94 80060F94 A7A70098 */ sh $a3, 0x98($sp) /* 061B98 80060F98 87A70098 */ lh $a3, 0x98($sp) /* 061B9C 80060F9C 8FBF00A4 */ lw $ra, 0xa4($sp) @@ -75,14 +75,14 @@ glabel func_80060EA8 /* 061BB8 80060FB8 3C05FF7F */ lui $a1, (0xFF7F7FFF >> 16) # lui $a1, 0xff7f /* 061BBC 80060FBC AFBF00A4 */ sw $ra, 0xa4($sp) /* 061BC0 80060FC0 34A57FFF */ ori $a1, (0xFF7F7FFF & 0xFFFF) # ori $a1, $a1, 0x7fff -/* 061BC4 80060FC4 0C01C344 */ jal allocate_from_main_pool +/* 061BC4 80060FC4 0C01C344 */ jal mempool_alloc /* 061BC8 80060FC8 00042040 */ sll $a0, $a0, 1 /* 061BCC 80060FCC 8FBF00A4 */ lw $ra, 0xa4($sp) /* 061BD0 80060FD0 240D000C */ li $t5, 12 /* 061BD4 80060FD4 14400006 */ bnez $v0, .L80060FF0 /* 061BD8 80060FD8 AFA200A0 */ sw $v0, 0xa0($sp) /* 061BDC 80060FDC 8FA400AC */ lw $a0, 0xac($sp) -/* 061BE0 80060FE0 0C01C450 */ jal free_from_memory_pool +/* 061BE0 80060FE0 0C01C450 */ jal mempool_free /* 061BE4 80060FE4 00000000 */ nop /* 061BE8 80060FE8 10000274 */ b .L800619BC /* 061BEC 80060FEC 24020001 */ li $v0, 1 @@ -245,17 +245,17 @@ glabel func_80060EA8 /* 061E44 80061244 0004C840 */ sll $t9, $a0, 1 /* 061E48 80061248 2412000A */ li $s2, 10 /* 061E4C 8006124C 03202025 */ move $a0, $t9 -/* 061E50 80061250 0C01C344 */ jal allocate_from_main_pool +/* 061E50 80061250 0C01C344 */ jal mempool_alloc /* 061E54 80061254 34A57FFF */ ori $a1, (0xFF7F7FFF & 0xFFFF) # ori $a1, $a1, 0x7fff /* 061E58 80061258 8FBF00A4 */ lw $ra, 0xa4($sp) /* 061E5C 8006125C 240D000C */ li $t5, 12 /* 061E60 80061260 14400009 */ bnez $v0, .L80061288 /* 061E64 80061264 0040B825 */ move $s7, $v0 /* 061E68 80061268 8FA400AC */ lw $a0, 0xac($sp) -/* 061E6C 8006126C 0C01C450 */ jal free_from_memory_pool +/* 061E6C 8006126C 0C01C450 */ jal mempool_free /* 061E70 80061270 00000000 */ nop /* 061E74 80061274 8FA400A0 */ lw $a0, 0xa0($sp) -/* 061E78 80061278 0C01C450 */ jal free_from_memory_pool +/* 061E78 80061278 0C01C450 */ jal mempool_free /* 061E7C 8006127C 00000000 */ nop /* 061E80 80061280 100001CE */ b .L800619BC /* 061E84 80061284 24020001 */ li $v0, 1 @@ -528,19 +528,19 @@ glabel func_80060EA8 /* 06223C 8006163C 3C05FF7F */ lui $a1, (0xFF7F7FFF >> 16) # lui $a1, 0xff7f /* 062240 80061640 AFBF00A4 */ sw $ra, 0xa4($sp) /* 062244 80061644 34A57FFF */ ori $a1, (0xFF7F7FFF & 0xFFFF) # ori $a1, $a1, 0x7fff -/* 062248 80061648 0C01C344 */ jal allocate_from_main_pool +/* 062248 80061648 0C01C344 */ jal mempool_alloc /* 06224C 8006164C 00042080 */ sll $a0, $a0, 2 /* 062250 80061650 8FBF00A4 */ lw $ra, 0xa4($sp) /* 062254 80061654 240D000C */ li $t5, 12 /* 062258 80061658 1440000B */ bnez $v0, .L80061688 /* 06225C 8006165C 00409025 */ move $s2, $v0 /* 062260 80061660 8FA400AC */ lw $a0, 0xac($sp) -/* 062264 80061664 0C01C450 */ jal free_from_memory_pool +/* 062264 80061664 0C01C450 */ jal mempool_free /* 062268 80061668 00000000 */ nop /* 06226C 8006166C 8FA400A0 */ lw $a0, 0xa0($sp) -/* 062270 80061670 0C01C450 */ jal free_from_memory_pool +/* 062270 80061670 0C01C450 */ jal mempool_free /* 062274 80061674 00000000 */ nop -/* 062278 80061678 0C01C450 */ jal free_from_memory_pool +/* 062278 80061678 0C01C450 */ jal mempool_free /* 06227C 8006167C 02E02025 */ move $a0, $s7 /* 062280 80061680 100000CE */ b .L800619BC /* 062284 80061684 24020001 */ li $v0, 1 @@ -757,12 +757,12 @@ glabel func_80060EA8 .L80061994: /* 062594 80061994 8FA900A0 */ lw $t1, 0xa0($sp) /* 062598 80061998 02E02025 */ move $a0, $s7 -/* 06259C 8006199C 0C01C450 */ jal free_from_memory_pool +/* 06259C 8006199C 0C01C450 */ jal mempool_free /* 0625A0 800619A0 AD490040 */ sw $t1, 0x40($t2) -/* 0625A4 800619A4 0C01C450 */ jal free_from_memory_pool +/* 0625A4 800619A4 0C01C450 */ jal mempool_free /* 0625A8 800619A8 02402025 */ move $a0, $s2 /* 0625AC 800619AC 8FA400AC */ lw $a0, 0xac($sp) -/* 0625B0 800619B0 0C01C450 */ jal free_from_memory_pool +/* 0625B0 800619B0 0C01C450 */ jal mempool_free /* 0625B4 800619B4 00000000 */ nop .L800619B8: /* 0625B8 800619B8 00001025 */ move $v0, $zero diff --git a/asm/non_matchings/objects/func_8000CC7C.s b/asm/non_matchings/objects/func_8000CC7C.s index 9b2ca892..a54d2dab 100644 --- a/asm/non_matchings/objects/func_8000CC7C.s +++ b/asm/non_matchings/objects/func_8000CC7C.s @@ -534,7 +534,7 @@ glabel func_8000CC7C /* 00DFCC 8000D3CC 3C05FFFF */ lui $a1, (0xFFFF00FF >> 16) # lui $a1, 0xffff /* 00DFD0 8000D3D0 24150018 */ li $s5, 24 /* 00DFD4 8000D3D4 34A500FF */ ori $a1, (0xFFFF00FF & 0xFFFF) # ori $a1, $a1, 0xff -/* 00DFD8 8000D3D8 0C01C327 */ jal allocate_from_main_pool_safe +/* 00DFD8 8000D3D8 0C01C327 */ jal mempool_alloc_safe /* 00DFDC 8000D3DC 24040010 */ li $a0, 16 /* 00DFE0 8000D3E0 A440000C */ sh $zero, 0xc($v0) /* 00DFE4 8000D3E4 A440000A */ sh $zero, 0xa($v0) @@ -1417,11 +1417,11 @@ glabel L8000D98C /* 00EC60 8000E060 0C01AF44 */ jal start_level_music /* 00EC64 8000E064 00000000 */ nop .L8000E068: -/* 00EC68 8000E068 0C01C42C */ jal set_free_queue_state +/* 00EC68 8000E068 0C01C42C */ jal mempool_free_timer /* 00EC6C 8000E06C 00002025 */ move $a0, $zero -/* 00EC70 8000E070 0C01C450 */ jal free_from_memory_pool +/* 00EC70 8000E070 0C01C450 */ jal mempool_free /* 00EC74 8000E074 02C02025 */ move $a0, $s6 -/* 00EC78 8000E078 0C01C42C */ jal set_free_queue_state +/* 00EC78 8000E078 0C01C42C */ jal mempool_free_timer /* 00EC7C 8000E07C 24040002 */ li $a0, 2 .L8000E080: /* 00EC80 8000E080 8FBF003C */ lw $ra, 0x3c($sp) diff --git a/asm/non_matchings/objects/func_800101AC.s b/asm/non_matchings/objects/func_800101AC.s index bb8142aa..002c54ff 100644 --- a/asm/non_matchings/objects/func_800101AC.s +++ b/asm/non_matchings/objects/func_800101AC.s @@ -82,7 +82,7 @@ glabel func_800101AC .L800102B8: /* 010EB8 800102B8 0C003211 */ jal try_free_object_header /* 010EBC 800102BC 00000000 */ nop -/* 010EC0 800102C0 0C01C450 */ jal free_from_memory_pool +/* 010EC0 800102C0 0C01C450 */ jal mempool_free /* 010EC4 800102C4 02202025 */ move $a0, $s1 /* 010EC8 800102C8 8EC30060 */ lw $v1, 0x60($s6) /* 010ECC 800102CC 26B50001 */ addiu $s5, $s5, 1 @@ -295,7 +295,7 @@ glabel L800105A8 /* 0111AC 800105AC 00000000 */ nop /* 0111B0 800105B0 10800005 */ beqz $a0, .L800105C8 /* 0111B4 800105B4 00000000 */ nop -/* 0111B8 800105B8 0C01C450 */ jal free_from_memory_pool +/* 0111B8 800105B8 0C01C450 */ jal mempool_free /* 0111BC 800105BC 00000000 */ nop /* 0111C0 800105C0 86C50048 */ lh $a1, 0x48($s6) /* 0111C4 800105C4 00000000 */ nop @@ -566,7 +566,7 @@ glabel L80010664 /* 011558 80010958 86C4002C */ lh $a0, 0x2c($s6) /* 01155C 8001095C 0C003211 */ jal try_free_object_header /* 011560 80010960 00000000 */ nop -/* 011564 80010964 0C01C450 */ jal free_from_memory_pool +/* 011564 80010964 0C01C450 */ jal mempool_free /* 011568 80010968 02C02025 */ move $a0, $s6 .L8001096C: /* 01156C 8001096C 8FBF0034 */ lw $ra, 0x34($sp) diff --git a/asm/non_matchings/objects/spawn_object.s b/asm/non_matchings/objects/spawn_object.s index df8a0a1c..b9bfc563 100644 --- a/asm/non_matchings/objects/spawn_object.s +++ b/asm/non_matchings/objects/spawn_object.s @@ -594,7 +594,7 @@ glabel L8000EDE0 .L8000F2C8: /* 00FEC8 8000F2C8 8C84AE68 */ lw $a0, %lo(gObjectMemoryPool)($a0) /* 00FECC 8000F2CC 00A08825 */ move $s1, $a1 -/* 00FED0 8000F2D0 0C01C3A4 */ jal allocate_from_pool_containing_slots +/* 00FED0 8000F2D0 0C01C3A4 */ jal mempool_alloc_pool /* 00FED4 8000F2D4 02408025 */ move $s0, $s2 /* 00FED8 8000F2D8 14400018 */ bnez $v0, .L8000F33C /* 00FEDC 8000F2DC 00409025 */ move $s2, $v0 @@ -804,7 +804,7 @@ glabel L8000EDE0 /* 0101C0 8000F5C0 87A4004E */ lh $a0, 0x4e($sp) /* 0101C4 8000F5C4 0C003211 */ jal try_free_object_header /* 0101C8 8000F5C8 00000000 */ nop -/* 0101CC 8000F5CC 0C01C450 */ jal free_from_memory_pool +/* 0101CC 8000F5CC 0C01C450 */ jal mempool_free /* 0101D0 8000F5D0 02402025 */ move $a0, $s2 /* 0101D4 8000F5D4 12200005 */ beqz $s1, .L8000F5EC /* 0101D8 8000F5D8 00000000 */ nop diff --git a/asm/non_matchings/particles/func_800AE728.s b/asm/non_matchings/particles/func_800AE728.s index 39286fc4..4236d3de 100644 --- a/asm/non_matchings/particles/func_800AE728.s +++ b/asm/non_matchings/particles/func_800AE728.s @@ -72,7 +72,7 @@ glabel func_800AE728 /* 0AF42C 800AE82C 01846021 */ addu $t4, $t4, $a0 /* 0AF430 800AE830 000C2040 */ sll $a0, $t4, 1 /* 0AF434 800AE834 02402825 */ move $a1, $s2 -/* 0AF438 800AE838 0C01C327 */ jal allocate_from_main_pool_safe +/* 0AF438 800AE838 0C01C327 */ jal mempool_alloc_safe /* 0AF43C 800AE83C 00008025 */ move $s0, $zero /* 0AF440 800AE840 00136840 */ sll $t5, $s3, 1 /* 0AF444 800AE844 022D7021 */ addu $t6, $s1, $t5 @@ -81,7 +81,7 @@ glabel func_800AE728 /* 0AF450 800AE850 00047900 */ sll $t7, $a0, 4 /* 0AF454 800AE854 AC222CE0 */ sw $v0, %lo(D_800E2CE0)($at) /* 0AF458 800AE858 01E02025 */ move $a0, $t7 -/* 0AF45C 800AE85C 0C01C327 */ jal allocate_from_main_pool_safe +/* 0AF45C 800AE85C 0C01C327 */ jal mempool_alloc_safe /* 0AF460 800AE860 02402825 */ move $a1, $s2 /* 0AF464 800AE864 3C10800E */ lui $s0, %hi(D_800E2CE4) # $s0, 0x800e /* 0AF468 800AE868 26102CE4 */ addiu $s0, %lo(D_800E2CE4) # addiu $s0, $s0, 0x2ce4 @@ -96,7 +96,7 @@ glabel func_800AE728 /* 0AF48C 800AE88C 3C01800E */ lui $at, %hi(D_800E2CA0) # $at, 0x800e /* 0AF490 800AE890 AC202CA0 */ sw $zero, %lo(D_800E2CA0)($at) /* 0AF494 800AE894 001121C0 */ sll $a0, $s1, 7 -/* 0AF498 800AE898 0C01C327 */ jal allocate_from_main_pool_safe +/* 0AF498 800AE898 0C01C327 */ jal mempool_alloc_safe /* 0AF49C 800AE89C 02402825 */ move $a1, $s2 /* 0AF4A0 800AE8A0 3C15800E */ lui $s5, %hi(D_800E2CA8) # $s5, 0x800e /* 0AF4A4 800AE8A4 26B52CA8 */ addiu $s5, %lo(D_800E2CA8) # addiu $s5, $s5, 0x2ca8 @@ -110,7 +110,7 @@ glabel func_800AE728 /* 0AF4C0 800AE8C0 3C01800E */ lui $at, %hi(D_800E2CAC) # $at, 0x800e /* 0AF4C4 800AE8C4 AC202CAC */ sw $zero, %lo(D_800E2CAC)($at) /* 0AF4C8 800AE8C8 001321C0 */ sll $a0, $s3, 7 -/* 0AF4CC 800AE8CC 0C01C327 */ jal allocate_from_main_pool_safe +/* 0AF4CC 800AE8CC 0C01C327 */ jal mempool_alloc_safe /* 0AF4D0 800AE8D0 02402825 */ move $a1, $s2 /* 0AF4D4 800AE8D4 3C16800E */ lui $s6, %hi(D_800E2CB4) # $s6, 0x800e /* 0AF4D8 800AE8D8 26D62CB4 */ addiu $s6, %lo(D_800E2CB4) # addiu $s6, $s6, 0x2cb4 @@ -126,7 +126,7 @@ glabel func_800AE728 /* 0AF4FC 800AE8FC 00972023 */ subu $a0, $a0, $s7 /* 0AF500 800AE900 AC202CB8 */ sw $zero, %lo(D_800E2CB8)($at) /* 0AF504 800AE904 00042100 */ sll $a0, $a0, 4 -/* 0AF508 800AE908 0C01C327 */ jal allocate_from_main_pool_safe +/* 0AF508 800AE908 0C01C327 */ jal mempool_alloc_safe /* 0AF50C 800AE90C 02402825 */ move $a1, $s2 /* 0AF510 800AE910 3C01800E */ lui $at, %hi(D_800E2CC0) # $at, 0x800e /* 0AF514 800AE914 AC222CC0 */ sw $v0, %lo(D_800E2CC0)($at) @@ -138,7 +138,7 @@ glabel func_800AE728 /* 0AF528 800AE928 3C01800E */ lui $at, %hi(D_800E2CC4) # $at, 0x800e /* 0AF52C 800AE92C AC202CC4 */ sw $zero, %lo(D_800E2CC4)($at) /* 0AF530 800AE930 001421C0 */ sll $a0, $s4, 7 -/* 0AF534 800AE934 0C01C327 */ jal allocate_from_main_pool_safe +/* 0AF534 800AE934 0C01C327 */ jal mempool_alloc_safe /* 0AF538 800AE938 02402825 */ move $a1, $s2 /* 0AF53C 800AE93C 3C17800E */ lui $s7, %hi(D_800E2CCC) # $s7, 0x800e /* 0AF540 800AE940 26F72CCC */ addiu $s7, %lo(D_800E2CCC) # addiu $s7, $s7, 0x2ccc @@ -154,7 +154,7 @@ glabel func_800AE728 /* 0AF564 800AE964 009E2021 */ addu $a0, $a0, $fp /* 0AF568 800AE968 AC202CD0 */ sw $zero, %lo(D_800E2CD0)($at) /* 0AF56C 800AE96C 000420C0 */ sll $a0, $a0, 3 -/* 0AF570 800AE970 0C01C327 */ jal allocate_from_main_pool_safe +/* 0AF570 800AE970 0C01C327 */ jal mempool_alloc_safe /* 0AF574 800AE974 02402825 */ move $a1, $s2 /* 0AF578 800AE978 3C1E800E */ lui $fp, %hi(D_800E2CD8) # $fp, 0x800e /* 0AF57C 800AE97C 27DE2CD8 */ addiu $fp, %lo(D_800E2CD8) # addiu $fp, $fp, 0x2cd8 @@ -431,7 +431,7 @@ glabel func_800AE728 /* 0AF968 800AED68 24790001 */ addiu $t9, $v1, 1 .L800AED6C: /* 0AF96C 800AED6C 00032080 */ sll $a0, $v1, 2 -/* 0AF970 800AED70 0C01C327 */ jal allocate_from_main_pool_safe +/* 0AF970 800AED70 0C01C327 */ jal mempool_alloc_safe /* 0AF974 800AED74 3405FFFF */ li $a1, 65535 /* 0AF978 800AED78 3C06800E */ lui $a2, %hi(D_800E2E64) # $a2, 0x800e /* 0AF97C 800AED7C 24C62E64 */ addiu $a2, %lo(D_800E2E64) # addiu $a2, $a2, 0x2e64 @@ -460,7 +460,7 @@ glabel func_800AE728 /* 0AF9D4 800AEDD4 1420FFEF */ bnez $at, .L800AED94 /* 0AF9D8 800AEDD8 24630004 */ addiu $v1, $v1, 4 .L800AEDDC: -/* 0AF9DC 800AEDDC 0C01C450 */ jal free_from_memory_pool +/* 0AF9DC 800AEDDC 0C01C450 */ jal mempool_free /* 0AF9E0 800AEDE0 02402025 */ move $a0, $s2 /* 0AF9E4 800AEDE4 8FBF003C */ lw $ra, 0x3c($sp) .L800AEDE8: diff --git a/asm/non_matchings/rcp/func_80078190.s b/asm/non_matchings/rcp/func_80078190.s index c933a66c..109d31c6 100644 --- a/asm/non_matchings/rcp/func_80078190.s +++ b/asm/non_matchings/rcp/func_80078190.s @@ -10,7 +10,7 @@ glabel func_80078190 /* 078DB0 800781B0 AFB20020 */ sw $s2, 0x20($sp) /* 078DB4 800781B4 AFB1001C */ sw $s1, 0x1c($sp) /* 078DB8 800781B8 AFB00018 */ sw $s0, 0x18($sp) -/* 078DBC 800781BC 0C01E948 */ jal get_video_width_and_height_as_s32 +/* 078DBC 800781BC 0C01E948 */ jal fb_size /* 078DC0 800781C0 AFA40040 */ sw $a0, 0x40($sp) /* 078DC4 800781C4 8FA40040 */ lw $a0, 0x40($sp) /* 078DC8 800781C8 00024403 */ sra $t0, $v0, 0x10 @@ -18,22 +18,22 @@ glabel func_80078190 /* 078DD0 800781D0 3C19800E */ lui $t9, %hi(dRaceFinishBackgroundSettings) # $t9, 0x800e /* 078DD4 800781D4 246F0008 */ addiu $t7, $v1, 8 /* 078DD8 800781D8 AC8F0000 */ sw $t7, ($a0) -/* 078DDC 800781DC 3C0A800E */ lui $t2, %hi(gMosaicTex2) # $t2, 0x800e +/* 078DDC 800781DC 3C0A800E */ lui $t2, %hi(gTexBGTex2) # $t2, 0x800e /* 078DE0 800781E0 310EFFFF */ andi $t6, $t0, 0xffff /* 078DE4 800781E4 2739E598 */ addiu $t9, %lo(dRaceFinishBackgroundSettings) # addiu $t9, $t9, -0x1a68 /* 078DE8 800781E8 3C180600 */ lui $t8, 0x600 -/* 078DEC 800781EC 254AE4C8 */ addiu $t2, %lo(gMosaicTex2) # addiu $t2, $t2, -0x1b38 +/* 078DEC 800781EC 254AE4C8 */ addiu $t2, %lo(gTexBGTex2) # addiu $t2, $t2, -0x1b38 /* 078DF0 800781F0 01C04025 */ move $t0, $t6 /* 078DF4 800781F4 AC780000 */ sw $t8, ($v1) /* 078DF8 800781F8 AC790004 */ sw $t9, 4($v1) /* 078DFC 800781FC 8D4E0000 */ lw $t6, ($t2) -/* 078E00 80078200 3C09800E */ lui $t1, %hi(gMosaicTex1) # $t1, 0x800e +/* 078E00 80078200 3C09800E */ lui $t1, %hi(gTexBGTex1) # $t1, 0x800e /* 078E04 80078204 15C00070 */ bnez $t6, .L800783C8 -/* 078E08 80078208 2529E4C4 */ addiu $t1, %lo(gMosaicTex1) # addiu $t1, $t1, -0x1b3c +/* 078E08 80078208 2529E4C4 */ addiu $t1, %lo(gTexBGTex1) # addiu $t1, $t1, -0x1b3c /* 078E0C 8007820C 8C830000 */ lw $v1, ($a0) -/* 078E10 80078210 3C09800E */ lui $t1, %hi(gMosaicTex1) # $t1, 0x800e +/* 078E10 80078210 3C09800E */ lui $t1, %hi(gTexBGTex1) # $t1, 0x800e /* 078E14 80078214 246F0008 */ addiu $t7, $v1, 8 -/* 078E18 80078218 2529E4C4 */ addiu $t1, %lo(gMosaicTex1) # addiu $t1, $t1, -0x1b3c +/* 078E18 80078218 2529E4C4 */ addiu $t1, %lo(gTexBGTex1) # addiu $t1, $t1, -0x1b3c /* 078E1C 8007821C AC8F0000 */ sw $t7, ($a0) /* 078E20 80078220 8D380000 */ lw $t8, ($t1) /* 078E24 80078224 3C010700 */ lui $at, 0x700 @@ -64,10 +64,10 @@ glabel func_80078190 /* 078E88 80078288 00009825 */ move $s3, $zero /* 078E8C 8007828C 1AC00128 */ blez $s6, .L80078730 /* 078E90 80078290 00009025 */ move $s2, $zero -/* 078E94 80078294 3C17800E */ lui $s7, %hi(gMosaicShiftX) # $s7, 0x800e +/* 078E94 80078294 3C17800E */ lui $s7, %hi(gTexBGShiftX) # $s7, 0x800e /* 078E98 80078298 3C1F0400 */ lui $ra, (0x04000400 >> 16) # lui $ra, 0x400 /* 078E9C 8007829C 37FF0400 */ ori $ra, (0x04000400 & 0xFFFF) # ori $ra, $ra, 0x400 -/* 078EA0 800782A0 26F7E4C0 */ addiu $s7, %lo(gMosaicShiftX) # addiu $s7, $s7, -0x1b40 +/* 078EA0 800782A0 26F7E4C0 */ addiu $s7, %lo(gTexBGShiftX) # addiu $s7, $s7, -0x1b40 /* 078EA4 800782A4 2715FFFF */ addiu $s5, $t8, -1 /* 078EA8 800782A8 3C0DB200 */ lui $t5, 0xb200 /* 078EAC 800782AC 3C0CB300 */ lui $t4, 0xb300 @@ -183,10 +183,10 @@ glabel func_80078190 /* 07904C 8007844C 01D9F021 */ addu $fp, $t6, $t9 /* 079050 80078450 1AC0004D */ blez $s6, .L80078588 /* 079054 80078454 00009825 */ move $s3, $zero -/* 079058 80078458 3C17800E */ lui $s7, %hi(gMosaicShiftX) # $s7, 0x800e +/* 079058 80078458 3C17800E */ lui $s7, %hi(gTexBGShiftX) # $s7, 0x800e /* 07905C 8007845C 3C1F0400 */ lui $ra, (0x04000400 >> 16) # lui $ra, 0x400 /* 079060 80078460 37FF0400 */ ori $ra, (0x04000400 & 0xFFFF) # ori $ra, $ra, 0x400 -/* 079064 80078464 26F7E4C0 */ addiu $s7, %lo(gMosaicShiftX) # addiu $s7, $s7, -0x1b40 +/* 079064 80078464 26F7E4C0 */ addiu $s7, %lo(gTexBGShiftX) # addiu $s7, $s7, -0x1b40 /* 079068 80078468 2615FFFF */ addiu $s5, $s0, -1 /* 07906C 8007846C 3C0DB200 */ lui $t5, 0xb200 /* 079070 80078470 3C0CB300 */ lui $t4, 0xb300 @@ -266,9 +266,9 @@ glabel func_80078190 /* 079184 80078584 00009825 */ move $s3, $zero .L80078588: /* 079188 80078588 8C830000 */ lw $v1, ($a0) -/* 07918C 8007858C 3C06800E */ lui $a2, %hi(gMosaicTex2) # $a2, 0x800e +/* 07918C 8007858C 3C06800E */ lui $a2, %hi(gTexBGTex2) # $a2, 0x800e /* 079190 80078590 24790008 */ addiu $t9, $v1, 8 -/* 079194 80078594 24C6E4C8 */ addiu $a2, %lo(gMosaicTex2) # addiu $a2, $a2, -0x1b38 +/* 079194 80078594 24C6E4C8 */ addiu $a2, %lo(gTexBGTex2) # addiu $a2, $a2, -0x1b38 /* 079198 80078598 AC990000 */ sw $t9, ($a0) /* 07919C 8007859C 8CD80000 */ lw $t8, ($a2) /* 0791A0 800785A0 3C010700 */ lui $at, 0x700 @@ -290,11 +290,11 @@ glabel func_80078190 /* 0791E0 800785E0 8CD90000 */ lw $t9, ($a2) /* 0791E4 800785E4 3C1F0400 */ lui $ra, (0x04000400 >> 16) # lui $ra, 0x400 /* 0791E8 800785E8 93340001 */ lbu $s4, 1($t9) -/* 0791EC 800785EC 3C17800E */ lui $s7, %hi(gMosaicShiftX) # $s7, 0x800e +/* 0791EC 800785EC 3C17800E */ lui $s7, %hi(gTexBGShiftX) # $s7, 0x800e /* 0791F0 800785F0 00117080 */ sll $t6, $s1, 2 /* 0791F4 800785F4 0258082A */ slt $at, $s2, $t8 /* 0791F8 800785F8 00147880 */ sll $t7, $s4, 2 -/* 0791FC 800785FC 26F7E4C0 */ addiu $s7, %lo(gMosaicShiftX) # addiu $s7, $s7, -0x1b40 +/* 0791FC 800785FC 26F7E4C0 */ addiu $s7, %lo(gTexBGShiftX) # addiu $s7, $s7, -0x1b40 /* 079200 80078600 37FF0400 */ ori $ra, (0x04000400 & 0xFFFF) # ori $ra, $ra, 0x400 /* 079204 80078604 3C0BE400 */ lui $t3, 0xe400 /* 079208 80078608 3C0CB300 */ lui $t4, 0xb300 diff --git a/asm/non_matchings/textures_sprites/func_8007C12C.s b/asm/non_matchings/textures_sprites/func_8007C12C.s index fb4f8cd2..42db0726 100644 --- a/asm/non_matchings/textures_sprites/func_8007C12C.s +++ b/asm/non_matchings/textures_sprites/func_8007C12C.s @@ -111,7 +111,7 @@ glabel func_8007C12C /* 07CEBC 8007C2BC 01C02025 */ move $a0, $t6 /* 07CEC0 8007C2C0 3C05FF00 */ lui $a1, (0xFF00FFFF >> 16) # lui $a1, 0xff00 /* 07CEC4 8007C2C4 02022021 */ addu $a0, $s0, $v0 -/* 07CEC8 8007C2C8 0C01C344 */ jal allocate_from_main_pool +/* 07CEC8 8007C2C8 0C01C344 */ jal mempool_alloc /* 07CECC 8007C2CC 34A5FFFF */ ori $a1, (0xFF00FFFF & 0xFFFF) # ori $a1, $a1, 0xffff /* 07CED0 8007C2D0 1440000B */ bnez $v0, .L8007C300 /* 07CED4 8007C2D4 00409825 */ move $s3, $v0 @@ -220,7 +220,7 @@ glabel func_8007C12C /* 07D050 8007C450 25F8FFFF */ addiu $t8, $t7, -1 /* 07D054 8007C454 AC580000 */ sw $t8, ($v0) .L8007C458: -/* 07D058 8007C458 0C01C450 */ jal free_from_memory_pool +/* 07D058 8007C458 0C01C450 */ jal mempool_free /* 07D05C 8007C45C 02602025 */ move $a0, $s3 /* 07D060 8007C460 10000029 */ b .L8007C508 /* 07D064 8007C464 00001025 */ move $v0, $zero diff --git a/asm/non_matchings/textures_sprites/load_texture.s b/asm/non_matchings/textures_sprites/load_texture.s index 885fb82c..c30f95ce 100644 --- a/asm/non_matchings/textures_sprites/load_texture.s +++ b/asm/non_matchings/textures_sprites/load_texture.s @@ -84,7 +84,7 @@ glabel load_texture /* 07BBA4 8007AFA4 8CA5E7C0 */ lw $a1, %lo(gTexColourTag)($a1) /* 07BBA8 8007AFA8 000D6940 */ sll $t5, $t5, 5 /* 07BBAC 8007AFAC 01AE2021 */ addu $a0, $t5, $t6 -/* 07BBB0 8007AFB0 0C01C344 */ jal allocate_from_main_pool +/* 07BBB0 8007AFB0 0C01C344 */ jal mempool_alloc /* 07BBB4 8007AFB4 0160A025 */ move $s4, $t3 /* 07BBB8 8007AFB8 14400003 */ bnez $v0, .L8007AFC8 /* 07BBBC 8007AFBC 00409825 */ move $s3, $v0 @@ -111,7 +111,7 @@ glabel load_texture /* 07BC08 8007B008 03022021 */ addu $a0, $t8, $v0 /* 07BC0C 8007B00C AFAF003C */ sw $t7, 0x3c($sp) /* 07BC10 8007B010 24840020 */ addiu $a0, $a0, 0x20 -/* 07BC14 8007B014 0C01C344 */ jal allocate_from_main_pool +/* 07BC14 8007B014 0C01C344 */ jal mempool_alloc /* 07BC18 8007B018 0220A025 */ move $s4, $s1 /* 07BC1C 8007B01C 14400003 */ bnez $v0, .L8007B02C /* 07BC20 8007B020 00409825 */ move $s3, $v0 diff --git a/asm/non_matchings/tracks/func_80025510.s b/asm/non_matchings/tracks/func_80025510.s index d0d367f2..59ac2d8d 100644 --- a/asm/non_matchings/tracks/func_80025510.s +++ b/asm/non_matchings/tracks/func_80025510.s @@ -36,7 +36,7 @@ glabel func_80025510 /* 026194 80025594 34A5FFFF */ ori $a1, (0x00FFFFFF & 0xFFFF) # ori $a1, $a1, 0xffff /* 026198 80025598 AFA80024 */ sw $t0, 0x24($sp) /* 02619C 8002559C AFA70028 */ sw $a3, 0x28($sp) -/* 0261A0 800255A0 0C01C327 */ jal allocate_from_main_pool_safe +/* 0261A0 800255A0 0C01C327 */ jal mempool_alloc_safe /* 0261A4 800255A4 00102100 */ sll $a0, $s0, 4 /* 0261A8 800255A8 8FA70028 */ lw $a3, 0x28($sp) /* 0261AC 800255AC 8FA80024 */ lw $t0, 0x24($sp) @@ -53,7 +53,7 @@ glabel func_80025510 /* 0261D8 800255D8 34A5FFFF */ ori $a1, (0x00FFFFFF & 0xFFFF) # ori $a1, $a1, 0xffff /* 0261DC 800255DC 00006012 */ mflo $t4 /* 0261E0 800255E0 032C2021 */ addu $a0, $t9, $t4 -/* 0261E4 800255E4 0C01C327 */ jal allocate_from_main_pool_safe +/* 0261E4 800255E4 0C01C327 */ jal mempool_alloc_safe /* 0261E8 800255E8 00000000 */ nop /* 0261EC 800255EC 3C04800E */ lui $a0, %hi(D_800DC924) # $a0, 0x800e /* 0261F0 800255F0 2484C924 */ addiu $a0, %lo(D_800DC924) # addiu $a0, $a0, -0x36dc diff --git a/asm/non_matchings/tracks/func_8002C0C4.s b/asm/non_matchings/tracks/func_8002C0C4.s index b8333eaa..ce5ed1ee 100644 --- a/asm/non_matchings/tracks/func_8002C0C4.s +++ b/asm/non_matchings/tracks/func_8002C0C4.s @@ -21,7 +21,7 @@ glabel func_8002C0C4 /* 02CCF8 8002C0F8 36B52A00 */ ori $s5, (0x00082A00 & 0xFFFF) # ori $s5, $s5, 0x2a00 /* 02CCFC 8002C0FC 3C05FFFF */ lui $a1, (0xFFFF00FF >> 16) # lui $a1, 0xffff /* 02CD00 8002C100 34A500FF */ ori $a1, (0xFFFF00FF & 0xFFFF) # ori $a1, $a1, 0xff -/* 02CD04 8002C104 0C01C327 */ jal allocate_from_main_pool_safe +/* 02CD04 8002C104 0C01C327 */ jal mempool_alloc_safe /* 02CD08 8002C108 02A02025 */ move $a0, $s5 /* 02CD0C 8002C10C 3C038012 */ lui $v1, %hi(gTrackModelHeap) # $v1, 0x8012 /* 02CD10 8002C110 3C11800E */ lui $s1, %hi(gCurrentLevelModel) # $s1, 0x800e @@ -31,13 +31,13 @@ glabel func_8002C0C4 /* 02CD20 8002C120 AC620000 */ sw $v0, ($v1) /* 02CD24 8002C124 AE220000 */ sw $v0, ($s1) /* 02CD28 8002C128 34A500FF */ ori $a1, (0xFFFF00FF & 0xFFFF) # ori $a1, $a1, 0xff -/* 02CD2C 8002C12C 0C01C327 */ jal allocate_from_main_pool_safe +/* 02CD2C 8002C12C 0C01C327 */ jal mempool_alloc_safe /* 02CD30 8002C130 240407D0 */ li $a0, 2000 /* 02CD34 8002C134 3C018012 */ lui $at, %hi(D_8011D370) # $at, 0x8012 /* 02CD38 8002C138 3C05FFFF */ lui $a1, (0xFFFF00FF >> 16) # lui $a1, 0xffff /* 02CD3C 8002C13C AC22D370 */ sw $v0, %lo(D_8011D370)($at) /* 02CD40 8002C140 34A500FF */ ori $a1, (0xFFFF00FF & 0xFFFF) # ori $a1, $a1, 0xff -/* 02CD44 8002C144 0C01C327 */ jal allocate_from_main_pool_safe +/* 02CD44 8002C144 0C01C327 */ jal mempool_alloc_safe /* 02CD48 8002C148 240401F4 */ li $a0, 500 /* 02CD4C 8002C14C 3C018012 */ lui $at, %hi(D_8011D374) # $at, 0x8012 /* 02CD50 8002C150 AC22D374 */ sw $v0, %lo(D_8011D374)($at) @@ -87,7 +87,7 @@ glabel func_8002C0C4 /* 02CDF0 8002C1F0 0C031886 */ jal gzip_inflate /* 02CDF4 8002C1F4 02002025 */ move $a0, $s0 /* 02CDF8 8002C1F8 8E840000 */ lw $a0, ($s4) -/* 02CDFC 8002C1FC 0C01C450 */ jal free_from_memory_pool +/* 02CDFC 8002C1FC 0C01C450 */ jal mempool_free /* 02CE00 8002C200 00000000 */ nop /* 02CE04 8002C204 8E320000 */ lw $s2, ($s1) /* 02CE08 8002C208 00008025 */ move $s0, $zero @@ -291,19 +291,19 @@ glabel func_8002C0C4 /* 02D108 8002C508 0C032755 */ jal rmonPrintf /* 02D10C 8002C50C 02602825 */ move $a1, $s3 .L8002C510: -/* 02D110 8002C510 0C01C42C */ jal set_free_queue_state +/* 02D110 8002C510 0C01C42C */ jal mempool_free_timer /* 02D114 8002C514 00002025 */ move $a0, $zero /* 02D118 8002C518 3C048012 */ lui $a0, %hi(gTrackModelHeap) # $a0, 0x8012 /* 02D11C 8002C51C 8C84D30C */ lw $a0, %lo(gTrackModelHeap)($a0) -/* 02D120 8002C520 0C01C450 */ jal free_from_memory_pool +/* 02D120 8002C520 0C01C450 */ jal mempool_free /* 02D124 8002C524 00000000 */ nop /* 02D128 8002C528 3C058012 */ lui $a1, %hi(gTrackModelHeap) # $a1, 0x8012 /* 02D12C 8002C52C 8CA5D30C */ lw $a1, %lo(gTrackModelHeap)($a1) /* 02D130 8002C530 3C06FFFF */ lui $a2, (0xFFFF00FF >> 16) # lui $a2, 0xffff /* 02D134 8002C534 34C600FF */ ori $a2, (0xFFFF00FF & 0xFFFF) # ori $a2, $a2, 0xff -/* 02D138 8002C538 0C01C3BE */ jal allocate_at_address_in_main_pool +/* 02D138 8002C538 0C01C3BE */ jal mempool_alloc_fixed /* 02D13C 8002C53C 02602025 */ move $a0, $s3 -/* 02D140 8002C540 0C01C42C */ jal set_free_queue_state +/* 02D140 8002C540 0C01C42C */ jal mempool_free_timer /* 02D144 8002C544 24040002 */ li $a0, 2 /* 02D148 8002C548 8E240000 */ lw $a0, ($s1) /* 02D14C 8002C54C 0C02A0ED */ jal minimap_init diff --git a/asm/non_matchings/waves/func_800BBF78.s b/asm/non_matchings/waves/func_800BBF78.s index 2768ae0b..295fccf6 100644 --- a/asm/non_matchings/waves/func_800BBF78.s +++ b/asm/non_matchings/waves/func_800BBF78.s @@ -177,7 +177,7 @@ glabel func_800BBF78 /* 0BCDF8 800BC1F8 272E0001 */ addiu $t6, $t9, 1 /* 0BCDFC 800BC1FC 10A00005 */ beqz $a1, .L800BC214 /* 0BCE00 800BC200 AE0E0000 */ sw $t6, ($s0) -/* 0BCE04 800BC204 0C01C450 */ jal free_from_memory_pool +/* 0BCE04 800BC204 0C01C450 */ jal mempool_free /* 0BCE08 800BC208 00A02025 */ move $a0, $a1 /* 0BCE0C 800BC20C 8EE30000 */ lw $v1, ($s7) /* 0BCE10 800BC210 00000000 */ nop @@ -188,7 +188,7 @@ glabel func_800BBF78 /* 0BCE20 800BC220 34A5FFFF */ ori $a1, (0x00FFFFFF & 0xFFFF) # ori $a1, $a1, 0xffff /* 0BCE24 800BC224 00002012 */ mflo $a0 /* 0BCE28 800BC228 00047880 */ sll $t7, $a0, 2 -/* 0BCE2C 800BC22C 0C01C327 */ jal allocate_from_main_pool_safe +/* 0BCE2C 800BC22C 0C01C327 */ jal mempool_alloc_safe /* 0BCE30 800BC230 01E02025 */ move $a0, $t7 /* 0BCE34 800BC234 AE420000 */ sw $v0, ($s2) /* 0BCE38 800BC238 3C04800E */ lui $a0, %hi(D_800E30D8) # $a0, 0x800e @@ -196,7 +196,7 @@ glabel func_800BBF78 /* 0BCE40 800BC240 00000000 */ nop /* 0BCE44 800BC244 10800003 */ beqz $a0, .L800BC254 /* 0BCE48 800BC248 00000000 */ nop -/* 0BCE4C 800BC24C 0C01C450 */ jal free_from_memory_pool +/* 0BCE4C 800BC24C 0C01C450 */ jal mempool_free /* 0BCE50 800BC250 00000000 */ nop .L800BC254: /* 0BCE54 800BC254 8679001A */ lh $t9, 0x1a($s3) @@ -208,7 +208,7 @@ glabel func_800BBF78 /* 0BCE6C 800BC26C 01CF2021 */ addu $a0, $t6, $t7 /* 0BCE70 800BC270 3C0500FF */ lui $a1, (0x00FFFFFF >> 16) # lui $a1, 0xff /* 0BCE74 800BC274 34A5FFFF */ ori $a1, (0x00FFFFFF & 0xFFFF) # ori $a1, $a1, 0xffff -/* 0BCE78 800BC278 0C01C327 */ jal allocate_from_main_pool_safe +/* 0BCE78 800BC278 0C01C327 */ jal mempool_alloc_safe /* 0BCE7C 800BC27C 24840880 */ addiu $a0, $a0, 0x880 /* 0BCE80 800BC280 3C01800E */ lui $at, %hi(D_800E30D8) # $at, 0x800e /* 0BCE84 800BC284 AC2230D8 */ sw $v0, %lo(D_800E30D8)($at) diff --git a/asm/non_matchings/waves/func_800BCC70.s b/asm/non_matchings/waves/func_800BCC70.s index 6265dc90..e71ec982 100644 --- a/asm/non_matchings/waves/func_800BCC70.s +++ b/asm/non_matchings/waves/func_800BCC70.s @@ -41,7 +41,7 @@ glabel func_800BCC70 /* 0BD908 800BCD08 00000000 */ nop /* 0BD90C 800BCD0C 10800004 */ beqz $a0, .L800BCD20 /* 0BD910 800BCD10 8FAF0190 */ lw $t7, 0x190($sp) -/* 0BD914 800BCD14 0C01C450 */ jal free_from_memory_pool +/* 0BD914 800BCD14 0C01C450 */ jal mempool_free /* 0BD918 800BCD18 00000000 */ nop /* 0BD91C 800BCD1C 8FAF0190 */ lw $t7, 0x190($sp) .L800BCD20: @@ -53,14 +53,14 @@ glabel func_800BCC70 /* 0BD934 800BCD34 3610FFFF */ ori $s0, (0x00FFFFFF & 0xFFFF) # ori $s0, $s0, 0xffff /* 0BD938 800BCD38 02002825 */ move $a1, $s0 /* 0BD93C 800BCD3C 00002012 */ mflo $a0 -/* 0BD940 800BCD40 0C01C327 */ jal allocate_from_main_pool_safe +/* 0BD940 800BCD40 0C01C327 */ jal mempool_alloc_safe /* 0BD944 800BCD44 00000000 */ nop /* 0BD948 800BCD48 8FAE0190 */ lw $t6, 0x190($sp) /* 0BD94C 800BCD4C AE220000 */ sw $v0, ($s1) /* 0BD950 800BCD50 85C4001A */ lh $a0, 0x1a($t6) /* 0BD954 800BCD54 02002825 */ move $a1, $s0 /* 0BD958 800BCD58 00047880 */ sll $t7, $a0, 2 -/* 0BD95C 800BCD5C 0C01C327 */ jal allocate_from_main_pool_safe +/* 0BD95C 800BCD5C 0C01C327 */ jal mempool_alloc_safe /* 0BD960 800BCD60 01E02025 */ move $a0, $t7 /* 0BD964 800BCD64 3C188013 */ lui $t8, %hi(D_8012A0D8) # $t8, 0x8013 /* 0BD968 800BCD68 3C198013 */ lui $t9, %hi(D_8012A0DC) # $t9, 0x8013 @@ -71,12 +71,12 @@ glabel func_800BCC70 /* 0BD97C 800BCD7C 02002825 */ move $a1, $s0 /* 0BD980 800BCD80 00002012 */ mflo $a0 /* 0BD984 800BCD84 000470C0 */ sll $t6, $a0, 3 -/* 0BD988 800BCD88 0C01C327 */ jal allocate_from_main_pool_safe +/* 0BD988 800BCD88 0C01C327 */ jal mempool_alloc_safe /* 0BD98C 800BCD8C 01C02025 */ move $a0, $t6 /* 0BD990 800BCD90 00142080 */ sll $a0, $s4, 2 /* 0BD994 800BCD94 AFA200A4 */ sw $v0, 0xa4($sp) /* 0BD998 800BCD98 24840004 */ addiu $a0, $a0, 4 -/* 0BD99C 800BCD9C 0C01C327 */ jal allocate_from_main_pool_safe +/* 0BD99C 800BCD9C 0C01C327 */ jal mempool_alloc_safe /* 0BD9A0 800BCDA0 02002825 */ move $a1, $s0 /* 0BD9A4 800BCDA4 3C0F8013 */ lui $t7, %hi(D_8012A0D8) # $t7, 0x8013 /* 0BD9A8 800BCDA8 3C188013 */ lui $t8, %hi(D_8012A0DC) # $t8, 0x8013 @@ -1069,13 +1069,13 @@ glabel func_800BCC70 /* 0BE800 800BDC00 018F6021 */ addu $t4, $t4, $t7 .L800BDC04: /* 0BE804 800BDC04 8FA400A8 */ lw $a0, 0xa8($sp) -/* 0BE808 800BDC08 0C01C450 */ jal free_from_memory_pool +/* 0BE808 800BDC08 0C01C450 */ jal mempool_free /* 0BE80C 800BDC0C 00000000 */ nop /* 0BE810 800BDC10 8FA400A4 */ lw $a0, 0xa4($sp) -/* 0BE814 800BDC14 0C01C450 */ jal free_from_memory_pool +/* 0BE814 800BDC14 0C01C450 */ jal mempool_free /* 0BE818 800BDC18 00000000 */ nop /* 0BE81C 800BDC1C 8FA400A0 */ lw $a0, 0xa0($sp) -/* 0BE820 800BDC20 0C01C450 */ jal free_from_memory_pool +/* 0BE820 800BDC20 0C01C450 */ jal mempool_free /* 0BE824 800BDC24 00000000 */ nop /* 0BE828 800BDC28 8FBF0064 */ lw $ra, 0x64($sp) /* 0BE82C 800BDC2C C7B50018 */ lwc1 $f21, 0x18($sp) diff --git a/asm/non_matchings/waves/func_800BE654.s b/asm/non_matchings/waves/func_800BE654.s index 8ccf7ad5..ca40992b 100644 --- a/asm/non_matchings/waves/func_800BE654.s +++ b/asm/non_matchings/waves/func_800BE654.s @@ -28,7 +28,7 @@ glabel func_800BE654 /* 0BF2BC 800BE6BC 0004C043 */ sra $t8, $a0, 1 /* 0BF2C0 800BE6C0 2704000E */ addiu $a0, $t8, 0xe /* 0BF2C4 800BE6C4 AFA600E8 */ sw $a2, 0xe8($sp) -/* 0BF2C8 800BE6C8 0C01C327 */ jal allocate_from_main_pool_safe +/* 0BF2C8 800BE6C8 0C01C327 */ jal mempool_alloc_safe /* 0BF2CC 800BE6CC A7A800A6 */ sh $t0, 0xa6($sp) /* 0BF2D0 800BE6D0 8FBF00E8 */ lw $ra, 0xe8($sp) /* 0BF2D4 800BE6D4 3C0D800E */ lui $t5, %hi(D_800E30D8) # $t5, 0x800e diff --git a/lib/src/mips1/al/alFxNew.c b/lib/src/mips1/al/alFxNew.c index dbddc017..8bb253af 100644 --- a/lib/src/mips1/al/alFxNew.c +++ b/lib/src/mips1/al/alFxNew.c @@ -134,8 +134,8 @@ void alFxNew(ALFx *r, ALSynConfig *c, s16 bus, UNUSED ALHeap *hp) { j = 0; r->section_count = param[j++]; r->length = param[j++]; - r->delay = allocate_from_main_pool_safe(sizeof(ALDelay) * r->section_count, COLOUR_TAG_CYAN); - r->base = allocate_from_main_pool_safe(sizeof(s16) * r->length, COLOUR_TAG_CYAN); + r->delay = mempool_alloc_safe(sizeof(ALDelay) * r->section_count, COLOUR_TAG_CYAN); + r->base = mempool_alloc_safe(sizeof(s16) * r->length, COLOUR_TAG_CYAN); r->input = r->base; for ( k=0; k < r->length; k++) r->base[k] = 0; @@ -167,8 +167,8 @@ void alFxNew(ALFx *r, ALSynConfig *c, s16 bus, UNUSED ALHeap *hp) { d->rsgain = (((f32) param[j++])/CONVERT) * LENGTH; d->rsval = 1.0; d->rsdelta = 0.0; - d->rs = allocate_from_main_pool_safe(sizeof(ALResampler), COLOUR_TAG_CYAN); - d->rs->state = allocate_from_main_pool_safe(sizeof(RESAMPLE_STATE), COLOUR_TAG_CYAN); + d->rs = mempool_alloc_safe(sizeof(ALResampler), COLOUR_TAG_CYAN); + d->rs->state = mempool_alloc_safe(sizeof(RESAMPLE_STATE), COLOUR_TAG_CYAN); d->rs->delta = 0.0; d->rs->first = 1; } else { @@ -177,8 +177,8 @@ void alFxNew(ALFx *r, ALSynConfig *c, s16 bus, UNUSED ALHeap *hp) { j++; } if (param[j]) { - d->lp = allocate_from_main_pool_safe(sizeof(ALLowPass), COLOUR_TAG_CYAN); - d->lp->fstate = allocate_from_main_pool_safe(sizeof(POLEF_STATE), COLOUR_TAG_CYAN); + d->lp = mempool_alloc_safe(sizeof(ALLowPass), COLOUR_TAG_CYAN); + d->lp->fstate = mempool_alloc_safe(sizeof(POLEF_STATE), COLOUR_TAG_CYAN); d->lp->fc = param[j++]; init_lpfilter(d->lp); } else { diff --git a/src/asset_loading.c b/src/asset_loading.c index eeb6fb6c..460f66e8 100644 --- a/src/asset_loading.c +++ b/src/asset_loading.c @@ -33,8 +33,8 @@ void init_PI_mesg_queue(void) { osCreateMesgQueue(&gDmaMesgQueue, &gDmaMesg, 1); osCreatePiManager((OSPri) 150, &gPIMesgQueue, gPIMesgBuf, ARRAY_COUNT(gPIMesgBuf)); assetTableSize = __ASSETS_LUT_END - __ASSETS_LUT_START; - gAssetsLookupTable = (u32 *) allocate_from_main_pool_safe(assetTableSize, COLOUR_TAG_GREY); - func_80071478((u8 *) gAssetsLookupTable); + gAssetsLookupTable = (u32 *) mempool_alloc_safe(assetTableSize, COLOUR_TAG_GREY); + mempool_locked_set((u8 *) gAssetsLookupTable); dmacopy((u32) __ASSETS_LUT_START, (u32) gAssetsLookupTable, (s32) assetTableSize); } @@ -54,7 +54,7 @@ u32 *load_asset_section_from_rom(u32 assetIndex) { index = assetIndex + gAssetsLookupTable; start = *index; size = *(index + 1) - start; - out = (u32 *) allocate_from_main_pool_safe(size, COLOUR_TAG_GREY); + out = (u32 *) mempool_alloc_safe(size, COLOUR_TAG_GREY); if (out == 0) { return 0; } @@ -80,11 +80,11 @@ UNUSED u8 *load_compressed_asset_from_rom(u32 assetIndex, s32 extraMemory) { out = (u8 *) (assetIndex + gAssetsLookupTable); start = ((s32 *) out)[0]; size = ((s32 *) out)[1] - start; - gzipHeaderRamPos = (u8 *) allocate_from_main_pool_safe(8, COLOUR_TAG_WHITE); + gzipHeaderRamPos = (u8 *) mempool_alloc_safe(8, COLOUR_TAG_WHITE); dmacopy((u32) (start + __ASSETS_LUT_END), (u32) gzipHeaderRamPos, 8); totalSpace = byteswap32(gzipHeaderRamPos) + extraMemory; - free_from_memory_pool(gzipHeaderRamPos); - out = (u8 *) allocate_from_main_pool_safe(totalSpace + extraMemory, COLOUR_TAG_GREY); + mempool_free(gzipHeaderRamPos); + out = (u8 *) mempool_alloc_safe(totalSpace + extraMemory, COLOUR_TAG_GREY); if (out == NULL) { return NULL; } diff --git a/src/audio.c b/src/audio.c index 0fe413a1..02cf7a5d 100644 --- a/src/audio.c +++ b/src/audio.c @@ -92,33 +92,32 @@ void audio_init(OSSched *sc) { alHeapInit(&gALHeap, gBssSectionStart, sizeof(gBssSectionStart)); addrPtr = (s32 *) load_asset_section_from_rom(ASSET_AUDIO_TABLE); - gSoundBank = - (ALBankFile *) allocate_from_main_pool_safe(addrPtr[ASSET_AUDIO_2] - addrPtr[ASSET_AUDIO_1], COLOUR_TAG_CYAN); + gSoundBank = (ALBankFile *) mempool_alloc_safe(addrPtr[ASSET_AUDIO_2] - addrPtr[ASSET_AUDIO_1], COLOUR_TAG_CYAN); load_asset_to_address(ASSET_AUDIO, (u32) gSoundBank, addrPtr[ASSET_AUDIO_1], addrPtr[ASSET_AUDIO_2] - addrPtr[ASSET_AUDIO_1]); alBnkfNew(gSoundBank, get_rom_offset_of_asset(ASSET_AUDIO, addrPtr[ASSET_AUDIO_2])); gSoundTableSize = addrPtr[ASSET_AUDIO_7] - addrPtr[ASSET_AUDIO_6]; - gSoundTable = (SoundData *) allocate_from_main_pool_safe(gSoundTableSize, COLOUR_TAG_CYAN); + gSoundTable = (SoundData *) mempool_alloc_safe(gSoundTableSize, COLOUR_TAG_CYAN); load_asset_to_address(ASSET_AUDIO, (u32) gSoundTable, addrPtr[ASSET_AUDIO_6], gSoundTableSize); gSoundCount = gSoundTableSize / sizeof(SoundData); gSeqSoundTableSize = addrPtr[ASSET_AUDIO_6] - addrPtr[ASSET_AUDIO_5]; - gSeqSoundTable = (MusicData *) allocate_from_main_pool_safe(gSeqSoundTableSize, COLOUR_TAG_CYAN); + gSeqSoundTable = (MusicData *) mempool_alloc_safe(gSeqSoundTableSize, COLOUR_TAG_CYAN); load_asset_to_address(ASSET_AUDIO, (u32) gSeqSoundTable, addrPtr[ASSET_AUDIO_5], gSeqSoundTableSize); gSeqSoundCount = gSeqSoundTableSize / sizeof(MusicData); - gSequenceBank = (ALBankFile *) allocate_from_main_pool_safe(addrPtr[ASSET_AUDIO_0], COLOUR_TAG_CYAN); + gSequenceBank = (ALBankFile *) mempool_alloc_safe(addrPtr[ASSET_AUDIO_0], COLOUR_TAG_CYAN); load_asset_to_address(ASSET_AUDIO, (u32) gSequenceBank, 0, addrPtr[ASSET_AUDIO_0]); alBnkfNew(gSequenceBank, get_rom_offset_of_asset(ASSET_AUDIO, addrPtr[ASSET_AUDIO_0])); gSequenceTable = (ALSeqFile *) alHeapAlloc(&gALHeap, 1, 4); load_asset_to_address(ASSET_AUDIO, (u32) gSequenceTable, addrPtr[ASSET_AUDIO_4], 4); seqfSize = (gSequenceTable->seqCount) * 8 + 4; - gSequenceTable = allocate_from_main_pool_safe(seqfSize, COLOUR_TAG_CYAN); + gSequenceTable = mempool_alloc_safe(seqfSize, COLOUR_TAG_CYAN); load_asset_to_address(ASSET_AUDIO, (u32) gSequenceTable, addrPtr[ASSET_AUDIO_4], seqfSize); alSeqFileNew(gSequenceTable, get_rom_offset_of_asset(ASSET_AUDIO, addrPtr[ASSET_AUDIO_4])); - gSeqLengthTable = (u32 *) allocate_from_main_pool_safe((gSequenceTable->seqCount) * 4, COLOUR_TAG_CYAN); + gSeqLengthTable = (u32 *) mempool_alloc_safe((gSequenceTable->seqCount) * 4, COLOUR_TAG_CYAN); for (iCnt = 0; iCnt < gSequenceTable->seqCount; iCnt++) { pad = (u32) (gSequenceTable + 8 + iCnt * 8); // Fakematch @@ -143,8 +142,8 @@ void audio_init(OSSched *sc) { gMusicPlayer = sound_seqplayer_init(24, 120); set_voice_limit(gMusicPlayer, 18); gJinglePlayer = sound_seqplayer_init(16, 50); - gMusicSequenceData = allocate_from_main_pool_safe(seqLength, COLOUR_TAG_CYAN); - gJingleSequenceData = allocate_from_main_pool_safe(seqLength, COLOUR_TAG_CYAN); + gMusicSequenceData = mempool_alloc_safe(seqLength, COLOUR_TAG_CYAN); + gJingleSequenceData = mempool_alloc_safe(seqLength, COLOUR_TAG_CYAN); audConfig.unk04 = 150; audConfig.unk00 = 32; audConfig.maxChannels = AUDIO_CHANNELS; @@ -153,7 +152,7 @@ void audio_init(OSSched *sc) { alSndPNew(&audConfig); audioStartThread(); sound_volume_change(VOLUME_NORMAL); - free_from_memory_pool(addrPtr); + mempool_free(addrPtr); set_sound_channel_count(10); gBlockMusicChange = FALSE; gMusicPlaying = FALSE; diff --git a/src/audio_spatial.c b/src/audio_spatial.c index a31d1795..b0f19ca9 100644 --- a/src/audio_spatial.c +++ b/src/audio_spatial.c @@ -50,9 +50,9 @@ void func_80008040(void) { s32 var_v0; sound_table_properties(&D_80119C40, NULL, NULL); - gSoundMaskHeap = allocate_from_main_pool_safe(0x5A0, COLOUR_TAG_CYAN); - gSoundMaskHeapFree = allocate_from_main_pool_safe(0xA0, COLOUR_TAG_CYAN); - gSoundMaskHeapUsed = allocate_from_main_pool_safe(0xA0, COLOUR_TAG_CYAN); + gSoundMaskHeap = mempool_alloc_safe(0x5A0, COLOUR_TAG_CYAN); + gSoundMaskHeapFree = mempool_alloc_safe(0xA0, COLOUR_TAG_CYAN); + gSoundMaskHeapUsed = mempool_alloc_safe(0xA0, COLOUR_TAG_CYAN); gUsedMasks = 0; for (var_v0 = 0; var_v0 < 7; var_v0++) { D_80119C58[var_v0].unk4 = NULL; diff --git a/src/audio_vehicle.c b/src/audio_vehicle.c index 718fce72..e3cb3076 100644 --- a/src/audio_vehicle.c +++ b/src/audio_vehicle.c @@ -78,9 +78,9 @@ VehicleSoundData *func_80004B40(s8 characterId, s8 vehicleId) { addrPtr = (s32 *) load_asset_section_from_rom(ASSET_AUDIO_TABLE); vehicleId *= 10; temp_s1 = addrPtr[ASSET_AUDIO_7] + ((vehicleId + characterId) * sizeof(unkAudioAsset)); - temp_v0_2 = (unkAudioAsset *) allocate_from_main_pool_safe(sizeof(unkAudioAsset), COLOUR_TAG_CYAN); + temp_v0_2 = (unkAudioAsset *) mempool_alloc_safe(sizeof(unkAudioAsset), COLOUR_TAG_CYAN); load_asset_to_address(ASSET_AUDIO, (u32) temp_v0_2, temp_s1, sizeof(unkAudioAsset)); - temp_v0_3 = (VehicleSoundData *) allocate_from_main_pool_safe(sizeof(VehicleSoundData), COLOUR_TAG_CYAN); + temp_v0_3 = (VehicleSoundData *) mempool_alloc_safe(sizeof(VehicleSoundData), COLOUR_TAG_CYAN); // Not really sure this is right... memset = temp_v0_3; @@ -161,8 +161,8 @@ VehicleSoundData *func_80004B40(s8 characterId, s8 vehicleId) { temp_v0_3->unk54[0] = temp_v0_3->unk2C[var_a0_2] + (temp_v0_3->unk2C[var_a0_2 + 1] - temp_v0_3->unk2C[var_a0_2]) * new_var; } - free_from_memory_pool(addrPtr); - free_from_memory_pool((void *) temp_v0_2); + mempool_free(addrPtr); + mempool_free((void *) temp_v0_2); return temp_v0_3; } #else @@ -601,7 +601,7 @@ void racer_sound_free(Object *obj) { D_80119C30[i] = NULL; } } - free_from_memory_pool(gRacerSound); + mempool_free(gRacerSound); obj->unk64->racer.vehicleSound = NULL; } } diff --git a/src/audiomgr.c b/src/audiomgr.c index cc058717..74a8605e 100644 --- a/src/audiomgr.c +++ b/src/audiomgr.c @@ -152,12 +152,12 @@ void amCreateAudioMgr(ALSynConfig *c, OSPri pri, OSSched *audSched) { if (c->fxType[0] == AL_FX_CUSTOM) { assetAudioTable = load_asset_section_from_rom(ASSET_AUDIO_TABLE); assetSize = assetAudioTable[ASSET_AUDIO_9] - assetAudioTable[ASSET_AUDIO_8]; - asset8 = allocate_from_main_pool_safe(assetSize, COLOUR_TAG_CYAN); + asset8 = mempool_alloc_safe(assetSize, COLOUR_TAG_CYAN); load_asset_to_address(ASSET_AUDIO, (u32) asset8, assetAudioTable[ASSET_AUDIO_8], assetSize); c->params = asset8; c[1].maxVVoices = 0; alInit(&__am.g, c); - free_from_memory_pool(asset8); + mempool_free(asset8); } else { alInit(&__am.g, c); } @@ -192,8 +192,7 @@ void amCreateAudioMgr(ALSynConfig *c, OSPri pri, OSSched *audSched) { __am.ACMDList[i] = (Acmd *) alHeapAlloc(c->heap, 1, 0xA000); // sizeof(Acmd) * DMA_BUFFER_LENGTH * 5? } - asset = allocate_at_address_in_main_pool((maxFrameSize * 12), (u8 *) (0x803FFE00 - (maxFrameSize * 12)), - COLOUR_TAG_CYAN); + asset = mempool_alloc_fixed((maxFrameSize * 12), (u8 *) ((RAM_END - 0x200) - (maxFrameSize * 12)), COLOUR_TAG_CYAN); /**** initialize the done messages ****/ for (i = 0; i < NUM_ACMD_LISTS + 1; i++) { diff --git a/src/borders.c b/src/borders.c index 55beef8b..e2f27177 100644 --- a/src/borders.c +++ b/src/borders.c @@ -22,7 +22,7 @@ void divider_draw(Gfx **dList) { u32 y, x, xOffset, yOffset; LevelHeader *levelHeader; - widthAndHeight = get_video_width_and_height_as_s32(); + widthAndHeight = fb_size(); width = GET_VIDEO_WIDTH(widthAndHeight); height = GET_VIDEO_HEIGHT(widthAndHeight); xOffset = width / 256; @@ -66,7 +66,7 @@ void divider_clear_coverage(Gfx **dList) { u32 tempX; u32 tempY; - screenSize = get_video_width_and_height_as_s32(); + screenSize = fb_size(); screenHeight = GET_VIDEO_HEIGHT(screenSize); screenWidth = GET_VIDEO_WIDTH(screenSize); height = (screenHeight / 128) << 1 << 1; diff --git a/src/camera.c b/src/camera.c index f7a1aa01..646ec552 100644 --- a/src/camera.c +++ b/src/camera.c @@ -489,7 +489,7 @@ void viewport_menu_set(s32 viewPortIndex, s32 x1, s32 y1, s32 x2, s32 y2) { s32 widthAndHeight, width, height; s32 temp; - widthAndHeight = get_video_width_and_height_as_s32(); + widthAndHeight = fb_size(); height = GET_VIDEO_HEIGHT(widthAndHeight) & 0xFFFF; width = GET_VIDEO_WIDTH(widthAndHeight); @@ -603,7 +603,7 @@ void copy_viewport_frame_size_to_coords(s32 viewPortIndex, s32 *x1, s32 *y1, s32 * Official name: camGetWindowLimits */ UNUSED void copy_framebuffer_size_to_coords(s32 *x1, s32 *y1, s32 *x2, s32 *y2) { - u32 widthAndHeight = get_video_width_and_height_as_s32(); + u32 widthAndHeight = fb_size(); *x1 = 0; *y1 = 0; *x2 = GET_VIDEO_WIDTH(widthAndHeight); @@ -642,7 +642,7 @@ void func_80066CDC(Gfx **dlist, MatrixS **mats) { gActiveCameraID = 1; savedCameraID = 0; } - widthAndHeight = get_video_width_and_height_as_s32(); + widthAndHeight = fb_size(); videoHeight = GET_VIDEO_HEIGHT(widthAndHeight); videoWidth = GET_VIDEO_WIDTH(widthAndHeight); if (gScreenViewports[savedCameraID].flags & VIEWPORT_EXTRA_BG) { @@ -785,7 +785,7 @@ void viewport_scissor(Gfx **dlist) { s32 width; s32 height; - size = get_video_width_and_height_as_s32(); + size = fb_size(); height = (u16) GET_VIDEO_HEIGHT(size); width = (u16) size; numViewports = gNumberOfViewports; @@ -923,7 +923,7 @@ void set_ortho_matrix_view(Gfx **dlist, MatrixS **mtx) { s32 width, height; s32 i, j; - widthAndHeight = get_video_width_and_height_as_s32(); + widthAndHeight = fb_size(); height = GET_VIDEO_HEIGHT(widthAndHeight); width = GET_VIDEO_WIDTH(widthAndHeight); f32_matrix_to_s16_matrix(&gOrthoMatrixF, *mtx); @@ -992,7 +992,7 @@ void viewport_rsp_set(Gfx **dlist, s32 width, s32 height, s32 posX, s32 posY) { void viewport_reset(Gfx **dlist) { u32 widthAndHeight, width, height; gActiveCameraID = 4; - widthAndHeight = get_video_width_and_height_as_s32(); + widthAndHeight = fb_size(); height = GET_VIDEO_HEIGHT(widthAndHeight); width = GET_VIDEO_WIDTH(widthAndHeight); if (!(gScreenViewports[gActiveCameraID].flags & VIEWPORT_EXTRA_BG)) { diff --git a/src/fade_transition.c b/src/fade_transition.c index 4f963fc2..44acae0a 100644 --- a/src/fade_transition.c +++ b/src/fade_transition.c @@ -354,7 +354,7 @@ void render_fade_transition(Gfx **dList, MatrixS **mats, Vertex **verts) { */ void transition_end(void) { if (sTransitionVtx[0] != NULL) { - free_from_memory_pool(sTransitionVtx[0]); + mempool_free(sTransitionVtx[0]); sTransitionVtx[0] = NULL; sTransitionVtx[1] = NULL; sTransitionTris[0] = NULL; @@ -426,7 +426,7 @@ void process_transition_fullscreen(s32 updateRate) { * Draws a simple fillrect covering the whole screen that fades in or out. */ void render_fade_fullscreen(Gfx **dList, UNUSED MatrixS **mats, UNUSED Vertex **verts) { - s32 screenSize = get_video_width_and_height_as_s32(); + s32 screenSize = fb_size(); gSPDisplayList((*dList)++, dTransitionFadeSettings); gDPSetPrimColor((*dList)++, 0, 0, gCurFadeRed, gCurFadeGreen, gCurFadeBlue, gCurFadeAlpha); gDPSetCombineMode((*dList)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); @@ -452,7 +452,7 @@ void init_transition_shape(FadeTransition *transition, s32 numVerts, s32 numTris sizeTris = numTris * 16; i = j * 12; - sTransitionVtx[0] = allocate_from_main_pool_safe(((sizeVerts + sizeTris) * 2) + (i * 3), COLOUR_TAG_YELLOW); + sTransitionVtx[0] = mempool_alloc_safe(((sizeVerts + sizeTris) * 2) + (i * 3), COLOUR_TAG_YELLOW); sTransitionVtx[1] = sTransitionVtx[0] + j; sTransitionTris[0] = (Triangle *) (sTransitionVtx[1] + j); sTransitionTris[1] = (Triangle *) (((u8 *) sTransitionTris[0]) + sizeTris); @@ -585,7 +585,7 @@ void func_800C15D4(FadeTransition *transition) { sizeVerts = numVerts * sizeof(Vertex); sizeTris = numTris * sizeof(Triangle); - sTransitionVtx[0] = (Vertex *) allocate_from_main_pool_safe(((sizeVerts + sizeTris) * 2), COLOUR_TAG_YELLOW); + sTransitionVtx[0] = (Vertex *) mempool_alloc_safe(((sizeVerts + sizeTris) * 2), COLOUR_TAG_YELLOW); sTransitionVtx[1] = (Vertex *) ((uintptr_t) sTransitionVtx[0] + sizeVerts); sTransitionTris[0] = (Triangle *) ((uintptr_t) sTransitionVtx[1] + sizeVerts); sTransitionTris[1] = (Triangle *) ((uintptr_t) sTransitionTris[0] + sizeTris); @@ -850,7 +850,7 @@ void process_transition_disabled(s32 updateRate) { * Fill the whole screen with a solid colour. */ void render_fade_disabled(Gfx **dList, UNUSED MatrixS **mats, UNUSED Vertex **verts) { - s32 screenSize = get_video_width_and_height_as_s32(); + s32 screenSize = fb_size(); gSPDisplayList((*dList)++, dTransitionFadeSettings); gDPSetPrimColor((*dList)++, 0, 0, (gLastFadeRed >> 16), (gLastFadeGreen >> 16), (gLastFadeBlue >> 16), 255); gDPSetCombineMode((*dList)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); diff --git a/src/font.c b/src/font.c index bed73a0b..92922891 100644 --- a/src/font.c +++ b/src/font.c @@ -94,7 +94,7 @@ void load_fonts(void) { gFonts[i].loadedFonts[0] = 0; } - gDialogueBoxBackground = (DialogueBoxBackground *) allocate_from_main_pool_safe( + gDialogueBoxBackground = (DialogueBoxBackground *) mempool_alloc_safe( DIALOGUEBOXBACKGROUND_TOTAL_SIZE + DialogueTextElement_TOTAL_SIZE, COLOUR_TAG_YELLOW); gDialogueText = (DialogueTextElement *) &gDialogueBoxBackground[DIALOGUEBOXBACKGROUND_COUNT]; @@ -897,7 +897,7 @@ void s32_to_string(char **outString, s32 number) { * lrx, lry = lower-right position */ void render_fill_rectangle(Gfx **dlist, s32 ulx, s32 uly, s32 lrx, s32 lry) { - u32 widthAndHeight = get_video_width_and_height_as_s32(); + u32 widthAndHeight = fb_size(); u32 width = GET_VIDEO_WIDTH(widthAndHeight); u32 height = GET_VIDEO_HEIGHT(widthAndHeight); diff --git a/src/game.c b/src/game.c index 88d80578..62b92c46 100644 --- a/src/game.c +++ b/src/game.c @@ -90,7 +90,7 @@ void init_level_globals(void) { s32 checksumCount; u8 *header; s32 j; - header = allocate_from_main_pool_safe(sizeof(LevelHeader), COLOUR_TAG_YELLOW); + header = mempool_alloc_safe(sizeof(LevelHeader), COLOUR_TAG_YELLOW); gTempAssetTable = (s32 *) load_asset_section_from_rom(ASSET_LEVEL_HEADERS_TABLE); i = 0; while (i < 16) { @@ -101,8 +101,7 @@ void init_level_globals(void) { gNumberOfLevelHeaders++; } gNumberOfLevelHeaders--; - gGlobalLevelTable = - allocate_from_main_pool_safe(gNumberOfLevelHeaders * sizeof(LevelGlobalData), COLOUR_TAG_YELLOW); + gGlobalLevelTable = mempool_alloc_safe(gNumberOfLevelHeaders * sizeof(LevelGlobalData), COLOUR_TAG_YELLOW); gCurrentLevelHeader = (LevelHeader *) header; gNumberOfWorlds = -1; for (i = 0; i < gNumberOfLevelHeaders; i++) { @@ -121,7 +120,7 @@ void init_level_globals(void) { gGlobalLevelTable[i].unk4 = gCurrentLevelHeader->unkB0; } gNumberOfWorlds++; - D_80121178 = allocate_from_main_pool_safe(gNumberOfWorlds, COLOUR_TAG_YELLOW); + D_80121178 = mempool_alloc_safe(gNumberOfWorlds, COLOUR_TAG_YELLOW); for (i = 0; i < gNumberOfWorlds; i++) { D_80121178[i] = -1; } @@ -130,19 +129,19 @@ void init_level_globals(void) { D_80121178[gGlobalLevelTable[i].world] = i; } } - free_from_memory_pool(gTempAssetTable); - free_from_memory_pool(header); + mempool_free(gTempAssetTable); + mempool_free(header); gTempAssetTable = (s32 *) load_asset_section_from_rom(ASSET_LEVEL_NAMES_TABLE); for (i = 0; gTempAssetTable[i] != (-1); i++) {} i--; size = gTempAssetTable[i] - gTempAssetTable[0]; - gLevelNames = allocate_from_main_pool_safe(i * sizeof(s32), COLOUR_TAG_YELLOW); - gTempLevelNames = allocate_from_main_pool_safe(size, COLOUR_TAG_YELLOW); + gLevelNames = mempool_alloc_safe(i * sizeof(s32), COLOUR_TAG_YELLOW); + gTempLevelNames = mempool_alloc_safe(size, COLOUR_TAG_YELLOW); load_asset_to_address(ASSET_LEVEL_NAMES, (u32) gTempLevelNames, 0, size); for (size = 0; size < i; size++) { gLevelNames[size] = (char *) &gTempLevelNames[gTempAssetTable[size]]; } - free_from_memory_pool(gTempAssetTable); + mempool_free(gTempAssetTable); // Antipiracy measure #ifdef ANTI_TAMPER checksumCount = 0; @@ -406,7 +405,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl offset = gTempAssetTable[levelId]; size = gTempAssetTable[levelId + 1] - offset; - gCurrentLevelHeader = (LevelHeader *) allocate_from_main_pool_safe(size, COLOUR_TAG_YELLOW); + gCurrentLevelHeader = (LevelHeader *) mempool_alloc_safe(size, COLOUR_TAG_YELLOW); load_asset_to_address(ASSET_LEVEL_HEADERS, (u32) gCurrentLevelHeader, offset, size); D_800DD330 = 0; prevLevelID = levelId; @@ -470,13 +469,13 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl } D_800DD32C = 0; if (prevLevelID != levelId) { - free_from_memory_pool(gCurrentLevelHeader); + mempool_free(gCurrentLevelHeader); offset = gTempAssetTable[levelId]; size = gTempAssetTable[levelId + 1] - offset; - gCurrentLevelHeader = allocate_from_main_pool_safe(size, COLOUR_TAG_YELLOW); + gCurrentLevelHeader = mempool_alloc_safe(size, COLOUR_TAG_YELLOW); load_asset_to_address(ASSET_LEVEL_HEADERS, (u32) gCurrentLevelHeader, offset, size); } - free_from_memory_pool(gTempAssetTable); + mempool_free(gTempAssetTable); set_ai_level((s8 *) &gCurrentLevelHeader->AILevelTable); func_8000CBC0(); gMapId = levelId; @@ -608,9 +607,9 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl init_pulsating_light_data(gCurrentLevelHeader->pulseLightData); } update_camera_fov(gCurrentLevelHeader->cameraFOV); - set_background_prim_colour(gCurrentLevelHeader->bgColorRed, gCurrentLevelHeader->bgColorGreen, - gCurrentLevelHeader->bgColorBlue); - reset_video_delta_time(); + bgdraw_primcolour(gCurrentLevelHeader->bgColorRed, gCurrentLevelHeader->bgColorGreen, + gCurrentLevelHeader->bgColorBlue); + video_delta_reset(); func_8007AB24(gCurrentLevelHeader->unk4[numberOfPlayers]); } @@ -698,8 +697,8 @@ char *get_level_name(s32 levelId) { */ void clear_audio_and_track(void) { free_ai_behaviour_table(); - set_background_prim_colour(0, 0, 0); - free_from_memory_pool(gCurrentLevelHeader); + bgdraw_primcolour(0, 0, 0); + mempool_free(gCurrentLevelHeader); sound_stop_all(); music_stop(); music_jingle_stop(); @@ -766,16 +765,16 @@ void set_ai_level(s8 *aiLevelTable) { } temp2 = gTempAssetTable[aiLevel]; temp = gTempAssetTable[aiLevel + 1] - temp2; - gAIBehaviourTable = allocate_from_main_pool_safe(temp, COLOUR_TAG_YELLOW); + gAIBehaviourTable = mempool_alloc_safe(temp, COLOUR_TAG_YELLOW); load_asset_to_address(ASSET_AI_BEHAVIOUR, (u32) gAIBehaviourTable, temp2, temp); - free_from_memory_pool(gTempAssetTable); + mempool_free(gTempAssetTable); } /** * Frees the AI behaviour table from memory. */ void free_ai_behaviour_table(void) { - free_from_memory_pool(gAIBehaviourTable); + mempool_free(gAIBehaviourTable); } /** diff --git a/src/game_text.c b/src/game_text.c index 78cd8b32..b246569f 100644 --- a/src/game_text.c +++ b/src/game_text.c @@ -57,7 +57,7 @@ s32 D_8012A7D4; * Set the default values of dialogue and allocate memory for the active text entry. */ void init_dialogue_text(void) { - gCurrentMessageText[0] = (char *) allocate_from_main_pool_safe(0x780, COLOUR_TAG_GREEN); + gCurrentMessageText[0] = (char *) mempool_alloc_safe(0x780, COLOUR_TAG_GREEN); gCurrentMessageText[1] = gCurrentMessageText[0] + 0x3C0; D_8012A7D4 = 0; gShowSubtitles = FALSE; @@ -80,7 +80,7 @@ void init_dialogue_text(void) { * Close screen dialogue and free the text currently loaded into it. */ void free_message_box(void) { - free_from_memory_pool(gCurrentMessageText[0]); + mempool_free(gCurrentMessageText[0]); gShowSubtitles = FALSE; dialogue_close(6); dialogue_clear(6); @@ -215,7 +215,7 @@ void process_subtitles(s32 updateRate) { */ void load_game_text_table(void) { D_8012A78C = -1; - gGameTextTable[0] = (GameTextTableStruct *) allocate_from_main_pool_safe(0x800, COLOUR_TAG_GREEN); + gGameTextTable[0] = (GameTextTableStruct *) mempool_alloc_safe(0x800, COLOUR_TAG_GREEN); gGameTextTableEntries[0] = (char *) &gGameTextTable[0]->entries[32]; gGameTextTableEntries[1] = &gGameTextTableEntries[0][960]; D_8012A7A4 = 0; @@ -231,7 +231,7 @@ void load_game_text_table(void) { void free_game_text_table(void) { s32 i; if (gTextTableExists) { - free_from_memory_pool(gGameTextTable[0]); + mempool_free(gGameTextTable[0]); gTextTableExists = FALSE; gShowOnscreenMessage = FALSE; for (i = 0; i < 10; i++) { diff --git a/src/game_ui.c b/src/game_ui.c index 9c8a9625..2b5d06c5 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -257,7 +257,7 @@ void init_hud(UNUSED s32 viewportCount) { while (gAssetHudElementIds[gAssetHudElementIdsCount] != -1) { gAssetHudElementIdsCount++; } - gAssetHudElements = allocate_from_main_pool_safe(gAssetHudElementIdsCount * (sizeof(void *) + 1), COLOUR_TAG_BLUE); + gAssetHudElements = mempool_alloc_safe(gAssetHudElementIdsCount * (sizeof(void *) + 1), COLOUR_TAG_BLUE); // Evil pointer shenanigans to store the timer in that last byte in the struct above. gAssetHudElementStaleCounter = (u8 *) ((gAssetHudElementIdsCount + (s32 *) gAssetHudElements)); for (i = 0; i < gAssetHudElementIdsCount; i++) { @@ -277,7 +277,7 @@ void init_hud(UNUSED s32 viewportCount) { } else { playerCount = 4; // Create four viewports if there are three players. } - gPlayerHud[PLAYER_ONE] = allocate_from_main_pool_safe(playerCount * sizeof(HudData), COLOUR_TAG_BLUE); + gPlayerHud[PLAYER_ONE] = mempool_alloc_safe(playerCount * sizeof(HudData), COLOUR_TAG_BLUE); gPlayerHud[PLAYER_TWO] = (HudData *) ((u8 *) gPlayerHud[PLAYER_ONE] + sizeof(HudData)); gPlayerHud[PLAYER_THREE] = (HudData *) ((u8 *) gPlayerHud[PLAYER_TWO] + sizeof(HudData)); gPlayerHud[PLAYER_FOUR] = (HudData *) ((u8 *) gPlayerHud[PLAYER_THREE] + sizeof(HudData)); @@ -332,10 +332,10 @@ void free_hud(void) { gAssetHudElements->entry[i] = NULL; } } - free_from_memory_pool(*gPlayerHud); - free_from_memory_pool(gAssetHudElementIds); + mempool_free(*gPlayerHud); + mempool_free(gAssetHudElementIds); gAssetHudElementIdsCount = 0; - free_from_memory_pool(gAssetHudElements); + mempool_free(gAssetHudElements); gParticlePtrList_flush(); } @@ -440,8 +440,8 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *obj, s3 gRaceStartShowHudStep += 1; } gDPPipeSync(gHUDCurrDisplayList++); - init_rsp(&gHUDCurrDisplayList); - init_rdp_and_framebuffer(&gHUDCurrDisplayList); + rsp_init(&gHUDCurrDisplayList); + rdp_init(&gHUDCurrDisplayList); tex_enable_modes(RENDER_ALL); tex_disable_modes(RENDER_Z_COMPARE); sprite_opaque(FALSE); @@ -537,7 +537,7 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *obj, s3 sprite_opaque(TRUE); if (D_80127180) { gHudSprites[D_80127180].texture = NULL; - render_textured_rectangle(&gHUDCurrDisplayList, gHudSprites, 0, 0, 255, 255, 255, 255); + texrect_draw(&gHUDCurrDisplayList, gHudSprites, 0, 0, 255, 255, 255, 255); } *dList = gHUDCurrDisplayList; *mtx = gHUDCurrMatrix; @@ -1052,7 +1052,7 @@ void hud_draw_lives(Object_Racer *racer, UNUSED s32 updateRate) { D_80126CD5 = TRUE; func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->challengePortrait); D_80126CD5 = FALSE; - init_rdp_and_framebuffer(&gHUDCurrDisplayList); + rdp_init(&gHUDCurrDisplayList); reset_render_settings(&gHUDCurrDisplayList); } if (racer->bananas < 10) { @@ -3158,7 +3158,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } if (D_80127180 != 0) { gHudSprites[D_80127180].texture = NULL; - render_textured_rectangle(&gHUDCurrDisplayList, gHudSprites, 0, 0, 255, 255, 255, 255); + texrect_draw(&gHUDCurrDisplayList, gHudSprites, 0, 0, 255, 255, 255, 255); } *dList = gHUDCurrDisplayList; *mtx = gHUDCurrMatrix; diff --git a/src/gzip.c b/src/gzip.c index b8287c26..1b3effbe 100644 --- a/src/gzip.c +++ b/src/gzip.c @@ -26,8 +26,8 @@ s32 gHuftTablePos; // gzip_hufts * Allocate space for the decompression heap and file header. */ void gzip_init(void) { - gHuftTable = (huft *) allocate_from_main_pool_safe(0x2800, COLOUR_TAG_BLACK); - gPackedHeader = (s32 *) allocate_from_main_pool_safe(0x10, COLOUR_TAG_BLACK); + gHuftTable = (huft *) mempool_alloc_safe(0x2800, COLOUR_TAG_BLACK); + gPackedHeader = (s32 *) mempool_alloc_safe(0x10, COLOUR_TAG_BLACK); } /** diff --git a/src/lights.c b/src/lights.c index 7e0ca38f..2b209c1d 100644 --- a/src/lights.c +++ b/src/lights.c @@ -37,7 +37,7 @@ f32 gLightDiffZ; */ void free_lights(void) { if (gActiveLights != NULL) { - free_from_memory_pool(gActiveLights); + mempool_free(gActiveLights); gActiveLights = NULL; D_800DC954 = NULL; D_800DC960 = NULL; @@ -57,7 +57,7 @@ void setup_lights(s32 count) { free_lights(); gMaxLights = count; - temp_v0 = (ObjectLight **) allocate_from_main_pool_safe( + temp_v0 = (ObjectLight **) mempool_alloc_safe( gMaxLights * (sizeof(s32 *) + sizeof(ObjectLight) + sizeof(unk800DC960) + sizeof(Vec3f)), COLOUR_TAG_MAGENTA); newCount = gMaxLights; gActiveLights = temp_v0; diff --git a/src/math_util.c b/src/math_util.c index c0eca87a..8611dff9 100644 --- a/src/math_util.c +++ b/src/math_util.c @@ -26,8 +26,13 @@ extern s16 gArcTanTable[]; /******************************/ #ifdef NON_MATCHING -/* Official Name: disableInterrupts*/ -u32 disable_interrupts(void) { +/** + * Zero out the interrupt mask. This stops this thread + * from being interrupted by others, letting you safely + * work with delicate areas in memory. Kind of like a mutex. + * Returns what the interrupt mask wask before. + * Official Name: disableInterrupts */ +u32 interrupts_disable(void) { if (gIntDisFlag) { return __osDisableInt(); } @@ -37,8 +42,12 @@ GLOBAL_ASM("asm/math_util/disable_interrupts.s") #endif #ifdef NON_MATCHING -/* Official Name: enable_interrupts */ -void enable_interrupts(u32 flags) { +/** + * Set the interrupt mask to whichever flags were given. + * Required after zeroing them out, otherwise system + * operation won't work as normal. + * Official Name: enableInterrupts */ +void interrupts_enable(u32 flags) { if (gIntDisFlag) { __osRestoreInt(flags); } diff --git a/src/math_util.h b/src/math_util.h index e415aa2e..55c52a87 100644 --- a/src/math_util.h +++ b/src/math_util.h @@ -59,8 +59,8 @@ void f32_matrix_from_scale(Matrix, f32, f32, f32); s32 atan2s(s32 xDelta, s32 zDelta); f32 area_triangle_2d(f32 x0, f32 z0, f32 x1, f32 z1, f32 x2, f32 z2); void dmacopy_doubleword(void *src, void *dst, s32 end); -unk800B7D10 *get_stack_pointer(void); -u32 disable_interrupts(void); -void enable_interrupts(u32 flags); +StackInfo *stack_pointer(void); +u32 interrupts_disable(void); +void interrupts_enable(u32 flags); #endif // MATH_UTIL_H diff --git a/src/memory.c b/src/memory.c index eb58f0fd..fc125be2 100644 --- a/src/memory.c +++ b/src/memory.c @@ -13,10 +13,10 @@ #define _ALIGN16(a) (((u32) (a) & ~0xF) + 0x10) #endif -MemoryPool gMemoryPools[4]; // Only two are used. +MemoryPool gMemoryPools[POOL_COUNT]; // Only two are used. s32 gNumberOfMemoryPools; UNUSED s32 D_801235C4; -FreeQueueSlot gFreeQueue[256]; +FreeQueueSlot gFreeQueue[FREE_QUEUE_SIZE]; s32 gFreeQueueCount; s32 gFreeQueueTimer; // Official Name: mmDelay @@ -29,7 +29,7 @@ extern MemoryPoolSlot gMainMemoryPool; * Starts at 0x8012D3F0. Ends at 0x80400000. Contains 1600 allocation slots. * Official Name: mmInit */ -void init_main_memory_pool(void) { +void mempool_init_main(void) { s32 ramEnd; gNumberOfMemoryPools = -1; @@ -38,26 +38,26 @@ void init_main_memory_pool(void) { } else { ramEnd = RAM_END; } - new_memory_pool(&gMainMemoryPool, ramEnd - (s32) (&gMainMemoryPool), MAIN_POOL_SLOT_COUNT); - set_free_queue_state(2); + mempool_init(&gMainMemoryPool, ramEnd - (s32) (&gMainMemoryPool), MAIN_POOL_SLOT_COUNT); + mempool_free_timer(2); gFreeQueueCount = 0; } /** - * Creates a new memory pool that is sectioned off the main one. + * Creates a new memory pool that's contained inside another one. * Official name: mmAllocRegion */ -MemoryPoolSlot *new_sub_memory_pool(s32 poolDataSize, s32 numSlots) { +MemoryPoolSlot *mempool_new_sub(s32 poolDataSize, s32 numSlots) { s32 size; MemoryPoolSlot *slots; UNUSED s32 unused_2; - u32 flags = disable_interrupts(); + u32 intFlags = interrupts_disable(); MemoryPoolSlot *newPool; size = poolDataSize + (numSlots * sizeof(MemoryPoolSlot)); - slots = (MemoryPoolSlot *) allocate_from_main_pool_safe(size, COLOUR_TAG_WHITE); - newPool = new_memory_pool(slots, size, numSlots); - enable_interrupts(flags); + slots = (MemoryPoolSlot *) mempool_alloc_safe(size, COLOUR_TAG_WHITE); + newPool = mempool_init(slots, size, numSlots); + interrupts_enable(intFlags); return newPool; } @@ -65,7 +65,7 @@ MemoryPoolSlot *new_sub_memory_pool(s32 poolDataSize, s32 numSlots) { * Create and initialise a memory pool in RAM that will act as the place where arbitrary allocations can go. * Will return the location of the first free slot in that pool. */ -MemoryPoolSlot *new_memory_pool(MemoryPoolSlot *slots, s32 poolSize, s32 numSlots) { +MemoryPoolSlot *mempool_init(MemoryPoolSlot *slots, s32 poolSize, s32 numSlots) { MemoryPoolSlot *firstSlot; s32 poolCount; s32 i; @@ -90,61 +90,62 @@ MemoryPoolSlot *new_memory_pool(MemoryPoolSlot *slots, s32 poolSize, s32 numSlot firstSlot->data = (u8 *) slots; } firstSlot->size = firstSlotSize; - firstSlot->flags = 0; - firstSlot->prevIndex = -1; - firstSlot->nextIndex = -1; + firstSlot->flags = SLOT_FREE; + firstSlot->prevIndex = MEMSLOT_NONE; + firstSlot->nextIndex = MEMSLOT_NONE; gMemoryPools[poolCount].curNumSlots++; return gMemoryPools[poolCount].slots; } /** * Reserves and returns memory from the main memory pool. Has 2 assert checks. - * Will cause an exception if the size is 0 or if memory cannot be reserved. + * Will cause an exception if the size is 0 or if memory cannot be reserved, + * dumping the function stack contents onto a controller pak for debugging. */ -void *allocate_from_main_pool_safe(s32 size, u32 colourTag) { - void *temp_v0; +void *mempool_alloc_safe(s32 size, u32 colourTag) { + void *addr; if (size == 0) { - dump_memory_to_cpak(get_stack_pointer()->unk14, size, colourTag); + dump_memory_to_cpak(stack_pointer()->sp, size, colourTag); } - temp_v0 = allocate_from_memory_pool(0, size, colourTag); - if (temp_v0 == NULL) { - dump_memory_to_cpak(get_stack_pointer()->unk14, size, colourTag); + addr = mempool_slot_find(POOL_MAIN, size, colourTag); + if (addr == NULL) { + dump_memory_to_cpak(stack_pointer()->sp, size, colourTag); } - return temp_v0; + return addr; } /** * Reserves and returns memory from the main memory pool. Has no assert checks. */ -MemoryPoolSlot *allocate_from_main_pool(s32 size, u32 colourTag) { - return allocate_from_memory_pool(0, size, colourTag); +MemoryPoolSlot *mempool_alloc(s32 size, u32 colourTag) { + return mempool_slot_find(POOL_MAIN, size, colourTag); } /** * Search the existing empty slots and try to find one that can meet the size requirement. * Afterwards, write the new allocation data to the slot in question and return the address. */ -MemoryPoolSlot *allocate_from_memory_pool(s32 poolIndex, s32 size, u32 colourTag) { +MemoryPoolSlot *mempool_slot_find(MemoryPools poolIndex, s32 size, u32 colourTag) { s32 slotSize; MemoryPoolSlot *curSlot; UNUSED s32 pad; MemoryPool *pool; MemoryPoolSlot *slots; - u32 flags; + u32 intFlags; s32 nextIndex; s32 currIndex; - flags = disable_interrupts(); + intFlags = interrupts_disable(); if (size == 0) { stubbed_printf("*** mmAlloc: size = 0 ***\n"); } pool = &gMemoryPools[poolIndex]; if ((pool->curNumSlots + 1) == (*pool).maxNumSlots) { - enable_interrupts(flags); + interrupts_enable(intFlags); stubbed_printf("*** mm Error *** ---> No more slots available.\n"); return NULL; } - currIndex = -1; + currIndex = MEMSLOT_NONE; if (size & 0xF) { size = (size & ~0xF); size += 0x10; @@ -154,92 +155,100 @@ MemoryPoolSlot *allocate_from_memory_pool(s32 poolIndex, s32 size, u32 colourTag nextIndex = 0; do { curSlot = &slots[nextIndex]; - if (curSlot->flags == 0) { + if (curSlot->flags == SLOT_FREE) { if (curSlot->size >= size && curSlot->size < slotSize) { slotSize = curSlot->size; currIndex = nextIndex; } } nextIndex = curSlot->nextIndex; - } while (nextIndex != -1); - if (currIndex != -1) { - allocate_memory_pool_slot(poolIndex, (s32) currIndex, size, 1, 0, colourTag); - enable_interrupts(flags); + } while (nextIndex != MEMSLOT_NONE); + if (currIndex != MEMSLOT_NONE) { + mempool_slot_assign(poolIndex, (s32) currIndex, size, 1, 0, colourTag); + interrupts_enable(intFlags); return (MemoryPoolSlot *) (slots + currIndex)->data; } - enable_interrupts(flags); + interrupts_enable(intFlags); stubbed_printf("\n*** mm Error *** ---> No suitble block found for allocation.\n"); return NULL; } -/* Official name: mmAllocR */ -void *allocate_from_pool_containing_slots(MemoryPoolSlot *slots, s32 size) { +/** + * Allocate memory from a specific pool. + * Official name: mmAllocR + */ +void *mempool_alloc_pool(MemoryPoolSlot *slots, s32 size) { s32 i; for (i = gNumberOfMemoryPools; i != 0; i--) { if (slots == gMemoryPools[i].slots) { - return allocate_from_memory_pool(i, size, 0); + return mempool_slot_find(i, size, 0); } } return (void *) NULL; } -/* Official Name: mmAllocAtAddr */ -void *allocate_at_address_in_main_pool(s32 size, u8 *address, u32 colorTag) { +/** + * Allocates memory from the main pool at a fixed address. + * Rearranges the memory slots to place one at that address if possible. + * Official Name: mmAllocAtAddr + */ +void *mempool_alloc_fixed(s32 size, u8 *address, u32 colorTag) { s32 i; MemoryPoolSlot *curSlot; MemoryPoolSlot *slots; - u32 flags; + u32 intFlags; - flags = disable_interrupts(); + intFlags = interrupts_disable(); if (size == 0) { stubbed_printf("*** mmAllocAtAddr: size = 0 ***\n"); } - if ((gMemoryPools[0].curNumSlots + 1) == gMemoryPools[0].maxNumSlots) { - enable_interrupts(flags); + if ((gMemoryPools[POOL_MAIN].curNumSlots + 1) == gMemoryPools[POOL_MAIN].maxNumSlots) { + interrupts_enable(intFlags); stubbed_printf("\n*** mm Error *** ---> No more slots available.\n"); } else { if (size & 0xF) { size = _ALIGN16(size); } - slots = gMemoryPools[0].slots; - for (i = 0; i != -1; i = curSlot->nextIndex) { + slots = gMemoryPools[POOL_MAIN].slots; + for (i = 0; i != MEMSLOT_NONE; i = curSlot->nextIndex) { curSlot = &slots[i]; - if (curSlot->flags == 0) { + if (curSlot->flags == SLOT_FREE) { if ((u32) address >= (u32) curSlot->data && (u32) address + size <= (u32) curSlot->data + curSlot->size) { if (address == (u8 *) curSlot->data) { - allocate_memory_pool_slot(0, i, size, 1, 0, colorTag); - enable_interrupts(flags); + mempool_slot_assign(POOL_MAIN, i, size, 1, 0, colorTag); + interrupts_enable(intFlags); return curSlot->data; } else { - i = allocate_memory_pool_slot(0, i, (u32) address - (u32) curSlot->data, 0, 1, colorTag); - allocate_memory_pool_slot(0, i, size, 1, 0, colorTag); - enable_interrupts(flags); + i = mempool_slot_assign(POOL_MAIN, i, (u32) address - (u32) curSlot->data, 0, 1, colorTag); + mempool_slot_assign(POOL_MAIN, i, size, 1, 0, colorTag); + interrupts_enable(intFlags); return (slots + i)->data; } } } } - enable_interrupts(flags); + interrupts_enable(intFlags); } stubbed_printf("\n*** mm Error *** ---> Can't allocate memory at desired address.\n"); return NULL; } /** - * Sets the state of the free queue. State is either 0, 1, or 2. - * The free queue will get flushed if the state is set to 0. - * Official name: mmSetDelay + * Sets the tick timer for the free queue. + * If it's set to 0, then it clears the existing queue. + * Nonzero amounts set any future frees to wait that many ticks + * before clearing from memory. */ -void set_free_queue_state(s32 state) { - u32 flags = disable_interrupts(); +void mempool_free_timer(s32 state) { + u32 intFlags = interrupts_disable(); gFreeQueueTimer = state; if (state == 0) { // flush free queue if state is 0. while (gFreeQueueCount > 0) { - free_slot_containing_address(gFreeQueue[--gFreeQueueCount].dataAddress); + mempool_free_addr(gFreeQueue[--gFreeQueueCount].dataAddress); } } - enable_interrupts(flags); + interrupts_enable(intFlags); } /** @@ -247,30 +256,30 @@ void set_free_queue_state(s32 state) { * state is set to 0, otherwise the data will just be marked for deletion. * Official Name: mmFree */ -void free_from_memory_pool(void *data) { - u32 flags = disable_interrupts(); +void mempool_free(void *data) { + u32 intFlags = interrupts_disable(); if (gFreeQueueTimer == 0) { - free_slot_containing_address(data); + mempool_free_addr(data); } else { - add_to_free_queue(data); + mempool_free_queue(data); } - enable_interrupts(flags); + interrupts_enable(intFlags); } /** * Frees all the addresses in the free queue. * Official Name: mmFreeTick */ -void clear_free_queue(void) { +void mempool_free_queue_clear(void) { s32 i; - u32 flags; + u32 intFlags; - flags = disable_interrupts(); + intFlags = interrupts_disable(); for (i = 0; i < gFreeQueueCount;) { gFreeQueue[i].freeTimer--; if (gFreeQueue[i].freeTimer == 0) { - free_slot_containing_address(gFreeQueue[i].dataAddress); + mempool_free_addr(gFreeQueue[i].dataAddress); gFreeQueue[i].dataAddress = gFreeQueue[gFreeQueueCount - 1].dataAddress; gFreeQueue[i].freeTimer = gFreeQueue[gFreeQueueCount - 1].freeTimer; gFreeQueueCount--; @@ -280,138 +289,154 @@ void clear_free_queue(void) { } } - enable_interrupts(flags); + interrupts_enable(intFlags); } -/* Official name: heapFree */ -void free_slot_containing_address(u8 *address) { +/** + * Searches the memory pools for a slot matching the given address. + * If a slot is found, free it. + * Official name: heapFree + */ +void mempool_free_addr(u8 *address) { s32 slotIndex; s32 poolIndex; MemoryPool *pool; MemoryPoolSlot *slots; MemoryPoolSlot *slot; - poolIndex = get_memory_pool_index_containing_address(address); + poolIndex = mempool_get_pool(address); pool = gMemoryPools; slots = pool[poolIndex].slots; - for (slotIndex = 0; slotIndex != -1; slotIndex = slot->nextIndex) { + for (slotIndex = 0; slotIndex != MEMSLOT_NONE; slotIndex = slot->nextIndex) { slot = &slots[slotIndex]; if (address == (u8 *) slot->data) { - if (slot->flags == 1 || slot->flags == 4) { - free_memory_pool_slot(poolIndex, slotIndex); + if (slot->flags == SLOT_USED || slot->flags == SLOT_SAFEGUARD) { + mempool_slot_clear(poolIndex, slotIndex); } break; } slot = &slots[slotIndex]; } + stubbed_printf("\n*** mm Error *** ---> No match found for mmFree.\n"); } -UNUSED void func_80071314(void) { +/** + * Clears all memory pools. + * When clearing a pool, it checks if the slot uses the 0x04 flag. + * It calls an early return if that flag is set and more slots remain after. + */ +UNUSED void mempool_clear(void) { MemoryPoolSlot *slotPos; MemoryPool *pool; UNUSED s32 pad; - u32 flags; + u32 intFlags; s32 poolIndex; s32 slotIndex; - flags = disable_interrupts(); + intFlags = interrupts_disable(); poolIndex = gNumberOfMemoryPools; while (poolIndex != -1) { pool = &gMemoryPools[poolIndex]; slotPos = pool->slots; slotIndex = 0; do { - if ((slotPos + slotIndex)->flags == 1) { - free_memory_pool_slot(poolIndex, slotIndex); + if ((slotPos + slotIndex)->flags == SLOT_USED) { + mempool_slot_clear(poolIndex, slotIndex); } - if ((slotPos + slotIndex)->flags == 4) { + if ((slotPos + slotIndex)->flags == SLOT_SAFEGUARD) { if (pool->curNumSlots == 1) { - free_memory_pool_slot(poolIndex, slotIndex); + mempool_slot_clear(poolIndex, slotIndex); } else { - enable_interrupts(flags); + interrupts_enable(intFlags); + stubbed_printf("*** Slots still in use in region ***\n"); return; } } slotIndex = (slotPos + slotIndex)->nextIndex; - } while (slotIndex != -1); + } while (slotIndex != MEMSLOT_NONE); poolIndex--; } - enable_interrupts(flags); - stubbed_printf("\n*** mm Error *** ---> No match found for mmFree.\n"); + interrupts_enable(intFlags); } -// TODO: Find homes for these, too. -UNUSED const char D_800E73A8[] = "*** Slots still in use in region ***\n"; -UNUSED const char D_800E73D0[] = "\n*** mm Error *** ---> stbf stack too deep!\n"; -UNUSED const char D_800E7400[] = "\n*** mm Error *** ---> Can't fix the specified block.\n"; -UNUSED const char D_800E7438[] = "\n*** mm Error *** ---> Can't unfix the specified block.\n"; - /** * Adds the current memory address to the back of the queue, so it can be freed. */ -void add_to_free_queue(void *dataAddress) { +void mempool_free_queue(void *dataAddress) { gFreeQueue[gFreeQueueCount].dataAddress = dataAddress; gFreeQueue[gFreeQueueCount].freeTimer = gFreeQueueTimer; gFreeQueueCount++; -} -s32 func_80071478(u8 *address) { - s32 slotIndex; - MemoryPoolSlot *slot; - MemoryPool *pool; - u32 flags; - - flags = disable_interrupts(); - pool = &gMemoryPools[get_memory_pool_index_containing_address(address)]; - slotIndex = 0; - while (slotIndex != -1) { - slot = slotIndex + pool->slots; // `slot = &pool->slots[slotIndex];` does not match. - if (address == (u8 *) slot->data) { - if (slot->flags == 1 || slot->flags == 4) { - slot->flags |= 2; - enable_interrupts(flags); - return TRUE; - } - } - slotIndex = slot->nextIndex; + if (gFreeQueueCount >= ARRAY_COUNT(gFreeQueue)) { + stubbed_printf("\n*** mm Error *** ---> stbf stack too deep!\n"); } - enable_interrupts(flags); - return FALSE; } /** - * Search the memory pool for the slot that's tied to the given address. - * Return true if it's found, otherwise return false. + * Search the memory pool for the current address. + * Check if the slot is used, then set the 0x02 slot flag. + * Return 1 if successful, otherwise return 0. */ -s32 memory_slot_exists(u8 *address) { +s32 mempool_locked_set(u8 *address) { s32 slotIndex; MemoryPoolSlot *slot; MemoryPool *pool; - u32 flags; + u32 intFlags; - flags = disable_interrupts(); - pool = &gMemoryPools[get_memory_pool_index_containing_address(address)]; + intFlags = interrupts_disable(); + pool = &gMemoryPools[mempool_get_pool(address)]; slotIndex = 0; - while (slotIndex != -1) { + while (slotIndex != MEMSLOT_NONE) { slot = slotIndex + pool->slots; // `slot = &pool->slots[slotIndex];` does not match. if (address == (u8 *) slot->data) { - if (slot->flags & 2) { - slot->flags ^= 2; - enable_interrupts(flags); - return TRUE; + if (slot->flags == SLOT_USED || slot->flags == SLOT_SAFEGUARD) { + slot->flags |= SLOT_LOCKED; + interrupts_enable(intFlags); + return 1; } } slotIndex = slot->nextIndex; } - enable_interrupts(flags); - return FALSE; + stubbed_printf("\n*** mm Error *** ---> Can't fix the specified block.\n"); + interrupts_enable(intFlags); + return 0; +} + +/** + * Search the memory pool for the current address. + * Check if the slot is marked with 0x02. + * Unset that flag and return 1 if so, otherise 0. + */ +s32 mempool_locked_unset(u8 *address) { + s32 slotIndex; + MemoryPoolSlot *slot; + MemoryPool *pool; + u32 intFlags; + + intFlags = interrupts_disable(); + pool = &gMemoryPools[mempool_get_pool(address)]; + slotIndex = 0; + while (slotIndex != MEMSLOT_NONE) { + slot = slotIndex + pool->slots; // `slot = &pool->slots[slotIndex];` does not match. + if (address == (u8 *) slot->data) { + if (slot->flags & SLOT_LOCKED) { + slot->flags ^= SLOT_LOCKED; + interrupts_enable(intFlags); + return 1; + } + } + slotIndex = slot->nextIndex; + } + stubbed_printf("\n*** mm Error *** ---> Can't unfix the specified block.\n"); + interrupts_enable(intFlags); + return 0; } /** * Returns the index of the memory pool containing the memory address. */ -s32 get_memory_pool_index_containing_address(u8 *address) { +s32 mempool_get_pool(u8 *address) { s32 i; MemoryPool *pool; @@ -431,7 +456,7 @@ s32 get_memory_pool_index_containing_address(u8 *address) { * Clears the current slot of all information, effectively freeing the allocated memory. * Unused slots before and after will be merged with this slot */ -void free_memory_pool_slot(s32 poolIndex, s32 slotIndex) { +void mempool_slot_clear(MemoryPools poolIndex, s32 slotIndex) { s32 nextIndex; s32 prevIndex; s32 tempNextIndex; @@ -450,25 +475,25 @@ void free_memory_pool_slot(s32 poolIndex, s32 slotIndex) { slot = slot; // Fakematch nextSlot = &slots[nextIndex]; prevSlot = &slots[prevIndex]; - slot->flags = 0; - if (nextIndex != -1) { - if (nextSlot->flags == 0) { + slot->flags = SLOT_FREE; + if (nextIndex != MEMSLOT_NONE) { + if (nextSlot->flags == SLOT_FREE) { slot->size += nextSlot->size; tempNextIndex = nextSlot->nextIndex; slot->nextIndex = tempNextIndex; - if (tempNextIndex != -1) { + if (tempNextIndex != MEMSLOT_NONE) { slots[tempNextIndex].prevIndex = slotIndex; } pool->curNumSlots--; slots[pool->curNumSlots].index = nextIndex; } } - if (prevIndex != -1) { - if (prevSlot->flags == 0) { + if (prevIndex != MEMSLOT_NONE) { + if (prevSlot->flags == SLOT_FREE) { prevSlot->size += slot->size; tempNextIndex = slot->nextIndex; prevSlot->nextIndex = tempNextIndex; - if (tempNextIndex != -1) { + if (tempNextIndex != MEMSLOT_NONE) { slots[tempNextIndex].prevIndex = prevIndex; } pool->curNumSlots--; @@ -480,7 +505,7 @@ void free_memory_pool_slot(s32 poolIndex, s32 slotIndex) { /** * Return the address of the first slot of a given memory pool. */ -UNUSED MemoryPoolSlot *get_memory_pool_address(s32 poolIndex) { +UNUSED MemoryPoolSlot *get_memory_pool_address(MemoryPools poolIndex) { return gMemoryPools[poolIndex].slots; } @@ -489,8 +514,8 @@ UNUSED MemoryPoolSlot *get_memory_pool_address(s32 poolIndex) { * Updates the linked list with any entries before and after then returns the new slot index. * If the region cannot fit, return the old slot instead. */ -s32 allocate_memory_pool_slot(s32 poolIndex, s32 slotIndex, s32 size, s32 slotIsTaken, s32 newSlotIsTaken, - u32 colourTag) { +s32 mempool_slot_assign(MemoryPools poolIndex, s32 slotIndex, s32 size, s32 slotIsTaken, s32 newSlotIsTaken, + u32 colourTag) { MemoryPool *pool; MemoryPoolSlot *poolSlots; s32 index; @@ -517,7 +542,7 @@ s32 allocate_memory_pool_slot(s32 poolIndex, s32 slotIndex, s32 size, s32 slotIs poolSlots[index].prevIndex = slotIndex; poolSlots[index].nextIndex = nextIndex; poolSlots[slotIndex].nextIndex = index; - if (nextIndex != -1) { + if (nextIndex != MEMSLOT_NONE) { poolSlots[nextIndex].prevIndex = index; } return index; @@ -587,7 +612,7 @@ UNUSED s32 find_active_pool_slot_colours(void) { for (i = 0; i < gNumberOfMemoryPools; i++) { curSlot = gMemoryPools[i].slots; do { - if (curSlot->flags != 0) { + if (curSlot->flags != SLOT_FREE) { slotColour = curSlot->colourTag; if (slotColour != 0) { curColour = slotColour; @@ -605,10 +630,10 @@ UNUSED s32 find_active_pool_slot_colours(void) { } } slotColour = curSlot->nextIndex; - if (slotColour != -1) { + if (slotColour != MEMSLOT_NONE) { curSlot = &gMemoryPools[i].slots[curSlot->nextIndex]; } - } while (slotColour != -1); + } while (slotColour != MEMSLOT_NONE); } slotColour = 0; for (j = 0; colours[j] != 0 && j < 64; j++) { @@ -629,9 +654,9 @@ UNUSED s32 get_memory_colour_tag_count(u32 colourTag) { s32 i, count; MemoryPoolSlot *slot; count = 0; - slot = &gMemoryPools[0].slots[0]; + slot = &gMemoryPools[POOL_MAIN].slots[0]; for (i = 0; i < MAIN_POOL_SLOT_COUNT; i++) { - if (slot->flags != 0) { + if (slot->flags != SLOT_FREE) { if (colourTag == slot->colourTag) { count++; } @@ -644,7 +669,7 @@ UNUSED s32 get_memory_colour_tag_count(u32 colourTag) { /** * Prints out the counts for each color tag in the main pool. */ -UNUSED void print_memory_colour_tags(void) { +UNUSED void mempool_print_tags_usb(void) { stubbed_printf("RED %d\n", get_memory_colour_tag_count(COLOUR_TAG_RED)); stubbed_printf("GREEN %d\n", get_memory_colour_tag_count(COLOUR_TAG_GREEN)); stubbed_printf("BLUE %d\n", get_memory_colour_tag_count(COLOUR_TAG_BLUE)); @@ -660,7 +685,7 @@ UNUSED void print_memory_colour_tags(void) { * Draws the counts for each color tag in the main pool. * See: https://tcrf.net/Diddy_Kong_Racing#Current_Colors */ -UNUSED void render_memory_colour_tags(void) { +UNUSED void mempool_print_tags_screen(void) { set_render_printf_background_colour(0, 0, 0, 128); render_printf("RED %d\n", get_memory_colour_tag_count(COLOUR_TAG_RED)); render_printf("GREEN %d\n", get_memory_colour_tag_count(COLOUR_TAG_GREEN)); @@ -673,43 +698,41 @@ UNUSED void render_memory_colour_tags(void) { render_printf("ORANGE %d\n\n", get_memory_colour_tag_count(COLOUR_TAG_ORANGE)); } -UNUSED void mmSlotPrint(void) { - s32 i; - s32 skip; - s32 index; - s32 index2; - s32 nextIndex; +/** + * Prints out the status of each memory pool slot. + * Will mark based on what flags the slot has. + * Official name: mmSlotPrint + */ +UNUSED void mempool_print_slots(void) { + int flags; + int nextIndex; + int i; MemoryPoolSlot *slot; - for (i = 0; gNumberOfMemoryPools >= i; i++) { + for (i = 0; i <= gNumberOfMemoryPools; i++) { stubbed_printf("Region = %d loc = %x size = %x\t", i, gMemoryPools[i].slots, gMemoryPools[i].size); - if (i && i) {} // Fakematch slot = &gMemoryPools[i].slots[0]; - index = 1; - index2 = -index; + do { - index = slot->flags; + flags = slot->flags; nextIndex = slot->nextIndex; - skip = nextIndex == index2; - if (index) { - if (((((((((!slot->nextIndex) & 0xFFu) & 0xFFu) & 0xFFu) & 0xFFu) & 0xFFu) & 0xFFu) & 0xFFu) & 0xFFu) { - if (nextIndex && nextIndex) {} // Fakematch - } + + switch(flags) { + case 0: stubbed_printf("FREE"); break; + case 1: stubbed_printf("ALLOCATED"); break; + case 2: stubbed_printf("ALLOCATED,FIXED"); break; + default: stubbed_printf("\n"); break; } - if (skip) { + stubbed_printf("\n"); + if (nextIndex == -1) { continue; + } else { + slot = &gMemoryPools[i].slots[slot->nextIndex]; } - slot = &gMemoryPools[i].slots[slot->nextIndex]; - } while (nextIndex != (-1)); + } while (nextIndex != -1); } } -UNUSED const char D_800E75B4[] = "FREE"; -UNUSED const char D_800E75BC[] = "ALLOCATED"; -UNUSED const char D_800E75C8[] = "ALLOCATED,FIXED"; -UNUSED const char D_800E75D8[] = "\n"; -UNUSED const char D_800E75DC[] = "\n"; - /** * Print out the current status of each existing memory pool. */ diff --git a/src/memory.h b/src/memory.h index 0a20d2d6..850a1c4a 100644 --- a/src/memory.h +++ b/src/memory.h @@ -6,13 +6,31 @@ #include "macros.h" #include "config.h" +typedef enum MemoryPools { + POOL_MAIN, + POOL_OBJECT, + POOL_UNUSED_2, + POOL_UNUSED_3, + + POOL_COUNT +} MemoryPools; + +typedef enum MempoolFlags { + SLOT_FREE = 0, // The slot is free. + SLOT_USED = (1 << 0), // The slot is used. + SLOT_LOCKED = (1 << 1), // The slot is used, and cannot be freed by normal means. + SLOT_SAFEGUARD = (1 << 2), // The slot is used, and marks the stopping point of a global pool clear. +} MempoolFlags; + #define RAM_END 0x80400000 #define EXPANSION_RAM_END 0x80800000 #define MAIN_POOL_SLOT_COUNT 1600 +#define FREE_QUEUE_SIZE 256 +#define MEMSLOT_NONE -1 // Animation related? #define COLOUR_TAG_RED 0xFF0000FF -// Models +// Model headers #define COLOUR_TAG_GREEN 0x00FF00FF // Objects #define COLOUR_TAG_BLUE 0x0000FFFF @@ -28,7 +46,7 @@ #define COLOUR_TAG_GREY 0x7F7F7FFF // Particles #define COLOUR_TAG_SEMITRANS_GREY 0x80808080 -// ??? +// Model data #define COLOUR_TAG_ORANGE 0xFF7F7FFF // Controller Pak #define COLOUR_TAG_BLACK 0x000000FF @@ -65,35 +83,35 @@ typedef struct FreeQueueSlot { } FreeQueueSlot; /* Unknown size */ -typedef struct unk800B7D10 { - u8 pad0[0x14]; - s32 unk14; -} unk800B7D10; +typedef struct StackInfo { + u32 var[5]; + u32 sp; +} StackInfo; -void init_main_memory_pool(void); -MemoryPoolSlot *new_sub_memory_pool(s32 poolDataSize, s32 numSlots); -void *allocate_from_main_pool_safe(s32 size, u32 colourTag); -MemoryPoolSlot *allocate_from_main_pool(s32 size, u32 colourTag); -void *allocate_from_pool_containing_slots(MemoryPoolSlot *slots, s32 size); -void set_free_queue_state(s32 state); -void free_from_memory_pool(void *data); -void clear_free_queue(void); -void add_to_free_queue(void *dataAddress); -s32 func_80071478(u8 *address); -s32 memory_slot_exists(u8 *address); -s32 get_memory_pool_index_containing_address(u8 *address); +void mempool_init_main(void); +MemoryPoolSlot *mempool_new_sub(s32 poolDataSize, s32 numSlots); +void *mempool_alloc_safe(s32 size, u32 colourTag); +MemoryPoolSlot *mempool_alloc(s32 size, u32 colourTag); +void *mempool_alloc_pool(MemoryPoolSlot *slots, s32 size); +void mempool_free_timer(s32 state); +void mempool_free(void *data); +void mempool_free_queue_clear(void); +void mempool_free_queue(void *dataAddress); +s32 mempool_locked_set(u8 *address); +s32 mempool_locked_unset(u8 *address); +s32 mempool_get_pool(u8 *address); u8 *align16(u8 *address); u8 *align8(u8 *address); u8 *align4(u8 *address); -void print_memory_colour_tags(void); -void render_memory_colour_tags(void); -MemoryPoolSlot *new_memory_pool(MemoryPoolSlot *slots, s32 poolSize, s32 numSlots); -void free_memory_pool_slot(s32 poolIndex, s32 slotIndex); -s32 allocate_memory_pool_slot(s32 poolIndex, s32 slotIndex, s32 size, s32 slotIsTaken, s32 newSlotIsTaken, +void mempool_print_tags_usb(void); +void mempool_print_tags_screen(void); +MemoryPoolSlot *mempool_init(MemoryPoolSlot *slots, s32 poolSize, s32 numSlots); +void mempool_slot_clear(MemoryPools poolIndex, s32 slotIndex); +s32 mempool_slot_assign(MemoryPools poolIndex, s32 slotIndex, s32 size, s32 slotIsTaken, s32 newSlotIsTaken, u32 colourTag); s32 get_memory_colour_tag_count(u32 colourTag); -void free_slot_containing_address(u8 *address); -MemoryPoolSlot *allocate_from_memory_pool(s32 poolIndex, s32 size, u32 colourTag); -void *allocate_at_address_in_main_pool(s32 size, u8 *address, u32 colorTag); +void mempool_free_addr(u8 *address); +MemoryPoolSlot *mempool_slot_find(MemoryPools poolIndex, s32 size, u32 colourTag); +void *mempool_alloc_fixed(s32 size, u8 *address, u32 colorTag); #endif diff --git a/src/menu.c b/src/menu.c index d8d7eaef..c31ed50d 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1713,7 +1713,7 @@ GLOBAL_ASM("asm/non_matchings/menu/load_menu_text.s") */ void menu_button_free(void) { if (gWoodPanelTriangles[0] != NULL) { - free_from_memory_pool(gWoodPanelTriangles[0]); + mempool_free(gWoodPanelTriangles[0]); gWoodPanelTriangles[0] = NULL; } gWoodPanelTriangles[1] = NULL; @@ -1905,7 +1905,7 @@ void init_save_data(void) { saveFileSize += sizeof(Settings); saveFileSize = (saveFileSize + 3) & ~3; // align to a 4-byte boundary - *gSavefileData = allocate_from_main_pool_safe(saveFileSize * ARRAY_COUNT(gSavefileData), COLOUR_TAG_WHITE); + *gSavefileData = mempool_alloc_safe(saveFileSize * ARRAY_COUNT(gSavefileData), COLOUR_TAG_WHITE); for (index = 0, offset = 0; index < ARRAY_COUNT(gSavefileData); index++) { gSavefileData[index] = (Settings *) ((u8 *) *gSavefileData + offset); @@ -1916,7 +1916,7 @@ void init_save_data(void) { gCheatsAssetData = (u16 (*)[30]) get_misc_asset(ASSET_MISC_MAGIC_CODES); gNumberOfCheats = (*gCheatsAssetData)[0]; - gMenuText = allocate_from_main_pool_safe(1024 * sizeof(char *), COLOUR_TAG_WHITE); + gMenuText = mempool_alloc_safe(1024 * sizeof(char *), COLOUR_TAG_WHITE); load_menu_text(LANGUAGE_ENGLISH); for (i = 0; i < ARRAY_COUNT(gMenuAssets); i++) { \ @@ -2401,18 +2401,16 @@ void draw_menu_elements(s32 state, MenuElement *elems, f32 scale) { elems->textAlignFlags); break; case 3: - render_textured_rectangle(&sMenuCurrDisplayList, elems->t.drawTexture, xPos, - yPos + gPostraceTextOffset, elems->filterRed, elems->filterGreen, - elems->filterBlue, elems->opacity); + texrect_draw(&sMenuCurrDisplayList, elems->t.drawTexture, xPos, yPos + gPostraceTextOffset, + elems->filterRed, elems->filterGreen, elems->filterBlue, elems->opacity); shouldResetRenderSettings = TRUE; break; case 4: - render_texture_rectangle_scaled(&sMenuCurrDisplayList, elems->t.element, xPos, - yPos + gPostraceTextOffset, elems->details.texture.width / 256.0f, - elems->details.texture.height / 256.0f, - (elems->filterRed << 24) | (elems->filterGreen << 16) | - (elems->filterBlue << 8) | elems->opacity, - elems->textAlignFlags); + texrect_draw_scaled(&sMenuCurrDisplayList, elems->t.element, xPos, yPos + gPostraceTextOffset, + elems->details.texture.width / 256.0f, elems->details.texture.height / 256.0f, + (elems->filterRed << 24) | (elems->filterGreen << 16) | + (elems->filterBlue << 8) | elems->opacity, + elems->textAlignFlags); shouldResetRenderSettings = TRUE; break; case 5: @@ -2526,7 +2524,7 @@ void menu_missing_controller(Gfx **dList, s32 updateRate) { void menu_logos_screen_init(void) { gMenuDelay = 0; sBootScreenTimer = 16.0f; - set_background_fill_colour(0, 0, 0); + bgdraw_fillcolour(0, 0, 0); if (osTvType == TV_TYPE_PAL) { viewport_menu_set(0, 0, 38, SCREEN_WIDTH, SCREEN_HEIGHT - 16); set_viewport_properties(0, VIEWPORT_AUTO, VIEWPORT_AUTO, SCREEN_WIDTH, SCREEN_HEIGHT_PAL); @@ -2781,11 +2779,10 @@ void render_title_screen(UNUSED s32 updateRate, f32 updateRateF) { sMenuGuiOpacity = (gTitleRevealTimer * 8) - 1; sprite_anim_off(FALSE); if (scale != 1.0f) { - render_texture_rectangle_scaled(&sMenuCurrDisplayList, sGameTitleTileOffsets, SCREEN_WIDTH_FLOAT_HALF, - 52.0f, scale, scale, COLOUR_RGBA32(255, 255, 255, 254), TEXRECT_POINT); + texrect_draw_scaled(&sMenuCurrDisplayList, sGameTitleTileOffsets, SCREEN_WIDTH_FLOAT_HALF, 52.0f, scale, + scale, COLOUR_RGBA32(255, 255, 255, 254), TEXRECT_POINT); } else { - render_textured_rectangle(&sMenuCurrDisplayList, sGameTitleTileOffsets, SCREEN_WIDTH_HALF, 52, 255, 255, - 255, 255); + texrect_draw(&sMenuCurrDisplayList, sGameTitleTileOffsets, SCREEN_WIDTH_HALF, 52, 255, 255, 255, 255); } if (!is_controller_missing()) { i = 0; @@ -3368,8 +3365,8 @@ void menu_save_options_init(void) { gMenuDelay = 0; gMenuStage = SAVEMENU_WAIT; gOpacityDecayTimer = 0; - D_80126A64 = (char *) allocate_from_main_pool_safe(0x800, COLOUR_TAG_WHITE); - gSaveMenuFilesSource = (SaveFileData *) allocate_from_main_pool_safe(0xA00, COLOUR_TAG_WHITE); + D_80126A64 = (char *) mempool_alloc_safe(0x800, COLOUR_TAG_WHITE); + gSaveMenuFilesSource = (SaveFileData *) mempool_alloc_safe(0xA00, COLOUR_TAG_WHITE); gSaveMenuFilesDest = &gSaveMenuFilesSource[80]; gSaveMenuOptionCountUpper = 0; gSaveMenuOptionSource = 0; @@ -3536,7 +3533,7 @@ void savemenu_render_element(SaveFileData *file, s32 x, s32 y) { sprite_anim_off(FALSE); } if (drawTexture != NULL) { - render_textured_rectangle(&sMenuCurrDisplayList, drawTexture, x + 60, y + 6, 255, 255, 255, 255); + texrect_draw(&sMenuCurrDisplayList, drawTexture, x + 60, y + 6, 255, 255, 255, 255); } if (text != NULL) { set_text_font(0); @@ -3572,7 +3569,7 @@ void savemenu_render(UNUSED s32 updateRate) { s32 drawOk; s32 drawDialogueBox; - videoWidth = GET_VIDEO_WIDTH(get_video_width_and_height_as_s32()); + videoWidth = GET_VIDEO_WIDTH(fb_size()); drawUpperElements = FALSE; drawLowerElements = FALSE; drawPleaseWait = FALSE; @@ -3622,8 +3619,7 @@ void savemenu_render(UNUSED s32 updateRate) { temp += ((s32) (gOptionBlinkTimer & 0x1F) >> 1); for (scroll = 0; scroll < 2; scroll += 1, temp += 16) { - render_textured_rectangle(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF, temp, 255, 255, - 255, 255); + texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF, temp, 255, 255, 255, 255); } } @@ -4440,8 +4436,8 @@ void savemenu_free(void) { menu_button_free(); menu_assetgroup_free(gSaveMenuObjectIndices); dialogue_clear(7); - free_from_memory_pool((void *) gSaveMenuFilesSource); - free_from_memory_pool((void *) D_80126A64); + mempool_free((void *) gSaveMenuFilesSource); + mempool_free((void *) D_80126A64); } #ifdef NON_EQUIVALENT @@ -4651,7 +4647,7 @@ void menu_boot_init(void) { s32 i; transition_begin(&sMenuTransitionFadeOut); - set_background_prim_colour(0, 0, 0); + bgdraw_primcolour(0, 0, 0); menu_assetgroup_load(sGameTitleTileTextures); // Sets up the 11 texture pointers for the "Diddy Kong Racing" logo. @@ -4718,8 +4714,7 @@ s32 menu_boot_loop(s32 updateRate) { } if (y < 300) { - render_textured_rectangle(&sMenuCurrDisplayList, sGameTitleTileOffsets, SCREEN_WIDTH_HALF, y, 255, 255, 255, - 255); + texrect_draw(&sMenuCurrDisplayList, sGameTitleTileOffsets, SCREEN_WIDTH_HALF, y, 255, 255, 255, 255); reset_render_settings(&sMenuCurrDisplayList); } @@ -4741,7 +4736,7 @@ void bootscreen_init_cpak(void) { s32 i; // Starting point - gBootPakData[0] = allocate_from_main_pool_safe(SAVE_SIZE, COLOUR_TAG_WHITE); + gBootPakData[0] = mempool_alloc_safe(SAVE_SIZE, COLOUR_TAG_WHITE); // Fills in the table. for (i = 1; i < 16; i++) { @@ -4866,8 +4861,8 @@ void pakmenu_render(UNUSED s32 updateRate) { } if (gOpacityDecayTimer < (16 - sControllerPakMenuNumberOfRows)) { if ((gOptionBlinkTimer & 8) != 0) { - render_textured_rectangle(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF, yPos + 8, - 255, 255, 255, 255); + texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF, yPos + 8, 255, 255, 255, + 255); reset_render_settings(&sMenuCurrDisplayList); } } else { @@ -5098,7 +5093,7 @@ s32 menu_controller_pak_loop(s32 updateRate) { */ void pakmenu_free(void) { menu_asset_free(63); - free_from_memory_pool(gBootPakData[0]); + mempool_free(gBootPakData[0]); unload_font(ASSET_FONTS_BIGFONT); } @@ -5598,8 +5593,7 @@ void cheatlist_render(UNUSED s32 updateRate) { return; } if (gOptionBlinkTimer & 8) { - render_textured_rectangle(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF, yPos + 8, 255, 255, - 255, 255); + texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF, yPos + 8, 255, 255, 255, 255); } } @@ -5766,7 +5760,7 @@ void cheatmenu_checksum(void) { blockOffs = 0x1000; numLeft = (s32) &__ROM_END; numLeft -= 0x1000; - tempBuffer = allocate_from_main_pool_safe(size, COLOUR_TAG_BLACK); + tempBuffer = mempool_alloc_safe(size, COLOUR_TAG_BLACK); while (numLeft != 0) { numBytes = numLeft; @@ -5782,7 +5776,7 @@ void cheatmenu_checksum(void) { blockOffs += numBytes; } - free_from_memory_pool(tempBuffer); + mempool_free(tempBuffer); calculated = TRUE; } @@ -6278,9 +6272,9 @@ void charselect_move(s32 playerID, s8 *direction, s32 bounds, u16 menuPickSoundI */ void charselect_free(void) { menu_assetgroup_free(gCharSelectObjectIndices); - set_free_queue_state(0); + mempool_free_timer(0); unload_font(ASSET_FONTS_BIGFONT); - set_free_queue_state(2); + mempool_free_timer(2); gEnteredCharSelectFrom = 0; } @@ -7290,7 +7284,7 @@ void menu_track_select_init(void) { gTracksMenuAdventureHighlightIndex = 0; gTitleScreenLoaded = 0; } - videoWidthAndHeight = get_video_width_and_height_as_s32(); + videoWidthAndHeight = fb_size(); gTrackSelectViewPortX = GET_VIDEO_WIDTH(videoWidthAndHeight); gTrackSelectViewportY = GET_VIDEO_HEIGHT(videoWidthAndHeight); gTrackSelectViewPortHalfX = gTrackSelectViewPortX >> 1; @@ -7306,7 +7300,7 @@ void menu_track_select_init(void) { trackmenu_assets(0); transition_begin(&sMenuTransitionFadeOut); enable_new_screen_transitions(); - set_background_fill_colour(50, 105, 223); + bgdraw_fillcolour(50, 105, 223); for (var_a1 = 0; var_a1 != 5; var_a1++) { temp_a0 = gTracksMenuBgTextureIndices[(var_a1 * 3)]; var_s0 = (TextureHeader **) gTracksMenuBgTextures[var_a1]; @@ -7324,7 +7318,7 @@ void menu_track_select_init(void) { var_s0[1] = NULL; } } - gTrackSelectBgTriangles[0] = (Triangle *) allocate_from_main_pool_safe(2880, COLOUR_TAG_YELLOW); + gTrackSelectBgTriangles[0] = (Triangle *) mempool_alloc_safe(2880, COLOUR_TAG_YELLOW); gTrackSelectBgTriangles[1] = (s32) (&gTrackSelectBgTriangles[0][40]); // 640 bytes forward gTrackSelectBgVertices[0] = (s32) (&gTrackSelectBgTriangles[1][80]); // 1280 bytes forward // gTrackSelectBgVertices[1] = (s32) (&gTrackSelectBgVertices[0][80]); //800 bytes past gTrackSelectBgVertices @@ -7345,7 +7339,7 @@ void menu_track_select_init(void) { gTrackSelectBgTriangles[var_v0]->vi2 = 1; } gTrackSelectVertsFlip = 0; - set_background_draw_function(func_8008F618); + bgdraw_set_func(func_8008F618); viewport_menu_set(0, 80, gTrackSelectViewPortHalfY - (gTrackSelectViewPortHalfY >> 1), SCREEN_HEIGHT, (gTrackSelectViewPortHalfY >> 1) + gTrackSelectViewPortHalfY); copy_viewports_to_stack(); @@ -7583,9 +7577,9 @@ void menu_track_select_unload(void) { camDisableUserView(0, FALSE); menu_assetgroup_free(gTrackSelectObjectIndices); - set_free_queue_state(0); - free_from_memory_pool(gTrackSelectBgTriangles[0]); - set_free_queue_state(2); + mempool_free_timer(0); + mempool_free(gTrackSelectBgTriangles[0]); + mempool_free_timer(2); for (i = 0; i < 15; i += 3) { if (gTracksMenuBgTextureIndices[i] != -1) { menu_asset_free(gTracksMenuBgTextureIndices[i]); @@ -7780,12 +7774,12 @@ void trackmenu_render_2D(s32 x, s32 y, char *hubName, char *trackName, s32 rectO } x1 = temp; if (temp < SCREEN_WIDTH && xTemp > 0) { - render_texture_rectangle_scaled(&sMenuCurrDisplayList, arg7, xTemp, yTemp, sp58, sp54, - (rectOpacity & 0xFF) | ~0xFF, TEXRECT_FLIP_X); + texrect_draw_scaled(&sMenuCurrDisplayList, arg7, xTemp, yTemp, sp58, sp54, (rectOpacity & 0xFF) | ~0xFF, + TEXRECT_FLIP_X); } if (xTemp < SCREEN_WIDTH && x2 > 0) { - render_texture_rectangle_scaled(&sMenuCurrDisplayList, arg7, xTemp, yTemp, sp58, sp54, - (rectOpacity & 0xFF) | ~0xFF, 0); + texrect_draw_scaled(&sMenuCurrDisplayList, arg7, xTemp, yTemp, sp58, sp54, (rectOpacity & 0xFF) | ~0xFF, + 0); } reset_render_settings(&sMenuCurrDisplayList); } @@ -7802,10 +7796,10 @@ void trackmenu_render_2D(s32 x, s32 y, char *hubName, char *trackName, s32 rectO gTrackSelectWoodFrameHeightScale = 1.0f; for (i = 0; i < 4; i++) { if ((1 << i) & arg8) { - render_textured_rectangle(&sMenuCurrDisplayList, gMenuSelectionArrows[i], offsets[(i << 1)] + xTemp + 1, - offsets[(i << 1) + 1] + yTemp + 1, 0, 0, 0, 128); - render_textured_rectangle(&sMenuCurrDisplayList, gMenuSelectionArrows[i], offsets[(i << 1)] + xTemp - 1, - offsets[(i << 1) + 1] + yTemp - 1, 255, 255, 255, 255); + texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrows[i], offsets[(i << 1)] + xTemp + 1, + offsets[(i << 1) + 1] + yTemp + 1, 0, 0, 0, 128); + texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrows[i], offsets[(i << 1)] + xTemp - 1, + offsets[(i << 1) + 1] + yTemp - 1, 255, 255, 255, 255); } } reset_render_settings(&sMenuCurrDisplayList); @@ -8036,7 +8030,7 @@ void trackmenu_input(s32 updateRate) { } } if (gMenuDelay < -22) { - set_background_draw_function(NULL); + bgdraw_set_func(NULL); gIsInTracksMenu = FALSE; } if (gMenuDelay > 30) { @@ -8239,18 +8233,18 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { set_current_dialogue_box_coords(7, 134, regionOffset + 112, 186, regionOffset + 137); render_dialogue_box(&sMenuCurrDisplayList, NULL, NULL, 7); if (gMenuStage <= TRACKMENU_OPT_1) { - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionVehicleTitleTexture, 136, - regionOffset + 114, 255, 255, 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionVehicleTitleTexture, 136, regionOffset + 114, + 255, 255, 255, sMenuGuiOpacity); } else { - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionTTTitleTexture, 136, - regionOffset + 114, 255, 255, 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionTTTitleTexture, 136, regionOffset + 114, 255, + 255, 255, sMenuGuiOpacity); for (k = 0, y = regionOffset + 151; k < 2; k++, y += 24) { if (k == gTracksMenuTimeTrialHighlightIndex) { - render_textured_rectangle(&sMenuCurrDisplayList, gTrackSelectTTImage[k * 3 + 1], 104, y, - 255, 255, 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gTrackSelectTTImage[k * 3 + 1], 104, y, 255, 255, + 255, sMenuGuiOpacity); } else { - render_textured_rectangle(&sMenuCurrDisplayList, gTrackSelectTTImage[k * 3 + 2], 104, y, - 255, 255, 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gTrackSelectTTImage[k * 3 + 2], 104, y, 255, 255, + 255, sMenuGuiOpacity); } } } @@ -8267,7 +8261,7 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { gTracksMenuPlayerNamePositions[j + 1] + regionOffset + 23); render_dialogue_box(&sMenuCurrDisplayList, NULL, NULL, 7); } - render_textured_rectangle( + texrect_draw( &sMenuCurrDisplayList, gTrackSelectPlayerImage[k], gTracksMenuPlayerNamePositions[j], gTracksMenuPlayerNamePositions[j + 1] + regionOffset, 255, 255, 255, sMenuGuiOpacity); j += 2; @@ -8281,19 +8275,19 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { for (temp2 = 0; temp2 < gNumberOfActivePlayers; temp2++) { if (k == gPlayerSelectVehicle[temp2]) { // Highlighted - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionImages[(k * 3) + 1], - gTracksMenuVehicleNamePositions[j + temp2], y, 255, 255, - 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[(k * 3) + 1], + gTracksMenuVehicleNamePositions[j + temp2], y, 255, 255, 255, + sMenuGuiOpacity); } else if (settings->courseFlagsPtr[gTrackIdForPreview] & 2) { // Not highlighted - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionImages[(k * 3) + 2], - gTracksMenuVehicleNamePositions[j + temp2], y, 255, 255, - 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[(k * 3) + 2], + gTracksMenuVehicleNamePositions[j + temp2], y, 255, 255, 255, + sMenuGuiOpacity); } else { // Not available (Ghosted out) - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionImages[(k * 3) + 2], - gTracksMenuVehicleNamePositions[j + temp2], y, 255, 255, - 255, (sMenuGuiOpacity / 2)); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[(k * 3) + 2], + gTracksMenuVehicleNamePositions[j + temp2], y, 255, 255, 255, + (sMenuGuiOpacity / 2)); } } y += 24; @@ -8307,29 +8301,25 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { if (gNumberOfActivePlayers == 1) { if (gMenuStage == TRACKMENU_OPT_1) { // Draw vehicle image for one player - render_textured_rectangle(&sMenuCurrDisplayList, - gRaceSelectionImages[gPlayerSelectVehicle[PLAYER_ONE] * 3], 149, y, - 255, 255, 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[gPlayerSelectVehicle[PLAYER_ONE] * 3], + 149, y, 255, 255, 255, sMenuGuiOpacity); } else { // Draw T.T. image for one player - render_textured_rectangle(&sMenuCurrDisplayList, - gTrackSelectTTImage[gTracksMenuTimeTrialHighlightIndex * 3], 149, - regionOffset + 139, 255, 255, 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gTrackSelectTTImage[gTracksMenuTimeTrialHighlightIndex * 3], + 149, regionOffset + 139, 255, 255, 255, sMenuGuiOpacity); } } if (gNumberOfActivePlayers == 2 && !sp74) { // Draw vehicle image for first player - render_textured_rectangle(&sMenuCurrDisplayList, - gRaceSelectionImages[gPlayerSelectVehicle[PLAYER_ONE] * 3], 79, y, 255, - 255, 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[gPlayerSelectVehicle[PLAYER_ONE] * 3], 79, + y, 255, 255, 255, sMenuGuiOpacity); y = regionOffset + 139; if (gPlayerSelectVehicle[PLAYER_TWO] == 2) { y += 2; } // Draw vehicle image for second player - render_textured_rectangle(&sMenuCurrDisplayList, - gRaceSelectionImages[gPlayerSelectVehicle[PLAYER_TWO] * 3], 176, y, 255, - 255, 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[gPlayerSelectVehicle[PLAYER_TWO] * 3], 176, + y, 255, 255, 255, sMenuGuiOpacity); } reset_render_settings(&sMenuCurrDisplayList); if (gNumberOfActivePlayers <= 2 && !sp74) { @@ -8415,8 +8405,8 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { } if (gNumberOfActivePlayers == 1 && gMenuStage > TRACKMENU_MIRROR && trackmenu_staff_beaten(gTrackIdForPreview) >= 0) { - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionTTTexture, 204, regionOffset + 122, 255, 255, - 255, sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionTTTexture, 204, regionOffset + 122, 255, 255, 255, + sMenuGuiOpacity); reset_render_settings(&sMenuCurrDisplayList); } if (gTrackSelectCursorX != 5) { @@ -8569,9 +8559,8 @@ void adventuretrack_render(UNUSED s32 updateRate, s32 arg1, s32 arg2) { if (arg2 == 0) { if (is_time_trial_enabled()) { if (trackmenu_staff_beaten(mapID) >= 0) { - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionTTTexture, - SCREEN_HEIGHT - 36, yOffset + 122, 255, 255, 255, - sMenuGuiOpacity); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionTTTexture, SCREEN_HEIGHT - 36, + yOffset + 122, 255, 255, 255, sMenuGuiOpacity); } set_text_font(0); set_text_colour(255, 64, 64, 96, 255); @@ -8604,8 +8593,8 @@ void adventuretrack_render(UNUSED s32 updateRate, s32 arg1, s32 arg2) { set_current_dialogue_background_colour(7, 255, greenAmount, 0, 255); set_current_dialogue_box_coords(7, 134, yOffset + 112, 186, yOffset + 137); render_dialogue_box(&sMenuCurrDisplayList, NULL, NULL, 7); - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionVehicleTitleTexture, 136, - yOffset + 114, 255, 255, 255, 255); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionVehicleTitleTexture, 136, yOffset + 114, 255, 255, + 255, 255); y = yOffset + 139; savedY = y; @@ -8614,11 +8603,11 @@ void adventuretrack_render(UNUSED s32 updateRate, s32 arg1, s32 arg2) { alpha = (arg1 < 2 && get_map_default_vehicle(mapID) != (Vehicle) i) ? 128 : 255; if ((1 << i) & mask) { if (i == gPlayerSelectVehicle[0]) { - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionImages[i * 3 + 1], 104, - y, 255, 255, 255, 255); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[i * 3 + 1], 104, y, 255, 255, + 255, 255); } else { - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionImages[i * 3 + 2], 104, - y, 255, 255, 255, alpha); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[i * 3 + 2], 104, y, 255, 255, + 255, alpha); } y += 24; } @@ -8627,8 +8616,8 @@ void adventuretrack_render(UNUSED s32 updateRate, s32 arg1, s32 arg2) { if (gPlayerSelectVehicle[0] == 2) { y += 2; } - render_textured_rectangle(&sMenuCurrDisplayList, gRaceSelectionImages[gPlayerSelectVehicle[0] * 3], - 149, y, 255, 255, 255, 255); + texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[gPlayerSelectVehicle[0] * 3], 149, y, 255, + 255, 255, 255); reset_render_settings(&sMenuCurrDisplayList); gMenuImages[7].x = 21.0f; gMenuImages[7].y = -52.0f; @@ -9137,7 +9126,7 @@ void postrace_start(s32 finishState, s32 worldID) { } reset_controller_sticks(); race_postrace_type(finishState); - gTrackSelectViewPortX = get_video_width_and_height_as_s32(); + gTrackSelectViewPortX = fb_size(); gTrackSelectViewportY = GET_VIDEO_HEIGHT(gTrackSelectViewPortX) & 0xFFFF; gTrackSelectViewPortX = GET_VIDEO_WIDTH(gTrackSelectViewPortX); gTrackSelectViewPortHalfX = gTrackSelectViewPortX >> 1; @@ -9160,7 +9149,7 @@ void postrace_start(s32 finishState, s32 worldID) { } gMenuMosaicShift = var_v1[2]; if (get_game_mode() == GAMEMODE_INGAME) { - mosaic_init(gMenuMosaic1, gMenuMosaic2, gMenuMosaicShift); + bgdraw_texture_init(gMenuMosaic1, gMenuMosaic2, gMenuMosaicShift); } camEnableUserView(0, TRUE); viewport_menu_set(0, 0, 0, gTrackSelectViewPortX, gTrackSelectViewportY); @@ -9518,7 +9507,7 @@ s32 menu_postrace(Gfx **dList, MatrixS **matrices, Vertex **vertices, s32 update func_80094D28(updateRate); } } else { - mosaic_init(NULL, NULL, 0); + bgdraw_texture_init(NULL, NULL, 0); } update_controller_sticks(); buttonsPressed = 0; @@ -9908,8 +9897,8 @@ void results_render(UNUSED s32 updateRate, f32 opacity) { } else { spA0 = 255; } - render_textured_rectangle(&sMenuCurrDisplayList, gRacerPortraits[settings->racers[i].character], x2 - 20, - 54 - (s32) (240 * opacity), spA0, spA0, spA0, 255); + texrect_draw(&sMenuCurrDisplayList, gRacerPortraits[settings->racers[i].character], x2 - 20, + 54 - (s32) (240 * opacity), spA0, spA0, spA0, 255); x2 += 64; } @@ -11226,8 +11215,8 @@ void ghostmenu_render(UNUSED s32 updateRate) { } } textBuffer[i] = '\0'; // Set NULL terminator - render_texture_rectangle_scaled(&sMenuCurrDisplayList, gDrawTexWorldBgs[currentWorldId], x, y, 0.75f, 0.8125f, - COLOUR_RGBA32(255, 255, 255, 255), 0); + texrect_draw_scaled(&sMenuCurrDisplayList, gDrawTexWorldBgs[currentWorldId], x, y, 0.75f, 0.8125f, + COLOUR_RGBA32(255, 255, 255, 255), 0); func_80080E90(&sMenuCurrDisplayList, 40, y, 240, 52, 4, 4, 32, 80, 176, 128); if (scroll == gGhostMenuOption) { func_80080E90(&sMenuCurrDisplayList, 40, y, 240, 52, 4, 4, highlight, highlight, highlight, highlight); @@ -11240,9 +11229,8 @@ void ghostmenu_render(UNUSED s32 updateRate) { set_text_colour(200, 228, 80, 255, 255); draw_text(&sMenuCurrDisplayList, gGhostDataElementPositions[0] + 40, gGhostDataElementPositions[1] + y, textBuffer, ALIGN_MIDDLE_CENTER); - render_textured_rectangle(&sMenuCurrDisplayList, gRacerPortraits[gGhostCharacterIDsMenu[scroll]], - gGhostDataElementPositions[2] + 40, gGhostDataElementPositions[3] + y, 255, 255, 255, - 255); + texrect_draw(&sMenuCurrDisplayList, gRacerPortraits[gGhostCharacterIDsMenu[scroll]], + gGhostDataElementPositions[2] + 40, gGhostDataElementPositions[3] + y, 255, 255, 255, 255); switch (gGhostVehicleIDsMenu[scroll]) { case 1: vehicleSelectTex = gRaceSelectionHoverTex; @@ -11254,9 +11242,8 @@ void ghostmenu_render(UNUSED s32 updateRate) { vehicleSelectTex = gRaceSelectionCarTex; break; } - render_texture_rectangle_scaled(&sMenuCurrDisplayList, vehicleSelectTex, (gGhostDataElementPositions[4] + 40), - (gGhostDataElementPositions[5] + y), 0.625f, 0.625f, - COLOUR_RGBA32(255, 255, 255, 255), 0); + texrect_draw_scaled(&sMenuCurrDisplayList, vehicleSelectTex, (gGhostDataElementPositions[4] + 40), + (gGhostDataElementPositions[5] + y), 0.625f, 0.625f, COLOUR_RGBA32(255, 255, 255, 255), 0); reset_render_settings(&sMenuCurrDisplayList); gMenuImages[7].x = (gGhostDataElementPositions[6] - SCREEN_HEIGHT_HALF); gMenuImages[7].y = ((-gGhostDataElementPositions[7] - y) + heightAdjust + SCREEN_HEIGHT_HALF); @@ -11299,16 +11286,13 @@ void ghostmenu_render(UNUSED s32 updateRate) { } if (gOptionBlinkTimer & 0x10) { if ((gOpacityDecayTimer + 3) < gGhostMenuTotal) { - render_textured_rectangle(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF + 1, y + 3, 0, - 0, 0, 128); - render_textured_rectangle(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF - 1, y + 1, 255, - 255, 255, 255); + texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF + 1, y + 3, 0, 0, 0, 128); + texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF - 1, y + 1, 255, 255, 255, + 255); } if (gOpacityDecayTimer > 0) { - render_textured_rectangle(&sMenuCurrDisplayList, gMenuSelectionArrowUp, SCREEN_WIDTH_HALF + 1, 54, 0, 0, 0, - 128); - render_textured_rectangle(&sMenuCurrDisplayList, gMenuSelectionArrowUp, SCREEN_WIDTH_HALF - 1, 52, 255, 255, - 255, 255); + texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowUp, SCREEN_WIDTH_HALF + 1, 54, 0, 0, 0, 128); + texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowUp, SCREEN_WIDTH_HALF - 1, 52, 255, 255, 255, 255); } reset_render_settings(&sMenuCurrDisplayList); } @@ -11515,8 +11499,8 @@ s32 menu_cinematic_loop(UNUSED s32 updateRate) { } if (gCinematicPortraits != NULL) { for (i = 0; gCinematicPortraits[i] != -1; i++) { - render_textured_rectangle(&sMenuCurrDisplayList, gRacerPortraits[gCinematicPortraits[i]], 24, 16 + (44 * i), - 255, 255, 255, 255); + texrect_draw(&sMenuCurrDisplayList, gRacerPortraits[gCinematicPortraits[i]], 24, 16 + (44 * i), 255, 255, + 255, 255); } } gIgnorePlayerInputTime = 0; @@ -11552,7 +11536,7 @@ void menu_credits_init(void) { D_80126BD0 = 0; D_80126BD8 = 0; D_80126BE0 = 0; - set_background_fill_colour(0, 0, 0); + bgdraw_fillcolour(0, 0, 0); if (osTvType == TV_TYPE_PAL) { viewport_menu_set(0, 0, 38, SCREEN_WIDTH, 224); set_viewport_properties(0, VIEWPORT_AUTO, VIEWPORT_AUTO, SCREEN_WIDTH, SCREEN_HEIGHT_PAL); @@ -11687,10 +11671,10 @@ s32 menu_credits_loop(s32 updateRate) { } var_s5 = gMenuCurIndex; temp_s4 = (var_s4 * 5) + 72; - temp_s2 = (get_video_width_and_height_as_s32() >> 17) & 0x7FFF; // Truncated video height? Height / 2? + temp_s2 = (fb_size() >> 17) & 0x7FFF; // Truncated video height? Height / 2? for (i = 0; i < ARRAY_COUNT(gRacerPortraits); i++) { - render_textured_rectangle(&sMenuCurrDisplayList, gRacerPortraits[i], ((sins(var_s5) * temp_s4) >> 16) + 140, - ((coss(var_s5) * temp_s4) >> 16) + (temp_s2 - 20), 255, 255, 255, 255); + texrect_draw(&sMenuCurrDisplayList, gRacerPortraits[i], ((sins(var_s5) * temp_s4) >> 16) + 140, + ((coss(var_s5) * temp_s4) >> 16) + (temp_s2 - 20), 255, 255, 255, 255); var_s5 += 0x1999; } reset_render_settings(&sMenuCurrDisplayList); @@ -12237,9 +12221,9 @@ void menu_asset_free(s32 assetID) { if (gMenuAssets[assetID] != NULL) { if (((*gAssetsMenuElementIds)[assetID] & HUD_ELEMENT_TEXTURE) == HUD_ELEMENT_TEXTURE && gMenuAssets[assetID] != NULL) { - set_free_queue_state(0); + mempool_free_timer(0); free_texture(gMenuAssets[assetID]); - set_free_queue_state(2); + mempool_free_timer(2); } else { if ((*gAssetsMenuElementIds)[assetID] & HUD_ELEMENT_SPRITE) { free_sprite((Sprite *) (u32) gMenuAssets[assetID]); @@ -12259,11 +12243,11 @@ void menu_asset_free(s32 assetID) { } if (gMenuObjectsCount == 0) { if (gMenuImages != NULL) { - free_from_memory_pool(gMenuImages); + mempool_free(gMenuImages); gMenuImages = NULL; } if (*gAssetsMenuElementIds != NULL) { - free_from_memory_pool(*gAssetsMenuElementIds); + mempool_free(*gAssetsMenuElementIds); *gAssetsMenuElementIds = NULL; gMenuElementIdCount = 0; } @@ -12339,7 +12323,7 @@ void menu_imagegroup_load(s16 *imageSet) { */ void menu_image_load(s32 imageID) { if (gMenuImages == NULL) { - gMenuImages = allocate_from_main_pool_safe(sizeof(MenuAsset) * 18, COLOUR_TAG_RED); + gMenuImages = mempool_alloc_safe(sizeof(MenuAsset) * 18, COLOUR_TAG_RED); } gMenuImages[imageID].y_rotation = sMenuImageProperties[imageID].y_rotation; diff --git a/src/object_models.c b/src/object_models.c index 1563afb0..22080e30 100644 --- a/src/object_models.c +++ b/src/object_models.c @@ -51,8 +51,8 @@ void allocate_object_model_pools(void) { s32 i; s32 checksum; - D_8011D624 = allocate_from_main_pool_safe(0x230, COLOUR_TAG_GREEN); - D_8011D628 = allocate_from_main_pool_safe(0x190, COLOUR_TAG_GREEN); + D_8011D624 = mempool_alloc_safe(0x230, COLOUR_TAG_GREEN); + D_8011D628 = mempool_alloc_safe(0x190, COLOUR_TAG_GREEN); D_8011D62C = 0; D_8011D634 = 0; gObjectModelTable = (s32 *) load_asset_section_from_rom(ASSET_OBJECT_MODELS_TABLE); @@ -63,7 +63,7 @@ void allocate_object_model_pools(void) { gNumModelIDs--; gAnimationTable = (s16 *) load_asset_section_from_rom(ASSET_ANIMATION_IDS); gObjectAnimationTable = (s32 *) load_asset_section_from_rom(ASSET_OBJECT_ANIMATIONS_TABLE); - D_8011D644 = (s32) allocate_from_main_pool_safe(0xC00, COLOUR_TAG_GREEN); + D_8011D644 = (s32) mempool_alloc_safe(0xC00, COLOUR_TAG_GREEN); D_8011D640 = 0; #ifdef ANTI_TAMPER @@ -121,7 +121,7 @@ Object_68 *object_model_init(s32 modelID, s32 flags) { temp_s0 = gObjectModelTable[modelID]; sp48 = gObjectModelTable[modelID + 1] - temp_s0; sp34 = get_asset_uncompressed_size(ASSET_OBJECT_MODELS, temp_s0) + 0x80; - objMdl = (ObjectModel *) allocate_from_main_pool(sp34, COLOUR_TAG_RED); + objMdl = (ObjectModel *) mempool_alloc(sp34, COLOUR_TAG_RED); if (objMdl == NULL) { return NULL; } @@ -184,7 +184,7 @@ Object_68 *func_8005FCD0(ObjectModel *model, s32 arg1) { if ((model->numberOfAnimations != 0) && (arg1 & 8)) { temp = ((model->numberOfVertices << 1) * 10) + 36; - result = (Object_68 *) allocate_from_main_pool((model->unk4A * 6) + temp, COLOUR_TAG_BLUE); + result = (Object_68 *) mempool_alloc((model->unk4A * 6) + temp, COLOUR_TAG_BLUE); if (result == NULL) { return NULL; } @@ -194,7 +194,7 @@ Object_68 *func_8005FCD0(ObjectModel *model, s32 arg1) { result->unk1E = 2; } else if ((model->unk40 != NULL) && (arg1 & 1)) { temp = (model->numberOfVertices * 10); - result = (Object_68 *) allocate_from_main_pool(temp + 36, COLOUR_TAG_BLUE); + result = (Object_68 *) mempool_alloc(temp + 36, COLOUR_TAG_BLUE); if (result == NULL) { return NULL; } @@ -204,7 +204,7 @@ Object_68 *func_8005FCD0(ObjectModel *model, s32 arg1) { result->unk4[2] = NULL; result->unk1E = 1; } else { - result = (Object_68 *) allocate_from_main_pool(36, COLOUR_TAG_BLUE); + result = (Object_68 *) mempool_alloc(36, COLOUR_TAG_BLUE); if (result == NULL) { return NULL; } @@ -269,7 +269,7 @@ void free_3d_model(ObjectModel **modelPtr) { model = *modelPtr; model->references--; if (model->references > 0) { // Model is still used, so free the reference and return. - free_from_memory_pool(modelPtr); + mempool_free(modelPtr); return; } @@ -286,7 +286,7 @@ void free_3d_model(ObjectModel **modelPtr) { D_8011D634++; D_8011D624[modelIndex << 1] = -1; D_8011D624[(modelIndex << 1) + 1] = -1; - free_from_memory_pool(modelPtr); + mempool_free(modelPtr); } } } @@ -312,15 +312,15 @@ void free_model_data(ObjectModel *mdl) { } // ??? if (mdl->unkC != NULL) { - free_from_memory_pool(mdl->unkC); + mempool_free(mdl->unkC); } // ??? if (mdl->unk10 != NULL) { - free_from_memory_pool(mdl->unk10); + mempool_free(mdl->unk10); } // ??? if (mdl->unk40 != NULL) { - free_from_memory_pool(mdl->unk40); + mempool_free(mdl->unk40); } // free the animations if (mdl->animations != NULL) { @@ -328,15 +328,15 @@ void free_model_data(ObjectModel *mdl) { s32 animIndex = 0; if (mdl->numberOfAnimations != 0) { do { - free_from_memory_pool(mdl->animations[animIndex].anim - 1); + mempool_free(mdl->animations[animIndex].anim - 1); animsFreed++; animIndex++; } while (animsFreed < mdl->numberOfAnimations); - free_from_memory_pool(mdl->animations); + mempool_free(mdl->animations); } } // free the model itself - free_from_memory_pool(mdl); + mempool_free(mdl); } GLOBAL_ASM("asm/non_matchings/object_models/func_8006017C.s") @@ -418,7 +418,7 @@ s32 func_80061A00(ObjectModel *model, s32 animTableIndex) { } } model->numberOfAnimations = end - start; - allocAnimData = (ObjectModel_44 *) allocate_from_main_pool(model->numberOfAnimations * 8, COLOUR_TAG_RED); + allocAnimData = (ObjectModel_44 *) mempool_alloc(model->numberOfAnimations * 8, COLOUR_TAG_RED); model->animations = allocAnimData; if (allocAnimData == NULL) { return 1; @@ -430,12 +430,12 @@ s32 func_80061A00(ObjectModel *model, s32 animTableIndex) { animAddress = gObjectAnimationTable[start + 1] - assetOffset; assetSize = animAddress; size = get_asset_uncompressed_size(ASSET_OBJECT_ANIMATIONS, assetOffset) + 0x80; - model->animations[i].animData = (u8 *) allocate_from_main_pool(size, COLOUR_TAG_RED); + model->animations[i].animData = (u8 *) mempool_alloc(size, COLOUR_TAG_RED); if (model->animations[i].animData == NULL) { for (j = 0; j < i2; j++) { - free_from_memory_pool(model->animations[j].animData); + mempool_free(model->animations[j].animData); } - free_from_memory_pool(model->animations); + mempool_free(model->animations); model->animations = NULL; return 1; } diff --git a/src/objects.c b/src/objects.c index 74845d08..bd235151 100644 --- a/src/objects.c +++ b/src/objects.c @@ -345,8 +345,7 @@ void func_8000B020(s32 numberOfVertices, s32 numberOfTriangles) { LevelObjectEntry_unk8000B020 objEntry; s32 i; - D_800DC754[0] = - (s32) allocate_from_main_pool_safe(((numberOfTriangles * 16) + (numberOfVertices * 10)) * 2, COLOUR_TAG_BLUE); + D_800DC754[0] = (s32) mempool_alloc_safe(((numberOfTriangles * 16) + (numberOfVertices * 10)) * 2, COLOUR_TAG_BLUE); D_800DC754[1] = D_800DC754[0] + (numberOfTriangles * 16); D_800DC74C[0] = D_800DC754[1] + (numberOfTriangles * 16); D_800DC74C[1] = D_800DC74C[0] + (numberOfVertices * 10); @@ -407,7 +406,7 @@ void func_8000B290(void) { temp_a0 = D_800DC754[0]; if (temp_a0 != 0) { - free_from_memory_pool((void *) temp_a0); + mempool_free((void *) temp_a0); D_800DC754[0] = 0; D_800DC754[1] = 0; D_800DC74C[0] = 0; @@ -561,32 +560,32 @@ void allocate_object_pools(void) { s32 i; set_world_shading(0.67f, 0.33f, 0, -0x2000, 0); - gObjectMemoryPool = (Object *) new_sub_memory_pool(OBJECT_POOL_SIZE, OBJECT_SLOT_COUNT); - gParticlePtrList = allocate_from_main_pool_safe(sizeof(uintptr_t) * 200, COLOUR_TAG_BLUE); - D_8011AE6C = allocate_from_main_pool_safe(sizeof(uintptr_t) * 20, COLOUR_TAG_BLUE); - D_8011AE74 = allocate_from_main_pool_safe(sizeof(uintptr_t) * 128, COLOUR_TAG_BLUE); - gTrackCheckpoints = allocate_from_main_pool_safe(sizeof(CheckpointNode) * MAX_CHECKPOINTS, COLOUR_TAG_BLUE); - gCameraObjList = allocate_from_main_pool_safe(sizeof(uintptr_t *) * CAMCONTROL_COUNT, COLOUR_TAG_BLUE); - gRacers = allocate_from_main_pool_safe(sizeof(uintptr_t) * 10, COLOUR_TAG_BLUE); - gRacersByPort = allocate_from_main_pool_safe(sizeof(uintptr_t) * 10, COLOUR_TAG_BLUE); - gRacersByPosition = allocate_from_main_pool_safe(sizeof(uintptr_t) * 10, COLOUR_TAG_BLUE); - gAINodes = allocate_from_main_pool_safe(sizeof(uintptr_t) * AINODE_COUNT, COLOUR_TAG_BLUE); - D_8011ADCC = allocate_from_main_pool_safe(8, COLOUR_TAG_BLUE); - D_8011AFF4 = allocate_from_main_pool_safe(sizeof(unk800179D0) * 16, COLOUR_TAG_BLUE); + gObjectMemoryPool = (Object *) mempool_new_sub(OBJECT_POOL_SIZE, OBJECT_SLOT_COUNT); + gParticlePtrList = mempool_alloc_safe(sizeof(uintptr_t) * 200, COLOUR_TAG_BLUE); + D_8011AE6C = mempool_alloc_safe(sizeof(uintptr_t) * 20, COLOUR_TAG_BLUE); + D_8011AE74 = mempool_alloc_safe(sizeof(uintptr_t) * 128, COLOUR_TAG_BLUE); + gTrackCheckpoints = mempool_alloc_safe(sizeof(CheckpointNode) * MAX_CHECKPOINTS, COLOUR_TAG_BLUE); + gCameraObjList = mempool_alloc_safe(sizeof(uintptr_t *) * CAMCONTROL_COUNT, COLOUR_TAG_BLUE); + gRacers = mempool_alloc_safe(sizeof(uintptr_t) * 10, COLOUR_TAG_BLUE); + gRacersByPort = mempool_alloc_safe(sizeof(uintptr_t) * 10, COLOUR_TAG_BLUE); + gRacersByPosition = mempool_alloc_safe(sizeof(uintptr_t) * 10, COLOUR_TAG_BLUE); + gAINodes = mempool_alloc_safe(sizeof(uintptr_t) * AINODE_COUNT, COLOUR_TAG_BLUE); + D_8011ADCC = mempool_alloc_safe(8, COLOUR_TAG_BLUE); + D_8011AFF4 = mempool_alloc_safe(sizeof(unk800179D0) * 16, COLOUR_TAG_BLUE); gAssetsLvlObjTranslationTable = (s16 *) load_asset_section_from_rom(ASSET_LEVEL_OBJECT_TRANSLATION_TABLE); gAssetsLvlObjTranslationTableLength = (get_size_of_asset_section(ASSET_LEVEL_OBJECT_TRANSLATION_TABLE) >> 1) - 1; while (gAssetsLvlObjTranslationTable[gAssetsLvlObjTranslationTableLength] == 0) { gAssetsLvlObjTranslationTableLength--; } - gSpawnObjectHeap = allocate_from_main_pool_safe(sizeof(uintptr_t) * 512, COLOUR_TAG_BLUE); + gSpawnObjectHeap = mempool_alloc_safe(sizeof(uintptr_t) * 512, COLOUR_TAG_BLUE); gAssetsObjectHeadersTable = (s32 *) load_asset_section_from_rom(ASSET_OBJECT_HEADERS_TABLE); gAssetsObjectHeadersTableLength = 0; while (-1 != gAssetsObjectHeadersTable[gAssetsObjectHeadersTableLength]) { gAssetsObjectHeadersTableLength++; } gAssetsObjectHeadersTableLength--; - gLoadedObjectHeaders = allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength * 4, COLOUR_TAG_WHITE); - gObjectHeaderReferences = allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength, COLOUR_TAG_WHITE); + gLoadedObjectHeaders = mempool_alloc_safe(gAssetsObjectHeadersTableLength * 4, COLOUR_TAG_WHITE); + gObjectHeaderReferences = mempool_alloc_safe(gAssetsObjectHeadersTableLength, COLOUR_TAG_WHITE); for (i = 0; i < gAssetsObjectHeadersTableLength; i++) { (*gObjectHeaderReferences)[i] = 0; @@ -603,7 +602,7 @@ void allocate_object_pools(void) { &gAssetsMiscSection[gAssetsMiscTable[ASSET_MISC_MAGIC_CODES]], (gAssetsMiscTable[ASSET_MISC_TITLE_SCREEN_DEMO_IDS] - gAssetsMiscTable[ASSET_MISC_MAGIC_CODES]) * sizeof(s32 *)); - gObjPtrList = allocate_from_main_pool_safe(sizeof(uintptr_t) * OBJECT_SLOT_COUNT, COLOUR_TAG_BLUE); + gObjPtrList = mempool_alloc_safe(sizeof(uintptr_t) * OBJECT_SLOT_COUNT, COLOUR_TAG_BLUE); gFirstTimeFinish = 0; gTimeTrialEnabled = 0; gIsTimeTrial = FALSE; @@ -716,8 +715,8 @@ void free_all_objects(void) { gObjectCount = 0; gObjectListStart = 0; clear_object_pointers(); - free_from_memory_pool((void *) D_8011AEB0[0]); - free_from_memory_pool((void *) D_8011AEB0[1]); + mempool_free((void *) D_8011AEB0[0]); + mempool_free((void *) D_8011AEB0[1]); } /** @@ -736,7 +735,7 @@ ObjectHeader *load_object_header(s32 index) { } assetOffset = gAssetsObjectHeadersTable[index]; size = gAssetsObjectHeadersTable[index + 1] - assetOffset; - address = allocate_from_pool_containing_slots((MemoryPoolSlot *) gObjectMemoryPool, size); + address = mempool_alloc_pool((MemoryPoolSlot *) gObjectMemoryPool, size); if (address != NULL) { load_asset_to_address(ASSET_OBJECTS, (u32) address, assetOffset, size); address->unk24 = (ObjectHeader24 *) ((uintptr_t) address + (uintptr_t) address->unk24); @@ -761,7 +760,7 @@ void try_free_object_header(s32 index) { if ((*gObjectHeaderReferences)[index] != 0) { (*gObjectHeaderReferences)[index]--; if ((*gObjectHeaderReferences)[index] == 0) { - free_from_memory_pool((void *) (*gLoadedObjectHeaders)[index]); + mempool_free((void *) (*gLoadedObjectHeaders)[index]); } } } @@ -807,7 +806,7 @@ void func_8000C8F8(s32 arg0, s32 arg1) { } D_8011AD3E = 0; - mem = allocate_from_main_pool_safe(0x3000, COLOUR_TAG_BLUE); + mem = mempool_alloc_safe(0x3000, COLOUR_TAG_BLUE); D_8011AEB0[arg1] = mem; D_8011AE98[arg1] = (u8 *) (D_8011AEB0[arg1] + 4); D_8011AEA0[arg1] = 0; @@ -828,7 +827,7 @@ void func_8000C8F8(s32 arg0, s32 arg1) { 0x20; load_asset_to_address(ASSET_LEVEL_OBJECT_MAPS, (u32) compressedAsset, assetOffset, assetSize); gzip_inflate(compressedAsset, (u8 *) mem); - free_from_memory_pool(objMapTable); + mempool_free(objMapTable); D_8011AE98[arg1] = (u8 *) (D_8011AEB0[arg1] + 4); D_8011AEA0[arg1] = *mem; D_8011AEC0 = arg1; @@ -1059,7 +1058,7 @@ void func_8000CC7C(Vehicle vehicle, u32 arg1, s32 arg2) { } if (((!(curObj->segment.trans.y_rotation)) && (!(curObj->segment.trans.y_rotation))) && (!(curObj->segment.trans.y_rotation))) {} - entry = allocate_from_main_pool_safe(sizeof(LevelObjectEntry_Unk8000CC7C), COLOUR_TAG_YELLOW); + entry = mempool_alloc_safe(sizeof(LevelObjectEntry_Unk8000CC7C), COLOUR_TAG_YELLOW); entry->unkC = 0; entry->unkA = 0; entry->unk8 = 0; @@ -1352,9 +1351,9 @@ void func_8000CC7C(Vehicle vehicle, u32 arg1, s32 arg2) { gEventCountdown = 0; start_level_music(1.0f); } - set_free_queue_state(0); - free_from_memory_pool(entry); - set_free_queue_state(2); + mempool_free_timer(0); + mempool_free(entry); + mempool_free_timer(2); } #else GLOBAL_ASM("asm/non_matchings/objects/func_8000CC7C.s") @@ -1849,7 +1848,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { curObj->lightData = address; sizeOfobj = (s32) ((uintptr_t) address + (curObj->segment.header->numLightSources * 4)) - (uintptr_t) curObj; } - newObj = allocate_from_pool_containing_slots((MemoryPoolSlot *) gObjectMemoryPool, sizeOfobj); + newObj = mempool_alloc_pool((MemoryPoolSlot *) gObjectMemoryPool, sizeOfobj); if (newObj == NULL) { if (D_8011AE50 != NULL) { free_texture((u32) D_8011AE50); @@ -1928,7 +1927,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { } objFreeAssets(newObj, assetCount, objType); try_free_object_header(var_a0); - free_from_memory_pool(newObj); + mempool_free(newObj); if (arg1 & 1) { gObjectCount--; } @@ -2043,7 +2042,7 @@ s32 func_8000F99C(Object *obj) { if (temp_v0 != NULL) { objFreeAssets(temp_v0, temp_v0->segment.header->numberOfModelIds, temp_v0->segment.header->modelType); try_free_object_header(temp_v0->segment.object.unk2C); - free_from_memory_pool(temp_v0); + mempool_free(temp_v0); } } return TRUE; @@ -2151,7 +2150,7 @@ Object *func_8000FD54(s32 objectHeaderIndex) { return NULL; } objSize = (objHeader->numberOfModelIds * 4) + 0x80; - object = (Object *) allocate_from_main_pool(objSize, COLOUR_TAG_BLUE); + object = (Object *) mempool_alloc(objSize, COLOUR_TAG_BLUE); if (object == NULL) { try_free_object_header(objectHeaderIndex); return NULL; @@ -2193,7 +2192,7 @@ Object *func_8000FD54(s32 objectHeaderIndex) { if (failedToLoadModel) { objFreeAssets(object, numModelIds, modelType); try_free_object_header(objectHeaderIndex); - free_from_memory_pool(object); + mempool_free(object); return NULL; } @@ -4605,7 +4604,7 @@ s32 timetrial_load_staff_ghost(s32 mapId) { &gTTGhostTimeToBeat); } - free_from_memory_pool(ghostTable); + mempool_free(ghostTable); return ret; } diff --git a/src/particles.c b/src/particles.c index 6e156979..51fc7b64 100644 --- a/src/particles.c +++ b/src/particles.c @@ -168,60 +168,60 @@ void func_800AE2D8(void) { for (i = 0; i < D_800E2E64; i++) { free_sprite(D_800E2E60[i]); } - free_from_memory_pool(D_800E2E60); + mempool_free(D_800E2E60); D_800E2E60 = 0; } } void func_800AE374(void) { if (D_800E2CA8 != NULL) { - free_from_memory_pool(D_800E2CA8); + mempool_free(D_800E2CA8); D_800E2CA8 = NULL; } if (D_800E2CB4 != NULL) { - free_from_memory_pool(D_800E2CB4); + mempool_free(D_800E2CB4); D_800E2CB4 = NULL; } if (D_800E2CC0 != NULL) { - free_from_memory_pool(D_800E2CC0); + mempool_free(D_800E2CC0); D_800E2CC0 = NULL; } if (D_800E2CCC != NULL) { - free_from_memory_pool(D_800E2CCC); + mempool_free(D_800E2CCC); D_800E2CCC = NULL; } if (D_800E2CD8 != NULL) { - free_from_memory_pool(D_800E2CD8); + mempool_free(D_800E2CD8); D_800E2CD8 = NULL; } } void func_800AE438(void) { if (D_800E2CE0 != NULL) { - free_from_memory_pool(D_800E2CE0); + mempool_free(D_800E2CE0); D_800E2CE0 = NULL; } if (D_800E2CE4 != NULL) { - free_from_memory_pool(D_800E2CE4); + mempool_free(D_800E2CE4); D_800E2CE4 = NULL; } } void func_800AE490(void) { if (gParticlesAssets != NULL) { - free_from_memory_pool(gParticlesAssets); + mempool_free(gParticlesAssets); gParticlesAssets = NULL; } if (gParticlesAssetTable != NULL) { - free_from_memory_pool(gParticlesAssetTable); + mempool_free(gParticlesAssetTable); gParticlesAssetTable = NULL; } if (gParticleBehavioursAssets != NULL) { - free_from_memory_pool(gParticleBehavioursAssets); + mempool_free(gParticleBehavioursAssets); gParticleBehavioursAssets = NULL; } if (gParticleBehavioursAssetTable != NULL) { - free_from_memory_pool(gParticleBehavioursAssetTable); + mempool_free(gParticleBehavioursAssetTable); gParticleBehavioursAssetTable = NULL; } } @@ -471,7 +471,7 @@ void func_800AF29C(Particle *arg0, s32 behaviourID, s32 propertyID, s16 velX, s1 arg0->data.lifeTime = 255; } arg0->data.unkC_400.unkC = - (s32 *) allocate_from_main_pool_safe(arg0->data.lifeTime * sizeof(uintptr_t), COLOUR_TAG_SEMITRANS_GREY); + (s32 *) mempool_alloc_safe(arg0->data.lifeTime * sizeof(uintptr_t), COLOUR_TAG_SEMITRANS_GREY); arg0->data.unkC_400.unk10 = behaviour->unk14; arg0->data.unkC_400.unk12 = behaviour->unk16; arg0->data.unkC_400.unk14 = behaviour->unk22; @@ -1578,7 +1578,7 @@ void func_800B2260(Particle *arg0) { temp_v0->segment.particle.destroyTimer = 0; temp_v0->unk70 = 0; } - free_from_memory_pool(arg0->data.unkC_60); + mempool_free(arg0->data.unkC_60); arg0->data.unkC_60 = NULL; } } diff --git a/src/printf.c b/src/printf.c index c1f56445..6ba8a4f4 100644 --- a/src/printf.c +++ b/src/printf.c @@ -247,8 +247,8 @@ void debug_text_print(Gfx **dList) { char *buffer; u32 widthAndHeight; - init_rdp_and_framebuffer(dList); - widthAndHeight = get_video_width_and_height_as_s32(); + rdp_init(dList); + widthAndHeight = fb_size(); gDebugScreenHeight = GET_VIDEO_HEIGHT(widthAndHeight); gDebugScreenWidth = GET_VIDEO_WIDTH(widthAndHeight); gDPSetScissor((*dList)++, 0, 0, 0, gDebugScreenWidth, gDebugScreenHeight); diff --git a/src/racer.c b/src/racer.c index 8f321a7a..baed0925 100644 --- a/src/racer.c +++ b/src/racer.c @@ -5649,7 +5649,7 @@ void get_timestamp_from_frames(s32 frameCount, s32 *minutes, s32 *seconds, s32 * */ void allocate_ghost_data(void) { // Allocate two sets of ghost data. One for the current playing ghost, and one for the new ghost being written. - gGhostData[0] = allocate_from_main_pool_safe((sizeof(GhostNode) * 2) * MAX_NUMBER_OF_GHOST_NODES, COLOUR_TAG_RED); + gGhostData[0] = mempool_alloc_safe((sizeof(GhostNode) * 2) * MAX_NUMBER_OF_GHOST_NODES, COLOUR_TAG_RED); gGhostData[1] = ((GhostNode *) gGhostData[0] + MAX_NUMBER_OF_GHOST_NODES); gGhostData[GHOST_STAFF] = NULL; // T.T. Ghost gGhostNodeCount[0] = 0; @@ -5716,21 +5716,21 @@ s32 timetrial_load_player_ghost(s32 controllerID, s32 mapId, s16 arg2, s16 *char * Returns 0 if successful, or 1 if an error occured. */ s32 load_tt_ghost(s32 ghostOffset, s32 size, s16 *outTime) { - GhostHeader *ghost = allocate_from_main_pool_safe(size, COLOUR_TAG_RED); + GhostHeader *ghost = mempool_alloc_safe(size, COLOUR_TAG_RED); if (ghost != NULL) { load_asset_to_address(ASSET_TTGHOSTS, (u32) ghost, ghostOffset, size); if (gGhostData[GHOST_STAFF] != NULL) { - free_from_memory_pool(gGhostData[GHOST_STAFF]); + mempool_free(gGhostData[GHOST_STAFF]); } - gGhostData[GHOST_STAFF] = allocate_from_main_pool_safe(size - sizeof(GhostHeader), COLOUR_TAG_WHITE); + gGhostData[GHOST_STAFF] = mempool_alloc_safe(size - sizeof(GhostHeader), COLOUR_TAG_WHITE); if (gGhostData[GHOST_STAFF] != NULL) { *outTime = ghost->time; gGhostNodeCount[GHOST_STAFF] = ghost->nodeCount; bcopy((u8 *) ghost + 8, gGhostData[GHOST_STAFF], size - sizeof(GhostHeader)); - free_from_memory_pool(ghost); + mempool_free(ghost); return 0; } - free_from_memory_pool(ghost); + mempool_free(ghost); } return 1; } @@ -5740,7 +5740,7 @@ s32 load_tt_ghost(s32 ghostOffset, s32 size, s16 *outTime) { */ void timetrial_free_staff_ghost(void) { if (gGhostData[GHOST_STAFF] != NULL) { - free_from_memory_pool(gGhostData[GHOST_STAFF]); + mempool_free(gGhostData[GHOST_STAFF]); } gGhostData[GHOST_STAFF] = NULL; } diff --git a/src/rcp.c b/src/rcp.c index faf37a99..dae4cc7a 100644 --- a/src/rcp.c +++ b/src/rcp.c @@ -14,19 +14,19 @@ s16 gGfxTaskMesgNums[16] = { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -u8 sBackgroundPrimColourR = 0; -u8 sBackgroundPrimColourG = 0; -u8 sBackgroundPrimColourB = 0; +u8 sBGPrimColourrR = 0; +u8 sBGPrimColourrG = 0; +u8 sBGPrimColourrB = 0; s32 sBackgroundFillColour = GPACK_RGBA5551(0, 0, 0, 1) | (GPACK_RGBA5551(0, 0, 0, 1) << 16); -u32 gMosaicShiftX = 64; -TextureHeader *gMosaicTex1 = NULL; -TextureHeader *gMosaicTex2 = NULL; +u32 gTexBGShiftX = 64; +TextureHeader *gTexBGTex1 = NULL; +TextureHeader *gTexBGTex2 = NULL; s32 gChequerBGEnabled = FALSE; -BackgroundFunction gBackgroundDrawFunc = { NULL }; -s32 gfxBufCounter = 0; -s32 gfxBufCounter2 = 0; +BackgroundFunction gBGDrawFunc = { NULL }; +s32 gGfxBufCounter = 0; +s32 gGfxBufCounter2 = 0; s32 gGfxTaskIsRunning = FALSE; Gfx dRspInit[] = { @@ -63,7 +63,7 @@ Gfx dRaceFinishBackgroundSettings[] = { gsDPSetTextureLUT(G_TT_NONE), gsDPSetAlphaCompare(G_AC_NONE), gsSPClearGeometryMode(G_ZBUFFER | G_FOG), - gsDPPipeSync(), + gsDPPipeSync(), // And here? gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), gsDPSetOtherMode(DKR_OMH_1CYC_POINT_NOPERSP, DKR_OML_COMMON | G_RM_OPA_SURF | G_RM_OPA_SURF2), gsSPEndDisplayList(), @@ -75,7 +75,7 @@ Gfx dChequerBGSettings[] = { gsDPSetTextureLUT(G_TT_NONE), gsDPSetAlphaCompare(G_AC_NONE), gsSPClearGeometryMode(G_ZBUFFER | G_FOG), - gsDPPipeSync(), + gsDPPipeSync(), // Ditto gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), gsDPSetOtherMode(DKR_OMH_1CYC_POINT_NOPERSP, DKR_OML_COMMON | G_RM_OPA_SURF | G_RM_OPA_SURF2), gsSPEndDisplayList(), @@ -87,7 +87,7 @@ Gfx dTextureRectangleModes[] = { gsDPSetTextureLUT(G_TT_NONE), gsDPSetAlphaCompare(G_AC_NONE), gsSPClearGeometryMode(G_ZBUFFER | G_FOG), - gsDPPipeSync(), + gsDPPipeSync(), // Ditto gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), gsDPSetOtherMode(DKR_OMH_1CYC_POINT_NOPERSP, DKR_OML_COMMON | G_RM_XLU_SURF | G_RM_XLU_SURF2), gsSPEndDisplayList(), @@ -99,7 +99,7 @@ Gfx dScaledRectangleBaseModes[] = { gsDPSetTextureLUT(G_TT_NONE), gsDPSetAlphaCompare(G_AC_NONE), gsSPClearGeometryMode(G_ZBUFFER | G_FOG), - gsDPPipeSync(), + gsDPPipeSync(), // Ditto gsSPEndDisplayList(), }; @@ -133,10 +133,8 @@ Gfx dTextureRectangleScaledXlu[][2] = { /************ .bss ************/ -#define YIELD_BUFFER_SIZE 0x1800 - u8 gDramStack[SP_DRAM_STACK_SIZE8]; -u8 gGfxSPTaskYieldBuffer[YIELD_BUFFER_SIZE]; +u8 gGfxTaskOutputBuffer[OUTPUT_BUFFER_SIZE]; OSMesgQueue gRCPMesgQueue; OSMesg gRCPMesgBuf; UNUSED OSMesgQueue gUnusedMesgQueue; @@ -166,14 +164,14 @@ OSMesgQueue *osScInterruptQ; * Sends a message to the scheduler to start processing an RSP task once set up. * Official Name: rcpFast3d */ -s32 setup_ostask_xbus(Gfx *dlBegin, Gfx *dlEnd, UNUSED s32 recvMesg) { +s32 gfxtask_run_xbus(Gfx *dlBegin, Gfx *dlEnd, UNUSED s32 recvMesg) { DKR_OSTask *dkrtask; gGfxTaskIsRunning = TRUE; - dkrtask = &gGfxTaskBuf[gfxBufCounter]; - gfxBufCounter++; - if (gfxBufCounter == 2) { - gfxBufCounter = 0; + dkrtask = &gGfxTaskBuf[gGfxBufCounter]; + gGfxBufCounter++; + if (gGfxBufCounter == 2) { + gGfxBufCounter = 0; } dkrtask->flags = OS_SC_LAST_TASK | OS_SC_NEEDS_RDP | OS_SC_NEEDS_RSP; dkrtask->mesgQueue = &gGfxTaskMesgQueue; @@ -190,7 +188,7 @@ s32 setup_ostask_xbus(Gfx *dlBegin, Gfx *dlEnd, UNUSED s32 recvMesg) { dkrtask->task.ucode_data_size = SP_UCODE_DATA_SIZE; dkrtask->task.dram_stack = (u64 *) gDramStack; dkrtask->task.dram_stack_size = SP_DRAM_STACK_SIZE8; - dkrtask->task.output_buff = (u64 *) gGfxSPTaskYieldBuffer; + dkrtask->task.output_buff = (u64 *) gGfxTaskOutputBuffer; dkrtask->task.output_buff_size = (u64 *) &gRCPMesgQueue; dkrtask->task.yield_data_ptr = (u64 *) gGfxTaskYieldData; dkrtask->task.yield_data_size = sizeof(gGfxTaskYieldData); @@ -209,15 +207,15 @@ s32 setup_ostask_xbus(Gfx *dlBegin, Gfx *dlEnd, UNUSED s32 recvMesg) { * Unused variant of the xbus task function. * Probably intended to be a secondary task system, since it doesn't set the var saying there's a task running. */ -UNUSED void setup_ostask_xbus_2(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { +UNUSED void gfxtask_run_xbus2(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { DKR_OSTask *dkrtask; OSMesg mesgBuf; mesgBuf = NULL; - dkrtask = &gGfxTaskBuf2[gfxBufCounter2]; - gfxBufCounter2++; - if (gfxBufCounter2 == 2) { - gfxBufCounter2 = 0; + dkrtask = &gGfxTaskBuf2[gGfxBufCounter2]; + gGfxBufCounter2++; + if (gGfxBufCounter2 == 2) { + gGfxBufCounter2 = 0; } dkrtask->task.data_ptr = (u64 *) dlBegin; dkrtask->task.data_size = (s32) (dlEnd - dlBegin) * sizeof(Gfx); @@ -237,13 +235,13 @@ UNUSED void setup_ostask_xbus_2(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { dkrtask->next = NULL; dkrtask->flags = OS_SC_NEEDS_RDP | OS_SC_NEEDS_RSP; dkrtask->mesgQueue = &gGfxTaskMesgQueue; - dkrtask->mesg = gGfxTaskMesgNums; + dkrtask->mesg = &gGfxTaskMesgNums[0]; dkrtask->frameBuffer = gVideoCurrFramebuffer; dkrtask->unused58 = COLOUR_TAG_RED; dkrtask->unused5C = COLOUR_TAG_RED; dkrtask->unused60 = 0xFF; dkrtask->unused64 = 0xFF; - dkrtask->unk68 = 0; + dkrtask->unk68 = FALSE; if (recvMesg) { dkrtask->mesgQueue = &gRCPMesgQueue; @@ -261,15 +259,15 @@ UNUSED void setup_ostask_xbus_2(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { * Sends a message to the scheduler to start processing an RSP task once set up. * Goes unused, and is broken. */ -UNUSED void setup_ostask_fifo(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { +UNUSED void gfxtask_run_fifo(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { DKR_OSTask *dkrtask; OSMesg mesgBuf; mesgBuf = NULL; - dkrtask = &gGfxTaskBuf2[gfxBufCounter2]; - gfxBufCounter2++; - if (gfxBufCounter2 == 2) { - gfxBufCounter2 = 0; + dkrtask = &gGfxTaskBuf2[gGfxBufCounter2]; + gGfxBufCounter2++; + if (gGfxBufCounter2 == 2) { + gGfxBufCounter2 = 0; } dkrtask->task.data_ptr = (u64 *) dlBegin; @@ -283,20 +281,20 @@ UNUSED void setup_ostask_fifo(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { dkrtask->task.ucode_data_size = SP_UCODE_DATA_SIZE; dkrtask->task.dram_stack = (u64 *) gDramStack; dkrtask->task.dram_stack_size = SP_DRAM_STACK_SIZE8; - dkrtask->task.output_buff = (u64 *) gGfxSPTaskYieldBuffer; - dkrtask->task.output_buff_size = (u64 *) (gGfxSPTaskYieldBuffer + YIELD_BUFFER_SIZE); + dkrtask->task.output_buff = (u64 *) gGfxTaskOutputBuffer; + dkrtask->task.output_buff_size = (u64 *) (gGfxTaskOutputBuffer + OUTPUT_BUFFER_SIZE); dkrtask->task.yield_data_ptr = (u64 *) gGfxTaskYieldData; dkrtask->task.yield_data_size = sizeof(gGfxTaskYieldData); dkrtask->next = NULL; dkrtask->flags = OS_SC_NEEDS_RDP | OS_SC_NEEDS_RSP | OS_SC_DRAM_DLIST; dkrtask->mesgQueue = &gGfxTaskMesgQueue; - dkrtask->mesg = gGfxTaskMesgNums; + dkrtask->mesg = &gGfxTaskMesgNums[0]; dkrtask->frameBuffer = gVideoCurrFramebuffer; dkrtask->unused58 = COLOUR_TAG_RED; dkrtask->unused5C = COLOUR_TAG_RED; - dkrtask->unused60 = 0xFF; - dkrtask->unused64 = 0xFF; - dkrtask->unk68 = 0; + dkrtask->unused60 = COLOUR_TAG_BLACK; + dkrtask->unused64 = COLOUR_TAG_BLACK; + dkrtask->unk68 = FALSE; if (recvMesg) { dkrtask->mesgQueue = &gRCPMesgQueue; @@ -313,16 +311,16 @@ UNUSED void setup_ostask_fifo(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { * Unused variant of the FIFO task function. * Probably intended to be a secondary task system, since it doesn't set the var saying there's a task running. */ -UNUSED void setup_ostask_fifo_2(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { +UNUSED void gfxtask_run_fifo2(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { DKR_OSTask *dkrtask; OSMesg mesgBuf; mesgBuf = NULL; - dkrtask = &gGfxTaskBuf[gfxBufCounter]; - gfxBufCounter++; - //!@bug - gfxBufCounter being 2 would mean an out of bounds access of gGfxTaskBuf - if (gfxBufCounter == 3) { - gfxBufCounter = 0; + dkrtask = &gGfxTaskBuf[gGfxBufCounter]; + gGfxBufCounter++; + //!@bug - gGfxBufCounter being 2 would mean an out of bounds access of gGfxTaskBuf + if (gGfxBufCounter == 3) { + gGfxBufCounter = 0; } dkrtask->task.data_size = (s32) (dlEnd - dlBegin) * sizeof(Gfx); @@ -336,22 +334,22 @@ UNUSED void setup_ostask_fifo_2(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { dkrtask->task.ucode_data_size = SP_UCODE_DATA_SIZE; dkrtask->task.dram_stack = (u64 *) gDramStack; dkrtask->task.dram_stack_size = SP_DRAM_STACK_SIZE8; - dkrtask->task.output_buff = (u64 *) gGfxSPTaskYieldBuffer; + dkrtask->task.output_buff = (u64 *) gGfxTaskOutputBuffer; dkrtask->task.output_buff_size = (u64 *) &gRCPMesgQueue; dkrtask->task.yield_data_ptr = (u64 *) gGfxTaskYieldData; dkrtask->task.yield_data_size = sizeof(gGfxTaskYieldData); dkrtask->next = NULL; dkrtask->flags = OS_SC_NEEDS_RDP | OS_SC_NEEDS_RSP | OS_SC_DRAM_DLIST; dkrtask->mesgQueue = &gGfxTaskMesgQueue; - dkrtask->mesg = gGfxTaskMesgNums; + dkrtask->mesg = &gGfxTaskMesgNums[0]; dkrtask->frameBuffer = gVideoCurrFramebuffer; dkrtask->unused58 = COLOUR_TAG_RED; dkrtask->unused5C = COLOUR_TAG_RED; if (recvMesg) { - dkrtask->unused60 = 0xFF; - dkrtask->unused64 = 0xFF; + dkrtask->unused60 = COLOUR_TAG_BLACK; + dkrtask->unused64 = COLOUR_TAG_BLACK; } - dkrtask->unk68 = 0; + dkrtask->unk68 = FALSE; osWritebackDCacheAll(); osSendMesg(osScInterruptQ, dkrtask, 1); if (recvMesg) { @@ -365,7 +363,7 @@ UNUSED void setup_ostask_fifo_2(Gfx *dlBegin, Gfx *dlEnd, s32 recvMesg) { * Alternatively, if no task is active, then it will just skip. * Official Name: rcpWaitDP */ -s32 wait_for_gfx_task(void) { +s32 gfxtask_wait(void) { OSMesg *mesg = NULL; if (gGfxTaskIsRunning == FALSE) { return 0; @@ -375,6 +373,10 @@ s32 wait_for_gfx_task(void) { return (s32) mesg[1]; } +/** + * Write Data Cache back into RAM and then execute an RDP task with a given command buffer. + * This function skips the RSP, so it takes in raw RDP commands. + */ UNUSED void gfxtask_run_rdp(void *bufPtr, s32 bufSize, UNUSED s32 unused) { osWritebackDCacheAll(); while (osDpGetStatus() & DPC_CLR_CMD_CTR) {} @@ -386,10 +388,10 @@ UNUSED void gfxtask_run_rdp(void *bufPtr, s32 bufSize, UNUSED s32 unused) { * Sets the primitive colour for the cyclemode fillrect background. * Official name: rcpSetScreenColour */ -void set_background_prim_colour(u8 red, u8 green, u8 blue) { - sBackgroundPrimColourR = red; - sBackgroundPrimColourG = green; - sBackgroundPrimColourB = blue; +void bgdraw_primcolour(u8 red, u8 green, u8 blue) { + sBGPrimColourrR = red; + sBGPrimColourrG = green; + sBGPrimColourrB = blue; } /** @@ -397,7 +399,7 @@ void set_background_prim_colour(u8 red, u8 green, u8 blue) { * Uses RGBA5551 * Official name: rcpSetBorderColour */ -void set_background_fill_colour(s32 red, s32 green, s32 blue) { +void bgdraw_fillcolour(s32 red, s32 green, s32 blue) { sBackgroundFillColour = GPACK_RGBA5551(red, green, blue, 1); sBackgroundFillColour |= (sBackgroundFillColour << 16); } @@ -408,7 +410,7 @@ void set_background_fill_colour(s32 red, s32 green, s32 blue) { * over clearing the colour buffer. * Official Name: rcpClearScreen */ -void render_background(Gfx **dList, Matrix *mtx, s32 drawBG) { +void bgdraw_render(Gfx **dList, Matrix *mtx, s32 drawBG) { s32 widthAndHeight; s32 w; s32 h; @@ -417,7 +419,7 @@ void render_background(Gfx **dList, Matrix *mtx, s32 drawBG) { s32 x2; s32 y2; - widthAndHeight = get_video_width_and_height_as_s32(); + widthAndHeight = fb_size(); w = GET_VIDEO_WIDTH(widthAndHeight); h = GET_VIDEO_HEIGHT(widthAndHeight); @@ -433,11 +435,11 @@ void render_background(Gfx **dList, Matrix *mtx, s32 drawBG) { if (drawBG) { if (check_viewport_background_flag(0)) { if (gChequerBGEnabled) { - render_chequer_background(dList); // Unused - } else if (gMosaicTex1) { + bgdraw_chequer(dList); // Unused + } else if (gTexBGTex1) { func_80078190(dList); - } else if (gBackgroundDrawFunc.ptr != NULL) { - gBackgroundDrawFunc.function((Gfx *) dList, mtx); + } else if (gBGDrawFunc.ptr != NULL) { + gBGDrawFunc.function((Gfx *) dList, mtx); } else { gDPSetFillColor((*dList)++, sBackgroundFillColour); gDPFillRectangle((*dList)++, 0, 0, w - 1, h - 1); @@ -446,24 +448,22 @@ void render_background(Gfx **dList, Matrix *mtx, s32 drawBG) { // fillmode. if (copy_viewport_background_size_to_coords(0, &x1, &y1, &x2, &y2)) { gDPSetCycleType((*dList)++, G_CYC_1CYCLE); - gDPSetPrimColor((*dList)++, 0, 0, sBackgroundPrimColourR, sBackgroundPrimColourG, - sBackgroundPrimColourB, 255); + gDPSetPrimColor((*dList)++, 0, 0, sBGPrimColourrR, sBGPrimColourrG, sBGPrimColourrB, 255); gDPSetCombineMode((*dList)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetRenderMode((*dList)++, G_RM_OPA_SURF, G_RM_OPA_SURF2); gDPFillRectangle((*dList)++, x1, y1, x2, y2); } } else { if (gChequerBGEnabled) { - render_chequer_background(dList); // Unused - } else if (gMosaicTex1) { + bgdraw_chequer(dList); // Unused + } else if (gTexBGTex1) { func_80078190(dList); - } else if (gBackgroundDrawFunc.ptr != NULL) { - gBackgroundDrawFunc.function((Gfx *) dList, mtx); + } else if (gBGDrawFunc.ptr != NULL) { + gBGDrawFunc.function((Gfx *) dList, mtx); } else { - gDPSetFillColor( - (*dList)++, - (GPACK_RGBA5551(sBackgroundPrimColourR, sBackgroundPrimColourG, sBackgroundPrimColourB, 1) << 16) | - GPACK_RGBA5551(sBackgroundPrimColourR, sBackgroundPrimColourG, sBackgroundPrimColourB, 1)); + gDPSetFillColor((*dList)++, + (GPACK_RGBA5551(sBGPrimColourrR, sBGPrimColourrG, sBGPrimColourrB, 1) << 16) | + GPACK_RGBA5551(sBGPrimColourrR, sBGPrimColourrG, sBGPrimColourrB, 1)); gDPFillRectangle((*dList)++, 0, 0, w - 1, h - 1); } } @@ -476,8 +476,8 @@ void render_background(Gfx **dList, Matrix *mtx, s32 drawBG) { * Gets the framebuffer width, then points to the start of segment 0x01 in memory. * afterwards, calls the draw command that initialises all the rendermodes, ready for use. */ -void init_rdp_and_framebuffer(Gfx **dList) { - s32 width = GET_VIDEO_WIDTH(get_video_width_and_height_as_s32()); +void rdp_init(Gfx **dList) { + s32 width = GET_VIDEO_WIDTH(fb_size()); gDPSetColorImage((*dList)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, SEGMENT_FRAMEBUFFER << 24); gDPSetDepthImage((*dList)++, SEGMENT_ZBUFFER << 24); gSPDisplayList((*dList)++, dRdpInit); @@ -487,14 +487,14 @@ void init_rdp_and_framebuffer(Gfx **dList) { * Calls the draw command that sets all the OtherModes, ready for use. * Official name: rcpInitSp or rcpInitDpNoSize */ -void init_rsp(Gfx **dList) { +void rsp_init(Gfx **dList) { gSPDisplayList((*dList)++, dRspInit); } /** * Initialise the mesg queues for the gfx tasks, that interface with the scheduler. */ -void setup_gfx_mesg_queues(OSSched *sc) { +void gfxtask_init(OSSched *sc) { osScInterruptQ = osScGetInterruptQ(sc); osCreateMesgQueue(&gRCPMesgQueue, &gRCPMesgBuf, 1); osCreateMesgQueue(&gUnusedMesgQueue, gUnusedMesgBuf, ARRAY_COUNT(gUnusedMesgBuf)); @@ -505,12 +505,13 @@ void setup_gfx_mesg_queues(OSSched *sc) { * Set one or two textures for the patterned world themed background. * Can also apply a shift to make tiling less obvious. */ -void mosaic_init(TextureHeader *tex1, TextureHeader *tex2, u32 shiftX) { - gMosaicTex1 = tex1; - gMosaicTex2 = tex2; - gMosaicShiftX = shiftX * 4; +void bgdraw_texture_init(TextureHeader *tex1, TextureHeader *tex2, u32 shiftX) { + gTexBGTex1 = tex1; + gTexBGTex2 = tex2; + gTexBGShiftX = shiftX * 4; } +// bgdraw_texture #ifdef NON_EQUIVALENT /** * Seems to render the background screen after a race finishes while you're at the menu deciding what to do next. @@ -536,17 +537,17 @@ void func_80078190(Gfx **dlist) { s32 t; // the texture coordinate t of upper-left corner of rectangle (s10.5) s32 s; // the texture coordinate s of upper-left corner of rectangle (s10.5) - widthAndHeight = get_video_width_and_height_as_s32(); + widthAndHeight = fb_size(); videoWidth = GET_VIDEO_WIDTH(widthAndHeight); videoHeight = GET_VIDEO_HEIGHT(widthAndHeight); gSPDisplayList((*dlist)++, dRaceFinishBackgroundSettings); - if (gMosaicTex2 == NULL) { - gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(gMosaicTex1->cmd), gMosaicTex1->numberOfCommands); + if (gTexBGTex2 == NULL) { + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(gTexBGTex1->cmd), gTexBGTex1->numberOfCommands); upperVideoWidth = videoWidth << 2; upperVideoHeight = videoHeight << 2; - texture1UpperWidth = gMosaicTex1->width << 2; - texture1UpperHeight = gMosaicTex1->height << 2; + texture1UpperWidth = gTexBGTex1->width << 2; + texture1UpperHeight = gTexBGTex1->height << 2; var_s3 = 0; for (yPos = 0; yPos < upperVideoHeight; yPos += texture1UpperHeight) { uly = yPos; @@ -564,16 +565,16 @@ void func_80078190(Gfx **dlist) { } ulx = lrx; } - var_s3 = (var_s3 + gMosaicShiftX) & (texture1UpperWidth - 1); + var_s3 = (var_s3 + gTexBGShiftX) & (texture1UpperWidth - 1); } } else { - gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(gMosaicTex1->cmd), gMosaicTex1->numberOfCommands); + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(gTexBGTex1->cmd), gTexBGTex1->numberOfCommands); upperVideoWidth = videoWidth << 2; upperVideoHeight = videoHeight << 2; - texture1UpperWidth = gMosaicTex1->width << 2; - texture1UpperHeight = gMosaicTex1->height << 2; - // texture2UpperHeight = gMosaicTex2->height << 2; - texture1And2UpperHeight = (gMosaicTex2->height << 2) + texture1UpperHeight; + texture1UpperWidth = gTexBGTex1->width << 2; + texture1UpperHeight = gTexBGTex1->height << 2; + // texture2UpperHeight = gTexBGTex2->height << 2; + texture1And2UpperHeight = (gTexBGTex2->height << 2) + texture1UpperHeight; var_s3 = 0; for (yPos = 0; yPos < upperVideoHeight; yPos += texture1And2UpperHeight) { uly = yPos; @@ -591,9 +592,9 @@ void func_80078190(Gfx **dlist) { } ulx = lrx; } - var_s3 = (var_s3 + gMosaicShiftX) & (texture1UpperWidth - 1); + var_s3 = (var_s3 + gTexBGShiftX) & (texture1UpperWidth - 1); } - gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(gMosaicTex2->cmd), gMosaicTex2->numberOfCommands); + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(gTexBGTex2->cmd), gTexBGTex2->numberOfCommands); upperVideoWidth <<= 2; upperVideoHeight <<= 2; var_s3 = 0; @@ -613,7 +614,7 @@ void func_80078190(Gfx **dlist) { } ulx = lrx; } - var_s3 = (var_s3 + gMosaicShiftX) & (texture1UpperWidth - 1); + var_s3 = (var_s3 + gTexBGShiftX) & (texture1UpperWidth - 1); } } gDPPipeSync((*dlist)++); @@ -625,7 +626,7 @@ GLOBAL_ASM("asm/non_matchings/rcp/func_80078190.s") /** * Enables the chequer background and sets up its properties. */ -UNUSED void set_chequer_background(s32 colourA, s32 colourB, s32 width, s32 height) { +UNUSED void bgdraw_chequer_on(s32 colourA, s32 colourB, s32 width, s32 height) { gChequerBGColourR1 = (colourA >> 24) & 0xFF; gChequerBGColourG1 = (colourA >> 16) & 0xFF; gChequerBGColourB1 = (colourA >> 8) & 0xFF; @@ -642,7 +643,7 @@ UNUSED void set_chequer_background(s32 colourA, s32 colourB, s32 width, s32 heig /** * Disables the chequer background. */ -UNUSED void disable_chequer_background(void) { +UNUSED void bgdraw_chequer_off(void) { gChequerBGEnabled = FALSE; } @@ -651,14 +652,14 @@ UNUSED void disable_chequer_background(void) { * Goes unused. * Official Name: rcpCheckClear */ -void render_chequer_background(Gfx **dList) { +void bgdraw_chequer(Gfx **dList) { s32 height; s32 width; s32 flip; // Flips between 0 and 1 s32 y; s32 x; - width = get_video_width_and_height_as_s32(); + width = fb_size(); height = GET_VIDEO_HEIGHT(width) & 0xFFFF; width = GET_VIDEO_WIDTH(width); @@ -686,8 +687,8 @@ void render_chequer_background(Gfx **dList) { * Sets the function pointer to whatever's passed through. * If nonzero, will override the background drawing section. */ -void set_background_draw_function(void *func) { - gBackgroundDrawFunc.ptr = func; +void bgdraw_set_func(void *func) { + gBGDrawFunc.ptr = func; } /** @@ -695,8 +696,7 @@ void set_background_draw_function(void *func) { * Texture rectangle coordinates use 10.2 precision and texture coords use 10.5 precision. * Typically, you do these shifts in the draw call itself, but Rare decided to do it beforehand. */ -void render_textured_rectangle(Gfx **dList, DrawTexture *element, s32 xPos, s32 yPos, u8 red, u8 green, u8 blue, - u8 alpha) { +void texrect_draw(Gfx **dList, DrawTexture *element, s32 xPos, s32 yPos, u8 red, u8 green, u8 blue, u8 alpha) { TextureHeader *tex; s32 i; s32 uly; @@ -734,8 +734,14 @@ void render_textured_rectangle(Gfx **dList, DrawTexture *element, s32 xPos, s32 gDPSetPrimColor((*dList)++, 0, 0, 255, 255, 255, 255); } -void render_texture_rectangle_scaled(Gfx **dlist, DrawTexture *element, f32 xPos, f32 yPos, f32 xScale, f32 yScale, - u32 colour, s32 flags) { +/** + * Renders one or more textures directly on screen resulting from the passed image properties. + * Texture rectangle coordinates use 10.2 precision and texture coords use 10.5 precision. + * Typically, you do these shifts in the draw call itself, but Rare decided to do it beforehand. + * Also applies texel shifting in order to apply scaling. + */ +void texrect_draw_scaled(Gfx **dlist, DrawTexture *element, f32 xPos, f32 yPos, f32 xScale, f32 yScale, u32 colour, + s32 flags) { TextureHeader *tex; Gfx *dmaDlist; s32 i; @@ -754,7 +760,7 @@ void render_texture_rectangle_scaled(Gfx **dlist, DrawTexture *element, f32 xPos s32 width; s32 height; - height = get_video_width_and_height_as_s32(); + height = fb_size(); width = GET_VIDEO_WIDTH(height) * 4; height = (GET_VIDEO_HEIGHT(height) & 0xFFFF) * 4; diff --git a/src/rcp.h b/src/rcp.h index d2852529..9e91261b 100644 --- a/src/rcp.h +++ b/src/rcp.h @@ -10,6 +10,9 @@ #include "game_ui.h" #include "video.h" +// Recommended size is around 100KB, or 0x19000. This is unused though so it doesn't matter. +#define OUTPUT_BUFFER_SIZE 0x1800 + enum TextureRectangleFlags { TEXRECT_BILERP, TEXRECT_POINT = (1 << 0), @@ -40,17 +43,17 @@ typedef struct DKR_OSTask { extern s16 gGfxTaskMesgNums[16]; -extern u8 sBackgroundPrimColourR; -extern u8 sBackgroundPrimColourG; -extern u8 sBackgroundPrimColourB; +extern u8 sBGPrimColourrR; +extern u8 sBGPrimColourrG; +extern u8 sBGPrimColourrB; extern s32 sBackgroundFillColour; -extern TextureHeader *gMosaicTex1; -extern TextureHeader *gMosaicTex2; +extern TextureHeader *gTexBGTex1; +extern TextureHeader *gTexBGTex2; extern s32 gChequerBGEnabled; -extern s32 gfxBufCounter; -extern s32 gfxBufCounter2; +extern s32 gGfxBufCounter; +extern s32 gGfxBufCounter2; extern s32 gGfxTaskIsRunning; // Defined in dkr.ld @@ -61,21 +64,21 @@ extern s8 rspF3DDKRDataXbusStart[]; extern s8 rspF3DDKRFifoStart[]; extern s8 rspF3DDKRDataFifoStart[]; -s32 wait_for_gfx_task(void); -void set_background_prim_colour(u8 red, u8 green, u8 blue); -void set_background_fill_colour(s32 red, s32 green, s32 blue); -void init_rdp_and_framebuffer(Gfx **dList); -void init_rsp(Gfx **dList); -void setup_gfx_mesg_queues(OSSched *sc); -void mosaic_init(TextureHeader *arg0, TextureHeader *arg1, u32 arg2); -s32 setup_ostask_xbus(Gfx* dlBegin, Gfx* dlEnd, s32 recvMesg); -void setup_ostask_fifo(Gfx* dlBegin, Gfx* dlEnd, s32 recvMesg); -void render_textured_rectangle(Gfx **dList, DrawTexture *element, s32 xPos, s32 yPos, u8 red, u8 green, u8 blue, +s32 gfxtask_wait(void); +void bgdraw_primcolour(u8 red, u8 green, u8 blue); +void bgdraw_fillcolour(s32 red, s32 green, s32 blue); +void rdp_init(Gfx **dList); +void rsp_init(Gfx **dList); +void gfxtask_init(OSSched *sc); +void bgdraw_texture_init(TextureHeader *arg0, TextureHeader *arg1, u32 arg2); +s32 gfxtask_run_xbus(Gfx* dlBegin, Gfx* dlEnd, s32 recvMesg); +void gfxtask_run_fifo(Gfx* dlBegin, Gfx* dlEnd, s32 recvMesg); +void texrect_draw(Gfx **dList, DrawTexture *element, s32 xPos, s32 yPos, u8 red, u8 green, u8 blue, u8 alpha); -void render_chequer_background(Gfx** dList); -void render_background(Gfx **dList, Matrix *mtx, s32 drawBG); -void set_background_draw_function(void *func); -void render_texture_rectangle_scaled(Gfx **dlist, DrawTexture *element, f32 xPos, f32 yPos, f32 xScale, f32 yScale, u32 colour, s32 flags); +void bgdraw_chequer(Gfx** dList); +void bgdraw_render(Gfx **dList, Matrix *mtx, s32 drawBG); +void bgdraw_set_func(void *func); +void texrect_draw_scaled(Gfx **dlist, DrawTexture *element, f32 xPos, f32 yPos, f32 xScale, f32 yScale, u32 colour, s32 flags); //Non Matching void func_80078190(Gfx **dlist); diff --git a/src/save_data.c b/src/save_data.c index 0e7ab997..7105b12d 100644 --- a/src/save_data.c +++ b/src/save_data.c @@ -693,7 +693,7 @@ s32 read_game_data_from_controller_pak(s32 controllerIndex, char *fileExt, Setti ret = CONTROLLER_PAK_BAD_DATA; } if (ret == CONTROLLER_PAK_GOOD) { - alloc = allocate_from_main_pool_safe(fileSize, COLOUR_TAG_BLACK); + alloc = mempool_alloc_safe(fileSize, COLOUR_TAG_BLACK); ret = read_data_from_controller_pak(controllerIndex, fileNumber, (u8 *) alloc, fileSize); if (ret == CONTROLLER_PAK_GOOD) { @@ -707,7 +707,7 @@ s32 read_game_data_from_controller_pak(s32 controllerIndex, char *fileExt, Setti } } - free_from_memory_pool(alloc); + mempool_free(alloc); } } @@ -726,14 +726,14 @@ s32 write_game_data_to_controller_pak(s32 controllerIndex, Settings *arg1) { s32 fileSize; fileSize = get_game_data_file_size(); // 256 bytes - gameData = allocate_from_main_pool_safe(fileSize, COLOUR_TAG_WHITE); + gameData = mempool_alloc_safe(fileSize, COLOUR_TAG_WHITE); *((s32 *) gameData) = GAMD; func_800732E8(arg1, gameData + 4); ret = get_file_extension(controllerIndex, 3, (char *) &fileExt); if (ret == CONTROLLER_PAK_GOOD) { ret = write_controller_pak_file(controllerIndex, -1, "DKRACING-ADV", (char *) &fileExt, gameData, fileSize); } - free_from_memory_pool(gameData); + mempool_free(gameData); if (ret != CONTROLLER_PAK_GOOD) { ret |= (controllerIndex << 30); } @@ -761,7 +761,7 @@ s32 read_time_data_from_controller_pak(s32 controllerIndex, char *fileExt, Setti } if (status == CONTROLLER_PAK_GOOD) { - cpakData = allocate_from_main_pool_safe(fileSize, COLOUR_TAG_BLACK); + cpakData = mempool_alloc_safe(fileSize, COLOUR_TAG_BLACK); status = read_data_from_controller_pak(controllerIndex, fileNumber, (u8 *) cpakData, fileSize); if (status == CONTROLLER_PAK_GOOD) { @@ -773,7 +773,7 @@ s32 read_time_data_from_controller_pak(s32 controllerIndex, char *fileExt, Setti } } - free_from_memory_pool(cpakData); + mempool_free(cpakData); } } @@ -793,14 +793,14 @@ s32 write_time_data_to_controller_pak(s32 controllerIndex, Settings *arg1) { char *fileExt; fileSize = get_time_data_file_size(); // 512 bytes - timeData = allocate_from_main_pool_safe(fileSize, COLOUR_TAG_WHITE); + timeData = mempool_alloc_safe(fileSize, COLOUR_TAG_WHITE); *((s32 *) timeData) = TIMD; func_800738A4(arg1, timeData + 4); ret = get_file_extension(controllerIndex, 4, (char *) &fileExt); if (ret == CONTROLLER_PAK_GOOD) { ret = write_controller_pak_file(controllerIndex, -1, "DKRACING-TIMES", (char *) &fileExt, timeData, fileSize); } - free_from_memory_pool(timeData); + mempool_free(timeData); if (ret != CONTROLLER_PAK_GOOD) { ret |= (controllerIndex << 30); } @@ -835,12 +835,12 @@ s32 read_save_file(s32 saveFileNum, Settings *settings) { break; } blocks = 5; - saveData = allocate_from_main_pool_safe(blocks * sizeof(u64), COLOUR_TAG_WHITE); + saveData = mempool_alloc_safe(blocks * sizeof(u64), COLOUR_TAG_WHITE); for (block = 0, address = startingAddress; block < blocks; block++, address++) { osEepromRead(get_si_mesg_queue(), address, (u8 *) &saveData[block]); } populate_settings_from_save_data(settings, (u8 *) saveData); - free_from_memory_pool(saveData); + mempool_free(saveData); ret = settings->newGame; if (settings->newGame) { erase_save_file(saveFileNum, settings); @@ -887,7 +887,7 @@ void erase_save_file(s32 saveFileNum, Settings *settings) { break; } blockSize = 5; - alloc = allocate_from_main_pool_safe(blockSize * sizeof(u64), COLOUR_TAG_WHITE); + alloc = mempool_alloc_safe(blockSize * sizeof(u64), COLOUR_TAG_WHITE); saveData = (u8 *) alloc; // clang-format off @@ -900,7 +900,7 @@ void erase_save_file(s32 saveFileNum, Settings *settings) { osEepromWrite(get_si_mesg_queue(), address, (u8 *) &alloc[i]); } } - free_from_memory_pool(alloc); + mempool_free(alloc); } else { stubbed_printf("WARNING : No Eprom\n"); } @@ -941,7 +941,7 @@ s32 write_save_data(s32 saveFileNum, Settings *settings) { } blocks = 5; - alloc = allocate_from_main_pool_safe(blocks * sizeof(u64), COLOUR_TAG_WHITE); + alloc = mempool_alloc_safe(blocks * sizeof(u64), COLOUR_TAG_WHITE); func_800732E8(settings, (u8 *) alloc); if (!is_reset_pressed()) { @@ -950,7 +950,7 @@ s32 write_save_data(s32 saveFileNum, Settings *settings) { } } - free_from_memory_pool(alloc); + mempool_free(alloc); return 0; } @@ -971,7 +971,7 @@ s32 read_eeprom_data(Settings *settings, u8 flags) { return -1; } - alloc = allocate_from_main_pool_safe(SAVE_SIZE, COLOUR_TAG_WHITE); + alloc = mempool_alloc_safe(SAVE_SIZE, COLOUR_TAG_WHITE); if (flags & SAVE_DATA_FLAG_READ_FLAP_TIMES) { s32 blocks = EEP_FLAP_SIZE; @@ -989,7 +989,7 @@ s32 read_eeprom_data(Settings *settings, u8 flags) { func_80073588(settings, (u8 *) alloc, SAVE_DATA_FLAG_READ_COURSE_TIMES); } - free_from_memory_pool(alloc); + mempool_free(alloc); return 0; } @@ -1010,7 +1010,7 @@ s32 write_eeprom_data(Settings *settings, u8 flags) { return -1; } - alloc = allocate_from_main_pool_safe(SAVE_SIZE, COLOUR_TAG_WHITE); + alloc = mempool_alloc_safe(SAVE_SIZE, COLOUR_TAG_WHITE); func_800738A4(settings, (u8 *) alloc); @@ -1033,7 +1033,7 @@ s32 write_eeprom_data(Settings *settings, u8 flags) { } } - free_from_memory_pool(alloc); + mempool_free(alloc); return 0; } @@ -1153,7 +1153,7 @@ s32 func_80074B34(s32 controllerIndex, s16 levelId, s16 vehicleId, u16 *ghostCha } pakStatus = get_file_number(controllerIndex, "DKRACING-GHOSTS", "", &fileNumber); if (pakStatus == CONTROLLER_PAK_GOOD) { - cPakFile = allocate_from_main_pool_safe(GHSS_SIZE, COLOUR_TAG_BLACK); + cPakFile = mempool_alloc_safe(GHSS_SIZE, COLOUR_TAG_BLACK); if (!(pfs[controllerIndex].status & 1)) { osPfsInit(sControllerMesgQueue, &pfs[controllerIndex], controllerIndex); } @@ -1180,10 +1180,10 @@ s32 func_80074B34(s32 controllerIndex, s16 levelId, s16 vehicleId, u16 *ghostCha pakStatus = CONTROLLER_PAK_BAD_DATA; } } - free_from_memory_pool(cPakFile); + mempool_free(cPakFile); if (ghostSize != 0) { if (ghostCharacterId != NULL) { - cPakFile = allocate_from_main_pool_safe(allocateSpace + GHSS_SIZE, COLOUR_TAG_BLACK); + cPakFile = mempool_alloc_safe(allocateSpace + GHSS_SIZE, COLOUR_TAG_BLACK); if (osPfsReadWriteFile(&pfs[controllerIndex], fileNumber, PFS_READ, ghostSize, allocateSpace, AS_BYTES(cPakFile)) == 0) { // Hmm... The ghost data struct might not be quite right here... @@ -1200,7 +1200,7 @@ s32 func_80074B34(s32 controllerIndex, s16 levelId, s16 vehicleId, u16 *ghostCha } else { pakStatus = CONTROLLER_PAK_BAD_DATA; } - free_from_memory_pool(cPakFile); + mempool_free(cPakFile); } } if ((ghostSize != 0) && (ghostCharacterId == NULL)) { @@ -1261,7 +1261,7 @@ SIDeviceStatus func_80074EB8(s32 controllerIndex, s16 levelId, s16 vehicleId, s1 sp30 += GHSS_SIZE; sp24 = sp30 * 6; if (1) {} // fake - ghost = allocate_from_main_pool_safe(sp24 + (GHSS_SIZE * 2), COLOUR_TAG_BLACK); + ghost = mempool_alloc_safe(sp24 + (GHSS_SIZE * 2), COLOUR_TAG_BLACK); ghost->signature = GHSS; ghostBody = &ghost->data[0]; ghostBody[0].unk0 = levelId; @@ -1276,7 +1276,7 @@ SIDeviceStatus func_80074EB8(s32 controllerIndex, s16 levelId, s16 vehicleId, s1 func_80074AA8((GhostHeader *) (AS_BYTES(ghost) + ghostBody[0].unk2), ghostCharacterId, ghostTime, ghostNodeCount, dest); pakStatus = write_controller_pak_file(controllerIndex, -1, "DKRACING-GHOSTS", "", (u8 *) ghost, sp24 + GHSS_SIZE); - free_from_memory_pool(ghost); + mempool_free(ghost); return pakStatus; } @@ -1322,11 +1322,11 @@ SIDeviceStatus func_80075000(s32 controllerIndex, s16 levelId, s16 vehicleId, s1 start_reading_controller_data(controllerIndex); return pakStatus; } else { - fileData = allocate_from_main_pool_safe(fileSize + GHSS_SIZE, COLOUR_TAG_BLACK); + fileData = mempool_alloc_safe(fileSize + GHSS_SIZE, COLOUR_TAG_BLACK); pakStatus = read_data_from_controller_pak(controllerIndex, fileNumber, AS_BYTES(fileData), fileSize); start_reading_controller_data(controllerIndex); if (pakStatus != CONTROLLER_PAK_GOOD) { - free_from_memory_pool(fileData); + mempool_free(fileData); } else { if (fileData->signature == GHSS) { ghostFileData = &fileData->data[0]; @@ -1359,7 +1359,7 @@ SIDeviceStatus func_80075000(s32 controllerIndex, s16 levelId, s16 vehicleId, s1 pakStatus = CONTROLLER_PAK_NO_ROOM_FOR_GHOSTS; } else { sp58 = ghostSize - (ghostFileData[ghostIndex + 1].unk2 - ghostFileData[ghostIndex].unk2); - fileDataToWrite = allocate_from_main_pool_safe(fileSize + GHSS_SIZE, COLOUR_TAG_BLACK); + fileDataToWrite = mempool_alloc_safe(fileSize + GHSS_SIZE, COLOUR_TAG_BLACK); fileDataToWrite->signature = GHSS; sp70 = &fileDataToWrite->data[0]; fileDataToWrite->data[6].unk0 = 0xFF; @@ -1382,12 +1382,12 @@ SIDeviceStatus func_80075000(s32 controllerIndex, s16 levelId, s16 vehicleId, s1 sp70[ghostIndex].unk1 = vehicleId; pakStatus = write_controller_pak_file(controllerIndex, fileNumber, "DKRACING-GHOSTS", "", AS_BYTES(fileDataToWrite), fileSize); - free_from_memory_pool(fileDataToWrite); + mempool_free(fileDataToWrite); } } else { pakStatus = CONTROLLER_PAK_BAD_DATA; } - free_from_memory_pool(fileData); + mempool_free(fileData); } } } @@ -1416,14 +1416,14 @@ s32 func_800753D8(s32 controllerIndex, s32 worldId) { start_reading_controller_data(controllerIndex); return pakStatus; } - data = allocate_from_main_pool_safe(fileSize + GHSS_SIZE, COLOUR_TAG_BLACK); + data = mempool_alloc_safe(fileSize + GHSS_SIZE, COLOUR_TAG_BLACK); pakStatus = read_data_from_controller_pak(controllerIndex, fileNumber, (u8 *) data, fileSize); start_reading_controller_data(controllerIndex); if (pakStatus == CONTROLLER_PAK_GOOD) { if (data->signature == GHSS) { tempData = data->data; sizeDiff = tempData[worldId].unk2 - tempData[worldId + 1].unk2; - data2 = allocate_from_main_pool_safe(fileSize + GHSS_SIZE, COLOUR_TAG_BLACK); + data2 = mempool_alloc_safe(fileSize + GHSS_SIZE, COLOUR_TAG_BLACK); bcopy(data, data2, tempData[worldId].unk2); // Copy data into data2 if (worldId != WORLD_FUTURE_FUN_LAND) { @@ -1443,9 +1443,9 @@ s32 func_800753D8(s32 controllerIndex, s32 worldId) { } else { pakStatus = CONTROLLER_PAK_BAD_DATA; } - free_from_memory_pool(data2); // Wait, what happens if (data->signature != GHSS)? + mempool_free(data2); // Wait, what happens if (data->signature != GHSS)? } - free_from_memory_pool(data); + mempool_free(data); } else { start_reading_controller_data(controllerIndex); } @@ -1477,7 +1477,7 @@ SIDeviceStatus func_800756D4(s32 controllerIndex, u8 *levelIDs, u8 *vehicleIDs, if (ret == CONTROLLER_PAK_GOOD) { ret = get_file_size(controllerIndex, fileNumber, &fileSize); if (ret == CONTROLLER_PAK_GOOD) { - fileData = allocate_from_main_pool_safe(fileSize + GHSS_SIZE, COLOUR_TAG_BLACK); + fileData = mempool_alloc_safe(fileSize + GHSS_SIZE, COLOUR_TAG_BLACK); ret = read_data_from_controller_pak(controllerIndex, fileNumber, (u8 *) fileData, fileSize); if (ret == CONTROLLER_PAK_GOOD) { for (i = 0, var_s1 = (GhostHeaderAlt *) (&fileData[4]); i < 6; i++) { @@ -1495,7 +1495,7 @@ SIDeviceStatus func_800756D4(s32 controllerIndex, u8 *levelIDs, u8 *vehicleIDs, } } } - free_from_memory_pool(fileData); + mempool_free(fileData); } } start_reading_controller_data(controllerIndex); @@ -1706,11 +1706,11 @@ s32 get_controller_pak_file_list(s32 controllerIndex, s32 maxNumOfFilesToGet, ch } if (gPakFileList != NULL) { - free_from_memory_pool(gPakFileList); + mempool_free(gPakFileList); } files_used = maxNumOfFilesOnCpak * 24; - gPakFileList = allocate_from_main_pool_safe(files_used, COLOUR_TAG_BLACK); + gPakFileList = mempool_alloc_safe(files_used, COLOUR_TAG_BLACK); bzero(gPakFileList, files_used); list = gPakFileList; @@ -1764,7 +1764,7 @@ s32 get_controller_pak_file_list(s32 controllerIndex, s32 maxNumOfFilesToGet, ch */ void cpak_free_files(void) { if (gPakFileList) { - free_from_memory_pool(gPakFileList); + mempool_free(gPakFileList); } gPakFileList = NULL; } @@ -1854,12 +1854,12 @@ s32 copy_controller_pak_data(s32 controllerIndex, s32 fileNumber, s32 secondCont return (controllerIndex << 30) | CONTROLLER_PAK_BAD_DATA; } - alloc = allocate_from_main_pool_safe(state.file_size, COLOUR_TAG_BLACK); + alloc = mempool_alloc_safe(state.file_size, COLOUR_TAG_BLACK); status = read_data_from_controller_pak(controllerIndex, fileNumber, alloc, state.file_size); start_reading_controller_data(controllerIndex); if (status != CONTROLLER_PAK_GOOD) { - free_from_memory_pool(alloc); + mempool_free(alloc); return (controllerIndex << 30) | status; } @@ -1871,7 +1871,7 @@ s32 copy_controller_pak_data(s32 controllerIndex, s32 fileNumber, s32 secondCont status |= (secondControllerIndex << 30); } - free_from_memory_pool(alloc); + mempool_free(alloc); return status; } @@ -2112,7 +2112,7 @@ SaveFileType get_file_type(s32 controllerIndex, s32 fileNum) { s32 ret; ret = SAVE_FILE_TYPE_CPAK_OTHER; - data = allocate_from_main_pool_safe(0x100, COLOUR_TAG_BLACK); + data = mempool_alloc_safe(0x100, COLOUR_TAG_BLACK); if (read_data_from_controller_pak(controllerIndex, fileNum, (u8 *) data, 0x100) == CONTROLLER_PAK_GOOD) { switch (*data) { case GAMD: @@ -2129,6 +2129,6 @@ SaveFileType get_file_type(s32 controllerIndex, s32 fileNum) { break; } } - free_from_memory_pool(data); + mempool_free(data); return ret; } diff --git a/src/screen_asset.c b/src/screen_asset.c index ad83aa9c..33c69caf 100644 --- a/src/screen_asset.c +++ b/src/screen_asset.c @@ -32,7 +32,7 @@ UNUSED u32 load_screen(s32 screenIndex) { // screenTableCount will always be 0 in vanilla DKR, // since there are no screen assets in the ROM. if (screenTableCount == 0) { - free_from_memory_pool(screenTable); + mempool_free(screenTable); return (u32) OS_PHYSICAL_TO_K0(0x100000); } else { if (screenIndex < 0 || screenIndex >= screenTableCount) { @@ -42,10 +42,10 @@ UNUSED u32 load_screen(s32 screenIndex) { start = screenTable[screenIndex]; size = screenTable[screenIndex + 1] - start; - someAddr = (u32) allocate_from_main_pool_safe(size, COLOUR_TAG_BLUE); + someAddr = (u32) mempool_alloc_safe(size, COLOUR_TAG_BLUE); load_asset_to_address(ASSET_SCREENS, someAddr, start, size); - free_from_memory_pool(screenTable); + mempool_free(screenTable); return someAddr; } diff --git a/src/textures_sprites.c b/src/textures_sprites.c index e74d0ca0..bdd7869d 100644 --- a/src/textures_sprites.c +++ b/src/textures_sprites.c @@ -351,8 +351,8 @@ s16 gUsePrimColour; void tex_init_textures(void) { s32 i; - gTextureCache = allocate_from_main_pool_safe(sizeof(TextureHeader) * TEX_HEADER_COUNT, COLOUR_TAG_MAGENTA); - gCiPalettes = allocate_from_main_pool_safe(0x280, COLOUR_TAG_MAGENTA); + gTextureCache = mempool_alloc_safe(sizeof(TextureHeader) * TEX_HEADER_COUNT, COLOUR_TAG_MAGENTA); + gCiPalettes = mempool_alloc_safe(0x280, COLOUR_TAG_MAGENTA); gNumberOfLoadedTextures = 0; gCiPalettesSize = 0; gTextureAssetTable[TEX_TABLE_2D] = (s32 *) load_asset_section_from_rom(ASSET_TEXTURES_2D_TABLE); @@ -364,8 +364,8 @@ void tex_init_textures(void) { for (i = 0; gTextureAssetTable[TEX_TABLE_3D][i] != -1; i++) {} gTextureAssetID[TEX_TABLE_3D] = --i; - gSpriteCache = allocate_from_main_pool_safe(sizeof(Sprite) * TEX_SPRITE_COUNT, COLOUR_TAG_MAGENTA); - gCurrentSprite = allocate_from_main_pool_safe(sizeof(Sprite) * 32, COLOUR_TAG_MAGENTA); + gSpriteCache = mempool_alloc_safe(sizeof(Sprite) * TEX_SPRITE_COUNT, COLOUR_TAG_MAGENTA); + gCurrentSprite = mempool_alloc_safe(sizeof(Sprite) * 32, COLOUR_TAG_MAGENTA); D_80126358 = 0; gSpriteOffsetTable = (s32 *) load_asset_section_from_rom(ASSET_SPRITES_TABLE); gSpriteTableNum = 0; @@ -374,7 +374,7 @@ void tex_init_textures(void) { } gSpriteTableNum--; - gTempTextureHeader = allocate_from_main_pool_safe(0x28, COLOUR_TAG_MAGENTA); + gTempTextureHeader = mempool_alloc_safe(0x28, COLOUR_TAG_MAGENTA); D_80126344 = 0; } @@ -460,7 +460,7 @@ TextureHeader *load_texture(s32 arg0) { numberOfTextures = (gTempTextureHeader->header.numOfTextures >> 8) & 0xFFFF; if (!gTempTextureHeader->header.isCompressed) { - tex = allocate_from_main_pool((numberOfTextures * 0x60) + assetSize, gTexColourTag); + tex = mempool_alloc((numberOfTextures * 0x60) + assetSize, gTexColourTag); if (tex == NULL) { return NULL; } @@ -469,7 +469,7 @@ TextureHeader *load_texture(s32 arg0) { temp_v0_5 = byteswap32(&gTempTextureHeader->uncompressedSize); temp_a0 = (numberOfTextures * 0x60) + temp_v0_5; sp3C = temp_v0_5 + 0x20; - tex = allocate_from_main_pool(temp_a0 + 0x20, gTexColourTag); + tex = mempool_alloc(temp_a0 + 0x20, gTexColourTag); if (tex == NULL) { return NULL; } @@ -542,7 +542,7 @@ void free_texture(TextureHeader *tex) { if ((--tex->numberOfInstances) <= 0) { for (i = 0; i < gNumberOfLoadedTextures; i++) { if ((s32) tex == gTextureCache[(i << 1) + 1]) { - free_from_memory_pool(tex); + mempool_free(tex); gTextureCache[(i << 1)] = -1; gTextureCache[(i << 1) + 1] = -1; @@ -934,7 +934,7 @@ UNUSED u8 func_8007C660(s32 arg0) { return 0; } if (D_80126370 == 0) { - D_80126370 = (u8 *) allocate_from_main_pool_safe(gTextureAssetID[TEX_TABLE_2D], COLOUR_TAG_MAGENTA); + D_80126370 = (u8 *) mempool_alloc_safe(gTextureAssetID[TEX_TABLE_2D], COLOUR_TAG_MAGENTA); for (i = 0; i < gTextureAssetID[TEX_TABLE_2D]; i++) { D_80126370[i] = 0; } @@ -1020,7 +1020,7 @@ void free_sprite(Sprite *sprite) { for (frame = 0; frame < sprite->numberOfFrames; frame++) { free_texture(sprite->frames[frame]); } - free_from_memory_pool(sprite); + mempool_free(sprite); gSpriteCache[(i << 1) + 0] = -1; gSpriteCache[(i << 1) + 1] = -1; // ? break; diff --git a/src/thread3_main.c b/src/thread3_main.c index 598d1110..8eded573 100644 --- a/src/thread3_main.c +++ b/src/thread3_main.c @@ -171,7 +171,7 @@ void init_game(void) { s32 viMode; stubbed_printf(sDebugRomBuildInfo); - init_main_memory_pool(); + mempool_init_main(); gzip_init(); #ifdef ANTI_TAMPER sAntiPiracyTriggered = TRUE; @@ -198,9 +198,9 @@ void init_game(void) { gDmemInvalid = TRUE; } #endif - init_video(VIDEO_MODE_LOWRES_LPN, &gMainSched); + video_init(VIDEO_MODE_LOWRES_LPN, &gMainSched); init_PI_mesg_queue(); - setup_gfx_mesg_queues(&gMainSched); + gfxtask_init(&gMainSched); audio_init(&gMainSched); func_80008040(); // Should be very similar to allocate_object_model_pools sControllerStatus = init_controllers(); @@ -250,7 +250,7 @@ void main_game_loop(void) { rsp_segment(&gCurrDisplayList, SEGMENT_FRAMEBUFFER_OFFSET, (s32) gVideoCurrFramebuffer - VI_OFFSET); // Unused } if (gDrawFrameTimer == 0) { - setup_ostask_xbus(gDisplayLists[gSPTaskNum], gCurrDisplayList, 0); + gfxtask_run_xbus(gDisplayLists[gSPTaskNum], gCurrDisplayList, 0); gSPTaskNum += 1; gSPTaskNum &= 1; } @@ -267,9 +267,9 @@ void main_game_loop(void) { rsp_segment(&gCurrDisplayList, SEGMENT_FRAMEBUFFER, (s32) gVideoLastFramebuffer); rsp_segment(&gCurrDisplayList, SEGMENT_ZBUFFER, (s32) gVideoLastDepthBuffer); rsp_segment(&gCurrDisplayList, SEGMENT_FRAMEBUFFER_OFFSET, (s32) gVideoLastFramebuffer - VI_OFFSET); // Unused - init_rsp(&gCurrDisplayList); - init_rdp_and_framebuffer(&gCurrDisplayList); - render_background(&gCurrDisplayList, (Matrix *) &gGameCurrMatrix, TRUE); + rsp_init(&gCurrDisplayList); + rdp_init(&gCurrDisplayList); + bgdraw_render(&gCurrDisplayList, (Matrix *) &gGameCurrMatrix, TRUE); gSaveDataFlags = handle_save_data_and_read_controller(gSaveDataFlags, sLogicUpdateRate); if (get_lockup_status()) { render_epc_lock_up_display(); @@ -322,13 +322,13 @@ void main_game_loop(void) { copy_viewports_to_stack(); if (gDrawFrameTimer != 1) { if (gSkipGfxTask == FALSE) { - gScreenStatus = wait_for_gfx_task(); + gScreenStatus = gfxtask_wait(); } } else { gDrawFrameTimer = 0; } gSkipGfxTask = FALSE; - clear_free_queue(); + mempool_free_queue_clear(); if (!gIsPaused) { disable_cutscene_camera(); } @@ -343,7 +343,7 @@ void main_game_loop(void) { // the mul factor is hardcapped at 6, which happens at 10FPS. The mul factor // affects frameskipping, to maintain consistent game speed, through the (many) // dropped frames in DKR. - tempLogicUpdateRate = swap_framebuffer_when_ready(gScreenStatus); + tempLogicUpdateRate = fb_update(gScreenStatus); sLogicUpdateRate = tempLogicUpdateRate; tempLogicUpdateRateMax = LOGIC_10FPS; if (tempLogicUpdateRate > tempLogicUpdateRateMax) { @@ -371,7 +371,7 @@ void load_next_ingame_level(s32 numPlayers, s32 trackID, Vehicle vehicle) { */ void load_level_game(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicleId) { alloc_displaylist_heap(numberOfPlayers); - set_free_queue_state(0); + mempool_free_timer(0); camera_init(); load_game_text_table(); load_level(levelId, numberOfPlayers, entranceId, vehicleId, gGameCurrentCutscene); @@ -379,7 +379,7 @@ void load_level_game(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle v func_800AE728(8, 0x10, 0x96, 0x64, 0x32, 0); ainode_update(); osSetTime(0); - set_free_queue_state(2); + mempool_free_timer(2); rumble_init(TRUE); } @@ -389,10 +389,10 @@ void load_level_game(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle v * Waits for a GFX task before unloading. */ void unload_level_game(void) { - set_free_queue_state(0); + mempool_free_timer(0); if (gSkipGfxTask == FALSE) { if (gDrawFrameTimer != 1) { - wait_for_gfx_task(); + gfxtask_wait(); } gSkipGfxTask = TRUE; } @@ -404,7 +404,7 @@ void unload_level_game(void) { gCurrDisplayList = gDisplayLists[gSPTaskNum]; gDPFullSync(gCurrDisplayList++); gSPEndDisplayList(gCurrDisplayList++); - set_free_queue_state(2); + mempool_free_timer(2); } /** @@ -555,7 +555,7 @@ void mode_game(s32 updateRate) { break; } } - init_rdp_and_framebuffer(&gCurrDisplayList); + rdp_init(&gCurrDisplayList); divider_draw(&gCurrDisplayList); render_minimap_and_misc_hud(&gCurrDisplayList, &gGameCurrMatrix, &gGameCurrVertexList, updateRate); divider_clear_coverage(&gCurrDisplayList); @@ -862,7 +862,7 @@ Vehicle get_level_default_vehicle(void) { * Used for menus. */ void load_level_menu(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicleId, s32 cutsceneId) { - set_free_queue_state(0); + mempool_free_timer(0); camera_init(); load_game_text_table(); load_level(levelId, numberOfPlayers, entranceId, vehicleId, cutsceneId); @@ -870,7 +870,7 @@ void load_level_menu(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle v func_800AE728(4, 4, 0x6E, 0x30, 0x20, 0); ainode_update(); osSetTime(0); - set_free_queue_state(2); + mempool_free_timer(2); } /** @@ -880,13 +880,13 @@ void load_level_menu(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle v void unload_level_menu(void) { if (!gIsLoading) { gIsLoading = TRUE; - set_free_queue_state(0); + mempool_free_timer(0); clear_audio_and_track(); transition_begin(&D_800DD3F4); func_800AE270(); free_hud(); free_game_text_table(); - set_free_queue_state(2); + mempool_free_timer(2); } gIsLoading = FALSE; } @@ -902,7 +902,7 @@ void update_menu_scene(s32 updateRate) { ainode_update(); render_scene(&gCurrDisplayList, &gGameCurrMatrix, &gGameCurrVertexList, &gGameCurrTriList, updateRate); process_onscreen_textbox(updateRate); - init_rdp_and_framebuffer(&gCurrDisplayList); + rdp_init(&gCurrDisplayList); divider_draw(&gCurrDisplayList); divider_clear_coverage(&gCurrDisplayList); } @@ -1083,7 +1083,7 @@ void calc_and_alloc_heap_for_settings(void) { sizes[13] = sizes[12] + dataSize; // courseTimesPtr[2] sizes[14] = sizes[13] + dataSize; // total size - gSettingsPtr = allocate_from_main_pool_safe(sizes[14], COLOUR_TAG_WHITE); + gSettingsPtr = mempool_alloc_safe(sizes[14], COLOUR_TAG_WHITE); gSettingsPtr->courseFlagsPtr = (s32 *) ((u8 *) gSettingsPtr + sizes[0]); gSettingsPtr->balloonsPtr = (s16 *) ((u8 *) gSettingsPtr + sizes[1]); gSettingsPtr->tajFlags = 0; @@ -1358,21 +1358,20 @@ void alloc_displaylist_heap(s32 numberOfPlayers) { if (numberOfPlayers != gPrevPlayerCount) { gPrevPlayerCount = numberOfPlayers; num = numberOfPlayers; - set_free_queue_state(0); - free_from_memory_pool(gDisplayLists[0]); - free_from_memory_pool(gDisplayLists[1]); + mempool_free_timer(0); + mempool_free(gDisplayLists[0]); + mempool_free(gDisplayLists[1]); totalSize = ((gNumF3dCmdsPerPlayer[num] * sizeof(Gwords))) + ((gNumHudMatPerPlayer[num] * sizeof(Matrix))) + ((gNumHudVertsPerPlayer[num] * sizeof(Vertex))) + ((gNumHudTrisPerPlayer[num] * sizeof(Triangle))); - gDisplayLists[0] = (Gfx *) allocate_at_address_in_main_pool(totalSize, (u8 *) gDisplayLists[0], COLOUR_TAG_RED); - gDisplayLists[1] = - (Gfx *) allocate_at_address_in_main_pool(totalSize, (u8 *) gDisplayLists[1], COLOUR_TAG_YELLOW); + gDisplayLists[0] = (Gfx *) mempool_alloc_fixed(totalSize, (u8 *) gDisplayLists[0], COLOUR_TAG_RED); + gDisplayLists[1] = (Gfx *) mempool_alloc_fixed(totalSize, (u8 *) gDisplayLists[1], COLOUR_TAG_YELLOW); if ((gDisplayLists[0] == NULL) || gDisplayLists[1] == NULL) { if (gDisplayLists[0] != NULL) { - free_from_memory_pool(gDisplayLists[0]); + mempool_free(gDisplayLists[0]); gDisplayLists[0] = NULL; } if (gDisplayLists[1] != NULL) { - free_from_memory_pool(gDisplayLists[1]); + mempool_free(gDisplayLists[1]); gDisplayLists[1] = NULL; } default_alloc_displaylist_heap(); @@ -1387,7 +1386,7 @@ void alloc_displaylist_heap(s32 numberOfPlayers) { gCurrNumHudMatPerPlayer = gNumHudMatPerPlayer[num]; gCurrNumHudTrisPerPlayer = gNumHudTrisPerPlayer[num]; gCurrNumHudVertsPerPlayer = gNumHudVertsPerPlayer[num]; - set_free_queue_state(2); + mempool_free_timer(2); } gCurrDisplayList = gDisplayLists[gSPTaskNum]; gGameCurrMatrix = gMatrixHeap[gSPTaskNum]; @@ -1424,13 +1423,13 @@ void default_alloc_displaylist_heap(void) { (gNumHudVertsPerPlayer[numberOfPlayers] * sizeof(Vertex)) + (gNumHudTrisPerPlayer[numberOfPlayers] * sizeof(Triangle)); - gDisplayLists[0] = (Gfx *) allocate_from_main_pool_safe(totalSize, COLOUR_TAG_RED); + gDisplayLists[0] = (Gfx *) mempool_alloc_safe(totalSize, COLOUR_TAG_RED); gMatrixHeap[0] = (MatrixS *) ((u8 *) gDisplayLists[0] + (gNumF3dCmdsPerPlayer[numberOfPlayers] * sizeof(Gwords))); gVertexHeap[0] = (Vertex *) ((u8 *) gMatrixHeap[0] + (gNumHudMatPerPlayer[numberOfPlayers] * sizeof(Matrix))); gTriangleHeap[0] = (TriangleList *) ((u8 *) gVertexHeap[0] + (gNumHudVertsPerPlayer[numberOfPlayers] * sizeof(Vertex))); - gDisplayLists[1] = (Gfx *) allocate_from_main_pool_safe(totalSize, COLOUR_TAG_YELLOW); + gDisplayLists[1] = (Gfx *) mempool_alloc_safe(totalSize, COLOUR_TAG_YELLOW); gMatrixHeap[1] = (MatrixS *) ((u8 *) gDisplayLists[1] + (gNumF3dCmdsPerPlayer[numberOfPlayers] * sizeof(Gwords))); gVertexHeap[1] = (Vertex *) ((u8 *) gMatrixHeap[1] + (gNumHudMatPerPlayer[numberOfPlayers] * sizeof(Matrix))); gTriangleHeap[1] = diff --git a/src/tracks.c b/src/tracks.c index ea176490..1989bbdc 100644 --- a/src/tracks.c +++ b/src/tracks.c @@ -251,10 +251,9 @@ void init_track(u32 geometry, u32 skybox, s32 numberOfPlayers, Vehicle vehicle, numberOfPlayers = gScenePlayerViewports; gAntiAliasing = FALSE; for (i = 0; i < ARRAY_COUNT(gShadowHeapTextures); i++) { - gShadowHeapTextures[i] = - (DrawTexture *) allocate_from_main_pool_safe(sizeof(DrawTexture) * 400, COLOUR_TAG_YELLOW); - gShadowHeapTris[i] = (Triangle *) allocate_from_main_pool_safe(sizeof(Triangle) * 800, COLOUR_TAG_YELLOW); - gShadowHeapVerts[i] = (Vertex *) allocate_from_main_pool_safe(sizeof(Vertex) * 2000, COLOUR_TAG_YELLOW); + gShadowHeapTextures[i] = (DrawTexture *) mempool_alloc_safe(sizeof(DrawTexture) * 400, COLOUR_TAG_YELLOW); + gShadowHeapTris[i] = (Triangle *) mempool_alloc_safe(sizeof(Triangle) * 800, COLOUR_TAG_YELLOW); + gShadowHeapVerts[i] = (Vertex *) mempool_alloc_safe(sizeof(Vertex) * 2000, COLOUR_TAG_YELLOW); } gShadowHeapFlip = 0; @@ -449,8 +448,8 @@ GLOBAL_ASM("asm/non_matchings/tracks/func_80025510.s") void func_800257D0(void) { if (D_800DC924 != 0) { - free_from_memory_pool(D_8011D474); - free_from_memory_pool(D_800DC924); + mempool_free(D_8011D474); + mempool_free(D_800DC924); D_800DC924 = 0; } } @@ -1854,10 +1853,10 @@ void func_8002C0C4(s32 modelId) { LevelModel *mdl; set_texture_colour_tag(COLOUR_TAG_GREEN); - gTrackModelHeap = allocate_from_main_pool_safe(LEVEL_MODEL_MAX_SIZE, COLOUR_TAG_YELLOW); + gTrackModelHeap = mempool_alloc_safe(LEVEL_MODEL_MAX_SIZE, COLOUR_TAG_YELLOW); gCurrentLevelModel = gTrackModelHeap; - D_8011D370 = allocate_from_main_pool_safe(0x7D0, COLOUR_TAG_YELLOW); - D_8011D374 = allocate_from_main_pool_safe(0x1F4, COLOUR_TAG_YELLOW); + D_8011D370 = mempool_alloc_safe(0x7D0, COLOUR_TAG_YELLOW); + D_8011D374 = mempool_alloc_safe(0x1F4, COLOUR_TAG_YELLOW); D_8011D378 = 0; gLevelModelTable = (s32 *) load_asset_section_from_rom(ASSET_LEVEL_MODELS_TABLE); @@ -1877,7 +1876,7 @@ void func_8002C0C4(s32 modelId) { load_asset_to_address(ASSET_LEVEL_MODELS, temp, gLevelModelTable[modelId], temp_s4); gzip_inflate((u8 *) temp, (u8 *) gCurrentLevelModel); - free_from_memory_pool(gLevelModelTable); // Done with the level models table, so free it. + mempool_free(gLevelModelTable); // Done with the level models table, so free it. mdl = gCurrentLevelModel; @@ -1921,10 +1920,10 @@ void func_8002C0C4(s32 modelId) { if (temp_s4 > LEVEL_MODEL_MAX_SIZE) { rmonPrintf("ERROR!! TrackMem overflow .. %d\n", temp_s4); } - set_free_queue_state(0); - free_from_memory_pool(gTrackModelHeap); - allocate_at_address_in_main_pool(temp_s4, (u8 *) gTrackModelHeap, COLOUR_TAG_YELLOW); - set_free_queue_state(2); + mempool_free_timer(0); + mempool_free(gTrackModelHeap); + mempool_alloc_fixed(temp_s4, (u8 *) gTrackModelHeap, COLOUR_TAG_YELLOW); + mempool_free_timer(2); minimap_init(gCurrentLevelModel); for (i = 0; i < gCurrentLevelModel->numberOfSegments; i++) { @@ -1989,14 +1988,14 @@ void free_track(void) { for (i = 0; i < gCurrentLevelModel->numberOfTextures; i++) { free_texture(gCurrentLevelModel->textures[i].texture); } - free_from_memory_pool(gTrackModelHeap); - free_from_memory_pool(D_8011D370); - free_from_memory_pool(D_8011D374); + mempool_free(gTrackModelHeap); + mempool_free(D_8011D370); + mempool_free(D_8011D374); free_sprite((Sprite *) gCurrentLevelModel->minimapSpriteIndex); for (i = 0; i < MAXCONTROLLERS; i++) { - free_from_memory_pool(gShadowHeapTextures[i]); - free_from_memory_pool(gShadowHeapTris[i]); - free_from_memory_pool(gShadowHeapVerts[i]); + mempool_free(gShadowHeapTextures[i]); + mempool_free(gShadowHeapTris[i]); + mempool_free(gShadowHeapVerts[i]); } func_800257D0(); if (gSkydomeSegment != NULL) { diff --git a/src/video.c b/src/video.c index 18a8cf4e..0060a985 100644 --- a/src/video.c +++ b/src/video.c @@ -59,7 +59,7 @@ OSScClient gVideoSched; * Framebuffers are allocated at runtime. * Official Name: viInit */ -void init_video(s32 videoModeIndex, OSSched *sc) { +void video_init(s32 videoModeIndex, OSSched *sc) { if (osTvType == TV_TYPE_PAL) { gVideoRefreshRate = REFRESH_50HZ; gVideoAspectRatio = ASPECT_RATIO_PAL; @@ -81,17 +81,17 @@ void init_video(s32 videoModeIndex, OSSched *sc) { } } - reset_video_delta_time(); - set_video_mode_index(videoModeIndex); + video_delta_reset(); + fb_mode_set(videoModeIndex); gVideoFramebuffers[0] = NULL; gVideoFramebuffers[1] = NULL; - init_framebuffer(0); - init_framebuffer(1); + fb_alloc(0); + fb_alloc(1); gVideoCurrFbIndex = 1; - swap_framebuffers(); + fb_swap(); osCreateMesgQueue((OSMesgQueue *) &gVideoMesgQueue, gVideoMesgBuf, ARRAY_COUNT(gVideoMesgBuf)); osScAddClient(sc, &gVideoSched, (OSMesgQueue *) &gVideoMesgQueue, OS_SC_ID_VIDEO); - init_vi_settings(); + fb_init_vi(); sBlackScreenTimer = 12; osViBlack(TRUE); gVideoDeltaCounter = 0; @@ -101,14 +101,14 @@ void init_video(s32 videoModeIndex, OSSched *sc) { /** * Set the current video mode to the id specified. */ -void set_video_mode_index(s32 videoModeIndex) { +void fb_mode_set(s32 videoModeIndex) { gVideoModeIndex = videoModeIndex; } /** * Unused function that would return the current video mode index. */ -UNUSED s32 get_video_mode_index(void) { +UNUSED s32 fb_mode(void) { return gVideoModeIndex; } @@ -116,7 +116,7 @@ UNUSED s32 get_video_mode_index(void) { * Unused function that would change the framebuffer dimensions. * Since only one kind of video mode is ever used, this function is never called. */ -UNUSED void set_video_width_and_height_from_index(s32 fbIndex) { +UNUSED void fb_mode_size(s32 fbIndex) { gVideoFbWidths[fbIndex] = gVideoModeResolutions[gVideoModeIndex & NUM_RESOLUTION_MODES].width; gVideoFbHeights[fbIndex] = gVideoModeResolutions[gVideoModeIndex & NUM_RESOLUTION_MODES].height; } @@ -126,7 +126,7 @@ UNUSED void set_video_width_and_height_from_index(s32 fbIndex) { * The high 16 bits are the height of the frame, and the low 16 bits are the width. * Official Name: viGetCurrentSize */ -s32 get_video_width_and_height_as_s32(void) { +s32 fb_size(void) { return (gVideoFbHeights[gVideoCurrFbIndex] << 16) | gVideoFbWidths[gVideoCurrFbIndex]; } @@ -136,7 +136,7 @@ s32 get_video_width_and_height_as_s32(void) { * depending on the gVideoModeIndex value. * Most of these go unused, as the value is always 1. */ -void init_vi_settings(void) { +void fb_init_vi(void) { s32 viModeTableIndex; OSViMode *tvViMode; @@ -164,7 +164,7 @@ void init_vi_settings(void) { } else if (osTvType == TV_TYPE_MPAL) { tvViMode = &osViModeMpalLpn1; } - memory_copy((u8 *) tvViMode, (u8 *) &gTvViMode, sizeof(OSViMode)); + fb_memcpy((u8 *) tvViMode, (u8 *) &gTvViMode, sizeof(OSViMode)); if (osTvType == TV_TYPE_PAL) { // A simple osViExtendVStart to add an additional 24 scanlines? gTvViMode.fldRegs[0].vStart -= (PAL_HEIGHT_DIFFERENCE << 16); @@ -183,7 +183,7 @@ void init_vi_settings(void) { tvViMode = &osViModeMpalLpn1; } - memory_copy((u8 *) tvViMode, (u8 *) &gTvViMode, sizeof(OSViMode)); + fb_memcpy((u8 *) tvViMode, (u8 *) &gTvViMode, sizeof(OSViMode)); gTvViMode.comRegs.width = WIDTH(HIGH_RES_SCREEN_WIDTH); gTvViMode.comRegs.xScale = SCALE(1, 0); gTvViMode.fldRegs[0].origin = ORIGIN(HIGH_RES_SCREEN_WIDTH * 2); @@ -198,7 +198,7 @@ void init_vi_settings(void) { } else if (osTvType == TV_TYPE_MPAL) { tvViMode = &osViModeMpalLan1; } - memory_copy((u8 *) tvViMode, (u8 *) &gTvViMode, sizeof(OSViMode)); + fb_memcpy((u8 *) tvViMode, (u8 *) &gTvViMode, sizeof(OSViMode)); gTvViMode.comRegs.width = WIDTH(HIGH_RES_SCREEN_WIDTH); gTvViMode.comRegs.xScale = SCALE(1, 0); gTvViMode.fldRegs[0].origin = ORIGIN(HIGH_RES_SCREEN_WIDTH * 2); @@ -230,31 +230,33 @@ void init_vi_settings(void) { /** * Allocate the selected framebuffer index from the main pool. * Will also allocate the depthbuffer if it does not already exist. + * Framebuffers should be 64 bit aligned, but since the memory allocator + * already aligns by 16, it only needs 48 bits of alignment in addition. */ -void init_framebuffer(s32 index) { +void fb_alloc(s32 index) { if (gVideoFramebuffers[index] != 0) { - memory_slot_exists((u8 *) gVideoFramebuffers[index]); // Effectively unused. - free_from_memory_pool(gVideoFramebuffers[index]); + mempool_locked_unset((u8 *) gVideoFramebuffers[index]); // Effectively unused. + mempool_free(gVideoFramebuffers[index]); } gVideoFbWidths[index] = gVideoModeResolutions[gVideoModeIndex & NUM_RESOLUTION_MODES].width; gVideoFbHeights[index] = gVideoModeResolutions[gVideoModeIndex & NUM_RESOLUTION_MODES].height; if (gVideoModeIndex >= VIDEO_MODE_MIDRES_MASK) { gVideoFramebuffers[index] = - allocate_from_main_pool_safe((HIGH_RES_SCREEN_WIDTH * HIGH_RES_SCREEN_HEIGHT * 2) + 0x30, COLOUR_TAG_WHITE); - gVideoFramebuffers[index] = (u16 *) (((s32) gVideoFramebuffers[index] + 0x3F) & ~0x3F); + mempool_alloc_safe((HIGH_RES_SCREEN_WIDTH * HIGH_RES_SCREEN_HEIGHT * 2) + 0x30, COLOUR_TAG_WHITE); + gVideoFramebuffers[index] = FBALIGN(gVideoFramebuffers[index]); if (gVideoDepthBuffer == NULL) { - gVideoDepthBuffer = allocate_from_main_pool_safe( - (HIGH_RES_SCREEN_WIDTH * HIGH_RES_SCREEN_HEIGHT * 2) + 0x30, COLOUR_TAG_WHITE); - gVideoDepthBuffer = (u16 *) (((s32) gVideoDepthBuffer + 0x3F) & ~0x3F); + gVideoDepthBuffer = + mempool_alloc_safe((HIGH_RES_SCREEN_WIDTH * HIGH_RES_SCREEN_HEIGHT * 2) + 0x30, COLOUR_TAG_WHITE); + gVideoDepthBuffer = FBALIGN(gVideoDepthBuffer); } } else { gVideoFramebuffers[index] = - allocate_from_main_pool_safe((gVideoFbWidths[index] * gVideoFbHeights[index] * 2) + 0x30, COLOUR_TAG_WHITE); - gVideoFramebuffers[index] = (u16 *) (((s32) gVideoFramebuffers[index] + 0x3F) & ~0x3F); + mempool_alloc_safe((gVideoFbWidths[index] * gVideoFbHeights[index] * 2) + 0x30, COLOUR_TAG_WHITE); + gVideoFramebuffers[index] = FBALIGN(gVideoFramebuffers[index]); if (gVideoDepthBuffer == NULL) { - gVideoDepthBuffer = allocate_from_main_pool_safe( - (gVideoFbWidths[index] * gVideoFbHeights[index] * 2) + 0x30, COLOUR_TAG_WHITE); - gVideoDepthBuffer = (u16 *) (((s32) gVideoDepthBuffer + 0x3F) & ~0x3F); + gVideoDepthBuffer = + mempool_alloc_safe((gVideoFbWidths[index] * gVideoFbHeights[index] * 2) + 0x30, COLOUR_TAG_WHITE); + gVideoDepthBuffer = FBALIGN(gVideoDepthBuffer); } } } @@ -263,7 +265,7 @@ void init_framebuffer(s32 index) { * Sets the video counters to their default values. * Another renmant from an unused system. */ -void reset_video_delta_time(void) { +void video_delta_reset(void) { gVideoDeltaCounter = 0; gVideoDeltaTime = 2; } @@ -273,9 +275,9 @@ void reset_video_delta_time(void) { * then update the current framebuffer index. * This function also has a section where it counts a timer that goes no higher * than an update magnitude of 2. It's only purpose is to be used as a divisor - * in the unused function, get_video_refresh_speed. + * in the unused function, vi_refresh_rate. */ -s32 swap_framebuffer_when_ready(s32 mesg) { +s32 fb_update(s32 mesg) { u8 tempUpdateRate; tempUpdateRate = LOGIC_60FPS; @@ -286,7 +288,7 @@ s32 swap_framebuffer_when_ready(s32 mesg) { } } if (mesg != MESG_SKIP_BUFFER_SWAP) { - swap_framebuffers(); + fb_swap(); } while (osRecvMesg(gVideoMesgQueue, NULL, OS_MESG_NOBLOCK) != -1) { tempUpdateRate++; @@ -325,7 +327,7 @@ void func_8007AB24(u8 arg0) { * A fully performant game would return 60. * Perhaps may have been used originally to calculate the factor in which to handle frameskipping with. */ -UNUSED s32 get_video_refresh_speed(void) { +UNUSED s32 vi_refresh_rate(void) { return (s32) ((f32) gVideoRefreshRate / (f32) gVideoDeltaTime); } @@ -333,7 +335,7 @@ UNUSED s32 get_video_refresh_speed(void) { * Flips the current framebuffer index, swapping to the other framebuffer * for the next frame, then update the current and previous framebuffer pointers. */ -void swap_framebuffers(void) { +void fb_swap(void) { gVideoLastFramebuffer = gVideoFramebuffers[gVideoCurrFbIndex]; gVideoLastDepthBuffer = gVideoDepthBuffer; gVideoCurrFbIndex ^= 1; @@ -344,7 +346,7 @@ void swap_framebuffers(void) { /** * Copy byte-by-byte a region from one address to another. */ -void memory_copy(u8 *src, u8 *dest, s32 len) { +void fb_memcpy(u8 *src, u8 *dest, s32 len) { s32 i; for (i = 0; i < len; i++) { diff --git a/src/video.h b/src/video.h index b0b86568..cb831852 100644 --- a/src/video.h +++ b/src/video.h @@ -32,6 +32,9 @@ #define HEIGHT_RATIO_NTSC (LOW_RES_NTSC_HEIGHT / LOW_RES_NTSC_HEIGHT) #define HEIGHT_RATIO_MPAL (LOW_RES_MPAL_HEIGHT / LOW_RES_NTSC_HEIGHT) +// Framebuffers require 64 byte alignment. +#define FBALIGN(a) ((u16 *) (((s32) (a) + 0x3F) & ~0x3F)) + /** * This is an offset with a size of two rows of the framebuffer. * It's likely they were trying to offset the framebuffer in order to @@ -100,16 +103,16 @@ typedef struct VideoModeResolution { extern VideoModeResolution gVideoModeResolutions[8]; -void init_video(s32 videoModeIndex, OSSched *sc); -void set_video_mode_index(s32 videoModeIndex); -s32 get_video_width_and_height_as_s32(void); -void init_vi_settings(void); -void init_framebuffer(s32 index); -void reset_video_delta_time(void); +void video_init(s32 videoModeIndex, OSSched *sc); +void fb_mode_set(s32 videoModeIndex); +s32 fb_size(void); +void fb_init_vi(void); +void fb_alloc(s32 index); +void video_delta_reset(void); void func_8007AB24(u8 arg0); -s32 get_video_refresh_speed(void); -void swap_framebuffers(void); -void memory_copy(u8 *src, u8 *dest, s32 len); -s32 swap_framebuffer_when_ready(s32 mesg); +s32 vi_refresh_rate(void); +void fb_swap(void); +void fb_memcpy(u8 *src, u8 *dest, s32 len); +s32 fb_update(s32 mesg); #endif diff --git a/src/waves.c b/src/waves.c index 1090a6e4..869a431b 100644 --- a/src/waves.c +++ b/src/waves.c @@ -123,11 +123,11 @@ s32 gWavePowerDivisor; /*****************************/ -#define FREE_MEM(mem) \ - tempMem = (s32 *) mem; \ - if (tempMem != NULL) { \ - free_from_memory_pool(tempMem); \ - mem = NULL; \ +#define FREE_MEM(mem) \ + tempMem = (s32 *) mem; \ + if (tempMem != NULL) { \ + mempool_free(tempMem); \ + mem = NULL; \ } #define FREE_TEX(tex) \ tempTex = tex; \ @@ -161,32 +161,31 @@ void wave_init(void) { s32 i; free_waves(); - D_800E3040 = (f32 *) allocate_from_main_pool_safe(D_80129FC8.unk20 << 2, COLOUR_TAG_CYAN); - D_800E3044 = (s16 *) allocate_from_main_pool_safe((D_80129FC8.unk4 << 2) * D_80129FC8.unk4, COLOUR_TAG_CYAN); - D_800E3048 = - (s32 *) allocate_from_main_pool_safe(((D_80129FC8.unk0 + 1) << 2) * (D_80129FC8.unk0 + 1), COLOUR_TAG_CYAN); + D_800E3040 = (f32 *) mempool_alloc_safe(D_80129FC8.unk20 << 2, COLOUR_TAG_CYAN); + D_800E3044 = (s16 *) mempool_alloc_safe((D_80129FC8.unk4 << 2) * D_80129FC8.unk4, COLOUR_TAG_CYAN); + D_800E3048 = (s32 *) mempool_alloc_safe(((D_80129FC8.unk0 + 1) << 2) * (D_80129FC8.unk0 + 1), COLOUR_TAG_CYAN); allocSize = ((D_80129FC8.unk0 + 1) << 2) * (D_80129FC8.unk0 + 1); - D_800E304C[0] = allocate_from_main_pool_safe(allocSize * ARRAY_COUNT(D_800E304C), COLOUR_TAG_CYAN); + D_800E304C[0] = mempool_alloc_safe(allocSize * ARRAY_COUNT(D_800E304C), COLOUR_TAG_CYAN); for (i = 1; i < ARRAY_COUNT(D_800E304C); i++) { D_800E304C[i] = (f32 *) (((u32) D_800E304C[0]) + (allocSize * i)); } temp = (D_80129FC8.unk0 + 1); allocSize = (temp * 250 * (D_80129FC8.unk0 + 1)); if (D_8012A078 != 2) { - D_800E3070[0] = (Vertex *) allocate_from_main_pool_safe(allocSize << 1, COLOUR_TAG_CYAN); + D_800E3070[0] = (Vertex *) mempool_alloc_safe(allocSize << 1, COLOUR_TAG_CYAN); D_800E3070[1] = (Vertex *) (((u32) D_800E3070[0]) + allocSize); } else { - D_800E3070[0] = (Vertex *) allocate_from_main_pool_safe(allocSize << 2, COLOUR_TAG_CYAN); + D_800E3070[0] = (Vertex *) mempool_alloc_safe(allocSize << 2, COLOUR_TAG_CYAN); D_800E3070[1] = (Vertex *) (((u32) D_800E3070[0]) + allocSize); D_800E3070[2] = (Vertex *) (((u32) D_800E3070[1]) + allocSize); D_800E3070[3] = (Vertex *) (((u32) D_800E3070[2]) + allocSize); } allocSize = (D_80129FC8.unk0 * 32) * D_80129FC8.unk0; if (D_8012A078 != 2) { - D_800E3080[0] = allocate_from_main_pool_safe(allocSize << 1, COLOUR_TAG_CYAN); + D_800E3080[0] = mempool_alloc_safe(allocSize << 1, COLOUR_TAG_CYAN); D_800E3080[1] = (u8 *) (((u32) D_800E3080[0]) + allocSize); } else { - D_800E3080[0] = (u8 *) allocate_from_main_pool_safe(allocSize << 2, COLOUR_TAG_CYAN); + D_800E3080[0] = (u8 *) mempool_alloc_safe(allocSize << 2, COLOUR_TAG_CYAN); D_800E3080[1] = (u8 *) (((u32) D_800E3080[0]) + allocSize); D_800E3080[2] = (u8 *) (((u32) D_800E3080[1]) + allocSize); D_800E3080[3] = (u8 *) (((u32) D_800E3080[2]) + allocSize); diff --git a/src/weather.c b/src/weather.c index cc1938d6..f419d261 100644 --- a/src/weather.c +++ b/src/weather.c @@ -190,11 +190,11 @@ void weather_clip_planes(s16 near, s16 far) { } } -#define FREE_MEM(mem) \ - tempMem = (s32 *) mem; \ - if (tempMem != NULL) { \ - free_from_memory_pool(tempMem); \ - mem = NULL; \ +#define FREE_MEM(mem) \ + tempMem = (s32 *) mem; \ + if (tempMem != NULL) { \ + mempool_free(tempMem); \ + mem = NULL; \ } #define FREE_TEX(tex) \ tempTex = tex; \ @@ -266,8 +266,7 @@ void weather_reset(s32 weatherType, s32 density, s32 velX, s32 velY, s32 velZ, s rain_init(intensity + 1, opacity + 1); return; } - pos = (Vec3i *) allocate_from_main_pool_safe(gWeatherPresets[weatherType].size * (sizeof(Vec3i)), - COLOUR_TAG_LIGHT_ORANGE); + pos = (Vec3i *) mempool_alloc_safe(gWeatherPresets[weatherType].size * (sizeof(Vec3i)), COLOUR_TAG_LIGHT_ORANGE); gSnowGfx.pos = pos; gSnowGfx.size = gWeatherPresets[weatherType].size; gSnowGfx.offsetX = gWeatherPresets[weatherType].offsetX; @@ -285,9 +284,8 @@ void weather_reset(s32 weatherType, s32 density, s32 velX, s32 velY, s32 velZ, s } numOfElements = density; gSnowDensity = numOfElements; - gSnowTriIndices = (s16 *) allocate_from_main_pool_safe(numOfElements * (sizeof(s16)), COLOUR_TAG_LIGHT_ORANGE); - gSnowPhysics = - (SnowPosData *) allocate_from_main_pool_safe(numOfElements * (sizeof(SnowPosData)), COLOUR_TAG_LIGHT_ORANGE); + gSnowTriIndices = (s16 *) mempool_alloc_safe(numOfElements * (sizeof(s16)), COLOUR_TAG_LIGHT_ORANGE); + gSnowPhysics = (SnowPosData *) mempool_alloc_safe(numOfElements * (sizeof(SnowPosData)), COLOUR_TAG_LIGHT_ORANGE); for (i = 0; i < gSnowDensity; i++) { gSnowPhysics[i].x_position = get_random_number_from_range(0, gSnowGfx.radiusX); gSnowPhysics[i].y_position = get_random_number_from_range(0, gSnowGfx.radiusY); @@ -301,8 +299,8 @@ void weather_reset(s32 weatherType, s32 density, s32 velX, s32 velY, s32 velZ, s numOfElements = numOfElements * 4; allocSize = sizeof(Vertex); allocSize *= numOfElements; - gSnowVertexData[0] = allocate_from_main_pool_safe(allocSize, COLOUR_TAG_LIGHT_ORANGE); - gSnowVertexData[1] = allocate_from_main_pool_safe(allocSize, COLOUR_TAG_LIGHT_ORANGE); + gSnowVertexData[0] = mempool_alloc_safe(allocSize, COLOUR_TAG_LIGHT_ORANGE); + gSnowVertexData[1] = mempool_alloc_safe(allocSize, COLOUR_TAG_LIGHT_ORANGE); for (j = 0; j < 2; j++) { gSnowVerts = gSnowVertexData[j]; for (i = 0; i < numOfElements; i++) { @@ -315,8 +313,7 @@ void weather_reset(s32 weatherType, s32 density, s32 velX, s32 velY, s32 velZ, s width = (gSnowGfx.texture->width << 5) - 1; height = (gSnowGfx.texture->height << 5) - 1; - gSnowTriangles = - (Triangle *) allocate_from_main_pool_safe(gSnowTriCount * (sizeof(Triangle)), COLOUR_TAG_LIGHT_ORANGE); + gSnowTriangles = (Triangle *) mempool_alloc_safe(gSnowTriCount * (sizeof(Triangle)), COLOUR_TAG_LIGHT_ORANGE); for (i = 0; i < gSnowTriCount; i += 2) { gSnowTriangles[i].flags = 0; gSnowTriangles[i].vi0 = (i << 1) + 3; @@ -711,7 +708,7 @@ void lensflare_render(Gfx **dList, MatrixS **mats, Vertex **verts, ObjectSegment pos[1].z = (mag2 * gLensFlarePos.z) - pos[1].z; } } - width = get_video_width_and_height_as_s32(); + width = fb_size(); height = GET_VIDEO_HEIGHT(width); width = GET_VIDEO_WIDTH(width); gfxTemp = (*dList);