2023年9月13日から2023年9月9日までの日記を表示中

2023年 9月13日 (水)

基板

CPS1の起動時キー書き込みに関して、昨日試したOBJEOに同期させた方式を実用化すべく、CPUリセット解除前にデータバスに余計な信号が流れない殿様の野望2の基板を利用して、既存のコードを段階的に変更。が、修正とテストを繰り返していたところ、突然ある変更で動かなくなり、その後、さっきまで動いていた状態にまでコードを戻しても動かないみたいな事態となってしまいました。まさかと思いながらもPICを別個体に替えたら改善。PICがヘタったのか・・・?

そして、別個体で実験を継続してわかってきたんですが、キー書き込みに使うデータ信号をデフォルトHIGHにして、書き込むタイミングで正しい値に設定するようにするとキー書き込みが不安定になるようです。さらには、クロック信号の方をデフォルトHIGHにするとまったく動かなくなるという謎現象も。うーん、ちゃんと回路的に問題ない動きになってると思うんですが、何でダメなのか・・・。うーん、苦しい。

2023年 9月12日 (火)

基板

CPS1での起動時キー書き込み、何かしらのCボード近くの信号を見張ってタイミングを合わせることで、CPS-A-01によるバスアクセスとの衝突を回避できるのではないかと考え、調査・実験してみました。それっぽそうな信号をいくつか見てみたところ、Cボードの56番ピンに来ているOBJEOというCボードへの入力信号が、(フレーム境界と思われる一部の期間だけですが) ちょうどCPS-A-01によるデータバスアクセスが発生するタイミングと同じようなタイミングで数マイクロ秒ほどHIGHになるようです (波形の黄色の信号)。

OBJEO (黄色) に同期すると良さそう?

というわけで、試しにこの信号をPICのGP3でポーリングして (PIC12F509には割り込みとかがないので・・・)、これに同期する形でデータバスを操作するようにコードを修正。結果、PIC12F509の処理能力でもいい感じに同期できて、OBJEOが1回立ち上がるたびに1回クロック信号を上げ下げできることを確認できました。写真の紫の波形がOBJEOで、緑がクロックです (ここではクロックやデータを、デフォルトでHIGHの状態にしてします)。

OBJEO (紫) に同期してクロック (緑) を動かしている

ただ、次に書き込む1bitのデータの用意に結構時間がかかるようで、このときはOBJEO 2周期分かかってしまうようですw。一応、OBJEOに同期しても、CPUリセットが解除されるまでの300ミリ秒の間に書き込みは終わるようですが、ギリギリですね・・・ (波形の黄色がHIGHになっている期間がキー書き込み期間で、右下の緑と青で塗りつぶされているところがCPUが動き出したところ)

300ミリ秒ギリギリになるw

2023年 9月11日 (月)

基板

CPS-A-01が起動直後に、どの状態になったことでバスを触ってくるのか調べるために、内部状態と関係する信号が出ていそうな112番ピンから116番ピンまでを観測してみることにしました。こんなときも秋月電子のピッチ変換基板が役立ちますw

CPS-A-01の信号を引き出し

信号を観測した結果、WSTOBJ信号が定常的に有効になっているということがわかりました (写真の波形の緑色)。どうやらCPS-A-01はCPUリセット解除前に、WSTOBJ状態になってメモリアクセスを引き起こしているようです。この状態は垂直5スキャンライン分を除いて、毎スキャンライン遷移するようです。

WSTOBJ (緑) が動きまくっていた

そしてもう一つ、大事なこともわかりました。これまで見てきた波形から、起動直後、データバスにデータが出てくるケースでも、データがまったく流れない隙間の時間帯が広く存在すると考えていたんですが、どうもこれは間違いだったようです。適当なロジアナの内部クロックではなく、きちんとCボードに供給されている16MHzのクロックを参照して波形を取ったところ、WSTOBJ信号は、起動直後から常にトグルし続けており、データ転送も60μ秒程度の間隔で常時発生していました。

実は大きな隙間時間なんてなかった

上の波形からもちょっとわかるかもしれませんが、隙間は16.6ミリ秒周期でわずかに300μ秒程度発生しているだけのようです。これはおそらく、CPS-A-01がWSTOBJ状態にならない5スキャンライン分の時間と思われます。これまで数十ミリ秒単位でデータバスに信号が流れない時間帯があるように見えていたのは、サンプリング周波数が100KHz程度と低すぎたことで周期的に信号を取りこぼすフェーズが現れ、それがデータが流れない時間帯のように見えていたということなのかもしれません。はぁ・・・。

で、改めてどうするか考えてみたんですが、これまでも、こんな状況の中、CPS-A-01のメモリアクセスを気にせずキーを書き込んだ場合、特に問題なくキーが書けていました。ということは、一瞬データが流れるくらいなら、セキュリティの書き換えに影響しないのかもしれません。そうだとすると、CPS-A-01がバスにデータを流すタイミングを避けながらキーを書き込めば、データの衝突を回避しつつキーを書き込める可能性がありそうです。これを狙ってみたいと思います。 (追記: 後々になって、これは誤解とわかりました。キー書き込み中、マザーボード側に起因するCLK信号のトグルが混ざると、それが一瞬でも起動しなくなるようです。衝突しながらも起動時キー書き込みが成功していたのは、PICの信号が出力に入りっぱなしになっていることで、衝突時にPIC側が勝っていたからだと推測されます)

2023年 9月10日 (日)

基板

昨日、CPS-B-21のピン上げ改造を試した結果、やはり起動時キー書き込みの実施において、61番ピンと62番ピンのピン上げは回避したいという思いが強まりました。しかし、そのためにはCPUリセット解除前にデータバス側に出てくる信号を抑制しなければなりません。というわけで、CPS-A-01がどういう経緯でメモリアクセスを引き起こすのかについてちょっと調べてみました。

ひとまずCPS-A-01の解析ドキュメントにヒントがないか探してみたところ、こちらのドキュメントにCPS-A-01によるバスアクセスに関する記述がありました。 ドキュメントによると、CPS1では、CPU以外でバスを利用するデバイスはCPS-A-01だけらしく、また、普通に68000のバスプロトコル (使いたい人が要求 (Bus Request (BR)) を出した後、CPUが許可 (Bus Grant (BG)) を出して、使う人が使っている間 Bus Grant Ack (BGACK) を上げておく) に従っているようです。

ただ、CPS-A-01のピンアサインを見るとBRとBGACKはあるのにBGがありません。しかもBGACKは出力ではなく入力のようです。つまり、CPS-A-01がBRを出してCPUがBGを出したら、CPS-A-01以外の誰かがBGACKを出して、それをCPUとCPS-A-01の双方が受け取るようになっているということなんですかね。

この辺の信号がどう作られているのかを調べて、キー書き込み中にBGACKが出ないように何らかの方法で抑え込んでやれば、CPS-A-01がバスにデータを流すこともなくなるのでは・・・と思って回路を追ったりロジアナで観察したりしてみたんですが、どうも68000はRESETやHALTが有効になっている間も普通にBGを出す一方、BGACKも周辺の汎用ロジックで組まれた回路によってBGが出た一定サイクル後に勝手に出るような作りになっているように見えます。というわけでこの作戦はボツに。残念。

他に手はないかと、改めて先程の解析ドキュメントを見てみたところ、「CPS-A-01は特定の動作状態に入った場合に外部メモリにアクセスをする」といったことが書かれていました。そしてIDLE状態にいる限りは外にアクセスをしないようです。ということは、CPUが起動するよりも前に、何らかの理由で勝手にIDLE以外の状態に遷移してしまうということなのかな?この状態遷移の要因を排除できれば安全にキー書き込みができるかもしれません。次はこれか・・・。

2023年 9月 9日 (土)

基板

これまでCPS1での起動時キー書き込みは、BボードとCボードの間にアダプタを入れて、そこで一部の信号をバイパスする形で行ってきましたが、これだとどうしても基板の高さが増してしまうため、例のカプコンワールド2やVARTHのケースに収まらないという問題が生じます。

で、ちょっと前にこの問題を回避するナイスな方法を閃いたので、今日はそれを試してみることにしました。使うのは秋月電子で売っている超薄型の0.65mmピッチ SSOP28用ピッチ変換基板です。 正直、思いついた時点では基板を起こす覚悟だったんですが、まさかこんなドンピシャなものが市販されていようとはw

SSOP28用のピッチ変換基板

これをこんな風に7ピン分を切り出します。カッターよりもハサミで切った方が楽ですね。

7ピン分を切り出し

もう一つ、こんな感じで2ピン分を切り出します。

2ピン分を切り出し

次にCボード (今回は 92641C-1) のCPS-B-21のピンを上げていきます。まずは41番ピンから47番ピンまで。

41番ピンから47番ピンをリフトアップ

そして同様に61番ピンと62番ピンも上げます。

61番ピンと62番ピンも持ち上げ

41番ピンの近くにカプトンテープを貼り、絶縁処理 (この後もうちょっと貼り足しました)。

テープを貼って絶縁処理

そしたら、最初に切り出したピッチ変換基板を上げたピンの下に差し込みます。

ピッチ変換基板の断片を差し込む

そして先程持ち上げた7本のピンをハンダ付けします。

持ち上げたピンをハンダ付け

41番ピン、43番ピン、45〜47番ピンはGNDに配線すべき信号なので、繋ぎつつ、ちょうど変換基板の左右にあったGNDのパターンに適当な端材でCボードに固定w

GNDを配線しつつCボードに固定

もう一つの切り出したピッチ変化基板も、同様に61番ピンと62番ピンの下に滑り込ませて、持ち上げたピンをハンダ付けします (写真はその後、上からカプトンテープを貼った状態なのでわかりにくいですが・・・)

同様に61番ピンと62番ピンにもピッチ変換基板を装着

後は42番ピン、44番ピン、61番ピンおよび62番ピンの信号を個別に引き出します。ついでに+5V とGNDも引き出し。61番ピン・62番ピンの下に入れたピッチ変換基板は、うまくCボードに固定できていないため、ひとまずカプトンテープを上から貼って補強しています。非常に見苦しい・・・w

信号線をピッチ変換基板から引き出し

早速VARTHで試してみます。マルチプレクサに入れるBボード側の信号は、Cボードのコネクタ部分から取得しています。

早速テスト

起動しました!やった!

無事起動

が、しばらく放置していたところ、いつの間にか画面がブラックアウト。何やら不安定なようです・・・って、42番ピンと44番ピンをCボードから外した後、プルダウンするのを忘れていました (元々はR1とR2でプルダウンされている)。というわけで、雑にプルダウン抵抗を追加w

雑にプルダウン抵抗を追加

これで安定したっぽいです。いやー、イメージしていた方法が実際に可能であることが実証できて良かったです。ただ、実装難易度は置いておくにしても、61番ピン・62番ピンの下に割り込ませたピッチ変換基板が固定できていないなど、課題も多いですね。というか、M/B側から変な信号が来なければ、そもそも61番ピンと62番ピンには細工が不要なんですよね。うーん、何とかできないかなぁ。

2023年9月13日から2023年9月9日までの日記を表示中

中の人情報

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

カレンダー

2023年9月
          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

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ