サンプルの充実化を・・・したいな。

ということで、
しばらくここでサンプル作成にいそしみます(汗)

・・・Ver.0.3 build 64までだと下記プログラムメニュー選択で暴走する。
原因究明済み。
対策build 65準備完了。
修正内容は・・・

・GOTO/GOSUBバグ修正
・FOR分のネスト情報をプログラム実行時初期化するように修正
・ダイレクト実行時の処理中男児メッセージにキャッシュ上の行番号が表示されてしまっていたバグを修正

いつものダウンロードブログ記事
UMIPI BASIC 野良アプリ版公開開始! - UMIPIと小さなガジェットたち。。。
で最新版ダウンロードできます。

UMIBASIC:MB#1

10 CLS:CLEAR "ALL"
20 WIDTH 40:PCGRESET:PCGSDGRESET
30 LOCATE 10,3:VPRINT "UMIPI SOFT PRESENTS"
40 GOSUB #2
100 A$[0]=" 2D MAP SCROLL SAMPLE"
110 A$[1]=" 2D SHOOTING GAME SAMPLE"
120 A$[2]=" END PROGRAM"
200 FOR I=0 TO 2
210 FOR J=0 TO LEN(A$[I])
220 LOCATE 0,I+2
230 PRINT MID$(A$[I],LEN(A$[I])-J,J+1)
240 NEXT:NEXT
250 A$="PLEASE HIT [A] BUTTON... "
260 LOCATE 5,0:VPRINT "UMIPI BASIC SAMPLE PROGRAMS";
300 A=0
310 A$=MID$(A$,1,LEN(A$)-1)+MID$(A$,0,1)
320 LOCATE 1,6:VPRINT MID$(A$,0,38);
330 L$=K$:K$=INKEY$
340 LOCATE 1,A+2:VPRINT " ";
350 IF K$<>L$ THEN A=A+(K$="" & A>0)-(K$="" & A<2)
360 LOCATE 1,A+2:VPRINT ">";
370 VDRAW
380 IF K$<>"" THEN GOTO 310
390 IF INKEY$<>"" THEN GOTO 390
400 IF A=2 THEN CLS:END
410 IF A=0 THEN GOTO #3
420 IF A=1 THEN GOTO #6
430 END



UMIBASIC:END

UMIBASIC:MB#2

10 FOR I=0 TO 7
20 S$[I]="":FOR J=0 TO 7
30 S$[I]=S$[I]+"0"+STR$(I)
40 NEXT:NEXT
50 FOR I=7 TO 0 STEP -1
60 FOR J=64 TO 122
70 PCGSDGSET J,S$[I]
80 NEXT:LOCATE 0,0:PRINT "";
90 NEXT
95 FOR I=0 TO 10000:NEXT
100 FOR I=0 TO 7
110 FOR J=64 TO 122
120 PCGSDGSET J,S$[I]
130 NEXT:LOCATE 0,0:PRINT "";
140 NEXT
150 CLS:PCGSDGRESET
160 RETURN

UMIBASIC:END

UMIBASIC:MB#3
10 CLEAR
20 WIDTH 20:CLS
25 LOCATE 15,0:PRINT "DEMO";
30 GOSUB #4
40 GOSUB #5
50 FOR Y=0 TO 4
60 FOR X=0 TO 14
70 LOCATE X,Y:PRINT "a";
80 NEXT:NEXT
82 U=ASC("c")
85 U$[0]=PCGGET$(U)
87 U$[1]=PCGSDGGET$(U)
90 X=0:Y=0:P=0
200 FOR I=0 TO 4
210 LOCATE 1,I:VPRINT MID$(L$@[Y+I],X,13);
220 NEXT
225 LOCATE 7,2:VPRINT CHR$(100+P);
230 LOCATE 15,1:VPRINT STR$(X)+" ";
240 LOCATE 15,2:VPRINT STR$(Y)+" ";
420 K$=INKEY$
430 V=X:X=X+(K$="" & X>0)-(K$="" & X<39)
440 W=Y:Y=Y+(K$="" & Y>0)-(K$="" & Y<15)
445 IF K$="" THEN CLS:GOTO #1
450 L$=MID$(L$@[Y+2],X+6,1)
460 LOCATE 15,3:VPRINT "<"+L$+">";
470 IF L$<>" " THEN X=V:Y=W
480 VDRAW
500 U$[0]=MID$(U$[0],2,14)+MID$(U$[0],0,2):PCGSET U,U$[0]
510 U$[1]=MID$(U$[1],14,2)+MID$(U$[1],0,14):PCGSDGSET U,U$[1]
530 P=-(P=0)
600 GOTO 200
UMIBASIC:END

UMIBASIC:MB#4
10 A$="abcdefg"
20 P$[0]="FF99A5DBA599FFFF":C$[0]="0022446666442277"
30 P$[1]="1028A6F5EEBC3810":C$[1]="0000000000000000"
40 P$[2]="BFFDDFF7FFFDBFEF":C$[2]="7766555566777766"
50 P$[3]="0798B95656BDC43C":C$[3]="0000000000000000"
60 P$[4]="000799F6D6FD5878":C$[4]="0000000000000000"
70 P$[5]="70F8FCFCFCE49870":C$[5]="7777442222447777"
80 P$[6]="007CFEFFF39E7C00":C$[6]="7744220000224477"
90 FOR I=0 TO LEN(A$)
100 B=ASC(MID$(A$,I,1))
110 PCGSET B,P$[I]
120 PCGSDGSET B,C$[I]
130 NEXT
150 RETURN
UMIBASIC:END

UMIBASIC:MB#5
10 L$@[ 0]="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
11 L$@[ 1]="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
12 L$@[ 2]="bbbbbb bb bbbbbb"
13 L$@[ 3]="bbbbbb bbbbbbbbbb bb bbbbbbbbbb bbbbbbbb"
14 L$@[ 4]="bbbbbb bb bbbbbb"
15 L$@[ 5]="bbbbbbbbbbbbb bbbbbbbbbbb bbbbbbbb bbbbbbbbbbbb"
16 L$@[ 6]="bbbbbb bbbbbb"
17 L$@[ 7]="bbbbbb b b bbbb ccc bbbbbb"
18 L$@[ 8]="bbbbbb b b b c c bbbbbbb bbbbbb"
19 L$@[ 9]="bbbbbb bbbbb bbbb c c bbbbbb"
20 L$@[10]="bbbbbb b b b ccc bbbb bbbbb bbbbbb"
21 L$@[11]="bbbbbb b b bbbb c bbbbbb"
22 L$@[12]="bbbbbb cccccccccccc"
23 L$@[13]="bbbbbb cccccc cccccccccccc"
24 L$@[14]="bbbbbb cccccccccccccccccccccccccccc"
25 L$@[15]="bbbbbbbbbbbbbbbbb cccccccccccc"
26 L$@[16]="bbbbbbbbbbbb cccccccccccccccccc"
27 L$@[17]="bbbbbbb cccccccccccccccccccccccc"
28 L$@[18]="cccccccccccccccccccccccccccccccccccccccccccccccccc"
29 L$@[19]="cccccccccccccccccccccccccccccccccccccccccccccccccc"
100 RETURN
UMIBASIC:END

UMIBASIC:MB#6
10 CLS:CLEAR
20 WIDTH 40
30 A$[0]="fgf fhf fgf fhf "
40 A$[1]="qrstuqrstuqrstuqrstuqrstuqrstuqrstuqrstuqrstuqrstuqr"
80 B$[0]="ba":B$[1]="ca"
90 C$[0]="d":C$[1]="e"

190 GOSUB #7
200 X=8:Y=2:E=1:F=20:L=2
300 B=-(B=0)
305 A$[0]=MID$(A$[0],1,18+F)+MID$(A$[0],0,1)
307 A$[1]=MID$(A$[1],2,17+F)+MID$(A$[1],0,2)
310 FOR I=0 TO 4
320 LOCATE 0,I+E:VPRINT A$[0];
330 NEXT
340 LOCATE 0,5+E:VPRINT A$[1];
400 FOR I=0 TO L
430 IF C[I]=0 THEN GOTO 495
440 X[I+1]=X[I+1]+2:IF X[I+1]>17+F THEN C[I]=0:X[I+1]=17+F
450 LOCATE X[I+1],Y[I+1]+E:VPRINT C$[B];

495 NEXT
500 FOR I=1 TO 3
510 IF E[I]=1 THEN GOSUB 550:GOTO 690
512 IF E[I]=2 THEN GOSUB 600:GOTO 690
514 IF E[I]=3 THEN GOSUB 650:GOTO 690
520 IF RND#(10) > 2 THEN GOTO 690
530 E[I]=RND#(2)+1
535 IF E[I]=1 THEN X[10+I]=17+F:Y[10+I]=RND#(5):Z[10+I]=RND#(1)+1
537 IF E[I]=1 THEN W[10+I]=1:E$[I*2]="i":E$[I*2+1]="j":GOTO 690
540 IF E[I]=2 THEN X[10+I]=0:Y[10+I]=RND#(5):Z[10+I]=RND#(1)+1
542 IF E[I]=2 THEN E$[I*2]="ck":E$[I*2+1]="bl":GOTO 690
545 GOTO 690

550 X[10+I]=X[10+I]-Z[10+I]:IF X[10+I]<0 THEN X[10+I]=0:E[I]=0:GOTO 595
560 Y[10+I]=Y[10+I]+W[10+I]
565 IF Y[10+I]<0 | Y[10+I]>4 THEN W[10+I]=-W[10+I]:Y[10+I]=Y[10+I]+W[10+I]
580 LOCATE X[10+I],Y[10+I]+E:VPRINT E$[I*2+B];
595 RETURN

600 X[10+I]=X[10+I]+Z[10+I]:IF X[10+I]>17+F THEN X[10+I]=18+F:E[I]=0:GOTO 645
605 LOCATE X[10+I],Y[10+I]+E:VPRINT E$[I*2+B];
645 RETURN

650 IF X[10+I]<0 THEN X[10+I]=0:E[I]=0:GOTO 685
655 G=G-1:IF G<0 THEN G=0:E[I]=0:GOTO 685
660 LOCATE X[10+I],Y[10+I]+E:VPRINT MID$("ponm",G,1);
685 RETURN

690 NEXT

700 FOR I=0 TO L
710 FOR J=1 TO 3
720 IF E[J]=0 | E[J]=3 THEN GOTO 760
730 IF Y[I+1]<>Y[10+J] THEN GOTO 760
740 IF X[I+1]<>X[10+J] THEN GOTO 760
750 E[J]=3:E$[J*2]="*":E$[J*2+1]="+":G=5:C[I]=0
755 S=S+J*10
760 NEXT
770 NEXT

800 IF B=0 & C[D]=0 THEN C[D]=1:X[D+1]=X+1:Y[D+1]=Y:D=-(D+1)*(D" & X>0 )-(K$="" & X<10)
920 Y=Y+(K$="" & Y>0 )-(K$="" & Y<4 )
1000 VDRAW
1010 IF K$<>"" THEN GOTO 300
1020 FOR I=0 TO 1:I=-(INKEY$=""):NEXT
1030 CLS:GOTO #1
UMIBASIC:END

UMIBASIC:MB#7
10 A$="abcdefghijklmnop"
20 P$[0]="495E3C3028183020":C$[0]="0000000000000000"
30 P$[1]="001818245A241800":C$[1]="2222222222222222"
40 P$[2]="08002400815A0018":C$[2]="5555555555555555"
50 P$[3]="1000100010001000":C$[3]="0000000000000000"
60 P$[4]="0010001000100010":C$[4]="0000000000000000"
70 P$[5]="0140000800100280":C$[5]="7777777777777777"
80 P$[6]="0140000800100280":C$[6]="4444444444444444"
90 P$[7]="0140000800100280":C$[7]="1111111111111111"
91 P$[8]="109C7E1E1E7E9C10":C$[8]="7744331111444477"
92 P$[9]="907C927E1E167C90":C$[9]="7744331111444477"
93 P$[10]="99C35A245A5A4242":C$[10]="1111111111111111"
94 P$[11]="3C243C2418181818":C$[11]="1111111111111111"
95 P$[12]="0042001818044000":C$[12]="0000000000000000"
96 P$[13]="0000180424180000":C$[13]="0000000000000000"
97 P$[14]="0018140642341800":C$[14]="0000000000000000"
98 P$[15]="1802000101C00218":C$[15]="0000000000000000"

100 FOR I=0 TO LEN(A$)
110 B=ASC(MID$(A$,I,1))
120 PCGSET B,P$[I]
130 PCGSDGSET B,C$[I]
140 NEXT
150 RETURN
UMIBASIC:END

VIBRATIONコマンド追加

振動のON/OFFおよび任意の長さ賛同させることができる
VIBRATIONコマンドを追加しました。

SH-12c(Android2.3.3)だとやたら振動が激しいので
OFFしたいなということで、急きょ追加。

取説もあわせて内容追記。
画面説明のページも更新。

ダウンロードは昨日同様。

UMIPI BASIC 野良アプリ版公開開始! - UMIPIと小さなガジェットたち。。。
からどうぞ。

野良アプリなのでインストールするためにはAndroidの設定で「セキュリティー」から
「提供元不明のアプリ」にチェックを入れてあげる必要がありますのでご注意を!

あわせてWindows版も置くことにしました。
上記リンク先のブログ記事からどうぞ。

UMIPI BASIC Android野良アプリ公開開始!

公開中UMIPI BASIC更新情報

  • 2015/10/17

Ver0.4 build68
・物理キー入力処理対応をWin限定処理とした(他プラットフォームでの無駄な処理軽減のため)
・TITLEコマンドにてWinプラットフォームではタイトル「UMIPI BASIC」となるようにした

  • 2015/10/6

Ver0.4 build 67
・Winのみ物理キーボードに対応(ただし超変則的)
 →キーマトリクスは本手順書に後ほど反映予定
 →これによりVerを0.1アップ。Ver0.4とする。Build番号は継続。
・ソフトウェアキーボードに「\」がないのを修正
・変数添え字オーバ時の処理追加
・WIDTHに10x5、30x7モード追加(低速マシン配慮だが、、、うむ)

  • 2015/10/09

Ver0.3 build 66
・GOTO/GOSUB内部処理見直しで処理軽減。
・VRAM描画処理部分内部処理見直し軽減
・・・とはいってもほとんど処理速度変わらず。。。もっと早くしたい、、、無理そう。。。

  • 2015/10/07

Ver.0.3 build 65
・GOTO/GOSUBバグ修正
・FOR文のネスト情報をプログラム実行時初期化するように修正

  • 2015/10/02

Ver.0.3 build 64
バイブレーションON/OFFおよび任意の長さ振動させるコマンド VIBRATION追加 併せてVIBRATIONステータス表示
取説も更新

UMIPI BASIC紹介動画



UMIPI BASICの野良アプリ版を公開します。
無署名apkファイルですので自己責任においてダウンロードおよびインストールをお願いします。
※インストールするためにはAndroidの設定で「セキュリティー」から
「提供元不明のアプリ」にチェックを入れてあげる必要があります。

謝辞
なお、フォントには門真 なむ様作「美咲フォント」を改廃し利用させていただいております。
Twitterにて使用の連絡をさせていただいた際、快くお受けいただけましたこと、
この場を借りて感謝申し上げます。
ホームページ移転のお知らせ - Yahoo!ジオシティーズ

また、
Kinta氏、@take様に置かれましては動作確認を各種Android機で行っていただきましてありがとうございました。
この場を借りて感謝申しあげます。

ダウンロード

Dropbox - UMIBASIC-debug.apk - Simplify your life


2015/10/02 Win版も公開
Dropbox - UMIPI BASIC Ver0.4.68.zip - Simplify your life

実機での動作確認は
主にGALAXY S4(Android 5.0.1)にて確認しています。
GALAXY S4と同程度の性能およびそれ以上であれば使用が可能と思います。

使用方法その他は取扱説明書を参照ください。
Dropbox - UMIPI BASIC取扱説明書.ver0.4.xlsx - Simplify your life

UMIPI BASICコンセプトを取説より抜粋

画面はモノクロ(緑黒?!)、ドットも荒い、音も出ない、、、でもそこには無限の世界が広がっている!
かつてマイコン少年だったおじさんたちや、プログラムに興味を持ち出した真の少年たちへ
チープなプログラムの世界へ浸ってみないか?
今のゲームやプログラムは、その動いている画面を見ただけで

あ〜自分には作れやしないや、、、
まったくどう動いてるのか、見当もつかない
こんなにきれいな映像自分には表現できないよ。。。。

と嘆くばかり。
でもこのUMIPI BASICなら。
最初からチープなものしか作れない!
だからそんな高度な心配は無用!

しかしながら、昔ながらのBASICとドット構成の画面でやれることは実は奥深い!
ド○クエのような見下ろし型RPGを作るもよし(小さな世界が精いっぱいかもしれないけど・・・)
マ○オのような横スクロールアクションゲームを作るもよし(ガクガクスクロールが精いっぱいだけど・・・)
キャラクタはどうあがいても8x8ドットで構成したモノクロのキャラしか登場させられないのだから
先にも言ったような「高度な心配」は無用!
ただだからこそ、
一人でプログラムからグラフィックまで制作できるワクワクの環境がここにある。
プログラムの世界をあなたのスマートフォンで楽しんでほしい!
HSP PROGRAM CONTESTではWin版のみダウンロードとなります。。。ごめん。
満足できなくなって来たら、、、高度なプログラムに挑戦して
たまには一息つきに戻っていらっしゃい。
いつでも優しく出迎える懐かしきプログラムの世界がここにあるのだから。。。。


感想その他コメントやTwitterid:umipi)でおまちしております!
2015 HSP PROGRAM CONTESTにもエントリーしているので是非ともよろしくお願いいたします。

※2015/09/30現在 コンテストページで公開はまだされていません。準備中の模様です。

UMIPI BASIC取扱説明書を公開します

UMIPI BASICの取扱説明書ができたので公開します!


DropBoxよりPCであれば直接閲覧可能です。
Excelファイルで作成しているのでダウンロードして内容を確認するもよしです。

Dropbox - UMIPI BASIC取扱説明書.ver0.3.xlsx - Simplify your life

HSP 2015 PROGRAM CONTESTへのWin版アップロードおよび
野良アプリ版apkファイルのダウンロード先の公開は
準備でき次第おこなう予定です!

その時は皆さまよろしくおねがいいたします。

m(_ _)m

M$ははてなで書くとWLOADできない。。。

WLOADコマンドでうまくいかない理由がわかった。
だけどなぜそうなったのかもよくわからない。

ともかく、M$はだめ。ほんとよくわからんがだめ。
自分でも何言ってるのかわからん(汗)

そこそこ動作してますよん!

ここんとこ最近ずっと作成してたスマフォ用BASICインタプリタ
「UMIPI BASIC(仮)」略して「海辺〜(うみべぇ〜)」
本当にこのままいくのか名称はおいといて先日Youtubeに動作動画をアップしたのでよろしければ見てください。



下記Youtubeからの引用説明文章です。

hsp3dishで作成途中のBASICインタプリタ実機動作動画です。
実機はGALAXY S4です。
開発環境はMiix2 8+Microsoft Universal Mobile Keybord(汗)
結構貧弱開発環境ですがhsp3dishは良い感じです。
まだまだBASIC
そのものの仕様も決まり切っておらずα以下かもしれませんがそれなりに動きます。
変数はA〜Z、文字変数も同様A$〜Z$となります。
配列変数も用意されていますが一次元です。
またメモリのバンク切り替えが可能(CASIO PB-100のような)で
GOTOやGOSUBでサブルーチンのように使用できます。
先の変数はすべてローカル変数として動作し、
全バンク上で共通に書き込み・参照ができる変数としてA@〜Z@、A$@〜Z$@が使用できグローバル変数のように使用できます。
現在コマンドはPRINTやFOR NEXT、GOTO、GOSUB、IF THENといった基本コマンドやPCGSET/PCGGET$、VPRINT、VDRAW、WLOADなどといった独自コマンドを含め40個ほど実装されています。
本動画では
10 A=0
20 FOR I=1 TO 1000
30 A=A+I
40 NEXT
50 PRINT A
を本物のポケコンと本BASICインタプリタで動作させ実行スピードの差を確認できます。
その後、私のBlogサイト上に書き込んだプログラムリストをWLOADコマンドでロードし実行させるデモを行っています。
実装されている方向キーでイチゴのようなキャラを任意に移動させることをしていますが、注目はPCG機能です。
MSXやPC-E500はたまたX1などに搭載されていた機能でASCIIキャラを任意のグラフィックキャラで再定義することができる機能を本BASICインタプリタでも疑似実装しています。
デモでは「a」をイチゴのようなキャラに変更しています。
※このキャラクタはPC-G850SのGPRINT命令サンプルと同じキャラパターンを使用しています。
どうですかね?需要ありますかね?(汗)

というわけで
Youtubeでは本物のポケコンたちとスピードを競います(汗)
単純なFOR NEXTループにて1から1000までの数値を合計する時間を競います。
タイムは図ってませんが、、、ダントツに早い。一瞬でおわりますよん。
ただ、グラフィックスというか、画面描画が遅いので何とかしたいですが
カーソルキーでイチゴのようなキャラを動かしている動画も見れますので参考に。

今のところ予定ではHSPプログラムコンテスト2015に出展してみたいと考えてます。
HSP3Dish部門で。
完成には程遠いのでどこかで区切りをつけた形でそこそこのものを出展したいです。