エントリー

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

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に流れることになり,海外とは異なる流れを歩むことになっていくのです。

ページ移動

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

ユーティリティ

2022年06月

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