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のディスクに保存できます。

2020年9月16日水曜日

P-ROM Writerカードのドライブソフトが完成

 ようやくP-ROM Writerカード用のドライブソフトが完成しました


6月26日のブログで紹介したP-ROM Writerカードですが、元になった記事ではOS-9上のソフトでコントロールしていました。
その際には、とりあえずOS-9 Level1で動作させて27C256に書き込めることを確認しましたが、OS-9上ではなく他のOS上で動作するドライブソフトを作成する必要があると考えていました。
また、ブログには2716の書き込みができていないと書きましたが、その原因は使用した270uHのインダクタにあり、流れる電流が許容値を大幅に超えており、かなりの発熱が生じていたために25Vが安定しなかったことにありました。

ハードの不具合が解消できたのでソフトの作成にかかりました。
最初はOS-9上のソフトを手直しすれば良いと考えていたのですが、他の方の制作したソフトを読むのは結構難しくて、結局、一から作ることになりました。

制作したドライブソフトは使い慣れているFlex9上で動作するもので、コマンドとして以下の13個を用意しました。
Type, Erase, Pwidth, Info:ROM指定、Blankチェック、書き込みパルス幅指定
Info:ROM種他の設定値の表示
Read, Write, Verify:読み出し、書き込み、ベリファイ
Dump, Fill, Memory:バッファのダンプ、フィル、データ変更
Load, Save:ファイルのロード、ファイルへのセーブ
Quit:終了

これらのうち、Info(設定値を表示)とPwidth(書き込みパルス幅を設定)以外は元のドライブソフトと同様な機能です。(Memoryはスクリーンエディタではありませんが...)

対応しているROMは2716, 2732, 2764, 27128, 27256, 27512の6種ですが、27128は手持ちがないので動作確認はできていません。
バッファサイズとして32KB用意してあるので27256までは一回で書き込めますが、27512は2回に分けて書き込むことになります。(27512の指定時に書き込みエリアの前半・後半を選択します。)

起動してROM種を選択している様子です。


ライター全景です。
左が68B21が載ったI/O拡張カードで、右がP-ROMライターカードです。



2732に書き込んでいる様子です。ジャンパー線でVPPを21Vに設定しています。




カード上でのROMの選択は20PのICソケット上でのジャンパーで行いますが、書き込み電圧VPPの指定だけはROM毎に確認してジャンパー線で設定する必要があります。特に2732や2764は要注意です。

【参考】
VPP値ですが、手持ちのADVATESTROMライタ付属のROM一覧表で調べてみると、
・2716   25V ----------------------------- 25V
・2732   25V, 21V ----------------------- 25V,21Vのどちらか要確認
・2764   25V, 21V, 12.5V, 12.75V -- ほぼ21Vだが一部25Vあり
・27128 21V, 12.5V, 12.75V, 13V -- 21V,12.5Vのどちらか要確認
・27256 21V, 12.5V, 12.75V --------- ほぼ12.5Vだが一部21Vあり
・27512 12.5V, 12.75V, 13V --------- 12.5V
と様々です。
271625V2751212.5Vと決め打ちしてて良いようですが、他はほぼ2種類あります。
 
また書き込みパルス幅ですが、27256以降は1msで書き込めますが、それ以前のものはパルス幅を大きくする必要がありますので、パルス幅も設定する必要があります。


コマンドの実行例を示します。

リードコマンドとライトコマンドです。
進行状態を表すために1ページ(256バイト)読み書きするごとにドット(.)を表示しています。




ダンプコマンドです。
以前作成したモニタコマンド中のルーチンを流用しているために、16バイトごとのチェックサム表示という余分な機能も付いています。



メモリーコマンドです。
これもモニタコマンド中のルーチンの流用です。書き込みデータを表示・編集できます。Pキーでアドレスを戻すことができます。また、テンキーの「*/+-=,」はA-Fとして扱われます。



これで一応、2716から27512までのEP-ROMのライターのハード、ソフトが完成したと言って良いかと思いますが、ソフトについてはオリジナルがOS-9上、今回制作したものはFlex9上で動作するものですので、一般的ではありません。
F-Basic上で動作するソフトが作れれば良いのですが、私の手には余ります。
今回のFlex9版の実行ファイルと共にソースファイルをOneDriveにアップしておきます。

2020年8月18日火曜日

Atmel StudioからArduinoを用いてATtiny85に書き込む

Atmel StudioからArduino UNOを書き込み器として用いてATtiny85に書き込む


私の場合はATtiny85に書き込むツールとしてTL866ⅡPLUSを使用しているのですが、Arduinoで書き込みができないかという声がありましたので、試してみました。
やりたいことはAtmel Studioでプログラムを作成し、それを書き込み器として設定したArduino(ArduinoISP)でATtiny85に書き込むということです。

(1)Arduino UNOを書き込み器として設定する。


「ファイル」→「スケッチ例」→「11.ArduinoISP」からArduinoISPを選択
「ツール」→「ボード」でArduino UNOを選択
「ツール」→「シリアルポート」でArduino UNOが接続されているポートを選択
「ツール」→「書込装置」でAVRISP mkIIを選択
スケッチをコンパイルして書き込む。
これでArduino UNOが書き込み装置になりました。

(2)ArduinoにATtiny85を認識させる。


「ファイル」→「環境設定」の設定タブ中の「追加のボードマネージャのURL:」に
「http://drazzy.com/package_drazzy.com_index.json」を書き込み、OKボタンを押す。(もう既に設定済みのものがあれば次の行に書き込みます。)
「ツール」→「ボード」→「ボードマネージャ」でフィルタにATtinyCoreと入力し、現れたATTinyCoreをインストールする。
「ツール」→「ボード」でATtiny25/45/85(No bootloader)を選択
「ツール」→「書込装置」でArduino as ISPを選択

(3)ArduinoにATtiny85を接続する。


        次のように接続します。(画像参照)
        Arduino UNO ATtiny85
        13 <----------> SCK 
        12 <----------> MISO
        ~11 <----------> MOSI
        ~10 <----------> RESET
        5V <----------> VCC
        GND <----------> GND







以上でArduino側の準備は終了です。
(もちろん、電源は入れたままにしておきます。)

(4)Atmel Studioの設定


「ツール」→「外部ツール」で次の3項目を設定

設定例
タイトル:ArduinoISP(ATtiny85)
コマンド:C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe
引数:-c avrisp -P COM6 -b 19200 -p t85 -U flash:w:$(ProjectDir)Release\$(TargetName).hex:i -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
(COM6はArduinoが接続されているポート、t85はATtiny85、3つのfuseの値は適宜設定)
さらに、「出力ウインドウを使用」にチェックを入れます。「起動時に引数を入力」にチェックを入れると書き込み時に引数を変更できますが、かえって面倒かもしれません。

これで、「ツール」メニュー中にArduinoISP(ATtiny85)が現れます。
[注意]これは書き込む条件、チップ毎に設定する必要があります。

しかし、私の場合、これだけではconfigファイルがないというエラーが出ましたので、C:\Program Files (x86)\Arduino\hardware\tools\avr\etc中にあるavrdude.confをavrdude.exeのあるフォルダにコピーします。

(5)書き込み


Releaseモードでビルドしてhexファイルが作られましたら、「ツール」メニュー中のArduinoISP(ATtiny85)を選択するとhexファイルが書き込まれます。
Atmel Studioの出力ウインドウにメッセージが出ますので、書き込まれていることを確認できます。

[参考にしたサイト]
ArduinoISPの設定方法についてはAnalogic Intelligence Z80-MBCの作成 其の参を、
Atmel StudioへのArduinoISPの設定方法についてはシナプスのハード製作記を参考にさせていただきました。ありがとうございます。

2020年8月9日日曜日

FM-7/77にGOTEKを接続する

FM-7やFM77にGOTEKを接続してみました

[12月6日追加]新基板のGOTEKの場合はこちらをご覧ください
[8月19日追加あり]

以前からHxCエミュレータには興味があったのですが、お遊びで試してみることができるような値段ではないので手を出さなかったのですが、低価格のGOTEKなら失敗してもあきらめがつくということで、2台入手してみました。
FlashFloppyというソフトの存在を知ったことも大きかったです。それまでは有料であるHxCのエミュレータをインストールしなければGOTEKは使えないものと思い込んでおりましたので。
さらにGOTEKは種類も多く、FM-7や77では2DDの720KBのものしか使えないのではないかと思っていたのですが、FlashFloppyをインストールするのであればどれでも良いのではないかと考えて、最安値に近いものを購入しました。

購入したのはSFR1M44-U100Kという型番のものです。オプションとしてOLEDディスプレイとロータリーエンコーダ(スイッチ付き)も入手しました。

FlashFloppyの入手・インストールやオプションの取り付け方等については先人の知恵をお借りしました。GOTEKやHxCというキーワードで検索すればたくさんヒットしますので、それらをご参照ください。
私は、特に「レトロなPCとか」の「FDDエミュレータのまとめ」を参考にさせていただきました。説明が具体的でかつ画像もありますので大変参考になりました。他には、「FlashFloppy Wiki」も参考にしました。ありがとうございました。


オプションのOLEDとロータリーエンコーダ(スイッチ付き)を増設しました。
画像にはありませんが、さらに圧電スピーカーも追加しました。


テスト風景です。自作のFDCカードからのフラットケーブルをそのままGOTEKに接続しています。カード上のStepDoubler機能はOFFにしています。
USBメモリ中に、F-BASIC30、Flex9、OS-9Level1、CP/M-80のシステムディスクのイメージファイル(D88形式をHFE形式に変換したもの)を入れて起動してみました。
どのシステムも正常に起動し、読み書きができました。




実際の使用風景です。このために最近入手したPC98用のFDDケースに収めています。GOTEKをドライブ0に、PC用のFDDをStepDoublerアダプタを通して接続してドライブ1に設定しています。
(OS-9を動作させるために、StepDoublerアダプタには7月19日のブログ「2DDドライブ用ステップ2倍化回路のその後」中の訂正を加えています。)



接続図です。


常用しているFM77AV40SXにも組み込んでみました。2DDファイルもOKでした。



訳が分からなくて苦労したことなど


ハードの設定やソフトのインストールなどは先人の知恵をお借りすることで、それ程苦労することはなかったのですが、イメージファイルをUSBメモリにインストールするところでは苦労しました。

HxCFloppyEmulator.exeでイメージファイルを作成する際の設定
[1]購入時の3桁7セグ表示の場合
 (1)使用するモードはIndexed Modeを選択
 (2)SDCard HxC Floppy Emyulator settingsとUSB HxC Floppy Emyulator settingsの設定では
 DoubleStepにチェックを入れない。
 Indexed Modeにチェックを入れる。
 2 drives emulationのチェックを外す。
以上の設定の上で(設定ファイルをUSBメモリにコピーする)、LoadでD88形式のディスクイメージファイルを指定してExportでHFE形式で書き出し、それをUSBメモリにコピーする。
その際のファイル名はDSKA0000.HFE,DSKA0001.HFE,...のように命名する。
7セグ上では000,001,...のように表示されるので、2つの押しボタンスイッチで選択する。

[2]OLEDに変更後の場合
 (1)使用するモードはNormal Modeを選択
 (2)settingsの設定では
 DoubleStepにチェックを入れない。
 Indexed ModeやAUTO BOOT Modeにチェックを入れない。
 2 drives emulationのチェックを外す。
以上の設定で(設定ファイルのコピーは不要)、LoadでD88形式のディスクイメージファイルを指定してExportでHFE形式で書き出し、それをUSBメモリにコピーする。
その際のファイル名は自由で良い。OLEDではそのままファイル名が表示される。

分かってしまえば簡単な手順なのですが、最初は何も分からない状態ですので、アップデートの必要がないのにしてみてエラーに悩んだり、あれこれ設定してみた間違った設定ファイルを書き込んでみたり、Modeと設定ファイルが合っていなかったりの試行錯誤の連続でした。
しかも、オプションのOLEDに交換するまでは3桁の7セグ表示ですので、表示の意味も良く分からない状態でインストールしようとしている者にとっては迷ってしまいがちです。

結果的には、何とか無事にインストールできて良かったです。

[8月19日追加]
上記はFM-7やFM77AVのような2Dの機種の場合です。
私が常用しているFM77AV40SXのような2DDの機種の場合は、次のようになります。
・元ファイルが2Dのイメージファイルの場合はDoubleStepにチェックを入れる。
・元ファイルが2DDのイメージファイルの場合はDoubleStepにチェックを入れない。


使用感など


まず、スピードはフロッピィとあまり変わらないようです。
また、音ですが、有り合わせの圧電スピーカーを付けたせいか、アクセス音はチリチリという小さな音が聞こえるだけですが、フロッピィのアクセス音は邪魔だったのでこれで良いかなと思います。
ただ一つ難点はOLEDの表示が老年者には小さすぎることですね...

何よりも良いのは、つまみを回すだけで起動するイメージファイルを選べることです。
私はメインでFlex9、時々OS-9やCP/M、ごくまれにFBasicを使っていますが、それらをUSBメモリに入れておけば、いちいちフロッピィを取り出す必要がありません。
ドライブ1にはフロッピィディスクをセットしてありますが、ドライブ2,3としてRAMディスクやWiindows上の仮想ドライブも使えますので、いよいよフロッピィと縁が切れるかもしれません。