2020/02/22
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のメモリが故障
してる時に、故障箇所の特定においても役に立ちそうです。
それではまた。