風船

 

ふっ、ふっ、ふうせんぅ~~~🎈😍←風船大好き

RUN すると様々な色の風船が飛びます。

 

MSX は VPOKE で 256 文字全てのキャラクターを変更できます。

SCREEN 1 の場合、コード×8~コード×8+7 を置き換えます。

更に SCREEN 1 では 8 文字おきに色を変更できます。

&H2000+コード÷8 で、値は文字色×16+背景色です。

そのため、風船の丸い部分はは 8 文字おきに置き換えてあります。

COLOR 1 の黒を背景にして 2~15 を風船の色に使っています。

MSX2 以降であれば COLOR=(1,R,G,B) を使っても良いですね。

 

IchigoJam BASIC/C 言語IchigoLatte(javaScript)/Ruby/FORTH
IchigonQuest 版もあります。

100 DEFINT A-Z:DIM B(15)
110 COLOR 15,1,1:SCREEN 1
120 KEY OFF:WIDTH 32
130 FOR L=0 TO 15
140 READ B(L):NEXT L
150 FOR C=2 TO 15
160 FOR L=0 TO 7
170 VPOKE (120+C*8)*8+L,B(L)
180 NEXT L
190 VPOKE &H2000+(120/8)+C,1+C*16
200 NEXT C
210 FOR L=0 TO 7
220 VPOKE 248*8+L,B(L+8)
230 NEXT
240 C=RND(1)*14+1
250 X=RND(1)*30+1
260 LOCATE X,23:PRINT CHR$(128+C*8)
270 LOCATE X,23:PRINT CHR$(248);
280 TIME=0
290 IF TIME<2 GOTO 290 ELSE GOTO 240
300 DATA &H38,&H74,&HFA,&HFE
310 DATA &HFE,&H7C,&H38,&H10
320 DATA &H10,&H08,&H08,&H10
330 DATA &H10,&H08,&H08,&H10

WebMSX では起動してから乱数を発生するタイミング(TIME の値)が

毎回同じになってしまうので、現在時刻の秒から乱数を生成しています。

10 GET TIME T$
20 R=VAL(RIGHT$(t$,2))
30 R=RND(-R)*1

風船 version 2 C 言語版

上の BASIC 版風船に加えて、次を実現しています。

  • MSX2 以降の VDP 縦スクロール機能を用いてスムーズな表示にしています。
  • 縦幅を 212 ドット(26.5 行)にしています。

常に VRAM の複数バイトを一度に切り替える必要があるため、

さすがに BASIC では遅くなってしまうので、
z88dk を使用して C 言語で生成し、マシン語で動作させています。

 

zcc +msx -lndos -create-app -subtype=disk -bn balloons balloons.c

 

BALLOONS.MSX が生成したマシン語の実行ファイルです。
BASIC より BLOAD"BALLOONS.MSX",R で実行します。

スペースキーで終了し、BASIC に戻ります。


風船 version 2 MSX-DOS .com 版

これを見て、「MSX-DOS の実行ファイルだとスクリーンセーバになるのでは?」
と思った人のいるのでは?……はい、そう思って BALLOONS.COM も作成しました。

 

しかし、MSX-DOS では 0100h から実行ファイルが入りますが、
MSX の BIOS も同じ番地にあります。

そのためそのままでは動作せず、MSX-DOS 向けにプログラムの改修を行っています。

また、任意のキーでプログラムを終了できるようにしてあります。

 

ソースファイル GitHub Gist


風船 z88dk モノクロスプライト版

Z80 CPU の様々なプラットフォームで動作するように

z99dk のモノクロスプライトで作成したバージョンです。

グラフィック画面に線画しているため、

MSX ではスクロールを用いている BASIC よりもカクカクしていますが、

他の様々な環境でも動作します。

MSX でも SCREEN 2 と SCREEN 3 で動作できます。