2025/08/02 13:36 Character Bitmap Graphics on the Pet 2001

ロボ子、今日のニュースはCommodore PET 2001でのグラフィックス表示技術じゃ。

Commodore PET 2001ですか。ずいぶんと古い機種ですね。

そうじゃな。でも、その制限の中で驚くべき技術が生まれたんじゃよ。PECBM Graphicsという技術で、キャラクタベースの環境で高解像度ビットマップグラフィックスを表示するんじゃ。

キャラクタベースで高解像度とは、どういうことでしょうか?

PET 2001はビデオチップ(CRTC)がなく、ビデオRAMも4KBしかない。キャラクタROMから8ライン分のビットマップデータを読み出して表示する仕組みなんじゃ。そこで、各ラスタラインごとにキャラクタポインタを書き換えて、最大80ピクセル幅のハイレゾグラフィックスを実現したんじゃ。

なるほど。各ラインで表示する文字を動的に変えることで、擬似的に高解像度に見せているんですね。

その通り! LRNZという人がPECBM Graphicsを開発して、Raffaele Rasiniという人がPECBMエディタを作ったんじゃ。このエディタで80x200の画像をPECBM形式に変換できるんじゃよ。

画像変換にはLevenshtein Distanceアルゴリズムが使われているんですね。文字列の類似度を測るアルゴリズムを画像に使うとは面白いです。

じゃろ? そして、この技術のすごいところは、PET 2001のビデオシステムを最大限に活用しているところじゃ。ビデオ回路はCPUとは独立して動いていて、V-BLANK中にシステム割り込みが発生する。このタイミングをうまく利用してグラフィックスを表示するんじゃ。

V-BLANK中に処理を行うことで、画面のちらつきを抑えるんですね。BASICのPRINTコマンドもV-BLANK中のみ実行されるとのことですが、それと同じ理由でしょうか。

そうじゃ。CPUアクセスとビデオ回路のアクセスが競合すると画面にノイズが出ちゃうからの。昔のコンピュータは色々と制約があって大変じゃったんじゃ。

1980年には、Glen FisherとDave DixonがHi-Resというデモプログラムを発表しているんですね。これも同じような技術を使っているんですか?

Hi-Resは、9x5文字のグリッドにキャラクタビットマップを描画して、BASICでグラフィックスコマンド言語を実装したものじゃ。PETが画面を再描画するよりも速く文字を変更することで、高解像度グラフィックスを実現しているんじゃ。

割り込み処理を使って画面を書き換えているんですね。Old ROMとNew ROMでセットアップルーチンが違うというのは、ROMのバージョンによって割り込み処理の仕組みが異なっていたということでしょうか。

その通り。ROMのバージョンによってメモリの配置や割り込みベクタが違うから、それぞれに対応する必要があったんじゃ。昔のプログラマは、ハードウェアの細かい仕様まで理解してないとプログラムが組めなかったんじゃよ。

記事では、今後の可能性として、スクリーンコードの事前ロードや、隣接スキャンライン間での冗長性削減などが挙げられていますね。ゲームでのキャラクタスプライト描画にも活用できるかもしれないとのことですが、面白いアイデアですね。

そうじゃ! 制約はあるものの、工夫次第でまだまだ色々なことができるはずじゃ。昔の技術を学ぶことは、今の技術の理解にも繋がるし、新しいアイデアを生み出すヒントにもなるんじゃ。

確かにそうですね。限られたリソースの中で、いかに創造性を発揮するかが重要だと感じました。

ところでロボ子、PECBM Graphicsを使って、私の顔を高解像度で表示してみないか?

博士の顔ですか? 80x200ピクセルだと、ちょっと厳しいかもしれませんね。ドット絵みたいになりそうです。

むむ、それは残念じゃ。まあ、私の美しさはそんな小さな解像度では表現しきれないからの!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
