Quasi88はずっと0.6.4がベースバージョン化と思ってましたが、0.7.1とかあるようなので、持ってきてビルドしてみました。
最近(でもないですが)リリースされてるPC-8001用のゲームなどは、PCG使うときに、PCGのデータを書き換えることでアニメーションするようなものがあります。
が、Quasi88は、PCGのデータ書き換えが発生しても、画面書き換えが発生しないので、こういったゲームではアニメーションが行われないのです。0.7.1でもこの点は変わってませんでした。
修正は簡単で、src/pc88main.c の中でPCGデータの書き換えを行っている部分に、画面の再描画を仕掛けてやればいいだけです。
本当は、書き換わった文字コード部分だけ書き換える方が効率がよいとは思うんですが、最近のPCでは全画面書き換えしても特に問題はなさそうなので雑にやっておきます。
screen_set_dirty_all()が全画面書き換えを発呼するコードです。一行追加するだけで、そういったゲームを遊ぶことができるようになります。
static void pcg_out_addr_high( byte addr ) { byte src; pcg_addr = (pcg_addr & 0x00ff) | ((int)addr << 8); if( addr & 0x10 ){ /* exec */ if( addr & 0x20 ){ src = font_mem[ 0x400 + (pcg_addr&0x3ff) ]; } /* copy */ else { src = pcg_data; } /* store */ font_pcg[ 0x400 + (pcg_addr&0x3ff) ] = src; screen_set_dirty_all(); } }
コメント