ゲームコード(本質的にスクリプト)を実行するプラットフォームに依存しない方法として仮想マシンを構築したいと考えています。
私がゲームで知っている仮想マシンはかなり古く、InfocomのZ-Machine、LucasArtsのSCUMM、id SoftwareのQuake 3です。.net開発者として、私はCLRに精通しており、CIL命令を調べて、VMレベル(言語レベル)で実際に実装するものの概要を取得しました。昨年、6502 Assemblerでも少し手を出しました。
問題は、これを実装したい¹ので、もう少し深く掘り下げる必要があります。スタックベースのVMとレジスタベースのVMがあることは知っていますが、どのアプローチがどれが優れているか、また、より多くのアプローチまたはハイブリッドアプローチがあるかどうかはわかりません。メモリ管理に対処し、どの低レベルタイプがVMの一部であるかを判断し、ldstrのようなものが動作する理由を理解する必要があります。
私の唯一の参考書(Z-Machineのものを除く)はCLI Annotated Standardですが、VMに関するより良い、より一般的/基本的な講義があるのでしょうか?基本的にDragon Bookのようなものですが、VM用ですか?レジスタベースのVMを使用するドナルドクヌースのコンピュータープログラミングの技術は知っていますが、特に未完成であるため、そのシリーズがまだどのように適用できるのかわかりません。
明確化:目標は、専用のVMを構築することです。たとえば、InfocomのZ-Machineには、背景色を設定したり、サウンドを再生したりするためのOpCodeが含まれています。したがって、スクリプト(言語TBD)を受け取り、それからバイトコードを生成するコンパイラーに対して、OpCodesとしてVMにどれだけの量が入るかを把握する必要がありますが、そのためには、実際に何をしているのかを理解する必要があります。
¹最新の技術により、高レベルのスクリプト言語をその場で解釈することができます。しかし、その面白さはどこにありますか?:)また、最近では仮想マシンはVMWareタイプのOS仮想化に関連付けられていることが多いため、Googleを検索するのも少し難しいです...
do { switch(opcode) {case OP1: ... case OP2: ...} while (nextop);
かもしれない、コンパイラ...そして楽しい開始-それは実際に動作させるために最適化
Quake 3
仮想マシンはどのくらい正確ですか?