1日ほっとした後にでてくるアイディア、なんなんでしょうね。orz
・思いついた案その1
mode4はやめよう。mode0の方が180x120(正確にいうと184x120(23x15タイル))を詰めてリニアに転送できます。以下のコードはなかったことにorz
IWRAM_CODE void Mode4Draw(u16* pImg)
{
SwiLZ77UnCompWrite16bit(pImg, Mode4.buf);
u8 *src = (u8*)Mode4.buf;
u8 *dst = (u8*)Mode4.pBack;
s32 y;
for(y=0; y<120; y++)
{
MemInc(src + y*180, dst + y*240, 180);
}
}・思いついた案その2
・aplibで圧縮してみよう。LZ77より圧縮率はいいらしい。ZX0やLZ4でGBAに最適化されたアセンブリはなさそうなので現状は除外。
https://github.com/emmanuel-marty/apultra/blob/master/asm/ARM7TDMI/aplib_arm.s
雑にだいなのファイルで比較。
7672ファイル
gbalzss.exe 44.7 MB (46,927,580 バイト)
apultra.exe 39.0 MB (40,942,807 バイト)
5.7MB減は脅威ですね。あとはデコードが重くなければ・・・。strbあるからVRAMに直接流し込めないですね。うーん展開後、前と同じようにmemcpyかなあ・・・。