この記事の途中に、以下の記事の引用を含んでいます。
The Microsoft SoftCard for the Apple II: Getting two processors to share memory
レトロPCの革命児、SoftCardとは何か?
皆さんは、パソコンの中に異なるCPUが仲良く共存できる、そんな“共生”が成立していた時代があったことをご存知でしょうか。
この記事はまさにそんな夢のような、しかし非常にリアルな技術史の一幕について、深く解き明かしています。
テーマとなるのは、1980年、Apple IIの拡張カードとして登場した「Microsoft Z-80 SoftCard」。
“ハードも売るMicrosoft”の原点とも言える製品で、なんとApple IIにZilog Z80プロセッサを追加し、CP/M OSとそこ用の膨大なソフトウェア資産をApple IIで動かすことを実現してしまったカードです。
「なぜ2つのCPU?」そして「どうやって共存させたのか」
記事では、SoftCardの登場によってCP/M(当時広く使われたOS)がApple II上で動いた仕組み、すなわち6502とZ80という本来相容れないCPUの“記憶共有”という難題に、Microsoftがどう挑んだかを語ります。
まず早速、主張のポイントを原文から引用します。
The Microsoft Z-80 SoftCard was a plug-in expansion card for the Apple II that added the ability to run CP/M software. According to Wikipedia, it was Microsoft’s first hardware product and in 1980 was the single largest revenue source for the company.
(Microsoft Z-80 SoftCardはApple II用の拡張カードで、CP/Mソフトを動かせるようにした。ウィキペディアによると、Microsoftの初ハード製品であり、1980年には同社最大の収益源だった。)
この一節に象徴されるように、SoftCardは単なる“面白ガジェット”ではなく、実はMicrosoftの成長を大きく支えた巨大プロジェクトだったという事実が明かされています。
さて、Apple IIにはなぜZ80のような“異種CPU”を追加する必要があったのでしょうか。
そして、1台のコンピュータに違うCPUが2つ積まれてしまうことで、いかなる難題が発生し、それはどう解決されたのでしょうか。
CPU共存の困難と、その妙技
CPU切り替えの「裏技」:DMAとREFRESH
2つのCPUが同じメモリをどう扱うか――この命題を攻略するカギは、“どちらか一方しかメモリを触れない”ようにしたうえで、必要に応じてうまくバトンタッチさせることです。
記事中に興味深い記述があります。
The SoftCard tells the 6502 that it’s doing DMA, so the 6502 pauses and waits for the DMA to complete. However, you can’t leave the 6502 paused for too long or its internal registers degrade and lose their values.
(SoftCardは6502にDMA中だと伝えることで、6502を一時停止させる。しかし、長く停止しすぎるとレジスタ内容が失われる。)
つまり、SoftCardはApple IIの6502プロセッサに「ちょっとメモリアクセスはお休みしてて」と頼み、その間にZ80がApple IIのメモリを“乗っ取って”CP/Mを実行します。
ですが、6502を何十分も“寝かせて”おくと、レジスタ等ハードウェアの内部状態が失われる危険が生じました。
ここでMicrosoftが採った妙技は、Z80のREFRESH信号(本来はDRAMの維持更新用)を利用して6502の「目覚まし」とすること。
つまり、Z80が命令デコード中など「今はメモリ触ってませんよ」というタイミングで、6502を一瞬だけ目覚めさせて“回復運動(小さなループ)”させる。
この隙間時間で6502の内部状態を温存しつつ、普段はZ80が主導権を持つ――まさに巧みなリソース分配です。
I/O処理の共有と相互通信
また、ディスクやキーボード等のI/O処理には6502固有のタイミング制御が必要な場面もありました。
記事によれば、そうした時は
When the SoftCard needs the 6502 to do actual work, it can update some memory to tell the 6502, “Break out of your spin loop and do something for me, then let me know the answer and go back to the spin loop.” The Z80 then goes to sleep until it gets an answer from the 6502.
(6502に処理をさせたくなったら、あるメモリ値を書き換え「ループを抜けて何か処理せよ」と命じる。Z80は結果が返るまでスリープする。)
と書かれています。
この仕組みは、OSのカーネルとデバイスドライバの協調動作を思わせる“軽量カーネル”のような通信制御で、よく考えられています。
まさに「2つのプロセッサによる分業」を、シンプルかつ堅牢に実現していたのです。
メモリマッピングの衝突――バンク切り替えの創意
さらにハードルとなったのが「両CPUでメモリの意味する場所が違う」問題――特に、アドレス$0000〜$0FFFなどApple IIとCP/Mの両方が“重要領域”として使いたがる箇所のバッティングです。
ここでも鮮やかな工夫が登場します。
The solution is to remap the memory by putting address translation circuitry on the SoftCard, so that when the Z80 asks for memory address $0000, say, it actually gets physical memory $1000. The remapping is carefully arranged so that all of the Apple II’s special reserved addresses get shuffled to the end of the Z80 memory map, and all of the Apple II’s normal RAM occupies contiguous address space in the Z80 memory map starting at $0000.
訳すと、「アドレス変換回路を載せ、Z80から見る$0000は物理的には$1000になるよう割り当て。Apple IIの予約領域はZ80の末端に寄せ、RAMをZ80からは連続領域に見せる」というもの。
ハードウェア的な“住所変更システム”です。
この仕組みのおかげで、Z80側は“自分専用のフラットなRAM”があるように錯覚できる一方、Apple II側は互換性を維持できました。
技術的意義と現代的な価値
この事例は、実は現代の「異種CPU協調システム(Heterogeneous Computing)」にも繋がる発想が散見されます。
スマートフォンや組み込み機器でも一つの基盤上に専用プロセッサ(GPUやDSPなど)を加えたり、メインCPUとコプロセッサを協調動作させる仕組みが重要です。
SoftCardの方式は、ごく初期から「CPU協調処理―休眠/起床制御」「論理アドレス変換ベースのメモリアクセス分離」など、今のSoC(System on Chip)で当たり前になった幾つもの原則を鮮明に示しています。
また、ソフトウェア“じゃじゃ馬”だったCP/MをApple IIの“気難しい”メモリマップで平然と走らせる大胆さは、企業Microsoftの初期イノベーション精神としても高く評価できるでしょう。
記事のなかで、「SoftCardマニュアルには6502からZ80サブルーチンの呼び出し方法やメモリ構造図、Z80の命令リストまで網羅されていた」と説明されています。
実用面でも開発者にとって非常に親切だったはずです。
冷静な評価、そして時代を超える学び
もちろん、現実にはこの2CPU+共通メモリ方式にはそれなりの制約が伴ったでしょう。
I/Oが複雑になったり、リアルタイム性のある処理とエミュレーション的な分業の間でバランスが問われた場面も多かったはずです。
しかし、“異文化交流”とも言える技術的チャレンジと、絶妙なハードウェアレベルの工夫(レジスタダレ防止や仮想メモリマップ)は、今見ても見事の一語。
この「リソースを最大活用し、細やかに制御シグナルを活用し、2つのCPUに“落とし所”を与えるセンス」は、ノスタルジックでありつつも、いまのソフトウェア/ハードウェアエンジニアがぜひとも学ぶべき知恵だと感じます。
最後に――レトロPC技術の教訓
この記事は単なる昔話では終わりません。
今、私たちが複数の“頭脳”を一台の機器で動かす時も、リソースの競合、相互作用、不整合を避けるための設計が必要です。
Microsoft SoftCardのようなチャレンジは、現在の複雑なマルチプロセッサ設計と本質的に同じ課題、すなわち「違う世界がひとつに混ざり合う処方箋」となっています。
レガシーと最新技術の両方を理解する立場から見て、SoftCardのような試みは「異分野・異技術の橋渡し」、そして「資産の最大活用」という設計思想として、これからも息づき続けて欲しいと強く感じます。
categories:[technology]

コメント