まず体験して、興味を持った状態での座学が効率的!
オールマシン語の「かわくだりゲーム」
アドレスを書き換えて、WAITの値を0にすると、超高速!
当然、即死するので、当たり判定を無効化して無敵モード!
マシン語なので、ESCは効きません。電源を入れ直して元通り!
OSとしてのIchigoJamのテスト版を経て、拡張用にAPIに対応した、IchigoJam 1.3.2b12 公開です。
「ichigojam-1.3b12.zip」
機能追加:SWITCHの第二パラメータで液晶の濃さを指定可能(0:デフォルト=14、1:最も薄い、63:最も濃い)
マシン語レベルで眺めてみれば、まだまだ見つかる最適化の余地。
また数百バイト単位で空いたので、もうちょっと拡張可能になった IchigoJam!
引き続き、ご要望、お待ちしています。
APIテーブル(β)
オールマシン語かわくだりの作り方。
APIはIDで2byteの値をメモリから読み出し、そのアドレスへGOSUBする。例えば、画面クリア(cls)を呼び出すには、このようにする
PUSH {R7,LR} 'cls R7=#CC R7=[R7]W GOSUB R7 POP {R7,PC}
ハンドアセンブルするか、asm15などでアセンブルして、BASICで実行してみましょう。
POKE#700,128,181,204,39,63,136,184,71,128,189 U=USR(#700,0)
画面が消えました!
locateとputcを使って、ネコを表示するには
PUSH {R4-R7,LR} R4=15 ' X 'locate X,5 R0=R4 R1=5 R7=#CE R7=[R7]W GOSUB R7 'putc neko R0=#EC R6=#C4 R6=[R6]W GOSUB R6 POP {R4-R7,PC}
で、OK。この調子でひとつひとつ作っていく感じは、BASICでもどんな言語でも一緒です。 マシン語はひとつひとつの命令の粒度が小さいので、プログラムが長くなりがちです。 コンパイラが作りたくなる気持ちがわかりますね。(コンパイラはじめのいっぽ)
できあがった、かわくだりゲームがこちら! (90byte)
PUSH {R4-R7,LR} 'cls R7=#CC R7=[R7]W GOSUB R7 R4=15 ' X @LOOP 'locate X,5 R0=R4 R1=5 R7=#CE R7=[R7]W GOSUB R7 'putc neko R0=#EC R6=#C4 R6=[R6]W GOSUB R6 'rnd(32) R0=32 R5=#C0 R5=[R5]W GOSUB R5 'locate R0,23 R1=23 GOSUB R7 'ptuc *, enter R0=#2A GOSUB R6 R0=10 GOSUB R6 'wait 3 R0=3 R7=#D6 R7=[R7]W GOSUB R7 'inkey() R5=#CA R5=[R5]W GOSUB R5 R0-28 IF !0 GOTO 2 R4-=1 R0-29 IF !0 GOTO 2 R4+=1 'scr(X,5) R0=R4 R1=5 R5=#D0 R5=[R5]W GOSUB R5 R0-0 IF 0 GOTO @LOOP POP {R4-R7,PC}
asm15でアセンブルして、動かしてみましょう。
10 POKE#700,240,181,204,39,63,136,184,71,15,36,32,70,5,33,206,39,63,136,184,71,236,32,196,38,54,136,176,71,32,32,192,37,45,136,168,71,23,33,184,71,42,32,176,71,10,32,176,71,3,32,214,39,63,136,184,71 20 POKE#738,202,37,45,136,168,71,28,40,0,209,1,60,29,40,0,209,1,52,32,70,5,33,208,37,45,136,168,71,0,40,216,208,240,189 30 U=USR(#700,0) RUN
オールマシン語です!
WAITの値を0にして、超高速!
POKE#730,0:U=USR(#700,0)
SCR呼び出しを R0=0 (0,32) に上書きして、当たり判定を無効化して、無敵モード。
POKE#752,0,32:U=USR(#700,0)
こちら、PC/Macで動く、C言語版かわくだりゲームも登場!
IchigoJam用のC言語環境も作ってみるのもいいかも!既に誰かやってそうだけど、
— みつを (@tkmsm) May 23, 2019
IchigoJam BASIC の教材 「かわくだり」をC言語で書いてみた。
Windows WSL や Mac でもビルドできました。https://t.co/POFt1NL872
BASICからC言語につなげられないかなー