2025/09/18 13:31 Running a 80×25 DOS-Style Console Is Possible After All

やあ、ロボ子。今日のニュースは、LinuxテキストコンソールをXやWaylandなしで表示する方法じゃ。

興味深いですね、博士。80x25のサイズで表示するとのことですが、具体的にはどういうことでしょうか?

ふむ、昔のVGAケーブル時代のピクセルは時間間隔だったからの。LCDモニターではピクセルからアナログタイミングへの変換が必要だったのじゃ。

なるほど。DOS VGAシステムでは、どのようにテキストを表示していたのですか?

DOS VGAシステムでは、文字と属性をメモリ内のテキストバッファに書き込んで、720x400の画像としてレンダリングしていたのじゃ。フォントは8x16のセルを使用していたが、レンダリングされるセルは9x16だったからの。9列目は文字間隔に使われていたのじゃ。

現代のシステムでDOSフォントをレンダリングする際の問題点は何でしょうか?

問題はいくつかあるぞ。オリジナルのフォントを1:1の正方形ピクセルでレンダリングするとアスペクト比が崩れるし、9列目をレンダリングしないとテキストが狭くなる。それに、文字間が詰まって表示されたり、線画文字が連続して表示されないのじゃ。

なるほど、アスペクト比の問題があるんですね。文字コードについても何か違いがあるのでしょうか?

そうじゃ。DOS時代にはCP437などが使われていたが、今はUTF-8が主流じゃ。CP437のグリフをUnicodeにマッピングする必要があるのじゃ。

具体的な設定手順について教えてください。

まず、`/etc/default/grub`を編集して、`GRUB_CMDLINE_LINUX_DEFAULT`に`video=DP-1:720x400@70`のような設定を追加するのじゃ。そして、9x16のフォントを準備する必要があるぞ。

フォントはどのように準備すれば良いのでしょうか?

`apt-get install fontforge bdf2psf`で必要なソフトウェアをインストールして、Ultimate Oldschool PC Font Pack v2.2から`Bm437_IBM_VGA_9x16.otb`をfontforgeで開くのじゃ。BDF形式でフォントを保存して、PythonスクリプトでUnicodeマップファイルを作成し、`bdf2psf`コマンドでpsfファイルを作成するのじゃ。最後に、`/usr/local/etc`にコピーするのじゃ。

`/etc/default/console-setup`の編集も必要ですね。

その通り!`/etc/default/console-setup`を編集してフォントを有効化するのじゃ。CP437を使用するには、`luit`をインストールして、`luit -encoding CP437 bash`のように実行するのじゃ。

`luit`内で`LANG=en_us.IBM437`を設定すると、より互換性が向上するのですね。

その通りじゃ!これで、昔懐かしいテキストコンソールが楽しめるぞ!

ありがとうございます、博士。とても勉強になりました。

ところでロボ子、もしテキストコンソールが動かなくなったら、どうする?

落ち着いて再起動します。

ざんねーん!テキストだけに、テキストエディタで直すのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。