mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
more work on subgame_loader
This commit is contained in:
1 parent
1a25d59c82
commit
f30b7356ce
10 files changed
+186
-201
No files matched your search
Vendored
+2
-1
@@ -199,7 +199,8 @@
|
||||
"mystery_item_box.h": "c",
|
||||
"stage_palette_loader.h": "c",
|
||||
"093.h": "c",
|
||||
"flying_handle.h": "c"
|
||||
"flying_handle.h": "c",
|
||||
"loader_tables.h": "c"
|
||||
},
|
||||
"asm-code-lens.donated": true,
|
||||
"editor.formatOnSave": true,
|
||||
|
||||
@@ -5,76 +5,72 @@
|
||||
.arm
|
||||
|
||||
_entry:
|
||||
mov r0, #0x12
|
||||
mov r0, #PSR_IRQ_MODE
|
||||
msr cpsr_fc, r0
|
||||
ldr sp, _0203B038 @ =gUnknown_03007FA0
|
||||
mov r0, #0x1f
|
||||
ldr sp, sp_irq
|
||||
mov r0, #PSR_SYS_MODE
|
||||
msr cpsr_fc, r0
|
||||
ldr sp, _0203B034 @ =gUnknown_03007F00
|
||||
ldr r1, _0203B100 @ =gUnknown_03007FFC
|
||||
add r0, pc, #0x18 @ =IntrMain
|
||||
ldr sp, sp_sys
|
||||
ldr r1, =INTR_VECTOR
|
||||
adr r0, IntrMain
|
||||
str r0, [r1]
|
||||
ldr r1, _0203B104 @ =AgbMain
|
||||
ldr r1, =AgbMain
|
||||
mov lr, pc
|
||||
bx r1
|
||||
b _entry
|
||||
.align 2, 0
|
||||
_0203B034: .4byte gUnknown_03007F00
|
||||
_0203B038: .4byte gUnknown_03007FA0
|
||||
|
||||
sp_sys: .word IWRAM_END - 0x100
|
||||
sp_irq: .word IWRAM_END - 0x60
|
||||
|
||||
arm_func_start IntrMain
|
||||
IntrMain: @ 0x0203B03C
|
||||
mov r3, #0x4000000
|
||||
add r3, r3, #0x200
|
||||
mov r3, REG_BASE
|
||||
add r3, r3, #OFFSET_REG_IE
|
||||
ldr r2, [r3]
|
||||
and r1, r2, r2, lsr #16
|
||||
mov r2, #0
|
||||
ands r0, r1, #0x2000
|
||||
_0203B054:
|
||||
bne _0203B054
|
||||
ands r0, r1, #0xc0
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_GAMEPAK
|
||||
bne . @ spin
|
||||
ands r0, r1, #INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #1
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_VBLANK
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #2
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_HBLANK
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #4
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_VCOUNT
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #8
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_TIMER0
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #0x10
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_TIMER1
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #0x20
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_TIMER2
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #0x100
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_DMA0
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #0x200
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_DMA1
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #0x400
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_DMA2
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #0x800
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_DMA3
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #0x1000
|
||||
bne _0203B0EC
|
||||
ands r0, r1, #INTR_FLAG_KEYPAD
|
||||
bne IntrMain_FoundIntr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #0x2000
|
||||
_0203B0EC:
|
||||
ands r0, r1, #INTR_FLAG_GAMEPAK
|
||||
IntrMain_FoundIntr:
|
||||
strh r0, [r3, #2]
|
||||
ldr r1, _0203B108 @ =gIntrTable
|
||||
ldr r1, =gIntrTable
|
||||
add r1, r1, r2
|
||||
ldr r0, [r1]
|
||||
bx r0
|
||||
_0203B100: .4byte gUnknown_03007FFC
|
||||
_0203B104: .4byte AgbMain
|
||||
_0203B108: .4byte gIntrTable
|
||||
@@ -1,16 +1,8 @@
|
||||
.section .rodata
|
||||
|
||||
.global gIntrTableTemplate
|
||||
gIntrTableTemplate:
|
||||
.incbin "data/rom_data.bin", 0x00001208, 0x34
|
||||
|
||||
.global gUnknown_0203C23C
|
||||
gUnknown_0203C23C:
|
||||
.incbin "data/rom_data.bin", 0x0000123C, 0x44
|
||||
|
||||
.global gUnknown_0203C280
|
||||
gUnknown_0203C280:
|
||||
.incbin "data/rom_data.bin", 0x00001280, 0x224
|
||||
.global gUnknown_0203c2a4
|
||||
gUnknown_0203c2a4:
|
||||
.incbin "data/rom_data.bin", 0x000012a4, 0x200
|
||||
|
||||
.global gUnknown_0203C4A4
|
||||
gUnknown_0203C4A4:
|
||||
|
||||
@@ -86,9 +86,9 @@
|
||||
// with for the calculation
|
||||
#define GBA_FRAMES_PER_SECOND 60
|
||||
|
||||
// TODO: Find better place for this
|
||||
typedef void (*HBlankFunc)(u8 vcount);
|
||||
typedef void (*IntrFunc)(void);
|
||||
typedef u32 (*SpriteUpdateFunc)(void);
|
||||
|
||||
#define PROGRAM_WORK_BUFFER ((void *)EWRAM_START + 0x20000)
|
||||
#define RECV_BUFFER ((void *)EWRAM_START + 0x33000)
|
||||
|
||||
#endif // GUARD_GLOBAL_H
|
||||
@@ -0,0 +1,23 @@
|
||||
#ifndef GUARD_LOADER_TABLES_H
|
||||
#define GUARD_LOADER_TABLES_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
extern void *const gUnknown_0203C280[];
|
||||
extern const u8 gUnknown_0203EBC0[];
|
||||
extern const u8 gUnknown_0203EDC0[];
|
||||
|
||||
struct UNK_203F260 {
|
||||
u8 filler4[0x3C];
|
||||
}; /* 0x3C */
|
||||
|
||||
struct UNK_203E844 {
|
||||
u8 filler4[0x30];
|
||||
}; /* 0x3C */
|
||||
|
||||
extern const struct UNK_203F260 gUnknown_0203F260[];
|
||||
|
||||
extern const u8 gUnknown_0203C4A4[];
|
||||
extern const struct UNK_203E844 gUnknown_0203E844[];
|
||||
|
||||
#endif // GUARD_LOADER_TABLES_H
|
||||
@@ -22,6 +22,10 @@ SECTIONS {
|
||||
|
||||
.rodata :
|
||||
ALIGN(4) {
|
||||
build/payload/src/main.o(.rodata);
|
||||
build/payload/src/multi_sio.o(.rodata);
|
||||
build/payload/src/sio32_multi_load.o(.rodata);
|
||||
build/payload/src/loader_tables.o(.rodata);
|
||||
build/payload/data/data.o(.rodata);
|
||||
}
|
||||
|
||||
@@ -29,20 +33,9 @@ SECTIONS {
|
||||
IWRAM (NOLOAD) :
|
||||
ALIGN(4)
|
||||
{
|
||||
. = 0x00000000; gIntrTable = .;
|
||||
. = 0x00000040; gMultiSioRecv = .;
|
||||
. = 0x00000090; gMultiSioStatusFlags = .;
|
||||
. = 0x000000A0; gIntrMainBuf = .;
|
||||
. = 0x000004A0; gMultiSioSend = .;
|
||||
. = 0x000004A2; gUnknown_030004A2 = .;
|
||||
. = 0x000004C0; gMultiSioIntrFuncBuf = .;
|
||||
. = 0x000005E0; gMultiSioArea = .;
|
||||
. = 0x000007D0; gMultiSioRecvFuncBuf = .;
|
||||
. = 0x00000810; gSio32MultiLoadArea = .;
|
||||
. = 0x00007F00; gUnknown_03007F00 = .;
|
||||
. = 0x00007FA0; gUnknown_03007FA0 = .;
|
||||
. = 0x00007FFA; gUnknown_03007FFA = .;
|
||||
. = 0x00007FFC; gUnknown_03007FFC = .;
|
||||
build/payload/src/main.o(.data);
|
||||
build/payload/src/multi_sio.o(.data);
|
||||
build/payload/src/sio32_multi_load.o(COMMON);
|
||||
}
|
||||
|
||||
/* DWARF debug sections.
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#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,
|
||||
};
|
||||
@@ -1,27 +1,61 @@
|
||||
#include "global.h"
|
||||
#include "multi_sio.h"
|
||||
#include "sio32_multi_load.h"
|
||||
#include "loader_tables.h"
|
||||
|
||||
extern IntrFunc gIntrTable[];
|
||||
typedef struct {
|
||||
u32 unk0;
|
||||
u32 unk4;
|
||||
u16 unk8;
|
||||
u16 state;
|
||||
u8 *resp;
|
||||
u16 segment;
|
||||
u8 unk12;
|
||||
u8 unk13;
|
||||
u8 unk14;
|
||||
u8 loadRequest;
|
||||
u8 unk16;
|
||||
} Loader; /* size 0x18 */
|
||||
|
||||
struct UNK_0203C280 {
|
||||
void *unk0;
|
||||
struct MultiSioData_0_0 {
|
||||
// id
|
||||
u16 unk0;
|
||||
// value
|
||||
u8 unk2;
|
||||
u8 filler[17];
|
||||
};
|
||||
|
||||
extern const struct UNK_0203C280 gUnknown_0203C280[];
|
||||
union MultiSioData {
|
||||
struct MultiSioData_0_0 pat0;
|
||||
}; /* size = MULTI_SIO_BLOCK_SIZE */
|
||||
|
||||
#define PROGRAM_WORK_BUFFER ((void *)EWRAM_START + 0x20000)
|
||||
#define RECV_BUFFER ((void *)EWRAM_START + 0x33000)
|
||||
// .data
|
||||
IntrFunc gIntrTable[16] = {};
|
||||
union MultiSioData gMultiSioRecv[4] = {};
|
||||
u32 gMultiSioStatusFlags = 0;
|
||||
u8 gIntrMainBuf[0x400] ALIGNED(16) = {};
|
||||
union MultiSioData gMultiSioSend = {};
|
||||
|
||||
void LoaderInit(Loader *);
|
||||
static u16 sub_0203b2f0(u16, Loader *);
|
||||
static u16 sub_0203b79c(u16, Loader *);
|
||||
static u16 sub_0203b7d0(u16, Loader *);
|
||||
static u16 sub_0203b3d8(u16, Loader *);
|
||||
static u16 sub_0203b818(u16, Loader *);
|
||||
static void sub_0203b898(Loader *);
|
||||
static void sub_0203b610(Loader *);
|
||||
static void sub_0203b86c(Loader *loader);
|
||||
|
||||
static void sub_0203b788(void);
|
||||
static void sub_0203b798(void);
|
||||
|
||||
#define ROM_MAKER_CODE_ADDR ((vu8 *)(ROM_BASE + 0xB2))
|
||||
#define ROM_GAME_CODE_ADDR ((vu32 *)(ROM_BASE + 0xAC))
|
||||
#define ROM_TITLE_ADDR ((u8 *)(ROM_BASE + 0xA0))
|
||||
|
||||
// 8P
|
||||
#define DIMPS_MAKER_CODE 0x96
|
||||
|
||||
#define ROM_GAME_CODE_ADDR ((vu32 *)(ROM_BASE + 0xAC))
|
||||
|
||||
#define ROM_TITLE_ADDR ((u8 *)(ROM_BASE + 0xA0))
|
||||
|
||||
#ifndef EUROPE
|
||||
// "A2NE"
|
||||
#define EXPECTED_GAME_CODE 0x454e3241
|
||||
@@ -30,37 +64,22 @@ extern const struct UNK_0203C280 gUnknown_0203C280[];
|
||||
#define EXPECTED_GAME_CODE 0x504e3241
|
||||
#endif
|
||||
|
||||
u32 gMultiSioStatusFlags;
|
||||
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
u8 filler1[0x29];
|
||||
} LoaderUnkC; /* size 0x30 */
|
||||
|
||||
extern LoaderUnkC gUnknown_030004A2;
|
||||
|
||||
typedef struct {
|
||||
u32 unk0;
|
||||
u32 unk4;
|
||||
u16 unk8;
|
||||
u16 unkA; // state
|
||||
LoaderUnkC *unkC;
|
||||
u16 unk10;
|
||||
u8 unk12;
|
||||
u8 unk13;
|
||||
u8 unk14;
|
||||
u8 unk15; // loadRequest
|
||||
u8 unk16;
|
||||
} Loader; /* size 0x18 */
|
||||
|
||||
void LoaderInit(Loader *);
|
||||
u16 sub_0203b2f0(u16, Loader *);
|
||||
u16 sub_0203b79c(u16, Loader *);
|
||||
u16 sub_0203b7d0(u16, Loader *);
|
||||
u16 sub_0203b3d8(u16, Loader *);
|
||||
u16 sub_0203b818(u16, Loader *);
|
||||
void sub_0203b898(Loader *);
|
||||
void sub_0203b610(Loader *);
|
||||
// .rodata
|
||||
IntrFunc const gIntrTableTemplate[13] = {
|
||||
(void *)gMultiSioIntrFuncBuf,
|
||||
sub_0203b788,
|
||||
sub_0203b798,
|
||||
sub_0203b798,
|
||||
sub_0203b798,
|
||||
sub_0203b798,
|
||||
sub_0203b798,
|
||||
sub_0203b798,
|
||||
sub_0203b798,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
void AgbMain()
|
||||
{
|
||||
@@ -69,42 +88,42 @@ void AgbMain()
|
||||
|
||||
while (TRUE) {
|
||||
VBlankIntrWait();
|
||||
switch (loader.unkA) {
|
||||
switch (loader.state) {
|
||||
case 0:
|
||||
case 1:
|
||||
loader.unkA = sub_0203b2f0(loader.unkA, &loader);
|
||||
loader.state = sub_0203b2f0(loader.state, &loader);
|
||||
break;
|
||||
case 2:
|
||||
loader.unkA = sub_0203b79c(loader.unkA, &loader);
|
||||
loader.state = sub_0203b79c(loader.state, &loader);
|
||||
case 3:
|
||||
loader.unkA = sub_0203b7d0(loader.unkA, &loader);
|
||||
loader.state = sub_0203b7d0(loader.state, &loader);
|
||||
break;
|
||||
case 4:
|
||||
loader.unkA = sub_0203b3d8(loader.unkA, &loader);
|
||||
loader.state = sub_0203b3d8(loader.state, &loader);
|
||||
break;
|
||||
case 5:
|
||||
loader.unkA = sub_0203b818(loader.unkA, &loader);
|
||||
loader.state = sub_0203b818(loader.state, &loader);
|
||||
}
|
||||
|
||||
sub_0203b898(&loader);
|
||||
}
|
||||
}
|
||||
|
||||
u16 sub_0203b2f0(u16 state, Loader *loader)
|
||||
static u16 sub_0203b2f0(u16 state, Loader *loader)
|
||||
{
|
||||
REG_IME = 0;
|
||||
REG_IE &= ~0xC0;
|
||||
REG_IME = 1;
|
||||
gIntrTable[0] = (void *)gMultiSioIntrFuncBuf;
|
||||
MultiSioInit((gMultiSioStatusFlags & MULTI_SIO_ALL_CONNECTED) >> 8);
|
||||
loader->unk15 = 0;
|
||||
loader->loadRequest = 0;
|
||||
gMultiSioStatusFlags = 0;
|
||||
|
||||
if (state == 0) {
|
||||
state = 3;
|
||||
} else {
|
||||
state = 2;
|
||||
switch (loader->unk10) {
|
||||
switch (loader->segment) {
|
||||
case 2:
|
||||
// When rom has been received, copy into EWRAM
|
||||
LZ77UnCompWram(PROGRAM_WORK_BUFFER, (void *)EWRAM_START);
|
||||
@@ -117,7 +136,7 @@ u16 sub_0203b2f0(u16 state, Loader *loader)
|
||||
case 5:
|
||||
case 6:
|
||||
// When this segment has been received, decompress into work buffer
|
||||
if (loader->unk14 == loader->unk10 - 3) {
|
||||
if (loader->unk14 == loader->segment - 3) {
|
||||
LZ77UnCompWram(RECV_BUFFER, PROGRAM_WORK_BUFFER);
|
||||
}
|
||||
break;
|
||||
@@ -131,21 +150,16 @@ u16 sub_0203b2f0(u16 state, Loader *loader)
|
||||
return state;
|
||||
}
|
||||
|
||||
extern const u8 gUnknown_0203C23C[];
|
||||
|
||||
u16 sub_0203b3d8(u16 state, Loader *loader)
|
||||
static u16 sub_0203b3d8(u16 state, Loader *loader)
|
||||
{
|
||||
u8 *actualTitle = ROM_TITLE_ADDR;
|
||||
// TODO: change to direct string (which moves it to rodata automatically)
|
||||
// "SONICADVANC2"
|
||||
u8 expectedTitle[13];
|
||||
memcpy(expectedTitle, gUnknown_0203C23C, 13);
|
||||
u8 expectedTitle[] = "SONICADVANC2";
|
||||
|
||||
loader->unk14 = SIO_MULTI_CNT->id;
|
||||
loader->unk12 = 1;
|
||||
MultiSioStop();
|
||||
|
||||
if (loader->unk10 == 9) {
|
||||
if (loader->segment == 9) {
|
||||
REG_DISPCNT = 0;
|
||||
|
||||
if (*ROM_MAKER_CODE_ADDR == DIMPS_MAKER_CODE
|
||||
@@ -156,7 +170,7 @@ u16 sub_0203b3d8(u16 state, Loader *loader)
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Shouldn't this be < 12
|
||||
|
||||
if (i == 12) {
|
||||
SoftResetRom(0xC0);
|
||||
}
|
||||
@@ -179,47 +193,23 @@ u16 sub_0203b3d8(u16 state, Loader *loader)
|
||||
REG_IE &= ~0xC0;
|
||||
REG_IME = 1;
|
||||
gIntrTable[0] = Sio32MultiLoadIntr;
|
||||
Sio32MultiLoadInit(0, gUnknown_0203C280[loader->unk10].unk0);
|
||||
Sio32MultiLoadInit(0, gUnknown_0203C280[loader->segment]);
|
||||
sub_0203b610(loader);
|
||||
return 5;
|
||||
}
|
||||
|
||||
struct MultiSioData_0_0 {
|
||||
// id
|
||||
u16 unk0;
|
||||
// value
|
||||
u8 unk2;
|
||||
u32 unk4;
|
||||
u16 unk8[3];
|
||||
u8 unkE;
|
||||
u8 unkF;
|
||||
u32 unk10;
|
||||
};
|
||||
|
||||
union MultiSioData {
|
||||
struct MultiSioData_0_0 pat0;
|
||||
}; /* size = MULTI_SIO_BLOCK_SIZE */
|
||||
|
||||
union MultiSioData gMultiSioSend;
|
||||
union MultiSioData gMultiSioRecv[4];
|
||||
|
||||
extern const IntrFunc gIntrTableTemplate[13];
|
||||
|
||||
extern u8 gIntrMainBuf[0x400];
|
||||
|
||||
void LoaderInit(Loader *loader)
|
||||
{
|
||||
|
||||
loader->unk0 = 0;
|
||||
loader->unk4 = 0;
|
||||
loader->unk8 = 0;
|
||||
loader->unkA = 0;
|
||||
loader->unkC = &gUnknown_030004A2;
|
||||
loader->unk10 = 0;
|
||||
loader->state = 0;
|
||||
loader->resp = &gMultiSioSend.pat0.unk2;
|
||||
loader->segment = 0;
|
||||
loader->unk12 = 0;
|
||||
loader->unk13 = 0;
|
||||
loader->unk14 = 0;
|
||||
loader->unk15 = 0;
|
||||
loader->loadRequest = 0;
|
||||
loader->unk16 = 0;
|
||||
RegisterRamReset(2);
|
||||
|
||||
@@ -240,23 +230,7 @@ void LoaderInit(Loader *loader)
|
||||
gMultiSioSend.pat0.unk0 = 0xF001;
|
||||
}
|
||||
|
||||
extern const u8 gUnknown_0203EBC0[];
|
||||
extern const u8 gUnknown_0203EDC0[];
|
||||
|
||||
struct UNK_203F260 {
|
||||
u8 filler4[0x3C];
|
||||
}; /* 0x3C */
|
||||
|
||||
struct UNK_203E844 {
|
||||
u8 filler4[0x30];
|
||||
}; /* 0x3C */
|
||||
|
||||
extern const struct UNK_203F260 gUnknown_0203F260[];
|
||||
|
||||
extern const u8 gUnknown_0203C4A4[];
|
||||
extern const struct UNK_203E844 gUnknown_0203E844[];
|
||||
|
||||
void sub_0203b610(Loader *loader)
|
||||
static void sub_0203b610(Loader *loader)
|
||||
{
|
||||
u16 i;
|
||||
if (loader->unk16 == 0) {
|
||||
@@ -300,15 +274,15 @@ void sub_0203b610(Loader *loader)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0203b788(void) { INTR_CHECK |= 1; }
|
||||
static void sub_0203b788(void) { INTR_CHECK |= 1; }
|
||||
|
||||
void sub_0203b798(void) { }
|
||||
static void sub_0203b798(void) { }
|
||||
|
||||
u16 sub_0203b79c(u16 state, Loader *loader)
|
||||
static u16 sub_0203b79c(u16 state, Loader *loader)
|
||||
{
|
||||
if (gMultiSioStatusFlags & MULTI_SIO_LD_ENABLE) {
|
||||
if (gMultiSioStatusFlags & MULTI_SIO_LD_SUCCESS) {
|
||||
loader->unkC->unk0++;
|
||||
(*loader->resp)++;
|
||||
}
|
||||
state = 3;
|
||||
}
|
||||
@@ -318,26 +292,23 @@ u16 sub_0203b79c(u16 state, Loader *loader)
|
||||
return state;
|
||||
}
|
||||
|
||||
extern u16 gUnknown_03000040[];
|
||||
|
||||
u16 sub_0203b7d0(u16 state, Loader *loader)
|
||||
static u16 sub_0203b7d0(u16 state, Loader *loader)
|
||||
{
|
||||
if (gMultiSioStatusFlags & MULTI_SIO_LD_REQUEST) {
|
||||
state = 4;
|
||||
}
|
||||
|
||||
gMultiSioStatusFlags = MultiSioMain(&gMultiSioSend, gMultiSioRecv, loader->unk15);
|
||||
gMultiSioStatusFlags
|
||||
= MultiSioMain(&gMultiSioSend, gMultiSioRecv, loader->loadRequest);
|
||||
loader->unk13 = gMultiSioRecv[0].pat0.unk0;
|
||||
if (loader->unk10 != gMultiSioRecv[0].pat0.unk2) {
|
||||
loader->unk10 = gMultiSioRecv[0].pat0.unk2;
|
||||
if (loader->segment != gMultiSioRecv[0].pat0.unk2) {
|
||||
loader->segment = gMultiSioRecv[0].pat0.unk2;
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
void sub_0203b86c(Loader *loader);
|
||||
|
||||
u16 sub_0203b818(u16 state, Loader *loader)
|
||||
static u16 sub_0203b818(u16 state, Loader *loader)
|
||||
{
|
||||
u32 progress = 0;
|
||||
|
||||
@@ -359,13 +330,13 @@ u16 sub_0203b818(u16 state, Loader *loader)
|
||||
return state;
|
||||
}
|
||||
|
||||
void sub_0203b86c(Loader *loader)
|
||||
static void sub_0203b86c(Loader *loader)
|
||||
{
|
||||
u8 val = (loader->unk0 * 0xA0) / 0x12000;
|
||||
REG_WIN1H = (val + 0x28) | 0x2800;
|
||||
}
|
||||
|
||||
void sub_0203b898(Loader *loader)
|
||||
static void sub_0203b898(Loader *loader)
|
||||
{
|
||||
if (loader->unk12 != 0) {
|
||||
REG_DISPCNT = 0x6300;
|
||||
|
||||
@@ -5,16 +5,15 @@
|
||||
static const char sMultiSioLibVer[] = "MultiSio4Sio32Load010528";
|
||||
|
||||
#ifdef MULTI_SIO_DI_FUNC_FAST
|
||||
u32 gMultiSioIntrFuncBuf[0x120 / 4] = {}; // Interrupt Routine RAM Execution Buffer
|
||||
u32 gMultiSioIntrFuncBuf[0x120 / 4] ALIGNED(16)
|
||||
= {}; // Interrupt Routine RAM Execution Buffer
|
||||
#endif
|
||||
|
||||
struct MultiSioArea gMultiSioArea = {};
|
||||
|
||||
UNUSED u32 gUnusedMultiSioSpace[2] = {};
|
||||
|
||||
#ifdef MULTI_SIO_DI_FUNC_FAST
|
||||
u32 gMultiSioRecvFuncBuf[0x40 / 4]
|
||||
= {}; // Receive Data/Check Buffer Change Routine RAM Execution Buffer
|
||||
u32 gMultiSioRecvFuncBuf[0x40 / 4] ALIGNED(16) = {}; // Receive Data/Check Buffer Change
|
||||
// Routine RAM Execution Buffer
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------------*/
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
// static const char sMultiSioLibVer[] = "Sio32MultiLoad010214";
|
||||
static const char sMultiSioLibVer[] = "Sio32MultiLoad010214";
|
||||
|
||||
// COMMON
|
||||
struct Sio32MultiLoadArea gSio32MultiLoadArea; // 32bit serial communication
|
||||
|
||||
Reference in new issue
Block a user