Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What are the problem?
@yana-cyan

外付FDDのPC-6031やPC-80S31のエミュレータをArduino MEGAで作りました。

■ 初めに

ご案内するシステムは1980年代前半、PC-6001,PC-8001用に販売されていた外付FDDのPC-6031やPC-80S31をエミュレーションしています。1Dや2Dのフロッピーディスク(FD)を外付けで使う初期のNECのパソコンで使えます。
fdd_gazou.JPG

■ プログラムの種類と概略

1.キャリブレーション(UNO用3.5インチ・タッチスクリーンシールドのタッチ補正)
⑴ 画面の四隅を押すことによって補正データを作り、Arduino MEGAのEEPROMに書込みます。タッチ操作とUSBシリアル通信(115200bps)を交互に操作して作業します。USBシリアル通信は、ArduinoIDEのシリアルモニタでもターミナル・ソフト(Tera Tarm等)でもokです。FDDエミュレータはEEPROMの補正データを起動時に読込みます。
⑵ お絵かきソフトでタッチ操作が正常に出来ているか確認します。
2.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

■ プログラムソースのダウンロード

1.https://github.com/yana-cyan/FDD_EMU からダウンロードします。
2.ダウンロードし、解凍するとArduinoMEGA2560のソースが4個あります。
⑴ キャリブレーション(UNO用3.5インチ・タッチスクリーンシールドのタッチ補正) : [Calibration35_A], [Calibration35_B]
⑵ FDDエミュレータ(NEC 1D,2D) : [FDD_EMU_NEC1D2D_A], [FDD_EMU_NEC1D2D_B]
3.[Arduino UNO用の3.5インチ・タッチスクリーンシールド]を手に入れたら、Bパターンのキャリブレーションプログラムでタッチ操作が出来るか試してみて下さい。タッチ操作出来なかったら、Aパターンを試して下さい。Aパターン、Bパターンはタッチスクリーン用のピンアサインの違いです。Bパターンの方が多く出回っているみたいです。
4.USBシリアル通信(115200bps)のみで操作する場合、Aパターン、Bパターンのどちらを使ってもokです。

■ コンパイルに必要なライブラリ

1.MsTimer2 : Arduino IDEで[ツール]-[ライブラリを管理] から組込みます。
2.MCUFRIEND_kbv : Arduino IDEで[ツール]-[ライブラリを管理] から組込みます。Adafruit_BusIO, Adafruit_GFX_Library も同時に組み込みます。
3.Adafruit_TouchScreen : Arduino IDEで[ツール]-[ライブラリを管理] から組込みます。
4.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で作った理由

1.ロジックレベルが5Vなので、そのまま信号線をレトロPCにつなぐことが出来ます。
2.8ビットの物理的に連続したポートが3個以上あります。
3.Arduino UNO用の3.5インチ・タッチスクリーンシールドが使えます。(GUIで直観的に使えます。)
4.タッチスクリーンに漢字(美咲フォント)を表示できます。
5.レトロPCとArduino MEGAをつなぐケーブルを作成すれば、後はプログラムを入れれば使えます。※ ケーブルの作成例は、プログラムソース(FDD_EMU_NEC1D2D)のタグ[x]に詳しく書いています。
6.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読込み中のレザルト・ステータスにあることが判明し対応

■ 終りに

1.何年かして開発環境が変わって、コンパイルしても動かない可能性があります。その為に、ソースと一緒にバイナリ形式のプログラムも置いています。ただ、これは書込装置が必要です。Arduino UNOをArduinoISPにするなりして、Arduino MEGAに書込んで下さい。
2.レトロPCで入力した大切なデータはSDカードに保存した後【イメージ出力】し、別媒体にバックアップして下さい。
3.本当は、初代PC-6001やPC-8001の拡張スロット(拡張バス)に直接つなげる物を作りたかったのですが、上手くいきませんでした。今後の課題です。

■ 補足

[2021/04/11]
[FD_IN]フォルダに入れたFDイメージファイルの数が多いとシステムが暴走します。10個くらいで使って下さい。
PC-8001は、「S-DOS」「Dash-80」がまだ動きません。プログラム修正中です。「Disk Basic」は動きます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What are the problem?