PC-6001,PC-8001用FDDｴﾐｭﾚｰﾀをArduino MEGAで作りました。

#■ 初めに
ご案内するｼｽﾃﾑは1980年代前半、PC-6001,PC-8001用に販売されていた外付FDDのPC-6031やPC-80S31をｴﾐｭﾚｰｼｮﾝしています。1Dや2Dのﾌﾛｯﾋﾟｰﾃﾞｨｽｸ(FD)を外付けで使う初期のNECのﾊﾟｿｺﾝで使えます。
![fdd_gazou.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763985/7c6a8a52-3501-8b69-6c32-f0ae4de34ce7.jpeg)
#■ ﾌﾟﾛｸﾞﾗﾑの種類と概略
１．ｷｬﾘﾌﾞﾚｰｼｮﾝ(UNO用3.5ｲﾝﾁ･ﾀｯﾁｽｸﾘｰﾝｼｰﾙﾄﾞのﾀｯﾁ補正)
⑴ 画面の四隅を押すことによって補正ﾃﾞｰﾀを作り、Arduino MEGAのEEPROMに書込みます。ﾀｯﾁ操作とUSBｼﾘｱﾙ通信(115200bps)を交互に操作して作業します。USBｼﾘｱﾙ通信は、ArduinoIDEのｼﾘｱﾙﾓﾆﾀでもﾀｰﾐﾅﾙ･ｿﾌﾄ(Tera Tarm等)でもokです。FDDｴﾐｭﾚｰﾀはEEPROMの補正ﾃﾞｰﾀを起動時に読込みます。
⑵ お絵かきｿﾌﾄでﾀｯﾁ操作が正常に出来ているか確認します。
２．FDDｴﾐｭﾚｰﾀ(NEC 1D,2D)
⑴ UIはﾀｯﾁ操作だけではなく、USBｼﾘｱﾙ通信(115200bps)でも操作出来るようにしています。USBｼﾘｱﾙ通信は、ArduinoIDEのｼﾘｱﾙﾓﾆﾀでもﾀｰﾐﾅﾙ･ｿﾌﾄ(Tera Tarm等)でもokです。
⑵ 主な機能は、
① 空のSDｶｰﾄﾞにFDDｴﾐｭﾚｰﾀを動かす為の [FD_IN] [FD_OUT][EMU]ﾌｫﾙﾀﾞやﾌｧｲﾙを作ります。
②【ｴﾐｭﾚｰﾀ】   ： FDDｴﾐｭﾚｰﾀを起動します｡FDﾄﾞﾗｲﾌﾞの画像に変わり、ｱｸｾｽﾗﾝﾌﾟが点滅し、駆動音がします｡
③【FD差替え】 ： FDﾄﾞﾗｲﾌﾞにひも付けられたFDｲﾒｰｼﾞを差替えます｡
④【ﾗｲﾄﾌﾟﾛﾃｸﾄ】： FDｲﾒｰｼﾞﾌｧｲﾙのﾗｲﾄﾌﾟﾛﾃｸﾄを掛けたり、外したりします｡ 
⑤【ｲﾒｰｼﾞ出力】： [FD_OUT]ﾌｫﾙﾀﾞに修正されたFDｲﾒｰｼﾞﾌｧｲﾙが出力されます｡FDｲﾒｰｼﾞﾌｧｲﾙにﾚﾄﾛPCから書込みした場合、[EMU]ﾌｫﾙﾀﾞ内に差分ﾃﾞｰﾀが作られます｡[FD_IN]ﾌｫﾙﾀﾞのFDｲﾒｰｼﾞﾌｧｲﾙと[EMU]ﾌｫﾙﾀﾞ内の差分ﾃﾞｰﾀで一つのFDｲﾒｰｼﾞﾌｧｲﾙにします。
![zenntai.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763985/ca1bc847-11a6-909c-2bf3-22129b4fa496.jpeg)
#■ ﾌﾟﾛｸﾞﾗﾑｿｰｽのﾀﾞｳﾝﾛｰﾄﾞ
１．https://github.com/yana-cyan/FDD_EMU からﾀﾞｳﾝﾛｰﾄﾞします。
２．ﾀﾞｳﾝﾛｰﾄﾞし、解凍するとArduinoMEGA2560のｿｰｽが4個あります。
⑴ ｷｬﾘﾌﾞﾚｰｼｮﾝ(UNO用3.5ｲﾝﾁ･ﾀｯﾁｽｸﾘｰﾝｼｰﾙﾄﾞのﾀｯﾁ補正) ： [Calibration35_A], [Calibration35_B]
⑵ FDDｴﾐｭﾚｰﾀ(NEC 1D,2D) ： [FDD_EMU_NEC1D2D_A], [FDD_EMU_NEC1D2D_B]
３．[Arduino UNO用の3.5ｲﾝﾁ･ﾀｯﾁｽｸﾘｰﾝｼｰﾙﾄﾞ]を手に入れたら、Bﾊﾟﾀｰﾝのｷｬﾘﾌﾞﾚｰｼｮﾝﾌﾟﾛｸﾞﾗﾑでﾀｯﾁ操作が出来るか試してみて下さい。ﾀｯﾁ操作出来なかったら、Aﾊﾟﾀｰﾝを試して下さい。Aﾊﾟﾀｰﾝ、Bﾊﾟﾀｰﾝはﾀｯﾁｽｸﾘｰﾝ用のﾋﾟﾝｱｻｲﾝの違いです。Bﾊﾟﾀｰﾝの方が多く出回っているみたいです。
４．USBｼﾘｱﾙ通信(115200bps)のみで操作する場合、Aﾊﾟﾀｰﾝ、Bﾊﾟﾀｰﾝのどちらを使ってもokです。
#■ ｺﾝﾊﾟｲﾙに必要なﾗｲﾌﾞﾗﾘ
１．MsTimer2 ： Arduino IDEで[ﾂｰﾙ]-[ﾗｲﾌﾞﾗﾘを管理] から組込みます。
２．MCUFRIEND_kbv ： Arduino IDEで[ﾂｰﾙ]-[ﾗｲﾌﾞﾗﾘを管理] から組込みます。Adafruit_BusIO, Adafruit_GFX_Library も同時に組み込みます。
３．Adafruit_TouchScreen ： Arduino IDEで[ﾂｰﾙ]-[ﾗｲﾌﾞﾗﾘを管理] から組込みます。
４．misakiUTF16 ： https://github.com/Tamakichi/Arduino-misakiUTF16 からﾀﾞｳﾝﾛｰﾄﾞします。解凍したらArdoinoのｺﾝﾊﾟｲﾙ用ｿｰｽのﾌｫﾙﾀﾞの中に[libraries]ﾌｫﾙﾀﾞがありますので入れます。漢字表示ができるのは、たま吉さんがArdoino用のﾗｲﾌﾞﾗﾘを作ってくれたおかげです。ありがとうございます。
#■ 作った動機
初代PC-6001やPC-8001が発売されて40年が経過しました。当時、私は初代PC-6001にﾃﾞｰﾀﾚｺｰﾀﾞｰをつないでｹﾞｰﾑをしたり、雑誌掲載ﾌﾟﾛｸﾞﾗﾑを打ち込んでいました。去年、そのｶｾｯﾄﾃｰﾌﾟを劣化で使えなくなる前にﾊﾟｿｺﾝに取込み、ﾃﾞｰﾀで取っておこうと思い立ちました。ｶｾｯﾄﾃｰﾌﾟのﾃﾞｰﾀ化をﾈｯﾄで調べていると、ﾚﾄﾛPCのFDDをHxCやgotekに交換し、SDｶｰﾄﾞやUSBﾒﾓﾘでﾌﾛｯﾋﾟｰﾃﾞｨｽｸの代わりをさせることが出来ると知りました。

ﾔﾌｵｸ!で滅多に出品されない「拡張ﾕﾆｯﾄ(PC-6011)」と「外付FDD(PC-6031)」を手に入れ、gotekに交換し、ｶｾｯﾄﾃｰﾌﾟのｿﾌﾄが高速にﾛｰﾄﾞ出来るようになりました。ただ、動いていても所詮40年前の機器、いつ肝心のFD制御基板が壊れるか分かりません。ROMが消える年数はとうに過ぎているので早く吸出し作業をしてﾊﾞｯｸｱｯﾌﾟを取らないといけません。ﾒﾝﾃﾅﾝｽしながら、使い続けたいとは思うのですが、安心材料が欲しい。何年か前に作られていた同人ﾊｰﾄﾞ、NEC系のFDDｴﾐｭﾚｰﾀ、今は手に入りません。たまに、ﾔﾌｵｸ!で高値で出ていますが、高くて手が出ません。

手に入らないなら作れないかと先人たちの情報を参考に、色々と考え、試行錯誤し、取り敢えず出来ました。自分一人で使うのはもったいないと思いますので、ご案内することにしました。そこそこ使えると思いますので、使ってみたい方はどうぞ、自己責任で、ご自由にお使い下さい。ﾊﾞｸﾞや要望事項があれば、出来る限り対応したいと思います。ただ、私自身が飽きっぽい性格なので、いつまで対応できるかは分かりません。
#■ Arduino MEGAで作った理由
１．ﾛｼﾞｯｸﾚﾍﾞﾙが5Vなので、そのまま信号線をﾚﾄﾛPCにつなぐことが出来ます。
２．8ﾋﾞｯﾄの物理的に連続したﾎﾟｰﾄが3個以上あります。
３．Arduino UNO用の3.5ｲﾝﾁ･ﾀｯﾁｽｸﾘｰﾝｼｰﾙﾄﾞが使えます。(GUIで直観的に使えます。)
４．ﾀｯﾁｽｸﾘｰﾝに漢字(美咲ﾌｫﾝﾄ)を表示できます。
５．ﾚﾄﾛPCとArduino MEGAをつなぐｹｰﾌﾞﾙを作成すれば、後はﾌﾟﾛｸﾞﾗﾑを入れれば使えます。※ ｹｰﾌﾞﾙの作成例は、ﾌﾟﾛｸﾞﾗﾑｿｰｽ(FDD_EMU_NEC1D2D)のﾀｸﾞ[x]に詳しく書いています。
６．2021年時点で簡単に安く手に入る材料(ほぼ中国製)でｼｽﾃﾑが作れます。※ 材料については、ﾌﾟﾛｸﾞﾗﾑｿｰｽ(FDD_EMU_NEC1D2D)のﾀｸﾞ[x]に詳しく書いています。
#■ 更新履歴
2021/01/31 ： ﾕｰｻﾞｰｲﾝﾀｰﾌｪｰｽがｼﾘｱﾙ通信版完成
2021/02/11 ： ﾒﾓﾘ不足で不安定にならないように固定文字列はﾌﾗｯｼｭﾒﾓﾘに移行
2021/02/19 ： 更新ﾃﾞｰﾀの持ち方やｲﾒｰｼﾞ出力の手順を見直し、当初処理が3～4分掛かっていたのが約30秒へ改善
2021/02/28 ： ﾕｰｻﾞｰｲﾝﾀｰﾌｪｰｽが3.5ｲﾝﾁ･ﾀｯﾁｽｸﾘｰﾝ(320X480)版完成
2021/03/08 ： SDに大量のI/Oがある時にｼｽﾃﾑが暴走するのを改善(WRITEの時、こまめにcloseする)
2021/03/12 ： WK1D0000.IMGをN60-拡張BASICのﾌｫｰﾏｯﾄ済にする
2021/03/15 ： WK2D0000.IMGをN-BASIC(DISK BASIC)のﾌｫｰﾏｯﾄ済にする
2021/03/21 ： 3.5ｲﾝﾁ･ﾀｯﾁｽｸﾘｰﾝの画像は出るけど、ﾀｯﾁ出来ない分に対応(ﾀｯﾁ機能のﾋﾟﾝｱｻｲﾝが違う)
2021/04/01 ： 頻繁に出ていたI/O ERROR の原因がSD読込み中のﾚｻﾞﾙﾄ・ｽﾃｰﾀｽにあることが判明し対応
#■ 終りに
１．何年かして開発環境が変わって、ｺﾝﾊﾟｲﾙしても動かない可能性があります。その為に、ｿｰｽと一緒にﾊﾞｲﾅﾘ形式のﾌﾟﾛｸﾞﾗﾑも置いています。ただ、これは書込装置が必要です。Arduino UNOをArduinoISPにするなりして、Arduino MEGAに書込んで下さい。
２．ﾚﾄﾛPCで入力した大切なﾃﾞｰﾀはSDｶｰﾄﾞに保存した後【ｲﾒｰｼﾞ出力】し、別媒体にﾊﾞｯｸｱｯﾌﾟして下さい。
３．本当は、初代PC-6001やPC-8001の拡張ｽﾛｯﾄ(拡張ﾊﾞｽ)に直接つなげる物を作りたかったのですが、上手くいきませんでした。今後の課題です。
#■ 補足
[2021/04/11]
[FD_IN]ﾌｫﾙﾀﾞに入れたFDｲﾒｰｼﾞﾌｧｲﾙの数が多いとｼｽﾃﾑが暴走します。10個くらいで使って下さい。
PC-8001は、「S-DOS」「Dash-80」がまだ動きません。ﾌﾟﾛｸﾞﾗﾑ修正中です。「Disk Basic」は動きます。