メインコンテンツへスキップ
見出し画像
Photo bypork_misosoup

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プログラム用の入力ダイアログが表示されていて、コードを貼り付ければすぐ実行できるようです。便利じゃもー。

     
     
    AIで時間を生み出す実験をしています。 元PC系出版社編集者。 Claude・ChatGPT・Geminiを並行使用しながら、 実践した話だけを書いています。

    あなたへのおすすめ