〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜    電  脳  高  速  化  指  南                            #60 Oh!石 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜  こんばんは、ソフト屋のOh!石です。ここでは前号の野口さんからのリクエスト にお応えして、X1の6MHz化について解説いたします。 最初にお断りしておき ますが、X1についてだけ解説すると機種別の記事になってしまうのと、元ネタが I/O誌に掲載されたものなのでそのままやると転載のようになってしまうので、具 体的な回路とかは避けて考え方を中心に他機種も含めて書いていきたいと思います。 専門用語等、ハードに詳しくない人には分からないことも多いかと思いますが、でき るだけかみくだいて説明していくつもりです。 - §1 高速化の考え方 - - - - -  パソコンを高速化する方法としては、おおまかに分けて次の3種類が考えられます。      1.ソフトを高速化する      2.CPUを交換する      3.搭載しているCPUの動作クロックを上げる  1は、常日頃使用しているOSや言語を交換したりチューンアップしたりすること を指します。コンパイラなんかを導入するのなんかは代表的な例です。ですが、マシ ンの性能のうち隠れた部分が多くなければあまり効果を発揮できません。  2は少し強引な方法です。あとでも触れますが、あまり成功例の多くない方法です。  皆さんがすぐ思い付くのが、3の方法でしょう。 あまり簡単な方法とは言えませ んが、原理は単純で成功例も多くあります。  当然ここでは2と3の具体例を挙げて説明します。 - §2 CPUを交換する - - - - -  この方法には、大きく分けて2つあります。      1.外部により高速なCPUボードを接続し、元のパソコンを       端末のように使用する      2.本当に取り替えてしまう  その昔、高速処理をうたい文句にシャープからMZ−2000用16ビットボード が発売されました。これは1にあたります。元からあるZ80はI/Oコントローラ として動作し、BASIC本体等のシステムプログラムは8088上で走りました。 互いに割り込みをかけながらデータのやりとりをするのでどうしても全体の処理が遅 くなり、宣伝文句とは裏腹の性能しか発揮できませんでしたが、その後Oh!MZ誌 上でCP/M86が移植されるなど面白いハードではありました。1の例としては他 に、画像処理等の分野でよく用いられるトランスピュータとか、最近X68k用に発 売されたV70ボードがあります。  2の例で代表的なのは、8086をV30に取り替えるやつでしょう。当時何台も のPC−9801/E/F/MのCPUがV30に交換されてしまいました。さきの 16ビットボードも8088をV20に取り替えましたが、僅か1〜2%程度しか改 善されませんでした。また、PC−8801mk2(細かい機種は忘れた)のZ80 を日立の64180に交換したという話も聞いたことがあります。  2の場合、交換する2つのCPUについてタイミングなどかなり細かい仕様を確認 しておく必要があります。8086とV30の場合はほとんどの信号について同一の 仕様となっているため、100%に近い確率で成功しますが、Z80と64180で は命令セットは同一でも細部のタイミングが異なっているためにそのままでは無理だ と思われます。最低限、付加回路なしにはX1turboにつなげられません。  また、ソフトでタイミングをとって動かす部分については、CPUの交換後動作し なくなる可能性が大です。私はMZ−6500の8086をV30に交換したのです が、システムは起動するもののキーボードからの入力ができなくなりました。 おそ らく、キーボードからのシリアル信号を読み込むルーチンの動作が速くなったためで しょう。 - §3 CPUの動作クロックを上げてやる - - - - -  いよいよ本題です。各機種についての説明の前に、どのように設計するのか、その 考え方を説明します。  一口にクロックアップと言っても、その行く手にはさまざまな難関が待ちうけてい ます。だいいち、簡単にできるのならあらゆるパソコンのクロック周波数は極限まで 高くなっているはずです。その難関とは、大部分が設計外の動作をさせるために生じ たものです。 ・メモリの速度 ・周辺とのタイミング ・画面出力  最初に、メモリの速度について説明しましょう。 +-----+ +-----+ +-----+ +---- CLK | | | | | | | ---+ +-----+ +-----+ +-----+ : :70ns : -----------+ : :40ns MREQ | : +-------------------------------- : : ------------------------------+:+----------- D0-7 : X ------------------------------+:+----------- : : :<-- 応答時間 -->: Z80の通常のメモリリードでは、クロック3サイクルの行程で動作します。規格で は1つめのクロックの立ち下がりから最大70nsのうちにMREQがLになり、3つめの クロックの立ち下がりの40ns前までにデータが確定していないといけないので、MREQ の立ち下がりからデータの確定までの時間(つまりメモリの応答時間)は 4MHz時:390ns 6MHz時:223.4ns となります。これだけなら200nsのROM、150nsのRAMを使ってあれば充分 な時間です。ところが、Z80には命令をフェッチするためのM1サイクルというも のが存在します。この時、同じメモリからの読みだしサイクルが変化し、タイミング がきつくなります。具体的には、データの確定すべき時間が3つめのクロックの立ち 上がりから30ns前までになります。 +-----+ +-----+ +-----+ +---- CLK | | | | | | | ---+ +-----+ +-----+ +-----+ :<----->:100ns : -----------+ : :30ns M1 | : +-------------------------------- : : ------------------------+:+----------------- D0-7 : X ------------------------+:+----------------- : : :<-応答時間 ->: つまり、クロック半サイクル短くなる訳ですね。計算によると、 4MHz時:275ns 6MHz時:150ns となります。200nsのROMだと、見るからにあぶなそうですね。どうしてそのよ うになっているかというと、すぐあとにリフレッシュサイクルが控えているためです。 フェッチした命令を解析する間、CPUとしてはメモリをアクセスすることはありま せんので、その空き時間を利用してリフレッシュを行う訳です。  最近でこそ70nsで動くRAMとか100nsそこそこで動くROMとかありますが、 我々が改造しようかというような機種の出ていた時期では夢のような話です。当然、 対策を立てねばなりません。  6MHzで動作していたMZ−2500ではどうしていたかというと、必要時にウェ イトを入れていました。Z80ではWAITという端子が2つめのクロックの立ち下がり 時にLとなっていたとき、ウェイトサイクルが3つめのクロックの前に挿入されます。 ウェイトサイクル +-----+ +-----+ +-----+ +---- CLK | | | | | | | ---+ +-----+ +-----+ +-----+ :<----->:100ns : -----------+ : :30ns M1 | : +-------------------------------- : : ------------------------------------+:+----- D0-7 : X ------------------------------------+:+----- : : :<------ 応答時間 ------->: ウェイトサイクルでは全ての信号が固定されますので、当然データ確定までの時間も 引き伸ばされます。つまり、 4MHz時:525ns 6MHz時:316.7ns となって通常のメモリリードよりも余裕ができました。全部のメモリアクセスに対し てウェイトを入れていたのでは遅すぎるので、MZ−2500ではM1サイクルと VRAM等のアクセス時にウェイトが入ります。  次は、周辺とのタイミングです。ここで言う周辺とはI/Oデバイスのことを指し ます。  Z80での周辺デバイスの代表格はやはりPIO・SIO・CTCなどの周辺LSI でしょう。これらのLSIは当然ながらI/O空間にマッピングされるので、内部の レジスタにアクセスする場合はI/Oサイクルにてリード・ライト操作が行われます。 ところが、Z80(8080かな?)の設計者は「I/Oデバイスは遅いもの」と決 めてかかっていたのか、なにもしなくても最初からウェイトサイクルが入った状態で 動作が進行します。これなら、メモリの時よりも簡単そうです。  でも安心はできません。LSIの動作速度の違いは、割り込み動作に大きく影響し てくるはずだからです。  念のために説明しておきましょう。割り込みとは、通常行っている処理を中断して 一時的に別の処理をおこなうことです。たとえば、FM音源などで音楽を演奏すると き、演奏データがなくなると割り込みが発生します。割り込み処理ルーチンでは、ファ イルやメモリ上に保管してある演奏データを取り出し、FM音源に渡します。必要な データを渡し終ったら、元の処理に戻ります。  さて、周辺LSIが割り込み処理から復帰するときの動作ですが、信号線に割り込 みモードを表すものがあるのではなく、CPUと歩調を合わせて命令を取り込みなが ら、LSI自身が判別します。つまり、CPUはRETIを読み込んで割り込み処理 を終了しますが、同時に周辺LSIもRETIを実行して自分で割り込みモードを終 了するのです。ですから、周辺LSIにもCPUと同等なメモリアクセスのサイクル が存在することになり、いくらCPUが速く動いても周辺がついてこれなければいつ までも割り込みモードに入ったままになることだって考えられるのです。  最後に、画面表示です。最近の高度化した画面表示を持つ16ビット以上のパソコ ンではあまり関係無くなってきましたが、8ビットマシンではシステムクロックが画 面表示の回路に使用されているものが多数あります。例えば、MZ−700/1500 はその典型的な例で、CPUのクロックが3.58MHzなのは日本のTVの表示規 格であるNTSCで使用される周波数の整数倍にしたためです(ちなみにMZ−800 のCPUクロック3.5469MHzというのはヨーロッパのTV規格PALの整数 倍となっています)。システムクロックを分周して表示回路に使用する意図がうかが われます。画面関係以外でも、RS232CやFM音源など動作用クロックをシステ ムクロックと共用するものがありますので、注意が必要です。  ということで、これまで述べてきたことから次のような具体的な対策が浮かんでき ます。 (1)CPUと共に、メモリも高速なものに交換する。 (2)周辺LSIも、Bバージョンなど高速なものに交換する。 (3)システムクロックが供給されている箇所を調べ、周波数が変化してはまずいと ころには代わりのクロックを用意する。 しかしながら、メモリが大容量に向かっている現在では昔の小容量のRAMの需要が あまりないので、そう簡単に新しいものを手に入れられるかどうか疑問です。しかも、 LSIの一部には高速バージョンの存在しないものもあります(Z80DMAなど)。  ところで、メーカーのカタログ値はどの程度信用できるものなのでしょうか。もし カタログにある数値がその石の最大限の性能ならば、瞬間的でさえ数値を越えるタイ ミングを与えることは許されないはずです。逆に、あくまで目安なのであれば、もし かすればカタログスペックを越える性能を発揮できるかもしれません。  この問題に関しては、「通常メーカーはカタログスペックに余裕を持たせた値を載 せる」と答えられます。工業製品に限らず、あらゆる品物はわずかでも個体差が存在 します。もしカタログ値がギリギリのものだったとすれば、ばらつきによりカタログ よりも良い品や悪い品ができる可能性があります。良い方には問題ありませんが、悪 い方は商品にもなりません。ちょっとくらい悪い品ができても、あらかじめカタログ スペックの方を下げておけば「性能」に問題無い品物を出荷することができます。具 体的に例を挙げると、Z80は1.5倍までのクロックで充分使用できます。つまり、 Z80は3.75MHzまで、Z80Aは6MHzまで大丈夫ということです。この 「1.5倍」という数字はメーカーの発表したものではないのであくまで「目安」と 考えてください。余談ですが、Z80のバージョンはそのように設計したものではな く、出荷試験の結果つけられるという噂があります(かなり確かなようです)。つま り、9MHzでパスすればBバージョン、だめなものは6MHzでテストしてパスす ればAバージョン、それでもだめならさらに4MHzでテストしてパスすればノーマ ルということです。こういうのを「選別」といって、Z80に限らずいろいろな半導 体製品でおこなわれています。なお、Z80Hは(多分Z80Eも)別設計だそうで す。  従いまして、現在の「クロックアップ」はクロック生成回路以外の部品の交換をし ていないのが実情です。ですから、もしかするとばらつきによって改造が成功しない 機械があるかもしれません。実際、X68000の改造については初代機など 12MHzぐらいまでしか上げられないといいます。このあと紹介する改造例も、絶 対成功するとは言い切れないことをご承知おきください。 - §4 改造例その1・MZ−80K/Cの巻 - - - - -  ここからいくつかの改造例を紹介していきます。どうしても具体的な説明は回路図 を参照しないとわかりにくいと思いますが、言葉で表現しきれない部分がありました らご容赦下さい。  さて、MZ−80K/Cシリーズは最終タイプのMZ−1200までクロックは 2MHzでした。このため、多くの機械が「倍速」と称して改造されました。また、 倍速基板といってCPUソケットに差す(結果的にCPUを取り替える)商品もあり ました。  MZのクロックは8MHzの水晶発振器の出力を4分周してCPUクロックに、さ らに分周して周辺へ供給しています。また、原発振である8MHzも画面出力に使用 されています。このことから、CPUのクロックを変更しても他のクロックは供給し てやる必要があります。また、MZはカセットの入出力をソフトでタイミングをとる ことで行なっていたので、改造後はそれまでのテープが読み込めなくなります。  1980年当時のI/O誌に2例の改造記事が掲載されています。両方ともほぼ同 じ回路で、2回載ったのはKとK2・Cでは回路に若干の変更があってIC番号が変 わったためです。これらの記事では、さきほどの問題を見事に解決しています。  まず、2MHzの代わりに供給する4MHzクロックですが、これは8MHzを分 周する回路の途中から取り出します。分周はLS93という非同期カウンタで行なっ ていますが、そのQB出力が4MHzになります。  プログラムによっては元の速度が必要なのもあるでしょうから、2MHzと4MHz を切り替えられるようにします。記事では機械的なスイッチではなく、NANDを3 つ組み合わせたのやLS157というセレクタICを使って電子スイッチというかた ちで切り替えています。  2つのクロックを単純に切り替えたのではほぼ確実に暴走しますので、タイミング を計って切り替えます。具体的には、2MHzと4MHzとのNANDをタイミング 信号として切り替え状態を保持するフリップフロップにクロックとして入力します。  その切り替えの元になる信号ですが、本体の外へスイッチを出して手で切り替えら れるようにします。と同時に、スイッチを2つにしたり中立スイッチを用いたりして カセットの動作信号をクロック切り替え信号に使用します。MZではこの動作信号を 見てカセットの操作をユーザに促すようにできているので、このようなことができる のです。  この改造記事で製作されたものは、市販品よりコンパクトで、4MHz動作時にも テープの読み書きができるなど優秀なものでした。 - §5 改造例その2・MZ−2000用16ビットボードの巻 - - - - -  先ほども16ビットボードのCPUを8088からV20に交換したと述べました が、ベンチマークテストで124秒かかる関数計算が122秒で終了したくらいであ まり効果が現れませんでした。そこで、回路図を見てみると(マニュアルに回路図が あるんだねぇ〜)Z80のクロックも8088のクロックもお互い相手の基板へ行っ ていないことがわかりました。8088の5MHzクロックは16ビットボード内で 閉じているのです。  8088システムのクロックは、8284というクロックジェネレータICが原ク ロックを3分周して生成します。水晶のクロックと8284の出力クロックが他の部 分へ分配されていないことから、ここは水晶を取り替えます。  取り替える水晶の発振周波数は、8284で分周されることを考慮にいれて3倍の 数値を使用します。私の実験ではあらかじめCPUがV20の8MHzに交換されて いたのでその3倍、24MHzの水晶に交換しました。  結果は、思ったとおりどこにも異常無く動作しました。本当は失敗を見越して各種 の水晶を用意していたのですが、取り越し苦労に終りました。  16ビットボードといえば「8ビットよりも遅い」ということで有名だったのです が、これで価値が現れました。なお、私はOh!MZ誌85年5月号のCP/M86 の移植も行なっていますが、動作に問題はありませんでした。 - §6 改造例その3・X1turboの巻 - - - - -  NiftyやS−OSNETでも一時期「X1turboを12MHzにした」という情 報が流れて話題になったことがありましたが、その基本となっている改造です。I/O 88年2月号に掲載されたものですが、この記事を見て改造を行なった人もけっこう あると思います。  X1turboのクロックは、16MHzのクロックモジュールを原発振として、 LS161という同期カウンタで分周しています。クロックモジュールというのは電 源を接続すれば直ちに安定した信号を出力してくれる部品で、通常の水晶発振器が多 少の回路を必要とするのに対して、すでに発振に必要な回路を内蔵している点で便利 なものです。  さて、LS161から出力されるクロックですが、2分周(8MHz)されたもの がDRAMのコントロールに、4分周(4MHz)されたものがDRAMのコントロー ルと各Z80のLSIなどのシステムクロックに、8分周(2MHz)されたものが PSGとCTCに供給されています。このうち、2MHzのクロックが速くなると通 信ができなくなったり(CTCの出力クロックをボーレートとして使用しているため) 音程が狂ったりしますので変更することができません。その他のクロックについては 全部いっぺんに替えた方が良さそうです。  記事では、24MHzのクロックモジュールを使用して、6MHzの時は2・4・ 12分周して、4MHzの時は3・2/3・12分周してこれらのクロックを生成し、 また2つのクロックに同期して切り替える回路を小さい基板に組み立て、その信号を LS161がもとあった場所(あらかじめソケットに替えておく)に供給するように 書いています。なお、記事中にはS TTLはLS TTLでよいとありますが、ファ ンアウトの関係からS TTLを使用しないと動作しません。  また、X1turboを6MHz動作させると高解像度横40字モードで猛烈なノイズが 発生するので、ウェイトをかけます。回路上はVRAMアクセス時にウェイトがかかる ようになっているので、それを強化します。LS32(IC24)の1番ピンに 270pFのコンデンサがつながっていますが、この値を大きくすることで遅延時間 を増大させることができます。交換してしまっていつでもウェイトがかかるようでは                               _______ 困るので、S10(IC22)の未使用ゲートを利用して本体内の200/400, _______            __ 640/400,クロックボードの6M/4M設定信号のNANDを作り、これで DIPリレーを動かして高解像度横40字モードの時だけコンデンサの容量を増やし ます。DIPリレーというのは、普通の14ピンICとほぼ同じ形をしているリレー のことで、TTLの出力電流だけで充分動作します。  この記事は筆者の試作的意味あいも兼ねてあったので、用心のためのウェイト回路 が入っています。これについては記事にも書いてありますが、結局のところ不要でし た。 - §7 改造例その4・X1turboIIの巻 - - - - -  X1turboの改造で気を良くした筆者は、友人に頼まれてX1turboIIの改造にも挑 戦しました。  turboIIでは大部分の回路をゲートアレイ化してあり、分周回路もその中に入ってし まっているのでturboと同じ方法では改造できません。また、ここで分周されたクロッ クの内8MHzはFDのインターフェイスにも供給されているため、12MHzに上 がってしまうとフロッピーが読めなくなってしまいます。  そこで、さっきと同じ様に8MHzもクロックボードで作成して別供給とし、本体 には24MHzと16MHzのみを切り替えて入力して本来の分周回路を使用するよ うにします。なお、元のクロックは取り外しておきます。  また、こちらの改造ではパターンカットが必要になります。2MHzと8MHzが ゲートアレイから供給されているのを切断するためです。  という事で、クロックボードの回路は16MHz/24MHz切り替えと2MHz/ 8MHz生成だけになります。筆者は前回で「味をしめた」とかで最初からウェイト 回路は入っていませんが、今回も問題は起こりませんでした。しかも、turboIIになっ て回路に余裕ができたのか、高解像度横40文字モードでのノイズは発生しませんで した。  turboZの場合は、更にFM音源が4MHzを必要とするのでこれも別供給としなけ ればなりません(この記事の回路図では始めから4MHzの出力があります)。 - §8 最後に - - - - -  以上で高速化についての解説を終わるのですが、理解できましたでしょうか。冒頭 にも述べましたように、まるっきりの盗作はモラルに反するのでどうしてもうわっつ らの解説になってしまいました。雑誌記事についてはコピーサービスを利用するなど、 できるだけ詳しい内容をちゃんと把握した後で製作に取り掛かってください。すでに 「失敗したら買いなおせばいいや」という時代でもありませんから、愛機を不本意な 結果に終わらさぬよう(ユーザが減ったらS−OSUCもやりがいが無くなるし)、 くれぐれも気を付けてください。 - §A 参考文献 - - - - - 横田英一:Z−80の使い方、オーム社 SuperMZ 基本スペックの詳解、Oh!MZ85年10月号、ソフトバンク X1turboの回路図公開、Oh!MZ85年4月号、ソフトバンク 今雪寛:X1を6MHzに!、I/O88年2月号、工学社 今雪寛:X1turboIIに6MHzターボチャージャーを!、I/O88年6月号、工学社