2014-02-23 (日)
金曜日に肉を食べながら,プログラミングいつ始めたのかを考えたのだけど,いつなんだろう...
自分のPCを手に入れてちゃんと書き始めたのは中2だけど,それまでも市立図書館とかでコンピュータ系の本は端から読んでいたし,小学生の時にBASICでLINEとかCIRCLE命令で画面に絵が出るの面白いな,くらいは触ったことあったから,その時にかな.
*中学生のときに書いたプログラムを見つけた
HDD漁っていたら,本格的に(?)プログラム書き始めた初期(中学2年のとき?)に書いたプログラムが出てきたので晒してみる.
https://gist.github.com/binzume/9175060
BMPとかPICとかB1とかの画像ファイルを相互変換するプログラム.N88-BASIC.
10 WIDTH 80,25:CONSOLE 0,25,0,1:COLOR 7,0,,,2:SCREEN 3,0,0,1:CLS 3 20 DIM R(15),G(15),B(15),C(255):ON HELP GOSUB *HLP.:HELP ON 30 RESTORE *CDATA.:FOR I=0 TO 15:READ R(I),G(I),B(I):NEXT:GOSUB *COL. 40 *MAIN'------------------------- MAIN ----------------------------- 50 MS$(0)="PROGRAMED K.KAWAHIRA" 60 MS$(1)="画像データをロード" 70 MS$(2)="画像データをセーブ" 80 MS$(3)="画面のクリア" 90 MS$(4)="RDS" 100 MS$(5)="終了" 110 MS=5:GOSUB *MENU:IF M=5 THEN PRINT"終了しました。":SCREEN ,0:END 120 ON M GOSUB *LO.,*SA.,*CLS.,*RDS:GOTO *MAIN 130 *LO.'------------------------- LOAD ----------------------------- 140 MS$(0)="入力 ファイル":GOSUB *TYP. 150 GOSUB *FINP.:PRINT FI$;"の画像データをロードします。" 160 ON M GOSUB *BMLO.,*BELO.,*STLO.,*PCLO.,*COLO.:GOSUB *COL. 170 CLS:IF INP(225)<>127 THEN 170 ELSE RETURN 180 *SA.'------------------------- SAVE ----------------------------- 190 CLS:MS$(0)="出力 ファイル":GOSUB *TYP. 200 GOSUB *FINP.:PRINT FI$;"に画像データをセーブします。" 210 ON M GOSUB *BMSA.,*BESA.,*STSA.,*PCSA.,*COSA.:RETURN 以下略
最終更新日時は,1997-09-27のようなのだけど,たぶんWindows使いはじめる直前.16年以上経って改めて見てみると,酷いコード...
ただ,当時の環境だとスクロールとか面倒だし,なるべく1行に詰め込んだほうが読みやすいと感じてた.一応サブルーチンは存在しているようにも見えるけど,構造化を意識していたわけではなくて,なるべくコーディング量を減らすために共通の処理を使いまわすくらいのことしか考えてなかったはず.
このときはWindows持ってなくて,ゲーム用の画像を作るために方眼紙を塗りつぶして手で16進データに変換して,DATA文をひたすら打ち込んでいたので,どこかで触ったWindowsのペイントが画期的に見えて書きました.16色に減色した写真とかを98で見れるだけで面白かった.
この時期に書いたコードで手元にデジタルで残っているのはこれだけっぽい...
FILES "*.BAS
とあるディレクトリのFILESの結果が写った写真があったので,同時期に何を書いてたのかも思い出した.写真自体は2005年に久しぶりにPC-9801fxを起動してみたときに撮ったもの.このときデータも転送しておけば良かった...
適当に書いた雑多なBASICプログラムを入れていた場所っぽい.その場限りのプログラムのつもりだったのでファイル名酷い...途中,通常のBASICからMS-DOS版のBASICにコンバートしてるのでファイルの更新日時は作った順番とは違います.
M.BAS
Wizardry風迷路.SHARPのX1にあった3D迷路を,試しにN88-BASICで書いてみたやつ.X1ちょっと触った後にN88-BASICを触ったら塗りつぶし処理が高速で感動したので,調子に乗ってカラーにした.たぶんここにあるやつの中だと一番古い.
LIFE.BAS
BASICからマウス使ってみるのを試すついでに書いたライフゲーム.70行くらいで書いたはず.
これも写真があった.自信ないけどグライダーガンが生成されるパターンの初期配置に見える.
MORU.BAS
テキストをモールス信号にしてBEEP鳴らしたり,マウスで入力したモールス信号からテキストに変換したりできた気がする.
BMP, BMP3, BMPLO.BAS
gistで晒したやつ.
SL.BAS, SS.BAS, SL2.BAS
StartupLogo. Windows使い始めてから書いたやつ.上記のBMP3.BASを呼び出して,Windowsのlogo.sysをアニメーション付きで再生して,PC-9801でもWindows95気分を味わうためのもの.
BASIC時代後半は,特定行番号に空のサブルーチンを用意しておいて,実行時にMERGE命令でプログラムを動的リンクするとか怪しいこと普通にやってしまってた気がする.
MML, CN
わりとファイルが大きいのだけど,なんなのか分からない.MMLを楽譜表示して編集するプログラムを書こうとしたことあるので,MMLはそれの残骸かなあ.
他
写ってないけど,別のフォルダにわりと真面目に書いたプログラムがある.覚えてる範囲でメモ.
ARIS.BAS
アリを増やして巣が成長していくのを見るシミュレーションゲーム.とてもシュール.初めてのグラフィカルなゲームで,KINGYO.BASの前に書いた.
VRAM上のグラフィック自体が巣の形状データだったので,プログラムを一旦止めて,描画命令実行して巣をいじるとかできた.ただ,FDにVRAMのデータも含めて全部保存してたので,セーブ&ロードが遅かった.かなりいい加減な内容だけど,家族以外に初めて触ってもらったゲームな気がする.
KINGYO.BAS
金魚を育てるシミュレーションゲーム.後からHSPに移植したコードは手元にあるはず.そのあとC++で書きなおして未だに公開して放置している.初めてPC雑誌とかに載ったりしたソフト.BASIC版だけの機能として,水槽の設置場所を選べた.例えば野外に置いておくと猫にやられるイベントとか発生したり冬に凍って全滅する.野外に置いてはいけない.HSP版では冷凍保存できるようになった.
POLY.BAS
自作3Dポリゴンモデラ&ビューアー.中学生の時のものなので行列計算理解できずに書いて恐ろしい実装になってる.いったん極座標系にしたデータを生成したりするのだけど,アーク・タンジェントすら知らず,二分探索とニュートン法もどきで無理やりなにかした覚えがある.微分も知らなかったのでニュートン法もまともに使えてないはず.
3面図と任意視点のビューを切り替えながら操作できるようにはなってたけど,射影変換とかできてないし,イマイチな出来だった.隠面消去も実装しようとしたけどBASICでまともな速度になるアルゴリズムを思いつかなくて,事前にいくつかの方向に沿って面をソートしたデータを作って,それをヒントに何かするという意味不明なものを書こうとして,どうなったのか覚えてない.
名前思い出せない
ドラクエ風RPGっぽいゲーム.中学校の友人と出しあったしょうもないネタをひたすら実装したもの.
BASICのコード領域が足りなくて,DATA文から画像データやマシン語プログラムを読みつつ,次々に別のBASファイルを読んでいく.なんでBASICで書いてしまったのか理解できない.よく思い出せないけど,VRAM上のデータをBASICのDATA文に変換するプログラムとか書いて生成した気がする.
このあたりで,x86アセンブラやC言語の勉強始めたけど,結局WindowsのHSPに.
N88-BASICの前にも,X1で書いたのがあるはずだけど,そっちはあまり力作っぽいのは思い出せないなあ.簡単なお絵かきツールと,テキストベースの双六ゲームくらいか.