match msmmem.c, m409/player.c progress
This commit is contained in:
parent
c073ee4d07
commit
3ec127d86d
5 changed files with 450 additions and 33 deletions
136
src/msm/msmmem.c
Normal file
136
src/msm/msmmem.c
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
#include "msm/msmmem.h"
|
||||
|
||||
typedef struct _unkStruct {
|
||||
struct _unkStruct* prev;
|
||||
struct _unkStruct* next;
|
||||
u32 unk8;
|
||||
u32 unkC;
|
||||
void* unk10;
|
||||
void* unk14;
|
||||
char unk18[0x8];
|
||||
} unkStruct;
|
||||
|
||||
typedef struct _unkMemStruct {
|
||||
unkStruct* unk0;
|
||||
u32 unk4;
|
||||
unkStruct* unk8;
|
||||
unkStruct unkC;
|
||||
} unkMemStruct;
|
||||
|
||||
static unkMemStruct mem;
|
||||
|
||||
void msmMemFree(void* arg0) {
|
||||
unkStruct* temp_r6;
|
||||
unkStruct* temp_r7;
|
||||
unkStruct* temp_r8;
|
||||
unkStruct* temp_r5;
|
||||
unkStruct* temp;
|
||||
|
||||
temp = arg0;
|
||||
|
||||
temp_r6 = &temp[-1];
|
||||
temp_r7 = temp_r6->prev;
|
||||
temp_r8 = temp_r6->next;
|
||||
if (mem.unk0 > temp_r6 || ((u32)mem.unk0 + (u32)mem.unk4) <= (u32)temp_r6) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((temp_r7->next != temp_r6) || (temp_r6->unk10 != arg0) || (temp_r8 && (temp_r8->prev != temp_r6))) {
|
||||
return;
|
||||
}
|
||||
|
||||
temp_r7->unkC += temp_r6->unk8 + temp_r6->unkC;
|
||||
temp_r7->next = temp_r8;
|
||||
temp_r5 = mem.unk8;
|
||||
if ((temp_r5 == temp_r6) || (temp_r5->unkC < temp_r7->unkC)) {
|
||||
mem.unk8 = temp_r7;
|
||||
}
|
||||
if (temp_r8) {
|
||||
temp_r8->prev = temp_r7;
|
||||
if (mem.unk8->unkC < temp_r8->unkC) {
|
||||
mem.unk8 = temp_r8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void* msmMemAlloc(s32 arg0) {
|
||||
unkMemStruct* memC;
|
||||
s32 temp_r0;
|
||||
u32 var_r5;
|
||||
u32 var_r7;
|
||||
unkStruct* temp_r5;
|
||||
unkStruct* var_r8;
|
||||
unkStruct* temp_r9;
|
||||
unkStruct* temp_r6;
|
||||
unkStruct* temp_r4;
|
||||
|
||||
var_r7 = arg0 + 0x20;
|
||||
temp_r0 = var_r7 & 0x1F;
|
||||
if (temp_r0 != 0) {
|
||||
var_r7 += 0x20 - temp_r0;
|
||||
}
|
||||
if (mem.unk8->unkC >= var_r7) {
|
||||
var_r8 = mem.unk8;
|
||||
} else {
|
||||
var_r8 = &mem.unkC;
|
||||
|
||||
do {
|
||||
if (var_r8->unkC >= var_r7) break;
|
||||
var_r8 = var_r8->next;
|
||||
} while (var_r8);
|
||||
if (!var_r8) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
var_r5 = var_r8->unk8;
|
||||
if (var_r5 != 0) {
|
||||
var_r5 -= 0x20;
|
||||
}
|
||||
temp_r5 = (void*)((u32)var_r8->unk10 + var_r5);
|
||||
temp_r9 = var_r8->next;
|
||||
if ((mem.unk0 > temp_r5) || ((void*)((u32)mem.unk0 + (u32)mem.unk4) <= temp_r5)) {
|
||||
return NULL;
|
||||
}
|
||||
temp_r5->unk8 = var_r7;
|
||||
temp_r5->unkC = var_r8->unkC - var_r7;
|
||||
temp_r5->unk10 = (temp_r5 + 1);
|
||||
temp_r5->prev = var_r8;
|
||||
temp_r5->next = temp_r9;
|
||||
mem.unk8 = temp_r5;
|
||||
var_r8->unkC = 0;
|
||||
var_r8->next = temp_r5;
|
||||
if (temp_r9) {
|
||||
temp_r9->prev = temp_r5;
|
||||
if (mem.unk8->unkC < temp_r9->unkC) {
|
||||
mem.unk8 = temp_r9;
|
||||
}
|
||||
}
|
||||
return temp_r5->unk10;
|
||||
}
|
||||
|
||||
void msmMemInit(void* arg0, u32 arg1) {
|
||||
unkStruct* temp_r7;
|
||||
s32 temp;
|
||||
|
||||
temp = (s32)arg0 & 0x1F;
|
||||
switch (temp) {
|
||||
default:
|
||||
temp = 0x20 - temp;
|
||||
break;
|
||||
case 0:
|
||||
temp = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
mem.unk0 = (void*)((s32)arg0 + temp);
|
||||
temp = (s32)arg0 + arg1;
|
||||
mem.unk4 = ((temp - (s32)mem.unk0) & ~0x1F);
|
||||
temp_r7 = &mem.unkC;
|
||||
temp_r7->unk8 = 0;
|
||||
temp_r7->unkC = mem.unk4;
|
||||
temp_r7->unk10 = mem.unk0;
|
||||
temp_r7->prev = NULL;
|
||||
temp_r7->next = NULL;
|
||||
mem.unk8 = &mem.unkC;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue