上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
次はPCG本来の使い方でキャラクタを動かしてみようと思います。

昔あったゲームのロードランナーと言う物を思い出して、左右移動、梯子上り、落下、をアニメっぽく動かしてみるのを目標とします。
まずはキャラクタパターンをペイントブラシで書いてみました。昔良くやっていたのでドット絵を見ればHEXへの変換はなんとかなります。


対応したキャラクタ定義プログラムは以下の通りです。

100 POKE#700,#18,#5a,#3C,#18,#18,#24,#24,#24
105 POKE#708,#18,#18,#3C,#5A,#18,#24,#24,#24
110 POKE#710,#30,#70,#38,#18,#3c,#18,#24,#22
115 POKE#718,#30,#70,#38,#58,#38,#18,#28,#46
120 POKE#720,#0c,#0e,#1c,#18,#1e,#18,#24,#44
125 POKE#728,#0c,#0e,#1c,#1a,#1c,#18,#14,#62
130 POKE#730,#d9,#d9,#bd,#9b,#9b,#a5,#e5,#85
135 POKE#738,#9b,#db,#bd,#d9,#d9,#a5,#a7,#a1
140 POKE#740,#5a,#5a,#7e,#18,#18,#24,#24,#42
145 POKE#748,#5a,#5a,#7e,#18,#18,#24,#42,#24
150 POKE#750,#81,#ff,#81,#81,#81,#ff,#81,#81
155 POKE#758,1,1,1,1,1,1,1,1
160 POKE#760,#80,#80,#80,#80,#80,#80,#80,#80
170 POKE#768,255,255,255,255,255,255,255,255
200 CLS
210 FOR I=0 TO #D:LC I*2,0:?HEX$(I+#E0):LC I*2,2:?CHR$(I+#E0);:NEXT
220 C=0:T=0
230 K=INKEY():C=0
240 IF K=28 C=1
250 IF K=29 C=2
260 IF K=30 C=3
270 IF K=31 C=4
280 LC 10,10:?CHR$(#E0+C*2+T):T=1-T
290 WAIT 10:GOTO 230

実行したところ。静止画なのでわからないですが、一応キー操作でキャラクタが変わっています。


今日はもう遅いのでここまで。
次回はロードランナーっぽい画面を書いてキャラクタを走らせてみます。

それではまたです。



スポンサーサイト
2015.04.27 Mon l ICHIGOJAM l コメント (1) l top
セミグラフィックの次はPCGを利用したミニグラフィックを組んでみました。

こんな感じで、64x32ドットだけではありますが、セミグラフィックより細かい絵を表示できます。


原理説明をパワポで書いてみました。


この方式の利点(?)は複数のグラフィック窓を同時に表示できることです。
ただし、全く同じ画面ですが。
「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">










ソースは以下の通りです。300行台がミニグラフィックサブルーチン。その前は確認用デモです。

10 CLS:LC0,0:?"MINI GRAPHIC":X=0:Y=2:GOSUB 350:U=0:GOSUB 360
20 U=64:R=0:X=0:Y=0:S=1:T=0:GOSUB 340:U=32:X=63:Y=0:T=1:S=0:GOSUB 340
30 U=64:R=0:X=63:Y=31:S=-1:T=0:GOSUB 340:U=32:X=0:Y=31:T=-1:S=0:GOSUB 340
40 X=10:Y=10:D=1:E=1:A=100:B=2
60 R=1:GOSUB310:X=X+D:Y=Y+E:R=2:GOSUB310:IF Z>0 X=X-D:GOSUB 310:Y=Y-E:IF Z=0 D=-D:BEEP50 ELSE E=-E:BEEP90
80 A=A-1:IF A<0 A=100:B=B+3:X=B:Y=B:GOSUB350 ELSE R=0:GOSUB 310
90 GOTO 60
190 END
302 '** MINI GRAPHIC SUBS **
305 '== PSET/RESET/PGET X,Y ==
310 Z=#700+Y+(X&#F8)*4:V=#80>> X%8:W=PEEK(Z)
320 IF R=0 POKE Z,W|V:RETURN
325 IF R=1 POKE Z,W&(#FF-V):RETURN
330 Z=W&V:RETURN
340 '=== HVLINE X,Y,U,S,T ===
345 FOR Q=1 TO U:GOSUB 310:X=X+S:Y=Y+T:NEXT:RETURN
350 '=== OPEN X,Y ===
355 FOR W=0 TO 3:FOR V=0 TO 7:LC X+V,Y+W:?CHR$(#E0+W+V*4);:NEXT:NEXT:RETURN
360 '=== CLEAR ===
365 FOR V=#700TO#7FF:POKE V,U:NEXT:RETURN



動きはyoutubeでご覧ください。


---------------------------------------------------
機能の説明: GOSUBでコールすることで以下が使えます。
---------------------------------------------------
310行 X,Yで指定された位置のPSET/PRESET/PGETを
     行います。機能はRで指定します。
     R=0:PSET(ドットを打つ)
     R=1:PRESET(ドットを消す)
     R>1:PGET(そのドットがオンかオフかを返す。
               Z=0ならオフ、Z>0ならオン)
     V,W,Zを使用するので値が壊れます。
---------------------------------------------------
340行 X,Yで指定された位置からUの数だけ線を引きます。
    線の方向は横方向をS,縦方向がTです。
    S,Tを2以上にすると点線にもなります。
    Q,V,W,Zを使用するので値が壊れます。
---------------------------------------------------
350行 X,Yで指定された位置(テキスト画面座標)に
     8x4キャラクタでミニグラフィック画面を展開します。
     V,Wを使用するので値が壊れます。
---------------------------------------------------
360行 ミニグラフィック画面をUで指定された値でフィルします。
     U=0なら真黒に、U=255なら真っ白になります。

※最初に360、350を実行してください。

 
これ何に使うか、ですが、例えば画面の一部にグラフとか表示できそうですね。

ゲーム系だと、リアルタイム表示は難しそうですが、初期のドラクエの戦闘シーンみたいな敵キャラの表示なんかには使えるのでないかと思います。

複数表示機能は。。。。デモ以外にはあまりないかな? (^^;

ともかくichigojamはテキスト、セミグラフィック、ミニグラフィックの3種類混載での表現ができるわけで、
メモリ制限の方もBASICプログラム領域はともかく、データの方はI2Cでかなり増やせる模様ですので、結構いろいろな表現ができると思います。


それではまたです。


2015.04.25 Sat l ICHIGOJAM l コメント (0) l top
今日は早く帰れたので、ichigojamセミグラフィックを更新してデモを作成しました。

なお、考えたのですが、ichigojamについては以後ゲーム等の完成したAPとしてはアップしないことにしました。
こどもパソコンですから、素材・ノウハウだけを提供させていただいて、そこから発想と用途を自由に広げていただくのが
宜しいのだろうと。

ということで、今回はセミグラフィックルーチンとその応用例です。
以下のような絵が書けるようになります。



「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">





セミグラフィックルーチンは以下の通りです。前回から少し修正と機能追加しました。
前々回のキャラクタ設定を先に実行しておく必要が有ります。)
>> 訂正@20150423PM23:元々#80-#8Fにセミグラフィックキャラクタがあり、PCGでの設定は不要と分かりました。
  下のコードもその対応に修正しています。



195 '**********************
196 ' SEMIGRAPHIC ROUTINES
197 '**********************
200 '=== PSET X,Y ===
205 Z=(X&1)+(Y&1)*2:W=X/2:V=Y/2:LC W,V:? CHR$(VPEEK(W,V)|(1<< Z)|#80):RETURN
210 '=== PRESET X,Y ===
215 Z=(X&1)+(Y&1)*2:W=X/2:V=Y/2:LC W,V:? CHR$(VPEEK(W,V)&(#F-(1<< Z))|#80):RETURN
220 '=== PGET X,Y (return Z) ===
225 Z=(X&1)+(Y&1)*2:W=X/2:V=Y/2:LC W,V:Z=(VPEEK(W,V)&(1<< Z)):RETURN
230 '=== HVLINE X,Y,U,S,T ===
235 FOR I=1 TO U:GOSUB 200:X=X+S:Y=Y+T:NEXT:RETURN




---------------------------------------------------
機能の説明: GOSUBでコールすることで以下が使えます。
---------------------------------------------------
200行 X,Yで指定された位置にドットを打ちます。
    V,W,Zを使用するので値が壊れます。
---------------------------------------------------
210行 X,Yで指定された位置のドットを消します。
    V,W,Zを使用するので値が壊れます。
---------------------------------------------------
220行 X,Yで指定された位置のドットがオンかオフか調べます。
    結果はZで帰ります。Z=0でオフ、Z>0でオンです。
    V,Wを使用するので値が壊れます。
---------------------------------------------------
230行 X,Yで指定された位置からUの数だけ線を引きます。
    線の方向は横方向をS,縦方向がTです。
    S,Tを2以上にすると点線にもなります。
    V,W,Zを使用するので値が壊れます。
---------------------------------------------------

グラフィックルーチンの応用例です。
10 '*******************
20 '** BALL BOUNCE ****
30 '*******************
100 CLS
110 X=0:Y=0:S=1:T=0:U=60:GOSUB 230
120 Y=39:X=59:S=-1:GOSUB 230
130 X=0:Y=0:S=0:T=1:U=40:GOSUB 230
140 X=59:Y=39:T=-1:GOSUB 230
142 X=20:Y=10:S=1:T=0:U=20:GOSUB 230
145 X=10:Y=20:S=1:T=0:U=20:GOSUB 230
146 X=30:Y=30:S=1:T=0:U=20:GOSUB 230
150 X=10:Y=10:D=1:E=1
160 GOSUB210:X=X+D:Y=Y+E:GOSUB 220:IF Z>0 X=X-D:GOSUB 220:Y=Y-E:IF Z=0 D=-D:BEEP50 ELSE E=-E:BEEP90
170 GOSUB 200
180 GOTO 160
190 END

動きはこちらで。



それではまたです。




2015.04.23 Thu l ICHIGOJAM l コメント (0) l top
昨日に続きましてセミグラフィックの応用を作ってみました。
基本のPSET,PRESET,PGETを3ルーチンです。

※先に昨日のキャラクタ定義を実行する必要が有ります。


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




100 CLS
110 FOR I=0 TO 59:X=I:Y=0:GOSUB 200:Y=39:GOSUB 200:NEXT
120 FOR I=0 TO 39:X=0:Y=I:GOSUB 200:X=59:GOSUB 200:NEXT
130 X=3:Y=3:D=1:E=1
140 GOSUB 210
150 X=X+D:Y=Y+E:GOSUB 220:IF C=0 GOTO 170
160 X=X-D:Y=Y-E:IF (Y<2)OR(Y>37):E=-E ELSE D=-D
170 GOSUB 200
180 GOTO 140
190 END
195 '**********************
196 ' SEMIGRAPHIC ROUTINES
197 '**********************
200 '=== PSET X,Y ===
205 Z=(X&1)+(Y&1)*2:W=X/2:V=Y/2:LC W,V:? CHR$(VPEEK(W,V)|(1<< Z)|#F0):RETURN
210 '=== PRESET X,Y ===
215 Z=(X&1)+(Y&1)*2:W=X/2:V=Y/2:LC W,V:? CHR$(VPEEK(W,V)&(#F-(1<< Z))|#F0):RETURN
220 '=== PGET X,Y (return C) ===
225 Z=(X&1)+(Y&1)*2:W=X/2:V=Y/2:LC W,V:C=(VPEEK(W,V)&(1<< Z)):RETURN


・200行がPSET,210行がPRESET,220行がPGETです。
・X,Yにドット座標をセットしてそれぞれのサブルーチンをコールします。
・PSET,PRESETは戻り値無し。Z,V,Wの内容が破壊されます。
・PGETはCが戻り値です。Z,V,Wの内容が破壊されます。

190行まではとりあえずの3関数のテストです。壁を書いてボールがボールが中でバウンスします。



ブロックくずしにはすぐ応用ができますね。


2015.04.22 Wed l ICHIGOJAM l コメント (0) l top
ichigojamには32キャラクタのPCG(Progrsmable Character Generator)があります。
そのうちの16個を8x8ドットのキャラクタを4分割したピクセルキャラクタとして使うと、キャラクタ分解能の縦横各2倍のセミグラフィックを表示することができます。確かSHARPのMZ-80の初期の物がやっていたはず。
VERSION0.9.9のキャラクタ分解能が34x24ですので、68x48のグラフィックができることになります。


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




まずは、キャラクタを用意しました。


ソースコードは以下の通りです。

10 ' ICHIGOJAM SEMI GRAPHIC
100 POKE #780,0,0,0,0,0,0,0,0
110 POKE #788,#F0,#F0,#F0,#F0,0,0,0,0
120 POKE #790,#F,#F,#F,#F,0,0,0,0
130 POKE #798,#FF,#FF,#FF,#FF,0,0,0,0
140 POKE #7A0,0,0,0,0,#F0,#F0,#F0,#F0
150 POKE #7A8,#F0,#F0,#F0,#F0,#F0,#F0,#F0,#F0
160 POKE #7B0,#F,#F,#F,#F,#F0,#F0,#F0,#F0
170 POKE #7B8,#FF,#FF,#FF,#FF,#F0,#F0,#F0,#F0
180 POKE #7C0,0,0,0,0,#F,#F,#F,#F
190 POKE #7C8,#F0,#F0,#F0,#F0,#F,#F,#F,#F
200 POKE #7D0,#F,#F,#F,#F,#F,#F,#F,#F
210 POKE #7D8,#FF,#FF,#FF,#FF,#F,#F,#F,#F
220 POKE #7E0,0,0,0,0,#FF,#FF,#FF,#FF
230 POKE #7E8,#F0,#F0,#F0,#F0,#FF,#FF,#FF,#FF
240 POKE #7F0,#F,#F,#F,#F,#FF,#FF,#FF,#FF
250 POKE #7F8,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
300 CLS
310 FOR I=0 TO 15
320 LOCATE I*2+1,5:? HEX$(I);
330 LOCATE I*2,7:? CHR$(#f0+I);
340 NEXT
350 LOCATE 0,10



「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">



画面の左上を原点として、右方向がXの+方向、下方向がYの+方向とします。
キャラクタはF0~FFとし、キャラクタコード下位4ビットのビット0が左上のドット、ビット1が右上、ビット2が左下、ビット4が右下のドットオン・オフを表すようにしています。

写真はとりあえず16個のキャラを並べたところです。
今日は平日なのでこのくらいにしておきます。

この次はSETPIXEL、PUTPIXEL、CLS、BOX等のサブルーチンを作ってみます。LINEも欲しいけどメモリが足りないかな。
その次は何かサブルーチンを使ってセミグラフィックデモを何か。

それではまたです。



2015.04.21 Tue l ICHIGOJAM l コメント (0) l top
久しぶりに終日お休みなので、早起きしてインベーダゲームを仕上げました。



「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




動きはこんな感じです。


ソースはキャラクタ定義とメインの2つに分かれています。
まずキャラクタ定義。これを先に実行します。(電源を切ると定義も消えるのでSAVE1で1に保存すると良いです。)
110 POKE #700,#10,#38,#7c,#fe,#d6,#7c,#44,#82
120 POKE #708,#10,#38,#7c,#fe,#d6,#7c,#44,#28
130 POKE #710,#44,#38,#7c,#d6,#fe,#7c,#44,#82
140 POKE #718,#44,#38,#7c,#d6,#fe,#7c,#44,#82
150 POKE #720,#38,#7c,#fe,#fe,#54,#38,#28,#44
160 POKE #728,#38,#7c,#fe,#fe,#54,#38,#28,#28
190 POKE #740,#18,#3c,#7e,#bf,#bf,#7e,#3c,#18
200 POKE #748,#18,#3c,#7e,#ef,#ef,#7e,#3c,#18
210 POKE #750,#18,#3c,#7e,#fd,#fd,#7e,#3c,#18
220 POKE #758,#18,#18,#3c,#ff,#ff,#ff,#ff,#7e
230 poke #760,#91,#52,#34,#1f,#f8,#2c,#4a,#89
240 poke #768,#00,#18,#18,#18,#18,#18,#18,#00
250 poke #770,#00,#10,#8,#10,#8,#10,#8,#00
260 poke #778,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
270 poke #780,#33,#33,#33,#FF,#FF,#FF,#FF,#FF
280 poke #788,#11,#11,#11,#33,#33,#FF,#FF,#FF
290 poke #790,#00,#00,#00,#11,#11,#33,#33,#77


次がメインプログラム。メモリサイズ制限で苦労した結果ごちゃごちゃです。
これをSAVE2で保存しtます。

42行目がつぶれてたのでなおしました。2015/06/26
10,40行もおかしかったので再更新。FC2のブログは入力時に文字化けしてるみたいです。40行の F<2LC F,4:?" ":F=-30 の?" "はスペースを2つ入れてください。なぜか勝手にひとつになります。2015/06/27
2 L=0
4 CLS:A=3:B=7:C=10:D=0:E=0:F=-30
6 V=1:N=25:W=0:T=0:FOR I=1TO25:R=I*2:[R]=I-1:[R+1]=I+1:NEXT:[0]=0:[1]=1:G=0:H=0
8 P=[1]:I=1:U=V:O=0
10 R=P-1:X=A+(R%8)*2:Y=(R/8)*2+B:K=VPEEK(X,Y-T):LC X,Y-T:?" ":IF K=42R=P*2:[[R]*2+1]=[R+1]:[[R+1]*2]=[R]:O=O+1:GOTO24
12 IF V=1LC X+1,Y:?CHR$(#E0):IF X>18U=-1:W=1
14 IF V=-1:LC X-1,Y:?CHR$(#E1):IF X<2U=1:W=1
16 IF G=0AND RND(4)<1 G=X:H=Y+1
18 IF G>0LC G,H:?" ":H=H+1:LC G,H:IF VPEEK(G,H)=#EB ?"*":GOTO48
20 IF H>21G=0:GOTO24
22 IF G>0?":"
24 P=[P*2+1]:I=I+1:IF Y>19 GOTO48
26 LC C,20:?" ";CHR$(#EB);" ":K=INKEY()-28:IF K=0AND C>0:C=C-1
28 IF K=1AND C<19:C=C+1
30 IF K=4AND D=0D=C+1:E=19:BEEP
32 LC D,E:?" ":E=E-1:K=VPEEK(D,E):LC D,E:IF D=0OR K<#E0GOTO35
33 D=0:?"*":L=L+(K-#DF)*10:LC 22,10:?"SCORE";L:BEEP99:IF K=232 F=-30
34 GOTO38
35 IF D>0AND E>2?"!"
36 IF E<2D=0
38 IF F<0F=F+1:IF F=0F=24
40 IF F>0LC F,4:?CHR$(232);" ":F=F-1:IF F<2LC F,4:?" ":F=-30
42 IFI< N GOTO10
44 B=B+W:T=W:W=0:N=N-O:A=A+V:V=U:IF N>1:GOTO8
46 GOTO4
48 LC2,22:?"GAMEOVER":BEEP90,50



一番の苦労場所は当たり判定と当たった敵の退場方法です。今時のPCでしたら、敵の数だけ配列を用意し、弾の移動ごとにループを回して判定、当たったやつを外して配列ソーティングしてしまえば余裕ですが、ichigojamではメモリサイズ、処理速度の両方でうまくいかないのが明らかです。
 
そこで、敵の数だけ配列は用意するのですが、チェーン構成にしておいて、当たった敵をチェーンから除外するようにしました。そして当たり判定は画面を書き変えておいて敵が個々に判断します。
 
これでほぼ1KB使いきりですが、バリヤがない、敵の弾は一つだけ、条件によって当たった敵が復活する(上の当たり判定方式の問題とわかっているのですが直しかたが思いつきません)等々の制限がでています。

とはいえ、久しぶりに頭を使ったソフトを作った感じです。
今時はPCソフトやマイコンソフトでさえも、メモリ・CPU能力が潤沢で、特に工夫しなくても性能が出てしまいますので、昔の職人芸的な創意工夫の余地がないな、と感じていたところ、このichigojamは久しぶりにそれが必要なデバイスのようで、ある意味やりがいがあります。
 
そうはいいながらも、1KB制限は昔のマイコンに比べても少ないなあ、と思っていたところ、どうやら昨日4KBに拡張されたバージョン1.0.0がリリースされた模様です。早速アップデートしてみたいと思います。
(2015/4/20訂正: 1.0.0はメモリ構成が変わって保存ファイル数とBASICインタプリタ?領域が増えたものらしく、BASICソフトの領域は変わらず1KBとのことです。)

2015.04.18 Sat l ICHIGOJAM l コメント (6) l top
ichigojamでインベーダゲームにトライを開始しました。
 
まずは形から。
POKE命令でキャラクタを作ってみした。

絵はこんな感じ。それっぽいですかね。


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">



プログラムはこうです。0x700からのPCG領域にキャラクタを書いています。

110 POKE #700,#10,#38,#7c,#fe,#d6,#7c,#44,#82
120 POKE #708,#10,#38,#7c,#fe,#d6,#7c,#44,#28
130 POKE #710,#44,#38,#7c,#d6,#fe,#7c,#44,#82
140 POKE #718,#44,#38,#7c,#d6,#fe,#7c,#44,#82
150 POKE #720,#38,#7c,#fe,#fe,#54,#38,#28,#44
160 POKE #728,#38,#7c,#fe,#fe,#54,#38,#28,#28
190 POKE #740,#18,#3c,#7e,#bf,#bf,#7e,#3c,#18
200 POKE #748,#18,#3c,#7e,#ef,#ef,#7e,#3c,#18
210 POKE #750,#18,#3c,#7e,#fd,#fd,#7e,#3c,#18
220 POKE #758,#18,#18,#3c,#ff,#ff,#ff,#ff,#7e
230 poke #760,#91,#52,#34,#1f,#f8,#2c,#4a,#89
240 poke #768,#00,#18,#18,#18,#18,#18,#18,#00
250 poke #770,#00,#10,#8,#10,#8,#10,#8,#00
260 poke #778,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
270 poke #780,#33,#33,#33,#FF,#FF,#FF,#FF,#FF
280 poke #788,#11,#11,#11,#33,#33,#FF,#FF,#FF
290 poke #790,#00,#00,#00,#11,#11,#33,#33,#77
300 cls
310 for y=0 TO 2
320 FOR X=0 TO 7
330 LC X*3+3,Y*2+3
340 ? CHR$(Y*2+#E0);
350 NEXT
360 NEXT
370 LC 20,0:?CHR$(#E8);
380 LC10,20:?CHR$(#EB);
390 FOR I=0 TO 4:LC I*5+2,17:?CHR$(#EF);CHR$(#EF);:NEXT
400 GOTO 400


これでほぼ1KBです。やっぱりメモリ制限が厳しいですね。

次はメインプログラムに行ってみます。

2015.04.14 Tue l ICHIGOJAM l コメント (0) l top
PCとの通信とichigojamファームの更新までできましたので、簡単なゲームを組んでみました。

SCROLLコマンドがわりと高速とわかりましたので、上スクロールの「リバーボート」ゲームです。


動きは動画をご覧ください。ボートの川下りのつもりです。+が障害物、@がエネルギー源、+を避けて@を取りながら進みます。大昔によく組んだような簡単ゲームです。



「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">



ソースは以下の通り。

1 '***************************
2 '***** RIVER BOAT GAME *****
3 '***** bY T.K 2015/04/06 ***
4 '***************************
10 CLS:S=0:X=10:T=3:V=1:E=5:P=100
20 FOR J=0 TO 20:LOCATE 0,J:FOR I=1 TO E:? CHR$(1);:NEXT:FOR I=1 TO 8:?" ";:NEXT:FOR I=1 TO (20-E-8):? CHR$(1);:NEXT:NEXT:PLAY"L16"
21 '***** RIVER BOAT GAME *****
30 PLAY"L16CR":T=T-1:IF T=0 THEN T=RND(10)+2:V=-V
40 LOCATE 21,22:? "ENERGY:";P;
50 SCROLL 2:K=VPEEK(X,23)
60 IF K=64 PLAY"L16CDE":P=P+50:S=S+5
70 IF K=43 PLAY"L16ED":GOTO 230
80 IF K=1 PLAY"L16EDC":GOTO 230
90 LOCATE X,23:?"A";
100 E=E+V:IF E<1 E=1:V=1
110 IF E>10 E=10:V=-1
120 LOCATE 0,0:FOR I=1 TO E:? CHR$(1);:NEXT
130 FOR I=1 TO 8
140 IF RND(20)<1 ?"+";:GOTO 170
150 IF RND(200)<1 ?"@";:GOTO 170
160 ?" ";
170 NEXT
180 FOR I=1 TO (20-E-8):? CHR$(1);:NEXT
190 K=INKEY():IF (K=28)&(X>2) X=X-1
200 IF (K=29)&(X<29) X=X+1
210 S=S+1:P=P-1:IF P<=0 GOTO 300
220 GOTO 30
230 PLAY"L16EDCEDCL8O5C"
240 LOCATE 5,10:? " GAME OVER ";
250 LOCATE 5,11:? " SCORE:";S;" ";
260 LOCATE 0,20
:


これでサイズは900バイト弱くらい。最大1KBなのであまり凝ったことはできないですね。
しかしプログラムから次のプログラムを呼び出すLRUNコマンドが有り、プログラム間で変数値を引き継げるみたいなので、最大3x1KB構成で作ることもできそうです。

メモリサイズと速度の制約でどこまでできるか、というのが大昔の課題でした。
昔を思い出して、次はichigojamインベーダゲームでも作ってみますか。
 
それではまたです。

2015.04.06 Mon l ICHIGOJAM l コメント (0) l top
シリアルポートと、ファーム書き換え手段を追加しました。
ファーム書き換えについては「活動備忘録」様のページに具体的な説明が有りましたので参考にさせていただきました。


まずUSBシリアル。使ったのは、この超小型USBシリアル変換モジュールです。

これは小型で配線も少なく今回のような用途にぴったりです。+5V.GND,RXD,TXDの4端子が出ていますが、+5VはUSBからの供給のため今回は接続しません。


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




このUSBシリアルと、スイッチ二つ(RESET,ISP)が追加になります。見えにくいですがキーボードの左側の方のスペースに取り付けてホットボンドで固めました。


配線後、キーボードカバーを締めない状態でFLASHMAGICによるファーム書き換えを試しました。

ここで気付いたのですが、USBシリアルにLEDがあり、接続すると発光するのですね。今回はキーボードの中なので見えなくなりますが、折角だから以後は見えるようにしたいです。

書き換え後に再起動したところ。バージョンが0.9.9になりました。これでSCROLL、PEEK、POKEなどが使えるようになったはず。


現状のキーボードichigojamを背面から撮影したところです。写真右手側に追加したスイッチがあります。この操作で今後はキーボードを開けずにファーム更新が可能となります。


こちらのWIKIPEDIAに昔のMXS機のイメージがあります。同じキーボード一体型でちょっと雰囲気は出ていますでしょうか?

それではまたです。
2015.04.05 Sun l ICHIGOJAM l コメント (0) l top
とりあえず見栄えを良くしてみました。

LCDですが、良いケースが見当たらず、ケース加工も面倒になってきまして、元々金属フレームに入っているのだから、フレームだけ黒く塗ってしまうことにしました。

黒ラッカーと筆を100円ショップで買ってきました。ほんとに100円ショップはなんでもあり便利です。


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




で塗ったところ。


次にキーボードichigojamからLCD用の電源とビデオ出力を繋ぐケーブルを作成。ケーブルは今回改造したキーボードのケーブルを切って流用しました。



繋いで起動したところ。なんとか昔のPC(マイコン)っぽい感じでしょうか?


横から見るとこうです。台はついでに100円ショップで買ってきたアクリルネームプレートを使っています。


次はPCとの接続用シリアルインタフェースを追加してみます。
2015.04.05 Sun l ICHIGOJAM l コメント (0) l top
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。