[1chipMSX]

Over SPRITE

※情報の正確さは保証できません。

VDP のステータスレジスタ S#0 の bit6 は、1ライン上に5つ以上のスプライトが並んだ場合に 1 が立つようになってます。
(※SCREEN4以上では9つ以上)

1chipMSX のレジスタ読み出し回路を見てみると、S#0 の bit6 には、固定値で 0 を出してました。
しかし、sprite.vhd を確認してみると、しっかりフラグを上位階層へ伝達するポートを装備してます。
vdp.vhd を見てみると、そのポートを無視して放置してます・・(^_^;

せっかくなので、しっかり配線してやることで、S#0 の bit6 にフラグが出てくるように修正してみました。

単純に配線すると、どこかにゲート遅延が大きすぎる部分が出来るようで、表示が激しく乱れるようになりました。
もしかすると、作者さんもそれが原因で暫定的に 0固定 にしていたのかもしれません。コメントにも S#0 はまだ未完であると明記されてました。

そこで、sprite.vhd を書き換えて、なんとか表示を乱さずに S#0:bit6 (5S bit) を実現するように修正してみました。
書き換え箇所が多いので、どんな風に書き換えたかは上へ戻って最新アーカイブの vdp_sprite.vhd を参照して、オリジナルと見比べてみてください。

ちなみに、S#1 の読み出し部分にも「まだ修正中」といったコメントがありますが、S#1 の bit7,bit6 の2ビットのみが固定値 0 に
なっており、これら2ビットは MSX では使わないライトペン機能に関するステータスなので、1chipMSX では 0固定のままで問題ないです。

結構、このビットを見て、5つめ以上のスプライトを点滅表示させてるソフトがあると思います。
点滅することで処理落ちすることも考慮して、ゲームバランスを組んでいるようなソフトは、これでまともに遊べるようになったんじゃないかなと思います。

[▲上へ]