エントリー

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

AppleIIの色ズレを対策する

 

 最近,私のAppleIIはテキストモードで派手に色ズレが起きるようになってきました。

 AppleIIは,テキストモードではカラー表示を行いません。ですが初期のAppleIIは積極的にNTSCのカラーバースト信号(3.58MHzですね)をOFFにすることをしていませんでした。

 そのため,テキストモードでも文字に色がついてしまい,滲んで見にくくなってしまうことが指摘されていたようで,後にテキストモードではカラーバースト信号をトランジスタでGNDに落としてしまう回路が追加されています。

 カラーバーストがないビデオ信号というのは白黒時代のビデオ信号そのものですので,モニタ内部では輝度信号だけのモノクロ信号として処理されるようになります。具体的にはカラーバーストを使った色信号の復調回路が完全に殺され,輝度信号だけでCRTが駆動されるようになるわけです。

 私のAppleII(もとはJ-plusなんですが)でもこの「カラーキラー」と呼ばれる回路は入っているので,多くの場合はテキストモードでカラーバーストが出なくなり,画面には滲みのない完全なモノクロ画面が表示されるようになっています。

 しかし,最近不安定で,一度グラフィック画面に切り替えてしまうとテキストモードに戻してもに色のじみが消えないとか,色のにじみが起動時から出てしまうなどの問題が頻発するようになりました。

 カードをたくさん追加するようになってから頻度が増えたので,電源の問題だろうと思っていたのですが,テキストモードでのにじみ方がひどくなって来ていることや,頻度が上がって実害が無視できなくなってきたことから本気で対策することを考えました。

 最初に行うことは,ビデオ出力レベルの調整です。私はNTSC-HDMI変換器を間に挟んでおり,こいつとの相性かも知れないと思ったので,まずは適正レベルに調整することを行いました。レベルが1Vp-pになるようにオシロスコープ波形を確認し,TRIMを調整します。

 ですが,やはり根本的な問題はこれではないようで,にじみは解決しません。

 カラーキラーが動いていない,あるいは不完全なのかも知れないので,カラーバーストの波形を確認します。カラーモードでは正確な3.58MHzが観測されますが,テキストモードでは3.58MHzのレベルがぐっと下がっていることが確認出来ます。

 うーん,しかしながら,カラーバーストは完全に消えておらず,半分くらいのレベルに下がっているだけですし,何周期かおきに大きなトゲが出ています。3.58MHzとは異なるノイズのようなものも載っていて,とにかく汚いです。

 広く知られているように,カラーバーストは色信号の基準となる位相を伝送するもので,色信号はこのカラーバーストとの位相差で色を伝送する仕組みです。

 本来,カラーバーストが3,58MHzから大きく外れてしまうと,モニタ側のPLLのロックが外れて白黒信号として扱われるわけですが,どのくらいでPLLがロックするかはモニタによるところがあるので,私のAppleIIでもカラーキラーが働かない場合もあるのでしょう。

 しかも,その3.58MHzがフラフラして。それにPLLがロックするようなことがあると,派手に色がずれるというのも道理です。アナログ時代の画質は,とにかく輝度信号の周波数特性が平坦で高域まで伸びていることと,カラーバーストがしっかりしていることが重要なのです。

 推測するに,トランジスタで作られたカラーキラーでは,カラーバーストの期間を完全にGNDに落せず,漏れ出てきたカラーバーストにあちこちから回り込んできたノイズで汚された変な信号がカラーバーストとして混合されているということでしょう。

 ですので,同じように色ズレが出ていても,グラフィックモードでカラーキラーが働いていないときの方がずっと綺麗な表示で文字も読みやすいです。

 さて,原因がわかったところで対策です。

 簡単な方法としては,カラーキラーを殺してしまうことです。テキストモードでもグラフィックモードと同じようにカラーバーストを有効にすれば,テキストモードでも色のにじみはありますが,今よりずっとましなにじみになります。

 初期のAppleIIと同じ回路になるわけですが,これはレトロPCとしては趣のある画面ではあっても実用性を損なっていて,長時間の使用には耐えないでしょう。MSXやPC-6001などのホビーマシンで文字がにじんでしまう事は許せても,プログラムやビジネスで使用するAppleIIでは厳しいからこそ,後のAppleIIでは改良されているわけですし。

 ではどうずるか。カラーキラーのトランジスタのベース電流を増やして,よりカラーバーストをGNDに流し込んでやるという対策が海外で行われていることを知りました。現在4.7kΩのベース抵抗を2kΩに半減してやると,カラーキラーが確実に働くようになったということです。

 これは簡単な改造で,ベース電流は現状1mA,これを2mAにわけですが,hFEが仮に200としてコレクタ電流は200mAから400mAに増やせることになるでしょう。2N3904としては400mAは流しすぎなのでちょっと怖いんですが,そもそもこのトランジスタのコレクタには1kΩが入っていますので,実は5mA以上の電流は流れません。ということはベース抵抗を小さくしてもあまり効果がないんじゃないかと思います。

 最後期のAppleII(Rev7の後期とRFI)で採用された対策回路はもっと積極的で,カラーバーストを74LS02でカットしてしまうと言う回路が追加されています。トランジスタによるカラーキラーも入っているので,2つの回路でより確実に,ということでしょう。

 で,うちのAppleIIはどのリビジョンなのか調べてみたら,Rev7の後期モデルでした。カラーキラーは74LS02によって積極的にカットされる回路でしたが,H2という信号の反転はトランジスタを使ったもので,RFIに特徴的な74LS02を使ったものではありません。

 さらに謎なのは,使われているトランジスタの種類が一部違っていたことです。回路図では2N3904という汎用の小信号トランジスタ(そう,日本で言う2SC1815みたいなやつです)なのに,カラーキラーとSOFT5反転のトランジスタが,ダーリントントランジスタになっていたのです。

 ダーリントントランジスタだと,確かに少しのベース電流で確実にトランジスタをON出来ますが,今回の使い方では2N3904で十分なはずで,hFEが極端に大きい方がむしろノイズを大きくしてしまうんじゃないかと思い,2SC1815に交換しました。

 さらに,H2の反転も余っている74LS02に作り替え,RFIと同じ回路にしてみました。(ただし,RFIでは垂直同期信号がより正確になるように74LS02を2つ使って回路を修正しています。そのためRev.7とは異なる回路になっており,Rev.7を完全にRFI同等にするのはやめておきました。)

 それでもやはり色のにじみは改善されません。カードを2枚くらい挿しただけだと大丈夫なんですが,3枚にするともうダメです。最初電源周りを対策すれば解決するだろうと思っていたのが甘かったようで,ちょっと目処が立たなくなってしまいました。

 TEXTモードではカラーバーストを混合する直前で,GND(それもビデオ出力端子のGND)に落とすのが効き目があるとわかって,リレーを使ったりしてみましたが,少しましになった程度です。

 しかもレベルを適正にすると画面が白く飛んでしまい,文字との区別がつきにくくなるという強烈な障害も発生するようになりました。これ,結局コンポジット信号の質が悪すぎることに原因があります。白く飛ぶのは黒レベル(ペデスタルレベル)を捕捉し損ねている結果ですし,波形を見ていればさもありなんというくらいのひどい波形です。

 こうなってくると小手先の修正では手に負えなく,次の一手としてビデオ信号の変換器を交換してみることにしました。

 私がこれまで使ってきたのはコンポジット-HDMIの安い変換器です。解像度は低く,モヤーっとした眠い画像ですが,色はしっかり出ますし,AppleIIだけではなくPC-6001でもM5でもちゃんと変換出来るので気に入って使っていました。

 今回試したのは,コンポジットをVGAに変換するものです。アナログRGBにするわけですので,デジタルに直接変換するものとは違い,変換品質にはあまり期待していませんでした。

 値段は少し高くて1500円ほどしましたが,これは正解でした。

 黒レベルの捕捉は失敗しませんし,カラーキラーもきちんとかかります。変換後の画像もなかなかシャープで,これまでのものよりもずっと高品位です。惜しいのは復調の品質が良すぎて,元の信号の品質が悪いことが露呈してしまうことでしょうか。

 しかも,RGN入力端子を持っているので,ボタン1つで切り替えが出来ます。これで80桁カードとの切り替えもワンタッチです。

 あれこれ悩むより,これで対応した方がずっと早くて確実な方法で,私はリレーを使った回路を取り外してしまいました。

 これで色ズレの問題は決着なのですが,いつの間にか起動しないゲームが出てきていることが発覚しており,一難去ってまた一難を地で行っている感じがします。

 どうするかなあ。

X1turboIIIにバンクメモリを

20221122141814.JPG 

 X1turboIIIですが,なかなか手強いです。

 破損したディスクを修復するのも手間取っていて,LOADするときちんと読めるのにturboBASICでCOPYコマンドを使うとファイルが壊れるという謎の問題に手を焼いています。

 COPYコマンドが信用出来ないわけではないし,書き込み先のディスクの破損もありませんから,やはり読み込み元のディスクの破損が問題なのでしょう。私はフロッピーディスクのフォーマットに詳しいわけではないですし,昔のようにディスクエディタで中身を覗き込むことに,あまり興味を持てなくなっています。

 最初,COPYコマンドでコピーを取ったBASICのリストがかなりの確率で壊れているので,打ち込み直しまで考えたところ,普通にLOADすればあっさり読み込めることを発見し,安心した一方でこれまでに処理したファイルの破損を調べ直さないといけなくなったことにがっかりした記憶があります。

 ところで以前PC-6001やPC-386でも活躍したGOTEKのFDDエミュレータですが,X1でも動作しています。私の場合,まずは外付けFDDのコネクタに繋ぐケーブルを自作し,GOTEKと繋ぎました。

 ちゃんと2HDも2Dも認識しているので問題なのですが,悲しいのはX1のコピーツールのほとんどは,ドライブ0からドライブ1へのコピーに設定されているので,外部FDDに切り替える事ができないのです。

 だから手元のディスクのバックアップを取りたいなあと思った時は本体を開けてFDDを引きずり出し,ドライブ番号のジャンパを差し替えて動かすという離れ業をやらないといけません。

 といいつつ,turboのマニュアルにはそのやり方が詳しく書いてあるので,X1ユーザーならこれくらい出来ないといけないのでしょうね。なんとユーザーに厳しいマシンである事よ。

 で,ここだけの話ですが,CZ-8FB03のイメージを手に入れました。そう,turboZ-BASICです。うちのマシンはturboIIIですのでturboZではありませんが,Z特有の機能を除いてCZ-8FB03が動作します。

 私はturboユーザー向けに外販されたCZ-8FB03を買わずにいました。turboで使う限りCZ-8FB03を使う理由が見当たらなかったからです。バンクメモリも付属していましたが,ここにはコードを置く事が出来ず,変数エリアとしてしか使えなかったことも買わなかった理由です。

 逆にturboZを買っていたら,予約してでもCZ-8FB03を買っただろうと思います。

 そんなわけで見送ったCZ-8FB03ですが,turboでもCZ-8FB03の起動する画面を拝めるかも知れないと内緒でワクワクしながら起動したのです。

 しかし残念ながら起動せず。バンクメモリがないから起動できないと,怒られてしまったのでした。いやいや,起動くらいはしないといかんよと思ったのですが,聞けばMMLの実装などでバンクメモリをほとんど使い切っているくらいだそうで,アクセスに時間のかかるバンクメモリを活用するBASICってのも,あまりうれしくないものです。

 しかし,ないものは作ってしまえばいいと,手持ちの部品棚を探し回ってみると,1MbitのSRAMもTTLもゴロゴロ出てきました。基板さえ手に入れればあっという間に作れるでしょう。

 X1turboのバンクメモリは,前半32kBを切り替えて使うようになっています。このアドレスは32kBのBIOSのROMと切り替えるエリアですが,turboではここをバンクとして割り当てており,最大16バンクで512kBまで扱えるようになっています。

 バンク制御はI/Oアドレス0x00B0にあるレジスタで行い,下位4ビットで16個のバンクを指定,5ビット目でバンクメモリ有効/無効,6ビット目でBASICがバンクアクセスしているかどうかを知るフラグとして使われています。

 これくらいの仕様がわかっていると回路図を起こすのは簡単で,さっと設計した時は3チップ+SRAMで出来ました(これでは動かないことをのちに思い知るわけですが)。これで4バンク128kBです。

 つくづく悔しいのは,サンハヤトのX1用ユニバーサルボードを予備で1枚買ってあったものを,昨年の実家の整理で捨ててしまったことです。作ったMIDIボードも捨ててしまいましたので,せめてそれだけでも残しておけばと悔やまれてなりません。

 50ピンの基板をなんとか手に入れて,X1用に44ピンに削って基板を用意します。重い腰を上げて製作に入ってしまえば2時間ほどで製作できたので早速試してみたところ,CZ-8FB03は拡張メモリがないとだだをこねて起動してくれませんでした。

 やっぱそんなに甘くはないか・・・

 いくつかの配線ミスを発見して修正しますが状況は変わらず。ただ,念のためと確認したFM音源ボードも動作しなくなっていたので,もしやと確認するとやはり拡張スロットと本体基板を繋ぐコネクタが外れていました。あちゃー。

 組み立ての時に接続し忘れたんでしょうね。戻して組み立てなおし,FM音源ボードの動作は確認出来たところで,拡張メモリを差し込みます。

 しかしやっぱりCZ-8FB03は起動しません。そこで真面目にオシロスコープを引っ張り出して動作の確認を順番にやることにしました。

 まずアドレスデコード。これは0x0B00でデコード出来ていますし,WRもRDもこれに従って作られています。

 次にレジスタ。ここはD-FFの入力にデータバス,クロックに先程のWRをいれて書き込みますが,読み出しは74HC125の入力にD-FFの出力を繋ぎ,出力はD-FFの入力(つまりデータバス)に繋ぎます。

 これ,74HC374を使えば簡単なのですが,D-FFの出力を引っ張り出してSRAMもアドレスにしないといけないので,使えないのです。面倒くさいです。

 そこで4バンク分のアドレス指定2ビットと5ビット目と6ビット目の4つのために74HC175を使い,このうち読み出しが必要な6ビット目だけワンゲートのNC7S126を使いました。

 波形を見ると一応期待した動きをしているのですが,CZ-8FB03は起動しません。もう一度I/Oマップを見直してみると,なんとすべてのレジスタが読み出し可能に指定されています。うーん,これはさらに面倒。

 しかし,レジスタが読み書き出来ないといけないなら仕方がありません。ワンゲートのNC7S125を普通の74HC125に交換して,4つのD-FFすべてを読み出せるようにします。

 これで動くかなと思って試してみると,CZ-8FB03が一応起動しました。

 うまくいったと喜びましたが,ミュージックサンプルを動かして見るとエラーが出ます。もしやとVDIM命令でバンクメモリに配列を取りA$(0)="AA"と書き込みを行うと,見事に暴走しました。(起動途中で暴走することもしばしばです)

 L-os angelesというOSでバンクメモリを確かめてみようと,BRADコマンドとBWORコマンドを入力しますが,4バンクを認識するもBWORKのイニシャライズでコケてしまいました。

 ということは,未使用のレジスタも含めて,すべて読み書き出来ないといけないのかも知れないです。バンク指定の4ビットのうち使わない2ビットは未実装でしたが,一大決心をしてすべて読み書き出来るようにしましょう。

 4個入りの74HC175は6個入りの74HC174に交換,74HC125との配線を全面的にやり直してすべて読み書き出来るように改造しました。

 これで試して見ましたが,CZ-8FB03でミュージックサンプルが動かない状況には変化なし,L-os Angelesでは8バンクと認識してしまいさらに状況が悪化しました。

 ここで疲れた私は昼寝をしながら,なぜそんなことが起こるかを考えていました。冷静に考えて見ると,実装は0から3の4バンクですが,今の回路はSRAMのアドレスのA15とA16をそのまま繋いでいるだけなので,4から5バンクを指定すると0から3バンクを指定するのと同じになってしまってました。

 これまではレジスタもなく,書き込んだ値が読み出せないので未実装と判定されていたのに,レジスタが用意されたことで実装済みと解釈された結果,上位バンクに書き込むと下位バンクが書き換わってしまい,データを壊していたんだろうと思います。

 まあ,全部で16バンクあるはずなのになんで8バンクしか認識しないのかは謎ですが,とにかくSRAMのアドレスをフルデコードしないとまずいのは確かです。

 そこでバンク指定レジスタの上位2ビットが共に0でないとCSが出ないように修正しました。

 これで試すと,ミュージックサンプルも動作し,VDIMでも暴走しなくなりました。しかしL-os angelesのBWORKコマンドで暴走する状況が残っています。

 もう一度よく考えてみると,バンクメモリを使用することを示すレジスタの5ビット目をそのままSRAMのCSに入れている回路が問題と気が付きました。これだとバンク切り替えの対象ではない0x8000以降のメモリにアクセスしてもCSがイネーブルですから,SRAMへのアクセスが発生してしまいます。

 当たり前の事ですが,0x0B00の5ビット目とA15が同時にLowになっている時だけ,CSがLowになっているようにしないといけないわけで,あわててHC32を1つ追加しました。

 いやー,甘いなあ・・・回路の修正が終わって確認です。CZ-8FB03は問題なし,L-os angekesも大丈夫になりました。よかったー。

 ということで,初期に比べて回路規模が随分大きくなってしまいました。

 今回はレジスタの仕様とソフトでの叩き方から回路をゼロから設計して動かして見たわけですが,どんな手抜きコードが書かれていてもきちんと動作するハードウェアが必要であることを思い知りましたし,それだけソフト屋さんはハードウェアを信じてくれているのだなあとも思いました。

 それからちょっと手こずったのは,SRAMはあくまでメモリであり,メモリ空間に配置されるものであるということをうっかり忘れていたということです。SRAMのアドレスを生成するのはI/O空間にあるバンクレジスタだと思い込んでいて,バンクレジスタのアドレスデコードをやったときに安心しきって,メモリ空間のアドレスデコードを忘れたというのは,情けない話だと思います。


 さて,実際に4バンク128kバイトのバンクメモリが手に入ったわけですが,出来る事はほとんどなくて,CZ-8FB03ではカラープリンタもなく,FM音源をMMLで使うこともしない私にはあまり御利益はありませんし,文字配列変数が10000個確保出来てもうれしくありません。

 L-os angelesはまだ本気で使っていませんので,やっぱりバンクメモリはうれしくないです。

 これがですね,ディスクコピーのバッファにするとかしてくれれば,時間のかかる2HDのコピーが便利になると思うのですが,そういう機能もありません。

 思いついた回路を最終的にねじ伏せて,このプロジェクトは終了です。

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

 

ユーティリティ

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