Я хочу створити віртуальну машину як незалежний від платформи спосіб запустити якийсь ігровий код (по суті, сценарій).
Віртуальні машини, про які я знаю в іграх, досить старі: Z-Machine Infocom , LucasArts ' SCUMM , id Software's Quake 3 . Як розробник .net, я знайомий з CLR і вивчив інструкції CIL, щоб отримати огляд того, що ви реально реалізуєте на рівні VM (порівняно з мовним рівнем). Я також трохи запитався в 6502 Assembler протягом останнього року.
Справа в тому, що тепер, коли я хочу це здійснити, мені потрібно копати трохи глибше. Я знаю, що існують VM на основі стека та реєстру, але я дійсно не знаю, який з них краще в чому і якщо є більше або гібридні підходи. Мені потрібно розібратися з керуванням пам’яттю, вирішити, які типи низького рівня входять до складу ВМ, і мені потрібно зрозуміти, чому такі речі, як ldstr, працюють так, як це відбувається.
Мій єдиний довідник (крім матеріалів Z-Machine) - це Анотований стандарт CLI , але мені цікаво, чи є краща, більш загальна / фундаментальна лекція для ВМ? В основному щось на кшталт Книги Драконів , але для візиток? Мені відомо про мистецтво комп’ютерного програмування Дональда Кнута, яке використовує VM на основі реєстру, але я не впевнений, наскільки застосовна ця серія досі, тим більше, що вона ще недобудована?
Роз'яснення: мета полягає у створенні спеціалізованого ВМ. Наприклад, Z-Machine Infocom містить OpCodes для встановлення кольору фону або відтворення звуку. Тому мені потрібно розібратися, скільки йде в VM як OpCodes проти компілятора, який бере сценарій (мова TBD) і генерує з нього байт-код, але для цього мені потрібно зрозуміти, що я насправді роблю.
¹ Я знаю, сучасна технологія дозволить мені просто інтерпретувати мову сценаріїв на високому рівні. Але де в цьому веселощі? :) Це також трохи важко в Google, тому що віртуальні машини в наш час часто асоціюються з віртуалізацією ОС VMWare типу ...
do { switch(opcode) {case OP1: ... case OP2: ...} while (nextop);
потім, можливо, компілятор ... і тоді починається задоволення - оптимізація для того, щоб вона фактично працювала
Quake 3
віртуальна машина?