2019年10月1日の日記を表示中
2019年10月1日 (火)
■基板
IONA-JS 1.10のソースコードのクレジット回りの処理部分を、JVSの規格書と合わせて眺めてみました。
JVS規格では、JVS IOがコインをカウントしており、ホスト(基板)からの問い合わせに対して回答するようになっているようです。また、これとは別に、JVS IOで数えているクレジット数を減算させる命令も用意されています。
とりあえず、クレジット加算の処理は、既にチャタリング対策っぽいものが入っていて、特に問題なさそうな感じでした。普通に動く分には、クレジットが入りっぱなしになるようには見えません。
一方で、減算の方は、基板側でクレジット投入を検出した後の、JVS IOに対するクレジット減算の指示が正しく処理できないと、無限にクレジット投入を検出し続けることになりそうです。
JVS規格によると、クレジットはスロットごとにカウントされていて、減算処理では対象スロットをindexで指定するようになっているんですが、このときのindexは1ベースで指定するようになっていて、1を指定すると最初のスロット(1Pのクレジット)が、2を指定すると2番目のスロット(2Pのクレジット)がそれぞれ減算されるようです。一方で、indexに0を指定した場合の挙動については特に記載がありません。IONA-JSのソースを見ると、もちろんJVS規格に従ってindexは1から始まるものとして書かれています。もし、基板側が、indexに0を指定していたら・・・。
そこで試しにIONA-JS側のクレジット減算処理を、indexを無視して減算を行うようにいじってみたところ、見事にクレジット無限投入問題が解消しました。やはり基板側からの減算対象指示が変みたいです。そしてさらにいじった結果、1Pのindexが0、2Pのindexが1となっていることがわかりました。基板側からは、0ベースで指定してきていることになりますね。
というわけで、無限クレジット投入問題の要因自体はわかりました。が、他の基板はindexは1ベースなわけで、これをどうやって解消すりゃいいのかがよくわかりませんね。当然、セガのJVS I/Oボードでは、このゲームのクレジット投入も正しく処理できているので、何かしらの方法で規格に違反していることを検知して対応していると思われるんですが、一体どうやっているのか・・・。もう少し調べてみましょう。
■テトリス99
[コメントを書く]
2019年10月1日の日記を表示中
[コメントを書く]