プログラムとプログラムを戦わせる

その昔、CORE WARS*1という、プログラムとプログラムを戦わせるソフトがあったが、あれの現代版を考えた。

以下、その案。
・8086のコードをエミュレートして戦う。(ただし全ての命令が使用できるわけではない)
・プログラムは通常のアセンブラなり、OllyDbgのラインアセンブラなりで勝手にやれと。
・プログラムの実行は、メモリ空間をデフラグのようにビジュアライズされるのでそれを見て楽しむ。(出来れば3D的な表現等を取り入れてあればbetter)

ルール:
・相手のプロセスの実行しているアドレス(EIP)にwriteすれば勝ち。
・実行は、64k(16bit)のアドレス空間で行なわれる。
・実行イメージが配置されるメモリアドレスはランダム。
・5回の勝負で決着をつける。
APIは INT xxをAPI呼び出し用に使って、debug用表示や、プロセスのfork等、ゲームバランスを調整するためのものを用意するかも。

CORE WARSに触れたのはいまから17年ほど前。私は当時、中学生だったと思う。

メモリfillや、8byteごとにwriteしていく(一寸法師と呼ばれる)ような単純なプログラムが勝利するゲームバランスにすると面白くない。そのへんをどう調整するかが課題だろう。

当時「ダロス」というアニメを見て、そのなかで自己修復機能を持ったダロスという人工建造物が出てくるのだが、これに影響を受けてCORE WARS用にそういうプログラムを書いた覚えがある。(30バイト程度のプログラムだが)

自分のコピーを作り、繁殖する。自分の作ったコピーの生存フラグをチェックし、破損していれば壊されたと見なして、再度自分のコピーを作るのだ。いま考えれば、これは一種のwormなのだが。こういう仮想マシン上で17年も前にwormを書いていたとは..ひょっとすると私が世界初ではないかしらん。(知らんけど) しかも中学生のときとは..かなりキチガイじみた少年だったんだなぁ..などと感心したりする。

まあ、そんなことはどうでもいいので、誰か作ってもらえんかの。>このゲーム


ABAさんがネタにしてくれたんで紹介:
http://d.hatena.ne.jp/ABA/20040212#p1
> ポケモンみたいになにか集めさせようか。インストラクションセットとか、パイプラインとか。
>「うなれオレの128段スーパーハイパーパイプライン!」「なんの我が1024bitVVVLIWに敵なし!」

それ、めっちゃ面白いんですけど(ネタとしては)

*1:いまでも遊べるようだ。→http://www.koth.org/pmars/