2020年3月28日土曜日

FM-7の40Pスロットで動作するArduinoMega2560カードの紹介

FM-7の40Pスロットで動作するArduinoMega2560カードを紹介します


オリジナルのカード

このカードを着想されオリジナルを製作されたのは「FS-Micro」さんで、FM-7のROMの内容を読み出すために考案されたものです。
FS-Microさんはこのカードを用いて、FM-7本体をいじることなくメインROM,サブROMの内容を読み出しておられます。

FS-Microさん考案のカード


改造したカード

そのカードを見て「思い付きハードで七転八倒」さんがFM-7のRAMへの書き込みができるのではないかと着想し、その機能の実現のために必要な改造を施しました。

思い付きハードで七転八倒さん改造のカード

改造の要点は、アドレス線、制御線にバッファを入れ、リード/ライトに合わせて制御することです。


RAMにデータを書き込めました

その結果、FM-7のF-BASICからアドレス$FD05に1を書きこんで、Mega2560に切り替え、Mega2560に書き込んだ「思い付きハードで七転八倒」さんが作成されたプログラムによってメインRAMに必要なデータを書き込むことができましたが、書き込み後にMega2560側で$FD05に0を書き込んでもF-BASICに戻ってきませんでした。
ただし、FM-7をホットスタートすることで、F-BASICに戻って書き込んだデータを利用することができますので当初の目的は達成されました。
「思い付きハードで七転八倒」さんは、このカードを用いて、自作のFT-245RL利用の高速転送カードでFM-7とパソコン間の通信をするための、FM-7側のプログラムを送り込むために利用しておられます。


そのカードをいただきましたので

ちょうどその頃、私もZ80カードを製作しており、6809とZ80 カードとの切り替えに興味を持っているときでしたが、そのカードを頂きましたので、Mega2560のソフトをそのまま利用させていただいて、何とか$FD05に0を書き込んでF-BASICに戻ってくるようにできないものかと考えました。

Z80カードの製作経験から、FM-7のメインDRAMのリフレッシュが関係しているだろうと感じていましたし、6809系の経験が豊富な「カベキン」さんからもDRAMのリフレッシュが必要というアドバイスをいただいていましたので、Mega2560のソフトにリフレッシュルーチンを追加することで何とか実現できないかと試みました。
なお、以下は「思い付きハードで七転八倒」さんの構想による回路とMega2560のプログラムを元にして、度重なるアドバイスをいただきながら私が何とかリフレッシュルーチンをでっち上げることができたという、2人の共同作業による結果です。

リフレッシュ信号(もどき)の作成

まずは、FM-7本体のリフレッシュのタイミングをロジアナで観測してみました。


ロジアナでのタイミング観測


FM-7のF-BASIC動作中リフレッシュ信号を確認しました。
時間軸は0.2us/divです。


F-BASIC動作中のリフレッシュ信号

それを真似てリフレッシュ信号(もどき)を作成してみました。
時間軸は10us/divです。

Mega2560のリフレッシュ信号

ソフトで作成している信号ですので、形は似ていても速度がかなり異なりますが、これ以上は速くできませんでした。
2ms毎にデータをRAMに書き込むのを中断して、上記のリフレッシュ信号(もどき)をリフレッシュアドレス$00から$FFまで256回繰り返しています。

その結果は

その結果、RAMにデータを書き込んだ後、一応、F-BASICに戻ってくるようになりましたが、エラーメッセージが出ることがあります。
しかも不思議なことにそのエラーメッセージが毎回同じではありません。

エラーメッセージ

上のエラーメッセージは5回繰り返して実行したものですが、エラーが3回出ていますし、そのエラーメッセージが意味不明です。

とりあえずここまで

エラーメッセージが出たりするものの、一応、F-BASICに戻ってくるようになったので、これで良しとしようと思います。
ソフトでDRAMのリフレッシュ信号を生成しているつもりですが、時間的には本来のリフレッシュ信号とはかなり異なっていますので、リフレッシュ動作というよりもただRAMを読んでいるだけかもしれません。(そうであってもRAMの値が保持されれば良いわけですが...)
そもそもソフトでリフレッシュしようという方法が間違っている可能性もありますし、
こんな方法があるよというアドバイスなどをいただけたらありがたいです。

なお、Mega2560の回路図とスケッチは「思い付きハードで七転八倒」さんのブログで公開されます。

2020年3月13日金曜日

FM-7用Z80カードの第2作などを製作

FM-7用のZ80カード(第2作)がようやく製作できました


ようやく基板が届いたのでZ80カードを製作することができました。
第2作はI/O誌1985年9月号に掲載された記事「Z80カードの製作」(著者は北斗星さん)の回路です。
第1作のインターフェース誌のFM-8用の回路の流用では動作が不安定だったり、対応していないFM-7があったりしたのですが、その原因を究明できていないのに(恐らくDRAMのリフレッシュ周りだろうとは思っているのですが、)別の回路に移るというのは、安易な姿勢だとは思いますが、Z80の知識がないので仕方がないと自分を納得させています。

この回路はFM-7/New7/77用として設計されており、第1作にはなかった6809とZ80を切り替えるためにアドレス$FD05をアクセスする際の対応やリフレッシュ回路もあり、動作が期待できましたが、実際にあっけなく動作しました。
(ということで第3作として予定していた「F-BASIC解析マニュアル」中の回路はKiCadで書き上げて準備してありましたが、製作の必要はなさそうです。)

回路ですが、ほぼI/O誌の回路図のとおりで、私が変更したのはLS244をLS541に置き換えたのと、Z80がアクセスされたときに点灯するLEDを追加した部分だけですので、回路図を載せるのは控えておきます。

製作したZ80カードです。10㎝x8㎝に収まっています。

Z80カード表面


Z80カード裏面

動作している様子です。(余計なものが写っていますが...)
左の基板は同時に製作した修正版FDCカードです。
Step信号2倍化回路を通して2DDのFDD(TEAC FD-235HG)を使用しています。


動作全景


両カードのアップ


FM-CP/Mも正常に動作しています。

FM-CP/Mの起動画面


FDCカードも手直しをしました。


前作のミスを修正したFDCカードです。


FDCカード


今度はちゃんと裏面からFDDへのケーブルのコネクタを出しています。
しかし、今回もミスがあり、パターンカットは不要でしたが、GNDへのジャンパの追加が2本必要でした...(ちゃんと見直しをしたつもりでしたが、ダメですね。)
でも簡単な修正ですので、基板はこれで完成とします。

FDCカード裏面



ということで、手持ちの純正CP/M基板は温存して、以前から所有していながらほとんど使用していなかったCP/Mを安心して使えるようになりましたので、多少Z80への興味が出てきたこともあり、CP/MのBIOSを自分で書いてみようなどと(無謀ですね!)考えています。

どうやらZ80側では必要なパラメータを6809に渡して、実際の処理は6809にさせれば良いようですので、これならできるかななどと甘いことを考えています。
参考資料としては、中日電工さんのZ80ワンボードマイコン(ND80Z3.5 上の動作全景写真の左上に映っています!)と互換CP/Mシステムを所有しておりますので、2012年の互換CP/M開発当時のブログを読みながら、ND80Z3.5上にCP/Mシステムを構築するという試みをなぞっているところです。
BIOSが作れれば、CP/M本体のソースは公開されていますので(上記ブログによれば何ヶ所かバグがあるようですが)、自分用のCP/Mができあがることになります。
いつになるかは全く分かりませんが、できましたらブログで紹介させていただきます。