Finding the Lost Vikings – Reversing a Virtual Machine
ryiron.wordpress.com
ryiron.wordpress.com
Of course there is the Infocom Z-machine, going way back, that made porting between all the different microcomputers of that era somewhat easier. Another interesting writeup of this kind of an architecture is for Another World [1]. Along those lines, I wonder in the case of The Lost Vikings, how much of the game code was able to be reused between the different platforms it was released on (SNES, Genesis, PC, maybe Mac, I don't remember?)
[1] http://fabiensanglard.net/anotherWorld_code_review/index.php
After all, you had the 6502, Z80, 68000, and various x86 generation all bouncing around (the 486 was introduced in 1989, this game was released in 1993).
The Sega Genesis/Mega Drive for example had both a 68000 and a Z80 inside it, while the SNES used a 6502 clone.
The NES used a 6502 clone, with a few minor changes (no BCD mode, I think some changes to interrupts, addition of sound-generation hardware).
The SNES used a 65c816 clone, from the same family of chips.
Was it sort of a write-once, run everywhere thing? So they can reuse the game code on various platforms?
Or, worse, writing every bit of your game in assembly. (Worse in the sense of time consumed. In the sense of fun had, the VM approach takes some of that away ;)
I previously reversed another game engine called Comprehend (for 1980s text/graphical adventure games) which also had a VM. I ended up talking with one of the original developers, who said that portability was a major reason. Their company wrote the original Apple 2 implementation, and then contracted development for the other platforms out, so they just provided specs for the VM. The Lost Vikings development may have been similar.
In the Lost Vikings the VM implementation was almost certainly written in assembler. There are various tricks used in the binary which I don't think compilers of the day were capable of. The other parts of the game also appear to have probably been written in assembler, which I think is interesting since it was developed quite late in the DOS era.
Wikipedia mentions is was available on the following platforms: Amiga, Amiga CD32, Game Boy Advance, MS-DOS, Mega Drive/Genesis, Super NES, PlayStation
When Blizzard went to make the Mac (System 7) port of Warcraft 1, the guys that were interviewed about it mentioned that the port was relatively easy because the game code was relatively insulated from the OS and all they had to do was update the OS-side code and keep the game logic running in "a thread." (their words)
Probably this virtual machine model was continued at least to Warcraft 1, which makes a lot of sense for a shop that was used to doing console ports of their PC titles at the time.
Thanks for the article.