SuperSerialCardの問題に決着を
- 2022/09/30 09:01
- カテゴリー:マニアックなおはなし, make:
結局ADTProで動かなくてあきらめてしまったSuperSerialCardの自作プロジェクトですが,某オークションでSuperSerialCardIIが出てきたので無理をして買ってみました。
確かめたかったことは,ADTProが自作したカードで動作しなかった原因です。自作のカードはシリアル通信は可能で,ADTProも古いバージョンに限定されますが,Bootloaderは起動しますし,一瞬ですがディレクトリを取得することも出来ています。
ただ,そのシリアル通信も7bitだけが動作していて,8bitでは動いていません。
こうなるともう回路の問題と言うより,W65C51Nに問題があるんじゃないのかという話になり,先に進めなくなってしまったのです。
ここで,SuperSerialCardIIでADTProを動作させて動いてしまえば原因は自作のカードに内在したことが明確になりますし,もしW65C51NからR6551に交換して自作のカードが動作してしまえば,W65C51NとR6551の非互換にあった,ということになるでしょう。
とはいえ,ADTProでの使用を前提とした自作カードの回路図が海外では公開されていて,そこでは当然現在入手可能なW65C51Nが使われています。
実際これで使っているという話を見つけることは出来なかったのですが,なにより作者が動いていると言っているのですから,信じるしかありません。
もちろん,広義の非互換として,端子のタイミングの違いなど,回路設計上で解決すべきものもあると思いますが,そうはいってもW65C51NとAppleIIのバスの間には大した回路も入っていませんし,今は考えないことにします。
さて,早速実験開始です。
まず入手したSuperSerialCardIIの動作確認です。ジャンパブロックをTerminalにして(これで手持ちのクロスケーブルが使えるようになる),もういきなりADTProを起動します。
ホストはMacBookAirです。これはEthernet経由でもホストとして使っています。
するとあっさり動作。ホストからデータを受け取りフロッピーに書き戻すところまで問題なく終わりました。あっさりと書きましたが,実はPL2303を内蔵したUSB-シリアルケーブルではエラーが発生してフロッピーへの書き戻しは出来ても,Bootloaderが上手く動作せず,一度も起動に成功しませんでした。
そこで秋月で調達したFDTIのチップを搭載したUSB-シリアルケーブルに変えたところ,嘘のように上手くいくようになりました。とはいえ,Bootloaderは微妙なところで,ProDOSの起動に失敗することもしばしばで,ADTProの起動まで到達出来ないケースは感覚的に2割ほどという気がします。
次に気になっていた事ですが,AppleII側から8bitで通信出来ていなかった件を確かめます。先に結論を書くとこれは変化なし。PC側からは8bitで文字化けしませんが,AppleII側からは8bitでは文字化けします。ここはもしかしたらROMに依存した問題なのかも知れません。
さて確認作業の本命,6551の入れ替えです。すでに自作品と本物の間で動作に違いがあったわけですが,それが6551の違いによるものかどうかがこれでわかります。
結果は,SuperSerialCardIIに搭載されていたR6551を自作品に取り付けるとADTProが動作しました。逆にW65C51NをSuperSerialCardIIに取り付けると,動作しませんでした。
少なくとも,R6551を使えば動作するようになるのは事実ですが,逆にW65C51Nを使えば動かないというのはちょっと判断が難しく,実はどちらでも動くはずのターミナルモード(CTRL+AからTで移行)で,W65C51Nを搭載したSuperSerialCardIIが全く動かなかったのです。
そもそもチップが動作していない状態で,クロックの供給方法がそれぞれのカードで違うので波形を見ていないのでなんとも言えませんが,おそらくクロックが発振していないのではないかと思います。
ということで,とりあえず自作でもR6551を使えばちゃんと動作する事は判明しました。
しかし課題も残りました。
自作カードに用意した10ピンのコネクタはSuperSerialCardのものと同じ形状なのにピン配置が異なります。これは手持ちの関係で10ピンコネクタも9ピンのD-subも圧着のものを使って,フラットケーブルで直結したものを使いたかったからで,カード上のコネクタのピン配置を変更してあわせていました。
しかし,SuperSerialCardIIとケーブルを共通にしておく方が混乱もないでしょうから,自作品のピン配置を変更します。とはいえこれがなかなか大変で,特にスレート結線のMODEMとクロス結線のTERMINALの両モードを切り替えられるようにするのはなかなかややこしく,何度も失敗しました。
しかも,DCDとCTS,DSRの3つを12Vでプルアップしておらず,そのせいでSuperSerialCardとはことなる挙動をしていました。特にDCDがHighになっていないことで,通信が始まってくれませんでした。
次にW65C51NがSuperSerialCardIIで本当に動かないのか、と言う問題です。SuperSerialCardとして機能しないのか,あるいはADTProで動かないのかによるわけですが,クロックの発振が止まっているなら自作品以下の状態ですから,これは対応しなければいけません。
情報によると,プロセスの違い(W65C51NはCMOS)から,水晶発振子に1MΩを並列に取り付けないと発振しないそうなので試してみたところ,クロックは無事に発振して,通信が行われるようになりました。
しかしADTProは動作せず。つまり自作品と同じ状態になったわけで,これはもうW65C51Nが原因だったと確定させてもよいのではないでしょうか。
最終的には,W65C51Nを使った自作カードでADTProが動くようにしたいですが,チップ依存の問題なら詰みますから,動かないならその原因くらいははっきりさせたいところです。
W65C51Nを使ってADTProが動かなかったという話を私は見つけることが出来ずにいて,逆に明確に動作したという話もありません。SuperSerialCardが高騰しているため(といっても$50くらいで高騰といっているので日本国内との感覚のズレはあると思いますが)自作した人はいて,その方々はW65C51Nを使っている,ということで,間接的にADTProが動いているんだろうと推測される程度です。
でもやっぱり自作品でADTProを動かしたいですよね。組み立てや設計が原因ではなく,チップのせいで動かないというならなおさら悔しいじゃないですか。
そこで,あやしい部品が簡単に手に入るAliexpressで探してみると,ロックウェルのR6551がゴロゴロしています。送料を入れても$10未満です。ものは試しにと,先日の387SXに気をよくして,R6551を頼んでしまいました。
加えて少し時間のあるときに,ADTProのソースを読んでみました。するとW65C51Nのエラッタに引っかかる部分がバッチリありました。つまり,ADTProがW65C51Nで動かないのは当然で,おそらく世界中の誰もW65C51Nで動かせていないのではないかと思います。
問題は,W65C51Nがステータスレジスタのbit4を,常に1にしているという点です。ここは本来Trasnmitter Data Register Emptyというフラグで,0なら転送中,1なら空っぽになったことを示すもので,W65C51N以外はすべて機能しています。
このビットを監視し,空っぽになるまでループするというコードをみんな書いているわけですが,悪いことにW65C51Nはここが常に1になるというエラッタがあるので,ループを素通りしてしまいます。
さらに悪いことに,W65C51Nはこれを「仕様」としてデータシートを改訂し,しれっと対策版のW65C51Sに切り替えています。
しかし,市中の在庫はエラッタを含むW65C51Nが大半です。私も2つ買ってどちらもエラッタのあるW65C51Nでした。
ここが常に1ですので,いつも通信していない状態と認識され,実は送信が終わっていないのに新しい送信データがレジスタに書き込まれてしまいます。これじゃデータの通信など正しく出来ません。
そこで,bit4の確認を行う代わりに,少しループでウェイトを入れてやるのがいいそうです。実際,日本の方でもW65C51Nで苦しんでいた方が,この対策でサクッと動くようになったと書かれていました。
それでADTProですが,まさにbit4を確認してループするコードになっていました。ここをウェイトにすればきっと動くようになると思うのですが,ビルド環境を整えるのも面倒ですし,原因がはっきりしたという事で,もうこれでいいです。
最新のADTProのリリースが2020年11月ですので,その後も誰も指摘していないし,誰も対応して欲しいとは言っていないのでしょう。AppleIIのコミュニティは活発かと思っていましたが,実は案外そうでもないのかも知れません。
ということで,一連の検討で明らかになったことは,W65C51NではエラッタのためにADTProは動かないということ(これはもっと早くにソースを見ていればわかったこと),R6551を使えば動くという事,自作品でもR6551なら問題なく動くということでした。
結局W65C51Nのエラッタに振り回されただけだったというオチですが,結論が出てうれしいと言うよりも疲れました。時間も労力も費用もかかってしまいましたが,あまりいい勉強になったと言う気もしません。やっぱソースをきちんと見るべきだったなあと思います。
さて,あとはAliexpressからR6551が届くのを待つばかり・・・