エントリー

2022年10月の記事は以下のとおりです。

5インチフロッピーに巣くうカビ

 先日,復活作業中のX1turboで恐れていたことが起きました。

 手元にある貴重な5インチ2Dのディスクのうち,CP/M関連はバーベイタムのフロッピーディスクにしてあったのですが,こいつが他例に漏れずカビだらけになっていました。

 中身をとりあえず救い出さねばと,ジャケットを開いてディスクを取りだし,IPAを拭き掃除を行い,安心してドライブに突っ込んだのですが,カシャカシャと嫌な音がして,エラーが出ました。

 あわててディスクを取り出すと,同心円状のひっかき傷が出来ていて,完全に磁性体が削られています。

 ああ,やってしまった。

 カビのせいで脆くなった磁性体もろとも,ヘッドに付着してしまったようです。

 この状態ではヘッドが死んでしまうことが多く,ディスクはもちろんドライブも故障してしまうことが多いです。今さら5インチのドライブを交換するなんてとんでもないことだと真っ青になったのですが,とりあえず分解します。

 ドライブを取りだし,IPAでヘッドを拭き掃除しますがエラーは解消されず,全く読み込むことが出来ないままです。ああ,これはヘッドが完全に壊れたパターンだなあとうなだれていたのですが,あきらめきれずに無水エタノールでもう一度しっかり拭きました。

 するとカシャカシャという音もなくなり,ディスクも読み書き出来るようになりました。

 ヘッドが復活しました。割れたり削れたりしていないなら,まだ復活の可能性があるということでしょう。よかったー。

 もう一度ディスクをジャケットから取りだして,今度は無水エタノールでディスクを拭いたのですが,もう磁性体が剥げてしまって使い物にならないディスクになってしまいました。これはひどい。やっぱりバーベイタムは鬼門でした。

 読めなかったディスクもなんとか復活させました。全く読めなかったα-CというZ80用のCコンパイラですが,調べてみると元になったBDS-Cの最新版(V1.6)はすでにフリーになっていて,ダウンロードして誰でも使えるようになっていました。

 さっさとダウンロードしX1のCP/Mで使えるようにしてから,手元に残ったオセロゲームのソースをコンパイルして動作する事を実機で確かめました。これで今回の事件で失ったものはありません。

 ということで,ドライブの故障がなくてなによりでした。私は昔,カビディスクのせいでドライブを壊しているので今回も冷や冷やしましたが,もう危ないことはしないでおこうと思います。

 とはいえ5インチ2Dも今や貴重品です。カビも除去して使えるディスクは,使っていきたいところです。難しい判断だなあと思います。

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を設定したらフロッピーディスクドライブが動かなくなりましたよ。


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を買い逃すことがなければおそらくスムーズに事が運んだと思いますので,なかなか上手くいかないものだなあと思います。

 

ページ移動

  • 前のページ
  • 次のページ
  • ページ
  • 1

ユーティリティ

2022年10月

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