2020/01/26
・動作確認結果と(中間)報告
Z80Wの信号を「LOW」から「HIGH」に変更することはできましたけど
目的とする「6809」の「HALT」を解除はできませんでした。
もう少し踏み込んで言うとトリッキー的な方法を用いて1回だけは
「6809」の「HALT」を解除はできました。以上のことから「6809」の
「HALT」解除ができない原因は、バッファの有無ではなく他の原因と
言うことになりました。ただし桜井様が指摘するようにバッファは
ある方が解除等でも有用であると考えます。例としては「HALT」を
解除した後にバッファの衝突が生じませんので。
また「6809」において有名な千葉憲昭氏の「完全理解 6809 のすべて」に
よると「HALT」状態にある「6809」が「HALT」状態から再始動する時は
1.5クロックほどの時間を必要としますので、その間は ATmega2560 が
FM-7 のバスを支配し影響を与えていても不都合は生じないと考えます。
・テストした内容
(1)先ずは基板に部品を実装しました。↓の画像の1段目と2段目です。
https://imgur.com/a/juCn9OR
まだまだ(と言うか年齢的に向上の可能性は低いです)半田の腕前は
下手ですけど、この程度ならギリギリ良いかと考え公開します。
今回のATmega2560用に使うためには、最初は忘れてましたけど基板に
コネクタを更に加えなくてはなりません。尚空中配線については(6)で
改めて説明します。
(2)この基板をFM-7に装着し動かします、スケッチ(ソース)は↓です。
sketch_FM7_ATmega2560.info.ino
https://onedrive.live.com/?authkey=%21Aln7kHlkHDL28EE&id=6357DCB7DCA88133%21108&cid=6357DCB7DCA88133
スケッチを書いた後は一旦はUSBコードを外し、FM-7の電源を入れてから
再度USBコードを接続して下さい。
(3)回路図とATmega2560のレジスタを見ながらデバッグしました。
デバッグ出力(GtkTerm)内容の意味する所は「Z80W」が「HIGH」であれば
「Hello world-6」を出力します。途中「Hello world-3」に変わった理由は
FM-7 で下記の BASIC コードを実行し「Z80W」が「LOW」になったからです。
10 POKE &HFD05,1 (6809が停止します。Z80搭載時にはZ80が動作します。)
20 LIST (←ここはシンタックスエラーでも構わないです)
(4)「Hello 4 START」 から アドレス「0xFD05」に「0」を書き込み、
「6809」の「HALT」を解除する試みをしてます。「Hello world-7」は
上の操作をするための関数「writeCPUSw()」に入ったことを意味します。
「DATA0ビット、EB、RWB」の信号を CPU の切り換え用にしてます。
「EB_OUT」に 「0 → 1」のパルスを与えます。「Hello world-9」の
出力はZ80Wの信号が「LOW」から「HIGH」になった瞬間です。
「Hello 4 END」は「writeCPUSw()」から戻ったことを意味します。
その後の再度の「Hello world-6」の出力はZ80Wの信号が「HIGH」に
変わったことを意味してます。しかし結果は「6809」の「HALT」を解除
できませんでした。
(5)「6809」の「HALT」を解除をしたトリッキー的な方法
入力として使用する「Z80W」の信号線を出力として使い、ATmega2560
から「HIGH」を与えました。「FM-7システム仕様書」の1ー66のように
フリップフロップの/Q 信号が、そのまま40PINコネクタに出力されて
いれば(この間にTTL等のICがないと言う意味です)強制的に「HALT」
端子に「HIGH」を与える意味はあるのではと考えました。
sketch_FM7_ATmega2560.info.ino の「#ifdef Z80W_TEST」
と「#endif」の間のコードです。
(6)基板における空中配線の目的
この目的を実行するコードは、まだ実装してません。目的は(5)と
同じですが、「Z80W」の信号が「HIGH」にも関わらず「6809」が
「HALT」の状態にある時に、74LS244の使ってない回路を使って
「Z80W」の信号線を経由して、強制的に「6809」の「HALT」端子に
「HIGH」を与える予定です。(無謀なら中止します)
すんなり「HALT」解除しない原因をバッファがなくて、バスの衝突だと
思いこんでいましたので、設計する時に74LS244の使ってない回路の
入力をそのまま「GND」にしたことが悔やまれます。他の使い道を考えて、
ATmega2560のD11端子を74LS244の未使用入力端子と接続しておくべき
でした。そうしていれば空中配線は1本で済みました。残念なことに、
流石に、そこまでは気が回らなかったです。年があけて、回路に
LED を追加する等の遊び心に走り、詰めが甘かったです。
・今回の件とは全く関係ないですがマンション町内会主催の恒例の
アイスキャンドルの風景です。昨年までは製作するアイスが500個を
超えてましたけど、マンションも住民も高齢化と言うことで今年は
300個程にしました。その一風景です。
今回はここまでです。御意見、御質問をお待ちしてます。