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