エントリー

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

ADTProへの長い道~SuperSerialCard編~

20220805102627.JPG

 なかなかこの日誌を更新できずにいたのですが,それもこれもAppleIIのトラブルが解決しないことにありました。そう,SuperSerialCardです。

 もともとSuperSerialCardの自作は某オークションでうっかり落札の期日を忘れてしまって入手を逃してしまったことから,なら自作するかで始めたものでした。

 前回の日誌では,それが完成したというところで止まっていたかと思うのですが,本来の目的である「ADTPro」という,AppleIIのディスクイメージを実際のフロッピーディスクに書き戻したり,その逆であるフロッピーディスクをイメージにするソフトを動作させることに,なかなか成功しませんでした。

 ADTProは世界中で使われている定番ソフトで,イメージを持っておくサーバーはPC側に,フロッピーディスクの読み書きは実機にクライアントソフトを動かしておいて,双方で通信をすることで動作します。

 通信はカセットインターフェースを用いたオーディオを使うもの,SuperSerialCarsを用いたシリアルポートを使うもの,そしてイーサーネットを使うものの3つから選ぶ事が出来るのですが,オーディオは遅い上に信頼性も低く,非現実な手段でしょう。

 イーサーネットは純正のカードがないので基本的には自作するしかありませんし,そこまで大げさなことをしなくてもと思っていたので, シリアルポートをp使う人が大半だろうと思います。

 これがAppleIIcやAppleIIGSなどのシリアルポートが内蔵された機種ならなにも問題はないのですが,AppleIIPlusやAppleIIeでは,クライアントソフトがサポートするSuperSerialCardを手に入れなければなりません。

 どうも,そういう事情もあってか,アメリカではSuperSerialCardの中古価格が高騰しているそうで,入手も難しくなっていると聞きます。

 私の場合,AppleIIPlusですので,なにがなんでもSuperSerialCardを手に入れるしかないわけですが,貴重な機会を逃してしまい,その後手に入る目処も立っていません。

 だから,自作するという選択肢は間違いではなかったはず,でした。

 完成までの顛末は前回書きましたが,シリアルポートとしては動いてるという前提で,ADTProを動かしてみるも,全然動いてくれません。

 最新の2.1.0では,まずBootに失敗します。Bootというのは,クライアントを実機に転送して起動させるフェイズで,実機のモニタでサーバー側から転送されるProDOSを読み込み,ProDOSで再起動させます。その後ProDOS上で受信ソフトが自動起動し,クライアントソフトがサーバーから転送されるという仕組みです。

 これが全く動きません。Bootloaderの読み込みまでは問題なく進むのですが,ProDOSとADTProを読み込むBootloaderが沈黙したままで転送が始まりません。

 ならばと別の方法でフロッピーディスクに書き込み済みのクライアントソフトを手に入れて,これでADTProを起動させてみたのですが,やっぱりサーバーとの通信が全く行われず,タイムアウトします。

 この場合の多くは,ケーブルの問題だとADTProの開発者も世界中の親切な人も言っていますので,先人達の知恵には従おうと,様々なクロスケーブルの結線を試してみました。しかし結果は惨敗。以下,やってみたことです。

(1)様々なクロスケーブルの結線を試す。手持ちのケーブルは全滅だったので,自由に結線を変更出来るようブレッドボードを間に挟んで考えつく限り試したがどれもダメ。どうもクライアント側から何度もデータを送り込んでいるが,PC側がそれを受け取っていないようだ。

(2)RS-232Cドライバが悪いのかと,ドライバを挟まずPCのUSB-シリアル基板に直結。結果はドライバを挟む場合と同じ。

(3)先人達は,USB-シリアルはFDTIだと失敗しないというので,FDTIのチップが載っているUSB-シリアル変換ケーブルを秋月で調達。しかし状況は全く変わらず。

(4)バージョンを戻して変化が出ればと,2.1.0->2.0.3->2.0.2->1.3->1.0とバージョンを遡ってみた。1.3まで遡るとBootには成功するが,その後がダメ。しかし,何回かに1回はDirectoryコマンドだけ動くことがある。

(5)サーバーはJavaで書かれているので,先人達はJavaのバージョンにもこだわるべきと忠告。そこでJDKやらJREやらVer8やらなんやら,言われたままに様々なものを試してみるがさっぱりだめ。

(6)2.0.3以前は,Java用のシリアルドライバが必要だそうで,それも入れてみる。でもだめ。

(7)Windowsが悪いのかと,RaspberryPiを引っ張り出す。Linuxベースでサーバーを立ち上げてみるがWindowsと全く同じ。ただし,2.0.3のBootはなぜか爆速。

(8)もちろんボーレートも試せるものはすべて試すが全部だめ。

(9)こうなってくるとハードウェアだろうと,SuperSerialCardを疑い始める。まずCMOSで用意されたロジックICをLS-TTLに置き換えるが,むしろ動かなくなることがある。電圧レベルで考えると,Highの入力がCMOSでは3.5V以上必要だが,TTLでは2.4Vですむ。出力もHighがCMOSはほぼ電源電圧で出てくるが,TTLだと4Vを切るくらいなので,実はCMOSで受けるのは結構まずいはずなのに。

(10)バスのドライブ能力が足りなくて安定しないのかもと,オリジナルには入っていたバスバッファを入れて見る。といっても基板面積から面実装品の74AHCT245を選ぶしかなく,これを挟んでみるが結果は変わらず。

(11)モニタからアドレスを直接叩いてみるも問題なし。うーん・・・

(12)しかし,気になる事も。W65C51の初期バージョンにはエラッタがあり,送信バッファが空っぽになったときにフラグが立たない。オリジナルの6551とは挙動が異なる。この問題はW65C51を使う上ではよく知られた話らしい。このエラッタは後に「仕様」と割り切られたあげくに,後期バージョンではしれっと修正されているらしい。
 で,ADTProでエラッタが問題となるかについては不明。ソースを見る元気もない。ただし,初期バージョンでクローンをADTProを目的に作っている人がいるので,おそらく動作しているんじゃないかと思う。

(13)さらに気がかりなこと。実はApple側から8bitで通信が出来ていない。PCのTeraTermからAppleに8bitで文字を送り込むときちんと表示される。しかし,Apple側からTeraTermへは文字化けする。TeraTermを7bitにすると正しく表示されるので,Apple側が7bitで送信しているのは間違いない。
 波形をみると確かに7bit。8bitに設定しても7bitに設定しても波形に変化がない。SuperSerialCardのROMのソースが公開されているので解析をしてもいいのだが,すでにこの段階でもう力尽きつつある。

(14)ADTProでは,SuperSerialCardに搭載されたROMは使わない。SuperSerialCardの回路がややこしいのは実はROMのサポートのためなので,ROMを抜いてしまえばW65C51をそのままバスにぶら下げただけ。これで配線ミスの可能性はぐっと減るはずだが,やっぱりADTProでは動作してくれない。

(15)ADTProのクライアント側から出てくるコマンドやデータをPCのサーバー側でログを取ると,どうも正しいコマンドがクライアントから送られていない事がわかった。データの送信はW65C51のレジスタに書き込んで送信するだけなので,ここに至って万策尽きた。


 確かに,W65C51への書き込みタイミングがあやしくて,連続のアクセスで上手く書き込めていないのかも知れませんし,そういうタイミングの検証は真面目にやってはいません。だけど,1.3では115200bpsでBoot出来ているので,ちょっと違うかなと思っています。

 試せていないことは4つ。1つはシリアルポートが内蔵されたPCで試すこと。なかにはUSB-シリアルではどうにも解決せず,内蔵のシリアルポートでようやく動いたという先人もいらっしゃるようです。

 もう1つは,別のApple2で試すこと。特にAppleIIeと自作のSuperSerialCardの組み合わせです。実は,ADTProでの動作例はほとんどがAppleIIeで,Plusで動かしてる人って少ないのです。

 3つめは,W65C51を交換すること。交換と言っても,昔のNMOSの6551にです。チップの差分による差を確かめてみたいものです。

 最後は,純正のSuperSerialCardを入手すること。これで動いてしまえば自作に失敗した事になりますし,動かないようなら自作の意味が最初からなかったことになるので,どっちに転んでも負けです。

 

 そもそも,PlusではProDOSがそのままでは動きません。16KBのRAMを増設してようやく動き出しますので,そこまでしてPlusでADTProを試す人がいるのかと,そういう話です。一応ADTProの対象機種にPlusは含まれていますが,もしかするともともと動かないものであった可能性もありますし,いわゆる相性の問題があったりするのかも知れません。AppleIIeと自作SuperSerialCardで試せれば一歩進めるんですがねぇ。

とまあ,考えつく限りのことを1ヶ月近くもかけてやってみましたが解決に至りませんでした。残念ながら敗北です。

 一応,シリアルポートとしては機能しているので,無駄にはならないと思います。しかし具体的な使い道もないので,複雑な気分です。

 さて,このままでは最初の目的であったディスクイメージとフロッピーディスクを行き来すること,すなわちADTProを動かす事が出来ずに足踏みです。残念ですがSuperSerialCardにこだわっていても時間ばかりが過ぎてしまうので,違う方法を考えることにします。

 そう,イーサーネットです。続きは次回。

 

手作りSuper Serial Card

 AppleIIの最後の壁,巷にあふれるディスクイメージを実機で動かし,半永久的にAppleIIを動かし続けるという作戦は,簡単そうに見えて,なかなか高い壁です。

 この話の世界標準はADTProというツールです。PCやMacでJavaで書かれたこのツールを立ち上げておき,AppleIIでクライアントソフトを動かしてやると,PCに置かれたフォルダがAppleIIで一覧でき,読み書きが出来るようになるのです。

 長い歴史のあるツールなので様々な機能が実装されていますが,通信手段にも標準的なシリアル通信以外に,イーサーネットやカセットI/Fを使った音声にも対応する充実ぶりです。

 イーサーネットが高速で便利であることは言うまでもありませんが,AppleIIGSはともかく,AppleIIplusの時代にそんなものは一般的ではなく,おそらくApple純正の拡張カードなど存在しないでしょう。私もこれはパス。

 音声でもどうにかなるんじゃないかと試みましたが,我慢できないくらい遅いこと,エラーも起きやすいこと,そもそも音声での通信はProDOSでないとサポートしないことがあり,私が少し前に16kB拡張RAMカードを作ったのは,これが動機だったくらいでした。

 せっかくProDOSが動き,ADTProを音声で繋げることが出来たのに,遅くて使い物にならず,がっかりしたものです。

 その後,あるサイトで高速で安定した独自イメージをWAVファイルで配布されているのを発見し,こちらでしばらく遊んでいました。これ,2分ほどで140kBのイメージを転送でき,PCにもAppleIIにも特別なソフトがいりません。PCからはオーディオプレイヤーがあればよく,AppleIIでもBASICからLOADとやるだけです。

 ただ,この形式で配布されているものはまだまだ少ないですし,自分のディスクをこの形式で保存する方法がわかりません。

 ということで,結局ADTProを動かす必要からは逃れられませんでした。

 ADTProを使うために必要なものとして,シリアルインターフェースがあります。AppleIIcやAppleIIGSならなにも問題のないこのインターフェースですが,AppleIIplusやAPpleIIeには非搭載ですので,なんらかの手段でインターフェースを追加しないといけません。

 ADTProがサポートするインターフェースにはいくつかあるようなのですが,一般的なのは純正のSuper Serial Cardです。

 SSCと略されるこのカードは,最初期に登場したシフトレジスタだけで構成された単純なSerial Cardの後継で,6502ファミリのACIAである6551を中心に据えた多機能なものです。

 とにかくこれがないと始まらないわけですが,皆同じ事を考えているようで,SSCは値段が高めで推移しているようです。なにせ40年前の製品で現在は作られていませんから,中古で探すしかないわけですが,日本でも安くて5000円から,海外ではもう少し高いくらいの値段で取引されているようです。

 つい先日,そのSSCが安く手に入る機会があったのですが,うっかり買い逃してしまいました。ちょっと訳ありでしたが4000円ほどで買えたはずだったので,悔しい想いをしました。

 よろしい,ならば自作するまで。SSCは回路図も公開されているので,部品さえ揃えば自作可能です。ぱっと回路図を見ると結構複雑で,正直なところ失敗するかもしれません。

 まずは部品入手が現実的かどうかです。

 6551ACIAは,なんと通販で新品が買えます。先日手に入れたW65C02と一緒に,W65C51も買ってありました。お値段は1000円ほど。CMOSですし,互換性が心配ですがデータシートを見る限り問題はなさそうです。

 次,水晶発振子。6551は1.8432MHzの水晶発振子を直接繋ぐために,発振器と分周器を内蔵しています。ボーレートジェネレータって結構面倒くさいのですが,6551は良く出来ています。

 ですが,水晶発振子の周波数を決め打ちしているため,この周波数が手に入らないと手詰まりになります。幸いにしてW65C51のお店で7.3728MHzの発振子が安く買えました。これを1/4にして1.8432MHzを突っ込むことにします。

 次はROMです。SSCにはファームウェアが用意されていて,BASICやPASCALから叩けるようになっていますし,ターミナルモードへは特別なソフトなしに遷移出来ます。いわばBIOSのようなものですので,これは必須でしょう。

 容量は2kBと小さく,回路図でも32kBitを使っていますが,こんなものは入手出来ても書き込みが出来ません。ここは2764を使うことにします。え,中身はどうするの。ですか?中身はですね,一応マニュアルに公開されているのでそのまま使っていいという理解です。

 あとTTLです。一般的なものばかりと思って油断していたら,1つ見慣れない品番を発見しました。74LS279です。これ,RSフリップフロップです。RSフリップフロップってそういえばTTLにはないよなあと思ったのですが,こんなもの必要な場合はNANDゲート2つで作ってしまうようなものですし,需要も少ないのでしょう。

 さすがにこれは手持ちがありません。どこでも買えるものでもなさそうです。
ならば,ここは74HC00で作ることにしましょう。SSCの回路図でも,FFとして使っているのは4つのうち1つだけで,後はNANDやNOTの代用として無駄遣いしています。

 それからLS365とDIP-SWですか。LS365でDPI-SWを読み取る仕組みのようですが,6551に繋がっていませんので,6551の設定は完全にソフトでやっているはずです。ならばなんでDPI-SWがいるのかと思いますが,1つには過去のインターフェースとの互換性切り替えや,プリンタI/Fとして使う場合などの初期設定が必要なのでしょう。

 ADTProでは必要ないのですが,実物を見たことすらない初心者が意味も知らないで削除すると痛い目に遭いますので,ここは素直に残しておきます。

 あとはあれですね,RS-232Cのレベルコンバータです。これは入手は難しくありませんが,今さら3電源の1488/1489を使うのもなんですし,MAX232シリーズを使います。

 今回はTx/RxとRTC/CTSだけではなく,DTR/DSRやDCDも必要なので,送受信4つずつを持つMAX238を使います。都合良くこんなものが手持ちにあるのです。

 最後に基板。これが一番難しいかも知れません。50ピンのカードエッジコネクタ付きの万能基板ですが,以前16kB拡張RAMで使ったMSX用のユニバーサル基板では面積が足りない感じです。それにもう使い切ってしまいましたし。

 探してみましたがなかなか高価で,どれも決め手に欠けます。ならばと,実験用に買ってあったカードエッジコネクタだけの小さい基板を,大きめの万能基板に取り付けて使うことにしましょう。不細工ですし,厚みも出ますが背に腹は代えられません。

 基板は以前八潮の秋月で安く買った両面スルーホールの万能基板をカットして使います。ピンヘッダで結合すれば,AppleII用ユニバーサル基板を完成です。

 部品はなんとかなりそうです。次は回路図です。

 オリジナルの回路図をそのまま作るのも手ですが,今回は部品の変更もありますし,動かい場合のデバッグのことを考えて,ちゃんと回路図を理解しましょう。

 構成は簡単です。6551とDIP-SWのレジスタをI/Oに割り当て2kBのROMをメモリ空間にマッピングしてあります。あとはクロックを作って6551に突っ込み,6551からドライバを経てRS-232Cとして出してやれば完成です。

 I/OへのデコードはAppleIIらしく簡単で,6551へはDEVSELの反転,レジスタへはDEVSELとA3のORを取るだけでおしまいです。6551へはA0,A1,A2,A3も別の端子に突っ込みますので,例えばスロット2なら$C0A8から$C0ABまでの4バイトが割り当てられます。

 問題はROMです。これ,私は理解するのにちょっと手間がかかりました。

 まず,AppleIIでは,0を除くスロットに,256バイトのROM空間を割り当てていて,各スロットのI/OSELECTをイネーブル信号に使えます。例えばスロット2なら$C200から$C20Fまでの256バイトを占有できるのです。

 天才WozのフロッピーI/Fのように256バイトで済んでいる場合もありますが,ちょっと気の利いたことをやろうとすると256バイトでは足りません。でも,そのためにわざわざデバイスドライバをロードするのも面倒だという事で,やはり天才Wozは拡張スロットに大きなメモリ空間を割り当ててくれています。

 その大きさは2kバイト。256バイトに比べると8倍という広大さです。全部で64kバイトしかない6502のメモリ空間において,2kバイトとは破格の割り当てです。これを7スロット用意すると14kBとなり,しかもほとんど使用されない場合もあるわけで,この無駄をなんとかしないとWozは考えてくれました。

 まず最初に,この2kバイトはすべてのスロットで共有としました。これなら使わない場合でも2kバイトの無駄で済みます。しかし,2kバイトを分割して使うと最悪の場合1スロットあたり256バイトになってしまい,メモリが足りないという問題はなにも解決しません。

 ならば,と必要とするスロットに全部割り当てることを考えるのですが,それだと同時に差し込む事の出来る拡張カードの組み合わせが発生してしまいます。当然同時使用出来ません。

 そこでWozの天才っぷりっが発動します。まず,2KバイトのROMを$C800から$CFFFまでに割り当て,このアドレスをデコード信号としてI/OSTROBEを各スロットに用意しておきます。

 各スロットに割り当てられた256バイトのROMにアクセスすると,そのスロットのカードにあるフリップフロップがセットされます。

 このフリップフロップの出力とI/OSTROBEでそのカード上にあるROMをイネーブルしてやれば,$C800からの2kバイトに自分のROMがマッピングされます。

 こうして2Kバイトを占有できるわけですが,あいにく他が使っていたらどうしましょうか。大丈夫,256バイトの割り当てROMの先頭に,すべてのスロットにあるフリップフロップをリセットするコードを入れておくのです。

 リセットは$CFFFをアクセスすると行われるように回路を作っておきます。こうすると,自分が占有した場合でもリセットされますが,リセット直後に続けて自分のROMでコード実行すればフリップフロップはセットされ,2Kバイトのメモリが見えるようになります。

 だから,自分が使い終わった時に,そのエリアを自分で開放するということはしなくてもよいのです。

 え,自分が使っている最中に他からフリップフロップをリセットされたらどうするの,ですか?

 ご心配なく,それはありません。一種のバンク切り替えですのでこうした心配が出てくるのももっともなのですが,国産マシンに良くあるバンク切り替えはソフトだけで制御されている場合が多く,この場合ソフトがバンク切り替えをしないと,あるべきデータがそのアドレスにない,と言うことが起きてしまい,暴走します。

 しかしAppleIIの場合,このバンク切り替えは,CPUがそのスロットに専用に割り当てたROMをアクセスした時に自動的に切り替わります。リセットは別のスロットのROMがアクセスされたときに起きるわけですから,もう自分がこのエリアをアクセスすることは終わっています。

 確かにバスマスタが2つ同時に動くという特殊なシステムを作り,同時にアクセス出来るような仕組みがあったら破綻するでしょうが,AppleIIは40年前の8ビットマシンであり,そんな手の込んだ仕組みは用意されていません。

 欠点がないわけではなく,たかだた2kバイトのメモリを持つだけでフリップフロップを用意しないといけないことであるとか,アクセスの手順を守る必要があるのですが,少なくとも不手際の影響が本体や他のスロットのメモリアクセスを邪魔しないような仕組みになっていますので,いつまで経ってもエリアを開放しないといったずるいことは,出来なくなっています。

 いや,言ってみれば簡単な仕組みですが,これを1977年にやってしまうというあたり,すごいとしかいいようがありません。各スロットに僅かなサイズのROMを割り当てることと,スロット共通の大きなROMエリアを切り替えて使うこと,それを破綻なくまとめ上げて,拡張カードを差し込むだけでデバイスドライバも同時に用意され,すぐに動かせるようになるなんて,Wozの拡張性に対するこだわりが見えてきます。

 この機能は後にプラグアンドプレイと呼ばれるのですが,1981年に登場したIBM-PCではもちろん実現されておらず,1980年代後半のPCIやMCAでようやく盛り込まれましたし,我々が普通に扱えるようになるのは1990年代のWindows95からですので,その先進性には頭が上がりません。

 さて,回路図を見直して見ると,この通りの回路が実装されていることがわかります。ややこしく見えたアドレスデコーダも,こうしてみれば簡単です。

 ただ,1つ注意点があります。これはSSCのマニュアルにも記載があるのですが,スロットごとに割り当てられた256バイトのROMと,2kバイトの共通ROMはアドレスが非連続で,本来なら2つ搭載しないといけないのです。

 そこで,SSCでは1つにまとめるために,スロットごとに割り当てられた256バイトのROMのアドレスをリマッピングして,ROMの0x0700から0x07ffまでに書き込んでいます。

 ですので,スロット2の場合なら,$C200へのアクセスがあったとき,ROMの0x0700が出てくるように回路が組まれています。

 え,0x0700なんかに書き込めるの?ですか。はい,思い出して欲しいのですが,$CFFFにはフリップフロップをリセットするスイッチが割り当てられていますよね。だからどうやっても$CFFFは使えません。

 それに,$CFFFのデコードをするのにA0からA7すべてをフルデコードするのも大変なので,多くのケースでA0からA7はデコードせず,よって$CF00から$CFFFまでが使えないわけです。

 このあいたエリアにデータを書き込んでおき,$C200をアクセスした時に見えるようにしておけば,ROMを1つにまとめる事ができますよね。

 このあたりの仕組みを,SSCの回路はORゲートを3つで構成しています。わかってしまえば簡単な仕組みです。

 とまあ,出来るだけ回路を簡素化することも考えたのですが,出来そうな事といえばバスバッファのLS245を省略することくらいで,あとは結構しっかり最適化されてることがわかってきました。よく考えてあるなあと。

 LS245を省略すると,LS245のイネーブル信号を作る回路が不要になりますが,全体としては1チップ少なくなるくらいです。私の場合水晶発振器に74HCU04が1ゲート,そこに分周器のHC393が1つなので,むしろ増えるくらいなのです。

 さすがに1ゲートのためにアンバッファのHCU04をあてがうのはもったいないので,ここは手持ちの1ゲートロジックNC7SU04を使うのですが,HC393だけはどうにもなりません。この段階では秋月でも安価に手に入る分周器付き発振器(発振器付き分周器でもいいんですが)のNJU6319AEがあれば一発解決なんですけど,この段階では知らなかったので,後で気が付いて悔しい想いをしました。

 フリップフロップですが,LS279が手に入りません。前述のようにHC00で作るのは難しくないですし,LS279の4つのフリップフロップのうち,3つはNANDやインバータとして使っていますので,問題はないです。

 そうそう,HC365とDPI-SWです。オリジナルでは7ビットのDIP-SWを使っていますが,手持ちの関係で6ビットのものを使うことにします。足りない分は別にCPUが読めなくてもよいものだったりするので,問題はないでしょう。

 最後に,ドライバから後ろの話です。オリジナルはショートピンが固まったショートブロックで,ストレートとクロスを切り替えるように作ってあります。また,10ピンのコネクタの先はDsub25ピンですが,私は手持ちの関係で9ピンのメスを使い,その代わりストレートとクロスはスイッチで切り替えられるようにしました。

 ただ,クロスではそれだけではだめで,RTS/CTSとDSR/DTRをLowにするショートピンやDCDをLowにするショートピンも追加が必要になってしまいました。


 回路の動きはわかりました。部品集めも終わりました。ROMも焼きました。(ちょうどaitendoでTL866II-PLUSを手に入れたので,早速使いました。)


 では,早速製作です。今どきユニバーサル基板とポリウレタン線でちまちまと配線する人なんているんかいな,と思うのですが,ブレッドボードで出来るような回路規模ではないですし,基板を起こすのは興味がありつつも,それなりに費用がかかってしまうことを考えると,結局この方法が一番という事になりました。

 私は単純労働が好きなので,頭を真っ白にして配線できてむしろ楽しいくらいです。真っ白になりすぎて配線ミスをするのはいつのも事ですが,今回は特にひどかったです。

 まず,RS-232Cドライバの配線ミス。VCCとGNDを逆に繋いだまま長時間通電したので,チャージポンプが壊れてしまいました。交換用のMAX238を持っていなかったので,MAX232相当品を2つ使うことに回路を変更する羽目に。しかし,16ピンのDIP2つがのる面積は残されておらず,やむなく秋月で買ってあった特価品の面実装品のSP203Eを2つ使うことにしました。ただでさえ混乱気味のドライバ周りが,ますますややこしくなってしまいました。

 あとはレジスタです。オリジナルの回路図を確認せず,D0からD5までを順番に配線したのですが,実はデータ線へのマッピングは順番通りではなく,後になってからDIP-SWの設定がおかしくなるという問題に悩まされました。

 他にも2つ使ったHC00を取り違えたり,レイアウトがまずくて配線が長くなったり,VCCとGNDを間違えたりと,まあ今回は本当にひどかったです。

 さて,ある程度出来たところで確認をしてみましょう。まず,ACIAとROMにアクセス出来るかを確かめます。スロット2に差し込み電源ON。起動すれば一安心です。

 このあと,IN#2と打ち込み,CTRL-AとすればAPPLE SSCというプロンプトが出てくるはず。しかし出てきません。ハングアップです。ROMがダメ,あるいはフリップフロップを含むデコードでコケている可能性があります。

 そこでモニタから$C800をリードしてみると,ちゃんと読めています。$C200も問題なし。$CFFFアクセスで$C800が読めなくなり,$C200アクセス後に$C800が読めることも確認出来ました。よし。

 6551も読み書き出来ます。レジスタは変な値が読めている(これはあとで配線ミスと判明)のですが,とりあえず衝突などはなさそうです。

 おかしい,これで動かないというのはどういうことだ・・・

 DIP-SWをいじっているうちに,プロンプトが出るようになりました。設定で変わるようです。これでROMとACIAは動いているようです。

 続いてドライバですが,これはチャージポンプを壊してしまったのでなかなか動いてくれませんでした。やむを得ずドライバの前でループバックテストをするのですが,それもなかなか動きません。DCDをLowにすると動くようになったのですが,シリアル通信はTxとRx,あとはせいぜいRTSとCTSをケアすればそれで済む場合が多いので,まさかDCDが問題とは思いませんでした。昔の方々は真面目だったという事でしょう。

 ドライバを交換し,ループバックテストを通し,いよいよPCのシリアルケーブルと繋いでテストですが,これもなかなか動きません。

 ボーレートがなかなかあわないうえに,文字化けしまくりです。結局レジスタの配線ミスを修正して解決したことと,実は7bitだと文字化けしないことがわかって,一応解決としました。いや,配線ミスのせいでボーレートを設定するビットが宙に浮いてしまっており,立ち上げる度にボーレートが変わるという現象に悩まされていたので,気が付いて正解でした。

 ということで,一応手作りSuper Serial Cardは完成です。いやー今回は苦労しました。配線も汚く,ドライバ周りは未だにすっきり理解出来た気がしないのですが,とりあえず通信が出来ており,期待通りに動作しているので良しとしましょう。

 ちなみに,かかった費用はコネクタとW65C51で1500円くらい,あとは基本的に手持ちの部品ばかりなので,合計で2000円ほどでしょう。SSCが最近高価になっていることを考えると,十分ペイする金額だと思います。

 ここまでくれば,最終目標であるADTProもすんなり動くはず・・・なのですが,全然ダメなのです。思いつくことは試しました。でも思うように動きません。複数の原因が考えられるので1つ1つ潰していくしかないのですが,まだ動かせていません。

 せっかくここまできたのです。もう一踏ん張りです。

 

AppleIIのCPUをW65C02に換装

20220620160618.JPG

 AppleIIを触っているのは,とても楽しいです。特にすることがなくても,特にトラブルが起きていなくても,とりあえず電源を入れて動いていることを確認することすら,楽しいです。

 そうなると,このAppleIIが壊れてしまうことがなにより恐ろしいわけですが,私の場合,修理をするだけの根気と知識はありますので,部品が手に入らないことが一番困った事になるわけです。

 それでもAppleIIはTTLで構成されているので,最悪今でも手に入る74HCシリーズで代用が可能でしょう。ROMは今でも入手可能なEPROMで代用も出来そうです。

 怖いのはCPUで,実は6502って,CPU単体ではなかなかお目にかかれません。というのも,オリジナルのMOS TECHNOLOGYは早々にCommodorに買収され,今は消滅していますし,セカンドソースはRockwellとかSynertekとか,ちょっとマイナーな所ばかりが手がけていました。

 数をばらまくのが得意な日本のメーカーでは,リコーや三菱が知られていましたが,これらは6502単品と言うよりもカスタムICのコアとしてや,ワンチップマイコンとして互換性のない形で作られていました。

 そんなわけで,随分早くに製造が打ち切られていますし,流通在庫も少ないですから,NMOSの6502というのはなかなか入手が難しいのです。

 先日,その6502を触ってみると,やけどしそうなくらいに熱くなっていることに不安を覚えました。まあ,バイポーラやNMOSの時代のCPUなんてのはこのくらいの発熱は当たり前だった(いや,CMOSでも現在のCPUは空冷が必要なくらい発熱するわけですが)ので気にしなければいいのですが,熱はトラブルの原因だけに,壊れた時のために予備が欲しいなと思うのは,自然な事でしょう。

 実のところ,かつて実家にはAppleIIのコンパチボードがあって,部品取りにしてあったのですが,実家の片付けに伴い処分してしまったのです。ここに6502やNE558などのICも乗っかっていたので,惜しいことをしたと悔やんでいます。

 悔やんでいても仕方がありません。

 AppleIIには世界中にユーザーがいます。きっと彼らがなんとかしているに違いない,そう思って調べてみると,やはりなんとかなりそうな情報が手に入りました。

 まず,6502ですが,CMOS版の65C02なら,現在も新品が手に入ります。

 WesternDesignCenterというメーカーから,W65C02という品名で売られていて,全世界で購入可能です。ついでにいうとACIAやPIAも手に入るからすごいです。お値段も良心的な,日本円で八百円から1000円ほどです。

 問題は65C02に差し替えることが出来るのかどうかです。まず,後期のAppleIIeやAppleIIcは65C02ですので,ソフト互換はあるでしょう。となると電気的もしくは物理的な互換性です。

 調べてみると,WDC自らが,AppleIIで使う方法を正式なドキュメントにまとめていました。半導体のメーカーが,アプリケーションノートとして,趣味のコンピュータのために置き換え方法を検証して公開するというのは,なかなか粋なことをするものです。

 このドキュメントによると,パッケージもピン配置も互換性があるということ,ただし一部のピンの非互換なものがあるので修正せよ,とあります。

 具体的には,まず1ピンです。6502ではここはVSS(GND)となっていますが,W65C02ではVPBという出力信号になっています。このまま繋いでしまうと壊れてしまうので,ここを浮かせて取り付けます。

 次に36ピンです。6502ではNCですが,W65C02ではBEという入力端子になっています。このBEという端子ですが,Lowにするとバスがハイインピーダンスになるので,Highにしなければなりません。

 最後に5ピンです。オリジナルはNCですが,W65C02はMLBという出力端子になっています。ゆえに浮かせなければなりません。

 一応,これで動くようになるんだそうですが,ドキュメントにはAppleIIeでは検証済み,AppleIでは未検証だ,とかいてあります。AppleIで未検証って・・・

 さて,実際の作業ですが,まさかappleIIの基板を改造するわけにはいきませんので,変換ソケットを作りましょう。先日デジットのジャンクで買った40ピンの激安丸ピンソケットが役に立ちます。

 まず,20ピンのヘッダピンを2列用意して,1ピンと5ピンと36ピンの片側のピンを切ってしまいます。そしてソケットのピンとハンダ付けすれば,基板に改造も,W65C02のピンを曲げたり切ったりすることなく,ピンを浮かせることが出来ました。

 そしてW65C02の36ピンをVDDに繋ぐため,8ピンと導線で繋ぎます。これで完成。

 W65C02をソケットに差し込み,AppleIIの基板の6502を抜き取って,代わりにこの変換ソケットを差し込んでみます。

 電源を入れてみると,ピピピとおかしな音がしたかと思ったら,画面がぐちゃぐちゃです。起動していません。失敗です。

 配線間違いをしたかなと確認しましたが,間違いはなし。何時間か悩んだのですが動いてくれません。google先生に聞いてみても,頼もしいはずの世界中のマニアも,AppleIIeでは試していても,私のようなAppleIIやAppleIIplusでの動作報告をしてくれていません。

 うーん,そもそもAppleIIplusではダメなのか?

 AppleIIとAppleIIeの回路図を比べて見ましたが,CPUの周辺で問題になるような特に差はありません。ますますおかしいです。

 こういう時は,波形を見るのが解決の早道です。

 まず,目星を付けていたクロックを確認。

 20220620160620.PNG

 むむ,これはやばそうです。

 実は,NMOSの6502では,2.4V以上ならHighと認識してくれますが,W65C02ではなんと3.5V以上でないとHighと認識してくれません。CMOSなら当たり前のことなのですが,実はこの点において電気的な互換性が難しくなっていたのです。

 波形の黄色い線は3.5Vのラインです。ここから上しかHighとして認識されないのですが,この波形ではちょうど3.5Vあたりで立ち上がってくるという,嫌な感じになっています。

 いや,結局5Vまでスイングさせれば関係ないでしょ,と思うなかれ。この時代の主流だったTTLというロジックICは,Highレベルを電源電圧ギリギリまd目一杯振ることが出来ず,3.5V位で頭打ちになることも多いのです。CMOS時代の今では考えられない制限ですよね。

 なので,この波形でもNMOSなら動くでしょうが,W65C02は動かないのです。

 こういう事例で有名なのは,Z80のクロックです。Z80はNMOSですので2.4V以上ならHighなのですが,クロックだけは4.4V以上でないとダメという,非常に厳しい条件が課せられていました。Z80ではよく知られたお話です。

 この時,対策として行われていたのが330Ωによるプルアップです。330Ωなんていう低い抵抗でプルアップしても大丈夫なんかと思いますが,TTL時代ならいいのです。

 ということで,早速37ピンのクロックの端子を330Ωでプルアップしてみます。

 20220620160619.PNG

 おー,綺麗な波形になりました。もちろんちゃんと動いています。ディスクアクセスも問題ありませんし,丸一日動かしてもコケません。

 ちなみに,データバズも不安だったのですが,こちらはなんとか3.5V以上を確保出来ています。面倒ですし,副作用も怖いですから,これはこのままでいきます。


 ということで,W65C02はAppleIIplusでも動きます。AppleIIeでの動作報告が多いのは,どうもクロックを供給するICがCPUの近くにあり,波形のなまりが少ないせいではないかと思います。AppleIIplusでは,CPUから結構遠いところにクロックのICがいて,そのせいで波形がなまっているんじゃないかと思います。

 ということで,W65C02でAppleIIplusが動いた数少ない事例になりました。

 とまあ,書いてしまえば簡単なのですが,実は途中でキーボードが動かなくなったりして,CPUのせいかと焦ったりしていました。調べてみるとキーボードとマザーボードを繋ぐフラットケーブルの不良があったり,キーボードとエンコーダー基板を継ぐコネクタに接触不良があったりして,なかなかすんなり動いてくれなかったのです。

 最終的にはそれらもすべて解決して,今の私のAppleIIplusは完調です。いやー,気分がよいものです。

 さて,交換したW65C02ですが,さすがCMOSだけあって,ちっとも熱くなりません。これだけ電気を食わないなら,他の部品,特にRAMとROMをCMOSにするだけで随分消費電力が減るんじゃないかと思いますが,ホカホカするのもオリジナルならではの趣ですし,これはそのままにしておきましょう。

 CPUは,壊れてしまうのが怖いですから,当面W65C02でいきましょう。出来ればもう1つくらい予備があると安心です。

 

M5jrにメガROMを

 昨年9月に,M5jrのメンテを行ったのですが,この時の宿題として,BASIC-Fを起動することと,複数のゲームを1つのROMに入れてしまうことがありました。

 この時はBASIC-G(これが今貴重である事に驚いているわけですが)のカートリッジを改造して実現しようとしたのですが,BASIC-Gのカートリッジでは取り出すことの出来ない,EXMという信号が必要になったためあきらめたのでした。

 ところが,少し前からM5のカセットテープのゲーム類をイメージ化してエミュレータで遊んでいるうちに,やっぱり実機で遊ばないとなと思うようになり,一念発起して宿題を片付けることにしました。

 そうするとM5に使えるユニバーサル基板が必要になるんですが,ここで閃いたのは,AppleIIやPC-6001のユニバーサル基板が欲しいと思った時に買っておいたMSXのユニバーサル基板が1つ余っていたことでした。

 これを使えばなんとかなると早速回路図を書いて,部品集めを始めたのです。特別な事はなにもせず,0x2000から0x6fffまでをROMに,0x8000から0xffffまでRAMにするだけのものです。

 RAMはA15を反転させてCSにすれば終わりです。これは実績がある回路なので心配なしですが,問題はROMです。

 BASIC-FとBASIC-I,これに8kBのゲームを4本詰め込んで,512kBitの27512にまとめる計画を立てました。

 0x2000から0x3fffまでの8kBがROM1,0x4000から0x5fffまでの8kBがROM2,0x6000から0x6fffまでの4kBがEXMという信号でそれぞれデコードされているのですが,これをAND(負論理のOR)で束ねてやれば,ROM用のCSは出来るはずです。2ゲート入りのTC7W08も手元にありますし,余裕余裕。

 バイナリエディタでROMのイメージを作り,ライタで書き込むのですが,どうもベリファイでエラーが出ます。この時期のEPROMは,メーカーが違っていると微妙に書き込み電圧が違っていたり,書き込みのシーケンスが違っていたりするのでちゃんと書けないという事が起きます。検証を含めて多種多様なEPROMに対応したROMライタが,それだけで立派な開発機器として販売出来た時代ですね。

 エラーになったのはAMDのものだったのですが,あいにく27512はAMDも富士通もエラーになり,これ以外の手持ちがないので諦めました。そこで,1Mbitの27010を使うことにしました。

 1MbitのEPROMなんて使った事がありませんので,書けるのかどうなのかわかりませんし,端子も32ピンになるので回路も書き直しです。しかし上手くいけばさらに8本もゲームを増やせます。

 手持ちを調べると,インテルの27010が3つほどありました。ROMライタも対応済みという事で試してみると,ちゃんとベリファイも通ります。早速イメージを作って書き込みます。

 さあ,回路図も書いたしROMも準備出来た。

 で,MSXのユニバーサル基板を実機に突っ込んで確認をしたところ,端子の数が違う事にようやく気が付きました。MSXは50ピン,しかしM5は58ピンなんですね。知りませんでした。

 56ピンのユニバーサル基板なんて見た事ありません。ファミコン用の60ピンの基板を買ってきて,削って56ピンにすることを考えましたが,買うのも面倒くさいです。

 改めてM5のピン配列を眺めてみると,A面とB面の1,2,3ピンは,-12Vと+12Vという使う事がない端子であることがわかりました。なら,反対側に寄せて差し込んで,この6つの端子は未接続で使えばいいんじゃないかと閃いて,そういう差し込み方が出来るかどうかを試したところ,問題なさそうであることがわかりました。

 あとはもうゴリゴリと配線です。アドレスのセレクタには,先日デジットの特価品から購入した小型のスイッチを早速使います。4時間ほどの作業で配線が終わりました。配線の確認後ワクワクしながらROMを差し込んで電源ONです。

 ・・・動きません。配線ミスがあったのでそれを修正しますが,BASIC-Iは起動するもののBASIC-Fが起動しません。ゲームも12本も入れたのに4本ほどしか動いてくれません。どうも,A13の処理がまずいような感じです。

 ROMのA13は,BASIC-Fのためにバスに繋ぐ場合と,Highにしてバンクを選択する場合とをスイッチで切り替える仕組みにしたのですが,ここがどうも機能していないみたいです。配線間違いも回路のミスも見直したのですが,動いてくれません。

 タイミングの問題かと思いCSを少し遅らせたり,どっかショートして信号がぶつかっていたりとか,真面目に調べてもみましたが解決しません。どうしたものか・・・

 しかし,心のどこかで,もやっとした不安はありました。本当にこれでROMがきちんとアクセス出来るのだろうかと。確かにデコード済みの信号としてROM1やROM2,EXMが出ているのは事実ですが,それがどんな信号なのかは,内蔵のゲートアレイの中身が不明なのでわかりません。

 わからないついでに,盲目的に「0x2000から0x3fffならROM1ね」と深く考えもせずに使うことにしたわけですが,本当にそんなに簡単なものかという疑いは,深く考えていないときに働く第六感のようなものです。

 ただ,BASIC-Fのカートリッジを解析した回路図が出回っており,これを見るとなにも特別な事をせず,27128で16kB,2732で4kBを実装していました。27128にはROM1とROM2のANDをCSに突っ込んでありますし,2732にはEXMを突っ込んでありました。

 うーん,面倒くさがらず,真面目に紙に書いて確かめて見ましょう。・・・なるほど,これでは動かないはずです。詳しく書く必要もないくらい恥ずかしいミスをしていました。

 M5のカートリッジのROMは0x2000から始まります。しかし,ROMは0x0000からバイナリが置かれています。なにも考えずにそのままアドレスバスを繋いでしまえば,M5が0x2000をアクセスすると,ROM上のバイナリは本来0x4000にあるべきものをデータとして出力してしまうのです。

 これは,2764を複数個使う場合には成り立つのですが,27128や27256など8kB以上のメモリを使う時には破綻してしまいます。ちゃんと0x2000分のオフセットを乗せないといけないのです。

 試しに,ROMの0x2000からBASIC-Fを書き込んだ27256を作って見ると,さくっとBASIC-Fが起動しました。わかってみればなんでもないことですが,思い込みというは厄介なものですねえ。

 まてよ,ならBASIC-Fのカートリッジはなぜ動いているのだ?

 これ,ちょっと考えればわかるのですが,ROMのバイナリの順番を入れ換えて書き込んで解決しているのだろうと思います。まず,0x2000から0x3fffまででアクセスされるバイナリは,ROMのアドレスも0x2000から0x3fffまでのエリアに配置します。このアリアはA13がHighになるエリアですので,これで正常にアクセス出来ます。

 問題は0x4000から0x5fffまででアクセスされるバイナリなのですが,ここはA13がLowになります。なのでROMの0x0000から0x1fffまでに配置するのです。こうするとA13がLowである0x4000から0x5fffまででROMの0x0000から0x1fffがアクセスされるようになります。

 0x0000から0x1fffまでがアクセスされたら破綻するんじゃないの?と思われるでしょうが,ここでROM2というデコード信号が0x4000から0x5fffでLowになることを思い出せば大丈夫であることに気が付きます。そう,このROM1やROM2といったデコード信号は,A13からA15が存在しない2764のための信号なのです。

 ということで,27128の場合は上下8kBを入れ換えるだけでシンプルに問題が解決します。かしこいなあ,M5の設計者は。和製AppleIIと呼ばれるだけあるなあ,うーん,味わい深い。

 前半の8kBにはBASIC-Iを書き込んで,後半の20KBにはBASIC-Fを書き込みます。残り4kBはダミーとして合計32kBとし,これを27256に書き込んでテストをしたところ,ROMのA13をバスに繋げばBASIC-Fが起動し,ROMのA13をGNDに繋げばBASIC-Iが起動するようになりました。(A14はバスにそのまま繋ぎます)

 ここまでくれば,あとは慎重に事を進めるまでです。ゲーム類は8kBごとにROM1のエリアにマッピングすればよいので,A13からA16をHighかLowにすれば8kBのエリアが16個選択出来ます。このうち最初のエリアはBASIC-Fという24kBのアクセスが必要ですから,A13とA14はバスに繋がなくてはいけません。

 A15とA16はZ80からアクセスされませんので,純粋にエリア選択だけで使いますから,HighとLowを切り替えるだけです。

 A13は前述の通りバスとLowの切り替えでいいのですが,A14はちょっと考えねばなりません。A14はBASIC-Fのためにバスに繋がっている場合と,エリア選択に使われる場合があります。

 しかし,M5は起動時ROM1を探しに行きます。つまりA14はLowです。ですのでBASIC-Fが格納された領域以外ではA14がLowになっている領域が選ばれます。今度はROMのA14をHighにすれば,次の8kBが選択されて表に出てきます。これでOKでしょう。

 ここまでくるのに少し時間がかかった(実はA13は当初バスとHighとLowの3ステートで回路を組んでいたが,実はA13は起動時にHighになるので,わざわざHighにする意味がないことに気が付いた・・・トホホ)のですが,BASIC-IとBASIC-Fに加えて12種類のゲームを1つにまとめたカートリッジが完成しました。

 20220602153650.JPG

 調べているうちに知ったのですが,海外にはすでにこれ以上のものを作って頒布しているマニアがいました。彼はPICマイコンで領域選択を行い,ROMの容量も4Mbitで,40種類近くのゲームを1つにまとめたものを作っていました。

 まあ,それはそれで大したもの(バージョンアップではPICマイコンの代わりにCPLDを使ってグルーロジックも取りこんでいました)なのですが,私はそこまでの熱意もわかず,これで綺麗にまとまったので終わりとしました。欲を言えばもう少したくさんのゲームを書き込んでおくのに,2MbitのROMにしたい所ですが,手持ちに27020がありませんので,深追いすることはしません。

 ということで,BASIC-Fを少し触ってみましたが,これはなかなか強力なBASICです。私はM5が過大評価されていると考えていて,それはBASIC-Gが整数型であることに由来します。

 確かにBASIC-Gはゲームを作るには最強のBASICだと思いますし,高速で動作することは文句の言いようもないのですが,いかんせん整数型のBASICではゲームしか作る事が出来ないBASICと言われても仕方がなく,ちょっと数学的なことをやろうとすればお手上げですし,扱える数字の範囲が狭すぎて桁数の大きなお金の計算には使えません。

 1980年代当時,BASICはゲームだけではなく,ビジネスにも使われるものであったわけで,同じようなホビーマシンであったMSXやPC-6001でもちゃんと実数が扱えたことを考えると,M5はそもそも汎用性が低いマシンであって,ゲーム以外には使い物にならない「おもちゃ」であると評されても仕方がないと思います。

 それが,安いとはいえMSXと同じ値段で売られていたわけですから,いくらゲームを作りやすいBASICだったとしても,評価はそこ止まりだというのが,私の結論です。

 ただし,これはあくまでベーマガで絶賛されていたBASIC-Gを搭載したM5について言えることであって,ソードほどのビジネスマシンを理解していたメーカーに手抜かりはなく,実数型のBASIC-Fと表計算ソフトのFALCまで用意していたことは,さすがです。

 BASIC-FはMSX以上の13桁の精度を持ち,しかも高速で動きました。FALCは今のエクセルの原始的なものであり,10種類ほどのコマンドを使えば様々な計算が可能なスプレッドシートで,実はこれだけでビジネスマシンに早変わりするほどの完成度を持っていました。

 弱点はBASIC-FがBASIC-Gの特徴的な命令群を持っていないことで,PLAY文さえないので音楽を演奏することも出来ないのです。

 だからもし,BASIC-FとBASIC-Gが統合され,速度そのままの実数型になったBASIC-Gが標準搭載されてRAMが32kBになって,もう少しましなキーボードが搭載されていれば,まさに最強のホビーマシンになっていたんじゃないかと思います。惜しいなあ。

 BASIC-Fからディスク関連のコードを抜けば16KBくらいになりそうですし,ここに8kBでグラフィックやスプライト,サウンド関連の命令を追加すれば,十分成り立つでしょう。ディスクは他のマシン同様にディスクBASICを用意してディスクから差分を読み出して起動すればよく,ホビーマシンの性格上それでも大丈夫だったように思います。

 M5はシンプルで綺麗なメモリマップを持っていますし,VDPを使うことでVRAMをメインメモリに置くことなく,ハイレゾグラフィックにスプライトやPCGまで使えます。そこにZ80CTCを搭載したことで可能になったモード2割り込み(ご丁寧にVDPからのV-SYNCの割り込みもCTC経由でモード2になっているらしい)や,なかなか強力なBIOSを持つ事もあり,本当によく出来たマシンだと感心します。

 ただ,繰り返しますがベーマガなどの雑誌での評価は8ビットマシンをゲームマシンとしてしか見ない人たちの過大評価に過ぎず,もっと多面的にマシンを評価するべきであり,その影響力を考えるとあまりに無責任だったのではないかと思われてなりません。

 実際,ゲーム以外にも使えるの実用マシンとしてのM5の評価は低いままで,ゲーム以外の雑誌で採り上げられることも少なかったように思います。マニアにウケたマシンだといいますが,I/Oに出てくる事が少なかったことからも,ゲームマニアに限定したものと考えるべきでしょう。

 さて,そんなM5は,日本では珍しい安価なホビーマシンでしたが,海外,特にイギリスではこの手のマシンが結構売られていました。ZX-81やSpectrumもそうですし,300万台を売ったと言われるAMSTRADのCPC464や,ORIC-1,有名なBBC Microというマシンもそうでした。VIC-20やC-64はアメリカ生まれですがヨーロッパでも人気がありました。

 そんなクラスのマシンの1つにM5があり,ヨーロッパではそれなりに知られた存在だったようです。その後日本は,ゲームはファミコンに,ホビーマシンはMSXからPC-9801に流れることになり,海外とは異なる流れを歩むことになっていくのです。

レトロ・コンピュータ・ピープル

 この3ヶ月ほど,レトロPCと戯れてきました。懐かしさもあるのですが,新しい事を知り「なるほど」と思う自然な感動もありましたし,過去の自分には突破できなかった課題が突破できたりと,過去を振り返ると言うよりも再会を果たしたと言う方が正しい様な気がしています。

 もちろん,そのためには修理や過去の雑誌などを見ることも必要なので,過去を振り返る作業が楽しめないといけないのですが,そこから先のもう一歩が,今の私には十分楽しめますし,また今の私に必要な事でもあるように思います。

 前置きはこれくらいにして,前回の更新からやっていたことを並べてみます。

(1)続・黄金の墓

 PC-6001のコレクションを整理していたところ,続・黄金の墓が出てきました。マジカル・ズゥのアドベンチャーゲームで,シナリオの面白さと同じくらい,グラフィックの出来が注目を集めていた当時にあって,高評価を得ていた有名な作品です。

 名前の通り,黄金の墓という作品の続編という体ではありますが,実のところディスク版の黄金の墓から途中まで抜き出したテープ版の同タイトルの続編という事になるので,実質的にはディスク版に収録されているものと同じだと聞きました。

 黄金の墓はプレイ済み,しかし続・黄金の墓は途中で挫折していたのですが,20年ほど前にエミュレータ用にイメージ化を試みるも読み出し不良で断念しており,唯一遊べていないタイトルとなっていました。

 ここは一念発起,いまならなんとかなるかも知れないと,最後の課題として頑張ってみました。

 続・黄金の墓は,全部で10個のプログラムに分かれています。最初の1つはローダーでBASICのフォーマット,続く2つはBASICではないバイナリのフォーマットで,この3つでオープニングが起動します。

 オープニングは勝手に進んで,本編をロードするのですが,最初に4つ目にあたる"main"というファイル名のBASICのフォーマット,次にバイナリを読み込んでゲームがスタートします。

 エラーが出るのはこの"main"というプログラムで,途中で音が途切れ途切れになってしまい,最後まで読み込むことが出来ません。前回のイメージ化ではここであきらめていたのでしょう。

 今回も半ばあきらめていたのですが,うちのPC-6001(初代)はどういうわけだか,明らかに音が消えているものでも読み込めてしまうという超能力が備わっており,もしかすると何度かやってるうちに読めてしまうかも知れません。

 試してみると,なんといきなりゲームがスタートするではありませんか。

 ゲームが始まるという事は,これはもうなんとかなるということです。やるしかありません。しかし,それは1ヶ月にも及ぶ長い戦いの始まりでした。

 まず,mainをなんとかイメージ化します。当時と違い,今はいろいろなツールがありますので,選択肢が増えていて助かりますが,このうちWAVファイルを解析した結果をその場でBASICのプログラムリストとして確認出来るツールがあり,これを試してみました。

 すると,案の定音が消えている部分はエラーになっています。

 もう一度実機で読み込み,その後すぐにCSAVEしてみます。これで修復できたのではないかと思っていたのですが,解析してみると一部不完全な部分があり,エラーが残っています。そりゃそうですよね。

 ということは,最初に試した時にすんなりゲームが動いたのは,やはりまぐれだったということでしょうか。

 本来,このプログラムはLISTを見る事が出来ないようになっています。しかし解析ツール上では見る事が出来るので,明らかに項分譲おかしい部分を修正してイメージ化します。

 以後に続くバイナリは確かめようがありませんので,出来るだけ信頼性の高い方法でイメージ化しておきます。

 エミュレータで動作確認をしますが,mainのあとのバイナリを読み込んだ直後に暴走します。はて,mainが悪いのか,その後のバイナリが悪いのか・・・

 イメージをWAVに変換し実機に読み込ませるも,やはり実機も暴走します。ロード時間が長いゲームなので1時間に数回しか試せません。効率が悪いです。

 ダンプを取ってバイナリを覗き込んだり,エミュレータでメモリやレジスタを見たりしていましたが,そもそもアドベンチャーゲームが簡単に解析できるわけもなく,万策が尽きたとあきらめモードに入り,中古品を探すようになっていました。

 実機へのロードや再取り込みを行っている途中に,取りこみ用用途に絶大な信頼を私が寄せるシャープのCZ-8RL1が突如誤動作,まだきちんと取り込みも検討も終わっていないテープの途中で書き込みがいきなり始まり,完全にダメになってしまうハプニングが発生し,これで完全に心が折れてしまいました。

 唯一の望みは,一番最初にざっとすべてを取りこんだwavファイルが残っていることです。しかしこれはその後の検討によって最適化された取り込みにはなっておらず,結構当てにならないです。それでもこれを使うしかありません。

 ここで改めてmainをイメージ化してプログラムリストを眺めてみると,PLAY$などという見慣れない構文が出ています。ここがおかしいのではないかと,プログラムを読み込んで周辺からそれらしい変数を推測し,修正したプログラムで試すと,一発でゲームが始まってくれるではありませんか!

 これはうれしい。ダメになったテープからサルベージに成功しました。奇跡です。

 しかし油断は大敵です。これで最後までクリア出来なければなりません。途中1つのバイナリがリードエラーを起こしていたので,これは波形整形を駆使して綺麗なバイナリにして突破,めでたくクリアに至ったのでした。

 とにかく,最終的に暴走してしまうわけですので,原因が特定出来ず,しかも1つとも限らない中での検討でしたから,考えられることはとにかくやってみて,原因を1つずつ減らして行くしかありません。

 そうした作業から,Audacityを使ってのフィルタリングや波形の整形などの編集作業や,解析/変換ツールの選び方など,たくさんのノウハウが手に入りました。が,それが結局メモや書類で残しておらず,すでにかなり忘れてしまっていることに愕然としています。趣味とは言え,これはいかんですね。


(2)オホーツクに消ゆの

 そういえば,オホーツクに消ゆ,イメージ化したものの最後までクリアすることはしていません。もちろん実機では当時クリアしているわけですが,万が一テープがダメになってしまった場合でも,イメージ化できていればどうにかなるという安心感が崩れてしまうのは,看過できません。

 ということで,攻略法を見ながら説いていくわけですが,シーン3で選択肢に強烈な文字化け発生。シーン3が正しくイメージ化できていないようです。そこでサイドイメージ化を行うのですが,あろうことかシーン3が起動することすらしなくなり,暴走します。

 波形整形などで解析結果のエラーがなくなるまで試行錯誤を繰り返しますが,何が悪いのか暴走します。ものは試しにとバイナリのダンプを比較し,1バイトを修正して見ると,これで文字化けも解消し,シーン3がめでたく終了出来るようになりました。

 これでよしとシーン4がロードされるのですが,ロードがうまくいかず,暴走したりTR Errorが出たりして先に進みません。ここでしばらくまた試行錯誤をしますが,全く改善されません。うーん,さくっと動作確認をして住ませる予定だったのに・・・

 調べてみると,エミュレータでシーン4が正常に起動しないことは,既知の問題でした。なんでも,SCREEN4での文字表示なので時間がかかり,実機ではローが始まるまでの時間がかかることで読み飛ばしはないが,エミュレータでは読み飛ばしてしまうので暴走するんだそうです。

 なら文字表示をやめるなりイメージの読み込みを待たせるなりすればいいと思う訳ですが,イメージを直接修正することが出来ないらしく,ロード直前のメモリをモニタモードで直接書き換えるしかないそうです。

 やってみると無事にクリア。良かったんだか悪かったんだか,なにや釈然としないテストプレイでした。


(3)PC-6001のテープをすべてイメージ化

 20年ほど前に行ったイメージ化では,とりあえず購入したテープを中心に処理したので,自分たちで打ち込んだプログラムなどはエミュレータで遊ぶことが出来ませんでした。

 今回はどんな小さなものもすべてイメージ化するというテーマで進め,考えつくものすべてをイメージ化できました。私の弟がですね,X1に乗り換える直前まで,PC-6001のPSGでゲーム音楽の打ち込みに精を出しており,途中の作品も残っていたりしました。本人は聞きたいだろうなあ。


(4)PC-6001再塗装

 私のPC-6001は改造されているため,筐体に穴が開いていたり,下手くそなスプレーでの再塗装で,見るも無惨な姿になっています。

 電気的な改造箇所はオリジナルに戻してあるのですが,見た目がこれではダメだろうと,修理用の予備機(こちらの方が程度が良かったりする)の筐体を流用して,綺麗なPC-6001を作る事にしました。

 とはいえ,予備機の筐体は練習も兼ねて10年ほど前に再塗装を行っています。この時は自分で混色をしたラッカー系の塗料を0.3mmのハンドピースで時間をかけて塗りました。ムラもなく色も綺麗で上手くいったのですが,クリアを塗らなかったこともあり,経年変化で塗膜が劣化し,しかもカビまで生えていました。

 このままでは先に進めないので,イソプロピルアルコールに漬け込んで塗装を剥がします。大きい筐体なので塗装はがしも一苦労,イソプロピルアルコールが大量にいるという事で,私は生まれて初めて一斗缶での購入を経験をしました。

 塗装は綺麗に剥がれたので,ペーパーをかけて傷を消して下処理を行い,ミッチャクロンを吹き付けておきます。

 その後ラッカー系の塗料で朝食をしますが,これが前回のように綺麗に決まりません。一度塗って見ましたが白すぎ,2回目は赤すぎで,どうもしっくりきません。

 しかも作った色が全然足りず,急ごしらえで作った色がずれているので,上半分と下半分で色が違ったりしています。

 のみならず,塗装そのものも上手くいかず,だれる,塗料のかたまりが飛ぶ,ホコリが付く,どっかにぶつけるなどで,もう散々でした。大量の塗料が文字通り霧散したわけで,私もたくさん吸い込みましたし,作業をしていた天井裏もひどい事になっています。

 これでは死んでしまう・・・そこで安全性の高い塗料を選ぶ事にしました。そう,アクリジョンです。

 乾くときに重合し塗膜を形成するので,乾くまでは水性ですが,乾いてからはラッカー系に匹敵する塗膜を作ります。しかもABSにも適用があります。

 依然使った時にも悪い印象がなかったので,早速いろいろ買い込んで,調色から始めます。どうせたくさんいると思うので,2ビンほど作っておきます。

 いざ塗って見ると,なかなか難しいです。ラッカー系と違って,硬化した塗料が融けることはないので,ハンドピースにつまります。また,気化の時間が変動するので,長時間にわたる塗装では,条件が変わって失敗しがちです。

 で,結局,およそ満足な出来とは言えず,重ね塗りをしすぎて厚ぼったく,かつ梨地になってしまったのですが,ぱっと見て違和感がない程度になったと言う最低限度のクリアで,この作業を終えることにしました。正直二度とやりたくないです。

 この後,クリアを重ねて塗って,最後にフッ素入りのスムースクリアーを塗って終了です。しかし先日ぶつけてしまい,角の部分の塗装が剥げてしまいました。

 どっちにしても,プラモデル用の塗料で実用品の塗装をしようというのですから,無理があります。PC-6001が観賞用になってしまったと言うべきなのか,割り切って使い倒すか・・・とりあえず私は,丁寧に箱にしまいました。


(5)AppleIIのフロッピードライブ

 一段落したPC-6001のあと,ちゃんと動くかなと電源を入れたAppleIIですが,ディスクドライブの異音が強烈になっていました。これはいかん,故障です。

 ひどいのは音だけで,動作そのものに問題はないようなのですが,テストプログラムで調べてみると回転数が低めになっていること,なによりこわいくらいの異音ですので,ほっとく訳にもいきません。

 異音はどうもスピンドルモーターが回転しているときに出ているみたいです。ということで,まずは分解です。

 そうそう,問題のディスクドライブは純正のDiskIIではなく,日本製を謳ったコンパチ品の1つ,ニューテックの飛鳥というものです。DiskIIがSA400というフルハイトのドライブを使っているのに対し,飛鳥はチノンのM-051MDというハーフハイトのドライブを採用していて,信頼性も見た目も私は気に入っています。

 分解して見ると,やはりスピンドルモーターから異音が出ています。指で触って回転数を変えると音も変化しますので,ここが原因で間違いないでしょう,

 ただ,スピンドルモーターへ供給する電源が大きく変動しているのが原因かも知れませんので,スピンドルモーターを取り外さなくても済む範囲で,まずは電解コンデンサの交換をします。

 どのコンデンサもそれほど劣化していなかったのですが,そこは予防的な意味も込めて交換します。結果,改善せず。あたりまえですね。

 そこで意を決して,スピンドルモーターをシャシーから取り外します。ああ,位置がズレてしまう・・・

 スピンドルモーターはJVC製です。当時VTRで勢いがあったJVCです。ヘッドを回すモーターで培った技術でFDDのスピンドルモーターとは,なかなか面白いじゃないですか。

 取り外して基板を見ていると,盛大に液漏れしている電解コンデンサがいくつもあります。おそらくこれでしょう。コイルの周辺に取り付けられたバイポーラの電解コンデンサですので,ここが抜けていると波形が汚いままになり,異音に繋がるんでしょうね。

 早速交換,他のコンデンサも一気に交換を済ませて組み付けます。本当はスピンドルモーター単体でのテストをするべきなんでしょうが,おそらくコンデンサの液漏れが原因ですので,これで直るはずです。

 結果,異音はなくなりました。元通り組み直して完成です。結構大ごとになるかなと覚悟しましたが,あっさり直って良かったです。

 速度調整も行って完成したところ,なぜかディスクによっては回転しないものが出てきて焦りました。原因は,ヘッドの掃除をする時に,反対側のスポンジもイソプロピルアルコールで拭き掃除をしてしまい,これが摩擦を減らした結果,ディスクによっては起動不良が起きてしまったようなのです。

 余計な事をしなければよかった,こればかりはどうにもならんかな,と思っていたのですが,とりあえず何枚かディスクを回してるうちに収まってきたので,よしとします。


(6)m5Jr

 実家からの荷物の整理で一番最初に手を付けたのがm5Jrです。しかし,これもテープをイメージ化しておらず,いつダメになってしまうかわからない状態でした。

 エミュレータでの動作も整備したいという事で,もう一度引っ張り出して,イメージ化です。ここで私は重大な事に気が付きます。

 エミュレータでは,実機を持っていることを条件にBIOSを使っても良いことになっています。本当は吸い出さないといけないのですが,同じ物なら別にいいじゃない,という考え方です。

 しかし,どうも文字化けがすごいのです。なにが原因かと首をひねっていましたが,おそらくこのBIOSは海外版なんじゃなかろうかと思い,実機のBIOSを吸い出して見たところ,きちんとあのひらがなが出てくるようになりました。

 M5のテープは私は市販品を5本ほど持っているのですが,いずれも小さなものなので,WAVファイルのままでも知れています。そこで下手にイメージ化せず,WAVのまま運用することにしました。

 というのも,M5のエミュレータとして選ぶ事の出来るMESSのエミュレータと,emu5という日本製のものとの間に,テープイメージファイルの互換性がないからです。

 emu5は単独で動作するのが気軽でいいのですが,ツール類が整備されておらず,WAVとイメージを行き来出来ません。ただ,MESSのイメージはemu5で読み込めますので,emu5から実機へのパスを確保しさえすれば,運用は可能です。

 最初はemu5のイメージを解析していたのですが,どうもRAWのオーディオっぽいのです。しかしヘッダを作ったりするのも面倒なので,ものは試しにとemu5でロードしている間に出てくる音をそのまま実機に突っ込んでみました。

 すると見事にロード出来たのです。いやはや,これは楽ちんです。手間ですが,このemu5おロード音をWAVで録音してしまえば,MESSにも持って行けます。

 そこで,昔打ち込んだプログラムポシェットのプログラムをもう一度打ち込むことにしました。しかし今は21世紀,OCRで楽々入力です。

 ・・・実際には解析ミスが連発し,まともに動くまでにはかなりの時間と手間がかかりました。打ち込み直した方が早かったかも知れません。

 とはいえ,採取的には実機でもかつての感動を思い出し,満足しました。

 余談ですが,inpをつかってキーを読み込むとき,伝統的に行われていたのはキーのI/Oポートのイメージのアドレスを指定しているんですね。ところがemu5ではこのあたりの事情を作者がご存じないらしく,イメージのアドレスを読み出してもキーの状態は返ってきません。

 だから互換性は低いという事になるわけですが,そこを修正してあげれば問題なし。m5のユーザーなら,これくらいのことは問題にはならないのかも知れません。


(7)SYSTE16BとSYSTEM24

 言わずと知れたセガのアーケード基板,SYSTEM16BとSYSTEM24です。

 SYSTEM16Bはソニック・ブームがやりたくて買ったもの,SYSTEM24はクイズ廊下に立ってなさいが500円だったのでついつい買ってしまったというやつです。

 昔はこの手のゲーム基板をいろいろ持っていたのですが,捨てたり売ったりで,残っているのはこの2枚だけです。

 SYSTEM16Bはコピー対策として暗号化されたバイナリを解くための鍵を格納したSRAMを持つ,特殊なCPUが搭載されています。巷で羊羹と言われている日立製のカスタムICです。

 怖いのは,この鍵を格納したSRAMはリチウム電池でバックアップされていて,これが5年ほどで切れてしまうと鍵も消えてしまい,起動しなくなってしまうというのです。

 すでにセガはこの基板のサービスをやめて久しく,メーカーにお願いすることは出来ません。また,消えたデータがデータですので,簡単に復元するkとも出来ず,かつては多くのSYSTEM16がゴミになったと聞きます。

 そうなる前にリチウム電池を交換する方法が世界中で考えられて,今や当たり前の手術となっています。

 手順は簡単で,羊羹の表に貼り付けてあるアルミの機銘板を丁寧に剥がし,出てきたCR2032を交換するだけです。しかし,電池を外せば当然SRAMは消えてしまいますので,基板に取り付けて通電したまま交換しないといけないのです。

 そう,まさに手術です。肝臓を手術するからといって,取りだしてしまうと肝臓も本体も死んでしまうわけです。

 しかし,通電中ですのでショートしたりすれば電源が落ちてアウトです。失敗が即死に繋がるという点でも,手術さながらの緊張感を持ってかからねばなりません。

 もう1つ,このCR2032はタブ付きで,ハンダ付けが可能です。しかしよく知られているように,CR2032のタブ付きは一般に市場に出てこないので,入手が難しいのです。その上どのくらい補完されて眠っていたのかわかりません。

 そこで今回は不格好ですがソケットを使って対応しましょう。

 とその前に,とにもかくにも現在SRAMが生きていなくては始まりません。恐る恐る通電すると,めでたくソニック・ブームが起動しました。まずは一安心です。

 それでは交換作業を始めましょう。

 まずアルミの機銘板を剥がします。

20220526155728.JPG

 こんな風におさまっているCR2032を取り外して,ソケットを取り付けます。

 最後に電池をはめ込んで,電圧を確認して手術は終わりです。

20220526155727.JPG

 ドキドキしながら電源を切り,再度投入します。

20220526155726.JPG

 無事に起動,手術は成功です。

 ちなみに,取り外した電池ですが,マクセル製で1986年の刻印がありました。今から36年も前なのに,電圧は3.1Vもあり,まだまだいけそうな感じでした。私の中でマクセルの株がグンと上昇した瞬間です。

 その後のロードテストも順調でなにも問題ありません。今のうちに処分してしまうのも手ですが,せっかくですのでもうちょっと持っておきましょう。

 なお,もしSRAMが死んでいたら,という作戦も書いておきます。

 思い出して欲しいのは,すでにSYSTEM16の多くは,MAMEで遊べてしまいます。と言うことは暗号はすでに解読されているわけで,合法かどうかは別にして技術的には暗号を説いたバイナリが存在するのは事実です。

 ならこれをROMに焼いてやればいいわけで,すでにソニック・ブームも,そうしたバイナリが存在しています。私は実機を持っていますので,このROMを使うことそのものには違法性はないと考えていて,最悪のケースでは,これを使おうと思っていました。

 ですが,グレーなものはグレーです。使わずにすんでよかったです。

 そうそう,SYSTEM24ですが,こちらは羊羹も搭載されていませんし,鬼門のフロッピーが必要ないゲームですので,問題なく動きました。

 


 こんな感じで,いろいろやってました。ここには書いていませんが,データレコーダのコンデンサの交換なんかはちょいちょいやっていましたし,先に書いたCZ-8RL1の誤動作も対策しました。

 さて,秋から冬,そして春まで過ぎて,かなりのことを経験しました。面白いですね。次の課題は,m5JrでBASIC-Fを動かす事なのですが,どうなることやら。

 

ユーティリティ

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