clang-format

This commit is contained in:
theo
2020-06-13 17:02:27 -07:00
parent 8e1ca1936b
commit 66fcdf6186
86 changed files with 2320 additions and 2604 deletions
+7 -7
View File
@@ -4,13 +4,13 @@
#include "global.h"
typedef struct {
u8 areaMetadata;
u32 locationIndex;
u8 unk;
u16 localFlagOffset;
u8 filler[19];
u8 fadeOut;
u8 filler[14];
u8 areaMetadata;
u32 locationIndex;
u8 unk;
u16 localFlagOffset;
u8 filler[19];
u8 fadeOut;
u8 filler[14];
} Area;
extern Area gArea;
+1 -1
View File
@@ -1 +1 @@
Entity * CreateEnemy(u8, u8);
Entity* CreateEnemy(u8, u8);
+7 -7
View File
@@ -4,13 +4,13 @@
#include "global.h"
typedef struct {
u32 *cutsceneData;
u8 textIndex;
u8 filler[11];
u16 pauseTime;
u8 filler[2];
s32 targetX;
s32 targetY;
u32* cutsceneData;
u8 textIndex;
u8 filler[11];
u16 pauseTime;
u8 filler[2];
s32 targetX;
s32 targetY;
} CutsceneBehavior;
#endif
+48 -50
View File
@@ -1,17 +1,16 @@
#include "global.h"
#ifndef ENTITY_H
#define ENTITY_H
typedef struct {
void *entity1;
void *entity2;
u8 filler[14];
void* entity1;
void* entity2;
u8 filler[14];
} UnkStruct;
typedef struct {
u8 type;
u8 type;
u8 subtype;
u8 parameter1;
u8 parameter2;
@@ -20,29 +19,28 @@ typedef struct {
union SplitWord {
s32 WORD;
struct {
s16 LO, HI;
s16 LO, HI;
} HALF;
};
union SplitHWord {
u16 HWORD;
struct {
u8 LO, HI;
u8 LO, HI;
} PACKED HALF;
};
typedef struct Entity
{
u32 *field_0x0;
u32 * field_0x4;
EntityType entityType;
typedef struct Entity {
u32* field_0x0;
u32* field_0x4;
EntityType entityType;
u8 action;
u8 previousActionFlag;
u8 parameter3;
u8 field_0xf;
u8 flags;
u8 scriptedScene:4;
u8 scriptedScene2:4;
u8 scriptedScene : 4;
u8 scriptedScene2 : 4;
s16 spriteTileSize;
u8 animationState;
u8 direction;
@@ -51,28 +49,28 @@ typedef struct Entity
union {
u8 raw;
struct {
u8 ss0:2;
u8 ss2:1;
u8 ss3:1;
u8 ss4:1;
u8 ss5:1;
u8 ss6:1;
u8 ss7:1;
u8 ss0 : 2;
u8 ss2 : 1;
u8 ss3 : 1;
u8 ss4 : 1;
u8 ss5 : 1;
u8 ss6 : 1;
u8 ss7 : 1;
} PACKED b;
} PACKED spriteSettings;
struct {
u8 b0:2;
u8 b1:2;
u8 b2:2;
u8 b3:2;
u8 b0 : 2;
u8 b1 : 2;
u8 b2 : 2;
u8 b3 : 2;
} PACKED spriteOrder;
u8 palette;
struct {
u8 b0:4;
u8 b1:1;
u8 b2:3;
u8 b0 : 4;
u8 b1 : 1;
u8 b2 : 3;
} PACKED spriteOrientation;
u8 filler[2];
u8 animationList;
@@ -81,13 +79,13 @@ typedef struct Entity
s16 nonPlanarMovement;
u8 spriteAnimation[3];
struct {
u8 b0:3;
u8 b1:5;
u8 b0 : 3;
u8 b1 : 5;
} PACKED ticks;
u16 collisions;
union SplitWord x;
union SplitWord y;
union SplitWord height; // todo
union SplitWord x;
union SplitWord y;
union SplitWord height; // todo
u8 collisionLayer;
s8 interactType;
u8 field_0x3a;
@@ -103,22 +101,22 @@ typedef struct Entity
u8 field_0x44;
u8 currentHealth;
s16 field_0x46;
u32 * boundingBox;
u32* boundingBox;
u8 field_0x4c;
u8 field_0x4d;
u8 field_0x4e;
u8 field_0x4f;
struct Entity * parent;
struct Entity * attachedEntity;
struct Entity* parent;
struct Entity* attachedEntity;
u8 field_0x58;
u8 field_0x59;
union {
u8 all;
struct {
u8 f0:1;
u8 f1:5;
u8 f2:1;
u8 f3:1;
u8 f0 : 1;
u8 f1 : 5;
u8 f2 : 1;
u8 f3 : 1;
} PACKED b;
} PACKED frames;
u8 gfx;
@@ -129,22 +127,22 @@ typedef struct Entity
u16 spriteVramOffset;
u8 spriteOffsetX;
u8 spriteOffsetY;
u32 * otherEntity;
u8 field_0x68;
u32* otherEntity;
u8 field_0x68;
u8 field_0x69;
u16 field_0x6a;
u8 field_0x6c;
u8 field_0x6d;
u8 filler4[6];
u32 * heldObjectPtr;
u8 filler3[2];
u16 itemCooldown;
u32 field_0x7c;
u16 field_0x80;
u32* heldObjectPtr;
u8 filler3[2];
u16 itemCooldown;
u32 field_0x7c;
u16 field_0x80;
u16 field_0x82;
union SplitHWord cutsceneBeh;
union SplitHWord cutsceneBeh;
u16 field_0x86;
} Entity;
#endif
+8 -8
View File
@@ -2,13 +2,13 @@
#define ENTITYDATA_H
#include "global.h"
typedef struct {
u8 entityType;
u8 field_0x1;
u8 entitySubtype;
u8 entityParameter1;
u32 entityParameter2;
u16 xPos;
u16 yPos;
u32 spritePtr;
u8 entityType;
u8 field_0x1;
u8 entitySubtype;
u8 entityParameter1;
u32 entityParameter2;
u16 xPos;
u16 yPos;
u32 spritePtr;
} EntityData;
#endif
+26 -26
View File
@@ -3,7 +3,7 @@
#include <stddef.h>
#define TRUE 1
#define TRUE 1
#define FALSE 0
#if defined(__APPLE__)
@@ -20,65 +20,65 @@
#define ALIGNED(n) __attribute__((aligned(n)))
#define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0)
#define INTR_CHECK (*(u16 *)0x3007FF8)
#define INTR_VECTOR (*(void **)0x3007FFC)
#define SOUND_INFO_PTR (*(struct SoundInfo**)0x3007FF0)
#define INTR_CHECK (*(u16*)0x3007FF8)
#define INTR_VECTOR (*(void**)0x3007FFC)
#define EWRAM_START 0x02000000
#define EWRAM_END (EWRAM_START + 0x40000)
#define EWRAM_END (EWRAM_START + 0x40000)
#define IWRAM_START 0x03000000
#define IWRAM_END (IWRAM_START + 0x8000)
#define IWRAM_END (IWRAM_START + 0x8000)
#define PLTT 0x5000000
#define PLTT 0x5000000
#define PLTT_SIZE 0x400
#define BG_PLTT PLTT
#define BG_PLTT PLTT
#define BG_PLTT_SIZE 0x200
#define OBJ_PLTT (PLTT + 0x200)
#define OBJ_PLTT (PLTT + 0x200)
#define OBJ_PLTT_SIZE 0x200
#define VRAM 0x6000000
#define VRAM 0x6000000
#define VRAM_SIZE 0x18000
#define BG_VRAM VRAM
#define BG_VRAM_SIZE 0x10000
#define BG_CHAR_SIZE 0x4000
#define BG_SCREEN_SIZE 0x800
#define BG_CHAR_ADDR(n) (void *)(BG_VRAM + (BG_CHAR_SIZE * (n)))
#define BG_SCREEN_ADDR(n) (void *)(BG_VRAM + (BG_SCREEN_SIZE * (n)))
#define BG_TILE_ADDR(n) (void *)(BG_VRAM + (0x80 * (n)))
#define BG_VRAM VRAM
#define BG_VRAM_SIZE 0x10000
#define BG_CHAR_SIZE 0x4000
#define BG_SCREEN_SIZE 0x800
#define BG_CHAR_ADDR(n) (void*)(BG_VRAM + (BG_CHAR_SIZE * (n)))
#define BG_SCREEN_ADDR(n) (void*)(BG_VRAM + (BG_SCREEN_SIZE * (n)))
#define BG_TILE_ADDR(n) (void*)(BG_VRAM + (0x80 * (n)))
#define BG_TILE_H_FLIP(n) (0x400 + (n))
#define BG_TILE_V_FLIP(n) (0x800 + (n))
// text-mode BG
#define OBJ_VRAM0 (void *)(VRAM + 0x10000)
#define OBJ_VRAM0 (void*)(VRAM + 0x10000)
#define OBJ_VRAM0_SIZE 0x8000
// bitmap-mode BG
#define OBJ_VRAM1 (void *)(VRAM + 0x14000)
#define OBJ_VRAM1 (void*)(VRAM + 0x14000)
#define OBJ_VRAM1_SIZE 0x4000
#define OAM 0x7000000
#define OAM 0x7000000
#define OAM_SIZE 0x400
#define ROM_HEADER_SIZE 0xC0
#define ROM_HEADER_SIZE 0xC0
#define DISPLAY_WIDTH 240
#define DISPLAY_WIDTH 240
#define DISPLAY_HEIGHT 160
#define TILE_SIZE_4BPP 32
#define TILE_SIZE_8BPP 64
#define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP)
#define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP)
#define TILE_OFFSET_4BPP(n) ((n)*TILE_SIZE_4BPP)
#define TILE_OFFSET_8BPP(n) ((n)*TILE_SIZE_8BPP)
#define TOTAL_OBJ_TILE_COUNT 1024
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r))
#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F))
#define _RGB(r, g, b) ((((b)&0x1F) << 10) + (((g)&0x1F) << 5) + ((r)&0x1F))
#define RGB_BLACK RGB(0, 0, 0)
#define RGB_WHITE RGB(31, 31, 31)
@@ -90,6 +90,6 @@
#define RGB_CYAN RGB(0, 31, 31)
#define RGB_WHITEALPHA (RGB_WHITE | 0x8000)
#define SYSTEM_CLOCK (16 * 1024 * 1024) // System Clock
#define SYSTEM_CLOCK (16 * 1024 * 1024) // System Clock
#endif // GUARD_GBA_DEFINES
+9 -11
View File
@@ -1,16 +1,15 @@
#ifndef GUARD_GBA_FLASH_INTERNAL_H
#define GUARD_GBA_FLASH_INTERNAL_H
#define FLASH_BASE ((u8 *)0xE000000)
#define FLASH_BASE ((u8*)0xE000000)
#define FLASH_WRITE(addr, data) ((*(vu8 *)(FLASH_BASE + (addr))) = (data))
#define FLASH_WRITE(addr, data) ((*(vu8*)(FLASH_BASE + (addr))) = (data))
#define FLASH_ROM_SIZE_1M 131072 // 1 megabit ROM
#define SECTORS_PER_BANK 16
struct FlashSector
{
struct FlashSector {
u32 size;
u8 shift;
u16 count;
@@ -25,21 +24,20 @@ struct FlashType {
// TODO: add support for anonymous unions/structs if possible
union {
struct {
u8 makerId;
u8 deviceId;
u8 makerId;
u8 deviceId;
} separate;
u16 joined;
} ids;
};
struct FlashSetupInfo
{
struct FlashSetupInfo {
u16 (*programFlashByte)(u16, u32, u8);
u16 (*programFlashSector)(u16, void *);
u16 (*programFlashSector)(u16, void*);
u16 (*eraseFlashChip)(void);
u16 (*eraseFlashSector)(u16);
u16 (*WaitForFlashWrite)(u8, u8 *, u8);
const u16 *maxTime;
u16 (*WaitForFlashWrite)(u8, u8*, u8);
const u16* maxTime;
struct FlashType type;
};
+642 -641
View File
File diff suppressed because it is too large Load Diff
+12 -12
View File
@@ -5,46 +5,46 @@
#define AGBPrintInit()
#define AGBPutc(cChr)
#define AGBPrint(pBuf)
#define AGBPrintf(pBuf, ...)
#define AGBPrintf(pBuf, ...)
#define AGBPrintFlush1Block()
#define AGBPrintFlush()
#define AGBAssert(pFile, nLine, pExpression, nStopProgram)
#else
void AGBPrintInit(void);
void AGBPutc(const char cChr);
void AGBPrint(const char *pBuf);
void AGBPrintf(const char *pBuf, ...);
void AGBPrint(const char* pBuf);
void AGBPrintf(const char* pBuf, ...);
void AGBPrintFlush1Block(void);
void AGBPrintFlush(void);
void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopProgram);
void AGBAssert(const char* pFile, int nLine, const char* pExpression, int nStopProgram);
#endif
#undef AGB_ASSERT
#ifdef NDEBUG
#define AGB_ASSERT(exp)
#define AGB_ASSERT(exp)
#else
#define AGB_ASSERT(exp) (exp) ? ((void *)0) : AGBAssert(__FILE__, __LINE__, #exp, 1);
#define AGB_ASSERT(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 1);
#endif
#undef AGB_WARNING
#ifdef NDEBUG
#define AGB_WARNING(exp)
#define AGB_WARNING(exp)
#else
#define AGB_WARNING(exp) (exp) ? ((void *)0) : AGBAssert(__FILE__, __LINE__, #exp, 0);
#define AGB_WARNING(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 0);
#endif
// for matching purposes
#ifdef NDEBUG
#define AGB_ASSERT_EX(exp, file, line)
#define AGB_ASSERT_EX(exp, file, line)
#else
#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void *)0) : AGBAssert(file, line, #exp, 1);
#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 1);
#endif
#ifdef NDEBUG
#define AGB_WARNING_EX(exp, file, line)
#define AGB_WARNING_EX(exp, file, line)
#else
#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void *)0) : AGBAssert(file, line, #exp, 0);
#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 0);
#endif
#endif // GUARD_GBA_ISAGBPRINT_H
+122 -132
View File
@@ -9,66 +9,63 @@
#define C_V 0x40 // center value for PAN, BEND, and TUNE
#define SOUND_MODE_REVERB_VAL 0x0000007F
#define SOUND_MODE_REVERB_SET 0x00000080
#define SOUND_MODE_MAXCHN 0x00000F00
#define SOUND_MODE_REVERB_VAL 0x0000007F
#define SOUND_MODE_REVERB_SET 0x00000080
#define SOUND_MODE_MAXCHN 0x00000F00
#define SOUND_MODE_MAXCHN_SHIFT 8
#define SOUND_MODE_MASVOL 0x0000F000
#define SOUND_MODE_MASVOL 0x0000F000
#define SOUND_MODE_MASVOL_SHIFT 12
#define SOUND_MODE_FREQ_05734 0x00010000
#define SOUND_MODE_FREQ_07884 0x00020000
#define SOUND_MODE_FREQ_10512 0x00030000
#define SOUND_MODE_FREQ_13379 0x00040000
#define SOUND_MODE_FREQ_15768 0x00050000
#define SOUND_MODE_FREQ_18157 0x00060000
#define SOUND_MODE_FREQ_21024 0x00070000
#define SOUND_MODE_FREQ_26758 0x00080000
#define SOUND_MODE_FREQ_31536 0x00090000
#define SOUND_MODE_FREQ_36314 0x000A0000
#define SOUND_MODE_FREQ_40137 0x000B0000
#define SOUND_MODE_FREQ_42048 0x000C0000
#define SOUND_MODE_FREQ 0x000F0000
#define SOUND_MODE_FREQ_SHIFT 16
#define SOUND_MODE_DA_BIT_9 0x00800000
#define SOUND_MODE_DA_BIT_8 0x00900000
#define SOUND_MODE_DA_BIT_7 0x00A00000
#define SOUND_MODE_DA_BIT_6 0x00B00000
#define SOUND_MODE_DA_BIT 0x00B00000
#define SOUND_MODE_FREQ_05734 0x00010000
#define SOUND_MODE_FREQ_07884 0x00020000
#define SOUND_MODE_FREQ_10512 0x00030000
#define SOUND_MODE_FREQ_13379 0x00040000
#define SOUND_MODE_FREQ_15768 0x00050000
#define SOUND_MODE_FREQ_18157 0x00060000
#define SOUND_MODE_FREQ_21024 0x00070000
#define SOUND_MODE_FREQ_26758 0x00080000
#define SOUND_MODE_FREQ_31536 0x00090000
#define SOUND_MODE_FREQ_36314 0x000A0000
#define SOUND_MODE_FREQ_40137 0x000B0000
#define SOUND_MODE_FREQ_42048 0x000C0000
#define SOUND_MODE_FREQ 0x000F0000
#define SOUND_MODE_FREQ_SHIFT 16
#define SOUND_MODE_DA_BIT_9 0x00800000
#define SOUND_MODE_DA_BIT_8 0x00900000
#define SOUND_MODE_DA_BIT_7 0x00A00000
#define SOUND_MODE_DA_BIT_6 0x00B00000
#define SOUND_MODE_DA_BIT 0x00B00000
#define SOUND_MODE_DA_BIT_SHIFT 20
struct WaveData
{
struct WaveData {
u16 type;
u16 status;
u32 freq;
u32 loopStart;
u32 size; // number of samples
u32 size; // number of samples
s8 data[1]; // samples
};
#define TONEDATA_TYPE_CGB 0x07
#define TONEDATA_TYPE_FIX 0x08
#define TONEDATA_TYPE_SPL 0x40 // key split
#define TONEDATA_TYPE_RHY 0x80 // rhythm
#define TONEDATA_TYPE_CGB 0x07
#define TONEDATA_TYPE_FIX 0x08
#define TONEDATA_TYPE_SPL 0x40 // key split
#define TONEDATA_TYPE_RHY 0x80 // rhythm
#define TONEDATA_P_S_PAN 0xc0
#define TONEDATA_P_S_PAM TONEDATA_P_S_PAN
#define TONEDATA_P_S_PAN 0xc0
#define TONEDATA_P_S_PAM TONEDATA_P_S_PAN
struct ToneData
{
struct ToneData {
u8 type;
u8 key;
u8 length; // sound length (compatible sound)
u8 length; // sound length (compatible sound)
u8 pan_sweep; // pan or sweep (compatible sound ch. 1)
struct WaveData *wav;
struct WaveData* wav;
u8 attack;
u8 decay;
u8 sustain;
u8 release;
};
struct CgbChannel
{
struct CgbChannel {
u8 sf;
u8 ty;
u8 rightVolume;
@@ -100,7 +97,7 @@ struct CgbChannel
u8 le;
u8 sw;
u32 fr;
u32 *wp;
u32* wp;
u32 cp;
u32 tp;
u32 pp;
@@ -110,8 +107,7 @@ struct CgbChannel
struct MusicPlayerTrack;
struct SoundChannel
{
struct SoundChannel {
u8 status;
u8 type;
u8 rightVolume;
@@ -137,9 +133,9 @@ struct SoundChannel
u32 ct;
u32 fw;
u32 freq;
struct WaveData *wav;
struct WaveData* wav;
u32 cp;
struct MusicPlayerTrack *track;
struct MusicPlayerTrack* track;
u32 pp;
u32 np;
u32 d4;
@@ -151,8 +147,7 @@ struct SoundChannel
#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer
struct SoundInfo
{
struct SoundInfo {
// This field is normally equal to ID_NUMBER but it is set to other
// values during sensitive operations for locking purposes.
// This field should be volatile but isn't. This could potentially cause
@@ -175,39 +170,37 @@ struct SoundInfo
s32 pcmSamplesPerVBlank;
s32 pcmFreq;
s32 divFreq;
struct CgbChannel *cgbChans;
struct CgbChannel* cgbChans;
u32 func;
u32 intp;
void (*CgbSound)(void);
void (*CgbOscOff)(u8);
u32 (*MidiKeyToCgbFreq)(u8, u8, u8);
u32 MPlayJumpTable;
void *plynote;
void* plynote;
void (*ExtVolPit)(void);
u8 gap2[16];
struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
};
struct SongHeader
{
struct SongHeader {
u8 trackCount;
u8 blockCount;
u8 priority;
u8 reverb;
struct ToneData *tone;
u8 *part[1];
struct ToneData* tone;
u8* part[1];
};
#define MPT_FLG_VOLSET 0x01
#define MPT_FLG_VOLCHG 0x03
#define MPT_FLG_PITSET 0x04
#define MPT_FLG_PITCHG 0x0C
#define MPT_FLG_START 0x40
#define MPT_FLG_EXIST 0x80
#define MPT_FLG_START 0x40
#define MPT_FLG_EXIST 0x80
struct MusicPlayerTrack
{
struct MusicPlayerTrack {
u8 flags;
u8 wait;
u8 patternLevel;
@@ -240,13 +233,13 @@ struct MusicPlayerTrack
u8 priority;
u8 echoVolume;
u8 echoLength;
struct SoundChannel *chan;
struct SoundChannel* chan;
struct ToneData tone;
u8 gap[10];
u16 unk_3A;
u32 unk_3C;
u8 *cmdPtr;
u8 *patternStack[3];
u8* cmdPtr;
u8* patternStack[3];
};
#define MUSICPLAYER_STATUS_TRACK 0x0000ffff
@@ -254,14 +247,13 @@ struct MusicPlayerTrack
#define MAX_MUSICPLAYER_TRACKS 16
#define TEMPORARY_FADE 0x0001
#define FADE_IN 0x0002
#define FADE_VOL_MAX 64
#define FADE_VOL_SHIFT 2
#define TEMPORARY_FADE 0x0001
#define FADE_IN 0x0002
#define FADE_VOL_MAX 64
#define FADE_VOL_SHIFT 2
struct MusicPlayerInfo
{
struct SongHeader *songHeader;
struct MusicPlayerInfo {
struct SongHeader* songHeader;
u32 status;
u8 trackCount;
u8 priority;
@@ -269,7 +261,7 @@ struct MusicPlayerInfo
u8 unk_B;
u32 clock;
u8 gap[8];
u8 *memAccArea;
u8* memAccArea;
u16 tempoD;
u16 tempoU;
u16 tempoI;
@@ -277,24 +269,22 @@ struct MusicPlayerInfo
u16 fadeOI;
u16 fadeOC;
u16 fadeOV;
struct MusicPlayerTrack *tracks;
struct ToneData *tone;
struct MusicPlayerTrack* tracks;
struct ToneData* tone;
u32 ident;
u32 func;
u32 intp;
};
struct MusicPlayer
{
struct MusicPlayerInfo *info;
struct MusicPlayerTrack *track;
struct MusicPlayer {
struct MusicPlayerInfo* info;
struct MusicPlayerTrack* track;
u8 unk_8;
u16 unk_A;
};
struct Song
{
struct SongHeader *header;
struct Song {
struct SongHeader* header;
u16 ms;
u16 me;
};
@@ -308,9 +298,9 @@ extern u8 gMPlayMemAccArea[];
extern char SoundMainRAM[];
extern void *gMPlayJumpTable[];
extern void* gMPlayJumpTable[];
typedef void (*XcmdFunc)(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
typedef void (*XcmdFunc)(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
extern const XcmdFunc gXcmdTable[];
extern struct CgbChannel gCgbChans[];
@@ -333,75 +323,75 @@ extern char gMaxLines[];
u32 umul3232H32(u32 multiplier, u32 multiplicand);
void SoundMain(void);
void SoundMainBTM(void);
void TrackStop(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track);
void TrackStop(struct MusicPlayerInfo* mplayInfo, struct MusicPlayerTrack* track);
void MPlayMain(void);
void RealClearChain(void *x);
void RealClearChain(void* x);
void MPlayContinue(struct MusicPlayerInfo *mplayInfo);
void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader);
void MPlayStop(struct MusicPlayerInfo *mplayInfo);
void FadeOutBody(struct MusicPlayerInfo *mplayInfo);
void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track);
void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed);
void ClearChain(void *x);
void Clear64byte(void *addr);
void SoundInit(struct SoundInfo *soundInfo);
void MPlayExtender(struct CgbChannel *cgbChans);
void MPlayContinue(struct MusicPlayerInfo* mplayInfo);
void MPlayStart(struct MusicPlayerInfo* mplayInfo, struct SongHeader* songHeader);
void MPlayStop(struct MusicPlayerInfo* mplayInfo);
void FadeOutBody(struct MusicPlayerInfo* mplayInfo);
void TrkVolPitSet(struct MusicPlayerInfo* mplayInfo, struct MusicPlayerTrack* track);
void MPlayFadeOut(struct MusicPlayerInfo* mplayInfo, u16 speed);
void ClearChain(void* x);
void Clear64byte(void* addr);
void SoundInit(struct SoundInfo* soundInfo);
void MPlayExtender(struct CgbChannel* cgbChans);
void m4aSoundMode(u32 mode);
void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track, u8 a3);
void MPlayOpen(struct MusicPlayerInfo* mplayInfo, struct MusicPlayerTrack* track, u8 a3);
void CgbSound(void);
void CgbOscOff(u8);
u32 MidiKeyToCgbFreq(u8, u8, u8);
void nullsub_141(void);
void MPlayJumpTableCopy(void **mplayJumpTable);
void MPlayJumpTableCopy(void** mplayJumpTable);
void SampleFreqSet(u32 freq);
void m4aSoundVSyncOn(void);
void m4aSoundVSyncOff(void);
void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo);
void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch);
void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan);
void ClearModM(struct MusicPlayerTrack *track);
void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth);
void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed);
void m4aMPlayTempoControl(struct MusicPlayerInfo* mplayInfo, u16 tempo);
void m4aMPlayVolumeControl(struct MusicPlayerInfo* mplayInfo, u16 trackBits, u16 volume);
void m4aMPlayPitchControl(struct MusicPlayerInfo* mplayInfo, u16 trackBits, s16 pitch);
void m4aMPlayPanpotControl(struct MusicPlayerInfo* mplayInfo, u16 trackBits, s8 pan);
void ClearModM(struct MusicPlayerTrack* track);
void m4aMPlayModDepthSet(struct MusicPlayerInfo* mplayInfo, u16 trackBits, u8 modDepth);
void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo* mplayInfo, u16 trackBits, u8 lfoSpeed);
// sound command handler functions
void ply_fine(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_goto(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_patt(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_pend(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_rept(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_memacc(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_prio(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_tempo(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_keysh(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_voice(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_vol(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_pan(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_bend(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_bendr(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_lfos(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_lfodl(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_mod(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_modt(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_fine(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_goto(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_patt(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_pend(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_rept(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_memacc(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_prio(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_tempo(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_keysh(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_voice(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_vol(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_pan(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_bend(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_bendr(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_lfos(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_lfodl(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_mod(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_modt(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_tune(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_port(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xcmd(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_endtie(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_note(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
// extended sound command handler functions
void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xwave(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xtype(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xatta(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xdeca(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xsust(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xrele(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xiecv(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xiecl(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xleng(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xswee(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xxx(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xwave(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xtype(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xatta(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xdeca(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xsust(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xrele(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xiecv(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xiecl(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xleng(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
void ply_xswee(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
#endif // GUARD_M4A_INTERNAL_H
+108 -122
View File
@@ -1,54 +1,49 @@
#ifndef GUARD_GBA_MACRO_H
#define GUARD_GBA_MACRO_H
#define CPU_FILL(value, dest, size, bit) \
{ \
vu##bit tmp = (vu##bit)(value); \
CpuSet((void *)&tmp, \
dest, \
CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size)/(bit/8) & 0x1FFFFF)); \
}
#define CPU_FILL(value, dest, size, bit) \
{ \
vu##bit tmp = (vu##bit)(value); \
CpuSet((void*)&tmp, dest, CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size) / (bit / 8) & 0x1FFFFF)); \
}
#define CpuFill16(value, dest, size) CPU_FILL(value, dest, size, 16)
#define CpuFill32(value, dest, size) CPU_FILL(value, dest, size, 32)
#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size)/(bit/8) & 0x1FFFFF))
#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size) / (bit / 8) & 0x1FFFFF))
#define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16)
#define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32)
#define CpuFastFill(value, dest, size) \
{ \
vu32 tmp = (vu32)(value); \
CpuFastSet((void *)&tmp, \
dest, \
CPU_FAST_SET_SRC_FIXED | ((size)/(32/8) & 0x1FFFFF)); \
}
#define CpuFastFill(value, dest, size) \
{ \
vu32 tmp = (vu32)(value); \
CpuFastSet((void*)&tmp, dest, CPU_FAST_SET_SRC_FIXED | ((size) / (32 / 8) & 0x1FFFFF)); \
}
#define CpuFastFill16(value, dest, size) CpuFastFill(((value) << 16) | (value), (dest), (size))
#define CpuFastFill8(value, dest, size) CpuFastFill(((value) << 24) | ((value) << 16) | ((value) << 8) | (value), (dest), (size))
#define CpuFastFill8(value, dest, size) \
CpuFastFill(((value) << 24) | ((value) << 16) | ((value) << 8) | (value), (dest), (size))
#define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF))
#define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size) / (32 / 8) & 0x1FFFFF))
#define DmaSet(dmaNum, src, dest, control) \
{ \
vu32 *dmaRegs = (vu32 *)REG_ADDR_DMA##dmaNum; \
dmaRegs[0] = (vu32)(src); \
dmaRegs[1] = (vu32)(dest); \
dmaRegs[2] = (vu32)(control); \
dmaRegs[2]; \
}
#define DmaSet(dmaNum, src, dest, control) \
{ \
vu32* dmaRegs = (vu32*)REG_ADDR_DMA##dmaNum; \
dmaRegs[0] = (vu32)(src); \
dmaRegs[1] = (vu32)(dest); \
dmaRegs[2] = (vu32)(control); \
dmaRegs[2]; \
}
#define DMA_FILL(dmaNum, value, dest, size, bit) \
{ \
vu##bit tmp = (vu##bit)(value); \
DmaSet(dmaNum, \
&tmp, \
dest, \
(DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 \
| ((size)/(bit/8))); \
}
#define DMA_FILL(dmaNum, value, dest, size, bit) \
{ \
vu##bit tmp = (vu##bit)(value); \
DmaSet(dmaNum, &tmp, dest, \
(DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 | \
((size) / (bit / 8))); \
}
#define DmaFill16(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 16)
#define DmaFill32(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 32)
@@ -58,86 +53,77 @@
// unit size (2 or 4 bytes) and then combined with the DMA control flags using a
// bitwise OR operation.
#define DMA_CLEAR(dmaNum, dest, size, bit) \
{ \
vu##bit *_dest = (vu##bit *)(dest); \
u32 _size = size; \
DmaFill##bit(dmaNum, 0, _dest, _size); \
}
#define DMA_CLEAR(dmaNum, dest, size, bit) \
{ \
vu##bit* _dest = (vu##bit*)(dest); \
u32 _size = size; \
DmaFill##bit(dmaNum, 0, _dest, _size); \
}
#define DmaClear16(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 16)
#define DmaClear32(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 32)
#define DMA_COPY(dmaNum, src, dest, size, bit) \
DmaSet(dmaNum, \
src, \
dest, \
(DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 \
| ((size)/(bit/8)))
#define DMA_COPY(dmaNum, src, dest, size, bit) \
DmaSet(dmaNum, src, dest, \
(DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 | ((size) / (bit / 8)))
#define DmaCopy16(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 16)
#define DmaCopy32(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 32)
#define DmaStop(dmaNum) \
{ \
vu16 *dmaRegs = (vu16 *)REG_ADDR_DMA##dmaNum; \
dmaRegs[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); \
dmaRegs[5] &= ~DMA_ENABLE; \
dmaRegs[5]; \
}
#define DmaStop(dmaNum) \
{ \
vu16* dmaRegs = (vu16*)REG_ADDR_DMA##dmaNum; \
dmaRegs[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); \
dmaRegs[5] &= ~DMA_ENABLE; \
dmaRegs[5]; \
}
#define DmaCopyLarge(dmaNum, src, dest, size, block, bit) \
{ \
const void *_src = src; \
void *_dest = dest; \
u32 _size = size; \
while (1) \
{ \
DmaCopy##bit(dmaNum, _src, _dest, (block)); \
_src += (block); \
_dest += (block); \
_size -= (block); \
if (_size <= (block)) \
{ \
DmaCopy##bit(dmaNum, _src, _dest, _size); \
break; \
const void* _src = src; \
void* _dest = dest; \
u32 _size = size; \
while (1) { \
DmaCopy##bit(dmaNum, _src, _dest, (block)); \
_src += (block); \
_dest += (block); \
_size -= (block); \
if (_size <= (block)) { \
DmaCopy##bit(dmaNum, _src, _dest, _size); \
break; \
} \
} \
} \
}
}
#define DmaClearLarge(dmaNum, dest, size, block, bit) \
{ \
void *_dest = dest; \
u32 _size = size; \
while (1) \
{ \
DmaFill##bit(dmaNum, 0, _dest, (block)); \
_dest += (block); \
_size -= (block); \
if (_size <= (block)) \
{ \
DmaFill##bit(dmaNum, 0, _dest, _size); \
break; \
} \
} \
}
#define DmaClearLarge(dmaNum, dest, size, block, bit) \
{ \
void* _dest = dest; \
u32 _size = size; \
while (1) { \
DmaFill##bit(dmaNum, 0, _dest, (block)); \
_dest += (block); \
_size -= (block); \
if (_size <= (block)) { \
DmaFill##bit(dmaNum, 0, _dest, _size); \
break; \
} \
} \
}
#define DmaFillLarge(dmaNum, value, dest, size, block, bit) \
{ \
void *_dest = (void *)dest; \
u32 _size = size; \
while (1) \
{ \
DmaFill##bit(dmaNum, value, _dest, (block)); \
_dest += (block); \
_size -= (block); \
if (_size <= (block)) \
{ \
DmaFill##bit(dmaNum, value, _dest, _size); \
break; \
void* _dest = (void*)dest; \
u32 _size = size; \
while (1) { \
DmaFill##bit(dmaNum, value, _dest, (block)); \
_dest += (block); \
_size -= (block); \
if (_size <= (block)) { \
DmaFill##bit(dmaNum, value, _dest, _size); \
break; \
} \
} \
} \
}
}
#define DmaCopyLarge16(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 16)
@@ -151,44 +137,44 @@
#define DmaClearLarge32(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 32)
#define DmaCopyDefvars(dmaNum, src, dest, size, bit) \
{ \
const void *_src = src; \
void *_dest = dest; \
u32 _size = size; \
DmaCopy##bit(dmaNum, _src, _dest, _size); \
}
{ \
const void* _src = src; \
void* _dest = dest; \
u32 _size = size; \
DmaCopy##bit(dmaNum, _src, _dest, _size); \
}
#define DmaCopy16Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 16)
#define DmaCopy32Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 32)
#define DmaFillDefvars(dmaNum, value, dest, size, bit) \
{ \
void *_dest = (void *)dest; \
u32 _size = size; \
DmaFill##bit(dmaNum, value, _dest, _size); \
}
{ \
void* _dest = (void*)dest; \
u32 _size = size; \
DmaFill##bit(dmaNum, value, _dest, _size); \
}
#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16)
#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32)
#define DmaClearDefvars(dmaNum, dest, size, bit) \
{ \
void *_dest = dest; \
u32 _size = size; \
DmaClear##bit(dmaNum, _dest, _size); \
}
{ \
void* _dest = dest; \
u32 _size = size; \
DmaClear##bit(dmaNum, _dest, _size); \
}
#define DmaClear16Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 16)
#define DmaClear32Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 32)
#define IntrEnable(flags) \
{ \
u16 imeTemp; \
\
imeTemp = REG_IME; \
REG_IME = 0; \
REG_IE |= flags; \
REG_IME = imeTemp; \
}
#define IntrEnable(flags) \
{ \
u16 imeTemp; \
\
imeTemp = REG_IME; \
REG_IME = 0; \
REG_IE |= flags; \
REG_IME = imeTemp; \
}
#endif // GUARD_GBA_MACRO_H
+53 -54
View File
@@ -1,40 +1,39 @@
#ifndef GUARD_GBA_MULTI_BOOT_H
#define GUARD_GBA_MULTI_BOOT_H
#define MULTIBOOT_NCHILD 3 // Maximum number of slaves
#define MULTIBOOT_HEADER_SIZE 0xc0 // Header size
#define MULTIBOOT_NCHILD 3 // Maximum number of slaves
#define MULTIBOOT_HEADER_SIZE 0xc0 // Header size
#define MULTIBOOT_SEND_SIZE_MIN 0x100 // Minimum transmission size
#define MULTIBOOT_SEND_SIZE_MAX 0x40000 // Maximum transmission size
struct MultiBootParam
{
u32 system_work[5]; // Can be rewritten within system call.
// Used with library also.
u8 handshake_data; // Handshake data from client
struct MultiBootParam {
u32 system_work[5]; // Can be rewritten within system call.
// Used with library also.
u8 handshake_data; // Handshake data from client
u8 padding;
u16 handshake_timeout; // Handshake timeout check counter
u8 probe_count; // If not 0, during client recognition or
// boot program transfer
u8 client_data[MULTIBOOT_NCHILD]; // Handshake data from client
u8 palette_data; // Palette's flashing parameter during load
// for client
u8 response_bit; // When high probability that slave
// connected, 4P-2P: d3-d1 is 1.
u8 client_bit; // For slave distinguished as client,
// 4P-2P: d3-d1 is 1.
u8 reserved1; // Reserved
const u8 *boot_srcp; // Boot program start (after header)
const u8 *boot_endp; // Boot program end pointer
const u8 *masterp; // Pointer to header referenced and output
// by master
u8 *reserved2[MULTIBOOT_NCHILD]; // Reserved
u32 system_work2[4]; // Can be rewritten within system call.
u8 sendflag; // If SC7=1 and during send, not 0
u8 probe_target_bit; // If target recognized with client,
// 4P-2P: d3-d1 is 1.
u8 check_wait; // Wait frame until recoginition with client
u8 server_type; // client recognize method 0= Low Speed
// 1= High Speed
u16 handshake_timeout; // Handshake timeout check counter
u8 probe_count; // If not 0, during client recognition or
// boot program transfer
u8 client_data[MULTIBOOT_NCHILD]; // Handshake data from client
u8 palette_data; // Palette's flashing parameter during load
// for client
u8 response_bit; // When high probability that slave
// connected, 4P-2P: d3-d1 is 1.
u8 client_bit; // For slave distinguished as client,
// 4P-2P: d3-d1 is 1.
u8 reserved1; // Reserved
const u8* boot_srcp; // Boot program start (after header)
const u8* boot_endp; // Boot program end pointer
const u8* masterp; // Pointer to header referenced and output
// by master
u8* reserved2[MULTIBOOT_NCHILD]; // Reserved
u32 system_work2[4]; // Can be rewritten within system call.
u8 sendflag; // If SC7=1 and during send, not 0
u8 probe_target_bit; // If target recognized with client,
// 4P-2P: d3-d1 is 1.
u8 check_wait; // Wait frame until recoginition with client
u8 server_type; // client recognize method 0= Low Speed
// 1= High Speed
};
/* Error Code
@@ -46,30 +45,30 @@ struct MultiBootParam
* "Slave is not connected."
* "Cannot recognize the slave."
* ,etc. Messages easy for the player to understand are good.
* NO_PROBE_TARGET: When recognizing client all machines returned
* NO_PROBE_TARGET: When recognizing client all machines returned
* abnormal data and there is no target.
* NO_DLREADY: client did not return a download preparations
* NO_DLREADY: client did not return a download preparations
* possible message.
* BOOT_FAILURE: MultiBoot() system call returned an error.
* HANDSHAKE_FAILURE: Failed to do handshake with master which should
* HANDSHAKE_FAILURE: Failed to do handshake with master which should
* occur immediately after boot of slave.
* (Slave may be in infinite loop, request that power be turned off
* (Slave may be in infinite loop, request that power be turned off
* and on again.)
*/
#define MULTIBOOT_ERROR_04 0x04
#define MULTIBOOT_ERROR_08 0x08
#define MULTIBOOT_ERROR_0c 0x0c
#define MULTIBOOT_ERROR_40 0x40
#define MULTIBOOT_ERROR_44 0x44
#define MULTIBOOT_ERROR_48 0x48
#define MULTIBOOT_ERROR_4c 0x4c
#define MULTIBOOT_ERROR_80 0x80
#define MULTIBOOT_ERROR_84 0x84
#define MULTIBOOT_ERROR_88 0x88
#define MULTIBOOT_ERROR_8c 0x8c
#define MULTIBOOT_ERROR_NO_PROBE_TARGET 0x50
#define MULTIBOOT_ERROR_NO_DLREADY 0x60
#define MULTIBOOT_ERROR_BOOT_FAILURE 0x70
#define MULTIBOOT_ERROR_04 0x04
#define MULTIBOOT_ERROR_08 0x08
#define MULTIBOOT_ERROR_0c 0x0c
#define MULTIBOOT_ERROR_40 0x40
#define MULTIBOOT_ERROR_44 0x44
#define MULTIBOOT_ERROR_48 0x48
#define MULTIBOOT_ERROR_4c 0x4c
#define MULTIBOOT_ERROR_80 0x80
#define MULTIBOOT_ERROR_84 0x84
#define MULTIBOOT_ERROR_88 0x88
#define MULTIBOOT_ERROR_8c 0x8c
#define MULTIBOOT_ERROR_NO_PROBE_TARGET 0x50
#define MULTIBOOT_ERROR_NO_DLREADY 0x60
#define MULTIBOOT_ERROR_BOOT_FAILURE 0x70
#define MULTIBOOT_ERROR_HANDSHAKE_FAILURE 0x71
/* After an error, or when a value other than 0xffff is returned,
@@ -83,22 +82,22 @@ struct MultiBootParam
#define MULTIBOOT_CONNECTION_CHECK_WAIT 15
/* Recognition of Slave
* Value set in MultiBootParam structure member server_type
* Value set in MultiBootParam structure member server_type
* MULTIBOOT_SERVER_TYPE_NORMAL: Slow speed recognition mode
* The MultiBootMain() function communicates 2 bytes with one call.
* Therefore, processing returns from MultiBootMain() function
* Therefore, processing returns from MultiBootMain() function
* in short time.
* MULTIBOOT_SERVER_TYPE_QUICK: High speed recognition mode
* In MultiBootMain() function as many consecutive communications
* are done as possible.
* Therefore, processing may not return from MultiBootMain() for
* Therefore, processing may not return from MultiBootMain() for
* several dozen frames.
* During this time, there is no problem if processing for sound and
* display cannot be done. If processing for sound and display is
* During this time, there is no problem if processing for sound and
* display cannot be done. If processing for sound and display is
* done with timer interrupt processing, you can use.
*/
#define MULTIBOOT_SERVER_TYPE_NORMAL 0
#define MULTIBOOT_SERVER_TYPE_QUICK 1
#define MULTIBOOT_SERVER_TYPE_QUICK 1
/* Timeout for slave's final start up check 400 frames */
#define MULTIBOOT_HANDSHAKE_TIMEOUT 400
+19 -19
View File
@@ -1,15 +1,15 @@
#ifndef GUARD_GBA_SYSCALL_H
#define GUARD_GBA_SYSCALL_H
#define RESET_EWRAM 0x01
#define RESET_IWRAM 0x02
#define RESET_PALETTE 0x04
#define RESET_VRAM 0x08
#define RESET_OAM 0x10
#define RESET_SIO_REGS 0x20
#define RESET_EWRAM 0x01
#define RESET_IWRAM 0x02
#define RESET_PALETTE 0x04
#define RESET_VRAM 0x08
#define RESET_OAM 0x10
#define RESET_SIO_REGS 0x20
#define RESET_SOUND_REGS 0x40
#define RESET_REGS 0x80
#define RESET_ALL 0xFF
#define RESET_REGS 0x80
#define RESET_ALL 0xFF
void SoftReset(u32 resetFlags);
@@ -22,28 +22,28 @@ u16 Sqrt(u32 num);
u16 ArcTan2(s16 x, s16 y);
#define CPU_SET_SRC_FIXED 0x01000000
#define CPU_SET_16BIT 0x00000000
#define CPU_SET_32BIT 0x04000000
#define CPU_SET_16BIT 0x00000000
#define CPU_SET_32BIT 0x04000000
void CpuSet(const void *src, void *dest, u32 control);
void CpuSet(const void* src, void* dest, u32 control);
#define CPU_FAST_SET_SRC_FIXED 0x01000000
void CpuFastSet(const void *src, void *dest, u32 control);
void CpuFastSet(const void* src, void* dest, u32 control);
void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count);
void BgAffineSet(struct BgAffineSrcData* src, struct BgAffineDstData* dest, s32 count);
void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset);
void ObjAffineSet(struct ObjAffineSrcData* src, void* dest, s32 count, s32 offset);
void LZ77UnCompWram(const void *src, void *dest);
void LZ77UnCompWram(const void* src, void* dest);
void LZ77UnCompVram(const void *src, void *dest);
void LZ77UnCompVram(const void* src, void* dest);
void RLUnCompWram(const void *src, void *dest);
void RLUnCompWram(const void* src, void* dest);
void RLUnCompVram(const void *src, void *dest);
void RLUnCompVram(const void* src, void* dest);
int MultiBoot(struct MultiBootParam *mp);
int MultiBoot(struct MultiBootParam* mp);
s32 Div(s32 num, s32 denom);
+154 -166
View File
@@ -3,119 +3,115 @@
#include <stdint.h>
typedef uint8_t u8;
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
typedef uint64_t u64;
typedef int8_t s8;
typedef int16_t s16;
typedef int32_t s32;
typedef int64_t s64;
typedef int8_t s8;
typedef int16_t s16;
typedef int32_t s32;
typedef int64_t s64;
typedef volatile u8 vu8;
typedef volatile u8 vu8;
typedef volatile u16 vu16;
typedef volatile u32 vu32;
typedef volatile u64 vu64;
typedef volatile s8 vs8;
typedef volatile s8 vs8;
typedef volatile s16 vs16;
typedef volatile s32 vs32;
typedef volatile s64 vs64;
typedef float f32;
typedef float f32;
typedef double f64;
typedef u8 bool8;
typedef u8 bool8;
typedef u16 bool16;
typedef u32 bool32;
struct BgCnt
{
u16 priority:2;
u16 charBaseBlock:2;
u16 dummy:2;
u16 mosaic:1;
u16 palettes:1;
u16 screenBaseBlock:5;
u16 areaOverflowMode:1;
u16 screenSize:2;
struct BgCnt {
u16 priority : 2;
u16 charBaseBlock : 2;
u16 dummy : 2;
u16 mosaic : 1;
u16 palettes : 1;
u16 screenBaseBlock : 5;
u16 areaOverflowMode : 1;
u16 screenSize : 2;
};
typedef volatile struct BgCnt vBgCnt;
struct PlttData
{
u16 r:5; // red
u16 g:5; // green
u16 b:5; // blue
u16 unused_15:1;
struct PlttData {
u16 r : 5; // red
u16 g : 5; // green
u16 b : 5; // blue
u16 unused_15 : 1;
};
struct OamData
{
/*0x00*/ u32 y:8;
/*0x01*/ u32 affineMode:2; // 0x1, 0x2 -> 0x4
u32 objMode:2; // 0x4, 0x8 -> 0xC
u32 mosaic:1; // 0x10
u32 bpp:1; // 0x20
u32 shape:2; // 0x40, 0x80 -> 0xC0
struct OamData {
/*0x00*/ u32 y : 8;
/*0x01*/ u32 affineMode : 2; // 0x1, 0x2 -> 0x4
u32 objMode : 2; // 0x4, 0x8 -> 0xC
u32 mosaic : 1; // 0x10
u32 bpp : 1; // 0x20
u32 shape : 2; // 0x40, 0x80 -> 0xC0
/*0x02*/ u32 x:9;
u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode
u32 size:2; // 0x4000, 0x8000 -> 0xC000
/*0x02*/ u32 x : 9;
u32 matrixNum : 5; // bits 3/4 are h-flip/v-flip if not in affine mode
u32 size : 2; // 0x4000, 0x8000 -> 0xC000
/*0x04*/ u16 tileNum:10; // 0x3FF
u16 priority:2; // 0x400, 0x800 -> 0xC00
u16 paletteNum:4;
/*0x04*/ u16 tileNum : 10; // 0x3FF
u16 priority : 2; // 0x400, 0x800 -> 0xC00
u16 paletteNum : 4;
/*0x06*/ u16 affineParam;
};
#define ST_OAM_HFLIP 0x08
#define ST_OAM_VFLIP 0x10
#define ST_OAM_HFLIP 0x08
#define ST_OAM_VFLIP 0x10
#define ST_OAM_MNUM_FLIP_MASK 0x18
#define ST_OAM_OBJ_NORMAL 0
#define ST_OAM_OBJ_BLEND 1
#define ST_OAM_OBJ_BLEND 1
#define ST_OAM_OBJ_WINDOW 2
#define ST_OAM_AFFINE_OFF 0
#define ST_OAM_AFFINE_OFF 0
#define ST_OAM_AFFINE_NORMAL 1
#define ST_OAM_AFFINE_ERASE 2
#define ST_OAM_AFFINE_ERASE 2
#define ST_OAM_AFFINE_DOUBLE 3
#define ST_OAM_AFFINE_ON_MASK 1
#define ST_OAM_AFFINE_ON_MASK 1
#define ST_OAM_AFFINE_DOUBLE_MASK 2
#define ST_OAM_4BPP 0
#define ST_OAM_8BPP 1
#define ST_OAM_SQUARE 0
#define ST_OAM_SQUARE 0
#define ST_OAM_H_RECTANGLE 1
#define ST_OAM_V_RECTANGLE 2
#define ST_OAM_SIZE_0 0
#define ST_OAM_SIZE_1 1
#define ST_OAM_SIZE_2 2
#define ST_OAM_SIZE_3 3
#define ST_OAM_SIZE_0 0
#define ST_OAM_SIZE_1 1
#define ST_OAM_SIZE_2 2
#define ST_OAM_SIZE_3 3
#define SPRITE_SIZE_8x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_16x16 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_32x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_64x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_8x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_16x16 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_32x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_64x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_16x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_32x8 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_32x16 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_64x32 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_16x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_32x8 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_32x16 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_64x32 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_8x16 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_8x32 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_16x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_32x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_8x16 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_8x32 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_16x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_32x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE(dim) ((SPRITE_SIZE_##dim >> 2) & 0x03)
#define SPRITE_SIZE(dim) ((SPRITE_SIZE_##dim >> 2) & 0x03)
#define SPRITE_SHAPE(dim) (SPRITE_SIZE_##dim & 0x03)
struct BgAffineSrcData
{
struct BgAffineSrcData {
s32 texX;
s32 texY;
s16 scrX;
@@ -125,8 +121,7 @@ struct BgAffineSrcData
u16 alpha;
};
struct BgAffineDstData
{
struct BgAffineDstData {
s16 pa;
s16 pb;
s16 pc;
@@ -135,134 +130,127 @@ struct BgAffineDstData
s32 dy;
};
struct ObjAffineSrcData
{
struct ObjAffineSrcData {
s16 xScale;
s16 yScale;
u16 rotation;
};
// Normal SIO Control Structure
struct SioNormalCnt
{
u16 sck_I_O:1; // Clock I/O Select
u16 sck:1; // Internal Clock Select
u16 ackRecv:1; // Transfer Enable Flag Receive
u16 ackSend:1; // Transfer Enable Flag Send
u16 unused_6_4:3;
u16 enable:1; // SIO Enable
u16 unused_11_8:4;
u16 mode:2; // Communication Mode Select
u16 ifEnable:1; // Interrupt Request Enable
u16 unused_15:1;
u8 data; // Data
u8 unused_31_24;
struct SioNormalCnt {
u16 sck_I_O : 1; // Clock I/O Select
u16 sck : 1; // Internal Clock Select
u16 ackRecv : 1; // Transfer Enable Flag Receive
u16 ackSend : 1; // Transfer Enable Flag Send
u16 unused_6_4 : 3;
u16 enable : 1; // SIO Enable
u16 unused_11_8 : 4;
u16 mode : 2; // Communication Mode Select
u16 ifEnable : 1; // Interrupt Request Enable
u16 unused_15 : 1;
u8 data; // Data
u8 unused_31_24;
};
#define ST_SIO_8BIT_MODE 0 // Normal 8-bit communication mode
#define ST_SIO_32BIT_MODE 1 // Normal 32-bit communication mode
#define ST_SIO_8BIT_MODE 0 // Normal 8-bit communication mode
#define ST_SIO_32BIT_MODE 1 // Normal 32-bit communication mode
#define ST_SIO_SCK_OUT 0 // Select external clock
#define ST_SIO_SCK_IN 1 // Select internal clock
#define ST_SIO_IN_SCK_256K 0 // Select internal clock 256KHz
#define ST_SIO_IN_SCK_2M 1 // Select 2MHz
#define ST_SIO_SCK_OUT 0 // Select external clock
#define ST_SIO_SCK_IN 1 // Select internal clock
#define ST_SIO_IN_SCK_256K 0 // Select internal clock 256KHz
#define ST_SIO_IN_SCK_2M 1 // Select 2MHz
// Multi-player SIO Control Structure
struct SioMultiCnt
{
u16 baudRate:2; // baud rate
u16 si:1; // SI terminal
u16 sd:1; // SD terminal
u16 id:2; // ID
u16 error:1; // error flag
u16 enable:1; // SIO enable
u16 unused_11_8:4;
u16 mode:2; // communication mode (should equal 2)
u16 ifEnable:1; // IRQ enable
u16 unused_15:1;
u16 data; // data
struct SioMultiCnt {
u16 baudRate : 2; // baud rate
u16 si : 1; // SI terminal
u16 sd : 1; // SD terminal
u16 id : 2; // ID
u16 error : 1; // error flag
u16 enable : 1; // SIO enable
u16 unused_11_8 : 4;
u16 mode : 2; // communication mode (should equal 2)
u16 ifEnable : 1; // IRQ enable
u16 unused_15 : 1;
u16 data; // data
};
#define ST_SIO_MULTI_MODE 2 // Multi-play communication mode
#define ST_SIO_MULTI_MODE 2 // Multi-play communication mode
#define ST_SIO_9600_BPS 0 // Baud rate 9600 bps
#define ST_SIO_38400_BPS 1 // 38400 bps
#define ST_SIO_57600_BPS 2 // 57600 bps
#define ST_SIO_115200_BPS 3 // 115200 bps
#define ST_SIO_MULTI_PARENT 1 // Multi-play communication Connect master
#define ST_SIO_MULTI_CHILD 0 // Connect slave
#define ST_SIO_9600_BPS 0 // Baud rate 9600 bps
#define ST_SIO_38400_BPS 1 // 38400 bps
#define ST_SIO_57600_BPS 2 // 57600 bps
#define ST_SIO_115200_BPS 3 // 115200 bps
#define ST_SIO_MULTI_PARENT 1 // Multi-play communication Connect master
#define ST_SIO_MULTI_CHILD 0 // Connect slave
// UART - SIO Control Structure
struct SioUartCnt
{
u16 baudRate:2; // Baud Rate
u16 ctsEnable:1; // Send Signal Enable
u16 paritySelect:1; // Parity Even/Odd
u16 transDataFull:1; // Transmit Data Full
u16 recvDataEmpty:1; // Receive Data Empty
u16 error:1; // Error Detect
u16 length:1; // Data Length
u16 fifoEnable:1; // FIFO Enable
u16 parityEnable:1; // Parity Enable
u16 transEnable:1; // Transmitter Enable
u16 recvEnable:1; // Receiver Enable
u16 mode:2; // Communication Mode Select
u16 ifEnable:1; // Interrupt Request Enable
u16 unused_15:1;
u8 data; // Data
u8 unused_31_24;
struct SioUartCnt {
u16 baudRate : 2; // Baud Rate
u16 ctsEnable : 1; // Send Signal Enable
u16 paritySelect : 1; // Parity Even/Odd
u16 transDataFull : 1; // Transmit Data Full
u16 recvDataEmpty : 1; // Receive Data Empty
u16 error : 1; // Error Detect
u16 length : 1; // Data Length
u16 fifoEnable : 1; // FIFO Enable
u16 parityEnable : 1; // Parity Enable
u16 transEnable : 1; // Transmitter Enable
u16 recvEnable : 1; // Receiver Enable
u16 mode : 2; // Communication Mode Select
u16 ifEnable : 1; // Interrupt Request Enable
u16 unused_15 : 1;
u8 data; // Data
u8 unused_31_24;
};
#define ST_SIO_UART_MODE 3 // UART communication mode
#define ST_SIO_UART_MODE 3 // UART communication mode
#define ST_SIO_UART_7BIT 0 // UART communication data length 7 bits
#define ST_SIO_UART_8BIT 1 // 8 bits
#define ST_SIO_PARITY_EVEN 0 // Even parity
#define ST_SIO_PARITY_ODD 1 // Odd parity
#define ST_SIO_UART_7BIT 0 // UART communication data length 7 bits
#define ST_SIO_UART_8BIT 1 // 8 bits
#define ST_SIO_PARITY_EVEN 0 // Even parity
#define ST_SIO_PARITY_ODD 1 // Odd parity
// JOY Bus Communication Control Structure
struct JoyCnt
{
u8 ifReset:1; // JOY Bus Reset Interrupt Request
u8 ifRecv:1; // JOY Bus Received Interrupt Request
u8 ifSend:1; // JOY Bus Sent Interrupt Request
u8 unused_5_3:3;
u8 ifEnable:1; // Interrupt Request Enable
u8 unused_7:1;
struct JoyCnt {
u8 ifReset : 1; // JOY Bus Reset Interrupt Request
u8 ifRecv : 1; // JOY Bus Received Interrupt Request
u8 ifSend : 1; // JOY Bus Sent Interrupt Request
u8 unused_5_3 : 3;
u8 ifEnable : 1; // Interrupt Request Enable
u8 unused_7 : 1;
};
// JOY Bus Communication Status Structure
struct JoyStat
{
u8 unused_0:1;
u8 recv:1; // Receive Status
u8 unused_2:1;
u8 send:1; // Send Status
u8 flags:2; // General Flag
u8 unused_7_6:2;
struct JoyStat {
u8 unused_0 : 1;
u8 recv : 1; // Receive Status
u8 unused_2 : 1;
u8 send : 1; // Send Status
u8 flags : 2; // General Flag
u8 unused_7_6 : 2;
};
// General Input/Output Control Structure
struct RCnt
{
u8 sc:1; // Data
u8 sd:1;
u8 si:1;
u8 so:1;
u8 sc_i_o:1; // I/O Select
u8 sd_i_o:1;
u8 si_i_o:1;
u8 so_i_o:1;
u8 ifEnable:1; // Interrupt Request Enable
u8 unused_13_9:5;
u8 sioModeMaster:2; // SIO Mode Master
struct RCnt {
u8 sc : 1; // Data
u8 sd : 1;
u8 si : 1;
u8 so : 1;
u8 sc_i_o : 1; // I/O Select
u8 sd_i_o : 1;
u8 si_i_o : 1;
u8 so_i_o : 1;
u8 ifEnable : 1; // Interrupt Request Enable
u8 unused_13_9 : 5;
u8 sioModeMaster : 2; // SIO Mode Master
};
#define ST_R_SIO_MASTER_MODE 0 // SIO master mode
#define ST_R_DIRECT_MODE 2 // General input/output communication mode
#define ST_R_JOY_MODE 3 // JOY communication mode
#define ST_R_SIO_MASTER_MODE 0 // SIO master mode
#define ST_R_DIRECT_MODE 2 // General input/output communication mode
#define ST_R_JOY_MODE 3 // JOY communication mode
#define ST_R_IN 0 // Select input
#define ST_R_OUT 1 // Select output
#define ST_R_IN 0 // Select input
#define ST_R_OUT 1 // Select output
#endif // GUARD_GBA_TYPES_H
+13 -12
View File
@@ -11,15 +11,16 @@
#define asm_comment(x) asm volatile("@ -- " x " -- ")
#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided")
#if defined (__APPLE__) || defined (__CYGWIN__)
#if defined(__APPLE__) || defined(__CYGWIN__)
// Get the IDE to stfu
// We define it this way to fool preproc.
#define INCBIN(...) {0}
#define INCBIN_U8 INCBIN
#define INCBIN(...) \
{ 0 }
#define INCBIN_U8 INCBIN
#define INCBIN_U16 INCBIN
#define INCBIN_U32 INCBIN
#define INCBIN_S8 INCBIN
#define INCBIN_S8 INCBIN
#define INCBIN_S16 INCBIN
#define INCBIN_S32 INCBIN
#define _(x) (x)
@@ -28,20 +29,20 @@
#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
#define SWAP(a, b, temp) \
{ \
temp = a; \
a = b; \
b = temp; \
}
#define SWAP(a, b, temp) \
{ \
temp = a; \
a = b; \
b = temp; \
}
// useful math macros
// Converts a number to Q8.8 fixed-point format
#define Q_8_8(n) ((s16)((n) * 256))
#define Q_8_8(n) ((s16)((n)*256))
// Converts a number to Q4.12 fixed-point format
#define Q_4_12(n) ((s16)((n) * 4096))
#define Q_4_12(n) ((s16)((n)*4096))
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b))
+15 -15
View File
@@ -2,10 +2,10 @@
#define GREATFAIRY_H
extern u32 __modsi3(u32, u32);
extern void InitializeAnimation(Entity *, u32);
extern void InitializeAnimation(Entity*, u32);
extern void sub_08087380();
extern u32 CheckRoomFlag();
extern Entity *sub_080873AC(Entity*, u32, u32);
extern Entity* sub_080873AC(Entity*, u32, u32);
extern void PositionRelative();
extern void CopyPosition();
extern void DoFade();
@@ -19,19 +19,19 @@ extern void sub_080045D4();
extern void sub_0806F69C();
extern u32 Random();
extern void (*gGreatFairy[11])(Entity *);
extern void (*gGreatFairyBehaviors[6])(Entity *);
extern void (*gGreatFairyWings[3])(Entity *);
extern void (*gGreatFairyWake[2])(Entity *);
extern void (*gGreatFairyMini[3])(Entity *);
extern void (*gGreatFairyMiniAnim[3])(Entity *);
extern void (*gGreatFairyDrip[2])(Entity *);
extern void (*gGreatFairyRipple[2])(Entity *);
extern void (*gGreatFairyBigRipple[2])(Entity *);
extern void (*gGreatFairyEnergy[2])(Entity *);
extern void (*gGreatFairyInteract1[4])(Entity *);
extern void (*gGreatFairyInteract2[5])(Entity *);
extern void (*gUnk_081207A4[2])(Entity *);
extern void (*gGreatFairy[11])(Entity*);
extern void (*gGreatFairyBehaviors[6])(Entity*);
extern void (*gGreatFairyWings[3])(Entity*);
extern void (*gGreatFairyWake[2])(Entity*);
extern void (*gGreatFairyMini[3])(Entity*);
extern void (*gGreatFairyMiniAnim[3])(Entity*);
extern void (*gGreatFairyDrip[2])(Entity*);
extern void (*gGreatFairyRipple[2])(Entity*);
extern void (*gGreatFairyBigRipple[2])(Entity*);
extern void (*gGreatFairyEnergy[2])(Entity*);
extern void (*gGreatFairyInteract1[4])(Entity*);
extern void (*gGreatFairyInteract2[5])(Entity*);
extern void (*gUnk_081207A4[2])(Entity*);
extern u32 gUnk_0810C2E4;
extern RoomControls gRoomControls;
+13 -13
View File
@@ -4,8 +4,8 @@
#define ITEM_H
/* On hold until naming conflicts are resolved */
/*
enum
/*
enum
{
Untyped,
SmithSword = 0x01,
@@ -127,15 +127,15 @@
LongSpin = 0x75
} ItemType;
*/
typedef struct {
u8 unk;
u8 behaviorID;
u8 unk2;
u8 unk3;
u8 stateID;
u8 filler[4];
u8 unk4;
u8 filler2[4];
u8 unk5;
} ItemBehavior;
typedef struct {
u8 unk;
u8 behaviorID;
u8 unk2;
u8 unk3;
u8 stateID;
u8 filler[4];
u8 unk4;
u8 filler2[4];
u8 unk5;
} ItemBehavior;
#endif
+52 -52
View File
@@ -5,64 +5,64 @@
#include "entity.h"
typedef struct {
u8 filler[2];
u8 jumpStatus;
u8 filler2[2];
u8 heldObject;
u8 pushedObject;
u8 unk;
u16 unk2;
u8 unk3;
u8 keepFacing;
u8 linkAction;
u8 filler3[2];
u8 hurtBlinkSpeed;
u8 filler4[4];
u16 filler5[3];
u8 filler6[8];
u16 filler7[2];
u8 swimState;
u8 filler8[5];
u8 *unk4;
u8 filler[2];
u8 jumpStatus;
u8 filler2[2];
u8 heldObject;
u8 pushedObject;
u8 unk;
u16 unk2;
u8 unk3;
u8 keepFacing;
u8 linkAction;
u8 filler3[2];
u8 hurtBlinkSpeed;
u8 filler4[4];
u16 filler5[3];
u8 filler6[8];
u16 filler7[2];
u8 swimState;
u8 filler8[5];
u8* unk4;
union {
u32 all;
struct {
u32 filler9:3;
u32 noMinishCap:1;
u32 pullingState:1;
u32 windyState:1;
u32 filler10:4;
u32 slipperyState:1;
u32 filler11:5;
u32 filler11b:16;
} PACKED b;
struct {
u32 filler9 : 3;
u32 noMinishCap : 1;
u32 pullingState : 1;
u32 windyState : 1;
u32 filler10 : 4;
u32 slipperyState : 1;
u32 filler11 : 5;
u32 filler11b : 16;
} PACKED b;
} flags;
u8 filler12[6];
u16 unk5;
u8 filler13[2];
u8 swordGoldParticle:1;
u8 swordBlueParticle:1;
u8 filler14:6;
u8 unk6;
u8 filler15[75];
u8 unk7;
u8 filler12[6];
u16 unk5;
u8 filler13[2];
u8 swordGoldParticle : 1;
u8 swordBlueParticle : 1;
u8 filler14 : 6;
u8 unk6;
u8 filler15[75];
u8 unk7;
} LinkState;
typedef struct {
u8 walletType;
u8 heartPieces;
u8 health;
u8 maxHealth;
u8 bombCount;
u8 arrowCount;
u8 bombBagType;
u8 quiverType;
u8 filler[4];
u8 itemOnA;
u8 itemonB;
u8 filler2[10];
u16 rupees;
u8 filler3[12];
u8 walletType;
u8 heartPieces;
u8 health;
u8 maxHealth;
u8 bombCount;
u8 arrowCount;
u8 bombBagType;
u8 quiverType;
u8 filler[4];
u8 itemOnA;
u8 itemonB;
u8 filler2[10];
u16 rupees;
u8 filler3[12];
} Stats;
extern LinkState gLinkState;
+12 -12
View File
@@ -1,17 +1,17 @@
#ifndef MAIN_H
#define MAIN_H
typedef struct { //0x03001000
u8 field_0x0;
u8 field_0x1;
u8 field_0x2;
u8 field_0x3;
u8 field_0x4;
u16 field_0x6;
u8 field_0x8;
u8 field_0x9;
u8 field_0xa;
u8 field_0xb;
u32 ticks;
typedef struct { // 0x03001000
u8 field_0x0;
u8 field_0x1;
u8 field_0x2;
u8 field_0x3;
u8 field_0x4;
u16 field_0x6;
u8 field_0x8;
u8 field_0x9;
u8 field_0xa;
u8 field_0xb;
u32 ticks;
} MainStruct;
extern s32 sub_08055F70();
+4 -4
View File
@@ -8,12 +8,12 @@ typedef struct {
u8 transitionType;
u8 unk4;
u8 state;
u8 unk6;
u8 unk7;
u8 unk8;
u8 unk6;
u8 unk7;
u8 unk8;
u16 unk2;
u16 fadeInTime;
u8 filler2 [4];
u8 filler2[4];
u32 filler3[3];
} Menu;
+6 -6
View File
@@ -1,9 +1,9 @@
struct Input {
u16 unk0;
u16 unk1;
u16 unk2;
u8 unk3;
u8 unk4;
u16 unk0;
u16 unk1;
u16 unk2;
u8 unk3;
u8 unk4;
};
//void ReadKeyInput(void);
// void ReadKeyInput(void);
+24 -24
View File
@@ -6,8 +6,8 @@
/*
typedef struct {
u8 areaID;
u8 roomID;
u8 areaID;
u8 roomID;
} RoomID;
*/
@@ -15,34 +15,34 @@ typedef struct {
u16 unk2;
u8 unk3;
u8 unk4;
u8 areaID;
u8 roomID;
u8 areaID;
u8 roomID;
u16 roomOriginX;
u16 roomOriginY;
s16 roomScrollX;
s16 roomScrollY;
u8 unk5;
u16 roomOriginY;
s16 roomScrollX;
s16 roomScrollY;
u8 unk5;
u8 unk6;
u8 filler[4];
u8 screenShakeMagnitude;
u8 unk7;
u16 screenShakeTime;
u16 filler2[6];
u8 filler3[4];
u16 filler4[4];
Entity * cameraTarget;
u8 screenShakeMagnitude;
u8 unk7;
u16 screenShakeTime;
u16 filler2[6];
u8 filler3[4];
u16 filler4[4];
Entity* cameraTarget;
} RoomControls;
typedef struct {
u8 filler[6];
u8 itemForSaleIndex;
u16 unk;
u8 unk2;
u16 filler2[3];
u8 filler3[4];
u8 filler4[52];
u8 filler5[28];
u32 greatFairyState;
u8 filler[6];
u8 itemForSaleIndex;
u16 unk;
u8 unk2;
u16 filler2[3];
u8 filler3[4];
u8 filler4[52];
u8 filler5[28];
u32 greatFairyState;
} RoomVars;
extern RoomControls gRoomControls;
+49 -49
View File
@@ -4,67 +4,67 @@
#include "global.h"
typedef struct {
u16 lcdControl2;
u32 unk;
u16 lcdControl1;
u16 lcdControl2;
u32 unk;
u16 lcdControl1;
} LcdControls;
typedef struct {
u16 bg0Control;
u16 bg0xOffset;
u16 bg0yOffset;
u16 bg0Updated;
u32 unk;
u16 bg0Control;
u16 bg0xOffset;
u16 bg0yOffset;
u16 bg0Updated;
u32 unk;
} BgSettings;
typedef struct {
u16 bg2Control;
u16 bg2xOffset;
u16 bg2yOffset;
u16 unk;
u32 unk2;
u16 bg3Control;
u16 bg3xOffset;
u16 bg3yOffset;
u16 unk4;
u32 unk5;
u16 bg2Control;
u16 bg2xOffset;
u16 bg2yOffset;
u16 unk;
u32 unk2;
u16 bg3Control;
u16 bg3xOffset;
u16 bg3yOffset;
u16 unk4;
u32 unk5;
} BgAffSettings;
typedef struct {
u16 bg2dx;
u16 bg2dmx;
u16 bg2dy;
u16 bg2dmy;
u16 bg2xPointLeastSig;
u16 bg2xPointMostSig;
u16 bg2yPointLeastSig;
u16 bg2yPointMostSig;
u16 bg3dx;
u16 bg3dmx;
u16 bg3dy;
u16 bg3dmy;
u16 bg3xPointLeastSig;
u16 bg3xPointMostSig;
u16 bg3yPointLeastSig;
u16 bg3yPointMostSig;
u16 window0HorizontalDimensions;
u16 window1HorizontalDimensions;
u16 window0VerticalDimensions;
u16 window1VerticalDimensions;
u16 windowInsideControl;
u16 windowOutsideControl;
u16 mosaicSize;
u16 layerFXControl;
u16 alphaBlend;
u16 layerBrightness;
u16 bg2dx;
u16 bg2dmx;
u16 bg2dy;
u16 bg2dmy;
u16 bg2xPointLeastSig;
u16 bg2xPointMostSig;
u16 bg2yPointLeastSig;
u16 bg2yPointMostSig;
u16 bg3dx;
u16 bg3dmx;
u16 bg3dy;
u16 bg3dmy;
u16 bg3xPointLeastSig;
u16 bg3xPointMostSig;
u16 bg3yPointLeastSig;
u16 bg3yPointMostSig;
u16 window0HorizontalDimensions;
u16 window1HorizontalDimensions;
u16 window0VerticalDimensions;
u16 window1VerticalDimensions;
u16 windowInsideControl;
u16 windowOutsideControl;
u16 mosaicSize;
u16 layerFXControl;
u16 alphaBlend;
u16 layerBrightness;
} BgControls;
typedef struct {
LcdControls lcd;
BgSettings bg1;
BgSettings bg2;
BgAffSettings affine;
BgControls controls;
LcdControls lcd;
BgSettings bg1;
BgSettings bg2;
BgAffSettings affine;
BgControls controls;
} Screen;
#endif
+10 -10
View File
@@ -4,16 +4,16 @@
#include "global.h"
typedef struct {
u8 doTextBox;
u8 unk;
u8 textSpeed;
u8 unk3; //HI?
u8 textWindowWidth;
u8 textWindowHeight;
u8 textWindowPosX;
u8 textWindowPosY;
u16 textIndex;
u16 unk2; //HI?
u8 doTextBox;
u8 unk;
u8 textSpeed;
u8 unk3; // HI?
u8 textWindowWidth;
u8 textWindowHeight;
u8 textWindowPosX;
u8 textWindowPosY;
u16 textIndex;
u16 unk2; // HI?
} TextBox;
extern TextBox gTextBox;