First post, by Tronix
Today I would like to run Duke Nukem 3D on my Am386-DX40 with 128Kb cache and 8Mb RAM: game console start, display version, display "loading strings" and then I get DOS4GW error: "06h - invalid opcode". CS:EIP contain 0F C8 means BSWAP 486+ instruction. I downloaded Duke3d original source code (very hard to find, now I have lost link again), find all BSWAP instructions in sources and replace them to:
"rol ax, 8",\
"rol eax, 16",\
"rol ax, 8"\
I am using Watcom 11.0 compiler. I recompile Build engine and game with /3r compiler options instead /5r.
/3r - (wcc386/wpp386 only) generate 386 instructions based on 386 instruction timings, and use register-based argument-passing conventions
/5r - (wcc386/wpp386 only) generate 386 instructions based on Intel Pentium instruction timings, and use register-based argument-passing conventions (default)
Then i bind new DOS-extender DOS32A DOS32A to EXE file.
So, game started normaly on my 386. Slow, about ~5 fps with high details, shadows and full screen, but worked. If anyone interested, you can download my pre-compile EXE from here: Duke Nukem 3D v1.4/i386 - Atomic Edition
UPD: link broken, i attach precompiled Duke3d to this message.
PS: UPD: find source code at http://legacy.3drealms.com/downloads.html