geometry-dash-gba/include/memmap.h

98 lines
2.5 KiB
C
Raw Normal View History

2020-08-08 00:40:00 -04:00
//
// GBA Memory map
//
//! \file tonc_memmap.h
//! \author J Vijn
//! \date 20060508 - 20060508
//
// === NOTES ===
// * This is a _small_ set of typedefs, #defines and inlines that can
// be found in tonclib, and might not represent the
// final forms.
#ifndef __MEMMAP__
#define __MEMMAP__
// === MEMORY SECTIONS ================================================
// basic sections
#define MEM_IO 0x04000000
#define MEM_PAL 0x05000000 // no 8bit write !!
#define MEM_VRAM 0x06000000 // no 8bit write !!
#define MEM_OAM 0x07000000 // no 8bit write !!
// basic sizes
#define PAL_SIZE 0x00400
#define VRAM_SIZE 0x18000
#define OAM_SIZE 0x00400
// sub sizes
#define PAL_BG_SIZE 0x00200
#define PAL_OBJ_SIZE 0x00200
#define VRAM_BG_SIZE 0x10000
#define VRAM_OBJ_SIZE 0x08000
#define M3_SIZE 0x12C00
#define M4_SIZE 0x09600
#define M5_SIZE 0x0A000
#define VRAM_PAGE_SIZE 0x0A000
// sub sections
#define REG_BASE MEM_IO
#define MEM_PAL_OBJ (MEM_PAL + PAL_BG_SIZE)
#define MEM_VRAM_BACK (MEM_VRAM+ VRAM_PAGE_SIZE)
#define MEM_VRAM_OBJ (MEM_VRAM+ VRAM_BG_SIZE)
// === STRUCTURED MEMORY MAP ==========================================
// Heavily typedefed, watch your pointers
// Should simplify memory accesses
// --- PAL ---
// pal_bg_mem[y] = COLOR (color y)
#define pal_bg_mem ((COLOR*)MEM_PAL)
#define pal_obj_mem ((COLOR*)MEM_PAL_OBJ)
// pal_bg_bank[y] = COLOR[] (bank y)
// pal_bg_bank[y][x] = COLOR (bank y, color x : color y*16+x)
#define pal_bg_bank ((PALBANK*)MEM_PAL)
#define pal_obj_bank ((PALBANK*)MEM_PAL_OBJ)
// --- VRAM ---
// tile_mem[y] = TILE[] (char block y)
// tile_mem[y][x] = TILE (char block y, tile x)
#define tile_mem ( (CHARBLOCK*)MEM_VRAM)
#define tile8_mem ((CHARBLOCK8*)MEM_VRAM)
#define tile_mem_obj ( (CHARBLOCK*)MEM_VRAM_OBJ)
#define tile8_mem_obj ((CHARBLOCK8*)MEM_VRAM_OBJ)
// vid_mem[a] = COLOR
#define vid_mem ((COLOR*)MEM_VRAM)
// --- OAM ---
// oatr_mem[a] = OBJ_ATTR (oam entry a)
#define oam_mem ((OBJ_ATTR*)MEM_OAM)
#define obj_mem ((OBJ_ATTR*)MEM_OAM)
#define obj_aff_mem ((OBJ_AFFINE*)MEM_OAM)
// === REGISTER LIST ==================================================
// === VIDEO REGISTERS ===
#define REG_DISPCNT *(vu32*)(REG_BASE+0x0000) // display control
#define REG_DISPSTAT *(vu16*)(REG_BASE+0x0004) // display interupt status
#define REG_VCOUNT *(vu16*)(REG_BASE+0x0006) // vertical count
// === KEYPAD ===
#define REG_KEYINPUT *(vu16*)(REG_BASE+0x0130) // Key status
#define REG_KEYCNT *(vu16*)(REG_BASE+0x0132)
#endif // __MEMMAP__