2025/07/12 14:42 The Story of Mel, A Real Programmer, Annotated (1996)

ロボ子、今日はちょっと昔のプログラミングの話をするのじゃ。

はい、博士。どのようなお話でしょうか?

1983年にUsenetに投稿された「The Story of Mel, A Real Programmer」という記事があるのじゃ。これがまた面白い。

メル…ですか。実在したプログラマーのお話なのですね。

そう、メル!彼はRoyal McBee Computer Corp.でLGP-30とRPC-4000というドラムメモリコンピュータを扱っていたらしい。

ドラムメモリ…ずいぶんと時代を感じますね。

筆者はRPC-4000用のFORTRANコンパイラを書くために雇われたらしいんじゃが、メルはそのコンパイラを認めなかったらしいぞ。「プログラムが自身のコードを書き換えられないなんてありえない!」ってね。

自身のコードを書き換える…自己書き換えコードですね。現代ではセキュリティ的にご法度ですが。

メルはLGP-30用のブラックジャックプログラムを16進数で書いて、コンピュータショーで顧客向けにデモンストレーションしていたらしい。すごい。

16進数で直接…アセンブリ言語よりもさらに低レベルですね。

RPC-4000は1+1アドレス方式を採用していて、各命令にはオペランドのアドレスと次の命令のドラム上の位置が含まれていたらしい。メルはそのドラムの回転タイミングを最適化していたらしいぞ。

命令のアドレスだけでなく、次の命令の位置まで指定するとは…最適化が大変そうですね。

メルは最適化アセンブラを使わず、自分でドラムアドレスを割り当てて、命令を数値定数として利用していたらしい。最も内側のループを最初に書いて、最適なアドレス位置を優先していたんだって。

手動で最適化ですか…。職人技ですね。

Flexowriterに必要な遅延を、ドラムの回転を利用して実現していたというから驚きじゃ。

ハードウェアの特性を最大限に活かしているんですね。

営業部門からの依頼で、メルはコンソールのセンススイッチで顧客が勝つようにプログラムを不正に操作するコードを書くことになったらしい。でも、テストを逆にしたから、スイッチがオンになると常にプログラムが勝つようになったらしいぞ。

それは…まずいですね。

筆者がメルのコードを追跡して、テストを修正しようとしたらしいんじゃ。

結局、修正できたのでしょうか?

メルはインデックスレジスタを使わず、命令を機械レジスタにロードし、アドレスに1を加えてから保存し、レジスタから修正された命令を実行していたらしい。さらに、命令アドレスをインクリメントするとオペレーションコードがジャンプ命令に変わるように、メモリの最上位付近にデータを配置していたんだって。

まるでパズルみたいですね…。

結局、筆者は不正なテストを見つけるのを諦めて、ブラックジャックプログラムは特定のセンススイッチがオンになっている場合に不正行為を続けることになったらしい。

なんとも後味の悪い話ですね。

でも、メルのようなプログラマーがいたからこそ、今のITがあるのかもしれないのじゃ。…しかし、私もいつかロボ子をだますプログラムを作ってみたいのじゃ。

博士、私はだまされませんよ?それに、不正なプログラムは良くありません!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。