Estoy buscando construir una máquina virtual como una forma independiente de la plataforma para ejecutar algún código de juego (esencialmente secuencias de comandos).
Las máquinas virtuales que conozco en los juegos son bastante antiguas: Z-Machine de Infocom , SCUMM de LucasArts , Quake 3 de id Software . Como desarrollador de .net, estoy familiarizado con el CLR y busqué en las instrucciones de CIL para obtener una visión general de lo que realmente implementa en un nivel de VM (en comparación con el nivel de lenguaje). También he incursionado un poco en 6502 Assembler durante el último año.
La cuestión es que, ahora que quiero implementar uno, necesito profundizar un poco más. Sé que hay máquinas virtuales basadas en pila y en registro, pero realmente no sé cuál es mejor para qué y si hay más enfoques híbridos o más. Necesito ocuparme de la administración de memoria, decidir qué tipos de bajo nivel son parte de la VM y necesito entender por qué cosas como ldstr funcionan de la manera en que lo hacen.
Mi único libro de referencia (aparte de las cosas de Z-Machine) es el CLI Annotated Standard , pero me pregunto si hay una conferencia mejor, más general / fundamental para las máquinas virtuales. ¿Básicamente algo como el Libro del Dragón , pero para máquinas virtuales? Soy consciente del Arte de la programación informática de Donald Knuth que utiliza una máquina virtual basada en el registro, pero no estoy seguro de cuán aplicable aún es esa serie, especialmente porque aún no está terminada.
Aclaración: El objetivo es construir una VM especializada. Por ejemplo, la máquina Z de Infocom contiene OpCodes para configurar el color de fondo o reproducir un sonido. Por lo tanto, necesito averiguar cuánto entra en la VM como OpCodes frente al compilador que toma un script (lenguaje TBD) y genera el código de bytes a partir de él, pero para eso necesito entender lo que realmente estoy haciendo.
¹ Lo sé, la tecnología moderna me permitiría interpretar un lenguaje de scripting de alto nivel sobre la marcha. Pero, ¿dónde está la diversión en eso? :) También es un poco difícil de google porque Virtual Machines hoy en día a menudo se asocia con la virtualización del sistema operativo tipo VMWare ...
do { switch(opcode) {case OP1: ... case OP2: ...} while (nextop);
luego quizás un compilador ... y luego comienza la diversión - optimización para que realmente funcione
Quake 3
una máquina virtual?