スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
(この一行は、各記事の最後に固定表示するサンプルです。テンプレートを編集して削除もしくは非表示にしてください。)

#50 CASIOポケットコンピューターで制作したゲームを発掘!

00_CASIO_PC_IMG_8199a.jpg

記事50個目の節目?だというのに誰も見向きもしないかも知れない化石のようなネタ。 
でも全く気にしない。

ずっと引き出しの奥に入れたままの「CASIO パーソナルコンピューター FX-790P」を久々に出してしまった。 関数電卓機能の付いた、BASIC言語とアセンブラ言語を搭載したコンピューターである。 通称ポケットコンピュータ、「ポケコン」と呼んでいた。 昔作ったBASIC言語のソフトウェアを記録したカセットテープも発掘してしまった。 この流れが止まらなくなり、試行錯誤しながら読み込みに成功! 何だか嬉しくて仕方がないので自作ゲーム2つを掲載するの巻、である。

「月面着陸ゲーム」
「モグラたたきゲーム」

なんともノスタルジーなタイトルでしょ?!
24桁仕様の画面向けに作られているので、12桁仕様の「PB-100系~400系」では動作しない。


その前に、走馬灯のようにCASIOポケコンとの関わりを思い起こすの巻

1983年頃
 高校のクラスメイトが所有する「CASIO PB-100」を見てペンケース大のコンピューターに驚く!
 感動のあまりしばらく借りてBASIC言語をかじってみる。
1985年
 専門学校で「AX-1」(FX-770Pの学校教育向け)を買わされる。
 BASIC言語にハマり過ぎて授業中にゲームを作るほどに。
 これでアセンブラ言語も少しかじった。
2000年頃?
 AX-1が壊れ、ヤフオクでFX-780P を入手。
2003年
 FX-780Pが壊れ、ヤフオクでFX-790P を入手~現在に至る。

こんな感じで同じBASIC言語を流用できるCASIOの機種を代々所有し続けた。 ゲームや技術計算のBASICプログラミングで正味4、5年間ほど活躍したろうか。 何と言っても、そのコンパクトなボディーや使い勝手、毎日使っても半年以上もつ省電力性も素晴らしかった。 大きさは任天堂DSと変わらない感覚だと思う。 まだ世の中ノートパソコンなど無かった頃、場所を選ばず電車の中でもプログラミングができてしまうスグレモノだった。

隣に写っている「カセットインターフェイス FA-5」はAX-1を手に入れた後すぐに購入した周辺機器。 ラジカセの入出力端子に繋げて音楽用のカセットテープへプログラムを保管したり呼び出したりしていた。


◆カセットテープ読み取りエラー ~ 波形編集で読み取り成功!

眠っていたBASICプログラムの読み込みを始めてみたが・・・
11_CASIO_PC_IMG_8203a.jpg


昔ヤフオクで手に入れた「NEC データレコーダー PC-DR312」にインターフェイスFA-5を繋げFX-790Pに読み込んだがエラーとなってしまう。
12_CASIO_IMG_8217A.jpg


ここはカセットデッキ YAMAHA KX-493で一旦デスクトップPCへ取り込み、波形編集ソフト(WAVELAB 7)で信号のある中音域を強調して何とか FX-790P に取り込めた。

そこで改めてピュアな情報をFX-790PからPCへ直接録音し直し、編集した。
・ノーマライズで振幅を上げる
・不要な低音域&高音域を減衰(結構ノイズだらけだった)
・1.5khz中心に微妙に上げる
などを処理してやるとこんな感じの波形になった。
15_CASIO_WS005.jpg
(WAVELAB 7 はWindowsXP で問題なく使えているけれど、7.2.1updateは大丈夫なのだろうか?)

1.2khz、2.5khz・・・・の辺りのひときわ高いレベルがおそらく純粋な信号だと思う。
復元できた2つのゲームは次の通り。


◆「月面着陸ゲーム」

ダウンロード: WAVファイル・・・「月面着陸ゲーム」「モグラたたきゲーム」同梱
(P0、P1にロードされる)

~ ゲーム説明 ~
月へ到達した宇宙船の乗組員たち。
降下場所を誤り狭い谷間へ吸い込まれてしまった!
月面着地のミッションを与えられたあなた! 左右の壁面にぶつからないよう操縦し、スピードを調整しながら地表に静かに着地しよう。

シフト[S]→ゼロ[0]で開始!
ゲーム中は数字キー[0]~[9]のみ使用
20_CASIO_IMG_8232a.jpg

~ イメージ ~
こんな落下の様子を、1段ずつ1行のディスプレイで表現しています。
■■■    ■■■■ ←高度100から落下開始
■■■    ■■■■
■■■    ■■■■
■■    ■■■■■
■■    ■■■■■
■■■    ■■■■
■■■    ■■■■
■■■■    ■■■
■■■■    ■■■
■■■■■    ■■
■■■■■■    ■
■■■■  ♣  ■■・・・→[ 57 : -21 : 64 ]高度:落下速度:燃料残量
■■■    ■■■■
■■    ■■■■■
■■■    ■■■■
■■■    ■■■■
■■    ■■■■■
■■    ■■■■■
■■    ■■■■■
■■    ■■■■■
■■■    ■■■■
■■■___■■■■←高度ゼロで落下速度が「-1」以内ならクリア!

~ ゲームのコツ ~
若干落下の加速度や慣性の法則が働いているので、速度が上がらないうちに噴射の制御をしましょう。 左右の操作時は落下のアニメーションが無いので高度は気にしなくても大丈夫です。(プログラムの詰めが甘いところw)

~ BASICプログラム ~
----------------------------------------------------
1 CLEAR :V=0:A=0:X=4.5:H=100:E=80:F=RND(RAN#,-2)-0.3
2 GOSUB 400:$="■■■-→_←-■■■":B=2
3 PRINT "Key→_[0]-[9]__L[+]__R[-]"
5 PRINT "■■-→♣←-■■__H__:__V__:_E"
10 X=X+RND(RAN#*0.4,-2)-F
11 B=B+INT(RAN#*3)-1: IF B<1;B=1
12 IF B>3;B=3
15 GOSUB 600: IF INTX≧4-B; IF INTX≦8-B THEN 30
20 GOSUB 450: GOTO 310
30 C$= KEY: IF E=0;I=0: GOTO 110
40 IF C$="" THEN 30
50 IF C$="+"; IF E-2≧0;E=E-2:X=INT(X-1)+0.5: GOTO 15
60 IF C$="-"; IF E-2≧0;E=E-2:X=INT(X+1)+0.5: GOTO 15
70 FOR I=0 TO 9: IF C$= STR$(I) THEN 90
80 NEXT I: BEEP : GOTO 15
90 IF E-I<0 BEEP : GOTO 15
100 E=E-I: IF V<0; IF V-Z>0;D=0: IF I≦3;A=0
110 Z=V:Y=H:A=RND(A+(I-3)/1.84,-2)
120 FOR T=0.1 TO 1 STEP 0.1
130 V= RND(Z+A*T,-2)
135 IF V≧0; IF D=0;A=RND((I-3)/1.84,-2):D=1:Z=0
140 H=RND(Y+V*T,-2)
150 IF FRAC(T/0.2)=0; GOSUB 600
160 IF RND(H,-2)≦0; GOSUB 600: GOTO 300
170 NEXT T: GOTO 10
300 IF V≧-1 THEN 320
305 BEEP : BEEP
310 FOR I=1 TO 30
312 PRINT CSR0;"#■■■■■■■#"; CSR0;"■Crash!!■";
315 NEXT I: STOP : GOTO 1
320 BEEP 1: BEEP 1
330 PRINT CSR1;"_______"; CSRX;"♣";
340 FOR I=1 TO 300: NEXT I
350 PRINT CSR0;"■=Nice!=■": GOTO 1
400 $="***GETSUMEN CHAKURIKU***"
410 FOR I=8 TO 24 STEP 8
420 FOR J=1 TO 8
430 PRINT CSRI-J; MID$(I-7,J);
440 NEXT J: NEXT I: STOP : RETURN
450 BEEP : BEEP : PRINT CSRX;"*";:IF X≦4 THEN 520
470 FOR I=1 TO 6
480 FOR J=X-1 TO 4-B STEP -1: PRINT CSRJ;"(";: NEXT J
490 FOR J=X-1 TO 4-B STEP -1: PRINT CSRJ;"_";: NEXT J
500 NEXT I: RETURN
520 FOR I=1 TO 6
530 FOR J=X+1 TO 9-B: PRINT CSRJ;")";: NEXT J
540 FOR J=X+1 TO 9-B: PRINT CSRJ;"_";: NEXT J
550 NEXT I: RETURN
600 PRINT CSR0; MID$(B,9); CSR9;"_____:_____:___";
605 PRINT CSRX;"♣";
610 PRINT CSR9; STR$(H); CSR15; STR$(V); CSR21; STR$(E);
620 RETURN
----------------------------------------------------
注) PRINT文のアンダーバー「_」は半角スペースに置き換える




◆「モグラたたきゲーム」

~ ゲーム説明 ~
お庭の芝生を荒らす不届き者、モグラが沢山住み着いているぞ!
穴から出てきたところを叩いて退治しよう!

シフト[S]→[1]で開始!
ゲーム中は数字キー[0]~[9]のみ使用

~ゲーム開始~
「 ■123■456■789■ ←Key Point 」
 モグラ出現場所の数字キー説明

     ↓ 
22_CASIO_IMG_8242b.jpg


カウントダウンが進むとモグラは段々と早く隠れる様になり難易度が上がります。

----------------------------------------------------
10 T=0:$="010203050607091011"
12 PRINT "_***_MOGURA_TATAKI_***"
15 PRINT "■123■456■789■_←Key Point"
20 FOR I=50 TO 1 step -1
30 R= INT( RAN#*9+1): IF R=D THEN 30
35 D=R
40 Y$= MID$(R*2-1,2):X= VAL(Y$)
50 PRINT CSR0;"■・・・■・・・■・・・■_____"; CSRX;"Ω";
60 PRINT CSR14;"T";I; CSR19;"SC";T;
70 FOR J=1 TO I/5+3
80 K$= KEY: IF K$="" THEN 100
85 C= VAL(K$)
90 IF R=C; GOSUB 200: GOTO 150
95 PRINT CSR0;"■###■###■###■";
96 GOSUB 400: GOTO 150
100 NEXT J
150 NEXT I
152 FOR W=22 TO 0 STEP -1: PRINT CSRW;"■";: NEXT W
160 FOR Z=0 TO 23: PRINT CSRZ;"_";: NEXT Z: PRINT
165 PRINT "_____Score_=";T
170 IF T≦H THEN 180
171 H=T: PRINT "You_are_top!_Score=";H
180 PRINT "Game_Over!_→_Push[EXE]"
190 GOTO 10
200 RESTORE 500
210 FOR L=1 TO 11
220 READ M$: PRINT CSRX;M$;:B=1↑1
230 NEXT L
240 T=T+1
250 RETURN
300 FOR Z=0 TO 23: PRINT CSRZ;"_";:NEXT Z: PRINT : RETURN
400 FOR W=1 TO 40: NEXT W: RETURN
500 DATA I,/,-,\, I,/,-,\,*,*,*
----------------------------------------------------
注) PRINT文のアンダーバー「_」は半角スペースに置き換える

実行するポケコンによっては、モグラ表示時間を調整しないとゲームにならないかも知れません。
70行目の末尾の部分、
[ 70 FOR J=1 TO I/5+3 ]
5を増やす → ゲーム序盤から早まる
3を減らす → 終盤で早まる。
逆で長くなります。


◆感想など

ゲームについて
【月面着陸】
加速度や慣性の具合に慣れるまでチョット時間がかかると思う。 昔は同類のゲームが沢山ありましたわ(笑)
【モグラたたき】
誤って数字キー以外を押すとエラーになるなど実は不完全な部分もあるけれど、処理速度が遅いのであえて判定処理を省いている。 同士の皆さんは同じ思いをしていたと思う(笑) 

今回は作品2つだけれど、またTAPEから読み込めたらここへ追記しようと思う。

ポケットコンピュータについて
思い起こすと、1983年頃は高校の仲間がCASIO派とSHARP派に分かれて日々話題に事欠かなかった。
SHARP(PC-1245だったか?)はマシン語が可能だったから、SHARP派の中でグラフィック処理の細かい部分で競ったりモメたりしていたのね。 反面プログラム全体が全く完成しない(笑)。 CASIOの方は細かいグラフィックの処理は出来ないけれど、CASIO派は持ってる文字・記号で表現して全体をサクサク作って作品にしてしまうのね。 

プログラミングについて
自分のプログラミングのルーツは、その当時 CASIO PB-100 の存在を教えてくれた事。 画面上の様々な表現のために、英数字と僅かな記号を駆使したり演算の工夫をしたり(初めて数学が役に立った(笑))、自分の想像の枠がとても広がったと思う。
FXシリーズを手に入れてからは、付加されたMEMO機能が実はデータベースになっていて、書き込んだ文字列がプログラムからキー検索や読み出しに対応しており、データベースの概念を知る事が出来た。 おかげ様で、その後社会人になり、ある時期データベースへのI/Oを処理するプログラミングにも携わったがスムーズに受け入れる事が出来たり、CASIOのポケットコンピュータはワタクシの師匠様なのである。

前回の電卓ネタからポケットコンピュータへの流れ
前回の電卓ネタで1970年後半に電卓の心臓部の集積化・低価格化が進んでいった話があったけれど、その過程でパソコンの心臓部となるマイコンチップが誕生し、数式をプログラミング可能な電卓が生まれた(各社独自の言語)。 その後プログラム言語の汎用化の流れで、1980年にSHARPからPC-1210が29,800円、1981年にCASIOからFX-702Pが39,800円で、BASICを搭載したポケットコンピューターが誕生する。 学生だったその時代にその様なテクノロジーが劇的に進化していった事は知る由もなかったけれど、あらためて素晴らしい日本の技術者へ敬意を払いたい気持ち。
そんな事で、今回はポケコンネタだった。

最近、ご機嫌斜め?
電源ONで液晶表示が暴走する事がよくある。 末期症状なのか?
AX-1、FX-780Pの時も最後はそうだったのだが、どうも2つ折りタイプのフレキシブル基板を使っている製品は短命なのではないか?という気がしてならない。 オークション出品者のコメントにも本体ヒンジ近くを押すと直る例があった。
壊れたら一度その辺の修理を検討してみようか。 DIYでそんな例などは聞かないけれど。

スポンサーサイト
(この一行は、各記事の最後に固定表示するサンプルです。テンプレートを編集して削除もしくは非表示にしてください。)

コメント

コメントの投稿

非公開コメント


(この一行は、各ページ下部に固定表示するサンプルです。テンプレートを編集して削除もしくは非表示にしてください。)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。