#ifndef BANJO_KAZOOIE_CHECKSUMS_H
#define BANJO_KAZOOIE_CHECKSUMS_H
#include <ultra64.h>
*/
#define CRC_BOOT_TEXT_CHECKSUM1 0
#define CRC_BOOT_TEXT_CHECKSUM2 4
#define CRC_CORE1_TEXT_CHECKSUM1 8
#define CRC_CORE1_TEXT_CHECKSUM2 12
#define CRC_CORE1_DATA_CHECKSUM1 16
#define CRC_CORE1_DATA_CHECKSUM2 20
extern u8 crc_ROM_START[];
* These values are written by the overlay loader. They are checked with pre-calculated values for
* different anti-tampering measurements.
* The exception is the core1 overlay, which checksums are written to a special place.
*/
struct overlay_checksums_s {
s32 text_checksum1;
s32 text_checksum2;
s32 data_checksum1;
s32 data_checksum2;
};
extern struct overlay_checksums_s gChecksumsCore1;
extern struct overlay_checksums_s gChecksumsCore2;
extern struct overlay_checksums_s gChecksumsCC;
extern struct overlay_checksums_s gChecksumsGV;
extern struct overlay_checksums_s gChecksumsMMM;
extern struct overlay_checksums_s gChecksumsTTC;
extern struct overlay_checksums_s gChecksumsMM;
extern struct overlay_checksums_s gChecksumsBGS;
extern struct overlay_checksums_s gChecksumsRBB;
extern struct overlay_checksums_s gChecksumsFP;
extern struct overlay_checksums_s gChecksumsSM;
extern struct overlay_checksums_s gChecksumsCutscenes;
extern struct overlay_checksums_s gChecksumsLair;
extern struct overlay_checksums_s gChecksumsFight;
extern struct overlay_checksums_s gChecksumsCCW;
extern struct overlay_checksums_s gChecksumsEmptyLvl;
*
* The calculation process should be as following (needs to be confirmed!!):
* 1. At compile time all checksum variables (listed below) are set to zero
* 2. The text checksums for all overlays (except core1) are calculated and written.
* 3. The data checksums are calculated in two passes:
* 3-1. Data checksum 1 is calculated and written for each overlay (except core1).
* 3-2. Data checksum 2 is calculated and written for each overlay (except core1).
* 4. The boot and core1 checksums are calculated and written to the CRC section.
*
* Notes:
* - Checksums 1 sums up every byte
* - Checksum 2 XORes every byte after it is shifted right by "current checksum 1 AND 0x17"
* (This means checksum 2 must be calculated together with checksum 1)
* (Step 3-1 discards checksum 2 and step 3-2 discards checksum 1)
* - Checksums without a correspondending variable are just discarded.
*/
extern s32 D_803727F4;
extern s32 D_80276574;
extern s32 D_80389BE0;
extern s32 D_80389BE4;
extern s32 D_80389BE8;
extern s32 D_80276570;
extern s32 D_80390F30;
extern s32 D_80390F34;
extern s32 D_80390F38;
extern s32 D_80275904;
extern s32 D_8038C300;
extern s32 D_8038C304;
extern s32 D_8038C308;
extern s32 D_80275854;
extern s32 D_8038C750;
extern s32 D_8038C754;
extern s32 D_8038C758;
extern s32 D_80276CB0;
extern s32 D_803899C0;
extern s32 D_803899C4;
extern s32 D_803899C8;
extern s32 D_80275654;
extern s32 D_80390B20;
extern s32 D_80390B24;
extern s32 D_80390B28;
extern s32 D_802758F0;
extern s32 D_80276CB4;
extern s32 D_802758F4;
extern s32 D_8038AAE0;
extern s32 D_8038AAE4;
extern s32 D_8038AAE8;
extern s32 D_80275650;
extern s32 D_80275850;
extern s32 D_80275900;
extern s32 D_80275D34;
extern s32 D_80275D30;
#endif