最後の技術者たち:消えゆくIT伝統芸の記録(2)
第二話 アセンブラ
機械の鼓動を聞いていた人たち
第一話では、ファジー制御について古代守さんに話を聞きました。
機械が人間の『なんとなく』を理解しようとしていた時代。
その記憶をたどるなかで見えてきたのは、失われた技術そのものではなく、技術者が機械と向き合う姿勢でした。
第二話で訪ねたのは、アセンブラです。
コンピュータに最も近い場所で、機械の都合を人間が引き受けていた言葉。
高級言語でも、AIが生成するコードでもありません。
レジスタ、番地、割り込み、クロック、I/Oポート。
機械が実際に動く場所に、最も近い言語です。
話を聞いたのは、真田志郎さんです。
かつて組み込み制御の現場で、Z80、8080、6800、68000、8086といったCPUを相手に、アセンブラでプログラムを書いてきた技術者です。
作業机の上には、古いワンボードマイコン、ROMライタ、EPROM、ロジックプローブ、8インチフロッピーディスク、そして16進キーボードのついた小さな装置が置かれていました。
真田さんは、その装置を見ながら、少しだけ笑いました。
『そりゃあ昔はな、キーボードと言っても、今のようなものではなかった。0からFまでじゃ。16進数を、一つずつ打ち込む。間違えれば動かん。いや、動かんだけならまだましじゃ。どこを間違えたのか、それすら分からなくなる』
0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
それが、機械へ命令を渡す入口でした。
現在なら、コードを書き、コンパイルし、デバッガで追跡します。
けれど、当時の現場では、命令表を開き、番地を数え、16進コードを紙に書き、それを直接入力することもありました。
真田さんは、古いノートを開きました。
そこには、手書きの番地表と、ニーモニックと、16進コードが並んでいます。
LD A,(HL)
INC HL
CP 0D
JR NZ,LOOP
若い読者には、ただの記号に見えるかもしれません。
しかし、真田さんには、その一行一行が機械の動きとして見えていました。
『これを見るとな、頭の中でレジスタが動くんじゃ。Aに値が入り、HLが一つ進み、比較して、違えば戻る。ソースを読んでいるというより、機械が一歩ずつ歩いているのを見ている感覚に近い』
機械が歩いている。
アセンブラを書く技術者は、コードの意味だけを読んでいたのではありません。
CPUの内部で、どのレジスタがどう動き、どの番地へ飛び、どのタイミングで信号を出すのかを見ていました。
真田さんが若い頃、現場で『ゼッパチ』と呼ばれていたCPUがありました。
Z80。
ザイログが開発した8ビットCPUです。
日本のマイコン、制御機器、ゲーム機、学習用コンピュータ、組み込み装置の中で、多くの技術者がこの石に触れました。
真田さんの目が、少しだけ柔らかくなります。
『ゼッパチは、いい石じゃった。Aレジスタ、HL、DE、BC、それにIX、IY。どこに何を置くかで、書いた人間の癖が出る。Aを空けておくのか。HLをポインタにするのか。DEを逃がしに使うのか。スタックに積めば済むと思う者もいるが、積めば遅い。戻し忘れれば、それで終わりじゃ』
レジスタとは、CPUの中にある小さな作業場所です。
高級言語では、変数を書けば、細かな配置はコンパイラが考えてくれます。
しかしアセンブラでは、どのレジスタに何を入れるかを、人間が決めます。
そこに、技術者の腕が出ます。
『Z80と8086では、考え方がまるで違う。68000はきれいな石じゃったが、あれはあれで流儀がある。CPUには性格があるんじゃ。命令セットを覚えただけでは足りん。そいつが、どう動きたがっているかを見ないといかんのじゃ』
CPUがどう動きたがっているか。
まるで機械に人格があるかのような言い方です。
しかし、制御系の現場では、それは単なる比喩ではありませんでした。
同じ命令でも、クロック数が違う。
同じ処理でも、メモリの使い方で速度が変わる。
同じ信号でも、出すタイミングで機械の挙動が変わる。
アセンブラとは、機械の性格に合わせて、人間が身をかがめる言語でした。
棚の奥には、マイクロカセットも残っていました。
まだフロッピーディスクが高価だった時代、小さなプログラムやデータは、カセットテープに保存されることがありました。
真田さんは、苦笑します。
『マイクロカセットは、気まぐれじゃったな。ピーガー鳴って、じっと待つ。待ったあげくにエラーが出る。あれは記録装置というより、精神修行じゃった』
音として保存されたプログラム。
読み込みに失敗すれば、また最初からです。
そこへ、8インチのフロッピーディスクが現れました。
今の感覚では、巨大で、薄く、扱いにくい記録媒体です。
けれど、当時の技術者には、未来そのものでした。
真田さんは、両手で大きな四角を作って見せました。
『8インチのフロッピーが来たときは、驚いた。保存できる。読み戻せる。テープより速い。今の人から見れば大きな円盤かもしれんが、あのときは本当に、便利なものができたと思った』
大きいのに、未来だった。
遅いのに、革命だった。
技術の進歩は、あとから見ると滑稽に見えることがあります。
しかし、その時代の現場では、それが本当に世界を変えていました。
やがて、話は制御系の怖さに移りました。
仕様書には、簡単に書いてあります。
信号を出す。
モーターを回す。
センサーを読む。
割り込みを受ける。
I/Oポートに値を書く。
しかし、現場では『いつ』が問題になります。
早すぎてもいけない。
遅すぎてもいけない。
長すぎてもいけない。
短すぎてもいけない。
真田さんは、古いオシロスコープを指さしました。
『仕様書には、信号を出すとしか書いていない。だが現場では、いつ出すかが命なんじゃ。1クロック遅れただけで、モーターが妙な音を出すことがある。割り込みを止めすぎれば通信が落ちる。そこは、波形を見なければ分からん』
アセンブラは、単に古い言語ではありません。
機械の時間に、人間が合わせていた時代の言語です。
クロック。
割り込み。
スタック。
ポート。
番地。
フラグ。
それらは抽象的な概念ではありませんでした。
実際に機械が鳴る。
止まる。
熱を持つ。
暴走する。
焦げる。
その感覚の中で、コードは書かれていました。
そして、真田さんは、最近のAIによるコード生成についても慎重です。
『AIは便利じゃ。否定するつもりはない。じゃが、制御系では、それらしいコードがいちばん危ない。動きそうに見える。理屈も合っているように見える。だが、実機に載せた瞬間、機械はそんな言い訳を聞いてはくれんのじゃ』
現在、私たちは日常的にアップデートに慣れています。
Windowsは更新されます。
スマートフォンのアプリも更新されます。
ブラウザもクラウドサービスも、あとから修正されます。
バグがあれば、パッチを当てればよい。
不具合があれば、次のバージョンで直せばよい。
そういう文化の中で、私たちは暮らしています。
しかし、制御系の現場では、その感覚が通用しないことがあります。
原子力発電所。
航空機。
管制システム。
自動車。
医療機器。
鉄道信号。
宇宙開発。
工場プラント。
そこでは、一つのバグが人命に関わります。
一つのタイミングのずれが、事故につながります。
一つの見落としが、回収不能の損失になります。
真田さんは、しばらく黙ったあと、ゆっくりと息を吐いて言いました。
『パソコンならな、再起動してくださいで済むこともある。けれど、飛行機は空の上で再起動なんぞできん。原発も、自動車も、ロケットも同じじゃ。一つ番地を間違えた。一つ割り込みを見落とした。一つタイミングを外した。それだけで、人が死ぬことがある。あとでパッチを当てます、次の版で直します。そんな考え方はな、制御の現場では冗談にもならん。冗談にした時点で、もう現場に立つ資格がないんじゃ』
その言葉には、古い技術者の頑固さだけではなく、機械が現実の世界に触れる瞬間を知る者だけが持つ、静かな恐怖がありました。
便利になったことは、間違いありません。
抽象化が進んだことも、進歩です。
AIが開発を支援することも、否定すべきではありません。
しかし、機械は最後には現実の世界を動かします。
モーターを回す。
弁を開く。
ブレーキをかける。
燃料を送る。
信号を切り替える。
炉を冷却する。
機体を制御する。
その瞬間、コードは文字ではなくなります。
現実に触れる力になります。
アセンブラの技術者たちは、その怖さを知っていました。
メモリが少なかったから、無駄を削りました。
CPUが遅かったから、クロックを数えました。
デバッガが貧弱だったから、頭の中で実行しました。
現場で機械が暴れたから、波形を見ました。
一つのバグが怖かったから、何度も確認しました。
それは、古い精神論ではありません。
制約の中で、機械と正面から向き合っていた時代の作法でした。
真田さんは、古いZ80のボードを手に取りました。
指先で、基板の端をそっと撫でます。
『こいつはな、遅い。今どきのスマートフォンとは比べものにもならん。メモリも少ない。命令も限られている。けれどな、こいつが何をしているかは見えたんじゃ。Aレジスタに何が入り、HLがどこを指し、フラグがどう立つか。こちらが一つ間違えれば、こいつはその通りに間違える。勝手に気を利かせたりはせん。ごまかしも効かん。だから怖かった。だが、そのぶん面白かった』
怖いし、面白かった。
その短い言葉には、アセンブラという技術の本質がありました。
機械は、人間の失敗を隠してくれません。
しかし、人間の意図もまた、余計な解釈を挟まず、そのまま受け止めてくれます。
そこには、便利さとは違う信頼がありました。
機械に任せる信頼ではありません。
機械のふるまいを、自分の目で最後まで引き受ける信頼です。
アセンブラは、人間にやさしい言語ではありません。
便利な言語でもありません。
生産性の高い言語でもありません。
しかし、機械が何をしているのかを、人間に突きつける言語でした。
高級言語は、人間に考えやすい世界を与えます。
アセンブラは、機械が本当に動いている世界を見せます。
その距離の近さが、かつての技術者を育てました。
そして、その距離の近さゆえに、アセンブラは現代の開発現場から遠ざかっていきました。
いま、アセンブラを日常的に書く人は少なくなりました。
けれど、完全に消えたわけではありません。
ブートローダ。
デバイスドライバ。
OSカーネル。
組み込み制御。
セキュリティ解析。
リバースエンジニアリング。
レトロゲーム保存。
古い産業機械の保守。
機械に近い場所では、今もその知識が必要とされています。
ただし、それを語れる人は減っています。
真田さんは、棚の奥から古い紙のファイルを取り出しました。表紙は日に焼け、角は擦り切れています。中には、手書きのニーモニック、番地表、タイミングチャートが、几帳面な文字で残されていました。
『こんなものを、いまの若い人に見せたら、まず嫌がるじゃろうな。なんじゃこれは。呪文か、古文書か。そう言われるかもしれん』
そう言って、真田さんは小さく笑いました。けれど、その笑いはすぐに消えました。
『けれどな、嫌がってもいいから、一度は見ておいたほうがいい。コンピュータというものは、本当はこういうものなんじゃ。雲の上で勝手に賢くなっているわけではない。魔法でもない。AIが、どこかで勝手に考えているわけでもない』
真田さんは、番地表の一行を指でなぞりました。
『ここに番地がある。ここに命令がある。ここでメモリを読み、ここでレジスタが変わる。どこかで電気が流れ、どこかで信号が出る。そこを見ずに、便利じゃ、賢いじゃと言うのは、少し怖いんじゃ』
コンピュータは、雲の上に浮かぶ魔法ではありません。
その奥では、いまも電気が流れ、番地が読まれ、命令が実行されています。メモリが読み書きされ、レジスタが変わり、信号が出て、現実の機械が動いています。
アセンブラは、その場所に、人間がもっとも近くまで降りていくための言葉でした。
そして、その場所を知る人が減っていることは、単なる懐古では済まない問題です。
AI時代に、私たちはますます抽象化された世界で生きています。画面の向こうで何が起きているのか。コードの奥で何が動いているのか。機械が現実に何をしているのか。
それを知らないまま、便利さだけが積み上がっていきます。
そのとき、最後に現場へ呼ばれるのは、古い技術を知る人かもしれません。
動かない装置。読めないコード。残されたROM。行方不明の仕様書。誰も触れなくなった制御盤。
そこで真田志郎さんは言います。
『まず、番地を見せてもらおう』
第二話、アセンブラ。
それは、機械語のとなりで、人間が機械の都合を引き受けていた時代の物語です。
アセンブラは、古い言語ではありません。
機械の鼓動を聞くために、人間が耳を澄ませていた時代の言語なのです。
次回は、COBOL。
金融と行政の奥底で、いまも静かに動き続ける古い言語を訪ねます。
文・武智倫太郎
