FM-7のZ80スロットを使う拡張カードII実践編PART5

当面のまとめになります。

・回路図(robotdyn20200220.pdf)
https://onedrive.live.com/?authkey=%21Aln7kHlkHDL28EE&cid=6357DCB7DCA88133&id=6357DCB7DCA88133%21243&parId=6357DCB7DCA88133%21108&o=OneUp

一部を除き期待通りに動作する回路図です。現状は「ATmega2560」から出力する
「QB_OUT」、「EB_OUT」、「RWB_OUT」、及び「データのビット0」の各種の
信号を「バッファ:74LS244」の入力に与えてます。ただし「データのビット0」
信号を「74LS244」を通さず、直接40ピンコネクタ(FM-7のバス)に与えても
安定した動作になるなら、「QB_OUT」信号を「D11」ではなく「D10」に変更する
可能性はあります。理由は当初予定になかった機能のために空中配線が3本になって
いますが上記の変更で空中配線が2本になるからです。

前回の回路図からの変更点
1)DRAMのリフレッシュ機能の追加
「ATmega2560」の「D5」からの出力信号を40ピンコネクタの「REFCH」に
与えてます。(空中配線の1本目)

2)安定動作させるために(こうしないと書き込み不可能)信号の強化
「QB(_OUT)」信号を「74LS244」を通して40ピンコネクタの「QB」に
与えてます。このため一旦(1本)は「QB(_OUT)」と「74LS244」の4番ピンを
接続し、「74LS244」の16番ピンと40ピンコネクタの「QB」とを接続するため
合計で、この機能のために2本の空中配線が必要になっています。今回製作した
基板での実配線では、「QB(_OUT)」と「74LS244」との接続は同じですが
「74LS244」の16番ピンの出力は、既に「QB」信号として存在している
「ATmega2560」の「D48」ピンとを接続してます。自分は、この実装では
半田ではなくワイヤーラッピングで「D48」を通して、40ピンコネクタの
「QB」とを接続としました。

・Arduino(ATmega2560)のスケッチ(sketch_FM7_ATmega2560.info.ino)
回路図と同じリンク先に最新のスケッチがあります。(なお古いスケッチは削除)

1)DRAMのリフレッシュ機能の追加
前回も書きましたけど再掲します。loop()の中のswitch-caseの先頭に入れました。
規則的な周期でなくても構わないと認識してます。

pinMode(5, OUTPUT); // for PWM outputmode 20200215
digitalWrite(5, PULSE); // PWM=LOW パルス
delay(0.5);

digitalWrite(5, HIGH); // PWM=HIGH パルス

2)メモリへの書き込み
「6809」がDRAMに書き込む場合とシーケンスは同一です。最初に自分が製作した
回路では「ATmega2560」からの出力を直接40ピンコネクタの「QB」に入れていた
ので、どう足掻いてもメモリへの書き込みはできませんでした。(恥ずかしい限りです)

・「ATmega2560 → 6809」での制約条件・・・何故3個のバッファが必要か
現状では残念ながらZ80カードのように必ずしも正常復帰するとは限りませんが
「6809」の「HALT」端子に「HIGH」を与えて復帰する時には「HIGH」を与えて
から1クロック後になります。(千葉憲昭氏の「完全理解 6809 のすべて」より)
ですので「ATmega2560 → 6809」に復帰する際は、FM-7上の「ATmega2560」
の影響を1クロック以内に消滅する必要があります。(当初は即時と勘違い)

また「ATmega2560」から「$FD05、0」的なコードを実行するにはアドレス用として
「2ポート」、データ用として「1ポート」、「RWB」用として「1ポート」必要に
なります。ただしデータ用としては0ビットのみの必要となりますので「RWB」と
「データ用の0ビット」をまとめて「1ポート」する事も可能です。以上を勘案し
「ATmega2560」のソフトのみで1クロック以内に、「3ポート」を出力から
FM-7上のバスに影響しない「入力」にすることは不可能です。それがバッファ
として3個のTTLを用意した理由になります。逆に「6809」の1クロック以内に
「ATmega2560」のマシン語なら1命令は実行できますので、アドレス用の
「74LS245」を1個は省力できる可能性があります。あるいはTTLの個数は
現状のままで、Z80WがLOWの時に書き込み以外にFM-7のメモリの内容を
読むこともできる可能性があります。

3)loop()の中からコールしてる関数
setLAddress()、setData()のみです。他はアセンブラ的になって
しまいました。一部アセンブラ自体もあります。


・画像もあった方が分かり易いでしょうか
FM-7用ATmega-20200222
https://imgur.com/a/ccBnqww
上から順に、FM-7への装着状態、正常復帰、ホットスタート復帰
三種の神器?、名誉の負傷?20200222

因みに「三種の神器?」と言うのはラッピングツール用のツールで
ラッピングワイヤーの皮膜を100回以上「差し歯」で剥していたら
歯肉が炎症し痛くなり、今日の午前中は歯科医院で受診しました。
歯科医から「差し歯が割れなくて良かったね」と言われました。
割れると抜歯するので、前歯がなくなったら恥ずかしく人前に出る
ことができなくなると思います。ラッピングワイヤーの皮膜を剥す
上手な方法は100円ライター等で焼くことでしょうか。
尚ハードの変更を、もう少し進展させたかったのですが歯肉が炎症
したため空中配線を減らす試みを、当面先送りすることにしました。


・今後の当基板の用途
当面はローダーとして整理していきますが、FM-7のメモリが故障
してる状態で、故障箇所の特定で役に立ちそうです。

それではまた。
スポンサーサイト



FM-7のZ80スロットを使う拡張カードII実践編PART4

今回は概要のみの報告ですが、ほぼ自分が納得できる状況になりました。

・DRAMのリフレッシュ機能を追加しました。
極めて短い時間であればメモリに内容が残ることもありますが基本的に「6809」
以外で動作させる時には必要のようです。

ハードは「ATmega2560」の「D5」ピンからパルスを生成します。ソフトとしては
loop() の中で下のようにしました。規則的な周期でなくて構わないようです。

pinMode(5, OUTPUT); // for PWM outputmode 20200215
digitalWrite(5, LOW); // PWM=LOW パルス
delay(0.5);
digitalWrite(5, HIGH); // PWM=HIGH パルス

ただし周期が長いとDRAMの内容は消失します。その辺りは試行して決めてください。

・メモリへの書き込みで基本を疎かにしてました。
当然、「Q」、「E」信号を用意をしてましたが重要性を理解してませんでした。
「形」だけ真似しただけでしたので、副題の七転八倒的な試行錯誤をしました。
結論は(制御信号とも言えるのかは判りませんが)読み・書きで「Q」、「E」は
TTLを通して使べきです。プルアップ(ダウン)で代用が利くかも知れませんが
桜井様が指摘した「TTLはあった方が良い」の意味を痛感しました。何をしても
上手く書き込めないので、出発点の桜井様の回路図を改めて確認すると「Q」も
プルダウンされていたので「E」と同様にTTLを通して使ってみました。すると
アッサリと書き込みできました。

・「ATmega2560 → 6809」の復帰について
「ATmega2560」がバスを支配してる時に「POKE &HFD05,0」的なコードで
復帰することもあります。ただ復帰しないこともあって挙動が定まってません。
この辺り、FM-7と言うハードの経年劣化がありますので原因は特定できません。

・上のコード実行後のホットスタートでの復帰について
ほぼ100%復帰してますので、自分が納得できる状況になった次第です。
今回の基板で、昨年の前半まで製作していた「FT245RL」用のローダー的な
使い方ができたので目的は達成したと考えてます。復帰率がTTLを使わない
基板の時は70%でしたが、TTLを使った基板では、ほぼ100%です。
リフレッシュ機能を追加してからホットスタートでの復帰で失敗はないです。
もしかしたら、TTLを使わない基板でもリフレッシュ機能を追加すれば、
復帰率は向上するかも知れませんが、現在は確認する予定はないです。

・ハード、ソフトとも詳細は次回で
ソフトは整理しなくてはなりません。

それではまた。

FM-7のZ80スロットを使う拡張カードII実践編PART3

実践編PART2 以降に判った内容、その後の状況報告

・DRAMのリフレッシュ機能を必要する可能性が濃厚
当ブログのリンク先として登録している「かべきん」様よりDRAMリフレッシュ機能が
必要ではと貴重な情報を頂きました。また、そうであればと同じくリンク先として登録
している「6809 / 6800とFLEX」様より数種類のリフレッシュ回路があると言う情報を
頂きました。更には、この基板の件でコメントを頂いた「tomi9」様も同様の趣旨を
指摘されてます。流石に鈍感な自分もDRAMリフレッシュについて調べました。
早速、ググるとFM関連で情報を公開してくれてるハセリン氏のサイトで、Z80カードの
動作時にはリフレッシュ用のパルスを生成してることが判りました。ただZ80カードでは
周波数が過剰で「6809」であれば76.8KHzとのことですが同時に30年以上前にFM関連
の情報誌でリフレッシュの周波数下げてることも可能的な記事が頭を霞めました。更に
リフレッシュの方法が数種類あるなら、ATmega2560 が単独で発生させる PWM で代用が
利くのでは考え確かめてみました。結果的に状況は進展しました。しかし目的とする
「ATmega2560 → 6809」には至ってません。

また他の情報として実践編PART2で言及した、FM-7 のアドレス「0xFD05」に「0」を
設定し「RWB = LOW」 にすると EB のパルスを与えなくても「FM-7システム仕様書」
の1ー66 にある フリップフロップの/Q 信号が 「HIGH」に変わる理由が判りました。
この件については、やはり「かべきん」様より、「0xFD05」の操作で 「6809」に戻す
際は EB のパルスは RWB と同期するけど パルス自体はFM-7 側の機構で与えるとの
ことです。尚、情報は技術評論社のプロセッサ誌1988/5月号の下の記事とのことです。
「FM-7で各種CPUを走らせるために」

改めて情報提供してくれた各氏と情報を公開してくれているハセリン氏に感謝します。

・ATmega2560 で PWM を発生させて進展した状況
下記の BASIC コードを実行した後には ATmega2560 に制御が移りますが
再度、「FM-7システム仕様書」の1ー66 にある フリップフロップの/Q 信号を
「HIGH」にするコードを実行した後には ホットスタートで BASIC に戻る確率が
大きくなりました。因みにホットスタートとは(「BREAK」 + 「RESET」)です。

10 POKE &HFD05,1 (6809が停止します。Z80搭載時にはZ80が動作します。)
20 LIST (←ここはシンタックスエラーでも構わないです)

ただ FM-7 のメモリの書き込み時は PWM を一旦停止させなくてはならないようです。
この辺り、もう少し ATmega2560 と FM-7 の CPU の切替の仕組みを調べる必要が
あります。現在残ってる課題は「メモリへの書き込み」と、当初から目的としている
「ATmega2560 → 6809」です。敵を知り己を知れば、と言う感じで気長に行きます。

尚、自分としては「ATmega2560」でメモリの書き込みができ、例えホットスタートで
あったとしても確実に BASIC に戻る状況になれば納得できます。

それではまた。

FM-7のZ80スロットを使う拡張カードII実践編PART2

・実践編PART1 以降に判った内容、その後の状況報告
思い込みが多いですけど更に判明したことは ATmega2560 から
FM-7 のアドレス「0xFD05」に「0」を設定し [RWB = LOW] にすると
「EB=0 → EB=1」のパルスを与えなくても「FM-7システム仕様書」の
1ー66 にある フリップフロップの/Q 信号が 「HIGH」に変わります。
更には上記の設定で 「6809」の「HALT」も解除されるようです。
「6809」の「HALT」が解除された時に「BA」信号が「LOW」になる
ことから判断しました。(BA はバス・アベイラブル信号)

しかし下記の BASIC コードを実行しても「RUN」のまま戻ってきません。
10 POKE &HFD05,1 (6809が停止します。Z80搭載時にはZ80が動作します。)
20 LIST (←ここはシンタックスエラーでも構わないです)

ですので「空中配線」の必要はなく、原因は「割り込みの対応」かと考え
重点的に調べようと考えてます。(割り込み対応は経験が少ないです)

それではまた。

FM-7のZ80スロットを使う拡張カードII実践編PART1

・動作確認結果と(中間)報告
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個程にしました。その一風景です。

今回はここまでです。御意見、御質問をお待ちしてます。

プロフィール

vehwk3yxv7hw

Author:vehwk3yxv7hw
今から40年近く前に発売されたFM-7
と言う8ビット機のデータ管理を
現行PCでできるようにしましたが、
この程度の作業でも1年以上かかり
ました。とは言え現行PCでデータが
管理できれば昔のPCでも間接的とは
言えインターネットに接続してると
考えました。昔からFM-7用基板を
製作したい思いもありました。
FM-7の機能追加としてソフト的に
あと一つ残ってます。某ブログを
利用し公開してましたけど閉鎖に
伴いココを新発信基地とします。
思いはFM-7のハードに止まらず
昔のゲーム機の機能も拡張も考えて
います。尚写真は30年以上前です。

検索フォーム

ブロとも申請フォーム

QRコード

QR