エントリー

カテゴリー「make:」の検索結果は以下のとおりです。

PC-386 Book Lの復活劇 その10 ~メモリ増設大作戦(後編)

20221031102724.JPG

 完調を取り戻し快適なDOSマシンとして有用なPC-386BookLを,さらに便利にするためにメモリ増設を目論んだが失敗を続ける間に季節が1つ進んでしまったわけですが,いよいよこのプロジェクトもゴールが見えてきました。

 中国から日本製の4MbitのSRAMを購入(円安が地味に痛い),ということで,今回は疑似SRAMから換装する所からスタートです。

 この安さで本当に10個の新品のSRAMが届いたことにもちょっと驚いたのですが,まずは小基板から疑似SRAMを剥がします。これは簡単でトラブルなく終わりました。ところが,交換するSRAMのパッケージが微妙に大きくて,そのままではマウント出来ません。

 そこでSRAMの足を内側に曲げて,なんとかマウント出来るようにします。それでも足が浮くことがあるので,注意してハンダ付けです。

 マウント出来たら配線チェックを簡単に行って通電。お,メモリカウントは1MBだけ行われました。なぜ1MB???

 起動したのでtmem.exeでチェックをしますが,やはり全滅。一見すると状況は変わっていないように思いますが,以前は不安定だった起動時のメモリカウントが確実に行われ,しかも1MBで止まります。そしてtmem.exeではこのエリアがNGです

 うーん,0x100000からの1MBは認識されるがエラー,0x200000からは認識もされないという状況ですが,不安定さはなくなりました。大きな一歩です。

 ここでHC138から出ている0x100000と0x200000のデコード出力を入れ換えてみます。こうするとどのエリアがまずいのかがわかるはずです。

 結果は,全く認識せず。つまりもとの0x200000はメモリとして全く機能していないということです。なら,この状態でちゃんと1MBのメモリとして認識するようにしていきましょう。

 こういう時は愚直に配線を確認です。SRAMにしたので回路的には疑うべきところがほぼなくなっていますから,きっとどこかにミスがあるはずです。するとデータバスの1つが配線されていない事が判明しました。なぜかわかりませんが小基板の配線が途切れていました。

 ここをバスに接続して通電するとメモリカウントが1MB行われました。よし!

 続けてtmem.exeでチェックすると,なんとパスしました。NGが全く出ません。ということは,少なくともSRAMを使ったこの回路は正常に動作するということが確定したということです。これは大きな前進です。

 気をよくして入れ換えたデコード出力を戻して通電します。するとメモリカウントは2MBまで進み,正常に起動しました。また一歩前に進んだ感じです。

 そしてtmem.exeでチェック。残念ながら0x100000のエリアはNG。0x200000のエリアはOKとなりました。

 0x100000と0x200000が同じ回路になるようにすればいいだけのことですので随分気は楽です。早速配線チェックをしていくと,アドレスのA6が配線されていないことがわかりました。これも小基板内で切れています。

 ここを配線してtmem.exeでチェックすると,0x100000ではOKの領域とNGの領域が交互に出てくるようになりました。OKが規則的に出てくるというのは一歩前進です。これはよい兆候です。

 さらに配線を確認すると,A17とA15の2つの配線が切れていました。なるほど,それでOKとNGが繰り返すのですね。ここを配線しテストを行うと,すべてのエリアがOKになりました。ようやくゴールが見えてきました。

 ここで私は手痛いミスをします。実はメモリの換装をした直後に上位アドレスのラッチが本当にいるのかどうかを確かめるため,74F373のラッチ入力をHIghに固定して試したのです。するとメモリカウントが行われたのでラッチは必要ない,やはり文献通りエプソン機は上位アドレスにラッチがいらないのだと結論したのです。

 そこで,全エリアOKになった後の作業として,このラッチを取り外すことを計画していました。配線を一部外してから念のためチェックをしないとまずいかなと,配線を戻して通電しますが,起動しません。

 配線を戻すときにミスをしていた(5VをGNDに繋いでしまった)のですが,これを戻してもメモリカウントが進まなくなりました。ラッチが必要なのかと74F373のラッチをALEに繋ぎますが,それでもメモリを認識しなくなりました。

 ああ,なんとういことか。余計な事をしなければよかった。

 74F373が壊れた可能性は低いと思うのですが,正しい配線に戻しても動かなくなりました。ラッチが必要ないと思い込んでいた私は,この時一か八か74F373を完全に外すことにしました。こうすれば74F373が壊れていても正常に動作するはずです。

 せっかく配線した74F373周りの配線を外してバスに直結し,通電します。

 結果はNG。メモリカウントは行われますが,tmem.exeが全エリアNGで通りません。やはりラッチが必要だった?

 起動時のメモリカウントは,どうもライトとリードを同じアドレスに続けて行い,一致すればカウントという仕組みのようです。ですのでアドレスの重複があってもカウントは行われるようで,上位アドレスがラッチされない今回の回路では低位アドレスに何度も読み書きを行ってカウントが進んでいるのだと思います。

 74F373を外す前にtmem.exeでOKが出るところまできちんと追い込んでおくべきだったと地団駄を踏んでもすでに遅く,もう一度74F373を取り付けます。これ,配線数が多いので時間がかかって面倒なんですよねえ・・・

 仮に配線を済ませても,74F373が壊れていたり本体側が壊れていたりすると復活しないでしょう。74F373が壊れているなら手間はかかるけど交換すればなんとかなりますが,本体側が壊れているならもう絶望です。

 配線を追えて祈るような気持ちで通電。しかしメモリカウントも行われません。

 配線チェックを行って再度通電。しかしメモリカウントも行われません。

 74F373が壊れている可能性もあるということで,新しいものに交換します。配線をやり直すのにまた1時間ほどかかってしまいましたが,祈るような気持ちで通電。

 しかしメモリカウントも行われません。

 これはやばいです。本体側を壊したという事です。冷や汗が流れます。ああ,本当に余計な事をしなけりゃよかった・・・

 ところで,そもそもこうした事態に陥ったのは,74F373に5Vを供給する配線を間違えてGNDに繋いでしまったことに始まっています。74F373におかしな電圧はかかっていませんし,本体にだっておかしな電圧はかかっていないはずです。

 起こったことは,5VをGNDに繋いでしまったことで本体の電源をショートさせたことでした。もしかして本体保護のヒューズが入っていないか?

 調べてみると,Lスロットの近くに3.5Aのヒューズがありました。テスターで調べると見事に導通がありません。切れています。

 仮にこれが原因でなくても切れたヒューズをそのままにするのもまずいので,手持ちの2Aのヒューズに交換します。

 電源を入れると,ちゃんとメモリカウントが始まりました。起動後tmem.exeでチェックすると全エリアOKです。よかった,原因はヒューズでした。

 74F373のラッチをHigh固定して無効化してみたところ,正常に動作しています。やはりエプソン機の上位アドレスは本体内部でラッチ済みだったようです。

 今回は慎重に74F373を取り外してチェックしましたが,正常に動いています。

 これで完成です。仮想86モードでEMSにすることも,UMBを利用することも出来る事を確認して,長くかかったこのプロジェクトも終了です。

 軽い気持ちで始めたメモリ増設ですが,こんなに苦労す るとは思いませんでした。

 ちなみにSRAMのウェイトをなくす回路は入れていませんのでかなりのウェイトが入っているはずですが,もともと16bitバスの遅いマシンですので,そんなに気になりません。

 SI.exeでは4.77倍から若干低下し4.66倍,他のベンチマークでも若干速度低下がある程度で,しかしながら画面のスクロールが体感上少し遅くなったように感じます。(ああ,当時が懐かしい)

 しかし,メモリのアクセス速度(ワードアクセスの速度)を調べてみると,増設したエリアは6732usec,内蔵メモリのエリアは2360usecほど出ていますので,3倍ほど遅くなっています。WindowsやLinuxを走らせるわけではありませんので,気にしないことにします。

 ノーウェイトにする方法もありますのでチャレンジしてもいいですし,余っているSRAMをさらに追加してメモリ容量を増やすということも考えたのですが,もういい加減に飽きてきましたし,DOSで2MBも4MBも変わらんだろうということで,ここでもうこの件は終わりにします。

 今回手間がかかったのは,PC-386BookLというマイナーなモデル故の資料のなさ,時代的に2MBもの容量をSRAMで実装した例がなかったこと,PowerBook用の疑似SRAM小基板を流用したがその資料も全くなかったことなど,手探りで進めざるをえなかったことが複数あったのが原因です。

 特にLスロットのピン配置についての資料が限られており,しかもそれによるとCバスとは異なるアサインになっていたので,信用していいかが最大の問題でした。

 今回のボード製作ではっきりしたことは,

(1)PC-386BookLの上位アドレス(SA20からSA23まで)はCバスとは配置が異なる
(2)PC-386BookLの上位アドレス(SA17からSA23)はラッチが必要ない
(3)PC-386BooKLのLスロットの上位アドレスを有効にするにはPRSL(A2ピン)をOpenにする
(4)ENOWAITはLowにしただけではだめ
(5)SRAMでもWEはSMWRではなくMWE0を使用する
(6)さすがSRAM,リフレッシュを考える必要はない(疑似SRAMはDRAMだ)
(7)70nsという高速なSRAMを使えばタイミングのことをほとんど考えなくてよい

 ということで,(1)から(3)がはっきりしたのは大きいです。

 SRAMを使えば簡単にメモリを増設出来ることをいろいろな機種で実装してきましたが,386SX搭載機でも可能であることがわかりました。当たり前のことなので大した自慢にもなりませんが,手に入りにくい昔のPCのメモリを増設する方法としては,現実的な方法の1つだと言えると思います。

 残念な事にSRAMの大容量化が止まっていますし,4Mbit品の入手でさえも難しいのが現実ですが,電源電圧を考慮すれば簡単に繋がるので,ストックを持っておくと面白いかも知れません。

 さーて,お楽しみは1バイトでもコンベンショナルメモリを増やすような,config.sysを書くことですね。これがやりたくてメモリ増設したんですよねー。

 あれ,UMBを設定したらフロッピーディスクドライブが動かなくなりましたよ。


X1turboIIIをレストアする

 先日,フラフラとWEBを見ていると,X1turboの内蔵Ni-Cd電池が液漏れして大変なことに,という記事を見ました。そうか,X1turboくらいになるとRTCをNi-Cd電池でバックアップしたりするんだよなあと思っていたのですが,問題はその結果フロッピーディスクが動作不良になるという話です。

 機種によりますが,X1turboはFDCやデータセパレータなどが載った基板にNi-Cd電池が搭載されていることが多い上,フロッピーディスク関連の配線が電池の周りに走っているらしく,腐食でパターンが切れると大体フロッピーディスクに問題が出るそうです。

 それは大変。昨年実家からあわてて引き上げてきたX1turboIIIも液漏れから動作不良になっているに違いありません。

 そう,昨年の今頃,35年ぶりにX1turboIIIは私の手元にやって来たのです。このマシンは私にとってはもちろん,主なユーザーだった弟にとっても非常に重要な意味を持つマシンで,このマシンを手に入れて我々は初めてメジャーな機種のオーナーとなり,そしてメジャーなマシンとはどんなものなのかをハードとソフトの両面から味わったのです。

 私個人はturboであったことが単純にうれしかったのですが,機種選定を行った弟がX1を選んだ理由がYM2151が使えるからで,しかも彼のその後の使い方を見ていると別にturboでなくても良かったことから,X1Gmodel30にして,余ったお金で周辺機器やソフトを買った方が良かったんじゃないかとも思います。

 そんな「もったいない」X1turboIIIは私に,いくつかの初めてを見せてくれました。

 まずフロッピーディスクの素晴らしさ。大容量であること,高速であることはもちろん,ランダムアクセスが可能なこと(つまりシーケンシャルアクセスではないということ)で私のコンピュータに対する理解は一気に高まりました。ファイルの概念,OSの概念,FATの概念など,これがなければ話にならないことばかりです。

 アセンブラでの開発には必須となる理由やCP/Mとはどんなものかも実際にその作業を通じて理解できたのも,フロッピーディスクを実際に使うようになったからだと思います。

 次にRGB接続の素晴らしさ。それまで使っていたPC-6001はコンポジットでボケボケの画像で,黒バックで使うことが画質的に無理があった機種だったこともあり,RGBの高精細かつ色ズレのない画面表示にはいつも憧れていました。2000文字表示が実用的であり,それがコンピュータを使う環境を劇的に改善することを身をもって知りました。

 関連して400ライン表示の素晴らしさも上げておきます。200ライン表示のRGBにも感激しましたが,turboで可能になった水平周波数24kHzの400ライン表示には,まさに未来を見た気がしました。

 いや,PC-9801では当たり前でしたし,PC-8801でも400ライン表示は出来ていましたが,私が感激したのは16ドットx16ドットの全角文字で1000文字を表示することの美しさです。8x8ドットのANKは,あれはあれで味がありますが,16x8のANKを使うと,同じマシンなのに上位機種を触っているような気分になります。8x8ドットの世界は200ラインですので民生品の流用という感じがしますが,400ラインの民生品は存在せず,コンピュータの世界からやってきた専用品というのが非日常な気分を醸し出していたんだろうと思います。

 turboはBASICで全角文字を扱うことの出来る強力な仕組みを最初から持っていましたし,640x400ドットでPC-9801並の8色カラーグラフィックも扱えました。

 私は後にX1Fを自分専用の開発マシンとして中古を安く買って使うことになるのですが,各種の改造でもどうにもならなかったのが400ライン表示でした。16ドットのキャラクタージェネレータや400ラインのためのGVRAMの増設だけでも大変なのに,ディスプレイまで買い換えないといけないような改造はさすがに敷居が高く,turboの存在意義がここにこそあると当時も思ったものです。

 それからハードウェアの知識です。Z80のシステムはそれ以前から理解していたつもりでしたが,X1turboほど大規模なシステムは手を出すのも恐ろしく,しかしシステム構成が素直でわかりやすいことと,そして拡張スロットもわかりやすい形で利用可能になっていたことで,先程のX1Fと一緒に,MIDIやクロックアップ,外付けFDDはもちろん,CRTC-IIの搭載でスムーススクロールとか,X1FにCTCとDMAと搭載したりと,好き放題やっていたように思います。

 それらの改造ハードウェアを使うには当然マシン語の知識も必要で,アセンブラも使えるようになったのは大きな進歩です。結局,基本に忠実に回路を組めば必ず期待に応えてくれることを学んだのでした。

 そうそう,シンプルなシステムの1つに,I/Oアドレスが16ビットであることがあります。Z80や8080などの80系ではI/Oアドレスはメモリとは独立している代わりに,アドレスが8ビットしか割り当てられていません。

 よく知られたことですので今さらですが,Z80のI/O空間へのアクセスはIN命令とOUT命令で行います。この時アドレスの指定はCレジスタで行うのですが,実際にはBCレジスタがアドレスバスに乗っています。

 BCレジスタでI/Oアドレスの指定を行う事が出来るなら16ビットのアドレスで指定が出来る事に他ならず,Z80の隠し機能の1つとして知られるようになります。

 もちろん,正式な仕様ではありませんのでいつ使えなくなるか分かりませんし,深刻なバグが潜んでいたりするかも知れません。しかし少なくともシャープ製のZ80では確実に機能しますし,他社のものでも動かないという話を聞いたことがありません。

 ということでZ80はメモリ空間64kB,I/O空間64kBの合計128kBがダイレクトにアクセス出来るのですが,当然I/O空間にはコードは置けませんし,演算なども制限がありますので同じように扱えるわけではありません。

 しかし当時の8ビットマシンにはもってこいの使い道がありました。それがVRAMです。当時標準的だった640x200ドットの8色カラーのグラフィックを使うには48kBのメモリが必要になります。64kBのメモリ空間しかないZ80にとって,48kBはメモリ空間の3/4を圧迫する大容量であり,当時の8ビットマシンにとってこの問題の解決が機能アップに不可欠でした。

 X1はGVRAMをI/O空間に置く事で特別なハードウェアなしに解決しました。メインメモリはフル64kBをRAMで実装し,IPLやBIOSだけはバンク切り替えで対応することで,実に見通しのいいメモリマップを持っていました。

 実はメモリ空間とI/O空間ではアクセス速度が違い,I/O空間の方が遅いのですが,それもまあGVRAMならそれほど問題にはなりません。加えてI/O空間になにかデバイスを置こうと思ったら16ビットフルデコードが必要になるので回路が面倒というデメリットもあるのですが,それよりは同時使用できないバンク切り替えのメモリ空間が実質存在しないというのは,とても楽ちんだったように思います。

 話が逸れました。私のX1turboIIIの話に戻りましょう。

 X1turboIIIのレストアもいずれ行う予定でしたが,AppleIIよりも大きく重い本体にキーボード別体,しかもディスプレイも用意しないといけない上,実はそんなにやりたいこともなく,ソフト類はほとんど持ち込んでいないという状況で,どうも後回しになってしまいました。

 実家に持ち込んだ直後に一度起動することを確かめていますが,そのことも「まあそのうちに」と後回しにしてしまった理由です。

 しかし,Ni-Cd電池の液漏れという緊急事態がわかった以上,もう放置は出来ません。早速レストアです。

 まず驚いたのは,下手な改造がたくさん行われていたことです。クロックを6MHzにしたことは覚えていますが,CTCやSIO,PSGに4MHz由来のクロックを供給するために,基板のパターンをあちこち切って太い配線で自作の基板からクロックを供給していますし,FM音源ボードにも同じ方法でクロックを供給しているので,スロットからボードを抜く事すら出来ない状態でした。

 それから予想通りNi-Cd電池は液漏れしており,スルーホールは腐食して,パターンのいくつかは細くなって切れそうでした。これはまずいです。

 クロック切り替え用のスイッチを取り付けるために開けた穴も不細工ですし,本当に必要だったのか思う6MHz動作時のLEDの取り付け穴も,元に戻せない改造です。

 電源ユニットのコンデンサは液漏れしていませんでしたが,これもいつダメになるかわかりませんので,出来るだけ交換しておきたいところです。

 ということで,メンテナンスのメニューが決まりました。改造はすべて元に戻してオリジナルにする,Ni-Cd電池は取り外して代わりに電気二重層コンデンサに置き換えることをまず最初に行います。

 改造ですが,元はカスタムICが16MHzを発振させて分周したクロックをCPUを含めてあちこちに分配してたものを,16MHzと27MHzのクロックジェネレータを載せた小基板を自作し,CPUのクロック以外は16MHzを分周したクロックが常に供給されるようにしてありました。

 この子基板をはずし,カットしたパターンを修復,16MHzの水晶発振子に戻して一応元通りにしました。

 Ni-Cd電池については取り外した跡地に1Fの電気二重層コンデンサを取り付け,充電回路に入った3kΩの両端に40Ωを並列に取り付けておきました。これで数日くらいは時刻を維持してくれると思います。

 ところが組み立て後のテストで,カーソルが点滅しなくなってしまいました。X1の場合,RTCが動作してないとカーソルが点滅しなくなります。time$の値もタイマー画面での時刻表示も無茶苦茶な上時刻が進まないので,RTCが動いていないのだろうと思いましたが,どうも32kHzの微調整用のトリマコンデンサの不良で起きていたもののようでした。

 これ,X1系ではよくある故障のようでして,私の場合もトリマを少し左右に回してやると直りました。本当は交換すべきなんでしょうけど,面倒だからこれでいいです。

 電源部ユニットは2次側の電解コンデンサを近い容量のものにどんどん置き換えていきました。

 先に水洗いが済んでいる筐体を組み立て,基板や電源,ファンを組み付けて通電テストを行いましたが,とりあえず問題なく起動くれました。短時間ならRTCもバックアップされているので,こちらも期待通りです。

 ここまで来れば後は簡単で,フロッピーディスクドライブのベゼルを洗い,ヘッドを掃除して本体に組み込みます。これで本体は終了ですが,面倒なのはキーボードです。

 酷使されたキーボードは汚れと変色,そして足が折れていました。よくあるカールコードは無事でしたが,代わりにキーボードカバーのゴムがキーボードの表面を溶かしていて,これがなんとも惨めです。

 この融けた表面を修理するのは無理なので,もう放置することにします。見た目は悪いですが,機能的に問題はありません。

 折れた足はアクリサンデー接着剤で溶着し,キートップ1つ1つを水洗いします。乾いてから組み立てればこれで終了です。

 ところがテストをしてみると入力出来ないキーがいくつか出てきました。何度かキーを押しているうちに動くようになったのでOKとしましたが,メカスイッチはこういう経年劣化がやっぱり心配です。


 もともと壊れていたわけではなく,改造箇所を元に戻しただけの作業ですから,動いて当然で,その分作業は楽だったのですが,大きくて重いことが作業の障害になりました。それに無骨なスチール製の筐体で随分手を切りました。

 起動後,手元に僅かに残ったフロッピーディスクからあれこれと起動して試していますが,BASICの起動ディスク(3枚ありました)がことごとく壊れており,記録したユーティリティなどが読み込めなかったり暴走したりしました。

 カビもないので壊れた原因に心当たりがないのですが,まあ30年近い時間を経ていますので,仕方がないかなと思います。自作のプログラムなども壊れてしまっているのですべて元通りには出来ないのですが,出来るだけサルベージしておこうと思います。


 ふと冷静になってみると,AppleIIの面白さもPC-386BookLの実用性もなく,X1turboというマシンにはあまり魅力がないことに気が付いてしまいました。ソフトの大半は弟のところにありますし,開発に関係するものは当時のPC-9801に移行していましたから,別にX1でなければならないこともありません。

 当初は2HDのドライブをもっていたことから,MS-DOS互換のOSを使ってPC-9801の5インチディスクをイメージファイルにする目的もありましたが,PC-386BookLのおかげでその必要もなくなりました。

 とりあえず,AppleIIにもPC-386BookLにも課題が残っていますので,その後にじっくり使い道を考えて楽しんでみようと思います。

SuperSerialCardの問題,完結

 9月末に頼んでいたRockwell製のR6551が昨日無事に届きました。

 Aliexpressは最近早くて,安い代わりに1ヶ月という話が変わりつつあるなと思います。

 届いたR6551は92年製,なんと足のフォーミングも行っていない新品が届きました。いやいや,リマークした偽物の可能性もありますし,実際に動かして見るまで安心出来ません。

 早速自作のSuperSerialCardに取り付けてAppleIIを起動します。USB-シリアルケーブルを繋いだMacに繋いでADTProを起動して,Sppdibootを使ってProDOSとADTProクライアントを転送します。

 今さら詳しい説明で恐縮なのですが,SppedibootではProDOSが2段階,ADTProが1段階の合計3つの段階を経て起動します。一番最初は小さいローダーをモニタから16進のコードをキャラクタベースで転送し起動,以後はProDOSとADTProを119200bpsでバイナリ転送します。

 最初のローダーはW65C51でも問題はなかったのですが,そこからが全く動作しませんでした。しかしR6551にすると嘘のようにさくっと転送が始まります。これまでの検討でわかってはいましたが,実際に自分の自作のカードで動いているのを見ていると,これまでの苦労はなんだったのかと,うれしいと言うよりがっかりしました。

 結論として,ADTProはW65C51では動かないことが確定しました。

 ソースコードを面倒くさがらずにもっと早くに見ていれば,W65C51を予備も含めて2つも買うんじゃなかった,どうしてALiexpressでR6551を最初に探してみなかったのか,といろいろ後悔するわけですが,まあそれも済んでしまった事です。

 すでにADTProはUthernetIIを使ったEthernetでの運用が定着していますし,速度的にもシリアル接続のメリットはありません。純正SuperSerialCardIIと自作品の2つのシリアルカードを持つ事になってしまいましたが,その必要性は随分下がってしまいました。

 技術的に面白いチャレンジとなるのは,やはりADTProを修正してW65C51でも動くようにすることだと思いますが,以前書いたようにビルド環境の構築も大変ですし,すでにR6551を手に入れた今となっては動機もありません。なので,これはもうやめておきます。

 さて,6月下旬から3ヶ月もかかってしまったSuperSerialCardの自作プロジェクト,ここに完結しました。オークションでうっかり純正品を買い逃したことに端を発したものでしたが,W65C51の非互換を確かめるために結局純正品を買うことになってしまったりしましたし,お金も時間も随分かかってしまいました。

 しかもADTProを使うという当初の目的はUthernetIIで完遂できているので,技術的な納得感を得ただけのプロジェクトとなってしまいました。それが得がたい経験であることは分かっていますが,どちらかというと最初にSuperSerialCardを買い逃すことがなければおそらくスムーズに事が運んだと思いますので,なかなか上手くいかないものだなあと思います。

 

SuperSerialCardの問題に決着を

 結局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が届くのを待つばかり・・・

 

ADTProへの長い道~UthernetII編~

20220805102643.JPG
 まさかの自作失敗で動作がかなわないADTPro。ここで悔しがっていても前に進まないので,不本意ながら別の方法を考えてみます。

 オーディオ経由は非現実です。なら残った方法はイーサーネットだけ。

 しかし,AppleIIの時代にイーサーネットなんて,どう考えても不自然です。純正品のカードもなかったはずですし,ならどんなカードを用意すればよいのやら・・・

 調べてみると答えは簡単でした。イーサーネットカードは自作されたもの。しかもそれはすでにマニアの間では標準的なものになっており,ADTProもそれをサポートしています。

 そのカードとは,UthernetIIというものです。

 開発者が頒布するもの以外で完成品もキットもありません。基本的には公開された情報で自作です。しかし,イーサーネットの回路など作ったことがありません。どうしたものか・・・

 そもそも,AppleIIにTCP/IPならなんやらを実装できるのか?

 仕掛けは案外簡単でした。実は世の中には,ハードウェアでTCP/IPなどを組み込んでしまうイーサーネットコントローラICが存在します。W5100というチップなのですが,上位からは通信したい内容をレジスタでやりとりすれば,チップ内部ですべて処理され,内蔵されたPHYに出てくるという便利なものです。PHY内蔵だけでも一昔前なら超便利と言われたのにねえ。

 このW5100を使えば,非力なCPUでも少ないメモリでも,イーサーネットに繋がるマシンが作れます。実際,Arduinoでも標準的に使われているようです。

 しかし,W5100は0.4mmピッチのQFPです。これをハンダ付けするのも大変ですし,そもそも基板はどうするという話もあります。

 すると,なんとありがたい事に,W5100とイーサーネットのコネクタまで搭載した小さい基板が売られていました。チップ製造元が評価用に用意したもののようですが,組み込み用途にも十分使えるものです。

 W5100とAppleIIとの接続は簡単ですので,このボードを使えば1日もかからずUthernetIIのクローンが作れるでしょう。2500円とちょっと高いですが,早速注文です。

 W5100は5Vトレラントですので,基本的にはAppleIIのバスト直結出来ます。しかしUthernetIIではデータバスのバッファはもちろん,アドレスバスやコントロールバスにもシュミットのバッファを入れる念の入りようです。

 面倒な私は全部すっ飛ばして直結です。

 さくっと結線を終えて,マニュアルにあるモニタからのレジスタ読み書きテストは合格。しめしめ。

 しかし,ADTProでは動かず。DHCPで失敗します。IPアドレスを手動入力しても,実際の通信は出来ません。

 もしかしてIRQかと思って波形を見ますが,ヒゲのようなものが出ています。よく見ると,IRQはW5100の出力ですので,3.3Vが出ています。一方のAppleIIは入力ですが,オープンコレクタの出力端子が繋がるようになっているので,5Vでプルアップされています。

 ありゃ,W5100に5Vがかかってしまった。

 あわてて回路図通りに,オープンコレクタのバッファ(LS07を追加しますが,結果は変わらずで,ヒゲも出ているし動作もしません。この段階でW5100の破壊を疑い,チップだけを手配しました。(結果これは無駄に終わります)

 さらに波形を見ていくと,途中でDHCPに成功することもありますし,上手くいくとDirectoryコマンドまでは通ることがあります。差し込むスロットを2にすると上手く動くことが増える代わりに,7にするとさっぱり動きません。やはりバスですね,こりゃ。

 そこでLS245を追加。これは想定済みです。

 試してみますが,確かに安定しますし,DHCPも通ることが増えましたが,まだまだです。ならばと,回路図通りに他のバッファも追加しましょう。手持ちの関係でLS244を使います。

 うれしいことに,ここまでやると上手く動くようになりました。ADTProが初めてまともに動いた瞬間です。さすがにイーサーネットだけに高速です。

 この時,IRQを確かめてみますが,ヒゲは出ています。どうもヒゲは関係ないようです。IRQは使っていないんじゃないかと思っているところです。


 ようやくADTProがまともに動き出しました。長い時間をかけましたし,失敗もしました。でも,これでようやくゴールです。

 ・・・といいたいところですが,あと3つ,ネタがあります。待て次号。

 

ユーティリティ

2026年01月

- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

検索

エントリー検索フォーム
キーワード

ユーザー

新着画像

過去ログ

Feed