static void mapParser0(struct mMapCache* cache, struct mMapCacheEntry* entry, void* vram) { uint16_t map = *(uint16_t*) vram; entry->tileId = GBA_TEXT_MAP_TILE(map); entry->flags = mMapCacheEntryFlagsSetHMirror(entry->flags, !!GBA_TEXT_MAP_HFLIP(map)); entry->flags = mMapCacheEntryFlagsSetVMirror(entry->flags, !!GBA_TEXT_MAP_VFLIP(map)); if (mMapCacheSystemInfoGetPaletteBPP(cache->sysConfig) == 3) { entry->flags = mMapCacheEntryFlagsClearPaletteId(entry->flags); } else { entry->flags = mMapCacheEntryFlagsSetPaletteId(entry->flags, GBA_TEXT_MAP_PALETTE(map)); } }
static void GBAVideoCacheWriteDISPCNT(struct mCacheSet* cache, uint16_t value) { switch (GBARegisterDISPCNTGetMode(value)) { case 0: default: mMapCacheSetGetPointer(&cache->maps, 0)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 1)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 2)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 3)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 0)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 0)->sysConfig) == 3); mMapCacheSetGetPointer(&cache->maps, 1)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 1)->sysConfig) == 3); mMapCacheSetGetPointer(&cache->maps, 2)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 2)->sysConfig) == 3); mMapCacheSetGetPointer(&cache->maps, 3)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 3)->sysConfig) == 3); break; case 1: case 2: mMapCacheSetGetPointer(&cache->maps, 0)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 1)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 2)->mapParser = mapParser2; mMapCacheSetGetPointer(&cache->maps, 3)->mapParser = mapParser2; mMapCacheSetGetPointer(&cache->maps, 0)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 0)->sysConfig) == 3); mMapCacheSetGetPointer(&cache->maps, 1)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 1)->sysConfig) == 3); mMapCacheSetGetPointer(&cache->maps, 2)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 1); mMapCacheSetGetPointer(&cache->maps, 3)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 1); break; } }
static void GBAVideoCacheWriteDISPCNT(struct mCacheSet* cache, uint16_t value) { mBitmapCacheSetGetPointer(&cache->bitmaps, 1)->buffer = GBARegisterDISPCNTGetFrameSelect(value); switch (GBARegisterDISPCNTGetMode(value)) { case 0: default: mMapCacheSetGetPointer(&cache->maps, 0)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 1)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 2)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 3)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 0)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 0)->sysConfig) == 3); mMapCacheSetGetPointer(&cache->maps, 1)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 1)->sysConfig) == 3); mMapCacheSetGetPointer(&cache->maps, 2)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 2)->sysConfig) == 3); mMapCacheSetGetPointer(&cache->maps, 3)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 3)->sysConfig) == 3); break; case 1: case 2: mMapCacheSetGetPointer(&cache->maps, 0)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 1)->mapParser = mapParser0; mMapCacheSetGetPointer(&cache->maps, 2)->mapParser = mapParser2; mMapCacheSetGetPointer(&cache->maps, 3)->mapParser = mapParser2; mMapCacheSetGetPointer(&cache->maps, 0)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 0)->sysConfig) == 3); mMapCacheSetGetPointer(&cache->maps, 1)->tileCache = mTileCacheSetGetPointer(&cache->tiles, mMapCacheSystemInfoGetPaletteBPP(mMapCacheSetGetPointer(&cache->maps, 1)->sysConfig) == 3); mMapCacheSetGetPointer(&cache->maps, 2)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 1); mMapCacheSetGetPointer(&cache->maps, 3)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 1); break; } mBitmapCacheSystemInfo bitConfig; switch (GBARegisterDISPCNTGetMode(value)) { case 3: bitConfig = mBitmapCacheSystemInfoSetEntryBPP(0, 4); bitConfig = mBitmapCacheSystemInfoClearUsesPalette(bitConfig); bitConfig = mBitmapCacheSystemInfoSetHeight(bitConfig, 160); bitConfig = mBitmapCacheSystemInfoSetWidth(bitConfig, 240); bitConfig = mBitmapCacheSystemInfoSetBuffers(bitConfig, 1); mBitmapCacheConfigureSystem(mBitmapCacheSetGetPointer(&cache->bitmaps, 0), bitConfig); mBitmapCacheSetGetPointer(&cache->bitmaps, 0)->buffer = 0; break; case 5: bitConfig = mBitmapCacheSystemInfoSetEntryBPP(0, 4); bitConfig = mBitmapCacheSystemInfoClearUsesPalette(bitConfig); bitConfig = mBitmapCacheSystemInfoSetHeight(bitConfig, 128); bitConfig = mBitmapCacheSystemInfoSetWidth(bitConfig, 160); bitConfig = mBitmapCacheSystemInfoSetBuffers(bitConfig, 2); mBitmapCacheConfigureSystem(mBitmapCacheSetGetPointer(&cache->bitmaps, 0), bitConfig); mBitmapCacheSetGetPointer(&cache->bitmaps, 0)->buffer = GBARegisterDISPCNTGetFrameSelect(value); break; } }