VOGONS


First post, by wbahnassi

User metadata
Rank Oldbie
Rank
Oldbie

Happy new year everyone!

I'm trying to install Terminator 2029 from its original disks, and INSTALL.EXE causes an immediate machine restart. My CPU is Intel Xeon W3520 2.67GHz, so definitely not your good ol' 386 😀 However, I tried a VirtualBox DOS setup and resulted in the same behavior. Finally, DOSBox 0.74-3 also suffers the same.

I recall reading somewhere that this executable is using undocumented CPU instructions that weren't supported by later CPUs. I'm hoping someone here might have some insight or know of a patch... otherwise I can't see how I can install this game properly. I will have to revert to some pre-installed copy, which isn't the end of the world of course... but a man can at least hope? 😀

Best!

Reply 2 of 5, by wbahnassi

User metadata
Rank Oldbie
Rank
Oldbie

Yes it works perfectly thank you! Any known references/documentation on these 386 prefetch instructions? Maybe a patch or something can be made to NOOP those instructions?

Cheers!

Reply 3 of 5, by jmarsh

User metadata
Rank Oldbie
Rank
Oldbie

It's not using unknown instructions. It overwrites the memory that it's running from, relying on the CPU's cache to still hold the original contents.

Reply 4 of 5, by wbahnassi

User metadata
Rank Oldbie
Rank
Oldbie

Interesting. So like touch memory at some single location, wait a bit, then assume the whole cacheline is fetched, then write something on the same location bypassing the cache somehow, while whatever you read within the cacheline will be served from the cache? I'm interested to learn what would be the benefits from such a technique? (I do code myself so I find this intriguing)

Best!

Reply 5 of 5, by jmarsh

User metadata
Rank Oldbie
Rank
Oldbie

For older CPUs it's not really a traditional instruction cache with multiple lines, but rather a very small queue that only holds the next few opcodes. Any jump or branch flushes it. Modifying code immediately before it gets executed without an intermediate jump or branch is usually an attempt at confusing a debugger or emulator.