mirror of
https://github.com/n64decomp/mk64
synced 2026-07-04 20:05:30 -04:00
Refresh 1
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
#include <ultra64.h>
|
||||
#include <macros.h>
|
||||
#include "common_structs.h"
|
||||
|
||||
extern OSIoMesg D_8014F0A0;
|
||||
extern OSMesgQueue D_8014EF58;
|
||||
extern OSMesg D_8014F098;
|
||||
|
||||
extern u8 _kart_texturesSegmentRomStart[];
|
||||
extern u32 gKartPalettes[];
|
||||
|
||||
// arrays?
|
||||
extern u32 *D_802F1F80;
|
||||
extern u32 *D_802DFB80;
|
||||
|
||||
extern s16 D_800DDEB0[];
|
||||
extern s32 D_800DC52C;
|
||||
|
||||
// Structured like a 3D pointer array
|
||||
extern u32 ***gKartTextureTable0, ***gKartTextureTable1, **gKartTextureGroup18s;
|
||||
|
||||
// some larger diffs that need resolving
|
||||
#ifdef MIPS_TO_C
|
||||
void func_80027040(Player *player, s8 arg1, s8 arg2, s8 arg3, s32 arg4) {
|
||||
s32 temp_v0 = player->unk_0BC;
|
||||
void *temp_s0;
|
||||
// void *temp_v1;
|
||||
|
||||
if ((temp_v0 & 0x80) == 0x80 ||
|
||||
(temp_v0 & 0x40) == 0x40 ||
|
||||
(temp_v0 & 0x80000) == 0x80000 ||
|
||||
(temp_v0 & 0x800000) == 0x800000 ||
|
||||
(temp_v0 & 0x20000) == 0x20000 ||
|
||||
(player->unk_044 & 0x800) != 0
|
||||
) {
|
||||
// temp_v1 = player + (arg2 * 2);
|
||||
if (player->unk_244[arg2] == 0) {
|
||||
temp_s0 = (arg4 * 0x9200) + (arg3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
|
||||
osInvalDCache(temp_s0, D_800DDEB0[player->unk_254]);
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartTextureTable0[player->unk_254][player->unk_24C[arg2]][player->unk_244[arg2]] & 0xFFFFFF], temp_s0, D_800DDEB0[temp_v0], &D_8014EF58);
|
||||
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
|
||||
} else {
|
||||
temp_s0 = (arg4 * 0x9200) + (arg3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
|
||||
osInvalDCache(temp_s0, D_800DDEB0[player->unk_254]);
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartTextureTable1[player->unk_254][player->unk_24C[arg2]][player->unk_244[arg2]] & 0xFFFFFF], temp_s0, D_800DDEB0[temp_v0], &D_8014EF58);
|
||||
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
|
||||
}
|
||||
}
|
||||
else if ((temp_v0 & 0x400) == 0x400 ||
|
||||
(temp_v0 & 0x1000000) == 0x1000000 ||
|
||||
(temp_v0 & 0x2000000) == 0x2000000 ||
|
||||
(temp_v0 & 0x10000) == 0x10000
|
||||
) {
|
||||
temp_s0 = (arg4 * 0x9200) + (arg3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
|
||||
osInvalDCache(temp_s0, 0x780);
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartTextureGroup18s[player->unk_254][player->unk_0A8 >> 8] & 0xFFFFFF], temp_s0, 0x900, &D_8014EF58);
|
||||
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
|
||||
} else {
|
||||
temp_s0 = (arg4 * 0x9200) + (arg3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
|
||||
osInvalDCache(temp_s0, D_800DDEB0[player->unk_254]);
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartTextureTable0[player->unk_254][player->unk_24C[arg2]][player->unk_244[arg2]] & 0xFFFFFF], temp_s0, D_800DDEB0[temp_v0], &D_8014EF58);
|
||||
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/code_80027040/func_80027040.s")
|
||||
#endif
|
||||
|
||||
#ifdef MIPS_TO_C
|
||||
//generated by mips_to_c commit 3ec45aadfc2cb619035fb802d88c52eacfab0326
|
||||
void func_80027560(Player *arg0, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
|
||||
void *sp30;
|
||||
s32 temp_v0;
|
||||
s8 temp_a3;
|
||||
u16 temp_v0;
|
||||
u16 temp_v0;
|
||||
u16 temp_v0;
|
||||
void *temp_s0;
|
||||
void *temp_s0_2;
|
||||
void *temp_s0_3;
|
||||
void *temp_s0_4;
|
||||
void *temp_v1;
|
||||
void *temp_v1_2;
|
||||
|
||||
temp_v0 = arg0->unkBC;
|
||||
temp_a3 = arg3;
|
||||
if ((temp_v0 & 0x80) == 0x80) {
|
||||
block_6:
|
||||
temp_v1_2 = arg0 + (arg2 * 2);
|
||||
if (temp_v1_2->unk244 == 0) {
|
||||
temp_s0_4 = (arg4 * 0x9200) + (temp_a3 * 0x4900) + (arg1 * 0x920) + 0x802DFB80;
|
||||
sp30 = temp_v1_2;
|
||||
osInvalDCache(temp_s0_4, *(&D_800DDEB0 + (arg0->unk254 * 2)));
|
||||
temp_v0 = arg0->unk254;
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, (*(*(*(&gKartTextureTable0 + (temp_v0 * 4)) + (temp_v1_2->unk24C * 4)) + (temp_v1_2->unk244 * 4)) & 0xFFFFFF) + &_kart_texturesSegmentRomStart, temp_s0_4, *(&D_800DDEB0 + (temp_v0 * 2)), &D_8014EF58);
|
||||
return;
|
||||
}
|
||||
temp_s0_3 = (arg4 * 0x9200) + (temp_a3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
|
||||
sp30 = temp_v1_2;
|
||||
osInvalDCache(temp_s0_3, *(&D_800DDEB0 + (arg0->unk254 * 2)));
|
||||
temp_v0 = arg0->unk254;
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, (*(*(*(&gKartTextureTable1 + (temp_v0 * 4)) + (temp_v1_2->unk24C * 4)) + (temp_v1_2->unk244 * 4)) & 0xFFFFFF) + &_kart_texturesSegmentRomStart, temp_s0_3, *(&D_800DDEB0 + (temp_v0 * 2)), &D_8014EF58);
|
||||
return;
|
||||
}
|
||||
if ((temp_v0 & 0x40) == 0x40) {
|
||||
goto block_6;
|
||||
}
|
||||
if ((temp_v0 & 0x80000) == 0x80000) {
|
||||
goto block_6;
|
||||
}
|
||||
if ((temp_v0 & 0x800000) == 0x800000) {
|
||||
goto block_6;
|
||||
}
|
||||
if ((temp_v0 & 0x20000) == 0x20000) {
|
||||
goto block_6;
|
||||
}
|
||||
if ((arg0->unk44 & 0x800) != 0) {
|
||||
goto block_6;
|
||||
}
|
||||
if ((temp_v0 & 0x400) == 0x400) {
|
||||
block_13:
|
||||
temp_s0_2 = (arg4 * 0x9200) + (temp_a3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
|
||||
osInvalDCache(temp_s0_2, 0x780);
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, (*(*(&gKartTextureGroup18s + (arg0->unk254 * 4)) + ((arg0->unkA8 >> 8) * 4)) & 0xFFFFFF) + &_kart_texturesSegmentRomStart, temp_s0_2, 0x900, &D_8014EF58);
|
||||
return;
|
||||
}
|
||||
if ((temp_v0 & 0x1000000) == 0x1000000) {
|
||||
goto block_13;
|
||||
}
|
||||
if ((temp_v0 & 0x2000000) == 0x2000000) {
|
||||
goto block_13;
|
||||
}
|
||||
if ((temp_v0 & 0x10000) == 0x10000) {
|
||||
goto block_13;
|
||||
}
|
||||
temp_s0 = (arg4 * 0x9200) + (temp_a3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
|
||||
osInvalDCache(temp_s0, *(&D_800DDEB0 + (arg0->unk254 * 2)));
|
||||
temp_v0 = arg0->unk254;
|
||||
temp_v1 = arg0 + (arg2 * 2);
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, (*(*(*(&gKartTextureTable0 + (temp_v0 * 4)) + (temp_v1->unk24C * 4)) + (temp_v1->unk244 * 4)) & 0xFFFFFF) + &_kart_texturesSegmentRomStart, temp_s0, *(&D_800DDEB0 + (temp_v0 * 2)), &D_8014EF58);
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/code_80027040/func_80027560.s")
|
||||
#endif
|
||||
|
||||
// regalloc
|
||||
#ifdef NON_MATCHING
|
||||
void func_80027A20(Player *player, s8 arg1, s8 arg2, s8 arg3) {
|
||||
void *temp_s0 = (arg3 << 0xE) + (arg2 << 0xC) + (arg1 << 9) + (s32)&D_802F1F80;
|
||||
|
||||
switch(D_800DC52C) {
|
||||
case 0: case 1: case 2:
|
||||
osInvalDCache(temp_s0, 0x200);
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartPalettes[player->unk_254] & 0x00FFFFFF], temp_s0, 0x200, &D_8014EF58);
|
||||
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
|
||||
break;
|
||||
case 3:
|
||||
osInvalDCache(temp_s0, 0x200);
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartPalettes[player->unk_254] & 0x00FFFFFF], temp_s0, 0x200, &D_8014EF58);
|
||||
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/code_80027040/func_80027A20.s")
|
||||
#endif
|
||||
|
||||
void func_80027BDC(s32 arg0, s32 arg1, void *vAddr, u16 size) {
|
||||
osInvalDCache(vAddr, size);
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[arg1 & 0x00FFFFFF], vAddr, size, &D_8014EF58);
|
||||
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
|
||||
}
|
||||
|
||||
void func_80027C74(s32 arg0, s32 arg1, void *vAddr, u16 size) {
|
||||
osInvalDCache(vAddr, size);
|
||||
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[arg1 & 0x00FFFFFF], vAddr, size, &D_8014EF58);
|
||||
}
|
||||
Reference in New Issue
Block a user