goo blog サービス終了のお知らせ 

日本橋電気街徘徊日誌

いいとしのおっさんがジャンク屋で買ったものをいじったり電子工作したりします。

FM-7のFDCエミュカードのバグもとれてないのにまた拡張カードを作った件

2018-08-17 20:59:14 | 電子工作

FM-7のFDCエミュカードのバグのバグ取りに非常に苦しんで
もう一年以上放置ですが、やっぱり漢字ROMぐらいはほしいなと
いうことで、3月ごろに漢字ROM機能だけ作りました。

最初は漢字ROM機能だけ載せたんですが、
ジャンクのPCIカードからはがしてきたMAX3128Aの
1/3くらいの容量しか使ってなくてもったいないので
SPIマスタ通信機能を載せました。
それでもまだまだ容量が余っているのでI/O 84/1に
掲載されている、I/O領域に小さなROMをマップして、
プログラムのローダを置く機能も載せました。
そこまでできたなら、そのローダを使用して
DISK BASICをSPIフラッシュから起動してやることも
可能だろうと思い、この連休にチャレンジしたところ、
あっさりできました。
BIOSを拡張する形なのでDE番地をコールしないものや
直接FDCを叩くものは全く動きませんが雑誌に載ってたような
ツール類やゲームはたいした問題もなく動くんじゃないかと
思います。
これはほぼCPLDとROMとフラッシュメモリをつなぐだけで
再現性も高そうなので同じものを作って楽しんでいただけたら
と思います。
(いないと思うけど、勝手に同じもの作って売るのはかんべんしてね)

 



$fdc0にローダーをマップしているのでそこから起動。

 

 


どこからでもいいからシステムディスクのC=0,H=0,R=15から
C=0,H=1,R=16までの5キロを$6e00から展開して$6e00から
実行すればディスクがつながっていなくても起動できるん
ですね。あとでOh!FMの過去記事を読み直してみれば
それを利用したRAMディスクの記事も見つかりましたが
最初はそんなことできるんだろうかという感じでしたが
あっさり起動しました。

 

 

次はBIOSを拡張します。
BASICの起動処理でディスクBASICなら$6e00まで、
ROM BASICなら$8000まで初期化するように指定するので
じゃあメモリの初期化を$6c00までにしておいて
そこにBIOSを拡張するプログラムを置いておこうかと
考えたのですが、なぜかメモリが$6e00付近まで初期化
されていないとBASIC起動時に暴走するので
BASICの起動処理の空き領域$6f00にBIOS拡張プログラムの
ローダを仕込むことにしました。
ここをコールするとBIOS拡張プログラムをSPIフラッシュから
読み込んでBIOSを拡張します。

 

拡張BIOSはBASICテキスト領域の前に配置しました。
最初は$7000から配置したのですが、起動後BASICに
戻ってこない前提で$7000-$7fffを破壊するプログラムは
ここにBIOSがあると動かないのでそうしました。
プログラム中の最後にROMのnewの処理に飛ばしてやれば
かっこいいんですが、私が参考にした本と私のFM-7では
newの位置が違っているようで暴走し、ROMのテーブルを
プログラムで調べて飛ばすのも面倒だったので
これでいいことにしました。


BIOSが拡張されたのでディスクが見えるようになりました。
BIOSが拡張されるまでディスクが接続されていないので
STARTUPは動きません。

 

 

いつものホバーアタックです。

 

DOH-Cのディスク版も動いてくれました。
設計データ等は次の記事で。

 

 

 

 

 

 

 


FM-7用拡張ボードを作ってる件(その8)

2017-03-08 00:48:12 | 電子工作

FM-7用拡張ボード(FDC-FDDエミュレータボード)をえんえん
作ってる件で、そこそこ動いてきたのでFM-7にXPC-4で
PCの液晶をつないでカラー表示できるようになったので
動作状況の画面をあげてみる。

FDC-FDDエミュレータボードのマイコンにシリアルつないで状況を表示や操作ができるようにしてある。
画像はマイコンが起動してSDカードを認識した状態。

 

 

 

すでに上げた画像と同じだけどDISK BASIC起動OK。

 

filesの結果。
システムディスクにツール他をいれてある。
edas20というのはエディタアセンブラ2.0なんだけど、
高校生のころ何かの雑誌から打ち込んだものなんだけど、
打ち込みミスがあるのかfccでバグるので打ち込みなおしたいの
だけど、どこに載ってたのかわからん・・・。

気をとりなおしてディスク交換してライトプロテクト。

 

アルファ。

 

 

いちおう本物もってますよ。
レコード(ソノシートの一種か?)の反りがやばい。
駿河屋でえらい値段になっててびっくり。

 

大戦略。

 

サンダーフォース。

 

テグザー。

 

 

A列車。

 

 

OS0。
一応起動はあっさりしたけど。

付属のEDコマンドを起動して、ファイル読もうとしたらハング。

まだCPLDのVHDLがバグってるのかマイコンと
インタフェースし損ねてる。
もうちょっと直したいが、約1名ぐらいの方から
リクエストもあるようなので、現時点のものを
公開してしまってもよいのだけど、アップロード先を
確保するのがちょっと壁。
個人情報の類をいかに出さないかでこだわっている
のだけど、われながら偏屈おやじすぎる。

 


FM-7用拡張ボードを作ってる件(その7)

2017-02-26 22:39:49 | 電子工作


FM-7用FDC-FDDエミュレーションボードを
えんえん作ってる件で、CPLDの先にぶらさがってる
マイコン(ATMETA328P)のプログラムROMにホバーアタックを
書き込んでそれなりに安定して動くようになったので
ChaN様作成のfatfsをatmega328pで動くようにした
妥協の電子工作様のサンプルを組み込んでSDカードから
D77イメージを読み込んで動くようにしてみた。
DISK BASICをそのままつかっているものは動くけど、
ためしにサンダーフォースのイメージを食わしてみたけら
これは動かなかった。直接FDC叩いているものは駄目な
ようなので、FDCエミュレーションが浅すぎるんだろうな。
単に実装していないところを叩かれているのならいいけど、
CPLDで実現しているインタフェース部分で不十分なところが
あるのでなければいいが・・・
どうするか。とりあえずDISK BASICでSAVEができるように
できれば(今は読み込みだけ実装)スタンドアローンで
運用できるので先にSAVEできるようにするか。
それともサンダーフォースのディスクアクセスを
調査するか。

デルフィスが動いた。

 


FM-7用拡張ボードを作ってる件(その6)

2017-02-15 05:09:41 | 電子工作

今日はえんえんいじってきたFM-7用FDC-FDDエミュレータボードの
動作写真を写真を貼る。

去年あたりの画像から写りがわりとましになっているのは
携帯のカメラに自動ピントあわせ機能があるのに
気づいたからなんてとても書けない。

電源いれるぞ。

 

 

DISK BASIC起動。

 

 

以前のバグだらけでなんとなく動いている状態でも
ここまではたまには動いたけど、ほぼ確実に動く状態になってうれしい。
電源オン一発目でここまで動かないことがあるのでまだ多少やばめの
バグがあるのかと思ったけど、それはどうもデバッグ用USBシリアルが
通電しない場合になんかおかしいみたいだったので拍子抜け。

このへんも以前もたまに動いたかな。当たり前に動くようになってうれしい。

 

LOAD

 

当時I/Oから打ち込んで、去年だっけか、カセットテープからエミュ用に
試行錯誤してコンバートしたもの。わりと二度と使わなさそうなノウハウの
いる作業だったけど、もう何をどうしたかおぼえてないや・・・
作者・移植者の人は今はどうされているのか。


 

 

run

 

当時はテンキー操作はなんでもなかったけど、今は指がついてこないので
パラレルにジョイスティックをつないでパッチあてするかな。

 

モノクロ出力につないでいるのでしょぼしょぼ。
RGB-NTSCコンバータをどうにかしたいな。
まともに作るより、日本橋でゴミ値ででてるPS1を
つぶして基板を切り出すのが安いんだろうな。


操作しつつカメラとるのはなかなかムヅいな。

 


FM-7用拡張ボードを作ってる件(その5)

2017-02-13 17:53:05 | 電子工作

2013年の末ぐらいからなのかな。
ちょっと手をつけては挫折を繰り返してきた
FM-7用FDC-FDDエミュレータボードだけど、
ようやくそれっぽく動き出した。

最初はトラ技2006/4付録のCPLD基板を
ダイオードと抵抗経由してFM-7のバスに
接続してi/oポートというかレジスタとして
読み書きできるようにわりと簡単にできて
もうほとんどできたような気分になって
AVRマイコン(atmega328p)をつなごうと
してどんなことをすればいいか考えてみて
たとえば0xfd19(トラック)に0、0xfd1a(セクタ)に
1、0xfd1c(ヘッド)に0、0xfd18(コマンド)に0x80を
CPUが書き込んだら、
0x19 0x00 0x1a 0x01 0x1c 0x00 0x18 0x80
みたいなデータをそのまま渡してやって、
それに対する反応として0xfd1bにデータを返して
やるようにすればだいたいうまくいきそうな
気がして、ほぼその通りに作ったんだけど、
コマンドにデータを書かれたらステータスレジスタに
即busyが立つようにするとか、READコマンドで
データをデータレジスタに反映したらDRQを立てて、
CPUがデータを読み込んだらそれを認識したと
AVRマイコンに通知してDRQを寝かせるとか
そんな感じのロジックがAVRマイコンとCPLDに
要るんだけど、CPLDのロジックを記述する方法が
よくわからなくて七転八倒でした。

まあ、まだほんとに完成しているわけではなくて、
SEEK・RESTORE・READあたりをF-BASICが動く程度に
実装して、FM-7用のプログラムもDISK BASIC関連の
セクタとBASIC+機械語のプログラムをAVRマイコンの
プログラムメモリに押し込んであるだけなんだけどね。

今後の課題は、動いた直後は完璧かと狂喜したけど
パワーオン時に動かない時があるので初回処理が
間に合っていないのか、パワーオン時の信号線の処理が
悪いのか確認してどうするか考えるのと、なんとか
ChaN氏のfatfsをつないでSDカード上のイメージを
扱えるようにすることだな。その次は書き込みも
できるようにしたいかな。

ロジックを記述するのではまった部分は、CPLDは
CPLD基板上のクロックで動くのにFM-7の非同期の
信号をどう取り込むかという話で、
process(clk)
begin
 if(nrst='0') then
 elsif(clk'event and clk='1') then
としてCPLD基板のクロックのエッジのイベントでしか
書けないのにどのようにして拡張バスのEやらQやらが
立ったり寝たりしたのを確実に検知するかってところです。
(我ながら根本的すぎる)
その次は信号を複数の場所から変更しようとすると
マイコンの考えが全く通用しないところか。回路として
考えれば確かにそれが正しいんだけどマイコンにCで書いてる
感じからするとトンチみたいな記述になる。
こーいうのは初心者向けの本には書かれていないし
初級以上の本には書かれているんだろうけど、独学で
どはまりしていると書かれている意味が理解できなかったり。
教育を受けられる環境なら、例をだして説明されたら
それですっと越えられる山なんだろうけど。

理解がちょっと進んだんで、次はRS232Cカード+漢字RAMカード
を作ろうかと。FDDエミュよりはだいぶ楽なはず。

画像は明日以降ぽちぽち貼る予定。

 

 


FM-7用拡張ボードを作ってる件(その4)

2016-02-23 11:05:53 | 電子工作


今見返すとこのFM-7の拡張ボードは2013年の末から作り始めたみたいですが、
ようやく最初に考えたことの原点までたどりつきました。

トラ技2006/4付録のALTERA MAX2基板でFM-7のインターフェースを作り、
FM-7のブートROMからはFDC MB8877に見えるようにふるまい、
MAX2基板の裏にあるAVRマイコンから1セクタ読み出して実行させることが
できましたのでとりあえず画像をあげます。

長かった・・・

 

扇風機が非常に目立つな。

右側のちっこいモニターにモノクロでつないでる。




非常にみにくいけどBOOT FROM FDC-EMUって表示するブートレコードを拡張ボードから転送して表示したもの。
AVRマイコンはATMEGA328Pをwinavrで使用してて、まだ4キロバイトくらいしか使ってないので、
今はまだブートセクタを送り込む機能しかないけど、もうちょっとFDCの機能を整えて、小さいゲームをマイコン内に
仕込むこともできそう。
最低限やりたかったことができてすっきりした。


-----------------

追記

DISK BASICの先頭トラックをAVRに書き込んでみたら起動した。

ふつうに起動しないことがあるのでどこがバグってるのかきっちり確認してからじゃないと先にすすめないな。なんとかホバーアタックがAVRに入りそうなので遊びつつ調査だ。

 

 

 

 


FM-7用拡張ボードを作ってる件(その3)

2016-02-17 12:26:50 | 電子工作

すごくひさしぶりの書き込み。
レトロPCの世界では去年一気に資料の入手性がよくなったのもあり
気分が盛り上がったので、2014年にある程度までできたけど
私の理解度が低いためほったらかしになってたFM-7の拡張基板に
再度取り組んでみました。

FM-7 - CPLD(altera max2) - マイコン(ATMEGA328P) - シリアル(FT232RL) - PCのテラターム
上記のような構成でCPLD上のレジスタに1バイト書き込まれるごとに
アドレス下位8ビットとデータ8ビットをマイコンに出力して、それを
マイコンで処理した結果をFM-7に返すということをやろうとしてるんだけど
SPIやら8ビットパラレルやらで書き出してみたけど、AVR 20MHzの速度だと
間に合わない感じ。

書き込まれたら、ステータスのビジーを立てるなりなんなりで
FM-7を待たせられるかと思ったけど、わりとタイミング決め打ちで
書き込んでくるみたいでところどころ正しくデータ取得できない状態だった。

今の構成だともっとGPIOを含めて速いマイコンか
FIFOバッファつきのマイコンが必要なのかな。
手持ちだと付録のSH2Aか超低価格だったLM4F120が使えそう。

もっと大きなCPLDかFPGAを使ってたらFIFOを記述するんだろうけど、
マクロセルが大きくなりそうなので日本橋でFIFO(TC74HC40105)を
買ってきてつけてみたらとりあえず取りこぼしはなくなったぽい。
千石で230円だったかな。マルツは店頭にはおいてないけど在庫は
あるようなので(通販にはある)取り寄せてもらえるかも。

今はこんな構成
FM-7 - CPLD(altera max2) - FIFO(TC74HC40105- マイコン(ATMEGA328P) - シリアル(FT232RL) - PCのテラターム

EXTDETを設定してFM-7を起動したところ、ブートromが以下の様な書き込みを
していることを検出できた。

1d 80 ドライブ0のモーターオン
1d 81 ドライブ1のモーターオン
1d 82 ドライブ2のモーターオン
1d 83 ドライブ3のモーターオン
1d 80 ドライブ0セレクト
1b ff データ0セット
19 00 トラック0セット
1c 00 ヘッド0セット
1a 01 セクタ1セット
18 80 リードセクタ

わりとそれらしいデータがとれてる。
ブートromはfd18に$80を書き込んだあとデータ待ちかなにかで永久ループに
入っているのかな? マイコン側がバグってて取得出来てないデータが
あるかもしれないけど、1ステップ進んだ感じ。画像は後日。

 

 

2014年に作成して行き詰まっていた拡張ボードの現状。

左側の裏返ったサブボードにATMEGA328PとTC74HC40105が載ってる。

 

 

拡張ボードにつないだUSBシリアルから取得したデータ。

 

 


TMS9918A(敗北)

2015-08-17 18:17:16 | 電子工作


TMS9918Aを通販で入手できたので、ちょっと形にしてみるかと基板を彫ってみた。
1枚目はパッドやVIAが小さくて、ハンダするとパターン剥がれが発生したので
作り直して、これは2枚目。私にしてはよくできたほう。
前の記事で書き忘れたけど、eagleで書いた図からGコードへの変換はキデッジ様の
スクリプトを使わせてもらってます。ありがたいです。
キデッジ様のショップはVカッターが安くてよかったのですが閉めてしまわれたようです。
再開してくれないかな。

 


TMS9918にDRAMとクリスタルを実装して、マイコンのバスにつないでデコードしてやれば
使えるビデオカードというふうにしたんだけど、稼働確認がつらそうなので、
MX10のTMS9118を外してつないでみた。

 


結果、映るんだけどおかしい。DRAMは16Kビットx1ビットのものが手に入らなくて
256Kビットx1ビットのものをそれっぽくつないであるんだけど、間違ってるみたい。
回路図を見直して再挑戦する予定。

 

 

 

基板はこんな感じ。

片面なので部品面のジャンパがすごい。

 


FM-7用拡張ボードを作ってる件(その2)

2014-01-20 12:03:10 | 電子工作

 


FM-7に拡張ボードを作ってて、前回はpokeでLEDチカチカ
(ボードへの書き込み)がまでできてて、今回はその続き。

 

ボードからの読み込みはE=1のときにデータを出力してやれば
FM-7からpeekで読み込めた。その次は何がやりたいかというと、
書き込んだ瞬間に一回だけ何かするというのを実現したい。
VHDLでクロックが1になったときに信号を確認して動かしているので、
書き込まれた瞬間に1回だけ何かするような場合は最初にその状態に
なった場合だけ実行するようにステートを管理しないといけない。
クロックのかわりに各信号の変化点で何かするようにすれば
書きやすいのだけど、よくわからないけどクロックに同期して動く
ように記述するものらしい。

 


peekするごとにカウントアップするi/oポートが実現できた。


読み込み・書き込みとそのタイミング取得ができたので、
ようやく意味のあることができそう。


fd18~fd1fにレジスタを作成して、
読み書きできることを確認。
外部に接続するマイコン用のインターフェースを考えてみる。

 


FM-7を二十数年ぶりに動かしたので、当時は興味がなかったハードウェア工作(拡張ボード作成)をやってみた。

2014-01-13 18:22:49 | 電子工作

高校に入学したときに、はじめて入手したパソコンがFM-7でした。
新品パソコンなんて買ってもらえなくて、入学祝いということで数万円出してもらってようやく中古を入手できたんだったかな。
そのころはもうFMはかなりすたれていたのですが、そのせいもあって中古で数万円に落ちてて、かつ性能もそこそこということでFM-7を選んだような気がするがよくおぼえていない。
最初は本体・デジタル8ピンのモニタ・データレコーダという組み合わせだったような気がするが、デジタル8ピンモニタはニデコのモニタと富士通のMB27343の両方を持ってた記憶があります。ニデコのモニタは何年かあとにFM-NEW7のセットを捨て値で買った時についてきたのだったかなあ。歳をとって、いろいろ忘れてる。
当時はまだレンタルソフト屋というのが普通にあって、そこでハイドライドを借りてダビングして猿のように遊んだのが最初に自宅でのパソコンゲーム体験です。懐かしいなあ、もう三十年近く前のはなしか・・・
高校入学後はバイトもするようになって88/FM/MSX2+、高校卒業後はPC286VS・FM-TOWNS 20F・X68000ACEと気が狂ったようにPCを買ってゲームばかりやってたな。なつかしい。

FM-7購入後、ダビングしたゲームやI/Oを見てゲームを打ち込んだりして、プログラムもちょっとやったりしました。打ち込んだゲームではホバーアタックをひたすらやってたな。あれは面白かった。セーブしたカセットは最近発掘できたので読めるといいな。データレコーダも何台かあるはずなんだけど、たぶん動かないだろうからテープレコーダから調達し直さないといけないな。

FM-7にFDDを接続したかったのだけど、77AVの値段が安くなってきて、77AV2で展示品が7万円くらいだったのでのりかえてFM-7は元箱にしまって、そのままになってた。当時買った88とかMSXはあまり思い入れがなかったので売ってお金にかえてしまったけど、これは処分しようと思わなかったな。

アナログディスプレイにデジタル8ピンを接続できるようにするアダプタをPC8001用に作って、そういえばFM-7もデジタル8ピンだったなあと思い出して動かしてみたら全く問題なく動いて、かつキーボードがすごく高級なことに気付いてなんかやりたくなったので、拡張スロットに挿す、最低限の機能のカードを作ってみました。
拡張スロットの32ピンのうち、電源ピンを除く24本をCPLDに接続して、出力確認にLEDを1つつけただけのものです。

 

32ピンから引き出した24ピンを、トランジスタ技術の2006年4月号付録基板に接続しただけ。付録基板は5Vトレラントがないので抵抗とダイオードをたくさん並べてある。手持ちで他にちょうどよさそうなのではXC95144XLがあるのでそちらなら5Vトレラントなのでダイオードを並べる必要はなかったのだけど、とりあえず規模が大きい方がいいかな、と。

 

ハンダ面。配線の取り回しが、以前よりはましにはなっているのだけど、まだまだ。

 

全景。書き込み用D-SUBコネクタが間抜けだ。つけなければよかった。

 

電源オン。30530 Bytes Free 懐かしい・・・

 

FD80に書き込む値によってLEDがついたり消えたりするような機能を組み込んでみた。

poke &hfd80,1で点灯

 

poke &hfd80,0で消灯。

 

見にくいですが、EE=1かつQE=1かつERW=0かつnEIOS=0かつEAB=0x80でデータを取り込んでます。

次は何か値を読み込めるようにして、そのあと読み込むたびにカウントアップしていくレジスタでも作って、そのあとは割り込みが使えるようにしてって考えてるけど、6809のタイミングチャート図の意味がのみこめていないので先は遠い。