fox_versus decompiled, introduce first_diff.py to the project, fixed fox_option NON_MATCHING build (#71)

* fox_versus functions

* more functions

* more input!

* functions so far

* fix bss reordering

* all functions matching

* fix caller addresses

* import data cleanup

* introduce first_diff to the project

* fix wrong type

* second version of bss reordering prevention header

* move versus symbols to variables.h

* BSS importing attempt (failed)
terrain is prepared for another contributor to try

* fix fox_option NON_MATCHING build

* format

* remove static keyword from fox_map data symbols

* IMPORT BSS

* rename fox_versus

* FIX ADDRESSES & SYMBOLS y fox map

* fix more addresses

* more address fixes for fox_map

* all fox_map addresses done

* fix bss build in fox_map, migration pending

* bss reorder failed attempt

* remove unused externs

* remove unnecessary config file

* remove unnecessary entries in settings.json

* comments

* move structs to fox_map header

* put static back in fox_option data

* PR review
This commit is contained in:
Alejandro Asenjo Nitti 2024-01-10 14:55:08 -03:00 committed by GitHub
parent 9c2707adc1
commit 410a5b017b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 3284 additions and 1191 deletions

39
.vscode/launch.json vendored
View File

@ -1,39 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Debug SOTN (PCSX Redux)",
"type": "gdb",
"request": "attach",
"target": "localhost:3333",
"remote": true,
"stopAtConnect": true,
"executable": "build/sotn-debugmodule.elf",
"linux": {
"gdbpath": "/usr/bin/gdb-multiarch"
},
"cwd": "${workspaceRoot}",
"autorun": [
"set substitute-path /project .",
"file build/sotn-debugmodule.elf",
"continue",
],
"valuesFormatting": "parseText"
},
{
"name": "Debug sotn-disk (extract)",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "tools/sotn-disk",
"args": [
"extract",
"../../disks/sotn.us.cue",
"../../disks/"
]
}
]
}

View File

@ -10,8 +10,6 @@
"build/**": true,
"expected/**": true,
"tools/**": true,
"tools/aspatch/**": false,
"tools/gfxsotn/**": false,
},
"defines": [
"_LANGUAGE_C", // For gbi.h

58
first_diff.py Executable file
View File

@ -0,0 +1,58 @@
#!/usr/bin/env python3
import argparse
from pathlib import Path
try:
import rabbitizer
except ImportError:
print("Missing dependency rabbitizer, install it with `python3 -m pip install 'rabbitizer>=1.0.0,<2.0.0'`")
exit(1)
try:
import mapfile_parser
except ImportError:
print("Missing dependency mapfile_parser, install it with `python3 -m pip install 'mapfile-parser>=1.2.1,<2.0.0'`")
exit(1)
def decodeInstruction(bytesDiff: bytes, mapFile: mapfile_parser.MapFile) -> str:
word = (bytesDiff[0] << 24) | (bytesDiff[1] << 16) | (bytesDiff[2] << 8) | (bytesDiff[3] << 0)
instr = rabbitizer.Instruction(word)
immOverride = None
if instr.isJumpWithAddress():
# Instruction is a function call (jal)
# Get the embedded address of the function call
symAddress = instr.getInstrIndexAsVram()
# Search for the address in the mapfile
symInfo = mapFile.findSymbolByVramOrVrom(symAddress)
if symInfo is not None:
# Use the symbol from the mapfile instead of a raw value
immOverride = symInfo.symbol.name
return instr.disassemble(immOverride=immOverride, extraLJust=-20)
def firstDiffMain():
parser = argparse.ArgumentParser(description="Find the first difference(s) between the built ROM and the base ROM.")
parser.add_argument("-c", "--count", type=int, default=5, help="find up to this many instruction difference(s)")
parser.add_argument("-v", "--version", help="Which version should be processed", default="us.rev1")
parser.add_argument("-a", "--add-colons", action='store_true', help="Add colon between bytes" )
args = parser.parse_args()
buildFolder = Path("build")
BUILTROM = Path(buildFolder / f"starfox64.us.uncompressed.z64")
BUILTMAP = buildFolder / f"starfox64.us.map"
EXPECTEDROM = Path("baserom.us.uncompressed.z64")
EXPECTEDMAP = "expected" / BUILTMAP
mapfile_parser.frontends.first_diff.doFirstDiff(BUILTMAP, EXPECTEDMAP, BUILTROM, EXPECTEDROM, args.count, mismatchSize=True, addColons=args.add_colons, bytesConverterCallback=decodeInstruction)
if __name__ == "__main__":
firstDiffMain()

64
include/fox_map.h Normal file
View File

@ -0,0 +1,64 @@
#ifndef FOX_MAP_H
#define FOX_MAP_H
typedef enum PlanetId {
/* 0 */ PLANET_METEO,
/* 1 */ PLANET_AREA_6,
/* 2 */ PLANET_BOLSE,
/* 3 */ PLANET_SECTOR_Z,
/* 4 */ PLANET_SECTOR_X,
/* 5 */ PLANET_SECTOR_Y,
/* 6 */ PLANET_KATINA,
/* 7 */ PLANET_MACBETH,
/* 8 */ PLANET_ZONESS,
/* 9 */ PLANET_CORNERIA,
/* 10 */ PLANET_TITANIA,
/* 11 */ PLANET_AQUAS,
/* 12 */ PLANET_FORTUNA,
/* 13 */ PLANET_VENOM,
/* 14 */ PLANET_SOLAR,
/* 15 */ PLANET_MAX,
} PlanetId;
typedef struct {
/* 0x0 */ f32 angle;
/* 0x4 */ f32 x;
/* 0x8 */ f32 y;
/* 0xC */ f32 scale;
} ObjPosition;
typedef struct {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ s32 unk_0C;
/* 0x10 */ char pad10[0x4];
/* 0x14 */ s32 unk_14;
/* 0x18 */ s32 unk_18;
} UnkStruct_D_EBFBE0_801AFD18; // size = 0x1C
typedef struct {
/* 0x00 */ s32 id;
/* 0x04 */ f32 unk_04;
/* 0x08 */ f32 unk_08;
/* 0x0C */ f32 zAngle;
/* 0x10 */ f32 posX;
/* 0x14 */ f32 posY;
/* 0x18 */ f32 posZ;
/* 0x1C */ f32 unk_1C;
/* 0x20 */ f32 scale;
/* 0x24 */ s32 alpha;
/* 0x28 */ s32 unk_28;
/* 0x2C */ s32 unk_2C;
/* 0x30 */ s32 unk_30;
/* 0x34 */ s32 unk_34;
} Planet; // size = 0x38
typedef struct {
/* 0x0 */ u8* addr;
/* 0x4 */ s32 width;
/* 0x8 */ s32 height;
/* 0xC */ f32 posX;
} Texture; // size = 0x10
#endif

View File

@ -172,7 +172,7 @@ extern UnkStruct_D_EBFBE0_801B9250 D_EBFBE0_801B9400;
extern UnkStruct_D_EBFBE0_801B9250 D_EBFBE0_801B9408;
extern void* D_EBFBE0_801B68B0[];
extern char* D_EBFBE0_801B68D4[];
extern u8* D_EBFBE0_801B68D4[];
extern s32 D_EBFBE0_801B81A8[][3];

View File

@ -110,6 +110,7 @@ void func_8002E700(Player *);
void func_8002EE64(Object_2F4 * obj2F4);
void func_8002F180(void);
void func_8002F5F4(u16* msg, s32 character);
void func_8003088C(Object_2F4*);
void func_800319AC(Object_2F4* this);
void func_80035448(Object_2F4* obj2F4);
@ -522,6 +523,7 @@ void func_800ACDC0(Player *, PlayerShot *, PlayerShotId );
void func_800B0F50(Player *);
void func_800B44C4(Player *);
void func_800AB334(void);
void func_800ABA08(void);
void func_800AE278(Player*);
void func_800B2130(Player*);
void func_800B2574(Player*);

View File

@ -57,7 +57,7 @@ extern s32 D_1013700[];
extern Gfx D_20031B0[];
extern Gfx D_2010A30[];
extern u16 D_3000B20[];
extern u16 D_30013E0[];
extern u8 D_30013E0[];
extern s32 D_80161690;
extern s32 D_80161718;

View File

@ -16,4 +16,7 @@
#define USEC_TO_CYCLES(n) (((u64)(n)*(osClockRate/15625LL))/(1000000LL/15625LL))
#define MSEC_TO_CYCLES(n) (USEC_TO_CYCLES((n) * 1000LL))
#define CYCLES_TO_USEC(c) (((u64)(c)*(1000000LL/15625LL))/(osClockRate/15625LL))
#define CYCLES_TO_MSEC(c) ((s32)CYCLES_TO_USEC(c)/1000)
#endif // MACROS_H

View File

@ -0,0 +1,44 @@
#ifndef PREVENT_BSS_REORDERING2_H
#define PREVENT_BSS_REORDERING2_H
/**
* See the explanation at prevent_bss_reordering.h
*
* Instead of producing 64 dummy declarations, this header only produces 32
* dummy declarations
*/
struct Dummy100 { int x; };
struct Dummy101 { int x; };
struct Dummy102 { int x; };
struct Dummy103 { int x; };
struct Dummy104 { int x; };
struct Dummy105 { int x; };
struct Dummy106 { int x; };
struct Dummy107 { int x; };
struct Dummy108 { int x; };
struct Dummy109 { int x; };
struct Dummy110 { int x; };
struct Dummy111 { int x; };
struct Dummy112 { int x; };
struct Dummy113 { int x; };
struct Dummy114 { int x; };
struct Dummy115 { int x; };
struct Dummy116 { int x; };
struct Dummy117 { int x; };
struct Dummy118 { int x; };
struct Dummy119 { int x; };
struct Dummy120 { int x; };
struct Dummy121 { int x; };
struct Dummy122 { int x; };
struct Dummy123 { int x; };
struct Dummy124 { int x; };
struct Dummy125 { int x; };
struct Dummy126 { int x; };
struct Dummy127 { int x; };
struct Dummy128 { int x; };
struct Dummy129 { int x; };
struct Dummy130 { int x; };
struct Dummy131 { int x; };
#endif

View File

@ -88,7 +88,7 @@ typedef enum LevelId {
/* 77 */ LEVEL_WARP_ZONE = 77,
} LevelId;
typedef enum {
typedef enum VsStage {
/* 0 */ VS_STAGE_CORNERIA,
/* 1 */ VS_STAGE_KATINA,
/* 2 */ VS_STAGE_SECTOR_Z,

View File

@ -778,7 +778,40 @@ extern s32 D_8017874C;
extern s32 D_80178750;
extern s32 D_80178754;
extern s32 D_80178758;
extern s32 sUnlockLandmaster; // sUnlockLandmaster
extern s32 sUnlockOnFoot; // sUnlockOnFoot
extern s32 D_80178768[];
extern s32 D_80178768[];
extern s32 D_80178778;
extern s32 D_80178780[4];
extern s32 D_80178790;
extern s32 D_80178794;
extern s32 D_80178798;
extern s32 D_8017879C;
extern s32 D_801787A0;
extern s32 D_801787A4;
extern s32 D_801787A8;
extern f32 D_801787AC;
extern f32 D_801787B0;
extern s32 D_801787B4;
extern s32 D_801787B8;
extern s32 D_801787BC;
extern f32 D_801787C0;
extern f32 D_801787C4;
extern f32 D_801787C8;
extern f32 D_801787CC;
extern f32 D_801787D0;
extern f32 D_801787D8[4];
extern f32 D_801787E8[4];
extern s32 D_801787F8[4];
extern u16 D_80178808[4];
extern s32 D_80178810[4];
extern s32 D_80178820[4];
extern s32 D_80178830;
extern s32 D_80178838[5];
extern s32 D_80178850[4];
extern OSTime D_80178860;
extern OSTime D_80178868;
// fox_save
extern SaveFile gSaveFile;
@ -810,6 +843,11 @@ extern u16 gHaasEffectDelaySizes[64];
// extern EnvelopePoint gDefaultEnvelope[];
// extern NoteUnkStruct gZeroNoteSub;
// extern NoteUnkStruct gDefaultNoteSub;
extern s32 D_800D4A90;
extern s32 D_800D4A94;
extern s32 D_800D4A98; // versus frame counter?
extern s32 D_800D4A9C;
extern s32 D_800D4AA0;
extern s16 D_800DD200[];
extern f32 gHeadsetPanVolume[];
extern f32 gStereoPanVolume[];
@ -980,8 +1018,28 @@ extern Gfx D_302D120[];
extern u8 D_3000000[];
extern u16 D_3000080[];
extern Gfx D_3000090[];
extern u8 D_30001E0[];
extern u16 D_3000380[];
extern u8 D_30003A0[];
extern u16 D_30004E0[];
extern u8 D_3000510[];
extern Gfx D_3000660[];
extern u16 D_30006A0[];
extern u8 D_30006D0[];
extern u16 D_3000810[];
extern u16 D_3000BC0[];
extern u8 D_30013E0[];
extern u8 D_3001420[];
extern u16 D_3003E20[];
extern u8 D_3004010[];
extern u16 D_3004D58[];
extern u8 D_3006C60[];
extern u16 D_3007500[];
extern u8 D_300A470[];
extern u16 D_300B218[];
extern u8 D_5007F60[];
extern Gfx D_3001C90[];
extern u16 D_3002E80[];
extern Gfx D_3003CE0[];
@ -1207,6 +1265,7 @@ extern Vtx D_6004500[];
extern Gfx D_6004570[];
extern Gfx D_60046F0[];
extern u16 D_60047E0[];
extern u8 D_6004AC0[];
extern Gfx D_6004FE0[];
extern Gfx D_6005360[];
extern u16 D_6005700[];
@ -1265,6 +1324,7 @@ extern Gfx D_6007410[];
extern Gfx D_60075D0[];
extern Gfx D_6007650[];
extern Gfx D_60079B0[];
extern u8 D_6007B90[];
extern Gfx D_6007CF0[];
extern Gfx D_6007D80[];
extern Gfx D_6007D90[];
@ -1278,6 +1338,7 @@ extern Gfx D_6009250[];
extern f32 D_60092E8[];
extern f32 D_6009388[];
extern Gfx D_60097E0[];
extern u8 D_6009AD0[];
extern u16* D_6009B34[];
extern u16 D_6009BB8[];
extern f32 D_6009CC4[];
@ -1357,6 +1418,7 @@ extern Gfx D_6010E00[];
extern u8 D_6010FA0[];
extern f32 D_6011058[];
extern f32 D_601115C[];
extern u8 D_6011660[];
extern u8 D_6011890[];
extern Gfx D_60119A0[];
extern f32 D_6011B24[];
@ -1393,6 +1455,7 @@ extern Gfx D_6014B50[];
extern Gfx D_60153B0[];
extern u16 D_6015430[];
extern Gfx D_6015730[];
extern u8 D_6015CE0[];
extern Gfx D_6015F00[];
extern Gfx D_6016270[];
extern Gfx D_60164F0[];
@ -1489,13 +1552,16 @@ extern Gfx D_6024010[];
extern Gfx D_6024220[];
extern Gfx D_60244A0[];
extern u16 D_60245E0[];
extern u16 D_60247E0[];
extern Gfx D_6024AC0[];
extern Gfx D_6024B60[];
extern u16 D_6025500[];
extern Gfx D_6025B50[];
extern u16 D_6026420[];
extern u16 D_6026C90[];
extern Gfx D_60270E0[];
extern Gfx D_6027180[];
extern u16 D_6022340[];
extern AnimationHeader D_6027320;
extern u16 D_6027340[];
extern Limb* D_602742C[];
@ -1505,6 +1571,8 @@ extern u16 D_6028260[];
extern f32 D_6028454[];
extern u16* D_60289FC[];
extern u16 D_6028A60[];
extern u16 D_6029170[];
extern u8 D_6029220[];
extern AnimationHeader D_6029528;
extern Limb* D_6029674[];
extern Gfx D_6029890[];
@ -1515,6 +1583,7 @@ extern u16 D_602AC50[];
extern u16 D_602ACC0[];
extern ObjectInit* D_602B148[];
extern Gfx D_602B4C0[];
extern u16 D_602B620[];
extern f32 D_602B9EC[];
extern f32 D_602BA20[];
extern f32 D_602BAE4[];
@ -1536,6 +1605,7 @@ extern f32 D_602C2B0[];
extern u16 D_602C2CC[];
extern Gfx D_602D5F0[];
extern Gfx D_602DA20[];
extern u16 D_602DAD0[];
extern Gfx D_602DAE0[];
extern Gfx D_602DB80[];
extern Gfx D_602DC20[];
@ -1559,6 +1629,7 @@ extern f32 D_602F740[];
extern f32 D_602F75C[];
extern Gfx D_602F7C0[];
extern f32 D_602FA50[];
extern u16 D_602FF60[];
extern Gfx D_6030500[];
extern Gfx D_6030630[];
extern Gfx D_60306D0[];
@ -1594,6 +1665,7 @@ extern u16 D_603158C[];
extern u16* D_60320D0[];
extern Gfx D_60320E0[];
extern f32 D_6032328[];
extern u16 D_60323D0[];
extern f32 D_6032408[];
extern f32 D_6032488[];
extern f32 D_60324EC[];
@ -1705,7 +1777,11 @@ extern u16 D_603EB38[];
extern Gfx D_6041070[];
extern u16 D_60447A0[];
extern u16 D_6047550[];
extern Gfx D_6049F80[];
extern Gfx D_604A190[];
extern Gfx D_604A710[];
extern Gfx D_604A9F0[];
extern Gfx D_604A400[];
extern Gfx D_605C230[];
extern f32 D_6028578[];
extern Gfx D_600F1F0[];
@ -1724,7 +1800,19 @@ extern Gfx D_7001540[];
extern u8 D_7001DF0[];
extern u8 D_7002110[];
extern u8 D_7003650[];
extern Gfx D_7003830[];
extern u8 D_7003C70[];
extern u8 D_7003E10[];
extern u8 D_7003F10[];
extern u8 D_7004010[];
extern u8 D_7004050[];
extern u16 D_7004150[];
extern u8 D_70041F0[];
extern u16 D_70042F0[];
extern u8 D_7004360[];
extern u16 D_7004460[];
extern u8 D_70044D0[];
extern u16 D_7004990[];
extern Gfx D_7007350[];
extern Gfx D_700AB70[];
extern Gfx D_700BB10[];
@ -1734,6 +1822,7 @@ extern Limb* D_700CB60[];
extern u16 D_700E9A0[];
extern u8 D_70118E0[];
extern u16 D_70123F8[];
extern u16 D_70123F8[];
// ast_9EB5E0, ast_CA9DE0, ast_D43400, ast_D68480, ast_D91F10
extern u8 D_8000000[];
@ -1872,5 +1961,66 @@ extern Gfx D_F0103D0[];
extern Gfx D_F014180[];
extern Gfx D_F014310[];
#endif // VARIABLES_H
// fox_map, to be ordered later
extern u8 D_60030D0[];
extern u8 D_600B9B0[];
extern u8 D_6010010[];
extern u8 D_600E210[];
extern u8 D_6006320[];
extern u8 D_60131A0[];
extern u8 D_6001C80[];
extern u8 D_6017640[];
extern u8 D_6014360[];
extern u8 D_6008990[];
extern u8 D_600AD30[];
extern u8 D_6011EA0[];
extern u8 D_6016760[];
extern u8 D_6005740[];
extern u8 D_6003B50[];
extern u8 D_600CC10[];
extern u8 D_60105C0[];
extern u8 D_600F390[];
extern u8 D_6006E80[];
extern u8 D_60139E0[];
extern u8 D_6002160[];
extern u8 D_6018280[];
extern u8 D_6014BA0[];
extern Gfx D_6055F20[];
extern Gfx D_6051D20[];
extern u8 D_601FF40[];
extern u8 D_602B6D0[];
extern u8 D_6026D70[];
extern u8 D_602FFD0[];
extern u8 D_60223E0[];
extern u8 D_6024890[];
extern u8 D_60190B0[];
extern u8 D_602DB60[];
extern Gfx D_6060610[];
extern Gfx D_601C0D0[];
extern Gfx D_601DE80[];
extern Gfx D_601C960[];
extern Gfx D_604B750[];
extern Gfx D_604DB10[];
extern Gfx D_601F6B0[];
extern u16 D_6041A80[];
extern u16 D_603F380[];
extern u16 D_6035780[];
extern u16 D_6037E80[];
extern u16 D_6033080[];
extern u16 D_603CC80[];
extern u16 D_603A580[];
extern u16 D_603A580[];
extern u16 D_6032A60[];
extern u16 D_6044180[];
extern u16 D_6032440[];
extern Gfx D_9006AE0[];
extern Gfx D_9000570[];
extern Gfx D_90086F0[];
extern Gfx D_9002EA0[];
extern Gfx D_9005380[];
extern Gfx D_90075A0[];
extern Gfx D_9004230[];
#endif // VARIABLES_H

View File

@ -120,6 +120,11 @@ D_8017873C = 0x8017873C;
D_80178740 = 0x80178740;
D_80178744 = 0x80178744;
D_80178748 = 0x80178748;
// fox_versus
sUnlockLandmaster = 0x8017875C;
sUnlockOnFoot = 0x80178760;
gCurrentMsgPri = 0x800D4A70;
func_800BA760 = 0x800BA760;

View File

@ -351,6 +351,7 @@ D_60034D0 = 0x060034D0;
D_6003610 = 0x06003610;
D_60036A0 = 0x060036A0;
D_6004170 = 0x06004170;
D_6004AC0 = 0x06004AC0;
D_6005360 = 0x06005360;
D_6005780 = 0x06005780;
D_6006140 = 0x06006140;
@ -385,6 +386,7 @@ D_6007410 = 0x06007410;
D_6007558 = 0x06007558;
D_60075D0 = 0x060075D0;
D_60079B0 = 0x060079B0;
D_6007B90 = 0x06007B90;
D_6007D80 = 0x06007D80;
D_6008370 = 0x06008370;
D_6008E08 = 0x06008E08;
@ -392,6 +394,7 @@ D_600924C = 0x0600924C;
D_60092E8 = 0x060092E8;
D_6009388 = 0x06009388;
D_60097E0 = 0x060097E0;
D_6009AD0 = 0x06009AD0;
D_6009CC4 = 0x06009CC4;
D_6009CFC = 0x06009CFC;
D_600A420 = 0x0600A420;
@ -427,6 +430,7 @@ D_6010E00 = 0x06010E00;
D_6011058 = 0x06011058;
D_601115C = 0x0601115C;
D_601115C = 0x0601115C;
D_6011660 = 0x06011660;
D_601170C = 0x0601170C;
D_6011B24 = 0x06011B24;
D_6011BF4 = 0x06011BF4;
@ -447,6 +451,7 @@ D_6014B50 = 0x06014B50;
D_6014FEC = 0x06014FEC;
D_60153B0 = 0x060153B0;
D_6015730 = 0x06015730;
D_6015CE0 = 0x06015CE0;
D_6015F00 = 0x06015F00;
D_6016270 = 0x06016270;
D_6016374 = 0x06016374;
@ -488,16 +493,22 @@ D_601F1D0 = 0x0601F1D0;
D_601F500 = 0x0601F500;
D_601F5A0 = 0x0601F5A0;
D_601FCB0 = 0x0601FCB0;
D_6022340 = 0x06022340;
D_60231C0 = 0x060231C0;
D_60238F0 = 0x060238F0;
D_6024010 = 0x06024010;
D_60244A0 = 0x060244A0;
D_60247E0 = 0x060247E0;
D_6024AC0 = 0x06024AC0;
D_6026C90 = 0x06026C90;
D_60270E0 = 0x060270E0;
D_6027180 = 0x06027180;
D_6027900 = 0x06027900;
D_6028454 = 0x06028454;
D_6029170 = 0x06029170;
D_6029220 = 0x06029220;
D_602B4C0 = 0x0602B4C0;
D_602B620 = 0x0602B620;
D_602B9EC = 0x0602B9EC;
D_602BA20 = 0x0602BA20;
D_602BAE4 = 0x0602BAE4;
@ -517,6 +528,7 @@ D_602C2B0 = 0x0602C2B0;
D_602CACC = 0x0602CACC;
D_602CB80 = 0x0602CB80;
D_602D5F0 = 0x0602D5F0;
D_602DAD0 = 0x0602DAD0;
D_602DAE0 = 0x0602DAE0;
D_602DB80 = 0x0602DB80;
D_602DC20 = 0x0602DC20;
@ -535,6 +547,7 @@ D_602F75C = 0x0602F75C;
D_602F7C0 = 0x0602F7C0;
D_602FA50 = 0x0602FA50;
D_602FA9C = 0x0602FA9C;
D_602FF60 = 0x0602FF60;
D_60300C8 = 0x060300C8;
D_6030208 = 0x06030208;
D_6030500 = 0x06030500;
@ -586,6 +599,7 @@ D_603204C = 0x0603204C;
D_60320B8 = 0x060320B8;
D_603216C = 0x0603216C;
D_6032388 = 0x06032388;
D_60323D0 = 0x060323D0;
D_6032430 = 0x06032430;
D_6032488 = 0x06032488;
D_60324EC = 0x060324EC;
@ -686,6 +700,10 @@ D_603F338 = 0x0603F338;
D_603F388 = 0x0603F388;
D_603F40C = 0x0603F40C;
D_603F4E4 = 0x0603F4E4;
D_604A190 = 0x0604A190;
D_604A400 = 0x0604A400;
D_604A710 = 0x0604A710;
D_6049F80 = 0x06049F80;
D_700AB70 = 0x0700AB70;
D_700BE00 = 0x0700BE00;
@ -708,3 +726,65 @@ D_C038F24 = 0x0C038F24;
D_D000000 = 0x0D000000;
D_D00B5C0 = 0x0D00B5C0;
D_D00B720 = 0x0D00B720;
// fox_map, to be ordered later
D_60030D0 = 0x060030D0;
D_600B9B0 = 0x0600B9B0;
D_6010010 = 0x06010010;
D_600E210 = 0x0600E210;
D_6006320 = 0x06006320;
D_60131A0 = 0x060131A0;
D_6001C80 = 0x06001C80;
D_6017640 = 0x06017640;
D_6014360 = 0x06014360;
D_6008990 = 0x06008990;
D_600AD30 = 0x0600AD30;
D_6011EA0 = 0x06011EA0;
D_6016760 = 0x06016760;
D_6005740 = 0x06005740;
D_6003B50 = 0x06003B50;
D_600CC10 = 0x0600CC10;
D_60105C0 = 0x060105C0;
D_600F390 = 0x0600F390;
D_6006E80 = 0x06006E80;
D_60139E0 = 0x060139E0;
D_6002160 = 0x06002160;
D_6018280 = 0x06018280;
D_6014BA0 = 0x06014BA0;
D_6055F20 = 0x06055F20;
D_6051D20 = 0x06051D20;
D_601FF40 = 0x0601FF40;
D_602B6D0 = 0x0602B6D0;
D_6026D70 = 0x06026D70;
D_602FFD0 = 0x0602FFD0;
D_60223E0 = 0x060223E0;
D_6024890 = 0x06024890;
D_60190B0 = 0x060190B0;
D_602DB60 = 0x0602DB60;
D_6060610 = 0x06060610;
D_601C0D0 = 0x0601C0D0;
D_601DE80 = 0x0601DE80;
D_601C960 = 0x0601C960;
D_604B750 = 0x0604B750;
D_604DB10 = 0x0604DB10;
D_601F6B0 = 0x0601F6B0;
D_6041A80 = 0x06041A80;
D_603F380 = 0x0603F380;
D_6035780 = 0x06035780;
D_6037E80 = 0x06037E80;
D_6033080 = 0x06033080;
D_603CC80 = 0x0603CC80;
D_603A580 = 0x0603A580;
D_6032A60 = 0x06032A60;
D_6044180 = 0x06044180;
D_6032440 = 0x06032440;
D_9006AE0 = 0x09006AE0;
D_9000570 = 0x09000570;
D_90086F0 = 0x090086F0;
D_9002EA0 = 0x09002EA0;
D_9005380 = 0x09005380;
D_90075A0 = 0x090075A0;
D_9004230 = 0x09004230;

View File

@ -1,5 +1,4 @@
#include "global.h"
#include "prevent_bss_reordering.h"
f32 __dx1;
f32 __dx2;

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "prevent_bss_reordering.h"
extern f32 D_E16C50_801C4188;

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "prevent_bss_reordering.h"
Vec3f D_801615D0;
Vec3f D_801615E0;

2015
src/main/fox_versus.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,151 +0,0 @@
#include "common.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BC760.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BC88C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BC8D8.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BC9DC.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BCB44.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BCC48.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BCE24.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BCEF8.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BCFFC.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD05C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD0B4.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD10C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD164.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD1B0.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD1FC.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD248.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD2A0.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD2F8.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD350.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD3A8.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD4D4.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD720.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD76C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD7C4.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BD9FC.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BDA54.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BDAA0.s")
void func_800BDE3C(void) {
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BDE44.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BE078.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BE300.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BE564.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BE924.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BECA8.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BED78.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BEDDC.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BEF00.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BEFE4.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BF17C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BF59C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BF750.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800BF9AC.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C024C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C0294.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C04DC.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C075C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C07C4.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C08D0.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C0970.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C0A04.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C0B0C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C0C84.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C0D10.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C0E78.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C107C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C1138.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C1368.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C15D8.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C1690.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C16A0.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C16D0.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C1700.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C176C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C1E9C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C1ED4.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C20B0.s")
void func_800C2190(void) {
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C2198.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C2244.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/func_800C26C8.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/D_800D9260.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/D_800D9264.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/D_800D926C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_versus/D_800D9274.s")

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "prevent_bss_reordering.h"
s32 sSeededRandSeed3;
s32 sRandSeed1;

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +0,0 @@
#ifndef FOX_MAP_H
#define FOX_MAP_H
typedef enum PlanetId {
/* 0 */ PLANET_METEO,
/* 1 */ PLANET_AREA_6,
/* 2 */ PLANET_BOLSE,
/* 3 */ PLANET_SECTOR_Z,
/* 4 */ PLANET_SECTOR_X,
/* 5 */ PLANET_SECTOR_Y,
/* 6 */ PLANET_KATINA,
/* 7 */ PLANET_MACBETH,
/* 8 */ PLANET_ZONESS,
/* 9 */ PLANET_CORNERIA,
/* 10 */ PLANET_TITANIA,
/* 11 */ PLANET_AQUAS,
/* 12 */ PLANET_FORTUNA,
/* 13 */ PLANET_VENOM,
/* 14 */ PLANET_SOLAR,
/* 15 */ PLANET_MAX,
} PlanetId;
#endif

View File

@ -1,3 +1,9 @@
/*
* File: fox_option.c
* System: Option
* Description: Starfox Option Menu Handler
*/
#include "global.h"
#include "fox_option.h"
@ -21,14 +27,11 @@ static f32 D_EBFBE0_801AE588[] = { 124.0f, 118.0f, 145.0f, 125.0f, 133.0f, 118.0
static f32 D_EBFBE0_801AE5A0[] = { 54.0f, 78.0f, 103.0f, 126.0f, 151.0f, 175.0f };
static f32 D_EBFBE0_801AE5B8[] = { 124.0f, 118.0f, 145.0f, 125.0f, 133.0f, 118.0f };
static f32 D_EBFBE0_801AE5D0[] = { 54.0f, 78.0f, 103.0f, 126.0f, 151.0f, 175.0f };
static f32 D_EBFBE0_801AE5E8[] = { 124.0f, 125.0f };
static f32 D_EBFBE0_801AE5F0[] = { 54.0f, 55.0f };
static f32 D_EBFBE0_801AE5F8[] = { 133.0f, 125.0f };
static f32 D_EBFBE0_801AE600[] = { 151.0f, 151.0f };
static f32 D_EBFBE0_801AE608[] = { 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f };
static f32 D_EBFBE0_801AE620[] = { 1.9f, 2.4f, 0.9f, 1.9f, 1.8f, 2.4f };
static MenuContext D_EBFBE0_801AE638[6] = {
@ -3210,10 +3213,17 @@ void func_EBFBE0_8019AB30(void) {
// extern f32 D_EBFBE0_801B9338; // in-function
// needs in function static
#if defined(IMPORT_BSS) || defined(NON_MATCHING)
#ifndef IMPORT_BSS
extern f32 D_EBFBE0_801B9324;
extern f32 D_EBFBE0_801B9328;
extern f32 D_EBFBE0_801B9338;
#endif
void func_EBFBE0_8019AD84(void) {
#ifdef IMPORT_BSS
static f32 D_EBFBE0_801B9324;
static f32 D_EBFBE0_801B9328;
static f32 D_EBFBE0_801B9338;
#endif
s32 pad[2];
s32 colorGB;
s32 var_v0;
@ -3277,12 +3287,19 @@ static u8* D_EBFBE0_801AF28C[] = {
// needs in-function static data & bss
#if defined(IMPORT_BSS) || defined(NON_MATCHING)
#ifndef IMPORT_BSS
extern f32 D_EBFBE0_801B93C0;
extern f32 D_EBFBE0_801B93C8;
extern f32 D_EBFBE0_801B93CC;
#endif
void func_EBFBE0_8019AFFC(void) {
static f32 D_EBFBE0_801AF2A0 = 101.0f;
static f32 D_EBFBE0_801AF2A4 = 86.0f;
#ifdef IMPORT_BSS
static f32 D_EBFBE0_801B93C0;
static f32 D_EBFBE0_801B93C8;
static f32 D_EBFBE0_801B93CC;
#endif
s32 var_v0;
s32 colorGB;

View File

@ -1,3 +1,9 @@
/*
* File: fox_title.c
* System: Title
* Description: Starfox Title Handler
*/
#include "global.h"
#include "fox_title.h"

View File

@ -73,8 +73,6 @@ typedef struct {
/* 0x10 */ f32 scale;
} UnkStruct_D_EBFBE0_801B8688; // size = 0x14
extern char D_EBFBE0_801ADA44[];
extern s32 D_EBFBE0_801ADA84[];
extern UnkStruct_D_EBFBE0_801B8294 D_EBFBE0_801B6B40[];
extern UnkStruct_D_EBFBE0_801B8294 D_EBFBE0_801B6C60[];
extern f32 D_EBFBE0_801B7BB0;

0
tools/global_bss_check.py Normal file → Executable file
View File

View File

@ -195,7 +195,7 @@
- [0xB99D0, c, fox_rcp]
- [0xBB360, c, fox_radio]
- [0xBD0B0, c, fox_reset]
- [0xBD360, c, sf_versus]
- [0xBD360, c, fox_versus]
- [0xC3430, c, fox_message]
- [0xC3BB0, c, fox_save]
@ -284,7 +284,7 @@
- [0xD3DB0, .data, fox_rcp]
- [0xD5670, .data, fox_radio]
- [0xD5680, .data, fox_reset]
- [0xD5690, data, sf_versus]
- [0xD5690, .data, fox_versus]
- [0xD5910, .data, fox_save]
# RODATA - game engine
@ -309,7 +309,7 @@
- [0xD8EE0, .rodata, fox_A48A0]
- [0xD8EF0, .rodata, fox_play]
- [0xD97F0, .rodata, fox_radio]
- [0xD9E50, .rodata, sf_versus]
- [0xD9E50, .rodata, fox_versus]
- [0xD9F60, .rodata, fox_message]
- [0xDA030, .rodata, fox_save]
@ -371,7 +371,7 @@
- { start: 0xDE480, type: bss, vram: 0x80161A50, name: fox_play }
- { start: 0xDE480, type: .bss, vram: 0x80178580, name: fox_rcp }
- { start: 0xDE480, type: .bss, vram: 0x80178720, name: fox_radio }
- { start: 0xDE480, type: bss, vram: 0x80178750, name: sf_versus }
- { start: 0xDE480, type: .bss, vram: 0x80178750, name: fox_versus }
- { start: 0xDE480, type: .bss, vram: 0x80178870, name: fox_save }
- name: dma_table