extract collect rings rom code

This commit is contained in:
Oliver Bell committed 2023-05-13 17:38:45 +01:00
1 parent c0fb4214ca
commit bc4de8d98c
8 files changed
+61 -25

No files matched your search

+6 -1
View File
@@ -199,10 +199,15 @@ include graphics.mk
%.8bpp: %.png ; $(GFX) $< $@
%.gbapal: %.pal ; $(GFX) $< $@
%.gbapal: %.png ; $(GFX) $< $@
%.gba.lz: %.gba
chao_garden/mb_chao_garden.gba.lz: chao_garden/mb_chao_garden.gba
$(GFX) $< $@ -search 1
%.gba.lz: %.gba
$(GFX) $< $@
%.bin.lz: %.bin
$(GFX) $< $@
%.lz: % ; $(GFX) $< $@
%.rl: % ; $(GFX) $< $@
+4 -10
View File
@@ -34,16 +34,10 @@ gUnknown_08CAD1DC:
gUnknown_08CB41C0:
.incbin "baserom.gba", 0x00CB41C0, 0x6a44
// TODO: extract this rom
.global gUnknown_08CBAC04
gUnknown_08CBAC04:
.incbin "baserom.gba", 0x00CBAC04, 0x8000
.incbin "multi_boot/collect_rings/mb_collect_rings.gba.lz"
.global gUnknown_08CC2C04
gUnknown_08CC2C04:
.incbin "baserom.gba", 0x00CC2C04, 0x8000
.global gUnknown_08CCAC04
gUnknown_08CCAC04:
.incbin "baserom.gba", 0x00CCAC04, 0x8900
.global gUnknown_08CD0728
gUnknown_08CD0728:
.incbin "baserom.gba", 0x00CD0728, 0x2DDC
+5 -3
View File
@@ -489,13 +489,15 @@ extern const u16 sAnimsGotThroughZoneAndActNames[11][3];
// collect rings data
extern const u8 gUnknown_08C88408[0x8000];
extern const u8 gUnknown_08C90408[0x8000];
// Backgrounds?
extern const u8 gUnknown_08C92208[0x8000];
extern const u8 gUnknown_08CA6760[0x6A7C];
extern const u8 gUnknown_08CAD1DC[0x6fe4];
extern const u8 gUnknown_08CB41C0[0x6a44];
extern const u8 gUnknown_08CBAC04[0x8000];
extern const u8 gUnknown_08CC2C04[0x8000];
extern const u8 gUnknown_08CCAC04[0x8900];
extern const u8 gUnknown_08CBAC04[];
// Possibly CreateGameStageAtSelectedCourse
void GameStageStart(void);
Binary file not shown.
@@ -1,10 +1,16 @@
#include "global.h"
#include "loader_tables.h"
#define UNKNOWN_BUF_1 ((void *)EWRAM_START + 0x28000)
#define UNKNOWN_BUF_2 ((void *)EWRAM_START + 0x30000)
void *const gUnknown_0203C280[] = {
PROGRAM_WORK_BUFFER, UNKNOWN_BUF_1, UNKNOWN_BUF_2, PROGRAM_WORK_BUFFER, RECV_BUFFER,
RECV_BUFFER, RECV_BUFFER, RECV_BUFFER, RECV_BUFFER,
PROGRAM_WORK_BUFFER,
PROGRAM_WORK_BUFFER + 0x8000,
PROGRAM_WORK_BUFFER + 0x10000,
PROGRAM_WORK_BUFFER,
RECV_BUFFER,
RECV_BUFFER,
RECV_BUFFER,
RECV_BUFFER,
RECV_BUFFER,
};
@@ -129,8 +129,8 @@ static u16 sub_0203b2f0(u16 state, Loader *loader)
LZ77UnCompWram(PROGRAM_WORK_BUFFER, (void *)EWRAM_START);
break;
case 3:
// When VRAM data received, copy into vram
CpuCopy16(PROGRAM_WORK_BUFFER, (void *)VRAM, 0x8000);
// When backgrounds received, copy into BG VRAM
CpuCopy16(PROGRAM_WORK_BUFFER, (void *)BG_VRAM, 0x8000);
break;
case 4:
case 5:
+22
View File
@@ -0,0 +1,22 @@
import subprocess
size = 0x15b20
while True:
size += 1
print(hex(size))
try:
subprocess.check_output(f"python3 scripts/extract_bin.py 0x00CBAC04 {hex(size)} && mv 8CBAC04.bin 8CBAC04.bin.lz && ./tools/gbagfx/gbagfx 8CBAC04.bin.lz 8CBAC04.gba", shell=True, )
except subprocess.CalledProcessError as err:
continue
expected_hash = subprocess.check_output("sha1sum 8CBAC04.bin.lz", shell=True).decode().split(" ")[0]
subprocess.check_output("./tools/gbagfx/gbagfx 8CBAC04.gba 8CBAC04-new.bin.lz -search 2", shell=True)
new_hash = subprocess.check_output("sha1sum 8CBAC04-new.bin.lz", shell=True).decode().split(" ")[0]
print(expected_hash, new_hash)
if new_hash == expected_hash:
print(hex(size) + " works")
print(hex(size))
+11 -4
View File
@@ -42,9 +42,15 @@ struct SinglePakConnectScreen {
#define MB_SUBGAME_LOADER_SIZE 0x314C
void *const gUnknown_080E0168[9] = {
&gUnknown_08CBAC04, &gUnknown_08CC2C04, &gUnknown_08CCAC04,
&gUnknown_08C92208, &gUnknown_08CA6760, &gUnknown_08CAD1DC,
&gUnknown_08CB41C0, &gUnknown_08C90408, &gUnknown_08C88408,
(void *)gUnknown_08CBAC04 + SIO32ML_BLOCK_SIZE * 0,
(void *)gUnknown_08CBAC04 + SIO32ML_BLOCK_SIZE * 1,
(void *)gUnknown_08CBAC04 + SIO32ML_BLOCK_SIZE * 2,
&gUnknown_08C92208,
&gUnknown_08CA6760,
&gUnknown_08CAD1DC,
&gUnknown_08CB41C0,
&gUnknown_08C90408,
&gUnknown_08C88408,
};
static const u16 gUnknown_080E018C[7][3] = {
@@ -540,12 +546,13 @@ void sub_8081CC4(void)
sub_80818B8();
}
// Send next segment
void sub_8081D04(void)
{
struct SinglePakConnectScreen *connectScreen = TaskGetStructPtr(gCurTask);
MultiSioStop();
gIntrTable[0] = Sio32MultiLoadIntr;
Sio32MultiLoadInit(gMultiSioStatusFlags & 0x80,
Sio32MultiLoadInit(gMultiSioStatusFlags & MULTI_SIO_PARENT,
gUnknown_080E0168[connectScreen->unkF9]);
gCurTask->main = sub_8081A5C;
}