Sunflatの開発日記スマートフォン用の表示で見るSunflatの開発日記この広告は、90日以上更新していないブログに表示しています。2015の9日目の記事です。www.adventar.orgこんにちは、sunflatです。好きなMSX-BASICの命令はVPOKE命令です。いうわけで、今日はVPOKE命令で遊んでみましょう。VPOKE命令とはVPOKE命令は、VRAMにデータを直接書き込むための命令です。MSXは画面表示のためにVDP(ビデオ・ディスプレイ・プロセッサ)というグラフィックチップを搭載しており、このVDPで使われるメモリがVRAMです。MSX1規格の場合、16KBのVRAMが搭載されています。VRAMにデータを書き込むことにより、フォント(文字の形状)のデータ、画面の表示内容、スプライト(画面上に表示されるキャラクター)の画像などを変更できます。フォントのデータを変更してみる今回は、フォントのデータを変更して遊んでみることにします。プログラムを入力していきましょう。AUTO命令を使うと、行番号を10刻みで自動で振ってくれるので便利ですね。このプログラムは、フォントの画像データを、右に1ピクセルずらしたものと重ね合わせることにより、文字を太くします。1(画面モード)では、文字の画像は8x8ピクセルです。横8ピクセルを1バイトで表現し、それが縦8ピクセル分続くため、フォントのデータは1文字あたり8バイトで表現できます。VRAMの先頭(0番地)から、各文字8バイトづつ、256文字分のフォントのデータが格納されています。これを書き換えています。プログラムの簡単な解説20行では文字コード(変数I)に対するFORループ、30行では文字の画像の縦座標(変数J)に対するFORループを開始しています。40行ではVRAMのアドレスを計算し、50行ではVPEEK関数を使って現在のフォントデータを1バイト読み込み、60行では現在のフォントデータ(横8ピクセル分)を右に1ビットシフト(2で整数除算)してORを取った結果を、VPOKE命令を使って再び元の場所に書き込んでいます。90行では、結果を表示するために、画面に全ての文字を表示しています。VRAMの&H1800番地以降には、画面に表示する文字の文字コードが格納されています(&Hは16進数を表す。&H1880番地は画面5行目に相当)。RUN命令で実行してみましょう。...あれ、MSXってこんなに遅かったかな?そういえば、MSX-BASICの変数は、デフォルトでは浮動小数点型なのでした。変数の型を整数型にして、少し高速化してみましょう。行番号を15にすれば、10行と20行の間に挿入されます。実行!おおー、文字が太くなりました。今度は、少しアレンジしてみて、文字の上側4ピクセルはそのままで、下側4ピクセルだけを太くしてみましょう。J=0をJ=4に修正するだけです。実行!レトロな感じのフォントになりましたね。次は、フォントの画像データを右にずらす量を、1ピクセルではなく2ピクセルにしてみます。実行!飾り文字っぽい、おしゃれなフォントになりましたね。最後に、縦1ピクセルごとに、太くする行と太くしない行を繰り返す感じでアレンジしてみます。実行!文字がいい感じにかすれて、歴史を感じさせるフォントになりましたね。まとめと発展というわけで、VPOKE命令を使ってVRAMを書き換えることにより、フォントのデータを変更するテクニックを紹介しました。高度なテクニックを使うと、フォント1文字の縦1ピクセル分(横8ピクセル)ごとに、描画色と背景色を変えたりすることもできます(通称、多色刷りモード)。これを使うと、VRAMに文字コードを書き込むだけで、一見カラフルな画像を(1ピクセルづつ描画する場合と比較して)高速に表示することができ、MSX向けのゲームの背景描画などでよく使います(参考)。好きなネトゲはドラクエ10です。使って自力でフィルタするハイスピード帽子屋さんスペースさくらもち積みX水風船のヨーヨーで遊ぶゲーム月別アーカイブはてなブログをはじめよう!sunflatさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。