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上の
バスに影響しない「入力」にすることは不可能ですので「Z80W」が「HIGH」になる
直後にバッファを用いて、ハイ・インピーダンスにしてます。その機能のために
バッファ用に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 に戻る状況になれば納得できます。

それではまた。

プロフィール

vehwk3yxv7hw

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

検索フォーム

ブロとも申請フォーム

QRコード

QR