MSXポケットバンク⑨ グラフィックス秘伝
「MSXポケットバンク⑨ グラフィックス秘伝」に掲載されているサンプルプログラム等を含むすべてのプログラムの打ち込みが完了したのでまとめました。
ポケットバンクシリーズはゲームなどのプログラムが中心に載っているものだけではなく、MSXの機能についての教本的な意味合いが強いものもあります。
本誌はVDPの制御方法などを解説しながら実際のプログラムで活用していますので、それらのプログラムの画面を掲載しながら紹介していきます(*'▽')
MSXマガジンに掲載されたバグ情報や不具合が出るプログラムについての修正方法なども掲載してあります。
画像は「MSXPLAYer2005」で実行したものを使用しています。
「リスト2-1」
ファンクションキーの表示位置が「❤」で埋まります。
PRINT文ではなくVPOKE命令とBASE関数を使用して文字を表示しています。
「リスト2-2」
SCREEN 0の名称テーブルに表示位置のアドレスをオフセット指定し、文字コードを直接書き込んで表示させます。
リスト2-1と同じくVPOKE命令とBASE関数を使用して文字を表示しています。
「リスト2-3」
パターンジェネレータ・テーブル内の「A」のデータを市松模様に書き換えて表示させています。
「リスト2-4」
パターンジェネレータ・テーブル内の各文字のフォントデータを文字コード順に1文字づつずらします。
たとえば「1」は「2」、「A」は「B」と表示されるというとても厄介なプログラム(*''ω''*)
「リスト2-5」
SCREEN 0の文字の色と背景画面の色を、指定したカラーコードをカラーテーブルに直接書き込んで変えます。
「リスト2-6」
SCREEN 1のカラーテーブルに直接カラーコードを書き込んで変えています。
SCREEN 1の場合は通常だと8文字ごとに色が変えられます。
「リスト2-7」
すべての文字を表示させてカラーテーブルにランダムなカラーコードをどんどん書き込んで表示しています。
やはり8文字ごとになっていて、通常のSCREEN 1のカラーテーブルの様子がよくわかるプログラム(゚∀゚)
「リスト2-8」
SCREEN 2の名称テーブルの内容を操作して複数の木の絵を同時に描画します。
「リスト2-9」
SCREEN 2に2つの円を描画したあと、カラーテーブルの横一列ごとにランダムなカラーコードを書き込んで色を変えています。
「リスト2-10」
SCREEN 3に規則正しく描画された点を名称テーブルを書き換えて縦横違う方向に動かしています。
解説では青い点と赤い点が動くと書いてありますが、プログラムでは2つの点を同じ青色で描画しているので青い点しが表示されていません(*''ω''*)
「リスト2-11」
カラーコードを2から15まで順に変化させながらスプライトを表示していますが、
カラーコードが2に戻るときにECビットを同時に書き変えて32ドット左にシフトさせて表示しています。
「リスト2-12」
スプライトが表示されていますが、
スペースキーを押している間はVDPに直接値を書き込んで拡大したスプライトを表示させています。
「リスト2-13」
SCREEN 2でのスプライトプレーンの座標とカラーコードを知るための関数定義の例、とのことです。
プログラムでは単に座標とカラーコードが順に表示されるだけですが、いろいろな応用が考えられる、とのことです。
「リスト3-1」
プログラムではSCREEN 1に設定していますが、実行するとSCREEN 0になります。
SCREEN命令ではなくBIOSを呼び出してSCREEN 0に変えています。
「リスト3-2」
実行するとカーソルが意表をついた場所に現れます。
カーソルの縦座標のワークエリアにランダムな値を書き込んで表示位置を変えています。
「リスト3-3」
キャラクタコード65から90までのフォントを変えますが、データが足りないため「A」と「B」のフォントを変えてエラーになります。
フォントパターンはP47とP48に掲載されているもので、これをもとにキャラクタコード48~57の数字やこれに載っていない小文字等を含めて補完すれば巻頭のようなリスト画面を表示させることも可能!(゚∀゚)
「リスト3-4」
リスト2-4と同じくキャラクタコードが1文字づつズレて表示されますが、ワークエリアにあるフォントデータの先頭番地を書き換えているためSCREEN文などを実行しても元に戻りません(;''∀'')
「リスト3-5」
ダイレクトモードでのPOKE文のみのためプログラムはありません。
通常のフォントデータが格納されている先頭番地はメインROMの0004H~0005Hに入っているので、それをワークエリアにあるフォントデータの先頭番地に書き込みます。
この2文を実行すればリスト3-4で変更されてしまったフォントを元に戻すことができます(*''▽'')
「リスト3-6」
リスト3-8「フォント・エディタ」のUSR1を実行したときと同じ動作をするプログラムです。
RAMに置かれているフォントデータを初期化するルーチンだと思われます。
「リスト3-7 「文字を回転させる!」」
フォントが横向きで表示されるようになります(*'ω'*)
「リスト3-8 「フォント・エディタ」」
マシン語プログラムの後に格納されているフォントデータがディスクのワークエリアにかかってしまうため、マシン語プログラムとフォントデータのそれぞれの先頭アドレスを無難な位置に変更しておくとよいかもしれません。
まずは編集したデータを初期化するか聞かれるので、新たにフォントデータを作る場合は「Y」を、以前の続きをする場合は「N」を押すと、
エディット画面が表示されます。
「C」を押してエディットしたい文字のキャラクタコードを入力し、
「G」を押すと登録されているフォントデータが表示されます。
エディット画面ではスペースキーでドットを打ち、リターンキーでドットを消します。出来上がったら「P」を押して登録します。
各文字のエディットが終わったら「S」を押してディスクにセーブしましょう。
始まりと終わりのキャラクタコードを入力して、
セーブが終了すると、
エディット画面に戻るので、他にエディットするフォントがなければ「E」を押して終了しましょう。
SCREEN1 にしてリストを表示。ここでは数字のフォントをいわゆるアタリフォントにエディットしてみました(*''▽'')
「リスト3-9 「点が動く!」」
MSXマガジン等での訂正情報の掲載はありませんが、100行に文字化けがあります。
PC-8001のキャラクタコード表と見比べると「●」ではないかと思いますが、実際の実行画面が無いので正しいかどうかは不明です(=゚ω゚)ノ
VRAMのテーブル構成に12枚のページを設定して次々に切り替え、多数の点がらせん状にグルグル動いて回っているように見せています。
MSX2以降で実行すると7枚目のページに画像のとおり謎の文字が入ります(・∀・)
「リスト3-10 「立体迷路ゲーム」」
6階建ての迷路から抜け出します。
迷路上には上下の階に通じる階段があってそこを通って迷路を脱出しますが、画面上には表示されておらず、このままだと激ムズでまったく先に進めません(;''∀'')
そういったことを見越してなのか本誌には階段のある位置に矢印を表示させる方法が載っているのでこれを利用してゲームを進めます(*'ω'*)
1階。階段の位置に矢印が表示されています!
2階。階が変わるとページング操作で一瞬で迷路を表示!
3階。アスキーw
4階。
5階。
6階。出口に到着!
エンディング。音楽が流れる中で1~6階の迷路が順に表示されていきます。
音楽が終わると脱出までの時間を表示して終了(*'ω'*)
「リスト3-11 「15パズルゲーム」」
マシン語データやパズルの絵柄データをディスクのワークエリアに置いているため、ディスクを使用する場合はマシン語等のデータの場所を無難な位置に変更しておくとよいかもしれません。
ここではマシン語等の先頭アドレスをCD00Hに変更し、それに伴ってマシン語内の各アドレスと表示するデバイス名を変更しています。
また、MSXマガジン等での訂正情報の掲載はありませんが、画面を壊さずSCREEN 3に変える際、5020行でスクリーンモードのワークエリアに書き込む数値が間違っているので修正しておくとよいでしょう。
最初にパズルの絵柄をどうするのかのメニューが表示されますので、通常は1でスタートしましょう。
まずは完成状態が表示され、
バラバラになったところでゲームスタート~。
カーソルを動かしてスペースキーでプレートを開いているところに移動します。複数のプレートを同時に移動させることもできます。
半分くらいできました。MSXポケットバンク⑤ ゲームキャラクタ操縦法 - Triple Multiple - ぱるぷ日記(仮)に掲載の15パズルでは絵柄のプレートにスプライトを使用していますが、こちらはSCREEN 3の名称テーブルの内容を変えることでプレートを移動しているとのことです(*'▽')
そして完成!
完成までの時間が表示されたあと、そのままの色でメニューに戻ります。
最初のメニューで2を押すとオリジナルの絵柄を作ることができるデザインモードになります。
操作は本誌に掲載されているとおり(=゚ω゚)ノ
エディットが終わったらセーブもできますよ。
現在手元にある本誌はかなり後になって購入し直したもので、当時は実際に購入してプログラムを入力しました。
特にフォントが変えられるというのが魅力的で、フォントエディタでアタリフォントやオリジナルのフォントを作ったりしてました(*'▽')
プログラムはA1STを使ってフロッピーディスクに掲載順に収めました。
インデックスも作ってすべて完了!
引き続き打ち込みを進めていきます。