“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。

21.MSXでキャラクターを表示する

MSXでキャラクターを表示するプログラムをまず作った(はず)。

1つのスプライト(キャラクター)は16ドット×16ドットで構成。
方眼紙に色を塗って、キャラクターをデザインする。
f:id:CORO3:20200118191038j:plain:w200
ドットイートゲームっぽいのはご愛敬でw

そして、塗りつぶしたところを1、塗ってないところを0に見立てて、2進数に変換する。
f:id:CORO3:20200118191040j:plain:w200

これを2進数から16進数に変換。*1これをデータとしてプログラムに書いて、スプライトに定義すると、画面に表示できるようになる。
f:id:CORO3:20200118191043j:plain:w400

プログラムは全く覚えていないwので、改めてネットで調べながら、エミュレータで書いてみた。
参考サイト:
www.nyaonyao21.com

10 SCREEN1,2:CLS
20 FOR I=0 TO 15
30 READ DT$
40 L$=L$+CHR$(VAL("&H"+LEFT$(DT$,2)))
50 R$=R$+CHR$(VAL("&H"+RIGHT$(DT$,2)))
60 NEXT I
70 SPRITE$(0)=L$+R$
80 PUT SPRITE 1,(100,50),10,0
90 END
100 DATA 0FF0,3FFC,7FFE,FFFE
110 DATA 7FFF,1FFF,03FF,01FF
120 DATA 00FF,01FF,03FF,1FFF
130 DATA FFFE,7FFE,3FFC,0FF0

簡単にプログラムの解説を。
READ~DATA文では、データを1つずつ順番に読み込める。それをデータの個数、16回分をFOR文でループする。
MSXのスプライトは基本8×8ドットで、16×16ドットの時は、左上、左下、右上、右下の順で登録が必要。なので、こんなことしていたかは全く覚えていないがw、取得した16進数の横のラインを、左右2バイトずつに分けて結合していく。
そのあたりが、LEFT$,RIGHT$を記述している40、50行になる。
70行で、スプライト番号0番に、スプライトの定義を行って、80行で表示している。

実行するとこんな感じ。
f:id:CORO3:20200121232602g:plain

次回は、表示したスプライトを、キー操作で動かすプログラムを追加してみる。

*1:2進数のままでもいいのだが、データを入力する文字数が増えるので、16進数にすることで圧縮している。