all repos — mgba @ 9204c61ba20fa967e3dfcb46cf1e0351bb5237d5

mGBA Game Boy Advance Emulator

include/mgba/core/tile-cache.h (view raw)

 1/* Copyright (c) 2013-2016 Jeffrey Pfau
 2 *
 3 * This Source Code Form is subject to the terms of the Mozilla Public
 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 6#ifndef M_TILE_CACHE_H
 7#define M_TILE_CACHE_H
 8
 9#include <mgba-util/common.h>
10
11CXX_GUARD_START
12
13#include <mgba/core/interface.h>
14
15DECL_BITFIELD(mTileCacheConfiguration, uint32_t);
16DECL_BIT(mTileCacheConfiguration, ShouldStore, 0);
17
18DECL_BITFIELD(mTileCacheSystemInfo, uint32_t);
19DECL_BITS(mTileCacheSystemInfo, PaletteBPP, 0, 2);
20DECL_BITS(mTileCacheSystemInfo, PaletteCount, 2, 4);
21DECL_BITS(mTileCacheSystemInfo, MaxTiles, 16, 13);
22
23struct mTileCacheEntry {
24	uint32_t paletteVersion;
25	uint32_t vramVersion;
26	uint8_t vramClean;
27	uint8_t paletteId;
28	uint16_t padding;
29};
30
31struct mTileCache {
32	color_t* cache;
33	struct mTileCacheEntry* status;
34	uint32_t* globalPaletteVersion;
35
36	uint32_t tileBase;
37	uint32_t paletteBase;
38	unsigned entriesPerTile;
39	unsigned bpp;
40
41	uint16_t* vram;
42	color_t* palette;
43	color_t temporaryTile[64];
44
45	mTileCacheConfiguration config;
46	mTileCacheSystemInfo sysConfig;
47};
48
49void mTileCacheInit(struct mTileCache* cache);
50void mTileCacheDeinit(struct mTileCache* cache);
51void mTileCacheConfigure(struct mTileCache* cache, mTileCacheConfiguration config);
52void mTileCacheConfigureSystem(struct mTileCache* cache, mTileCacheSystemInfo config, uint32_t tileBase, uint32_t paletteBase);
53void mTileCacheWriteVRAM(struct mTileCache* cache, uint32_t address);
54void mTileCacheWritePalette(struct mTileCache* cache, uint32_t entry, color_t color);
55
56const color_t* mTileCacheGetTile(struct mTileCache* cache, unsigned tileId, unsigned paletteId);
57const color_t* mTileCacheGetTileIfDirty(struct mTileCache* cache, struct mTileCacheEntry* entry, unsigned tileId, unsigned paletteId);
58const color_t* mTileCacheGetPalette(struct mTileCache* cache, unsigned paletteId);
59const uint16_t* mTileCacheGetVRAM(struct mTileCache* cache, unsigned tileId);
60
61CXX_GUARD_END
62
63#endif