|
|
@@ -15,9 +15,6 @@ |
|
|
} \
|
|
|
screenBase = background->screenBase + yBase + (xBase >> 2); \
|
|
|
uint16_t* screenBlock = renderer->d.vramBG[screenBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
- if (UNLIKELY(!screenBlock)) { \
|
|
|
- return; \
|
|
|
- } \
|
|
|
LOAD_16(mapData, screenBase & VRAM_BLOCK_MASK, screenBlock); \
|
|
|
localY = inY & 0x7; \
|
|
|
if (GBA_TEXT_MAP_VFLIP(mapData)) { \
|
|
|
@@ -29,26 +26,21 @@ |
|
|
palette = &mainPalette[paletteData]; \
|
|
|
charBase = (background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 5)) + (localY << 2); \
|
|
|
vram = renderer->d.vramBG[charBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
- if (LIKELY(vram)) { \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
- tileData >>= 4 * mod8; \
|
|
|
- for (; outX < end; ++outX) { \
|
|
|
- BACKGROUND_DRAW_PIXEL_16(BLEND, OBJWIN, 0); \
|
|
|
- } \
|
|
|
- } else { \
|
|
|
- for (outX = end - 1; outX >= renderer->start; --outX) { \
|
|
|
- BACKGROUND_DRAW_PIXEL_16(BLEND, OBJWIN, 0); \
|
|
|
- } \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
+ if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
+ tileData >>= 4 * mod8; \
|
|
|
+ for (; outX < end; ++outX) { \
|
|
|
+ BACKGROUND_DRAW_PIXEL_16(BLEND, OBJWIN, 0); \
|
|
|
+ } \
|
|
|
+ } else { \
|
|
|
+ for (outX = end - 1; outX >= renderer->start; --outX) { \
|
|
|
+ BACKGROUND_DRAW_PIXEL_16(BLEND, OBJWIN, 0); \
|
|
|
} \
|
|
|
}
|
|
|
|
|
|
#define DRAW_BACKGROUND_MODE_0_TILE_PREFIX_16(BLEND, OBJWIN) \
|
|
|
charBase = (background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 5)) + (localY << 2); \
|
|
|
vram = renderer->d.vramBG[charBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
- if (UNLIKELY(!vram)) { \
|
|
|
- return; \
|
|
|
- } \
|
|
|
LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 4; \
|
|
|
palette = &mainPalette[paletteData]; \
|
|
|
@@ -91,23 +83,19 @@ |
|
|
} \
|
|
|
charBase = (background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 5)) + (localY << 2); \
|
|
|
vram = renderer->d.vramBG[charBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
- if (UNLIKELY(!vram)) { \
|
|
|
- carryData = 0; \
|
|
|
+ paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 4; \
|
|
|
+ palette = &mainPalette[paletteData]; \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
+ if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
+ tileData >>= 4 * baseX; \
|
|
|
} else { \
|
|
|
- paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 4; \
|
|
|
- palette = &mainPalette[paletteData]; \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
- tileData >>= 4 * baseX; \
|
|
|
- } else { \
|
|
|
- tileData >>= 4 * (7 - baseX); \
|
|
|
- } \
|
|
|
- tileData &= 0xF; \
|
|
|
- tileData |= tileData << 4; \
|
|
|
- tileData |= tileData << 8; \
|
|
|
- tileData |= tileData << 16; \
|
|
|
- carryData = tileData; \
|
|
|
+ tileData >>= 4 * (7 - baseX); \
|
|
|
} \
|
|
|
+ tileData &= 0xF; \
|
|
|
+ tileData |= tileData << 4; \
|
|
|
+ tileData |= tileData << 8; \
|
|
|
+ tileData |= tileData << 16; \
|
|
|
+ carryData = tileData; \
|
|
|
} \
|
|
|
for (; length; ++tileX) { \
|
|
|
BACKGROUND_TEXT_SELECT_CHARACTER; \
|
|
|
@@ -116,23 +104,19 @@ |
|
|
tileData = carryData; \
|
|
|
for (; x < 8 && length; ++x, --length) { \
|
|
|
if (!mosaicWait) { \
|
|
|
- if (UNLIKELY(!vram)) { \
|
|
|
- carryData = 0; \
|
|
|
+ paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 4; \
|
|
|
+ palette = &mainPalette[paletteData]; \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
+ if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
+ tileData >>= x * 4; \
|
|
|
} else { \
|
|
|
- paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 4; \
|
|
|
- palette = &mainPalette[paletteData]; \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
- tileData >>= x * 4; \
|
|
|
- } else { \
|
|
|
- tileData >>= (7 - x) * 4; \
|
|
|
- } \
|
|
|
- tileData &= 0xF; \
|
|
|
- tileData |= tileData << 4; \
|
|
|
- tileData |= tileData << 8; \
|
|
|
- tileData |= tileData << 16; \
|
|
|
- carryData = tileData; \
|
|
|
+ tileData >>= (7 - x) * 4; \
|
|
|
} \
|
|
|
+ tileData &= 0xF; \
|
|
|
+ tileData |= tileData << 4; \
|
|
|
+ tileData |= tileData << 8; \
|
|
|
+ tileData |= tileData << 16; \
|
|
|
+ carryData = tileData; \
|
|
|
mosaicWait = mosaicH; \
|
|
|
} \
|
|
|
--mosaicWait; \
|
|
|
@@ -149,10 +133,6 @@ |
|
|
palette = &mainPalette[paletteData]; \
|
|
|
charBase = (background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 5)) + (localY << 2); \
|
|
|
vram = renderer->d.vramBG[charBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
- if (UNLIKELY(!vram)) { \
|
|
|
- outX += 8; \
|
|
|
- continue; \
|
|
|
- } \
|
|
|
LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
if (tileData) { \
|
|
|
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
@@ -182,47 +162,42 @@ |
|
|
charBase = (background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 6)) + (localY << 3); \
|
|
|
vram = renderer->d.vramBG[charBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
int end2 = end - 4; \
|
|
|
- if (LIKELY(vram)) { \
|
|
|
- if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
- int shift = inX & 0x3; \
|
|
|
- if (end2 > outX) { \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- tileData >>= 8 * shift; \
|
|
|
- shift = 0; \
|
|
|
- for (; outX < end2; ++outX) { \
|
|
|
- BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
- } \
|
|
|
- } \
|
|
|
- \
|
|
|
- LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
+ if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
+ int shift = inX & 0x3; \
|
|
|
+ if (end2 > outX) { \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
tileData >>= 8 * shift; \
|
|
|
- for (; outX < end; ++outX) { \
|
|
|
+ shift = 0; \
|
|
|
+ for (; outX < end2; ++outX) { \
|
|
|
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
} \
|
|
|
- } else { \
|
|
|
- int start = outX; \
|
|
|
- outX = end - 1; \
|
|
|
- if (end2 > start) { \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- for (; outX >= end2; --outX) { \
|
|
|
- BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
- } \
|
|
|
- charBase += 4; \
|
|
|
- } \
|
|
|
- \
|
|
|
+ } \
|
|
|
+ \
|
|
|
+ LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
+ tileData >>= 8 * shift; \
|
|
|
+ for (; outX < end; ++outX) { \
|
|
|
+ BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
+ } \
|
|
|
+ } else { \
|
|
|
+ int start = outX; \
|
|
|
+ outX = end - 1; \
|
|
|
+ if (end2 > start) { \
|
|
|
LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- for (; outX >= renderer->start; --outX) { \
|
|
|
+ for (; outX >= end2; --outX) { \
|
|
|
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
} \
|
|
|
+ charBase += 4; \
|
|
|
+ } \
|
|
|
+ \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
+ for (; outX >= renderer->start; --outX) { \
|
|
|
+ BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
} \
|
|
|
}
|
|
|
|
|
|
#define DRAW_BACKGROUND_MODE_0_TILE_PREFIX_256(BLEND, OBJWIN) \
|
|
|
charBase = (background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 6)) + (localY << 3); \
|
|
|
vram = renderer->d.vramBG[charBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
- if (UNLIKELY(!vram)) { \
|
|
|
- return; \
|
|
|
- } \
|
|
|
int end = mod8 - 4; \
|
|
|
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
if (end > 0) { \
|
|
|
@@ -266,10 +241,6 @@ |
|
|
BACKGROUND_TEXT_SELECT_CHARACTER; \
|
|
|
charBase = (background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 6)) + (localY << 3); \
|
|
|
vram = renderer->d.vramBG[charBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
- if (UNLIKELY(!vram)) { \
|
|
|
- outX += 8; \
|
|
|
- continue; \
|
|
|
- } \
|
|
|
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
if (tileData) { \
|
|
|
@@ -315,29 +286,25 @@ |
|
|
tileData = carryData; \
|
|
|
for (x = 0; x < 8; ++x) { \
|
|
|
if (!mosaicWait) { \
|
|
|
- if (UNLIKELY(!vram)) { \
|
|
|
- carryData = 0; \
|
|
|
+ if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
+ if (x >= 4) { \
|
|
|
+ LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
+ tileData >>= (x - 4) * 8; \
|
|
|
+ } else { \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
+ tileData >>= x * 8; \
|
|
|
+ } \
|
|
|
} else { \
|
|
|
- if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
- if (x >= 4) { \
|
|
|
- LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
- tileData >>= (x - 4) * 8; \
|
|
|
- } else { \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- tileData >>= x * 8; \
|
|
|
- } \
|
|
|
+ if (x >= 4) { \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
+ tileData >>= (7 - x) * 8; \
|
|
|
} else { \
|
|
|
- if (x >= 4) { \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- tileData >>= (7 - x) * 8; \
|
|
|
- } else { \
|
|
|
- LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
- tileData >>= (3 - x) * 8; \
|
|
|
- } \
|
|
|
+ LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
+ tileData >>= (3 - x) * 8; \
|
|
|
} \
|
|
|
- tileData &= 0xFF; \
|
|
|
- carryData = tileData; \
|
|
|
} \
|
|
|
+ tileData &= 0xFF; \
|
|
|
+ carryData = tileData; \
|
|
|
mosaicWait = mosaicH; \
|
|
|
} \
|
|
|
tileData |= tileData << 8; \
|
|
|
@@ -351,49 +318,44 @@ |
|
|
charBase = (background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 6)) + (localY << 3); \
|
|
|
vram = renderer->d.vramBG[charBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
int end2 = end - 4; \
|
|
|
- if (LIKELY(vram)) { \
|
|
|
- paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 8; \
|
|
|
- palette = &mainPalette[paletteData]; \
|
|
|
- if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
- int shift = inX & 0x3; \
|
|
|
- if (end2 > outX) { \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- tileData >>= 8 * shift; \
|
|
|
- shift = 0; \
|
|
|
- for (; outX < end2; ++outX) { \
|
|
|
- BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
- } \
|
|
|
- } \
|
|
|
- \
|
|
|
- LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
+ paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 8; \
|
|
|
+ palette = &mainPalette[paletteData]; \
|
|
|
+ if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
+ int shift = inX & 0x3; \
|
|
|
+ if (end2 > outX) { \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
tileData >>= 8 * shift; \
|
|
|
- for (; outX < end; ++outX) { \
|
|
|
+ shift = 0; \
|
|
|
+ for (; outX < end2; ++outX) { \
|
|
|
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
} \
|
|
|
- } else { \
|
|
|
- int start = outX; \
|
|
|
- outX = end - 1; \
|
|
|
- if (end2 > start) { \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- for (; outX >= end2; --outX) { \
|
|
|
- BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
- } \
|
|
|
- charBase += 4; \
|
|
|
- } \
|
|
|
- \
|
|
|
+ } \
|
|
|
+ \
|
|
|
+ LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
+ tileData >>= 8 * shift; \
|
|
|
+ for (; outX < end; ++outX) { \
|
|
|
+ BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
+ } \
|
|
|
+ } else { \
|
|
|
+ int start = outX; \
|
|
|
+ outX = end - 1; \
|
|
|
+ if (end2 > start) { \
|
|
|
LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- for (; outX >= renderer->start; --outX) { \
|
|
|
+ for (; outX >= end2; --outX) { \
|
|
|
BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
} \
|
|
|
+ charBase += 4; \
|
|
|
+ } \
|
|
|
+ \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
+ for (; outX >= renderer->start; --outX) { \
|
|
|
+ BACKGROUND_DRAW_PIXEL_256(BLEND, OBJWIN, 0); \
|
|
|
} \
|
|
|
}
|
|
|
|
|
|
#define DRAW_BACKGROUND_MODE_0_TILE_PREFIX_256EXT(BLEND, OBJWIN) \
|
|
|
charBase = (background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 6)) + (localY << 3); \
|
|
|
vram = renderer->d.vramBG[charBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
- if (UNLIKELY(!vram)) { \
|
|
|
- return; \
|
|
|
- } \
|
|
|
paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 8; \
|
|
|
palette = &mainPalette[paletteData]; \
|
|
|
int end = mod8 - 4; \
|
|
|
@@ -441,10 +403,6 @@ |
|
|
palette = &mainPalette[paletteData]; \
|
|
|
charBase = (background->charBase + (GBA_TEXT_MAP_TILE(mapData) << 6)) + (localY << 3); \
|
|
|
vram = renderer->d.vramBG[charBase >> VRAM_BLOCK_OFFSET]; \
|
|
|
- if (UNLIKELY(!vram)) { \
|
|
|
- outX += 8; \
|
|
|
- continue; \
|
|
|
- } \
|
|
|
if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
if (tileData) { \
|
|
|
@@ -490,31 +448,27 @@ |
|
|
tileData = carryData; \
|
|
|
for (x = 0; x < 8; ++x) { \
|
|
|
if (!mosaicWait) { \
|
|
|
- if (UNLIKELY(!vram)) { \
|
|
|
- carryData = 0; \
|
|
|
+ paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 8; \
|
|
|
+ palette = &mainPalette[paletteData]; \
|
|
|
+ if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
+ if (x >= 4) { \
|
|
|
+ LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
+ tileData >>= (x - 4) * 8; \
|
|
|
+ } else { \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
+ tileData >>= x * 8; \
|
|
|
+ } \
|
|
|
} else { \
|
|
|
- paletteData = GBA_TEXT_MAP_PALETTE(mapData) << 8; \
|
|
|
- palette = &mainPalette[paletteData]; \
|
|
|
- if (!GBA_TEXT_MAP_HFLIP(mapData)) { \
|
|
|
- if (x >= 4) { \
|
|
|
- LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
- tileData >>= (x - 4) * 8; \
|
|
|
- } else { \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- tileData >>= x * 8; \
|
|
|
- } \
|
|
|
+ if (x >= 4) { \
|
|
|
+ LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
+ tileData >>= (7 - x) * 8; \
|
|
|
} else { \
|
|
|
- if (x >= 4) { \
|
|
|
- LOAD_32(tileData, charBase & VRAM_BLOCK_MASK, vram); \
|
|
|
- tileData >>= (7 - x) * 8; \
|
|
|
- } else { \
|
|
|
- LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
- tileData >>= (3 - x) * 8; \
|
|
|
- } \
|
|
|
+ LOAD_32(tileData, (charBase + 4) & VRAM_BLOCK_MASK, vram); \
|
|
|
+ tileData >>= (3 - x) * 8; \
|
|
|
} \
|
|
|
- tileData &= 0xFF; \
|
|
|
- carryData = tileData; \
|
|
|
} \
|
|
|
+ tileData &= 0xFF; \
|
|
|
+ carryData = tileData; \
|
|
|
mosaicWait = mosaicH; \
|
|
|
} \
|
|
|
tileData |= tileData << 8; \
|
|
|
|