2019年12月31日火曜日

FM-7でPC用のフロッピードライブを使う(その後の訂正・補足)

前回の報告の一部訂正と動作したFDDが増えたという報告です


前回(10月26日)のブログでは動作するFDDはTEAC FD-235HGのみですと書きましたが、その後、報告の内容に間違いがあることに気づきました。

それは、使用したFDCがMB8877AなのでSTEP信号は正論理であるのに、FM77AV40SXのSTEP信号を観測した際に負論理だったので、STEP信号が負論理であると思い込んでしまったことです。
観測したSTEP信号はFDCの出力端子ではなくFDDへの入力端子でしたのに、完全な勘違いでした。
正しいSTEP信号

STEP信号の2倍化回路はFDCの出力直後に入れていますので、正論理のSTEP信号を処理することになります。

ATtiny85のプログラムを信号の立ち上がりで起動するように訂正し、さらに、パルス幅tとパルス間隔をFM77AV40SXのSTEP信号のパルス幅(1.5ms)とパルス間隔(4.5ms)に合わせました。
(割り込みルーチン内でタイマーによるdelay関数を使用しているのは気になるところですが、STEP信号による割り込み以外は生じないということで大丈夫だろうと判断しています。)

また、端子変換やREADY信号生成回路として、前回はK-ichi's memoさんの「MSXでPC用FDDを使う」中のPIC12F675を用いた回路を使用しましたが、FM77AV40SXで常用しているてきとーに。さんの「FM77AV20/40以降のFDD修理というか交換」中のダイオード1個による簡便な変換回路も製作し、両変換回路による違いも確認しました。


実験風景


その結果、手持ちの13台のFDDで確認した結果は以下のようになりました。
(1)両変換回路で動作
 TEAC FD-235HG (7304,7487,8386) 
 SONY MPF920                             
 YE-DATA YD-702D (6637D) 
 MITSUMI D353M3D (3110 2台)
(2)ダイオード1個の変換回路のみで動作
 MITSUMI D353M3 (2552,2553)
(3)PIC12F675の変換回路のみで動作
 MITSUMI D353M3D (4340,6250 2台)
 MITSUMI D359M3D (4372)

何故かMITSUMIのFDDは末尾にDが付いているものは3110のみが動作しましたが、他はどちらかでしか動作しませんでした。設定が異なるのかもしれませんが、MITSUMIのマニュアルが入手できていませんので原因は不明です。
この結果を見る限り、この用途で使う場合にはMITSUMIのFDDは避けた方が良いようです。

運用上の問題ですが、2DDドライブでディスクを初期化しても2Dドライブのヘッド幅の半分しか初期化できないので、2DDドライブで作成したディスクは2Dドライブでは読み書きできない2DDドライブ専用のディスクになるという問題があります。
(全てが2DDドライブのシステムで完結していれば良いのですが、2Dのシステムとの兼用を考えるとこれがネックとなります。)

この問題を解決するために、FM77AV1を入手し、ドライブ2として手持ちの5インチのYD-274(古い!)を接続し、5インチのF-BASICシステムディスクからAV1の3.5インチの2Dドライブで初期化した2Dディスクにシステムをコピーし、元ディスクとしました。
また、上記の実験で使用した2DDドライブで使用するフロッピーもまずAV1の2Dドライブで初期化したものを使用しました。

2019年10月26日土曜日

FM-7でPC用のフロッピードライブを使う

PC用のFDD(2HD,2DD)がFM-7で2Dドライブとして使用できるという報告です


8月26日のブログ「FM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板化が完了」の末尾に、プリント基板化を考えているカードとして、MB8877A使用のFDC基板を紹介しました。
そこでは、STEP信号を2倍化すれば、FM-7にPC用のFDD(2DDドライブ)が接続できるのではないかと書きました。

2倍化するための回路をあれこれと考えていたのですが、ディスクリート回路ではどうも無理なようでしたので、マイコンで実現してみることにしました。
考え方としては、MB8877AからSTEP信号が1つ出たら、適当な間隔をあけて2つのSTEP信号を出せば良いので、マイコンなら簡単そうです。

マイコンとしてPS/2キーボード変換器で使ったことのあるATtiny85を用いることにしました。これなら8ピンとコンパクトですので、FDCカードに載りそうですので。
ATtiny85のINT0割り込みはPB2なので、PB2にSTEP信号を入れ、その立ち下がりで割り込みを発生させて、割り込みルーチン内で2つの信号を出すことになります。

回路図です


参考にしたTEAC FD-235HGのマニュアルによると、STEP信号の間隔は最小3ms(方向転換後は4ms?)で、幅は特に規定されていないようですので、下図のように、幅10us、間隔4msで、2つ目の信号の後は4msの待ち時間を入れました。
(FM-7用のドライブのステップレートは6msまたは20msのようですので、本当は、全体を6ms以内に抑えた方が良いのでしょうが、とりあえずの値ということで...)




STEP信号です

ATtiny85のmain.c部のプログラムを以下に示します。

/*
 * StepDoubler.c
 *
 * STEP PULSE for FDD changes to double pulse
 * input pulse
 * -> output first pulse (pulse width is 10us)
 * wait 4ms
 * output second pulse (pulse width is 10us)
 * wait 4ms
 *
 * PORTB bit2:input pulse, bit4:output pulse (double pulse)
 *
 * Original Version '2019.10.25
 * Copyright (C) by Old68fun
 */ 

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define F_CPU 8000000UL

void setup(void)
{
MCUSR = 0x00; /* MCUSRのWDRFを解除(0) */
WDTCR |= (1<<WDCE)|(1<<WDE); /* WDCEとWDEに論理1書き込み */
WDTCR = 0x00; /* ウォッチドッグ禁止 */

DDRB = 0b11111011; /* PORTB bit2:input, bit4:output */
PORTB = 0x00; /* PORTB not pull up */
PORTB |= _BV(2); /* bit 2:pull up */
PORTB |= _BV(4); /* bit 4:pull up */

MCUCR = (1 << ISC01) | (0 << ISC00); /* INT0 interrupt on falling edge */
GIMSK = (1 << INT0); /* Enable INT0 interrupt */
sei();
}

ISR (INT0_vect)
{
// cli();

// first pulse
PORTB &= ~_BV(4); // DATA bit=L
_delay_us(10);
PORTB |= _BV(4); // DATA bit=H
_delay_ms(4);
// second pulse
PORTB &= ~_BV(4); // DATA bit=L
_delay_us(10);
PORTB |= _BV(4); // DATA bit=H
_delay_ms(4);

// sei();

}

int main(void)
{

setup();

while(1) {
}
return 0;
}


FDCの回路図を示します。
【2020年1月21日追記】この回路には一個所間違いがあります。また、動作している実機と同じであることの確認をまだしていないものです。

FM_FDC回路図です(動作確認はまだです)

MB8877AのSTEP出力(ピン15)と7438の入力端子の間に上記のATtiny85を挿入して改造は完了です。

動作中の様子を示します。確かに2Dディスクが読めて、F-BASIC 3.0が起動しています。

                                        
動作中の様子です


FDDの電源も臨時にATtiny85基板から取っています。

基板の右上の小基板がATtiny85です


2DDドライブとしてMITSUMIのD359M3Dを使用しました。
【'2019.10.27追記】末尾に使用可能ドライブについて追記しました。

使用したFDDはMITSUMIのD359M3Dです

なお、FD用ケーブルとFDDとの接続部での端子変換やREADY信号生成には、以前、FM77AV40SX用にと製作したK-ichi's memoさんの「MSXでPC用FDDを使う」中のPIC12F675を用いた回路を使わせていただきました。蛇足ですが、現在はFM77AV40SXにはてきとーに。さんの「FM77AV20/40以降のFDD修理というか交換」中のダイオード1個による簡便な変換回路を用いています。


端子変換、READY信号生成部です


横から見た様子です


手配線の基板なのでIC数はこれで精一杯でしたが、プリント基板化すればATtiny85も収まりそうです。

FDC基板の全景です

これで、大昔に製作したFDCカードをプリント基板化する動機付けができました。
回路図をKiCadで書き上げたところで止まっていましたが、これから基板パターンを仕上げようと思います。

【'2019.10.27追記】ドライブについての情報を追加します。
使用したドライブ
  TEAC FD-235HG, YE-DATA YD-702D, MITSUMI D359M3D, D353M3D
使用可能なドライブ
  TEAC FD-235HG のみFILES,LOAD,SAVEが可能でした。
他のドライブのうち YD-702D, D359M3DはDISK-BASICが起動し、FILES, LOADは可能ですが、SAVEができません。D353M3DはDISK-BASICの起動すらしませんでした。

DATASHEETが入手できたのは FD-235HG, YD-702D のみですが、STEPパルス幅は0.8us, 1.0us(最小値)、パルス間隔は3ms(4ms), 3ms(最小値)でした。
パルス幅を2us~10us、パルス間隔を3ms~5msに変えてみましたが上記の結果は変わりませんでした。
ということで、現在のところ、対応ドライブはTEACのFD-235HGのみということになります。


【'2019.11.01追記】FM77AV40SXのSTEP信号を実測してみました。
ディスクをアクセスしているときのSTEP信号は下図のようでした。

FM77AV40SXのSTEP信号

何とSTEP信号の幅はusのオーダーではなく、1.5msもありました。2つ目のSTEP信号は4.5ms後に出ていますが、FDDの規格では3ms以上ですから余裕があります。次のSTEP信号までの間隔は20msですが、これはFM-7のSTEP間隔20msという規格に合わせてあるのでしょうか。


FM-7/77用RS-232Cカードの改良版

FM-7/77用RS-232Cカードの改良版を作りました


8月16日のブログでYSFLIGHT.COMさんの回路図を使わせてもらったRS-232Cカードの製作記を載せましたが、一個所ミスがあったのと、ストレートとクロス(リバース)接続を選択できるようにしたいと考えて、改良版を製作しました。
回路図を示します。

RS-232 Ver1.1

製作した基板です。

左:初版、右:改良版

ジャンパ―ピンで、ストレートとクロス(リバース)を切り替えることができます。


今回はミスなし


YSFLIGHT.COMさんの名前入りです



38400baudでの動作


YSFLIGHT.COMさんのブログでは、Intelの8251Aでは19200baudまでだが、C-MOSの82C51Aでは38400baudで動作すると記されていました。
私のところでは、IntelのP8251A('77年製)ではOKで、TOSHIBAのチップではダメでした。
YSFLIGHT.COMさんによれば、OKIの互換チップでは38400baud動作を保証しているということでしたのでebayで購入してみました。2業者から購入しましたら、刻印はMSM82C51A-2RSとM82C51A-2と異なっていましたが、どちらも確かに38400baudで動作しました。

私は9月26日のブログに書きましたように、シリアル変換のADM232を外してジャンパー線で82C51Aの端子をコネクタに直結して、TTL-USB変換ケーブルを介してパソコンのUSB端子に接続して使用しています。

改めてYSFLIGHT.COMさんに感謝いたします。


2019年9月26日木曜日

RS232Cカードに関するちょっとした工夫

より使い易いようにRS232Cカードの使い方の工夫をしました


8月16日や9月25日のブログの画像で分かりますように、RS232Cカードの先にはD-Sub 9ピンコネクタがつながり、その先にストレート接続をクロス(リバース?)接続に変換する変換回路があり、最後はシリアルーUSB変換ケーブルでWindows機に接続されています。

もう少しすっきりさせたいということで、次のように考えました。
1.シリアルーUSB変換ケーブルではなく、普通に出回っているTTL-USB変換ケーブルを用いる。
2.RS232Cカードの出力を最初からクロス接続にする。

1.については、そもそもRS232Cに変換するのではなく、8251Aの入出力をそのまま取り出せばよいのですから、基板上のADM232を取り去って、代わりに画像のようなジャンパ基板をソケットに装着します。


ICの代わりにジャンパー


2.については、現在のRS232Cカードにストレート/クロス切替機能を追加した基板を製作中ですが、現在のRS232Cカードの場合にはケーブルで工夫することになります。
ということで、画像のようなケーブルを製作しました。


TTLクロス出力のケーブル



これで、比較的高価なシリアルーUSB変換ケーブルを使うことなく、低価格のTTLーUSB変換ケーブルが使えますので、見た目もすっきりです。


これだけでOK!すっきり



私はヤフオクでの3~400円程度のものを使用していますが不都合はありません。また、5V仕様だけでなく、3.3V仕様のものでも同じように使えています。
(蛇足ですが、3.3V仕様と言いながらVCCに5Vが出ているものもあるようで、私はこれでPICのICを破壊してしまいました。(泣))

2019年9月25日水曜日

FM-7/77のF-BASIC用の仮想ドライブ構築ソフトが完成

F-BASIC(V3.0)のドライブ2,3として仮想ドライブを構築するソフトが完成


[2020年11月3日]仮想ドライブ構築ソフトのバグ修正版Ver1.2に関して追記しました

[2021年1月13日]仮想ドライブ構築ソフトのバグ修正版Ver1.21に関して追記しました

今まで、FM77AV40SX上でFLEX9とOS-9用にWindows機上の仮想ドライブを構築して、内蔵ドライブ0,1に加えて仮想ドライブを2,3として使用していましたが、最近、常用しているSXに加えて、再びFM-7をいじりだしたこともあり、ディスクドライブを持たないFM-7でDISK-BASICを使いたくて、先日製作したRS232Cカードを使用して何とかしたいと考えていました。
そんな時に、日本橋電気街徘徊日誌さんからプリンタポートに接続するシリアルメモリからDISK-BASICを起動するカードを頂きましたので、これをベースにして仮想ドライブを構築することとしました。

RS232Cを内蔵しているFM77AV以降の機種ではそのままで、FM-7(DISK-BASICが動作する環境が必要)等ではRS232Cカードを追加すれば仮想ドライブが実現できます。これによって、ファイルは全てWindows上のファイルとして保存でき、簡単にDISK-BASICとの間でやり取りできます。
さらに、私の製作した拡張I/OボードのFT245RLやFT232RLを用いたパラレル/シリアルポートを使用することもできます。

全体の構成図は以下のようです。


全体の構成


FM-7用のRS232Cカードは8月16日のブログで紹介したもので、拡張I/Oボードは6月12日と8月26日のブログで紹介したものです。


制作したプログラム


(1)仮想ドライブ構築ソフト FBasDrvWin.exe(Windows側)
基本的な考え方は2018年4月16日のブログ「FLEX用Virtual Driveの作り方」で説明した通りですが、DISK-BASICのFMS(ファイルマネージメントシステム)に相当するものを実装する必要がありますので、エミュレータXM7を用いて、ファイルを追加・削除・名称変更などをする毎に変更前と変更後のDSKファイルの全体を比較し、どこが書き変わっているかを調べるという愚直な手法で調査し実装しました。
手間としては、OS-9のような複雑なシステムではなく、比較的単純なFATシステムですので、それ程大変ではありませんでした。

実際に使用してみると、BASICプログラムについては、Windowsで作成して仮想ドライブにDrag/Dropすることで簡単にDISK-BASIC側に持っていけるのですが、機械語プログラムはそのままでは持っていけないので、S-format形式やHex形式のファイルを読み込んでDISK-BASICの機械語ファイル形式に変換して保存する機能を追加しました。

(2)ドライブ拡張ソフト WINDRVxx(FM側)
基本的にはドライブ番号が2,3の場合にBIOSの8,9,10を切り替えて、仮想ドライブにアクセスするようにすれば良いわけですが、それをどこに置くかが問題です。
参考にしたのは、Oh'FM 1984年11月号に掲載された「裏RAMディスク」(轍名聡さん)です。これを見習ってBIOSの変更部のみを$FC30~に置き、その他は裏RAMの$8000~に置くことで表RAMの消費を少なくすることができました。

後はFMとWindows間の通信に関わる部分のみで、3種類の通信経路を実装しました。
RS232Cの8251A、拡張I/Oボード上の6850+FT232RL(または6850+ADM232)と6821+FT245RLの3つです。

8251Aのプログラムに関して


6850と6821を使用した場合のプログラムは、慣れていることもあり、割とすんなりと作成できましたが、8251Aを使用する方には苦労しました。
FM側からの送信はできるのですが受信ができないのです。F-BASICのプログラムでは問題なく送受信ができることからハードに問題がないことは分かりますし、プログラムも単純なもので、それにRTS/CTSによるハードウエア制御を加えただけで、6850では同様な制御がちゃんとできています。
この問題に一ヶ月以上を費やしましたが、ネットにも8251Aを機械語でハードウエア制御した例は見つからず、お手上げ状態でした。そんな時に、ネットのルネサスの質問箱のようなところで、USARTでのRTSは送信・受信の両方を同時には制御できないようだという書き込みを見ましたので、もしかしたらこれかもと思いましたら、ビンゴでした。

つまり、8251AでRTS制御するときには、RxEとTxENを同時にイネーブルにしてはいけないということでした。受信時にはRxEのみをイネーブルにし、送信時にはTxENのみをイネーブルにしなければならないということなのです。その部分のソースリストを示します。

*
MRSTU EQU $40 ;master reset
MODEU EQU $4E ;1stopbit,non pari,8bit,16x
CLRTSU EQU $15 ;RTS=H,ER,RxE,TxEN
SERTSUR EQU $34 ;RTS=L,ER,RxE for receive
SERTSUS EQU $31 ;RTS=L,ER,TxEN for send
TxEMPTY EQU $04
*
*--------------------------------------
* receive from serial port
* (use USART 8251A)
*    A <- port
*
RCVCH EQU *
 LDA #SERTSUR ;RTS=L
 STA SCMD
 NOP
RCV1 LDA SSTS
 ASRA
 ASRA
 BCC RCV1
 LDA SDATA ;get data
 PSHS A
 LDA #CLRTSU ;RTS=H
 STA SCMD
 PULS A,PC
*
*--------------------------------------
* send to serial port
* (use USART 8251A)
*    port <- A
*
SNDCH EQU *
 PSHS A
 LDA #SERTSUS ;RTS=L
 STA SCMD
 NOP
SND1 LDA SSTS
 ASRA
 BCC SND1
 PULS A
 STA SDATA ;send data
 PSHS A
SND2 LDA SSTS
 BITA #TxEMPTY
 BEQ SND2
 LDA #CLRTSU ;RTS=H
 STA SCMD
 PULS A,PC
*

6850では同時にイネーブルにしても何の不都合もありませんので、8251Aのこの制約は何なのだろうかと思います。
知っている方には常識かもしれませんが、どなたかのプログラミングの参考になればと思いますのであえて書き記しておきます。

プログラムですが、メモリ節約のためにすべてに対応するプログラムではなく、別々のプログラムとしました。
 FM-7(8251Aカード)用     :WINDRVU7
 FM77AV40SX(内蔵8251A)用  :WINDRVUX
 FM-7/FM77AV40SX共通(6850+FT232RL用):WINDRVA
            (6821+FT245RL用):WINDRVP (要RTS制御)
の4種類です。


動作中の様子


各部の接続の様子を示します。左上に見えるのがシリアルメモリからDISK-BASICを起動するカードで、プリンタポートに接続されており、電源は拡張ポートから取っています。
左が自作の拡張I/Oボードで、FM77AV40SX用に製作したものですが、インターフェースボードを介して32Pスロットに接続しています。

動作中の様子


Windows機上のFBasDrvWin.exeの画面です。DSKファイルだけでなく、D77ファイルも扱えます。

FBasDrvWin.exeの画面


RS232Cカードと拡張I/Oボードへのケーブルの接続の様子です。

RS232Cカードと拡張I/Oボードへのケーブル


拡張I/Oボードへのインターフェース基板です。単なるピン配置の変換のみです。

拡張I/O ボードへのインターフェース基板


プログラムのインストール方法

インストールするためのF-BASICプログラムを用意しました。インストールの手順書を添付しましたので、そちらをご覧ください。


プログラムの使用方法


(1)FM-7,FM77AV40SX側
起動時にドライブ数として4を指定します。
LOADM "x:WINDRVxx",,R と入力して、必要なプログラムを起動します。

(2)Windows側
FBasDrvWin.exeを起動します。
起動時に同じフォルダ中に.INIファイルがあれば、それを読んでポート番号、ボーレート、ハンドシェークを設定します。
ボーレートはFM77AV40SXで8251A使用の場合のみ19200baud、その他は38400baudです。
処理するディスクファイルをDrive 2や3のボックスにDrag/Dropします。
ディスクファイルの形式はDSK形式とD77(D88)形式のどちらにも対応しています。
ファイルリスト欄でファイルの追加、削除、名称変更ができます。

【制約】2DDディスク対応について
FBasDrvWin.exeは2DDディスクファイルに対応するように制作してありますが、WINDRVxxの方は現在のバージョンではF-BASIC V3.0にのみ対応しています。
F-BASIC V3.3では$FC30からの領域を使っているのか、それとも裏RAMの$8000からの領域を使っているのか不明です。保存領域をずらしてみたりしているのですが、今のところ動作させることができていません。もしかしたらBIOSそのものの場所がV3.0とは違っているのかも。(F-BASICのことは良く分からない。。。)

(FBasDrvWin.exe単独で2DDディスクファイルを処理することはできますので、例えばこれを用いて作成したディスクファイルをエミュレータXM7で使用することもできます。)

(3)F-BASICで扱うファイルの形式(の一部)
(3-1)BASICファイル(アスキーセーブ)
先頭に改行($0D,$0A)があればBASICアスキーファイルと解釈される。
(3-2)BASICファイル(バイナリセーブ)
先頭からプロテクトフラグ($FF,$FE)、UNLIST開始行番号、以降にテキストが続く。
(3-3)機械語ファイル
先頭から$00、データ長(2バイト)、格納開始アドレス(2バイト)、データという形のデータブロックが一つだけ。最後に$FF、ダミー(2バイト)、入り口番地(2バイト)という形の終了ブロックが続く。

WinodwsからファイルをDrag/Dropで追加する場合、先頭の文字を見て、以上の3つを判別してディスクファイルに格納しています。
例えばBASICプログラムをWindows上で作成する場合は、先頭に空行を入れておけば良いということです。また、機械語ファイルの場合はS-format形式あるいはHex-format形式にして放り込めば、機械語ファイル形式に変換されて保存されます。

終わりに


もう使わないだろうと思ってFM-7の5インチ・3.5インチディスクシステムやディスプレイ一式を処分してしまっていたのですが、63C09カードなどがあるので全てを処分するには忍びなく、本体2台とソフトだけは残しておいたのですが、これでフロッピィを使わずにDISK-BASICを使うことができるようになりました。
カードを下さった日本橋電気街徘徊日誌さんに感謝いたします。

制作したプログラム(WINDRVxxはソースとバイナリ、FBasDrvWin.exeはバイナリのみ、インストールに使用するBASICプログラム)をOneDriveに上げておきます。

蛇足というか愚痴というか...
しかし、32Pスロット用のコネクタは入手しにくいですね。1個1,000円近く出せば入手できるようですが高すぎる。ちょっと前には秋葉原の通販で少しは安く買えたのですが、今回注文したら、何と入荷が11月半ばだそうです。(でも待つしかない、トホホ)
手持ちももう切らしているので、工作が進まない。。。

[2020年11月3日追記]
公開したFBasDrvWin.exeにバグが見つかりましたので修正版Ver1.2をOneDriveに上げておきました。

[2021年1月13日追記]
公開したFBasDrvWin.exeにバグが見つかりましたので修正版Ver1.21をOneDriveに上げておきました。(単純なバイナリファイルのドラッグ&ドロップ時の処理の修正)

2019年8月26日月曜日

FM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板化が完了

6月12日のブログで紹介しましたFM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板が完成しました


拡張I/Oボードの方は比較的単純な回路なのですが、ROM/RAMディスクボードはソフトに合わせて回路をかなり変更したのに、変更記録を完全に取っていなかったこともあり、製作時の記憶をなかなか思い出せず、KiCadの回路図に起こすのにかなり苦労しました。

例によって、勘違いによるミスもあり、修正を余儀なくされましたが、そう大きな修正でもなく何とか修正できました。
今回のミスで最大のものは同じピン数のコネクタで番号配置の異なるものを部品指定してしまったので、配線がでたらめになってしまったことでした。

でも、格安基板の10cmx10cmまでというサイズに収めるためにかなり無理をしましたがなんとか収まったので良しとします。

制作した基板を示します。
右が拡張I/Oボードで、左がROM/RAMボードです。

右:拡張I/Oボード、左:ROM/RAMボード

下画像のように2枚を重ねた状態で使用できます。


重ねた状態

それぞれの基板の回路図を示します。

拡張I/Oボード


ROM/RAMボード


それぞれの基板の部品配置です。
(1)拡張I/Oボード
FM77AVの拡張ポート(アンフェノール50P)に接続します。基板上の68B21にはAE-FT245RL、68B50にはAE-FT232RLとMAX232が接続されており、他に68B40(PTM)があります。(AE-FT232RLとMAX232は排他使用です。)


拡張I/Oボードの部品配置

(2)ROM/RAMボード
68B21を1個のみで4MbitのROMとRAMを制御しています。
ROMとRAMのペアが2組あり、それぞれスイッチで切り替えます。私はFLEX9システムとOS-9システムとで使用しています。RAMはバッテリバックアップされています。


ROM/RAMボードの部品配置

私の使用機器はFM77AV40SXなので、拡張ポートはアンフェノール50P ですので、途中で50Pフラットケーブルに変換して接続しています。
基板の入力を50Pフラットケーブルにしたのは、FM-7でも使用できるようにと考えたからですが、残念ながら、FM-7の拡張ポートには2.5MHzのクロックが出ていませんし、ピン配置等も異なりますので、そのままでは接続できません。
むしろFM-7の場合には、32Pの拡張コネクタの方が必要な信号が揃っていますので、こちらに接続するべきかもしれません。


左がFM77からの50Pケーブル、右がWindows機へのUSBケーブル

これらの基板のみで使用する場合は、本体のドライブが0と1で、ROMがドライブ2、RAMがドライブ3という形で使用することになります。
FLEX9やOS-9のディスクドライブルーチンをフックして、ドライブ番号が2と3の時のみROMやRAMをアクセスするように切り替えるルーチンを追加します。

さらにWindows機上の仮想ドライブを使用する場合には、ドライブ3や2を仮想ドライブに切り替えるルーチンを使用します。使用するFlexDrvWin.exeは以前公開したものがそのまま使えます。

現在は、F-BASICでも使用できるように、FbasDrvWin.exeを作りましたので、F-BASIC側のディスクドライブルーチンをフックするプログラムを作っているところです。



[蛇足]+++++++++++++++++++++++++++++++++++++++++++++
手持ちの過去の製作物でプリント基板化したいものとしては、もう一つ、数十年前に製作したFM-7用のFDD基板があります。


MB8877A使用のFDD基板(表面)

長い間、この基板の先に5インチ2台と3.5インチ2台のフロッピードライブを計4台接続して使用していました。

同(裏面)

今となってはドライブも処分してしまいましたし、特にプリント基板化して製作する必要もないのですが、捨てるのもためらわれるので未だに手元に置いてありますので、プリント基板化して資料として保管しておいた方が良いかなと思うわけですが、迷っている理由が2つあります。
(1)ICが20個もあるので格安基板の10cmx10cmには収まりそうもないのでコストがかかりそう。(恐らく12cmx8cm位になりそう)
(2)昔の製作物なのでデータセパレータとして、アナログでなくデジタルセパレータのFDC9216Bを使用しているので、現在のものよりも性能は落ちる。(特に不都合はないが)
ということで、FDC9216BとMB8877Aは予備も複数保管してあるのですが、KiCadで回路図を書き上げたところで止まっています。
アイディアとしては、現在普通に出回っているパソコン用の3.5インチFDD(2DD,2HD)をFM-7で使用できる基板にすれば使い道があるかなと。STEP信号を2倍にする回路を付加すればできそうな気がするのですが、まだきちんと追及していません。



2019年8月16日金曜日

FM-7/77用のRS232Cカードを作りました

富士通純正のFM-7/77用RS232Cカードの回路図を元にして基板を作りました。


YSFLIGHT.COMさんが富士通純正のRS232Cカードの回路を解析して回路図を公開されていましたので、私もその回路図を元にして作成してみました。

以前、FM-7でZ80カード(とCP/M-80)やOS-9Level1を使用していた頃はRS232Cカードも所有していたのですが、FM77AV40SXがメインになってからは、もう使うことは無いだろうと思ってFM-7一式を処分してしまいました。
ところが最近になって、FDDの代わりにSDカードやWin上の仮想ドライブなどを用いてFM-7を使うという試みをネット上で見ることがあり(shuji_akita2001さん、日本橋電気街俳諧日誌さんなど)、自分もやってみようということで放置してあった残りのFM-7を2台引っ張り出してきました。

まずはWindows機と通信ができなければ話にならないということで、shuji_akita2001さんから頂いたFT-245を用いた基板を使用して始めていました。
そんな中で、YSFLIGHT.COMさんのブログを見て、純正と同じボードを持っているのも悪くないな、FM-7が2台あるのだから2枚作れば良いかなと思って作ることにしました。

YSFLIGHT.COMさんが公開された回路図を見ると75188と75189を使っているので、今どきこれはないだろうということで、この部分をADM232に置き換え、さらに格安基板にするために10cmx10cmに収めることを目標に作成しました。
その結果、ADM232がIN/OUTそれぞれ2セットしかないので8251AのDTRとDSRは未接続となり、純正とは完全互換ではなくなりましたが、この2つを使用したソフトはまずないだろうと考えました。結局、10㎝×8cmのコンパクトな基板が出来上がりました。

回路図を下に示します

回路図(間違いあり)

実はこの回路図には1箇所間違いがあります。ADM232のピン2に接続されているC17はGNDではなくVCCに接続しなければなりません。

間違いを修正して無事に動作したと言いたいところですが、修正中に誤って隣のラインもカットしてしまったことに気づかず、送信はできるのに受信ができないという変な現象に悩まされることになりました。全配線を確認する作業の後、ようやくカットされた箇所を見つけて修理、無事に動作しました。

YSFLIGHT.COMさんは、C-MOSの8251Aなら38400baudで動作したと書かれているのですが、私のところでは、’83年製の8251Aでも38400boudで動作しました。(短いデータの通信しかしていませんが...)

動作している様子を示します。
F-BASICのプログラムでWindows機のTeraTermに送信し、TeraTermからファイル送信されたデータを受信して表示しています。38400baudで動作しています。


動作画面

下画像のようにRS232Cカードから自作のストレート/クロス変換ボードを通してRS232C-USBケーブルでWindows機に接続しています。
また、ディスプレイですが、以前使用していたXRGB-2は処分してしまったので、画像にあるようにFM-7のグリーンディスプレイ端子から自作のケーブルでI-O DATAのTVBOX2のコンポーネント端子に接続し、RGB出力をCENTURYのLCD-10000Vに入れています。
これでも80x25で表示できています。

接続の様子

基板の装着状態です。フラットケーブルで取り出せば、カバーを閉じることができます。

基板のアップ(1)


基板のアップ(2)

基板の表面と裏面を示します。
実は製作で最も時間がかかったのはD-Sub9ピンの工作です。使用したのはD-Sub9ピンのメスコネクタのL字タイプのものです。これの余分な個所をヤスリで削り、ピンをストレート状態に直してハンダ付けしています。(もう少し削って薄くした方が良かったようです...)

完成基板と生基板の表面


同裏面(本来不要な修正線が入っている)

ということで、無事に38400baudで動作するRS232Cカードが出来上がりましたので、FDDもカセットテープもない素のFM-7ですがプログラムを送り込んで動作させることができそうです。

今は、FLEXやOS-9と同様なF-BASIC用の仮想ドライブ構築ソフトFbasDrvWin.exeを作成してありますので、F-BASIC側のDISK BASICのFDDアクセスルーチンをフックして仮想ドライブをアクセスするように切り替えるルーチンを作成中です。
(それにしても、F-BASICをほとんど使用したことがないので良く分からないことが多い...)
素のFM-7なので保存する手段がなく、FM-7側の切り替えルーチンを送り込んで動作を確認という作業を繰り返すのにこのカードを使用しています。
完成すれば、このRS232Cカードではなく、shuji_akita2001さんの基板に置き換えて高速化を図る予定です。

回路図を公開していただいたYSFLIGHT.COMさんに感謝いたします。


2019年7月31日水曜日

FM77AVにPS/2キーボードを接続する変換器の基板化

FM77AVにPS/2キーボードを接続するためのキーコード変換器のプリント基板化が完了


6月12日のブログで紹介しましたキーコード変換器をプリント基板化しました。
ドジをして作り直したものですから時間がかかってしまいました。。。

右:製作した基板, 左:完成した基板

画像左が完成した基板です。現用のものではリセットスイッチを使用することがなかったので、回路図にはありますが実装していません。



ケースに収めた様子

TAKACHIのケースSW-50に収めた様子。予定通りピッタリです。
左のMini DINコネクタにPS/2キーボードのコネクタを、右の4ピンヘッダにFM77へのケーブルを接続します。(機種交換の予定がなければ、4ピンヘッダを用いずにFM77へのケーブルを直接ハンダ付けする方が良いでしょう。)


本来は自分のための製作物で、公開する予定はありませんでしたが、ご希望がありましたので公開することにしました。
前回のブログのコメント欄にも書きましたが、ごく普通の用途で使うことを想定しており、ゲーム等での早打ちには対応しておりませんので、そのつもりで使っていただければと思います。キーコードとキーコードの間に若干のウエイトを入れないとキーコードを正しく認識できなかったためですが、ソースも公開しますので、必要なら修正することも可能かと。。。
(そもそも、実用になるものが必要な方は商品として販売されているものがありますので、そちらを使用される方が良いと思います。)


回路図


回路図
注意! 回路図中のコメントのうち、FM77の機種ごとのピン配置は全てが正しいとは限りません。(実機を所有しているのはSXのみですので、他はネットの情報です。)

部品表    

  
    基板     専用プリント基板あり
    IC1      ATtiny85-20PU
    J1        ピンヘッダ 4pin(ケーブルを基板に直結する場合は不要)
    J2        MiniDIN-6 メスコネクタ
    SW1    タクトスイッチ(特にリセットが必要な場合もないので不要かも)
    C1       47uF 16V
    C2       0.1uF
    C3       0.1uF
    R1      10kΩ
    R2      4.7kΩ
    R3      4.7kΩ
    ICソケット  8pin
    ケース タカチ SW-50(必要なら)
    ケーブル S端子付き(FM77AV40SX)
    ケーブル モジュラー付き(4芯:FM77AV, 6芯:FM77AV20/40, EX)


製作上の注意点


回路は簡単ですので、専用プリント基板でなくユニバーサル基板に手配線してもそれほどの手間ではありません。私も手配線でまずATtiny2313で作り、小型化するためにATtiny85で作り直し、それを常用して3年以上になります。

注意すべき点は、本体に接続するコネクタです。
注意点は2つあります。
一つ目は機種によるコネクタの違いがあることです。
私のようにFM77AV40SXを使用している方はオーディオ用のSケーブルが使えるのですが、SXよりもFM77AVやAV20/40(EXも)を使用しておられる方が多いと思います。その場合はモジュラージャックの4極4芯(4P4C)か6極4芯(6P4C)となります。型番が不明ですがRJ-9,-12,-22などと呼ばれているようです。

二つ目はコネクタのオス・メスの違いに留意することです。ネットの情報は注意して見ないと本体側かケーブル側かがあいまいなものがあります。
特にSケーブルの場合は、間違えるとVCCとGNDが逆になりますので、最悪PS/2キーボードを破損します。(私が経験者です...)


特殊キーの割り当て


特殊キーについては次のように割り当ててありますが、ソースがありますので自由に変更できます。
 FM77 <--->PS/2 Key     
    DUP          F11
    HOME       F12
    BREAK      Kanji
    GRAPH      L_ALT, R_ALT
    EL            L_Win, R_Win
    CLS          ScrLk


ソフトの使用上の条件


本ソフトは上記のようにアマチュアが自分で使用するために制作したものであり、機能・性能上の不備がありますが、それを承知していただければ自由に使っていただいて結構です。
使用にあたっては、以下を守っていただくことを条件とします。
(1)このソフトを使用した結果、いかなる損害が生じても私は責任を負わないこととします。
(2)本ソフトはですくまさんが解析し、ブログ「ですくま備忘録」で公開してくださった貴重なデータがあって初めて制作できたものですので、ソフトのソースからですくまさんの名前を消さないこと。
(3)同様に、本ソフトはapplication note AVR313を使用させてもらっていますが、私が独自に作成した箇所もありますのでソフトのソースから私の名前も消さないこと。
(4)商用になるほど完成度の高いソフトではないので杞憂とは思いますが、本ソフトあるいは改変したソフトを商用利用しないこと。

さらに、これは条件ではありませんが、バグの修正を含めてソースの改変は自由ですが、その際には、そのソースを公開するとともに、私にもフィードバックしていただけるとありがたいです。(メールでも、このブログでも結構です。)

ソフトの公開


制作したソフトと回路図をMicrosoftのOneDriveに公開します。
cnvps2fm_tiny85.hexが実行ファイルですので、これをそのままATtiny85に書き込んでもらえば動作します。ただし、ソースファイルの先頭に書いてありますが、Config bitの変更を忘れないでください。


プリント基板を配布します


プリント基板の余分がありますので希望される方がおられましたらお譲りします。
(1)プリント基板のみ(118円 送料82円 計200円)
(2)プリント基板とプログラムを書き込んだATtiny85のセット(330円 送料120円 計450円
[8月16日訂正]厚さが1cm以内で収まりますので送料は82円で合計412円です。
(3)多分おられないとは思いますが、完成品を希望の方はご相談ください。(お持ちのFM77の機種によってケーブルが変わりますので。但し、ケースの穴あけはご自分でお願いします。) (1500円 送料140円 計1640円)
という形を考えています。

ご希望の方は、自己紹介のページにOld68funのメールがありますので、そこから希望の番号(1~3)を記してご連絡ください。折り返し、振り込んでいただくゆうちょ銀行の口座をお知らせします。枚数に限りがありますので、希望の方が多い場合は先着順とさせていただきます。ご容赦ください。

2019年7月15日月曜日

ようやくプリント基板ができたと思ったら

FM77AVにPS/2キーボードを接続する変換器のプリント基板が...失敗!


本日ようやくプリント基板が届きましたので、早速組み立てようとしたら...
何と、PS/2キーボード用のコネクタが逆向きでした。。。ドジ!


なんとPS/2コネクタが内向きだった


さらに、PS/2コネクタとしてMiniDIN-6pinのフットプリントを使用したのですが、ピン間隔が現物(秋月電子で購入)と微妙にずれているようで、すんなりと入りません。
フットプリントの修正も必要なようです。

現在使用中のものは手配線でしたが、これぐらいの回路はプリント基板化するのも簡単だろうとナメていたようで、反省しています。もっと慎重に進めなければ。。。

これでは何ともなりません。作り直しということで、完成はさらに一ヶ月後ということになりそうです。

2019年7月7日日曜日

Pic24CPM-80とPic24CPM-68kマイコンボードの製作記

skyriverさんが公開されている2種のマイコンボードを製作しました


最近は、本業(?)である68系から離れて、CP/Mの走るボードを作ったり、CP/Mソフトの使い方を練習したりしていますが、CP/M-68Kをいじってみたいという動機からです。
ということで、またまたCP/Mマイコンを製作しました。

製作したのは、CPUとMemoryの他にはPic24FJ64GA004だけという3チップマイコンです。skyriverさんはCPUにZ80と68008を用いたボードの設計・製作の経過をブログにアップされており、さらに製作手順のまとめを詳細な説明付きで公開されていますので、両方とも製作してみました。

上:Pic24CPM-68K,下:Pic24CPM-80

左:Pic24CPM-68K,右:Pic24CPM-80

CP/M-80の走るZ80ボードについては、中日電工さんのND80Z3.5を所有している上に、興味本位でJust4FunさんのZ80-MBC,MBC2を製作しましたので、これ以上は必要がないといえるのですが、skyriverさんの説明がとても丁寧でしたので、CP/Mの知識がほとんどない自分にとっての練習のためという動機もありました。

製作してみた結果ですが、SDカードのアクセスのSPI通信に結構工夫されているせいか
立ち上がりもSDのアクセスも速く、とても軽快で、使いやすいという感想を持っています。
また、独自のpicleというpic24FJ用コンパイラ(インタプリタも)を自作され、それを用いてシステムを構成されているのも興味深いですし、Z80,68Kの両方で同じ操作性のスクリーンエディタsked (Z80用68K用) も作られているので、ソフトの開発がしやすいと思います。

[1]Pic24CPM-80製作記
目標は68Kの製作でしたが、CP/Mの知識がほとんどないので、練習のつもりで、まずPic24CPM-80を製作することにしました。
skyriverさんのブログのここに「3チップ構成Pic24CPMマイコン(CP/M起動までの作業まとめ)[Z80]」という手順説明がありますので、その通りに進めていけば動作させることができます。

基板についてですが、skyriverさんがガーバーデータを公開されておりますので、それを元に基板を製作しましたが、表面実装部品を使用するものでした。残念ながら表面実装部品の手持ちがなかったのでKiCadで回路図を書き直し、そのガーバーデータで作り直しました。
(skyriverさんの方はシンプルで見栄えも良いですが、私の方はそれに比べてゴチャゴチャしていますね。。。残念!)


Pic24CPM-80 表面

Picの書き込み端子のVCCとSDコネクタのケースグランドを忘れていた

起動直後の画面


SDアダプタのケースがグランドに落ちていなかったり、表面のシルクのレイヤーを入れ忘れたりなどのミスはありましたが、無事に動作しました。



[2]Pic24CPM-68K製作記
続いて、Pic24CPM-68Kの製作に進みました。Pic24CPM-80と同様、KiCadで回路図を書き直し、そのガーバーデータで基板を作りました。

Pic24CPM-68K 表面

回路図では交差しているだけなのに接続されていたというミスあり

起動直後の画面


これにも若干のミスがありましたが、無事にメモリ書き込みテストまで確認できました。
私が作り始めた時には製作手順は公開されていなかったこともあり、第2段階のHello表示でつまずき、どうにもならず、skyriverさんに助けを求めてしまいました。
その結果、Pic24用のプログラムだけでなく、製作手順をここに、「3チップ構成Pic24CPM68Kマイコン(CP/M-68K起動までの作業まとめ)[68K]」として公開していただけました。(なお、ガーバーファイルも公開されています。)
そのおかげで、すんなりと動作させることができました。

これで念願だった68000を使うツールとしてのCP/M-68Kを手中にすることができました。また、上にも書きましたが、Z80にも68Kにも共通のスクリーンエディタも使いやすいものを用意してくださっていますので、CP/Mのソフト開発に力を入れることができそうです。skyriverさんに感謝いたします。