ESEPS2 Specifications
--------------------------------------------------------------------------------
(1) Introductions
    ESEPS2は、2つのキーマップを内蔵している。1つは MSXネイティブと一対一で対応する
    キーマップ。もう一つは、異なるレイアウトを MSXネイティブに変換するキーマップの
    2種類である。
    これらは、Kmap信号によって切り替えられる。
    
        Kmap = 0: MSXネイティブと一対一で対応するキーマップ
        Kmap = 1: 変換を伴うキーマップ

    標準の keymap.vhd は、下記のようになっている。

        Kmap = 0: 日本語キーボードレイアウト
        Kmap = 1: 英語キーボードレイアウト

    Kmap = 1 を使うことによって、日本語 MSX BIOS を使った OCM において英語キーボード
    を使うことが出来るようになる。キーの刻印通りの文字を入力できる。

(2) 制約事項
    [1] 複数存在する同種のキーの扱い
        PS/2キーボードには、CTRL, SHIFTキーが複数存在している。
        MSXにも SHIFTキーは左右1つずつ搭載されているが、これらのキーは同一のキーとし
        て扱われるハードウェア構成となっている。
        ESEPS2 は、Kmap信号の値にかかわらず、左CTRL/右CTRL、左SHIFT/右SHIFT を同一
        キーとして扱えるように構成しているが、PS/2キーボードとしては別のキーとして
        信号を送ってくる。

            (a) 左SHIFTを押す
            (b) 右SHIFTを押す
            (c) 左SHIFTを放す
            (d) 右SHIFTを放す

       このようなキー操作を行った場合、本物のMSXでは、(d) の時点でようやく SHIFTキー
       が放されたと認識されるが、ESEPS2 では (c) の時点で SHIFTキーが放されたと認識
       される。

    [2] 同時押しの制限1
       PS/2キーボード製品によっては、同時に押せるキーの数に上限があるものがある。
       そのようなキーボードは、上限に達すると、その次に同時押しのキーを増やすと、
       最初に押したキーを放していないにもかかわらず「放した」という信号送ってくる。
       これは、PS/2キーボード側の制限であり、ESEPS2は認識することは出来ないため、
       改善することは出来ない。

    [3] 同時押しの制限2
       PS/2キーボード製品によっては、同時に押せるキーの組み合わせに制限があるものが
       ある。例えば、[←] + [↑] + [SPACE] の同時押しに対応できないキーボードがある。
       そのようなキーボードは、やはり出来ない組み合わせの時に、最初のキーを「放した」
       と偽のコードを送ってくるか、そもそもキーコードを送ってこない。
       これは、PS/2キーボード側の制限であり、ESEPS2は認識することは出来ないため、
       改善することは出来ない。
       [←] + [↑] + [SPACE] に関しては、ゲームではよく使われる組み合わせなので、
       代替案として [左WIN], [右WIN]キーを [SPACE] として使えるようにしてある。
       [←] + [↑] + [右WIN] のように押せば、期待する効果を得られる。

    [4] Kmap = 1 の制限
       キーコードを変換して実現しているマッピングのため、同時に押せるキーの組み合わせ
       に制限がある。
       例えば、日本語レイアウトで、記号 @ に対応するキーは [@] である。
       一方で、英語レイアウトで、記号 @ に対応するキーは [SHIFT] + [2] である。
       日本語レイアウトのキーボードでは、記号 @ と、アルファベット w を同時に入力する
       ことが出来る。[@][W]を同時に押せば良い。
       日本語レイアウトのキーボードで、日本語MSX-BASIC を使っている場合、[@][W]
       の同時押しで、@w@w@w@w@w を入力できる。
       しかし、Kmap = 1 にして英語レイアウトのキーボードを使った場合、
       [SHIFT] + [2] と [W] の同時押しになり、@W@W@W@W@W の入力となる。
       w と W は、MSXキーマトリクス上では同一ビットに割り当てられているため、
       MSXキーマトリクスを直接扱う市販ゲームなどでは大きな問題になることはないが、
       MSX-BASIC のプログラムで INPUT, INPUT$, INKEY$ で入力を受け付けているソフトでは
       そのまま影響がでる。
       日本語レイアウトと英語レイアウトの SHIFTキーの扱いが異なる記号キーとの組み合わせ
       の問題のため、原理的に完全な変換を行えない。
