日本語と中国語のテキストモードBIOSセットアップ画面をたくさん見ました。最近、私はWindows XP日本語でセットアップしました。MS-DOSにも日本語バージョンがありました。実際のDOSモード 、Windowsコマンドプロンプトではありません!
1つの典型的なテキストモード画面のサイズは80x25です。日本語文字は通常のラテン文字幅の2倍の大きさであるため、画面に同時に表示できる日本語文字の最大数は約1000です。したがって、2000コードポイントが必要です。 )文字の左右部分を表示します。
デフォルトのテキストモードでは256文字しか表示できませんが、最初の128文字はASCIIに使用されるため、使用できるのは上位128コードポイントに制限されます。必要に応じて512に拡張できますが、それでも表示に十分なコードポイントをサポートできません。こんなに限られた文字数で大きな文字セットをどうやって表示できたのだろうといつも思っています。
[] 8]
Linuxのテキストモードは、Unicodeを表示でき、より多くの色があるため、グラフィックモードドライバーを使用しているようです。しかし、MS-DOSとBIOSのセットアップ画面でそれらがどのように行われるかを説明することはできません。
編集:私は DOS用の日本語テキスト入力 を見つけました
テキストモードの韓国語もあります!
通常の「80x25文字」モードは実際には720x350ピクセルです(つまり、各文字セルの幅は9ピクセル、高さは14ピクセルです)。倍幅文字モード( "40x25")は、各列を2倍にしてビデオコンテンツメモリを節約する(ビデオコンテンツメモリの必要量を半分にする)ことでこれをより広い幅に補間するか、追加のグリフメモリと同一のものを使用することができます。文字セルを18 * 14ピクセルに増やすためのビデオコンテンツメモリの量。
かなり早い段階で( [〜#〜] ega [〜#〜] が導入されたときに行われたと思います)、IBMPCのテキスト表示モードにユーザー定義の文字グリフのサポートが追加されました。
IBM PCの通常のテキストモードは、特定のアドレスでの連続4000バイトのビデオコンテンツRAMです。これらは、1バイトの文字属性(最初は点滅、太字、下線など)として読み取られます。 ;後で前景色と背景色、点滅/ハイライトに再利用されるため、テキストモードでは16色に制限されます)および表示される文字を説明する1バイト表示される実際のグリフ各文字のバイト値は他の場所に格納されます。
つまり、画面上で一度に256個の異なるグリフを処理でき、各グリフを9x14の1ビットビットマップとして表すことができる限り、メモリ内のグリフを置き換えるだけで、文字の外観を変えることができます。 。一部には、これはmode con codepage select
がDOSで行ったことの一部でした。 これは比較的簡単です。
256を超える個別のグリフが必要であるが、画面上のグリフの数を減らして使用できる場合は、倍幅(18ピクセル幅)のグリフを使用した40x25スキームを使用できます。ビデオコンテンツの合計量RAMが固定されており、グリフビットマップメモリを増やすことができると仮定すると、4バイトごとに2バイトを使用して、1つの画面上のグリフを表すことができます。 、2 ^ 16 = 65,536の異なるグリフ(空白のグリフを含む)にアクセスできます。大胆に感じる場合は、2 ^ 24〜16.7Mの異なるグリフにアクセスできる2番目の属性バイトをスキップすることもできます。これらのアプローチは両方とも特別なソフトウェアサポートに依存しますが、ハードウェアとファームウェアの部分は非常に簡単です。18x14の1ビットピクセルで65,536グリフは、約2 MiBになります。これは、当時はかなりの量ですが、克服できない量ではありません。18x14で256グリフ1ビットピクセルは約8KiBであり、EGAが開発され導入された1980年代前半でも絶対に妥当でした。
基本的な米国英語には少なくとも62個の専用グリフ(0〜9の数字、大文字と小文字のAZの文字)が必要なので、米国英語のテキストを同時に表示できるようにする場合は、180〜190個のグリフのようなものを使用できます。時間とグリフあたり8ビットで行きます。初期のIBMPCアーキテクチャーなど、リソースに制約のある環境で行うことを選択する可能性のある、米国英語の同時サポートなしで生活できる場合は、すべてのグリフにアクセスできます。
いくつかのトリックを使えば、おそらく2つのスキームを組み合わせて組み合わせることができます。
実際にどのように行われたかはわかりませんが、これらは両方とも、特に限られた文字数の「派手な」アルファベットを取得するための実行可能なスキームです。 StackExchangeの前にしばらく座っているだけで思いつくことができるテキストモードのプレーンなIBMPC画面。これを実際に簡単にする追加のグラフィックモードがある可能性は完全にあります。
また、テキストモードとテキストを表示するグラフィカルモードの違いに注意してください。 )。おそらくかなり普遍的にサポートされているVESAを介してグラフィカルモードを使用している場合は、文字グリフの描画に関しては自分で行うことができますが、描画方法についてもはるかに自由です。たとえば、Windows NTのテキストベースの部分(Windows XPが属する製品ファミリ)は、Windows NT 4.0ブートを含むテキストを表示するためにグラフィカルモードを使用していると確信しています。画面とBSOD。
ウィキペディアの「VGA互換テキストモード」ページといくつかのVGAプログラミング本で何かを見つけました。
EGAテキストモードとVGAテキストモードの両方で、画面上に同時に512のグリフ、またはそれぞれ256のグリフを持つ2つのバンクを使用できます。アトリビュートビット3(フォアグラウンドカラー強度)は、バンクAまたはBから選択することもできます。通常発生するのは、デフォルトでAとBの両方のフォントレジスタが同じアドレスを指し、256個のグリフのみを提供することです。したがって、それが機能するためには、フォントレジスタを正しいアドレスに設定する必要があります。
各バンクには8192バイトがあり、バンク内の256個のグリフのそれぞれには32バイト(幅8ピクセル、高さ32ピクセル)があります。文字の正しい高さを伝えるために、スキャンラインカウントレジスタを設定できます。 VGAカードは画面上に400スキャンラインを印刷し、EGAは画面上に350スキャンラインを印刷するため、25文字の行を提供するために、文字の高さをそれぞれ16スキャンラインと14スキャンラインに設定します。また、VGAでは、各グリフの幅は8または9ドットですが、9番目の列は空白であるか、8番目の列が繰り返されています。両方のバンクのこれらすべてのグリフは、ユーザー定義できます。
一部の言語で256を超える異なる文字を画面に表示するにはどうすればよいですか?上記の例では、それぞれの特殊な外国文字は2つのグリフ(左と右)以上で構成されています。たとえば、最初のバンクAの128個のグリフをASCIIテキスト用に設定しても、バンクAの128個のグリフ+バンクBの256個のグリフ= 384個のグリフをカスタマイズできます。 。
また、左右を組み合わせて巨大な文字セットを作ることもできます!たとえば、384個のユーザー定義グリフから、左側に184個、右側に200個を予約するとします。つまり、184 * 200 = 36800の異なる文字を使用できます。 (確かに、それらのほとんどはおそらくその言語では無効な文字ですが、それでもかなりの数の有効な組み合わせを取得できます)。
上記の日本語の例では、左側のグリフを共有する「ha」と「ba」の文字があります。 「si」と「zi」の文字についても同じです。 「ko」と「ni」の右側は非常に似ているため、同じ右側のグリフを共有できます。 「ru」と「ro」の文字についても同じことが言えます。優れたデザインを使用すると、文字セットを非常にうまく拡張できます。 「le」文字の右側のグリフが画面の左上(灰色)に表示され、垂直スクロールバーの上下のボタンも変更されました。これは、バンクAの少なくとも一部を意味します。新しいグリフに対応するためにも使用されました。
結論として、初期のPC時代のBIOS文字列関数はUnicodeに対応していませんでしたが、そうである必要はありません。 512個のグリフをカスタマイズし、正しいEGAまたはVGAレジスタを設定するだけで済みました。たとえば、「!@」「#$」「%^」「&*」「çé」「ñÑ」グリフを(バンクAまたはBの)外国文字に合わせてカスタマイズし、BIOSに「!」を出力させることができます。 @#S%^&*çéñÑ "文字列を一度に。 BIOSはグリフをチェックしませんでした。また、ビデオメモリに直接書き込むことができるため、BIOS機能をまったく使用できませんでした。バンクBのグリフを使用するには、文字の前景色属性を8〜15(明るい色)の値に設定するだけです。
(私の悪い英語でごめんなさい)
これは、@MichaelKjörlingが言っていることを単純化しています。
テキストモードでは、画面上の文字ごとに1バイトの「画面メモリ」があり、各画面位置に表示される文字をアダプタに通知します。 (アダプターに下線、点滅などの色やものを指示する「属性」バイトもあります)。
アダプタはこのバイトを使用して、小さい8x12または文字のビットマップを持つ別の「文字テーブル」にインデックスを付けます。 DOSは、この文字テーブルをコードページと呼びます。
CGAから、アダプタのRAM内の特定の場所で文字テーブルを取得するようにアダプタに指示できます。各アダプターには、そのカードのデフォルトの「フォント」(標準のIBMフォント)を持つ文字ROMがありますが、アダプターにRAM内の場所に切り替えるように指示できます。そこにあなた自身の画像を置いてください。
ソフトウェアが何が起こっているかを知っている限り、文字テーブルの画像を指す画面メモリ内のコードは、ASCIIコードと一致していませんが、一致している方が簡単です。印刷できないASCII文字である1-31の画面メモリコード(および文字テーブルの形状)があることに気付くでしょう-しかし、画面メモリに直接書き込むことによって(GW-BASICのDEFSEG = &HB800 : POKE 0,1
のメモリが好きです)一番上の文字をスマイリーに変更することを思い浮かびます)あなたはまだそれらを表示することができます。
したがって、適切な画像をアダプタのRAMに配置し、必要なソフトウェアサポートがあれば、他の言語を表示しても問題ありません。
調査を行いましたが、予想どおり、VGAテキストモードでは512文字を超える文字を使用する方法がないため、グラフィックモードを使用するか、特別なハードウェアサポートが必要です。
DOS自体は、1文字あたり1バイトを超える文字セットで印刷することはできません。これは、BIOS機能を使用し、BIOS機能が2 x256文字サイズのフォントを超えることのできないVGAハードウェアを使用するためです。したがって、これもDRIVERの仕事のように聞こえます。これは、グラフィックモードを使用して広範なフォントをレンダリングするものです。すでにいくつかのグラフィカルDOSテキストエディタなどでUnicodeフォントをサポートしており(ありがとう:-))、DBCSまたはUTF-8のどちらを使用する場合でも、どちらも「文字のサイズは1バイト以上になる可能性があります」を共有して「異常」を処理します。
DOSの日本語版(DOS/V) は最初のアプローチを使用し、はによってテキストモードをシミュレートします)特別なドライバを使用して、グラフィックモードで文字をレンダリングします。このドライバーは、DOSのテキスト表示機能を拡張するためのメカニズムであるIBMV-Text標準に準拠しています。さまざまな 16/24/32/48ドットフォント このように選択できます
他のいくつかのテキストモードシステムも同じ手法を使用しています。 FreeDOSでは、いくつかの特別なドライバをロードできます 日本語サポート用
レンダラーはint10hおよびint21hの呼び出しをインターセプトし、テキストを手動で描画するため、通常の英語のプログラムでも機能します。ただし、VGAメモリに直接書き込むプログラムでは機能しません。日本語の文字を印刷するために、int5hとint17hもフックされます。
DOS/Vマニュアル によると、後でIBM BIOSは、以下の4つの新機能を備えたint15hまでのV-Textのサポートも追加しました。
5010H Video extension information acquisition
5011H Video extension function registration
5012H Video extension driver release
5013H Video extension driver lock setting
これが私の古いPCのBIOSで日本語のサポートを見た理由でもあると思います
それにもかかわらず、グラフィックモードの遅さ スクロール中にグリッチが発生する可能性があります 特別な処理が必要です
DOS/Vは、実際には日本語テキストモードの最初のソフトウェアソリューションです。
一方、IBM Japanでは、1980年代初頭から、日本語の文字表示の問題に対するソフトウェアソリューションを作成するための本格的な研究が行われていました。高解像度VGAモニター、より高速なプロセッサー、より大きなメモリーとハードドライブの出現により、IBMの藤沢研究所と大和研究所の設計者は、漢字文字の形状とサイズに関する情報をディスクに保存し、拡張メモリにロードできることに気付きました。グラフィックモードのVRAMを介して表示されます。 (ちなみに、DOS/Vの「V」は、ソフトウェアで日本語の文字を表示するために必要なVGAモニターに由来します。)
同じ記事によると、DOS/Vが発明される前は、他のシステムはすべて漢字ROMハードウェアで必要です
すべてのブランドのコンピューターは、ハードウェアソリューションを使用して日本語の文字の表示を処理し、すべての文字のデータを漢字ROMと呼ばれる特別なチップに保存しました。この方法では、キーボード入力の各文字の2バイトコードをCPUに送信する必要があり、CPUは、対応する文字をkanji ROMからフェッチし、テキストを介して画面に送信しました-モードVRAM。kanjiROMを使用すると、各文字の形状が固定され、テキストモードVRAMを使用すると、各文字に標準の16x16ドットサイズが設定されます。
たとえば、 IBM Personal System/55 は、日本語フォントの特別なグラフィックアダプタを使用しているため、実際のテキストモードになります。
1980年代初頭、IBM Japanは、アジア太平洋地域向けに2つのx86ベースのパーソナルコンピューターライン、IBM5550とIBMJXをリリースしました。 5550は、ディスクから漢字フォントを読み取り、1024 x768の高解像度モニターにグラフィック文字としてテキストを描画しました。
https://en.wikipedia.org/wiki/DOS/V#History
IBM 5550と同様に、テキストモードは8色で1040x725ピクセル(12x24および24x24ピクセルフォント、80x25文字)で、フォントROMから読み取った日本語文字を表示できます。
AXアーキテクチャ 標準のEGAの代わりに特別なJEGAアダプタを使用します
AX(Architecture eXtended)は、1986年頃に始まった日本のコンピューティングイニシアチブであり、PCが特殊なハードウェアチップを介して2バイト(DBCS)の日本語テキストを処理できるようにすると同時に、外国のIBMPC用に作成されたソフトウェアとの互換性を可能にしました。
.。
漢字を十分に明瞭に表示するために、AXマシンには、当時他の場所で普及していた640x350の標準EGA解像度ではなく、640x480の解像度のJEGA(ja)画面がありました。ユーザーは通常、「JP」と「US」を入力して日本語モードと英語モードを切り替えることができます。これにより、AX-BIOSとIMEが呼び出され、日本語の文字を入力できるようになります。
それ以降のバージョンでは、VGAでのソフトウェアエミュレーション用に特別なAX-VGA/HハードウェアとAX-VGA/Sも追加されています。
ただし、AXのリリース後すぐに、IBMは、AXが明らかに互換性のないVGA標準をリリースしました(非標準の「スーパーEGA」拡張機能を宣伝しているのはそれらだけではありません)。その結果、AXコンソーシアムは互換性のあるAX-VGA(ja)を設計する必要がありました。 AX-VGA/HはAX-BIOSを使用したハードウェア実装でしたが、AX-VGA/Sはソフトウェアエミュレーションでした。
利用可能なソフトウェアの不足やその他の問題により、AXは失敗し、日本でのPC-9801の優位性を打ち破ることができませんでした。 1990年、IBMJapanはDOS/Vを発表しました。これにより、IBM PC/ATとそのクローンは、標準のVGAカードを使用して追加のハードウェアなしで日本語のテキストを表示できます。その後まもなく、AXは姿を消し、NEC PC-9801の衰退が始まりました。
NEC PC-98シリーズ ディスプレイコントローラーにROM
標準のPC-98には、2つのµPD7220ディスプレイコントローラー(マスターとスレーブ)があり、それぞれ12KBのメインメモリと256KBのビデオRAM)があります。マスターディスプレイコントローラーはフォントROMを処理し、JISXを表示します。 0201(7x13ピクセル)およびJIS X 0208(15x16ピクセル)文字
中国語と韓国語の状況はわかりませんが、同じ手法が使われていると思います。それを達成する他の方法があるかどうかはわかりません