2021年4月17日土曜日

FT-245カード用の転送ソフトの使い方

 FT-245カード用の転送ソフトの使い方を解説し、最新版を公開します


1月22日のブログで紹介しましたFT-245カード用の転送ソフトですが、その後、開発者の「思い付きハードでソフトに七転八倒」さんがメニューソフトを用意されたり、ドライバーソフトを改良したりされましたので、改めて使い方について解説し、最新のソフトも公開します。

事前準備

まずFM-7/77にFT-245カードをセットしてWindows機とUSBケーブルで接続します。

そして、FM-7/77ではメニューソフトFM7FD-UIを起動します。起動時にドライバーFDIMGFM2も読み込まれます。(ドライバーFDIMGFM2はディスク0から読み込みますので必要ならメニューソフト中の15行 LOADM”FDIMGFM2”を書き換えてください。)

Windows機ではFDDIMG_RW77.exeを起動し、最初に「COMポート」メニューから使用するCOMポート番号を設定します。

これで準備完了です。


構成図


処理開始


FM-7/77でメニューソフトFM7FD-UIを実行すると図のようなメニューが表示されます。


処理内容は次の通りです。

1:FM7のディスクの全セクタをPCに転送してイメージファイルとして保存する。
2:PCに保存されているディスクイメージをFM7のディスクの全セクタに書き込む。
3:FM7上の指定したメモリ範囲をPCに転送してイメージファイルとして保存する。
4:PCに保存されているメモリイメージをFM7に転送してメモリに展開する。
5:FM7のディスクをトラック0にシークする。
6:FM7のディスクの指定したセクタ内容をPCに転送して保存する。
7:メニュープログラムを終了する。

処理1:FM-7のドライブ1にイメージ化するディスクをセットする。
    Windows側でメニュー「FDDデータ」->「データ受信」を選択
    FM-7側で1を実行
 トラック番号がカウントアップせず、(応答なし)と表示される場合がありますが、転送は正常に実行され、1分ほどでFDDIMG_RW77.exeがあるフォルダにDIMG_20201130.datというファイルが作成されます。
これは各セクタの先頭にセクタデータ16バイトがついた形で先頭セクタから最終セクタまで並んだ形のファイルです。(.datファイル)
これを通常の.D88(.D77)形式に変換するには、メニュー「ファイル」->「開く」でこのファイルを選択しておいて、メニュー「D88形式ファイル」->「作成開始」を実行します。
保存ファイル名を設定すればその名称の.D88ファイルが作成されます。同時に.DSKファイルも作成されますが、これは各セクタ先頭のセクタデータが削除されたセクタデータのみが並んだものです。

処理2:FM-7のドライブ1に書き込むディスクをセットする。
    Windows側でメニュー「ファイル」->「開く」で送信する.datファイルを選択する。
    FM-7側で2を実行
    Windows側でメニュー「FDDデータ」->「データ送信」を選択
 トラック番号がカウントアップせず、(応答なし)と表示される場合がありますが、転送は正常に実行され、1分ほどで選択した.datファイルがディスクに書き込まれます。

処理3:Windows側でメニュー「データ転送」->「受信」を選択
    FM-7側で3を実行し、転送するメモリの開始アドレス、終了アドレスを16進数で入力する。
Sirial_FM2PC20210103.datというファイルが作成されます。

処理4:Windows側でメニュー「データ転送」->「送信」を選択
    FM-7側で4を実行し、保存するメモリの開始アドレス、終了アドレスを16進数で入力する。終了アドレスは実際に転送する範囲より大きくても構いません。
    
処理5:FM-7のドライブ1にディスクをセットする。
    FM-7側で5を実行
 通常使用することはありませんが、何かの原因で処理が中断された場合などにドライブのヘッドをトラック0に戻します。

処理6:FM-7のドライブ1にセクタを読み出すディスクをセットする。
    Windows側でメニュー「セクタデータ」->「セクタ受信」を選択
    FM-7側で6を実行し、読み込むセクタのトラック番号、セクタ番号、サイド番号を16進数で入力する。
SIMG_20201206.datというファイルが作成されます。先頭に16バイトのセクタデータがついています。

【注意】・アドレス値などの入力した値の正当性のチェックはしていません。
・何らかの原因で処理途中で中断してしまった場合には、Windows側のDMIMG_RW77.exeを強制終了し、Windowsも一旦サインアウトしたうえで再度サインインしなければならない場合もあります。
・Windows側のコントロールソフトFDIMG_RW77.exeには、メニューを見ると分かりますように他の機能もありますが、ディスクへの書き込みなどの注意が必要な機能もありますので、メニューソフトには入っていません。
必要に応じて、FDIMG_RW77の使い方.txtを参照しながらご使用ください。

紹介したFDIMG_RW77.exe、FDIMGFM2、メニューソフトFM7FDUI2、FDIMG_RW77の使い方.txtをOneDriveに上げておきます。

【追記】
なお、FM-7/77側の機械語プログラムFDIMGFM2を手入力する手間を多少なりとも省くために、開発者の下記のブログでは53バイトのローダープログラムを入力し、それを用いてWindows上のFDIMGFM2をFM-7/77にロードする方法が紹介されています。

2021年3月10日水曜日

ドータボード上の6502でAppleⅡのBASIC Subsetが動作

 ようやくAppleⅡのBASIC Subset を走らせることができました


他の方が努力して実現されたものを後追いしているだけなので、何の意味もないと思いますが、それなりに苦労しましたので、これからやってみようと思う方に多少なりとも参考になればと思いまして、その経過をここに残しておきます。


6502を装着した6802ボード


ハードですが、下のメモリーマップにありますように64KB(32KBx2)のRAMを実装していますが、$F000~の4KBにROMが、さらに$F080からの128byteがI/O領域となっています。


SBC6802のメモリマップ


これは6809ボードを製作した時にRAM領域をできる限り広くしたかったのと、モニタとしてASSIST09を使用するために$F000~をROMにする必要があったためで、その配置をそのまま踏襲しています。


6502については何も知識がありませんので、夢七さんのブログを見ながら、そのまま移植してみることにしました。


(1)Woz MonitorとApple1 BASIC の移植

まず最初に「SBC6800に6502を載せてApple1を体験する」を元にして、Woz MonitorとApple1のBASICを移植してみました。

幸い、Woz Monitorはメイン部が$FF00~に、$F000~$F036にI/Oルーチンが配置されていたので、ACIAのアドレスを変更するだけで済みました。

また、Apple1 BASICについては上位の32KBのRAMをROMに置き換えて、その$E000~に配置しました。


A1BASICとWoz Monitor


ソースのアセンブルですが、オリジナルのソースを夢七さんがArcpitのX6502でアセンブルできるように改変してくださっているので、

>MSDOS X6502 /H A1BASIC-WOZV1.ASM,A1BASIC-WOZV1.HEX,A1BASIC-WOZV1.LST

でアセンブルできました。

動作している様子を示します。


Apple1 BASICの動作画面


(2)AppleⅡ BASIC Subset の移植

続いて「SBC6800に6502を載せてAppleⅡBASIC Subsetを走らせる」を元にして、AppleⅡ BASICの移植に取り掛かりました。

BASICのサイズが大きいので、ブログのように$E000からアセンブルすると$F080からのI/O領域まで入ってきます。そこで、$F080~$F0FFをスキップするようにORG命令を挿入してみたのですが、そうすると$E000~$FFFFにBASICとWoz Monitorが収まりませんでした。

次に、BASICを$D000からに配置するようにアセンブルしてみました。結果、BASICは$D000~$EE46に収まりました。Woz Montitorは先のA1BASICの場合と同じように$F000~にI/O、$FF00~にWoz Monitorを配置しました。

ところが、アセンブルした結果をROMに焼いて走らせてみましたが、正常に動作しません。

何回見直してもソースやアセンブル手順に間違いはありません。6502の知識が全くないのでほとんどお手上げ状態でしたが、ソースをじっくり眺めているうちに、FDB命令がコメントアウトされて、その後ろにbyte命令でバイト列が並んでいるという形があちこちにあるのに気づきました。

試しに、FDB命令を元に戻し、byte命令をコメントアウトしてアセンブルしてみるとbyte命令のバイト列と同じようなコードが生成されましたが、よく見ると2バイトコードの上位下位が入れ替わっています。

つまり、夢七さんが改変されたソースはX6502でアセンブルするために、元のソースで使われている.addrのようなX6502では対応していない命令をFDBに置き換えるという対処をしているのですが、FDBではアドレスの上位下位が自動では入れ替わらないために、アセンブルしたコードのうちのアドレスの上位下位を入れ替える必要がある部分をbyte命令で直接記述していることが分かりました。ということで、このソースは$E000からアセンブルすることを決め打ちしているので、$D000からに変更してアセンブルしても正常に動作しないわけでした。

そこで、まずソースのFDB命令を元に戻して$D000からアセンブルし、得られたコードのアドレス部の上位下位を入れ替えてbyte命令に並べ、FDB命令を再度コメントアウトするという操作を加えることで、X6502でアセンブルできるソースができあがりました。

そのソースを改めてアセンブルし、得られたバイナリをROMに焼いて走らせてみたところ、今度は正常に動作しました。

メモリマップを示します。


AppleⅡBASICとWoz Monitor

動作している様子です。

AppleⅡの動作画面


(3)ASCIIART を走らせてみる

BASICが無事に走ったということで次はASCIIART.BASを走らせてみました。


ASCIIART結果

描画時間は手動計測ですが4分21秒程度でした。なお、システムクロックは2MHzです。

今回は元のソースに見慣れない疑似命令が使われていたために移植に手間取りましたが、それでも夢七さんがX6502でアセンブルできるように改変してくださったために、何とか移植ができました。夢七さんに感謝いたします。

移植に手間取っている間にMouserからW65C02S6とW65C816S6が届きました。このW65C02はもちろん正常に動作しました。W65C816を購入したのは、アキュムレータが1個しかない6502では6800よりもアセンブラでプログラミングしにくいと思うのですが、W65C816なら6800と同じような感じでプログラミングできるかもと思ったからです。

いつかはW65C816のシングルボードを作ろうと思っていますが、いつになりますやら。



2021年2月28日日曜日

6802ボードでドータボードを用いて6502を走らせる

 自作6802ボードでドータボード(ほうめいさんのPLDR6502)を用いて6502を走らせる


先日まごころせいじつ堂のほうめいさんから、電脳伝説さんのSBC6800ボードで6502を走らせるためのドータボードPLDR6502をいただきましたので、私の自作品で今は使用していない6802ボードでも走らせることができないものかと試みてみました。

私の6802ボードは水晶発振回路からの8MHzを6802のEXTAL端子に入力して、出力される2MHzのE信号で周辺回路を制御しているので、8MHzをそのまま入力するわけにはいきませんが、幸い、ACIA63B50に加える614KHzのクロック生成のために8MHzをLS161で13分周していますので、その途中から2MHzを取り出して、それを37ピンのPHI2Iに加えることで2MHzで動作させることができそうです。

ドータボードの修正としては、39ピンPHI2Oと37ピンPHI2Iを入れ替えることと7ピンSYNCをカットしてGNDに落とす(BAを常にLowに)だけで良さそうです。6502にはBA信号がないのでちょっと悩みましたが、常にLowにしておいても特に不都合はないようです。(本当は周辺ICのアクセスに不都合が生じる場合があるそうですが...)

問題はCPUで、eBayで調達したW65C02(5個)とR65C02(2個)のいずれも動作しませんでしたので、仕方なくオレンジピコさんからW65C02S6PTG-14を購入してようやく動作させることができました。動作しなかったW65C02はいずれもほうめいさんのブログで動作しなかったと報告されているものと同じ刻印でした...


ということで、動作している様子です。

残念ながらボード上のLS161から2MHzを引き出している線とBAをGNDに落とす線が見えていて見苦しいです...


自作6802ボード上に装着した


オレンジピコさんから購入したW65C02です。


ドータボードとW65C02



動作確認にはほうめいさんと同じように、ElectreilicさんのUniversal Monitorを使わせていただきました。モニターの開始アドレスとACIAのアドレスを変更するだけで、アセンブルしてROMライターで焼いて動作させることができました。


Universal Monitorが動作



動作しなかったW65C02とR65C02群です...



eBayでは時々こんなことが...


W65C02は全く無反応でしたが、R65C02の方は全くの無反応ではなくて画像のように意味のないデータが定期的に表示されており、一見何かの動作をしているように見えます。



もっと追求すれば何か分かるかも


ここまでくると、次はBASICを走らせてASCIIARTの描画速度を測定してみたいところですが、私の6802ボードはROMが$F000~$FFFFのみ(I/Oは$F080~$F0FF)ですのでBASICをROMに焼き込むことができません。
ですので、起動後にBASICをRAM中にLoadして走らせる必要がありますが、6502の機械語は全くいじったことがないので、Loaderを制作できるのはもう少し後になりそうです。

初めて触れた6502ですが、折角の機会なのでもう少しいじってみようと思いますので、W65C02と使いこなせるかどうかわかりませんがW65C816を追加注文したところです。

私は、今は6809と6802の両用ボードを使用していますので、6802ボードは眠っていたのですが、それを活用することができてありがたいです。
ドータボードPLDR6502を下さったほうめいさんとUniversal Monitorを制作して公開されているElectreilicさんに感謝いたします。ありがとうございました。


2021年2月23日火曜日

FM-7用 60K CP/M-80 の仮想ドライブ版が完成


 FM-7用 CP/M-80 60K版の仮想ドライブ版(FT-245カード使用)です


先日、FM77用のZ80Hカード(韋駄天)を作った際に、それ用の60K版CP/Mを公開されているCP/Mのソースから構築しましたので、その経験を忘れないうちにと、半完成の状態で止まっていたFM-7用のCP/Mを60K版に変更し、さらにWindows上の仮想ドライブもアクセスできる形で仕上げました。

そしてFM-7とWindowsPCとの通信にも、以前使用していたRS-232Cカードではなく「思い付きハードでソフトに七転八倒」さんが製作されたFT-245モジュールを使用した高速通信カードに変更しました。


CP/Mの起動画面です。起動メッセージにあるように、A:とB:が通常のFD、C:とD:がWindows上の仮想ドライブに設定してあります。

起動ドライブA:のディレクトリを表示後、ドライブD:にチェンジし、そこからドライブC:のディレクトリを表示しています。


CP/M起動画面


使用中の様子です。

右端のカードがCP/M-80カード、中央がWindowsとの通信用のFT-245カード、左端がFDCカードで、いずれも以前本ブログで報告した製作品です。

後方に見えているWindows上に仮想ドライブが構築されています。


動作中の様子


FT-245カードのアップです。以前使用していたRS-232Cカードよりも高速になったのが体感できました。

このカードの仕様上、FM-7 -> WindoowsPC は1バイトを1回で転送しますが、WindowsPC -> FM-7 は1バイトを2回に分けて転送しますので、以前紹介しましたCP/M用仮想ドライブ構築ソフト CpmDrvWin.exe にそれに対応するための変更を加えました。


高速FT-245カード


Windows上の仮想ドライブ画面です。

ドライブ2と3上にFDイメージファイル(D88, D77, DSKファイル)をドラッグ&ドロップすると、それぞれCP/MのC:,D:として読み書きできます。同じドライブ中にいくつでもイメージファイルを置いて、切り替えてアクティブなイメージファイルを選択できます。

アクティブなドライブのディレクトリが表示されているボックスにWindows上のファイルをドラッグ&ドロップすることでイメージファイルにファイルを書き込むことができますので、Windows上でソースを作成してイメージファイルに放り込んで、CP/M上でアセンブルやビルドをするという形でプログラム開発ができます。


仮想ドライブの画面



また、その他の機能として、ファイルの読み出し、ファイル名の変更、ファイルの削除、全ファイルの一括読み出しなどの機能もあります。


2020年5月16日の「FM-7用 58K CP/M-80が一応出来上がりました」で紹介した際には、ブロッキング・デブロッキングが実装されていなかったので同一セクタを2度ずつ読んでいました。相変わらずブロッキング・デブロッキングは実装できていませんが、上記画面の右端のボックスを見ていただくと分かりますように、直前に読んだセクタと同じセクタの場合にはディスクを再度読まないように処理を変更しましたので、その分高速になっています。


最後に


自分で作ったハードとソフトでTurboPascalなどの大昔のソフトを走らせてみたいという願いから始めたものですが、それなりに使える形が出来上がったように思いますので、これを区切りにして、あとはCP/M-80上でのソフトを走らせて楽しもうと思います。
(プログラム作りの楽しさを知ったのは、N88-BASICでの6千行近いプログラムの変数管理でどうにもならなくなってしまった挙句、MS-DOS上のTurboPascalを使い始めてその使い易さに感動してからで、その後Cに移行しましたが、今でも気持ちとしてはPascalが好みですので楽しめそうです。)

制作したBIOS09, BIOS80, FM-7用CP/MシステムイメージCPM60KwVFD.D77と元のCPM60KwVFD.DSK, Windows側のCpmDrvWin.exeをOneDriveに上げておきます。
なお、FT-245カード使用のものとRS-232Cカード使用のものとの両方入っていますが、ファイル名の末尾にFTがついているものがFT-245カード用で、RSがついているものがRS-232Cカード用です。
また、formatコマンドがありませんので、フォーマット済みの空のイメージファイルも入れてあります。newdiskがついているものがそれです。
このような報告の場合、ソースがなければあまり役には立たないと思いますので、BIOS09, BIOS80についてはソースも入れておきましたが、CpmDrvWin.exeについては見苦しい個所も多くまだまだ改良の余地もありますので、とりあえず今はソースは公開しないことにします。

BIOS09は私なりに試行錯誤しながら制作しましたが、80系の知識が全くないので、CP/M本体とBIOS80については以前紹介しました中日電工さんのブログがなければ仕上げることはできませんでした。改めて中日電工の菱田さんに感謝いたします。
また、標準のRS-232Cカードよりもはるかに高速なFT-245カードを開発された「思い付きハードでソフトに七転八倒」さんにも改めて感謝いたします。



2021年2月2日火曜日

ドライブナンバー切替用ケーブルの製作

 ケーブルを加工してフロッピィドライブの0と1の切替をスイッチで行えるようにしました


私が使用している3台の8ビットパソコンはドライブ0を全てGOTEKに変更してあり、便利に使用できているのですが、時にはフロッピィから起動したい場合もあります。

常用しているFM77AV40SXはどのドライブからでも起動できるので良いのですが、残りの2台(FM77AV1,FM-7)にはそういう機能はありません。

FM-7用のFDDはPC-98用のケースに収めており、前面パネルにあったスイッチをドライブNo切替用に利用できましたが、そのためにGOTEKやPC用FDDからケーブルを引き出す必要がありました。(GOTEKには直接ハンダ付けをしました)


FM-7用FDD

しかし、FM77AV1の2Dドライブは基板上のスライドスイッチでドライブNoを切り替えるようになっており、ケーブルを引き出すのは容易ではありません。

そこで、ドライブ本体はそのままで、接続しているフラットケーブルを加工し、切替スイッチを追加することでドライブNoを変更できるようにしました。


下図がフラットケーブルの結線図です。

前提として、GOTEKがDRV0に、PC用FDDがDRV1に設定してありますので、GOTEKにはピン10にFDCからの10番か12番が、PC用FDDにはピン12に10番か12番が接続されることになります。(PC用FDDのピン10はN.C.ですので、結線されていてもいなくても無関係です。)


ケーブル結線図

実際のフラットケーブルとスイッチです。

有り合わせのものを利用したので、実際に装着してみたら長すぎました。。。

画像左側にFDCへのコネクタがあります。スイッチの下のコネクタがDRV0 用、右端のコネクタがDRV1 用です。


加工したフラットケーブル


その加工部のアップ

FM77AV1に装着した様子です。プッシュボタンはGOTEKの上に接着剤で固定しました。

プッシュボタンを押し込むとDRV0:GOTEK,DRV1:PC用FDDに設定され、ボタンを戻すとその逆になります。


FM77AV1に装着した様子

これで、ごくまれにあるフロッピィから起動させたい場合でも、77AVを分解しなくてもよくなりました。


2021年1月23日土曜日

赤外線ワイヤレスキーボードエミュレータ(ysflight.comさんによる)の製作

 ysflight.comさんによる

Windows+ArduinoによるFM77AV/AV40実機用赤外線ワイヤレスキーボードエミュレータ」製作してみました



最近はFM77AV用のZ80Hカード(韋駄天)を製作したりしてFM77AVを使用する機会が増えてきているのですが、私の77AVは本体のみを入手したもので、キーボードは常用しているFM77AV40SXに変換器を介して接続しているPS/2キーボードを兼用しているので、使用するごとにそれを外してAV用の変換器を介して接続しています。

キーボードをいくつも並べるスペースがないので仕方がないのですが、流石に面倒ですし、ごくまれにはSXとAVを同時に使用したい時もあります。


そこで、ysflight.comさんによるWindowsPCのキーボードをAVのワイヤレスキーボードにしてしまうアダプタを製作してみました。ysflight.comさんは最初はIRToyを使用されており、これには入手性のこともあって手を出さなかったのですが、第2作はArduino UNOを使うものでしたので、これならということで製作してみました。


IR LED等の部品ですが、部品の選定で苦労したくなかったのでysflight.comさんが使用されたものと同じIR LED,TR,DをMouserで購入しましたが、他は手持ちの部品です。Arduino UNOとしては「作って遊べるArduino互換機(鈴木哲哉さん)」で製作した2台のうちの5V版の方を使用しました。


簡単な回路ですので、手配線でもそれほど時間もかからずにすんなりと完成しました。



製作したアダプタです


製作した基板(表面)




その裏面



Arduino UNO(もどき)に装着した様子です


Arduino UNO(もどき)に装着



使用中の様子です。真正面に向けなくても十分に通信できました。
これで、私の77AVはドライブがGOTEKでフロッピィの出し入れなどはないので、例えば本体を机の下に押し込んでおいてもそれほど支障なく使えそうです。


使用中の様子


Windows側のプログラム FM77AVKeyboard の画面です。
キーボード入力を77AVに送るだけでなく、他にも色々な機能があります。
試しに、Windows上でF-BASICのプログラムを作成して「AUTO-TYPE(BASIC)」機能を用いてAVに送ってみましたが、これはとても便利です。

また、このエミュレータのウインドウ上にカーソルがあると77AVにキー入力が送られ、それ以外にカーソルが移動するとWindowsにキー入力が送られるので、Windowsと同時使用の際も特別な切り替え操作は不要であり、この点も慣れると使い易いと思います。


エミュレータの画面

下画像の送信データの表示画面は非表示にしておいても支障はありません。

送信データの表示画面


ysflight.comさんにはFM-7用のRS-232Cカードの製作時やその他でも大変お世話になりましたが、今回もこんな便利なツールのアイディアと製作例を公開していただきまして、大変感謝しております。ありがとうございました。

なお、このアダプタに関するysfilght.comさんのサイトは2つあります。(全体の説明このアダプタに関する説明)Windows側のプログラムやArduino UNO用のプログラムもサイト内で公開されています。


2021年1月22日金曜日

FT-245カード用の高機能な転送ソフト

FT-245カード用の高機能な転送ソフトを紹介します 


[2021年1月31日追加] FM-7側のソフトの改善版FMIMG_FM2をアップしました。
2020年12月11日のブログ「Ndittを使用しないでGOTEK用のHFEファイルを作成する(その3)」で、FT-245カードを用いることでFDDイメージをFM-7からWindowsPCへ高速に転送できることを紹介しました。
その際に、用いたFM-7側のプログラムには送信ルーチンだけでなく、受信ルーチンもあるので更なる用途も考えられると書きましたが、その後、そのプログラムを制作された「思い付きハードでソフトに七転八倒」さんが実際に機能を拡張したプログラムを制作されましたので紹介します。(私も一部分ですが協力させてもらいました。)

FT-245カードをFM-7に装着している様子

FT-245カード

Windows側のソフト FDDIMG_RW77.exeの起動画面

起動画面

まずCOMポートを設定します

COMポート設定画面



メニュー「FDDデータ」→「データ受信」を選択し、FM-7側で FDIMG_FM をEXEC &H6850 として実行します。

FDの状態によっては画像のように、タイトル部に(応答なし)が表示されてトラック番号がカウントアップしなくなることがありますが、データは正常に受信されますので、そのまま受信終了まで待ちます。

データ受信中の画面

受信終了後に、メニュー「ファイル」→「開く」で受信したデータファイル DIMG_20201130.dat を選択した後、メニュー「D88形式ファイル」→「作成開始」を選択するとファイル名入力画面でファイル名を入力するとベタなデータのみのDSKファイルとD88ファイルが作成されます。

ファイル名設定画面


この基本機能の他に、
・datファイルをFM-7上のFDに書き戻す機能
・datファイルの特定のセクタデータを書き換える機能
・FM-7のメモリ中のデータをWindowsPCに転送してファイル化する機能
・WindowsPC上のデータファイルをFM-7のメモリに転送する機能
があります。

単機能のソフトもあります

なお、FDDIMG_RW77.exeは上記のように多機能ですが、FM-7上のFDの内容をWindowsPCに読み込んでイメージファイル化したいというだけで良ければ、下記の rcvfdimg.exe が使用できます。(FM-7側のプログラムは上と同じ FDIMG_FM を使います。)
このソフトはFM-7上のFDを読み込んでD88ファイルに変換するだけの単機能ですので、その分使い方が簡単で、COMポートと保存ファイル名を設定した後、データ受信開始ボタンやD88ファイル変換ボタンを押すだけです。
ただし、FDDIMG_RW77.exeでのセクタ情報を持った中間ファイル(datファイル)は作成せずに、直接ベタなファイル(DSKファイル)とD88ファイルのみを作成します。



このソフトでも、FDによっては(応答なし)が表示されてトラック番号がカウントアップしなくなることがありますが、データは正常に受信できます。






紹介した FDDIMG_RW77.exe、FDIMG_FM、使い方の説明とrcvfdimg.exe をOneDriveに上げておきます。

[2021年1月31日追加]
FM-7側のソフトFMIMG_FMのPC→FM転送機能を改善したFMIMG_FM2をOneDriveに上げました。




2020年12月26日土曜日

Z80H 韋駄天用のCP/Mをソースから構成する

 Z80H韋駄天用のCP/Mを公開されているソースから構成しました


Z80Hの作者はX1-CP/Mから韋駄天用のCP/Mを構成されていますが、前回のブログでは、私は手持ちのFM-CP/Mを利用しました。しかし、X1-CP/MやFM-CP/Mから構成する方法では試してみることができる方は限られます。

そもそもCP/Mの本体部分は共通(だと思っています)ですので、公開されているソースからでも構成できるはずです。ということで、以前中日電工の菱田さんのブログを参考にしてCP/Mを構成した時と同じように構成してみましたので、菱田さんのブログの記事を参照しながら私の行ったその手順を解説します。

[1]ソースからバイナリを作成する

(1-1)ソースとアセンブラを入手する

公開されているページからソース cpm2-asm.zip をダウンロードします。(中日電工のブログ第17,18回 以下同様)

使用するのはこれを展開してできるファイルのうちの cpm22.z80 です。

アセンブラはVectorで入手できるZASM1.64を使用します。

(1-2)ソースのエラーを修正する(第19,35,36回)

このままアセンブルするとエラーが生じますので数箇所を修正します。

・END文の追加

・ラベルHALTをHLTに変更

・NFUNCTSの定義文を前方に移動

・CKSUMTBL: DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 を次の2行に分割する

  CKSUMTBL: DEFW 0

      DEFB: 0,0,0,0,0,0,0,0,0,0,0,0,0,0

・ADD A,M をADD A,(HL) に変更(3箇所)

ブログ中のその他の変更はND80Zのためのものなので不要です。

(1-3)60K-CP/M用に設定する

先頭の MEM EQU 62 を60に変更する。

(1-4)アセンブルする

以上の修正を加えたソース(cpm60k.txt)をWindows上でアセンブルします。

>msdos zasm -L -Ccpm60k.bin cpm60k.txt

(1-5)得られたBINファイルの末尾256バイトを削除する

末尾の BIOS JUMP TABLE の部分はIDATENシステムの方で用意されるので不要です。

できあがったファイルは$0000~$15FFの6KBとなります。


[2]CP/Mディスクを作成する

(2-1)ソースを入力してアセンブルする

「6809活用研究」のZ80Hの記事中にはIPL20, CONFIG, BIOS14, KER14 のソースが掲載されていますので、それを入力してアセンブルします。

(2-2)システムディスクのイメージの作成

バイナリエディタなどで320KBサイズのディスクイメージを作成して、次の順にファイルを書き込みます。

・$0000 - $00FF に IPL         (TRK:0, SCT:1)

・$0100 - $16FF に cpm60k  (TRK:0, SCT:2 - 23)

・$1700 - $1CFF に bios14    (TRK:0, SCT:24 - 29)

・$1D00 - $1EFF に config    (TRK:0, SCT:30 - 31)

・$2000 - $3BFF に ker14     (TRK:1, SCT:1 - 28)

・$4000 以降(TRK:2以降)はDirectoryとProgram&Dataなので、様々なブログで公開されているCP/Mシステムからコピーすることで、トランジェントコマンドやアプリケーションが設定できます。

韋駄天システムはX1-CP/Mを元にしているので、システムのセクタが他のCP/Mとは異なり1セクタ前にずれています。(はせりんさまに教えていただきました。ありがとうございました。)

 最後に、$1CFFの値を$3C(60)に変更します。これは起動時に60K CP/Mと表示される値です。

(2-3)システムディスク、あるいはシステムイメージファイルの作成

私は以前のブログに書きましたように、ドライブ0にGOTEKを使用していますので、できあがったイメージファイル(.DSK)を.88ファイルに変換して、さらに.hfeファイルに変換してUSBメモリーに書き込めば終了です。

フロッピーディスクをお使いの方はイメージファイルをそのままディスクにベタに書き込めば良いのですが、その方法としては、RS-232Cカードや以前のブログでも紹介していますFT-245カードを使ってFM77やFM-7に転送して書き込むことになりますが、転送時間がかかっても良ければF-BASICのプログラムを組めば良いので、詳細は省略させていただきます。




試作第1作は修正箇所が見えていて見苦しかったので、作り直すとともにCPUをZilog Z84C0020PECに交換しました。



韋駄天システムは最終的には64K-CP/Mとなるのですが、今のところまだ60K-CP/Mのままです。

これで、ハンダ付けを伴う製作と雑誌記事からのソフトの入力の手間をを厭わなければ、FM77で8MHz動作のCP/Mが走ることになります。





2020年12月19日土曜日

Z80カードの第4作は77AV用のZ80Hカード(韋駄天)

 懲りもせずに、さらにZ80カードを作ってみました!

[12月21日追記]CP/Mも走りました!(はせりんさんのアドバイスのおかげです)


今回のZ80カードは、ほうめいさんによる77AV用のZ80Hカード(韋駄天)です。

「6809活用研究(工学社)」掲載の記事を見て、いつかは作ってみたいと思って記事のコピーを保存してあったのですが、ほうめいさんのブログ「まごころせいじつ堂」に回路図の訂正が載ったのを見て、ついに作ってみることにしました。

(うまく行けば、私の常用機であるFM77AV40SXでもCP/Mが走るかもという甘い希望を持っていますがどうでしょうか。) ←コネクタが違っていました。残念!


ハードの製作

ブログの回路図を元にしてKiCadで回路図を描き、ICの配置もブログの写真通りにしてプリント基板を製作しましたが、メモリーICを128KBに変更することで何とか10x8cmのサイズに収めることができました。

Z80Hは手持ちがありませんでしたので、古いD780C-1を使用してみましたが不思議なことに8MHzクロックのままで動作しています。

しかし、いつものようにポカをしてしまい、128KBメモリーのプルアップすべきCS端子をプルダウンしてしまったので、パターンカットや追加配線が必要となりました。




画像では、とりあえずメモリーのピン30を抜いて+5Vに接続していますが、こんなこともあろうかと作り直しを前提に、普段はTTL ICには使用しないことにしているソケットを使用しています。


FM77AVに装着した様子です。高さを8㎝に抑えたので、装着した状態でカバーを閉じることができます。

「6809活用研究」にはF-BasicのTiny Monitorも載っていましたので、入力して走らせてみました。



画像のように、コマンド M, D, S, R が機能していますのでハードは正常に動作しているようです。


CP/Mの移植

CP/Mの移植に必要なソフトも「6809活用研究」に載っているので、BIOS等はそれらを打ち込めばよいのですが、CP/M本体はX1用のものを使用することになっています。

もちろんX1用のCP/Mは所有していないので、最初に手持ちのFM-CP/Mのディスク中のFMCPM605.SYSが5インチ用の60K_CP/Mかと思って適用してみたり、動いている56K_CP/Mから60K_CP/Mを作成して適用してみたりしましたが、うまく行きません。さらに、CP/M2.2のソースをアセンブルしたものを適用したりしましたが、やはり動作しません。

ということで、CP/Mの移植については挑戦中ということで、先にそのまま入力していたBIOSなどのソースを改めて読んでいるところです。

[12月23日追記]FM-CP/Mの60K版を元にしたものが動作しましたので、次の課題は公開されているソースをアセンブルしたもので動作させることですね。


最後に

回路やソフトを公開して下さったほうめいさんに感謝いたします。

とりあえず製作した試作第一作の不完全なプリント基板(ミスがあるためパターンカットと追加配線が必要なのと、シルク印刷が不十分)ですが、余分が数枚ありますので、もしご希望の方がおられましたらメールで連絡を下さい。返信用封筒に切手を貼って送ってくださったら無料でお送りします。


2020年12月11日金曜日

Ndittを使用しないでGOTEK用のHFEファイルを作成する(その3)

 

ついに実用レベルの高速化を実現できました


前々回(その1)のブログでFDをイメージ化するのに「思い付きハードでソフトに七転八倒」さんが製作されたFT245RL使用の高速転送カードを使用できればもっと速くなるだろうと書きましたが、実際に2Dディスク(320KB)でわずか1分という、RS232Cカード使用の場合の10倍ほどの高速化を実現することができました。

使用したFT245カードは、FT245RLモジュールの他にはTTL-ICがわずか5個という簡素なものですが、その速さには目を見張るものがあります。




FM-7側のソフトはもちろん、「思い付きハードでソフトに七転八倒」さんがハードに合わせて作成されたものをそのまま使用させていただきました。
WindowsPC側のソフトは、とりあえずの間に合わせで私が作成したものを用いました。




使用法


(1)Windows側でmkd88img.exeを起動し、Port Noと保存ファイル名を指定して「データ受信開始」ボタンを押します。
ステータスバーに Data receive start ... が表示されて、データ受信待ち状態になります。




(2)FM-7側でLOADM”RDFDIMG",,RでRDFDIMGを起動します。
プログラムサイズは243バイトで$6800からに入り、実行開始アドレスは$6850です。デフォルトではドライブ0が指定されていますが、アドレス$6856の0を希望のドライブ番号に変えることで他のドライブも読めます。
Windows側では、track no = nn のように、読み終わったトラック番号が表示されます。




(3)40トラックの読み込みが終了すると(track no = 39はほとんど見えません...)、続いてDSKファイルとD88ファイルの作成に進みますが一瞬で終了します。



2つのファイルが作成されると DSK, D88 file created. が表示されて処理が終了します。
そのまま、別のFDの処理を続けることもできますが、同じファイル名のままだと重ね書きになります。

Windows上にD88形式のイメージファイルが作成できれば、後は、8月9日のブログ「FM-7/77にGOTEKを接続する」に書きましたように、HxCFloppyEmulator.exeを用いてD88ファイルをHFEファイルに変換してUSBメモリに書き込むだけです。

使用感など


ディスク一枚が1分で処理できるのは結構実用的ではないでしょうか。
私はこれを用いて手持ちのF-BASICの2Dディスクを全部読み込んでイメージファイル化してみましたが、それ程の手間ではありませんでした。

最後に


NDittを使わずにFM-7自身でFDを読んでそのままWindowsPCに転送することでイメージ化できないかという着想から始まった試みでしたが、WindowsPCへのデータ転送にRS-232Cを用いた場合はFD1枚に10分もかかり、出来ないことはないが普段使うツールとしては非実用的といえる結果となりました。
そんな時に、FT245基板を製作された「思い付きハードでソフトに七転八倒」の秋田さんが趣旨に賛同してFM-7側のFD読み込み・転送ソフト RDFDIMG を作成してくださいました。
これによってFD1枚のイメージ化が1分でできるようになり、実用的なツールになりました。

ということで、「FM-7側ソフト担当:秋田さん(企画の賛同者)、Windows側ソフト担当:私(企画・仕様設計)」という合同作品となりました。

使用したRDFDIMG(「思い付きハードでソフトに七転八倒」の秋田さん制作)とmkd88img.exe(拙作)をOneDriveに上げておきます。
なお、RDFDIMG にはFM-7からWindowsへの送信ルーチンだけでなく、Windowsからの受信ルーチンも含まれていますので、更なる用途も考えられると思います。

2020年12月3日木曜日

Ndittを使用しないでGOTEK用のHFEファイルを作成する(その2)

 

前回紹介したプログラムを改良し、多少の高速化を図りました


前回紹介したプログラムは、FM-7側はF-BASICで作成し、WindowsPC側は2つのプログラムに分かれていましたが、FM-7側のプログラムをアセンブラで、WindowsPC側のプログラムを一つにまとめることで、より使い易くするとともに多少の高速化を図ることができました。

(1)FM-7側(RDIMG)
アセンブラで書き直すにあたって、最初はFDCを直接コントロールしてトラックリードコマンドで、1トラックを一気に読み込んでメモリに展開し、そこからセクタデータを取り出すと高速になるのではないか(ディスクの読み込みが40x2の80回で済むので)と考えて作成してみました。
結果、セクタデータは得られたのですが、標準のフォーマットとは異なる個所もあり、また、読み込むたびに値が変わる部分もあり、全てに対応するのは結構面倒そうです。
ちなみに、読み込んだトラックデータは以下のようでした。

                            標準の値                     実際の値
----------------------------------------------------------------------------------------------
GAP1                      4E                             4E,その他の値
----------------------------------------------------------------------------------------------
SYNC                      00 (12バイト)            00,その他の値
IDアドレスマーク    A1,A1,A1,FE             14,A1,A1,FE or C2,A1,A1,FE
IDとCRC(4+2バイト)             同じ
----------------------------------------------------------------------------------------------
GAP2                      4E                              4E,その他の値
SYNC                      00 (12バイト)            00,その他の値
IDアドレスマーク    A1,A1,A1,FB             14,A1,A1,FB or C2,A1,A1,FB
                                                                 (FBはF8の場合もあり)
DATAとCRC(256+2バイト)    同じ
----------------------------------------------------------------------------------------------
GAP3                       4E                             4E,その他の値
----------------------------------------------------------------------------------------------

これを見る限り12バイトの00に続いた後、 14(orC2),A1,A1,FEの後にID(TRK,SIDE,SCT,セクタ長)+CRCが、14(orC2),A1,A1,FBの後にDATA(256バイト)+CRCがあると決め打ちして良いようにも思いますが、ちょっと不安です。

ということで結局、BIOSを用いてセクタリードを40x2x16の1280回繰り返すことにしました。1セクタ読むごとに256バイトのデータとチェックサム値を転送しています。ファイル名をRDIMGとしました。


(2)WindowsPC側(mkd88img.exe)
前回のプログラムはFM-7から送られたデータをそのままセクタ順に保存してできたDSKファイルをまず作り、次に別のプログラムを用いてD88ファイルを作成するものでしたが、それを一体化してmkd88img.exeとしました。処理結果としてDSKファイルとD88ファイルの2つが生成されます。

FDイメージファイル作成の手順


(1)FM-7とWindowsPCをRS232Cボードで接続して適切なボーレートに設定します。RTS/CTS制御可能なボードであれば19200Baudが可能です。
(2)WindowsPC側のmkd88img.exeを起動します。オプションを付けずに起動するとCOM4,19200Baud,生成ソフト名FDIMG.DSK, FDIMG.D88となりますので、変更する場合は下記のようにオプションを付けて起動します。
 mkd88img [p=n] [b=nn] fname (fnameはディレクトリを含んでも良い)
(3)FM-7側のRDIMGを起動します。デフォルトではドライブ0のディスクを読むようになっているので、他のドライブの場合は一旦Loadして(&H6000からに入ります)から&H6002の値0を希望のドライブ番号に変えた後、Exec &H6000で実行します。
(4)指定したディレクトリにDSKファイルとD88ファイルが作成されます。


結果など


速度ですが、2Dディスクを処理するのにおよそ10分(19200Baud)、15分(9600Baud)、20分(4800Baud)、35分(2400Baud)程度となりました。
8251Aを直接コントロールしているのでRTS/CTS制御をしてボーレートを上げることができていますが、2400Baudでは前回の結果と同じ程度なので、処理時間はディスクの読み込み方法とはあまり関係がなく、ほぼ転送速度で決まってしまっているようです。

作成したRDIMGとmkd88img.exeをOneDriveにMakeD88ImageFile2.zipとして上げておきます。FM-7にRDIMGを直接入力する場合はRDIMG.bin(236バイトもありますが...)を打ち込みます。(RDIMGはF-BASICの機械語形式に合わせたもので仮想ドライブにドラッグ&ドロップする場合に用います。)



2020年11月24日火曜日

Ndittを使用しないでGOTEK用のHFEファイルを作成する

 Ndittを使わないGOTEK用のHFEファイルの作成方法を紹介します


8月9日のブログ「FM-7/77にGOTEKを接続する」でFM-7/77でGOTEKが使えるという紹介をしましたが、実際にGOTEKを使用する場合の最大の障壁は、如何にして手持ちのフロッピーディスクの内容をWindowsPCに取り込むかだと思います。

〇標準的な方法

下図の左の方法で、3.5インチ又は5インチのFDDを装着したWindowsPCを用意し、Nditt.exeでフロッピーディスクを読み込んで.D88(.D77)イメージファイルに変換するというものです。

実際、私もこのためだけに3.5インチと5インチFDD付きの古いWindowsXPパソコンを保管しています。しかし、これは如何にも面倒です。

そこで、FDDのないWindowsPCでも可能な方法を紹介します。

〇FM-7を使用する方法

下図の右のように、FM-7上でフロッピーディスクの全セクタを読み出してWindowsPCに転送し、作成された.DSKファイルを.D77形式に変換するというものです。







このために必要なソフト(FM-7側:SNDIMG,  WindowsPC側:rcvfdimg.exe)を作成しました。

さらに最後の手順の.DSKから.D88への変換には従来から使用しているソフト FbDsktoD77.exe を使用しました。


各ソフトの機能

・転送ソフト SNDIMG:

FM-7上で動作するF-BASICのソフトで、フロッピーディスクの全セクタを読み込み、バイナリのままでWindowsPCに送信します。

ドライブは0を設定してありますので、他ドライブの場合は直接プログラムを修正します。

・受信ソフト rcvfdimg.exe:

WindowsPC上で動作するコンソールソフトで、受信したセクタデータをTrack0,Sector1からTrack39,Sector32までそのまま順に並べた.DSK形式のファイルを作成します。

  Usage:rcvfdimg [p=n] [b=nnnn] [filename](全て省略可)

        (省略時:p(ポート)は4、b(ボーレート)は4800baud、filenameはFDIMG.DSK)

・.DSKファイル変換ソフト FbDsktoD77.exe:

WindowsPC上で動作するコンソールソフトで、.DSK形式のF-BASICファイルを.D88形式に変換します。私が普段Windows上の仮想ディスクで使用するファイルを作成するために使用しているものなので、ファイルの拡張子が.D77にしてありますが、それを.D88にリネームします。また、デフォルトでは640KBのファイル用なのでオプションとして39を付けて変換する必要があります。(ファイル名のみで起動するとUsageが表示されます。)

  Usage:FbDsktoD77 filename 39 (ファイル名の拡張子は不要)



使用感など

最近はFDDがついていないPCが普通になってしまったようで、結構困ることがありますので、この方法もありかと思います。

ただ、速度的にはかなり遅くて2Dディスクの320KBで30分余りかかります。。。

ディスクの読み込みが遅い上にBASICでのRS232C通信ですのでさらに遅くなるのは当然ですが、FM-7(と普通のWindowsPC)でイメージファイルが作成できるのはメリットではないでしょうか。

GOTEKを使おうと考えるということは、当然、FM-7にはフロッピードライブが装着されていると思いますので、あとはWindowsPCとの通信手段としてのRS232Cカードなどがあれば良いわけです。

RS232Cカードの自作もそれ程大変ではないと思いますし、他にも「思い付きハードでソフトに七転八倒」さんが製作されたFT245RL使用の高速転送カードを使用できればもっと速くなると思います。また、以前ブログで紹介したArduinoMega2560を使用したカードを使うという手もあるかと思いますが、まだ試していません。

使用したソフト(SNDIMG,rcvfdimg.exeソース付き,FbDsktoD77.exe)をOneDriveに上げておきます。rcvfdimg.exeは以前のブログ「ASSIST09に追加したLoad, Saveコマンドを改良しました」で紹介したslwinr.exeを手直しして作成しましたが、ソースもつけておきましたので改良して使っていただければと。

蛇足になりますが、F-BASICのソフト SNDIMG だけは何とかしてFM-7に読み込む必要がありますが、40行足らずですので直接打ち込んだ方が早いと思います。


2020年10月11日日曜日

F-BASIC版のP-ROM Writerカード用ドライバが完成

 

F-BASIC版のP-ROM Writerカード用ドライブソフトも作りました


9月16日のブログで、P-ROMライター用のドライブソフトが完成したと書きましたが、それは、私が常用しているFlex9上で動作するものでしたので、オリジナルのOS-9版と同様、一般的ではありませんでした。
そこで、普段はほとんど使うことがないF-BASIC上で動作するものを作ろうとしたのですが、Flex9ではデータバッファとして32KBを確保できたのに対してF-BASICでは$8000番地から上がROMですのでそんなには取れません。
初めは裏RAMを使用することを考えたのですが、それでも32KBは無理です。(32KBにこだわるのは27256の容量だからです。)
結局、裏RAM使用は止めて少ないバッファ容量に合わせてデータを分割して読み込み、複数回の書き込みをすることとしました。(Flex9版でも27512では2回に分けて書き込んでいます。)
下図で分かりますように、バッファ容量として8KB確保しましたので、2716, 2732, 2764は一回で書き込めますが、27128では2回、27256では4回、27512では8回の書き込みを繰り返すことになります。







これに合わせて、Block選択コマンドを追加しました。(1ブロックは8KB)0を選択すると自動的に書き込みを繰り返して全ブロックを書き込みます。0以外では選択したブロックのみを書き込みます。
また、書き込むデータも全体をメモリ上には置いておけず、機械語ファイルとしてディスクに保存することになりますので、そのファイルのLoad, Saveコマンドも追加しました。
さらに、データファイルを8KB単位に分割して機械語ファイル形式に変換するためのソフトも別途必要です。

結局、実装したコマンドは Info, Type, Block, Pwidth, Dump, Erase, Read, Write, Verify, Load, Save, Quitの計12個となりました。


27512を選択した例を示します。




ブランクチェックをした後、書き込んでいます。
ブロック1から8までを連続して書き込んでいます。




ドライブソフトですが、ほとんどの機能を機械語サブルーチンに任せているので、BASIC部は基本的に初期化とコマンド選択・実行準備だけという簡単なものです。

BASIC部を示します。



機械語サブルーチン部を示します。


また、P-ROMに書き込むデータはF-BASICの機械語データ形式なので、先頭が 0x00,データサイズ(2bytes),書き込みアドレス(2bytes)の計5バイトで始まり、その後にデータ本体が続き、末尾が 0xFF,0x00,0x00,0x00,0x00の計5バイトで終わる形となります。
Windows上でデータファイルを8KB毎に分割し、上記の機械語形式に合わせて先頭と末尾に必要な各5バイトを追加するためのツールソフト spltdat.exeを作成しました。

以上より、私の場合のP-ROMに書き込む標準的な手順をまとめると、
(1)Windows上で書き込むバイナリデータを作成する。
(2)spltdat.exeで8KB単位のデータファイルに分割する。
        元ファイル ROMDAT --> 変換後ファイル ROMDAT1, ROMDAT2,...,ROMDAT8
(3)作成されたデータファイルをFM-7に転送する。
     転送手段としてはRS-232Cカードを使用できますが、それ以外にも思い付きハードでソフトに七転八倒さんによるFT-245使用の高速転送カードやArduinoMega2560使用のカードも使用できます。
(4)ドライバ PROMWRと書き込みデータを同じディスクに入れておいて、PROMWRを起動する。
(5)P-ROMの種類、書き込むブロック範囲、書き込みパルス幅を指定して書き込む。
以上です。
もちろんF-BASIC上で書き込みデータを直接作成して、そのまま書き込むこともできますが、その場合には$5000~$6FFFのバッファにデータを置き、一旦SAVEMで末尾にブロック番号を付けたファイル名で保存する必要があります。

作成した 書き込みソフトPROMWR, PWRSUBとツールspltdat.exeをOneDriveに置いておきます。なお、PROMWRはF-BASICのASCIIセーブ形式、PWRSUBは機械語データ形式になっていますので、そのままでF-BASICのディスクに保存できます。