冥界のLSI(11) LIM-EMS Ver4.0 サポートハードウエア

Joseph Halfmoon

前回、NEC Vシリーズの集積チップ(遡ってSoCというべきか?)のデータシートを眺めていてお惚け老人は引っかかりました。「EMSのサポートをすることも可能で」懐かしいデス。EMS自体は「API規格」というべきですが、V41/V51には「サポートのためのハードウエア」を搭載していたようです。一応LSIの一部ってことで。

※『冥界のLSI』投稿順 INDEX

LIM EMSと表計算ソフト

LIMって何よ、と問えば、Lotus、Intel、Microsoftの頭文字をつなぎ合わせたものです。今時のよゐこは、IntelとMicrosoftは御存じでしょうが、頭のLotusにはあまり馴染みがないかもしれませぬなあ。今だにIBMの「一部門」として名が残っているみたいだし、Lotusのネットワーク製品とか使っている人もいるかも知れません。しかし、年寄にLotusと問えば「1-2-3」と答えが返ってくるでしょう。Lotus 1-2-3こそは、一時「表計算ソフト」業界の代名詞。パソコンが「おもちゃ」でなく「業務用」として成り立ったのは「表計算ソフト」あったればこそ。パソコンが産業として成り立った時期を振り返れば欠かせないお名前なのであります。

さて、表計算ソフト自体は VisiCalc を嚆矢とすることに間違いないでしょう。縦横に集計できるソフトウエアを見て「これは使える」と感動した人々がどれだけいたか。しかしあるとき「もっといいやつ」が出てまいりました。Lotus 1-2-3です。忘却力の年寄は覚えてますぞ、キーボードをチョイチョイと叩いていくと入力した表がグラフになった日のことを。確か円グラフでした。感動。

瞬く間にLotus 1-2-3は、IBM PC上において大ベストセラー・ソフトウエアとなったのでした。なお、OSはMS-DOSです。そして速やかに当初は十分に思われていたMS-DOSの主記憶メモリが食いつぶされていくのです。8ビットCP/Mの時代の64Kバイトの主記憶空間に比べたらMS-DOSが管理できる640Kバイトの空間は10倍(残り384KにはIOとかROMを置いていた)、しかし表計算ソフトへの需要は直ぐにそれを飲み込んでしまったのでした。デカイ表を作りて~。

その対策として、「表計算ソフト」メーカのLotus、「IBM PC, PC/XT, PC/ATのCPU(であり一時までメモリボードも作っていた)」メーカのIntel、「MS-DOS」メーカのMicrosoftが共同で策定した「規格」こそがLIM-EMSです。その中で決定版と言われるのが Ver. 4.0でした。なお、ネットを漁ればあれほど隆盛を極めたLotus 1-2-3が、Microsoft Excelにとって代わられた理由なども見つかると思います。

LIM-EMS規格とその実装

以下LIM-EMSの規格書から「その真髄」部分の図を一枚引用させていただきます。LIM_EMS_FIG1

 

簡単に言えば、1Mバイトしかない8088のメモリ空間(80286や80386もReal Modeで走っている間は同じ)のうち、MS-DOSがIOカードなどのために残している上の方の空間にページフレームという「窓」を置き、その窓を通じて大きなメモリの一部にアクセスすることを可能にする「ちょっとカッコいいバンクスイッチ」みたいな感じっす。当時のマシンは8ビット機を筆頭に物理アドレス空間を使い切っていたので「ありがちな」発想っす。

忘却力の年寄は、MS-DOSのCONFIGの中で、EMM.SYSとかをロードしていたのを思い出します(物忘れが激しくても昔の事は覚えているのよ。)表計算ソフトなどのアプリケーションはこの小さなドライバにお願いして所望のデータを窓からアクセスできるようにしてもらっていたのでした。

しかしEMSの実装にはいくつかの方法がありました。それはインテル8088/8086(そしてNEC V20/V30)シリーズはアドレス線20ビットだけれども、80286は24ビット、80386は32ビットある、という違いに原因があります。

    1. 拡張メモリボード上のアドレスデコードロジックの中にEMS対応機能をハードウエアとして持たせる
    2. LSIの中のアドレスデコードロジックの中にEMS対応機能をハードウエアとして持たせる
    3. プロテクトモードのソフトウエアでEMS相当機能を実現する

もっともプリミティブなのが1ではないかと思います。IBM PCおよびIBM PC/XT(CPUは8088)は8ビットデータの拡張バススロットを持っており、そこにボードを刺し込むことができました。その後、PC/AT(オリジナルは80286)になると拡張バススロットは16ビットデータバスに拡幅され、ISAと呼ばれるようになります。80386搭載の「PC/AT互換機」というものが爆発的に増えた時代もISAバスはかなり長い間(もしかすると今だに)使われてました。

しかし、オンボードのメモリ量も急速に伸びます。80286機や80386機であれば1Mバイトの物理メモリには縛られない(ハード的には)のでPC/AT互換機では1Mバイト以上の主記憶を搭載する機種が増えたと思います。その際「プロテクトモードに入ってちょいと誤魔化す(マッピングするとか良い言い方しろよ)」とソフトウエアだけで1Mバイト以上の空間にあるメモリをさも1Mバイト以下にあるように見せかけられるので、後にはEMS用のハードを積まずソフトで「誤魔化す」のが主流となりました。ハード不要、ノーコストだもんね。

その中で、NEC V41/V51が搭載していたのが「端境期」的な性格の強い「2」の行き方でないかと。集積チップは1Mバイトを超えるメモリを管理できるけれど、CPUコアが直接アクセスできない部分をサポートするハードウエアを集積、というソリューションだった、と。

V41/V51のメモリ構成例とメモリマップ

前回のV41/V51のマニュアルから、メモリ構成を示す図を引用させていただきます。V41_DRAM

今にしてみると、「すげー苦労してるな」という感じであります。これにてなんと最大6Mバイト(1バンク2Mバイトx3バンク)の「巨大な主記憶空間」をマザーボード上に実装できたはず。そして1Mバイト以上のメモリをMS-DOS上のプログラムが活用するためにはEMS規格に従うAPIを使うことが必須だったと。そのときのメモリマップの図も引用させていただきます。V41_mapping

 

今だに痕跡は盲腸みたいに残ってる?そういえば、ExpandedではなくExtendedメモリの規格もあったなあ。今回のハードには関係ないので割愛。

冥界のLSI(10) NEC Vシリーズ、シングルチップおまとめ へ戻る