編集、グッドニュース!
10 年後、私はついに腰を据えてこれを実現する必要があると判断しました。必要な convert-8080-to-z80-or-x86 および convert-z80-to-x86 ツールを作成し、Sargon コードを x86 コードに変換し、以下で説明するように検索の深さを増やし、基本的にすべての目標を達成しました。プロジェクトのウェブサイト。
レトロ コンピューティング プロジェクトでは、1970 年代の 8080 アセンブリ言語の本体を x86 形式に変換する必要があります。まさにそれを行うためのツールが、Intel の 80x86 ファミリの導入に関するマーケティングの重要な部分であった時期がありました。しかし、私のグーグル スキルは、その元のツールまたは類似のものを見つける仕事には及ばないようです。そのようなツールがどこでも利用できるかどうかは誰にもわかりませんか?
編集
私がやろうとしていることをより明確にするために、いくつかの背景情報を追加することにしました。これは一般的な関心のためであり、さらにフィードバックを引き出すためのものです。
以前のプロジェクトで、私は 1970 年代のチェス プログラムである Microchess を調べ、著者の Peter Jennings の協力を得て、現代のマシンで実行できるようにしました。Peter は彼の Web サイトで Microchess の話を詳しく説明し、6502 アセンブリ言語のソースを提供しました。私の貢献がストーリーに追加され、次の場所で見つけることができます。
http://benlo.com/microchess/microchess9.html
私がそのプロジェクトに取り組んだ方法は、手作業でコードを最小限に変換して、C 言語のセマンティクスに一致させることでした。たとえば、これを変換しました。
LDY #$0F ; CALCULATE
LDA SQUARE ; POINTS
ELOOP CMP BK,Y ; CAPTURED
BEQ FOUN ; BY THIS
DEY ; MOVE
BPL ELOOP
FOUN LDA POINTS,Y ;
これに;
LDYi (0x0F); // CALCULATE
LDA (SQUARE); // POINTS
ELOOP: CMPx (BK,Y); // CAPTURED
BEQ (FOUN); // BY THIS
DEY; // MOVE
BPL (ELOOP);
FOUN: LDAf (POINTS,Y);
必要な 6502 命令すべてに対応する C プリプロセッサ マクロを作成しました。たとえば、LDYi() は、エミュレートされたレジスタ Y に (i) 中間値をロードします。
しばらくして、ドイツ人の Andre Adrian が私のコードを取得し、最新のチェス GUI からコードを駆動できるようにするインターフェイスを追加したことを発見しました。いいですね、考えればよかったのに。これは彼のウェブサイトで見ることができます。
http://www.andreadrian.de/schach/index.html
同じページ (Google 翻訳を使用) で、彼は元のバージョンの Sargon にリンクしています。これは、別の古典的なチェス プログラムであり、おそらくレトロなチェスの古典であり、誰かがこのコードを私が行ったのと同じ方法で生き返らせてくれることを願っています。マイクロチェス (とにかく、Google 翻訳が言っていることだと思います)。よしよし、私は奉仕するためにここにいる!今度は GUI インターフェースの追加もおろそかにするか、Andre と協力するか。
Sargon アセンブリ言語はこちらです。
http://web.archive.org/web/20040217034933/madscientistroom.org/chm/Sargon.html
Andre は不要なものをすべて削除し、アセンブリ言語コードだけをここに残しました。
http://www.andreadrian.de/schach/sargon.asm
さて、プロットは厚くなります。Andre は、エミュレーターを使用して、この機能を自分で動作させようとしました。(2012 年 1 月 3 日編集 - Andre はこれを大幅に前進させ、最新の PC で古い Sargon コードを実行できるようになりました - 以下の彼の回答と上にリンクされている彼の Web サイトを参照してください)。しかし、彼が理解しているとは思えない複雑な問題があります。Sargon コードは、実際には Z80 をターゲットにしています。しかし、アセンブリ言語は通常の Z80 アセンブリではなく、代わりに 8080 アセンブリであり、Z80 のみの命令に奇妙な Intel スタイルのニーモニックが使用されています。いくつかの背景。Zilog Z80 は、Intel 8080 のサード パーティの子孫です。8080 命令セットのバイナリ互換スーパーセットを使用します。Zilog は、Z80 用に、よりクリーンで、より直交的であるが (ソース レベルで) まったく異なるアセンブリ言語を提供することを決定しました。サードパーティ (第 4 の?) パーティは、これが悪い決定であると明確に判断し、Z80 拡張機能を Intel のような方法で表現した、別の Intel スタイルの Z80 アセンブラを作成しました。あるいは、既存の 8080 アセンブラのマクロ機能を使用して Z80 拡張機能を追加しただけかもしれません。それは問題ではありません; 複雑なのは、Sargon コードがこのかなり奇妙なハイブリッド アセンブラを使用していることです。
Z80 のエミュレーションや私の Microchess プロジェクトからの C マクロ アプローチの繰り返しではなく、8080 から x86 へのトランスレータが必要な理由がいくつかあります。
1) 今回はもっと多くのコードがあります。最小限の変換であっても、できれば行ごとの編集は避けたいと思います。
2) 今回はコードをフルスピードで実行したい。マイクロチェスではできなかった、検索の深さを増やすことができるように思えます。チェスのコードは CPU サイクルを消費します。
3) 便利なエミュレーション ソリューションがあったとしても、このようなものをアセンブルする必要があります。これは、奇妙なアセンブラ規則を考えると問題です。しかし、すべての 8080 ニーモニックを x86 に変換できれば、x86 の土地で快適に作業でき、Z80 拡張の <10% 程度の行を同等の x86 コードに手で変換するだけです。
とりとめのない投稿で申し訳ありません。うまくいけば、少なくとも1人がそれを面白いと思うでしょう。もう 1 つの要求。伝説的な Sargon プログラマーである Dan と Kathe Spracklen の祝福を得たいと思っています。しかし、彼らはウェブでの存在感をまったく持っていないようです. Dan Spracklen は LinkedIn を利用していますが、アカウントが機能していないようで、応答がありません。この人たち、または連絡方法を知っている人がいたら教えてください。