見出し画像

ChatGPTプログラミング:MSX BASIC編

8ビットパソコンが俺を呼ぶ!

今回は、ちょっとマニアックな路線です。

ChatGPTが、MSX BASICのコードを生成できるか試しました。

MSXは、マイクロソフトとアスキーが提携して1983年から登場した8ビットパソコンです。用途は、プログラミング学習とゲームといったところです。果たして、こんな昔のパソコンのコードが生成できるのでしょうかね。

👦
MSX BASICでSCREEN 3で動作するプログラムを作ってください

SCREENモード3というのは、MSXの中でも特殊な画面モードなので、要求としてはちょっと意地悪かもしれません。

それはともかく、コード生成を何度か試してみましたが、けっこう難しいものがありました。ChatGPTが生成するコードを見ると、そもそも行番号がついていなかったり、MSX BASICにない命令を使っていたりと、やはり一筋縄ではいかないようです。

実際、基本ChatGPT-3.5を多用する私も、今回のチャレンジではChatGPT-4を多用しています。ホント、致し方なしです。

それでもなんとか動きそうなコードが出てくることもあります。次もその1つ。画面にラインを描くコードです。動きそうな感じですが、本当に動くんでしょうか?

10 SCREEN 3
20 FOR I=1 TO 1000
30    LINE (RND(1)*255, RND(1)*191) - (RND(1)*255, RND(1)*191), INT(RND(1)*8)
40 NEXT I
50 GOTO 20

実行環境がないじゃん!

動きそうなコードは出てきましたが、忘れてました! 実機をもっていないので確認できません。企画だおれー!

安心してください!
エミュレータがありますよ!

世の中便利になったものです。有志によって作られたエミュレータがオンライン上に公開されていて、それを使えばすぐ実行させてみることができるのです。ありがてー!

というわけで、WebMSXというエミュレータで試すことにしました。

公開しているのは次のサイトです。

上記のコードを動かすのに、さすがに手打ちは面倒です。そこで便利なのが、コードのコピーペースト。次の手順で行えます。

  1. あらかじめコードを[Ctrl]+[C]でクリップボードにコピーしておく

  2. WebMSXの画面をクリックして[Alt]+[V]を押す

  3. 続けて[Ctrl]+[V]を押す

Alt+Vで出てくる画面
Ctrl+Vでコードがペーストされる(最後にEnterキーを押して改行しておく)
run[Enter]で実行
ラインが描かれた

これはすごい! ちゃんと動作しました!(パチパチ)

※プログラムを停止するためのキーは[Ctrl]+[F9]です。

スプライトも表示してみたいじゃん!

8bitパソコンの中でも、MSXならではの機能といえば、

スプライト機能

です。通常キャラクターなどを動かしたい場合には、グラフィックスのドットを書き換えますが、MSXはスプライトにキャラクターを登録しておけば、あとはXY座標を指示するだけで移動してくれるという、ゲーム作りには欠かせない優れ機能です。

そこで、こちらについてもChatGPTでコードの生成をしてみましたが、まともに動作するコードは全滅! 残念ここまでかー。

安心してください。
お手本となるコードがあれば大丈夫ですよ!

ChatGPTをもってしても、ゼロから生成することは困難。しかし、コード生成についていろいろ実験した結果、お手本となるコードを渡して改造をお願いすると、かなり動作率が高くなることを突き止めております。まさにChatGPTの底力ですね。

そこでお手本となるコードを求めてググっって、次のサイトに掲載されている、スプライトをキーボードで動かすコードを利用させてもらうことにしました(感謝です)。

ChatGPTへのプロンプトです。

👦
次はMSX BASICでスプライトを表示して動かすプログラムです。これをスプライトが自動的に動くプログラムにしてください。
<コピペしたコード>

💻
以下に修正版のプログラムを示します。このプログラムは、スプライトが画面の端に達したときに方向を変えるようになっています。

こうして生成されたのが次のコードです。

10 SCREEN 1,2 :X=128:Y=96:DX=1:DY=1
20 FOR I=0 TO 15
30 READ DT$
40 L$=L$+CHR$(VAL("&B"+LEFT$(DT$,8)))
50 R$=R$+CHR$(VAL("&B"+RIGHT$(DT$,8)))
60 NEXT
70 SPRITE$(0) =L$+R$
80 IF X < 0 OR X > 255 THEN DX = -DX
90 IF Y < 0 OR Y > 191 THEN DY = -DY
100 X = X + DX: Y = Y + DY
110 PUT SPRITE 0,(X ,Y),15,0
120 GOTO 80
1000 DATA0000001111000000
1010 DATA0000111111110000
1020 DATA0001111111111000
1030 DATA0011111111111100
1040 DATA0111111111111110
1050 DATA0111111111111110
1060 DATA1111111111111111
1070 DATA1111111111111111
1080 DATA1111111111111111
1090 DATA1111111111111111
1100 DATA0111111111111110
1110 DATA0111111111111110
1120 DATA0011111111111100
1130 DATA0001111111111000
1140 DATA0000111111110000
1150 DATA0000001111000000

ちなみに、キャラクターのデザインですが、続けて以下のプロンプトでボールの形に変更してもらいました。あくまでもノーコードプログラミングに徹します(笑)

👦
次の2進数で表現されたキャラクターデータを、丸いボールの形にしてください。
<キャラクターコード部分のコードをコピペ>

実行すると、画面にスプライトのボールが出てきて、画面の四隅で反射する動きになりました。動きの指定もなにもしていないのに、私がしてほしかった動きそのものです(笑)

しかし、これだけでは飽き足らない私は、さらにChatGPTにお願いしてみました。

👦
プログラムを改造して、ボールを3つ表示して動くようにしてください。

1つしか動かないボールを、3つに増やすとなると、配列を使わないといけませんので、改造といってもちょっと面倒です。

でもスルっと完成。

10 SCREEN 1,2
20 FOR I=0 TO 15
30 READ DT$
40 L$=L$+CHR$(VAL("&B"+LEFT$(DT$,8)))
50 R$=R$+CHR$(VAL("&B"+RIGHT$(DT$,8)))
60 NEXT
70 FOR I=0 TO 2
80 SPRITE$(I) =L$+R$
90 NEXT
100 X(0)=128:Y(0)=96:DX(0)=1:DY(0)=1
110 X(1)=64:Y(1)=48:DX(1)=2:DY(1)=1
120 X(2)=192:Y(2)=144:DX(2)=1:DY(2)=2
130 GOSUB 200
140 GOTO 130
200 FOR I=0 TO 2
210 IF X(I) < 0 OR X(I) > 255 THEN DX(I) = -DX(I)
220 IF Y(I) < 0 OR Y(I) > 191 THEN DY(I) = -DY(I)
230 X(I) = X(I) + DX(I): Y(I) = Y(I) + DY(I)
240 PUT SPRITE I,(X(I),Y(I)),15,0
250 NEXT I
260 RETURN
1000 DATA0000001111000000
1010 DATA0000111111110000
1020 DATA0001111111111000
1030 DATA0011111111111100
1040 DATA0111111111111110
1050 DATA0111111111111110
1060 DATA1111111111111111
1070 DATA1111111111111111
1080 DATA1111111111111111
1090 DATA1111111111111111
1100 DATA0111111111111110
1110 DATA0111111111111110
1120 DATA0011111111111100
1130 DATA0001111111111000
1140 DATA0000111111110000
1150 DATA0000001111000000

実行すると、ちゃんとボールが3つ出てきて動きました。もっとも3つも動かしたので、動作が1/3に遅くなりましたが(笑)

スプライトを3つ動かプログラムを実行

というわけで、

MSX BASICまで生成できるなんて、すごすぎだぜChatGPT!

メモ:他にもあったオンラインエミュレータ

WebMSX以外にもMSXPenというエミュレータがあったので、メモしておきます。こちらは、BASICプログラム用の入力ダイアログが表示されていて、コードを貼り付ければすぐ実行できるようです。便利じゃもー。

この記事が気に入ったらサポートをしてみませんか?