エントリー

ユーザー「gshoes」の検索結果は以下のとおりです。

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

  • 2022/10/26 09:11

 PC-386BookLで最後に残った問題はメモリです。せっかくの386を搭載しているのに,プロテクトメモリが全く搭載されていないために高速な8086に成り下がってしまっています。

 もっとも,DOSで使う以上はそれで十分だという話もあるのですが,それでもコンベンションルメモリを可能な限り確保するだとか,EMSを使って大きなデータを扱うアプリケーションを立ち上げるだとか,そうした使い方が出来ずに制約を受けるのは面白くない話です。

 もともと,私はPC-9801は386以下を所有していたことがなく,メモリも十分に内蔵してあったので,メモリがないなどと言うのは考えたこともなかったのですが,0x100000以上のエリアにメモリが全く搭載されていないマシンを使ってみて,その不自由さには驚くばかりです。

 ということでメモリの増設をしたいところなのですが,PC-386BookLはそれが難しい機種の代表と言ってもいいかと思うくらい,難しい機種です。専用メモリスロットがあるのは結構ですが,そこに差し込む専用メモリというのが純正しかなく,他の機種に流用が出来ない文字通り「専用品」でした。

 高価で球数も少なく,私も新品はおろか中古品ですら見た事がありません。しかもこのボード(PCRB6)は1MBという小さな容量のもので,増設はこれまた専用のサブボードを乗せるという仕様でした。

 結局386SXなんだからPC-286BookやPC-386Noteと同じメモリを使えるようにしておけばよかったのにと思うのですが,このあたりの行き当たりばったりさは当時のEPSONの元気の良さとも言い換えられるので,まあ仕方がないかなあとも思います。

 そうなってくると現実的な解はLスロットでの増設です。LスロットはPC-286Lというラップトップモデルで採用された拡張スロットで,後にCバスと呼ばれるPC-9801の拡張スロットを小型にしたものです。

 本家NECのラップトップモデルが拡張性を全く持たなかったのに対し,PC-286Lでは2スロットも持っていたわけですし,仕様上はCバスと同じ事がほぼ可能だったわけですから,なかなか意欲的だったと思います。

 しかし,EPSONだけのローカル規格でしたし,そもそもラップトップに拡張性がいるんかいな,という話もあり,結局市場に出たのは高価な純正品で,メルコから数品種のメモリボードが出たりした程度じゃないでしょうか。

 これらを探し出すのも一苦労でしょうが,仮に手に入ったとしてもCバス相当ですので,速度は遅いです。まあ,386SXですから速度を落とす主要因であるバス幅の問題はないのですが,クロックが25MHzから10MHz相当になりますので,私も経験がありますがCバスのプロテクトメモリは使わない方がむしろシステムのパフォーマンスは高かったです。

 内蔵メモリは絶望的,Lスロットのメモリは欠点もあるし入手も難しい。

 もうあきらめるしかないと思っていたいたのですが,ふとジャンク箱を見ると,PowerBook100や170で使われていた2MBのRAMボードがありました。なかなか贅沢で,4Mbitの疑似SRAMが4個搭載されています。

 疑似SRAMで回路は簡単,しかもアドレスバスは配線済みです。これを使えばLスロット用のメモリくらい簡単に作れるんじゃないかと。(のちのこれが安易過ぎたことを知る事になるのですが)

 で,Cバスの仕様を調べていたのですが,これがなかなかくせ者です。一番困ったのがアドレスバスの上位がラッチされないので,ボード側でラッチしないといけないという決まりです。そんなアホなと思っていたら,やっぱりタイミングチャートはそうなっていました。

 面倒くさいなと思っていたら,ある資料にPC-286/386は本体内でラッチされていると書かれている箇所を発見しました。それならボード側にラッチは必要ありません。
 
 ならばもうほぼ直結じゃないか。アドレスのデコードをHC138でやってCEに繋ぎ,OEはすべてのチップ共通(メモリボード上で繋がってました)でMRDに繋ぎます。そしてバイト単位の書き込みのためにORを使ってMWEとA0とBHEでそれぞれのWEを作ってやります。

 複数チップのRAMを使う時の最大の手間は配線なのですが,今回はメモリ基板をそのまま使いますのでアドレスバスは配線済みです。なので,チップごとにわかれて出てきているデータバスをさっさと16bit構成に配線し,先程の簡単な回路に繋いでやれば完成です。これくらいの回路規模でメモリが増えるなら実験としても面白そうです。

 残った問題は実装ですが,Lスロットのユニバーサルカードを手にれるのは絶望的,今ならCADでさっさと書いて中国の基板屋さんにだせば済むだけの話でしょうが,そこまでやるのもなあ,と本体にケーブルを直結するつもりでおりました。

 しかし,Lスロットって1.27mmピッチの50ピンなんですね。だったら懐かしのPCIのコネクタとか流用できるんじゃないかと。カードエッジ部分だけ切り取ってあとは力業でハンダ付けすればいけるような気がしてきました。

 こういう場合にはライザーカードが便利です。探してみますがPCI-Expressのライザーカードばかりです。まあなんとかなると確かめもせずに安いものを買ったのですが,注文してからPCI-Expressって1mmピッチである事に気が付きました。商品が届いてから測ってみても当然1mmでした。トホホ。

 PCIのライザーカードって今は結構高価で,分解して使うにはちょっともったいないです。なんとか安いものを見つけました。それでも1200円です。

 これを49ピンでカット(本当は50ピンでカットしたかったんですが,ちょうど逆差し防止用のスロットが50ピンの場所にあるので49ピンです),メスコネクタを外してピンヘッダをハンダ付けします。

 ちょうどいい大きさの万能基板を探し出して先程のピンヘッダをハンダ付けすると,カードエッジコネクタ付きのユニバーサルボードの完成です。

 さっさと回路図通りに組み立ててテストをしますが,やはりすんなり動くはずもなく,本体も起動しないという最悪ぶりです。CPUENBをデコーダに突っ込むのを忘れていたので修正して試しますがそれでもダメ。

 しかし何度か起動を繰り返していると,時々メモリを認識していることがあるのに気が付きました。最初のメモリチェックでメモリのカウントが起きる場合がたまにある,と言う感じで,しかも1024KB,2048KB,1536KBと認識される容量はまちまちです。

 起動後tmem.exeというツールでメモリチェックを行うとプロテクトメモリのチェックでエラー連発。というかエラーなしが全くありません。

 一応わかったことは,0x100000以上のメモリは普通に繋げば認識してメモリカウントされるということ,また2048KBまでカウントしているので基本的な考え方は間違ってないだろうという事です。

 加えてこれほどエラーがあるというのは,波形が汚いとか電源が汚いとかそういう不安定要因ではなく,完全に何かが間違っているということ。ならもう一度見直しましょう。

 疑わしいのは,やはり上位アドレスのラッチです。EPSON機は上位アドレスが本体内部でラッチ済みという情報を信じてラッチを挟みませんでしたが,そう書かれていた資料は1つだけですし,真偽以前の問題としてPC-386BookLに適用されるかどうかも不明な情報です。

 ならやっぱりラッチを挟んでみよう,ということで配線を大幅に修正しました。幸い手元に74F373のパッケージがありましたので,これを使ってみます。

 しかし全くダメ。波形も見ずにダメとか言っているうちは愚痴にもならないのですが,以前時々行われていた起動時のメモリカウントも一切行われなくなってしまったことが気がかりです。

 回路図の見直しや論理だけではなく簡単にタイミングも見直して見ましたが,全く動かないというのはちょっと納得がいかず,もしかして疑似SRAMだからではないかと思うようになってきました。

 疑似SRAMは見た目はSRAMですが,当然内部はDRAMですのでリフレッシュが必要です。非選択の時に自動でリフレッシュが行われるので非選択の時間が十分にあれば特に気にしなくても良いはずなのですが,メモリを連続でアクセスするようなケースでリフレッシュサイクルを考慮しないと,データが保証されません。

 とはいえ,DRAMのデータはちょっとやそっとじゃ化けないものなので,メモリカウントが始まらないというのはちょっと納得がいかないところもありますが,とにかく不安要因は取り除きたいので,コンパチなSRAMに置き換えることにしました。

 うん?4MbitのSRAMということは1つで512kBもあるんかいな?

 2kBから始まった私のC-MOS SRAM購入の歴史は,とうとう512kBですよ。すごいです。

 もちろん,これ以上の大きさのSRAMもあるわけですが,5Vで動いて6116や62256といったおなじみのSRAMがただ大きくなっただけのSRAMとしては,最大容量ではないかと思います。その名もHM628512。C-MOS SRAMの証である62で始まっています。

 こんなもの,正規品を買ったら高すぎて死んでしまいます。こういうときはいつものaliexpressです。昨今の円安には腰を抜かしますが,送料を入れても$10程の買い物ですので,ハズレを引いてもガチャで課金よりは楽しめるでしょう。

 それにしても最近のaliexpressは短時間で届きます。心配もなくなってきましたので助かります。

 届いたSRAMはおそらく偽物ではなさそうで,早速載せ替えて試してみます。

 結果は後日。

 

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

 

PC-386 Book Lの復活劇 その8 ~コプロセッサでパワーアップ

 PC-386 Book Lのメニューの1つ,数値演算プロセッサを入手しました。

 数値演算プロセッサ?なんじゃそりゃ?という反応が返ってくることだろう事をふと思うと,そういう時代になったんだなあとつくづく思います。

 数値演算プロセッサ(NDPともいいます)とは,浮動小数点演算を行うプロセッサです。いろいろな種類があるのですが,多くはCPUごとに専用の設計され,文字通りコプロセッサとしてCPUにくっついて浮動小数点の演算に関する命令を拡張するようになっています。

 なぜこれが現代では廃れてしまったかというと,すでにCPUに統合されているからです。歴史的経緯を見ていくと,もともとディスクリート部品で作られていたCPUがLSIになるとき,回路規模を小さくするために別チップに分けたというのが正しいと思います。

 さらにいうと,当時のLSIになったCPUの用途では浮動小数点の演算への需要が低く,回路規模が大きくて高価になりがちな機能を省くというのは合理的でもあったのです。

 8080やZ80などの乗除算命令さえ持たなかったCPUの時代には,命令を拡張するという考え方はなかったですし,専用の数値演算プロセッサも作られなかったですから,I/Oデバイスの1つとして演算を行うLSIが使われていました。

 これらはいわば関数電卓そのもので,関数電卓からキーボードとディスプレイをはずし,かわりにCPUに繋がるバスを用意したもの,という感じでした。だから演算速度も極端に遅く,これを使おうという動機はsinやcos,eといった関数が使いたいというものだったんじゃないかと思います。

 16ビットの8086には8087という命令を拡張する数値演算プロセッサが開発されました。CPUにくっついて動作するのでコプロセッサと呼ばれたものの1つとして知られていますが,ライバルだった68000には数値演算プロセッサは用意されず,32ビットの68020用に開発された数値演算プロセッサ68881が流用されていた感じです。

 ついでにいうと,68000には数値演算プロセッサの接続はI/Oデバイスとしての接続以外に方法がなく,命令の拡張という形式を取ることが出来なかったという点で,実は8086の方が有利でした。

 インテルのCPUには伝統的に数値演算プロセッサが用意されていて,8086には8087,80286には80287,80386には80387が開発されました。

 30386はバス幅が32ビットの80836DX,16ビットの80386SXが作られましたが,それぞれに80387DXと80387SXが用意されていました。そういえば387DXはセラミックPGAという立派なパッケージ,一方の387SXはPLCCでこのあたりからも格の違いを見た気がします。

 私がこの目で確かめたわけではありませんが,コプロセッサとして動作するのは8087で,80287や80387では一種のI/Oデバイスとして機能するらしく,動作が8087とは異なるんだそうです。

 で,この数値演算プロセッサですが,メーカー純正品は10万円近く,インテルのリテールは3万円ほどだったと思います。後にサードパーティからのコンパチ品が登場すると1万円くらいで手に入るようになりましたが,果たしてそれだけの効果があったかというとそうでもなく,通常のDOSやワープロ程度では浮動小数点演算の世話にはならないからでした。

 次の486の世代では数値演算プロセッサが内蔵され,ようやく最近のCPUと同じになるのですが,内蔵されていない80486SXという品種もあり,内蔵されていた80486DXとは区別されていました。

 本当かどうかはわかりませんが,人づてに聞いた話では,80486DXのうち浮動小数点演算プロセッサにエラーがあったものを80486SXとし,逆にCPUにエラーがあった不良品を80487SXとして売っていたそうです。そんなことで安定的に量産など出来る訳がないので,あったとしても初期の立ち上げ段階だけだろうと思いますが,大きさからピン配置までそっくりだったことを考えると,あながち嘘でもないと思います。

 Pentiumからはさすがにそういうことはなく,数値演算プロセッサは内蔵されて今日に至ります。

 話を戻すと,PC-386 Book Lに搭載されたCPUは80386SXです。数値演算プロセッサは内蔵されておらず,80387SXという別チップを取り付けなければなりません。しかし当時のことですから,数値演算プロセッサを使うようなアプリケーションは少なく,なくても全然困りませんし,取り付けたところで気分的なもの以外の効果は薄いです。

 そしてそれ以上に,今は入手が難しくなっています。中古品が潤沢にあるかといえばそんなこともなく,既に歴史上のチップになった感じさえします。

 探してみますが,あいにく見つかりません。互換品も見つからず,まあいいかとあきらめていましたが,こういう場合はaliexpressだと探してみると,やっぱり売っていました。価格から見て中古品でしょうし,そもそも偽物かも知れません。どちらにしてもあやしいのは間違いなく,本当に届くのか,本当に動くのかと気になるのですが,こういうのは試してみるのが面白いでしょう。

 9月初旬に注文したものが,9月19日に届きました。aliexpressも早いケースがあると噂に聞いていたのですが,物流がまだ落ち着いていないこのご時世で,よくこの期間で届いたものと思います。

 開封すると,形こそ同じですがどうみても387SXとは違う刻印のチップが2つ出てきました。なになに?BB?VECANA01?

 やられた!と思って自分の注文を確認してみると,なんと私のミスでした。

 商品名は80387SXなのですが,なんとまあ,色の選択に80387SXとVECANA01があり,私は運悪くVECANA01を選んでいたのでした。

 いや,VECANA01というチップを私が知っていれば間違うことなどなかったと思うのです。しかし不勉強な私は,Burr-Brownからこんな名前のチップが出ていた事を知らず,品名さえ間違っていなければ正しいものが届くと信じて疑わなかったのです。

 価格が高いなら返品するのですが,送料まで入れて10ドルくらいの買い物ですから,ここで送料を私が負担して返品しても差額は数百円です。バカバカしいので,違うお店で387SXを買い直しました。

 お値段はほぼ同じ,送料もほぼ同じなのですが,今回はさらに早い到着日時が設定されています。9月22日に注文して,なんと9月27日に私の手元に届きました。

 開封すると今度は間違いなく387SXです。動作クロックは25MHzまでOKと刻印されているもの(16-25MHzとあります)なので,クロックアップしてある私のマシンでも問題はないでしょう。

 とりあえずPC-386 Book Lに取り付けてみましょう。昔からPLCCというこの手のパッケージは取り付けが難しいですし,取り外しは専用工具がないと絶望的です。

 電源が入り,DOSが起動してくれたので,システム情報を確認するとちゃんと認識しています。メモリスイッチを設定してから浮動小数点演算を使うベンチマークを取ってみると確かに動作していることが確認出来ました。これでOK。というかこれ以上することがありません。

 しかしですね,別にかな漢字変換が早くなったわけでも,スクロールが高速化したわけでも,ファイル操作が快適になったわけでもないので,日常的にはなにも変わりません。これは本当に気分のものだと思いました。

 ・・・ところで先程のVECANA01,これ,12bitのADCなんですが,なんと10chです。というのも,モーター制御に使うADCらしく,ベクトル制御用に多chのADCが欲しい人向けに1990年代後半に市場に出ていたもののようです。

 12bitでサンプルレートが1.25Mくらいですので,汎用のADCと思えば使えなくもありませんが,10chもいりませんし,このくらいのADCなら内蔵品で十分ですので,正直ゴミだなと思います。

ユーティリティ

2026年04月

- - - 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 - -

検索

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

ユーザー

新着画像

過去ログ

Feed