~ これはわたしの過去にまつわる話です ~
この頃、わたしはプログラミングの記事を多くあげておりますが、ちゃんとしたものを始めたのはちょうど去年の今(2020年2月ごろ)ぐらいかなと思います。まあ、以下のものがちゃんとしたものかどうかは、よく分かりませんが🍄
もっとも細かいことをいうと、更に2年前にアセンブラですが机上で学習を済ませたことがあります。これについてはいちおう、去年の8月ごろ python 仮想マシン経由で演習しました🍓
ただ、更におよそ20年以上前、わたしが中学生〜高校生だったころ、BASIC とマシン語をいじっていた記憶がほんわりとあります。5インチのフロッピー経由で、インタープリタを作動させる手のものです。週刊アスキーとか図書館から借りてきて打っていましたが、マシン仕様の差のためにコマンドが違い、いくつかは挫折していた気がします。たしか MSX ではなかったと思います。(追記)いろいろ調べた結果、シャープさんの X1 TurboZⅡ ということがわかりました📡
あまりにほんわりしてて記憶があやふやだったのですが、このあいだ以前住んでいた家の整理をしていたところ、当時の記録物がでてきました。記録物を再生・焼却処理する前に、せっかくなのでここで記録に残しておこうと思います📼
📛 これ以降にあるプログラムは動作しません
当時はそろばんを習っていたので、練習用のものを乱数で作って印刷してました。アスキーベースならプログラム上から一行ずつ送り出せていたと思います。これは暗算用ですが、もう今では到底できません。そろばんは、見取り算(足し算・引き算)より、圧倒的に掛け算が得意だったと思います。ただ、答えをどのように印刷したら良いかは分からなかったようです。意味ない…🗿
今も昔もなにも変わってないですが、英語の勉強をワープロ代わりに印刷して出したものです。中学1年生のころでしょうか、最後の数字が気になります。行番号を消してプログラムの文字を印刷する、そんなコマンドがあったのだと思いますが、雰囲気的にアドレスに直接文字列のコードを送ってプリンタへ出力しているかもしれません🛒
後述しますが、当時は基本的にはアスキーゲームしか作れないので、アスキーを自作するためにたくさん 16x16 のます塗りをした記憶があります🏩
みたところ文字変数用の $ は後ろだったみたいですね…🎨
10 FOR I=1 TO 32
20 READ K0$
30 A$=A$+CHR$(VAL("$B"+K0$)
40 NEXT
50 DEFCHR($7621)
----
10 A$=DEFCHR$($7621)
20 A$=HEXCHR$("07,1F,3F,3F,7F,75,75,40,44,20,17,08,0D,0A,F8,E0,C0,F0,F8,F8,F8,78,68,08,A8,38,78,F0,20,3C,3F)
30 PRINT#0 A$
10 CLS
20 A$=INKEY$
30 LOCATE 19,11:PRINT "始めていいですか?"
40 IF A$=" " THEN 60
50 GOTO 20
60 CLS
70 LOCATE 19,7:PRINT "1 コマンド・ステートメント"
80 LOCATE 19,15:PRINT "2 関数・システム変数"
90 A$=INKEY$
100 IF A$="1" THEN 130
110 IF A$="2" THEN
120 GOTO 90
今も危なっかしいけれど、どうも今に始まったことではないみたいです。プログラム上からシステム変数の処理を「始めていいですか?」とかあえて聞くのは、正気の沙汰ではありません。途中までしか書かれていませんが、暴走プログラムの雰囲気が…🎃
BASIC は GOTO という最強コマンドに加え、あとで登場しますが CHAIN という次のファイルへ飛び移るコマンド、機械語インターフェースを読み出したり機械語で直接操作するコマンドや、自分自身を書き換えるないしプログラムが増殖するコマンドなど、それらがいとも簡単に使えます🃏
BIOS が壊れなければ基本何をやっても問題ない仕様(ハードディスクがないだけだろ、なんて言わないでね)ではあるので、そういう意味では今よりいい環境なのかなと思います。クラッシュ歓迎、スイッチポンで商売繁盛🎊
ほかに「音楽の自動伴奏プログラム」「タイプ練習」「CUI または GUI レースゲーム」「超能力ゲーム」「空のバンドスコア印刷プログラム」「シューティングゲーム?」を作った記憶があります🏏
「音楽の自動伴奏プログラム」というのは、バッキング方法だけ選択決定しておいてテンポとコードだけで作るものでしたが、適切なデータ保管方法が分からなかったので、増殖プログラムで作った記憶があります🥊
「CUI のレースゲーム」というのは、GUI の BASIC上の レンダリング能力が、例えば直線をひいた時に始点から終点までの軌跡がみえるくらい遅かったので、スクロールコマンドを使って文字列を画面上部からおろしてきて、障害物にぶつからないようにするみたいなものだったと思います🎢
じゃあ「GUI のレースゲーム」の方は?ってなりそうですが、これはインチキで、あらかじめ必要になる線を各モードごとの色で線画しておき、それらをすべて透明化しておいてから、モードの切り替えで線画を表示しアニメーションにするというものです🎡
「超能力ゲーム」というのは、超能力というか摩訶不思議な力を信じていたころ作ったもので、コンピュータに0または1の乱数を発生させ超能力を使い当てる、というものでした。統計上は50回くらいで適度に収束するらしいですが、200回以上何度やっても正解率は51%以上だった気がします。妄想の力っておそろしいですね🌝
(参考)
「空のバンドスコア印刷プログラム」というのは、当時ギターなどのTAB譜が1セット800円と、当時の中学生高校生の私にとっては高く、ものさしでひくのも面倒なので作ったものです。データの構築方法がわからないので、BASIC から マシン語経由でアドレスに直接プリンタのマシンコードを書いて、プリンタに出力させてたんじゃないかなと思います⛄
記憶が正しければ無茶苦茶ですね…🌂
当時、学校で「消しゴム飛ばし」が流行ってました。自分の消しゴムをはじいて、相手の消しゴムにあてて学校机の上から落とす、というやつです。「キン肉マン消しゴム(キン消し)」の後世代ということでしょうか?「まとまるくん」に息を吹きかけて、全体重で押さえつける反則的最強技なんてのもありましたね⛵
ヒノデワシ株式会社:「まとまるくん」の製造元
それはさておき、わざわざアナログで楽しいものをパソコンでやろうとしたのは、どういう心境だったんでしょう。目次?と思われるプログラムが見つかりました⛺
なお、BASIC インタープリタ環境にはファイル拡張子という概念がありません。したがって、ファイルは全てプログラムファイルということになりますが、拡張子というのは読み取る側で「こう解釈してね」というだけの話なので、プロトコル宣言してないだけというだけです。これを「表現の自由」といいます(もちろんジョークです)💃
PG:KESISTAT
10 WIDTH 80,25,1,2
20 BEEP
30 CLS
40 CLEAR
50 CLICK OFF
60 REPEAT OFF
70 KEY OFF
80 LOCATE 10,8
90 CBLACK 5
100 COLOR 5,7
110 CSIZE 3:PRINT#0 "スーパー"
120 LOCATE 16,10:PRINT#0 "消しゴム"
130 LOCATE 24,12:PRINT#0 "飛ばし"
140 CSIZE 0
150 LOCATE 15,18:PRINT "*"
160 LOCATE 17,18:CFLASH 1:PRINT "最初から始める"
170 CFLASH 0
180 LOCATE 17,19:PRINT "途中から始める"
190 AAAAA=1
200 KAN1$=INKEY$
210 IF KAN1$="2" THEN 250
220 IF KAN1$="8" THEN 310
230 IF KAN1$="5" THEN 370
240 GOTO 200
250 LOCATE 15,18:PRINT " 最初から始める"
260 LOCATE 15,19:PRINT "*"
270 LOCATE 17,19:PRINT "途中から始める"
280 CFLASH 0
290 AAAAA=2
300 GOTO 200
310 LOCATE 15,18:PRINT "*"
320 LOCATE 17,18:CFLASH 1:PRINT "最初から始める"
330 CFLASH 0
340 LOCATE 15,19:PRINT " 途中から始める"
350 AAAAA=1
360 GOTO 200
370 IF AAAAA=1 THEN 400
380 IF AAAAA=2 THEN 420
390 GOTO 200
400 CLS
410 CHAIN "0:STDE"
420 CLS
430 CHAIN "0:SVLD"
無駄に、表示コマンドが多いですがまあいいでしょう。最強技 GOTO と 別ファイルにつなぐ CHAIN が多用されてます。GOTO CHAIN …惜しい!!なんて👹
CHAIN のあとの0はドライブ指定です。いまで言う A ドライブのことです。当時のパソコンは前述したように、フロッピーを入れてそこからいまでいう OS を全部読み出して起動し、データはもう一つある FD ドライブ(1番:いわゆる B ドライブ)にいれた FD に保存する、というように使用します🐊
したがって、0番には BASIC のシステムディスクが入っているはずなので、これは基本的にはよろしくない番号指定になりそうです🐖
ハードディスクもオプションで付けることができ、たしか10MBで約10万円だったと思います。これがいわゆる C ドライブです🐋
しかし、たかだか「消しゴム飛ばし」で「途中から始める」というのは、どういう設定なんでしょうか?🦊
続きです🐾
PG:STDE
10 CLS
20 CLEAR
30 LOCATE 30, 9:PRINT "********************"
40 LOCTAE 30,10:PRINT "* *"
50 LOCATE 30,11:PRINT "* *"
60 LOCTAE 30,12:PRINT "* *"
70 LOCATE 30,13:PRINT "* *"
80 LOCTAE 30,14:PRINT "* *"
90 LOCATE 30,15:PRINT "* *"
100 LOCATE 30,16:PRINT "********************"
110 LOCATE 32,11:INPUT "名前は";ZNNMW$
120 ZNNMC$="スーパーロボット"
130 LOCATE 32,12:PRINT "修行価値は"
140 KAN$=INKEY$
150 ZNSKTW=INT(RND(1)*100/2):ZNSKTC=INT(RND(1)*100+1)
160 IF ZNSKTW<20 THEN 150:LOCATE 38,12:PRINT ZNSKTW
170 IF KAN$="S" THEN 190
180 GOTO 140
190 LOCATE 32,13:PRINT "発見率は"
200 KAN$=INKEY$
210 ZNHRW=INT(RND(1)*100/2):ZNHRC=INT(RND(1)*100+1)
220 IF ZNHRW<20 THEN 210:LOCATE 37,13:PRINT ZNHRW
230 IF KAN$="S" THEN 250
240 GOTO 200
250 LOCATE 32,14:PRINT "命中率は"
260 KAN$=INKEY$
270 ZNMRW=INT(RND(1)*100/2):ZNMRC=INT(RND(1)*100+1)
280 IF ZNMRW=INT(RND(1)*100/2):ZNMRC=INT(RND(1)*100+1)
290 IF KANS$=INKEY$
300 GOTO 260
310 LOCATE 32,11:PRINT "力は "
320 KAN$=INKEY$
330 ZNTW=INT(RND(1)*100/2):ZNTC=INT(RND(1)*100+1)
340 IF ZNTW<20 THEN 330:LOCATE 35,11:PRINT ZNTW
350 IF KAN$="S" THEN 370
360 GOTO 320
370 LOCATE 32,12:PRINT "行動率は "
380 KAN$=INKEY$
390 ZNKDRW=INT(RND(1)*100/2):ZNKDRW=INT(RND(1)*100+1)
400 IF ZNKDRW<20 THEN 390
ここで力尽きているようです。4桁✕4桁の暗算ができる割には、非効率な部分が多い気もしますがまあいいでしょう。「修行価値」という要素は気になります。「成長率」のかわりにはいいかもですね、「労働平均年修行価値」とか🐸
CRAZY WORLD というゲームの草案が見つかりました🦇
中学生の当時、家屋がぼろぼろであったために、うちは貧乏だと思いこんでいました。ほかの家にあるファミコンや、主流になってきたスーパーファミコンがあるのをうらやましく思っていた時期もありました。まあ、パソコンが買えてファミコンが買えないなんて、そんなわけはないでしょうけど…🌌
そのときには「ファミコンを買ってもらえないなら、自分で作ってやる」みたいに考えていたんだと思います。ただ、たぶん、自分の字だとは思うのですが…まるで「記憶にございません」です。完成してないからかもしれません⛽
「修行」のメニューが気になります。超能力を信じていたので、修行すれば「かめはめは」や「舞空術」を使えるようになる、と考えていたのかも(今も?)しれません🥋
「昇竜拳」や「竜巻旋風脚」という名前があることから、ストリートファイターⅡの影響を強く受けていると思われます。技のジャンルが「普通系」「魔界系」「天界系」「龍界系」「動物系」「王界系」に分類されているようです。「魔界系」の技に「ダークウェーブ」というのがあります。さすが未来の超能力者ですね🎏
「動物系」の技名が気になります🦍
1.サイコキネシス
2.体当たり
3.ギャラクシアン・エクスプロージョン
4.キャンサー電撃
5.流光けん
6.天ばつ
7.ドラゴニック・ウェーブ
8.スカーレット・ニードル
9.スカイ・アロ・アタック
10.エクスカリバー
11.オーロラ
12.ローズ
これは「聖闘士星矢」の黄金聖闘士の影響でしょう。そもそも、このような動物がいるかどうかすら分かりませんが、もし動物がこのような攻撃をはじめたら、人類なんてイチコロでしょうね。あと王界系ってなんだ?🦏
参考: Wikipedia.黄金聖闘士
ミュージックメモが出てきました🦖
みたところ、まだ音楽理論を学んでいないようでしたが、どうやら作曲をしていたようです。表現は自由なので、「すべての人は音楽家であり、いわゆる職業音楽家というのはその導師またはファシリテータである」という考えは今でも持っています。途中でよくわからない転調をしてますが、まあ、自由でよいのではないでしょうか🦉
場所の選定リストです。選定基準が意味不明ですが、「バットサタンシティ」って何ですか?敵キャラ?と思われる名前が、未来の「ワンピース」を予感させるものもありますが…🦀
ここまで、ご精読ありがとうございます。最後に、ここに STORY と書かれたものがあるので、それまでを記録にとどめて終わりにしたいと思います💮
にんげんのよくぼうはすべてのはかい。
そんなことからこんなじけんははじまった。
とあるところにレイジーという科学者がいた。
最近、動植物学のすべてを知りつくしたといわれている。
それから、今からはタイムマシン、時空ワープマシンを作り出そうと努りょくしている。
機械の世の中のその機械はレイジーによる努力のたまものだった。
しかし、そんな科学者のつくったものが暴走しはじめた。
科学者に電話したがだれもいない。
家をおとずれたときにはだれもいなかった。
そんな世の中で世界征服をたくらむ男がいた。
Mr.Break
彼はすぐに、支配を実行にうつした。
こんなときこそレイジーにと再びたずねた。
こんな手紙がのこっていた。
「レイジーはあずかった。Mr.Break」
…
さらに、挿絵がありました🦔
🚬 おしまい 🚬