diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/bg.h | 70 | ||||
| -rw-r--r-- | include/gba/defines.h | 11 | 
2 files changed, 79 insertions, 2 deletions
| diff --git a/include/bg.h b/include/bg.h new file mode 100644 index 000000000..b9410afa3 --- /dev/null +++ b/include/bg.h @@ -0,0 +1,70 @@ +#ifndef GUARD_BG_H +#define GUARD_BG_H + +#include "global.h" + +enum { +    BG_CTRL_ATTR_VISIBLE = 1, +    BG_CTRL_ATTR_CHARBASEINDEX = 2, +    BG_CTRL_ATTR_MAPBASEINDEX = 3, +    BG_CTRL_ATTR_SCREENSIZE = 4, +    BG_CTRL_ATTR_PALETTEMODE = 5, +    BG_CTRL_ATTR_PRIORITY = 6, +    BG_CTRL_ATTR_MOSAIC = 7, +    BG_CTRL_ATTR_WRAPAROUND = 8, +}; + +struct BgControl { +    struct BgConfig { +        u16 visible:1; +        u16 unknown_1:1; +        u16 screenSize:2; +        u16 priority:2; +        u16 mosaic:1; +        u16 wraparound:1; +         +        u16 charBaseIndex:2; +        u16 mapBaseIndex:5; +        u16 paletteMode:1; +         +        u8 unknown_2; +        u8 unknown_3; +    } configs[4]; +     +    u16 bgVisibilityAndMode; +}; + +struct BgTemplate { +    u32 bg:2; +    u32 charBaseIndex:2; +    u32 mapBaseIndex:5; +    u32 screenSize:2; +    u32 paletteMode:1; +    u32 priority:2; +    u32 baseTile:10; +}; + +struct BgConfig2 { +    u32 baseTile:10; +    u32 basePalette:4; +    u32 unk_3:18; +     +    void* tilemap; +    u32 bg_x; +    u32 bg_y; +}; + +bool32 IsInvalidBg32(u8); +void ResetBgControlStructs(); +u16 GetBgMetricTextMode(u8, u8); +u32 GetBgMetricAffineMode(u8, u8); +u32 GetBgType(u8); +void SetTextModeAndHideBgs(); +bool8 IsInvalidBg(u8); +bool32 IsTileMapOutsideWram(u8); +void CopyRectToBgTilemapBufferRect(u8, void*, u8, u8, u8, u8, u8, u8, u8, u8, u8, u16, u16); +void CopyTileMapEntry(u16*, u16*, s32, u32, u32); +u32 GetTileMapIndexFromCoords(s32, s32, s32, u32, u32); +void WriteSequenceToBgTilemapBuffer(u8, u16, u8, u8, u8, u8, u8, s16); + +#endif // GUARD_BG_H diff --git a/include/gba/defines.h b/include/gba/defines.h index 0f7f06755..e67d64777 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -15,6 +15,11 @@  #define INTR_CHECK     (*(u16 *)0x3007FF8)  #define INTR_VECTOR    (*(void **)0x3007FFC) +#define EWRAM_START 0x02000000 +#define EWRAM_END   (EWRAM_START + 0x40000) +#define IWRAM_START 0x03000000 +#define IWRAM_END   (IWRAM_START + 0x8000) +  #define PLTT      0x5000000  #define PLTT_SIZE 0x400 @@ -29,8 +34,10 @@  #define BG_VRAM           VRAM  #define BG_VRAM_SIZE      0x10000 -#define BG_CHAR_ADDR(n)   (BG_VRAM + (0x4000 * (n))) -#define BG_SCREEN_ADDR(n) (BG_VRAM + (0x800 * (n))) +#define BG_CHAR_SIZE      0x4000 +#define BG_SCREEN_SIZE    0x800 +#define BG_CHAR_ADDR(n)   (BG_VRAM + (BG_CHAR_SIZE * (n))) +#define BG_SCREEN_ADDR(n) (BG_VRAM + (BG_SCREEN_SIZE * (n)))  // text-mode BG  #define OBJ_VRAM0      (VRAM + 0x10000) | 
