Label a save info loop (#645)

* save info

* more gcc progress
This commit is contained in:
MegaMech
2024-08-22 23:59:04 -06:00
committed by GitHub
parent 40f677db52
commit 8ebae23080
18 changed files with 261 additions and 42 deletions
+3 -2
View File
@@ -3,6 +3,7 @@
#include "internal.h"
#include "data.h"
#include "../buffers/audio_heap.h"
struct ReverbSettingsEU sReverbSettings[] = {
{0x01, 0x28, 0x4fff},
@@ -33,8 +34,8 @@ struct AudioSessionSettingsEU gAudioSessionPresets[] = {
s8 gUnusedCount800EA5C8 = 0x1c;
s16 gTatumsPerBeat = TATUMS_PER_BEAT;
s32 gAudioHeapSize = 0x00048c00;
s32 gAudioInitPoolSize = 0x00002600;
s32 gAudioHeapSize = AUDIO_HEAP_SIZE;
s32 gAudioInitPoolSize = AUDIO_HEAP_INIT_SIZE;
s32 D_800EA5D8 = 0;
volatile s32 gAudioLoadLock = 0;
+3 -3
View File
@@ -1,5 +1,6 @@
#include <PR/ultratypes.h>
#include <macros.h>
#include <mk64.h>
#include "data.h"
#include "effects.h"
@@ -435,10 +436,9 @@ struct SPTask *gAudioTask; // gAudioTask?
struct SPTask gAudioTasks[2]; // gAudioTasks?
f32 D_803B7178;
s32 gRefreshRate;
s16 *gAiBuffers[3]; // unconfirmed, osAiSetNextBuffer vaddr
s16 *gAiBuffers[NUMAIBUFFERS]; // unconfirmed, osAiSetNextBuffer vaddr
s16 gAiBufferLengths[NUMAIBUFFERS]; // osAiSetNextBuffer nbytes
u16 D_803B7192; // unconfirmed
u32 gAudioRandom;
s32 gAudioErrorFlags;
u32 D_803B71A0[4]; // unconfirmed
ALIGNED8 u8 gAudioHeap[4]; // unconfirmed
u64 gAudioGlobalsEndMarker;
+3 -3
View File
@@ -51,12 +51,12 @@ extern struct SPTask *gAudioTask; // D_803B70D4
extern struct SPTask gAudioTasks[2]; // D_803B70D8
extern f32 D_803B7178;
extern s32 gRefreshRate;
extern s16 *gAiBuffers[NUMAIBUFFERS]; // D_803B7180
extern s16 gAiBufferLengths[NUMAIBUFFERS]; // osAiSetNextBuffer nbytes
extern s16 *gAiBuffers[]; // D_803B7180
extern s16 gAiBufferLengths[]; // osAiSetNextBuffer nbytes
extern u16 D_803B7192; // unconfirmed
extern u32 gAudioRandom;
extern s32 gAudioErrorFlags;
extern u32 D_803B71A0[]; // unconfirmed
extern u64 gAudioGlobalsEndMarker; // unconfirmed
extern u8 gAudioHeap[]; // unconfirmed
extern struct ReverbSettingsEU sReverbSettings[];
+1 -1
View File
@@ -791,7 +791,7 @@ void audio_init(void) {
#ifdef TARGET_N64
// It seems boot.s doesn't clear the .bss area for audio, so do it here.
ptr64 = (u64 *)((u8 *) gGfxSPTaskOutputBuffer + sizeof(gGfxSPTaskOutputBuffer));
for (i = ((uintptr_t) &D_803B71A0 - (uintptr_t) ((u64 *)((u8 *) gGfxSPTaskOutputBuffer + sizeof(gGfxSPTaskOutputBuffer))) ) / 8; i >= 0; i--) {
for (i = ((uintptr_t) &gAudioGlobalsEndMarker - (uintptr_t) ((u64 *)((u8 *) gGfxSPTaskOutputBuffer + sizeof(gGfxSPTaskOutputBuffer))) ) / 8; i >= 0; i--) {
*ptr64++ = 0;
}
#endif
+4 -3
View File
@@ -109,11 +109,12 @@ struct SPTask *create_next_audio_frame_task(void) {
gAudioCmd = gAudioCmdBuffers[gAudioTaskIndex];
index = gCurrAiBufferIndex;
currAiBuffer = gAiBuffers[index];
gAiBufferLengths[index] = ((gAudioBufferParameters.samplesPerFrameTarget - samplesRemainingInAI + EXTRA_BUFFERED_AI_SAMPLES_TARGET) & ~0xF) + SAMPLES_TO_OVERPRODUCE;
gAiBufferLengths[index] = ((gAudioBufferParameters.samplesPerFrameTarget - samplesRemainingInAI +
EXTRA_BUFFERED_AI_SAMPLES_TARGET) & ~0xF) + SAMPLES_TO_OVERPRODUCE;
if (gAiBufferLengths[index] < gAudioBufferParameters.minAiBufferLength) {
gAiBufferLengths[index] = gAudioBufferParameters.minAiBufferLength;
}
if (gAudioBufferParameters.maxAiBufferLength < gAiBufferLengths[index]) {
if (gAiBufferLengths[index] > gAudioBufferParameters.maxAiBufferLength) {
gAiBufferLengths[index] = gAudioBufferParameters.maxAiBufferLength;
}
if (osRecvMesg(D_800EA3AC, &sp54, 0) != -1) {
@@ -136,7 +137,7 @@ struct SPTask *create_next_audio_frame_task(void) {
task->ucode_boot_size = (u8*) rspF3DBootEnd - (u8*) rspF3DBootStart;
task->ucode = rspAspMainStart;
task->ucode_data = rspAspMainDataStart;
task->ucode_size = 0x00001000;
task->ucode_size = 0x1000; // (This size is ignored (according to sm64))
task->ucode_data_size = (rspAspMainDataEnd - rspAspMainDataStart) * sizeof(u64);
task->dram_stack = NULL;
task->dram_stack_size = 0;
+9
View File
@@ -0,0 +1,9 @@
#include <PR/ultratypes.h>
#include <macros.h>
#include <mk64.h>
#include "audio_heap.h"
#include "audio/data.h"
ALIGNED8 u8 gAudioHeap[DOUBLE_SIZE_ON_64_BIT(AUDIO_HEAP_SIZE)];
+10
View File
@@ -0,0 +1,10 @@
#ifndef AUDIO_HEAP_H
#define AUDIO_HEAP_H
#include <PR/ultratypes.h>
#include <mk64.h>
#define AUDIO_HEAP_SIZE 0x48C00
#define AUDIO_HEAP_INIT_SIZE 0x2600
#endif // AUDIO_HEAP_H
+4 -4
View File
@@ -260,7 +260,7 @@ void options_menu_act(struct Controller *controller, u16 arg1) {
sp38->unk8 = -1;
}
if (sp2C && gSoundMode != sp38->cursor) {
gSaveData.main.soundMode = gSoundMode;
gSaveData.main.saveInfo.soundMode = gSoundMode;
write_save_data_grand_prix_points_and_sound_mode();
update_save_data_backup();
sp38->cursor = gSoundMode;
@@ -269,7 +269,7 @@ void options_menu_act(struct Controller *controller, u16 arg1) {
func_8009E280();
play_sound2(SOUND_MENU_GO_BACK);
if (gSoundMode != sp38->cursor) {
gSaveData.main.soundMode = gSoundMode;
gSaveData.main.saveInfo.soundMode = gSoundMode;
write_save_data_grand_prix_points_and_sound_mode();
update_save_data_backup();
sp38->cursor = gSoundMode;
@@ -1123,7 +1123,7 @@ void splash_menu_act(struct Controller *controller, u16 arg1) {
}
play_sound2(SOUND_MENU_CURSOR_MOVE);
func_800B44BC();
gSaveData.main.soundMode = gSoundMode;
gSaveData.main.saveInfo.soundMode = gSoundMode;
write_save_data_grand_prix_points_and_sound_mode();
update_save_data_backup();
}
@@ -1134,7 +1134,7 @@ void splash_menu_act(struct Controller *controller, u16 arg1) {
}
play_sound2(SOUND_MENU_CURSOR_MOVE);
func_800B44BC();
gSaveData.main.soundMode = gSoundMode;
gSaveData.main.saveInfo.soundMode = gSoundMode;
write_save_data_grand_prix_points_and_sound_mode();
}
if (btnAndStick & U_JPAD) {
+2
View File
@@ -939,6 +939,7 @@ f32 atan2f(f32 arg0, f32 arg1) {
return atan2s(arg0, arg1);
}
#ifndef NON_MATCHING // The decomp does not support fabs
UNUSED f32 func_802B79F0(f32 arg0, f32 arg1) {
f64 halfpi;
f32 temp_f0;
@@ -973,6 +974,7 @@ UNUSED f32 func_802B79F0(f32 arg0, f32 arg1) {
}
return var_f2;
}
#endif
UNUSED u16 func_802B7B50(f32 arg0, f32 arg1) {
return ((atan2f(arg0, arg1) * 32768.0f) / M_PI);
+16 -17
View File
@@ -90,9 +90,9 @@ void reset_save_data_grand_prix_points_and_sound_mode(void) {
s32 cup_index;
Stuff *main = &gSaveData.main;
for (cup_index = 0; cup_index < 4; cup_index++) {
main->grandPrixPoints[cup_index] = 0;
main->saveInfo.grandPrixPoints[cup_index] = 0;
}
main->soundMode = SOUND_STEREO;
main->saveInfo.soundMode = SOUND_STEREO;
gSoundMode = SOUND_STEREO;
func_800B44BC();
write_save_data_grand_prix_points_and_sound_mode();
@@ -120,11 +120,11 @@ u8 checksum_time_trial_records(s32 courseIdx) {
u8 compute_save_data_checksum_1(void) {
u8 *grandPrixPoints = (u8 *) &gSaveData.main.grandPrixPoints;
u8 *grandPrixPoints = (u8 *) &gSaveData.main.saveInfo.grandPrixPoints;
s32 i;
s32 crc = 0;
for (i = 0; i < 5; i++) {
for (i = 0; i < sizeof(SaveInfo); i++) {
crc += ((grandPrixPoints[i] + 1) * (i + 1)) + i;
}
@@ -147,7 +147,7 @@ void load_save_data(void) {
validate_save_data();
gSoundMode = gSaveData.main.soundMode;
gSoundMode = gSaveData.main.saveInfo.soundMode;
if (gSoundMode >= NUM_SOUND_MODES) {
gSoundMode = SOUND_MONO;
}
@@ -212,10 +212,10 @@ void validate_save_data(void) {
if (validate_save_data_checksum_backup() == 0) {
for (cup_index = 0; cup_index < 4; cup_index++) {
main->grandPrixPoints[cup_index] = backup->grandPrixPoints[cup_index];
main->saveInfo.grandPrixPoints[cup_index] = backup->saveInfo.grandPrixPoints[cup_index];
}
main->soundMode = backup->soundMode;
main->saveInfo.soundMode = backup->saveInfo.soundMode;
main->checksum[1] = compute_save_data_checksum_backup_1();
main->checksum[2] = compute_save_data_checksum_backup_2();
osEepromLongWrite(&gSIEventMesgQueue, EEPROM_ADDR(main), (u8 *) main, sizeof(Stuff));
@@ -384,8 +384,7 @@ void func_800B536C(s32 arg0) {
s32 tmp2;
if (arg0 >= 0) {
points = &gSaveData.main.grandPrixPoints[gCCSelection];
points = &gSaveData.main.saveInfo.grandPrixPoints[gCCSelection];
tmp = func_800B54EC(gCupSelection, *points);
tmp2 = 3 - arg0;
if ((arg0 < 3) && (tmp < (3-arg0))) {
@@ -406,7 +405,7 @@ void func_800B5404(s32 arg0, s32 arg1)
if (arg0 >= 0) {
temp2 = arg1 / 4;
points = &gSaveData.main.grandPrixPoints[arg1 % 4];
points = &gSaveData.main.saveInfo.grandPrixPoints[arg1 % 4];
temp = func_800B54EC(temp2, *points);
if ((arg0 < 3) && (temp < (temp_a0 = 3 - arg0))) {
@@ -420,7 +419,7 @@ void func_800B5404(s32 arg0, s32 arg1)
// Get Grand Prix points for a given cup and CC mode
u8 func_800B54C0(s32 cup, s32 cc_mode) {
return func_800B54EC(cup, gSaveData.main.grandPrixPoints[cc_mode]);
return func_800B54EC(cup, gSaveData.main.saveInfo.grandPrixPoints[cc_mode]);
}
// Get Grand Prix points scored for a given cup
@@ -449,7 +448,7 @@ u8 func_800B5508(s32 cup, s32 ccGrandPrixPoints, s32 points_scored) {
// Check if all 4 cups have gold cups scored
// for a given CC mode
s32 func_800B5530(s32 cc_mode) {
if (gSaveData.main.grandPrixPoints[cc_mode] == 0xFF) {
if (gSaveData.main.saveInfo.grandPrixPoints[cc_mode] == 0xFF) {
return 1;
}
return 0;
@@ -548,21 +547,21 @@ void update_save_data_backup(void) {
s32 cup_index;
Stuff *main = &gSaveData.main;
Stuff *backup = &gSaveData.backup;
for (cup_index = 0; cup_index < 4; cup_index++) {
backup->grandPrixPoints[cup_index] = main->grandPrixPoints[cup_index];
for (cup_index = 0; cup_index < NUM_CUPS - 1; cup_index++) {
backup->saveInfo.grandPrixPoints[cup_index] = main->saveInfo.grandPrixPoints[cup_index];
}
backup->soundMode = main->soundMode;
backup->saveInfo.soundMode = main->saveInfo.soundMode;
backup->checksum[1] = compute_save_data_checksum_backup_1();
backup->checksum[2] = compute_save_data_checksum_backup_2();
osEepromLongWrite(&gSIEventMesgQueue, EEPROM_ADDR(backup), (u8 *) backup, sizeof(Stuff));
}
u8 compute_save_data_checksum_backup_1(void) {
u8 *backupGrandPrixPoints = gSaveData.backup.grandPrixPoints;
u8 *backupGrandPrixPoints = gSaveData.backup.saveInfo.grandPrixPoints;
s32 i;
s32 crc = 0;
for (i = 0; i < 5; i++) {
for (i = 0; i < sizeof(SaveInfo); i++) {
crc += ((backupGrandPrixPoints[i] + 1) * (i + 1)) + i;
}