PC-386BookLでPPMMCDRVを動かしてファイル交換
- 2025/04/15 14:52
- カテゴリー:マニアックなおはなし, make:
先日,ふとネットをダラダラとみていますと,PC-9801のプリンタポートにmicroSDカードを繋いで読み書きするハードウェアがアキバで売られたというニュースを目にしました。
ん?PC-9801のプリンタポートって出力専用だったんじゃなかったっけ?
AT互換機ではプリンタポート接続のZIPドライブなんかが普通に売られていました(懐かしい)が,同じ仕組みがPC-9801で実現出来なかったのは,14ピンのPC-9801のプリンタポートが出力専用だったからでした。
PPMMCDRVと呼ばれるそのハードウェアの説明を読んでみると,microSDカードをSPIモードでアクセスするということと,唯一の入力であるBUSY端子を使って双方向通信を実現するという仕組みでした。賢いなあ。私はてっきりFPGAなりSTM32なりを使うのかと思ってましたよ。
PIOモードというPC独特の言い回しですが,詰まるところソフトでクロックやデータを生成するソフトウェアSPIですので,速度はCPU依存で,しかも強烈に遅いです。それでもフロッピーディスクやLANを使わずにファイルをやりとり出来るメリットは大きくて,実際PPMMCDRVは大人気のようです。
自作するのは簡単ですが,ArduinoやRaspberryPi向けに作られたと思われる,microSDスロットとレベルコンバータ,そしてLDOまで搭載された小さい基板が安価に売られていて,これを使えば本当に繋ぐだけでハードウェアは完成してしまいます。
最大の関門は14ピンのアンフェノールコネクタの入手でしょう。
ところが偶然,数日前にジャンクのプリンタケーブル(しかもEPSON純正)を手に入れていました。これはもはや神の啓示。作らないわけにはいきません。
ということで,早速amazonにmicroSDの基板を注文。5枚で760円ほどでした。
届いてから工作開始。日曜の午後にぴったりな工作です。
1時間ほどで完成すると思っていましたが,重いのか手間取ったのでその点松を書いておくことにします。
まず,ケーブルをちょん切って,皮を剥きます。SPIで通信しますので短かくないとエラーが出そうだという事もありますし,小さくまとめておきたいので,コネクタから5cm程でカットしました。
2,3,4,5,11ピンが必要なので,どの線から出ているのかをテスターでチェックしますが,鈍くさい私はどうせ間違うでしょうから,一応全部の線を切らずに残しておきます。
そしてそれぞれの端子を,公開して下さっている配線図に従ってハンダ付けしていきます。電源はプリンタポートから採れないので,マウスポートから取ることにして,D-subの9ピンのコネクタに繋いだ5VとGNDも基板に配線します。(この段階ではLEDはまだ繋いでいません)
この段階で一応チェックしますが,案の定配線ミスをやらかしています。違う線を繋いでいたので修正して,実機で試してみます。
microSDカードは手持ちのもので一番小さい容量の1GBのものを使います。
公開されたソフトに同梱されていたテスト用プログラム,PPMMCTST.EXEを実行しますが,エラーでいきなり進みません。よく考えてみるとGNDを配線してなかったことに気が付いたので14ピンにGNDを繋ぎますが,結果は同じ。(そりゃそうです,マウスコネクタのGNDは繋がっているので,品質はともかくとしてGNDには繋がっているんですから)
ここで少し調べてみると,EPSON機ではSCKというクロックの信号でリンギングが出るので,3.3kΩを直列に入れてダンピングするのがよろしいそうです。私が使っているPC_386BookLは割と初期のEPSON機ですからダンピング抵抗は必要でしょう。
手持ちの関係で2.7kΩで試してみますと,希にテストはパスするようになりましたが,ほとんどエラー。通常の読み書きなど全くできません。うーん。
波形を少し見てみますが,BUSY端子の電圧がちょっと低く,4V程度しかありません。ですが,TTLレベルでは2.0V以上あればHighとなりますので,(不問にできないですが)これが原因で動作しないと言うことではないでしょう。
気晴らしに,先にLEDの配線をするのですが,またも配線ミス。ずっと点灯しっぱなしになるので首をひねってましたが,違う線に繋いでました。トホホ。
LEDの配線は正しく修正しましたが,動作しない状態は続いています。そこで,別のmicroSDを使ってみる事にしました。手持ちでフォーマット出来そうなのは16GB位だったのですが,これを30MBごとにパーティションを切って試してみます。
すると,テストではほとんどエラーが出なくなりました。とはいえ希にエラーは出ますし,ファイルアクセスは全く出来ません。でも,偉大な一歩です。
それではということで,ウェイトを入れてみました。最初は8という大きな物をいれたのですが,これだとファイルの読み書きが出来るようになりました。そこでウェイトを1つずつ減らしていくと,ウェイトが1ならOK,0ならエラーになることがわかりました。
同じウェイトで先の1GBのmicroSDをもう一度試しましたが,やっぱりエラーです。別の8GBのカードでも0ウェイトでは動きませんでした。これはもうカード依存,いわば相性みたいなもんだと割り切るしかなさそうです。
念のため,ダンピング抵抗の値を変えてみたり,他の信号にも入れてみたり,BUSYをプルアップしたりしましたが何も変化はなく,ついでに言うとSCKのダンピング抵抗も外しても,ウェイトを1つ入れれば問題なくアクセス出来る事がわかりました。
しかし,ウェイトを入れれば遅くなります。ベンチマークを取ってみると情けないことに12kB/secしか出ていません。0ウェイトならもう少し改善されるように思うのですが,動かないものは仕方がないです。
ちなみにウェイトを8つ入れた場合,2kB/secまで速度が低下しました。V30以下とは・・・
これで大きなファイルもエラーなく読み書き出来るようになりました。LEDもちゃんと点滅するので,もう余計な線をカットしても大丈夫でしょう。遅いとはいえ,一時期検討していたシリアル経由での転送に比べると遙かに高速(12kB/sec = 96000bps)ですし,PCとのファイル交換に力を発揮すると思います。
これまで,PCとのファイル交換は大変でした。フロッピーを使うしかありませんが,3モードに対応しないPC-386BookLは,720kBの2DDでしかファイル交換できません。仮に2MBのファイルを送り込む場合,ファイルをファイルを3つに分割して3回読み書きしなければなりませんでした。
フロッピーのイメージなどはもともと1.2MBですから,圧縮しても720kB以下になることは少ないです。そうなるとやっぱり分割して2回で転送しないといけないので,気分的にもかなり抵抗がありました。
フロッピーディスクエミュレータを使って,USBメモリのフロッピーイメージをマウントして実機に取りこむ手はありますが,1ファイルあたり1.2MBまで転送可能になるとはいえ,手間がかかることには違いありません。
しかし,このPPMMCDRVでは,ファイルサイズがフロッピーディスクのサイズを超えても分割しないでいいですし,付きっ切りでディスクの交換をすることもありません。少々速度が遅くとも,放置して置けば済むというメリットは非常に大きいです。
悔しいのは,ウェイトを0に出来なかったことです。きっと何か問題があるはずで,真面目に取り組めば原因くらいは判明すると思うのですが,ウェイトで改善するという事はクロックとデータのタイミングがシビアなのかもしれません。
こうした楽しい工作の回路はもちろん,ソフトも公開して頂いている事には感謝しかありません。私の場合,microSDカードをとっかえひっかえしましたし,EPSON機ですので試行錯誤も必要でしたから,誰でも簡単にできるというものではなかったかも知れませんが,むしろそれが楽しいくらいで,なにかと小銭を集めたがる人が多いこのご時世,面白いものを公開して頂いている事に,まだまだすてたもんじゃないなあと思った次第です。