2023年8月19日の日記の3番目の記事へのコメント

基板

海外有志が解析したCPS-B-21のドキュメントや回路図を見たりしてました。若干キーについての理解が深まった (気がする) のでメモとして残しておきます。

  • MAMEのCPS1のソースで用途不明となってるCボードのレジスタ3個のうち、2個はプロテクション用で、1個は乗算器の入力をunsignedからsigned (2の補数) 扱いにするフラグ用
  • プロテクション用のレジスタの一方 (CHECK1) に16bitの値を書き込んでも、その瞬間はなにも起きないが、内部でレジスタに保持される
  • プロテクション用のレジスタのもう一方 (CHECK2) に16bitの値を書き込むと、キーに含まれるCHECK2の期待値との比較が行われる。また、同時に、過去にCHECK1に書き込んだ値についても、キーに含まれるCHECK1の期待値との比較が行われる。
  • CHECK1もしくはCHECK2で期待値との不一致があった場合、CPS-B-21は一定フレーム後に描画系の機能を停止する。外から見ると、画面がブラックアウトした状態となる (昔電池レス化で何度もはまった現象)
  • キーの期待値は、Arcade Hacker氏の解説で用途不明となっていたフィールド16bit x2に含まれる
  • 期待値との比較はCHECK2へのWriteがトリガとなるので、CHECK2へのWriteがなければ、キーの期待値が何であろうとブラックアウトは起こらない
  • CPS1 Desuiciderでは、プログラムがCHECK2と思ってWriteしているレジスタ位置に何のレジスタもマップしないようにコンフィギュレーションすることで、プログラムの改変なしにブラックアウトを回避している
    • 回路的に、CPUがWriteしてきたアドレスに何のレジスタもマップされていなければ何も起こらない
    • CHECK2などのレジスタは、プログラム中で誰も触らない、安全なアドレスに置いておく
  • 同じくArcade Hacker氏の解説で用途不明となっていた後ろの方のフィールドはラスタ割り込み関連の設定用のレジスタのアドレスを決めるもの。CPS1では使われていないっぽい
  • CPS-IDのbit 6からbit 9の4bitはReadされた回数を示す (それ以外はキーに含まれるIDの値)

と、ここでふと疑問が。昨日自分がマッスルボマーのCボードに書いたキーは、MAMEのソースから作ったキーで、プログラムがアクセスしてくるCHECK1・CHECK2のアドレスに対して、律儀に実際のCHECK1・CHECK2をマップしてあります。一方でキーには正しい期待値を入れていません。そしてマッスルボマーは、動作中にCHECK1やCHECK2に対してWriteを行います。なのにブラックアウトせずに動き続けているのはなぜなんでしょう・・・。 追記: 後日、改めてArduinoのコードをよく見てみたところ、マッスルボマーに書いたキーは、CPS1 Desuicider 由来のものではないにしても、プログラムがCHECK1やCHECK2と思ってWriteしてくるところに何のレジスタもマップしていないものになっていました。うーん、自分で作ったものだと思うけど、全然記憶にないですね・・・(汗)

お名前:  メールアドレス(省略可):
メールアドレスも表示されます
ここに名前その他を書いてはいけません: ここにメールアドレスその他を書いてはいけません:

2023年8月19日の日記の3番目の記事へのコメント

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2023年8月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ