僕は機械語を5才のときに覚えた


「中学生のころの作品」(→ http://d.hatena.ne.jp/yaneurao/20081224 )に次のようなコメントとはてブをいただいている。

ddd 2008/12/24 22:27
小学生でオール機械語のゲームを作るとは凄いですねー。


2008年12月26日donpyxxxコラム 小学生からマシン語


どちらも正しい認識ではない。私が最初に触ったマシンはTK-80で、電卓のお化けのようなハードで、これは機械語しか動かなかった。5才のときだ。オール機械語で初めてゲームを作ったのもその年だ。


こう言うと私がとんでもない天才に聞こえるかも知れないが、まったくそういうわけではない。たぶん多くの人が当時の事情を知らないので、いまだに「ネタじゃね?」と思う人が後を絶たない(若い人ほどそういう傾向がある)のだが、ネタでも何でもない。

復活!TK‐80
復活!TK‐80
posted with amazlet at 08.12.26
榊 正憲
アスキー
売り上げランキング: 37705
おすすめ度の平均: 4.0
3 コンピュータアーキテクチャの教材に
4 実機を知る人は買い
5 懐かしいよ〜
5 懐かしい!
3 昔は良かった・・・のPC版です。

若いプログラマの人たちに機械語アセンブラと言うと凄くハードルが高いように思うかも知れないが、プロセッサがいまのように複雑なアーキテクチャではなかったし、レジスタだって数本しか無く、変数宣言だってしなくてもそれらのレジスタは使えるという意味では、(変数宣言に関しては)スクリプト言語以下だった。


命令だって覚えなければならないのは10種類ほどしかない。すべての命令を書き出しても4ページほどしかない。文法もすこぶる単純である。入門としてはこれ以上簡単なものはないだろう。C/C++の分厚い仕様書とは比較にならない。スクリプト言語よりもはるかに単純である。


機械語は、C/C++にあるような型なんてものもなくレジスタはすべては整数型である。メモリ管理だって、RAMとROMの区別しかない。書き込めるメモリと書き込めないメモリとがフラットに存在するだけだ。


そして、TK-80では演算の結果だってすぐにLEDで確認できたし、メモリの状態も確認できた。つまり、いまで言うところの統合的でインタラクティブな環境だったわけである。これで使えないはずがない。いまのように複雑なテキストエディタや統合環境の使い方を覚える必要もなかったし、コンパイルのためにmakeを書く必要もなかった。OSすらなかった。


TK-80にはμPD8080A(インテルの8080A互換のNEC製プロセッサ)がCPUとして載っており、命令の種類とオペランドはそれぞれ8進数1桁(3ビット)で表現される。だから、覚えておくべきことは基本的には8つしかない。(3bitで表現できるのは2の3乗=8通りなので) 日本全国の都道府県を覚えるほうがはるかに大変だ。(私はいまだに日本の都道府県を半分も言えない。茨城は正しくは「いばらき」と読むということを最近になって知ったぐらいだ。)


このようにTK-80を使うに当たって覚えなくてはならないことはほんの一握りである。こんなものも使えなければ大馬鹿野郎だろう。積み木のブロックでお城を上手に作るほうが遙かに難しい。


そんなわけで、私は5才のときに機械語が使えるようになった。TK-80を触りだしてその数週間後には、数字をモグラに見立てて、その数字のキーを叩くモグラ叩きゲームとかを作った。


その後、最初に買ってもらったパソコンは小学二年生のときで、PC-6001だった。こいつはCPUとしてはZ80が載っていた。Z80は8080Aの親分であり、アーキテクチャが似ていたので労せずそのまま使えた。


しかし意外とBASICはつまずくことが多かった。例えば、当時のBASICには整数型がないものがあって、数値と言えば浮動小数点型であり、計算をしているとすぐに誤差が蓄積してくる。数値解析法の基礎すら知らなかった小学二年生の私にはその挙動がどうも不審に思えた。このような時は都度BASICのROMをダンプさせて、そのコードを読んだ。当時のマシンはメモリも少なくBASICのROMはすこぶる小さかった。だからROMを全部ダンプさせてもたかだか知れていた。


最近になって「オープンソース」の考え方が浸透して、オープンソースのプロジェクトに参加して学ぶことは一人前のプログラマになるための必須科目のように言われているが、当時だって、(バイナリは自由に読み出せたわけで)最初から「オープンバイナリ」であり、パソコンの誕生以来、バイナリはずっと僕たちの前に開かれていたのである。オープンソースからいろんなプログラミングのテクニックを学ぶのと同様に、バイナリから僕たちは多くのことを学んだのである。そしてそれが普通だったのだ。