壊れたcpu_countをBGで表示する際に、桁溢れしてタイルマップ→PCGの順に
破壊してたという。しょーもな。(;´Д`)
ただ、何故cpu_countが壊れるのかはまだ謎だ。でも多分これもしょうもない
所でポカやってるんだろうなぁ。自信がなくなってきた。
PCG にキャラを転送した瞬間から負荷をかけ続けると壊れないようだ。ルー
プ内のベンチ用カウンタも壊れていたので、思い切ってベンチを外し代わり
に VBlankIntrWait() を入れてみたところ、負荷を掛けなくてもPCG は壊れ
なくなった。
unsigned int cpu_count;
int main(void)
{
REG_WAITCNT = WS_FASTER;
cpu_count = 0;
scene = Start;
GameInit(spr, task, scene);
IRQ_RegistFunc(Int_VBLANK, (u32*)&VBlankFunc);
IRQ_Start();
while (1)
{
cpu_count++; // ←壊れる
// VBlankIntrWait();
}
return 0;
}
なんなんだ。(;´Д`)
実機でデバッガ使いたいなぁ……。
エミュだと速いのに実機のベンチが遅いのでREG_WAITCNT を弄ってみた所、
エミュの1.2倍程度の速さで動くようになった。しかし何故かPCG の内容が
若干壊れる。
#define WS_FASTEST (WS_SRAM_2WAIT \
| WS_ROM0_1ST_2WAIT | WS_ROM0_2ND_1WAIT \
| WS_ROM1_1ST_2WAIT | WS_ROM1_2ND_1WAIT \
| WS_ROM2_1ST_2WAIT | WS_ROM2_2ND_1WAIT \
| WS_MODE_AGB | WS_PREFETCH_ENABLE)
#define WS_FASTER (WS_SRAM_3WAIT \
| WS_ROM0_1ST_3WAIT | WS_ROM0_2ND_1WAIT \
| WS_ROM1_1ST_3WAIT | WS_ROM1_2ND_1WAIT \
| WS_ROM2_1ST_3WAIT | WS_ROM2_2ND_1WAIT \
| WS_MODE_AGB | WS_PREFETCH_ENABLE)
#define WS_NORMAL (WS_SRAM_8WAIT \
| WS_ROM0_1ST_3WAIT | WS_ROM0_2ND_1WAIT \
| WS_ROM1_1ST_3WAIT | WS_ROM1_2ND_1WAIT \
| WS_ROM2_1ST_3WAIT | WS_ROM2_2ND_1WAIT \
| WS_MODE_AGB)
という設定でそれぞれ試してみた。Flash2Advance 256MではWS_FASTESTだと
動かなかった。WS_FASTERは動いて、これが大体1.2倍。だけどPCG が壊れる。
WS_NORMALだとエミュと同程度の速度になる。PCG の内容は壊れない。
ってーことはプリフェッチの有無が影響してんのか。でも市販ゲームはプリ
フェッチを有効にしてもPCG は壊れてないわけで。具体的に何が起こってる
んだろう?
だりぃ。
斜め上から見た機体をツールの回転機能で自動回転させてみたら、やっぱり
変だ!ということでZ軸も考慮した回転を手動で描いていますがめげそうだ。
諦めるかも。