[Bug 34636] Multiple games report 'Bad or missing dispdib.dll' in Win95/98 mode (Earthworm Jim, Pitfall: The Mayan Adventure)

WineHQ Bugzilla wine-bugs at winehq.org
Sun Mar 14 06:04:07 CDT 2021


https://bugs.winehq.org/show_bug.cgi?id=34636

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
                URL|http://www.fileplanet.com/1 |https://web.archive.org/web
                   |0675/download/Earthworm-Jim |/20210314095454/https://ima
                   |-Demo                       |ge.dosgamesarchive.com/game
                   |                            |s/ewjdemo.zip
         Resolution|---                         |INVALID
            Summary|In Win95/98 mode Earthworm  |Multiple games report 'Bad
                   |Jim demo reports missing    |or missing dispdib.dll' in
                   |dispdib.dll                 |Win95/98 mode (Earthworm
                   |                            |Jim, Pitfall: The Mayan
                   |                            |Adventure)
                 CC|                            |focht at gmx.net

--- Comment #4 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

adding stable download link via Internet Archive:

https://web.archive.org/web/20210314095454/https://image.dosgamesarchive.com/games/ewjdemo.zip

https://archive.org/download/EWJ95/EWJ_95.zip

The Win9x-era game is 32-bit PE.

--- snip ---
$ ls -l
total 7924
-rw-rw-r--. 1 focht focht      31 Mar 12  1996 FILE_ID.DIZ
-rw-rw-r--. 1 focht focht 3093394 Nov  1  1995 INIT.EW
-rwxrwxr-x. 1 focht focht   11776 Nov  1  1995 KILLWORM.EXE
-rw-rw-r--. 1 focht focht  601218 Nov  1  1995 LEVEL00.EW
-rw-rw-r--. 1 focht focht  599469 Nov  1  1995 LEVEL03.EW
-rw-rw-r--. 1 focht focht  579231 Nov  1  1995 LEVEL05.EW
-rw-rw-r--. 1 focht focht   13816 Nov  1  1995 LEVEL24.EW
-rw-rw-r--. 1 focht focht  630642 Nov  1  1995 LEVEL29.EW
-rw-rw-r--. 1 focht focht   33564 Nov  1  1995 LEVEL30.EW
-rw-rw-r--. 1 focht focht    3767 Jan 10  1996 README.WRI
-rw-rw-r--. 1 focht focht   44432 Jan 10  1996 TECH.WRI
-rw-rw-r--. 1 focht focht  116736 Nov  1  1995 WAIL32.DLL
-rw-rw-r--. 1 focht focht  228864 Nov  1  1995 WORM0.FTS
-rw-rw-r--. 1 focht focht  814962 Nov  1  1995 WORM0.HLP
-rwxrwxr-x. 1 focht focht 1111040 Jan  6  1996 WORM.EXE
-rwxrwxr-x. 1 focht focht  187392 Jan  6  1996 WORMLOAD.EXE
-rw-rw-r--. 1 focht focht   15916 Nov  1  1995 WORMLOAD.WAV
--- snip ---

--- snip ---
$ file *.EXE
KILLWORM.EXE: PE32 executable (GUI) Intel 80386, for MS Windows
WORM.EXE:     PE32 executable (GUI) Intel 80386, for MS Windows
WORMLOAD.EXE: PE32 executable (GUI) Intel 80386, for MS Windows
--- snip ---

--- snip ---
$ WINEDEBUG=+seh,+relay,+loaddll wine ./WORM.EXE >>log.txt 2>&1
...
0350:Call user32.MessageBoxA(00000000,00446b60 "Earthworm Jim should be played
in 256 color mode for best performance.",00445cf0 "Earthworm Jim",00000000)
ret=0040a997 
...
0350:Ret  user32.MessageBoxA() retval=00000001 ret=0040a997
...
0350:Call
user32.CreateDialogParamA(00400000,000000c9,00000000,00403c52,00000000)
ret=00402341 
...
0350:Ret  user32.CreateDialogParamA() retval=00040080 ret=00402341
0350:Call user32.ShowWindow(00040080,00000001) ret=00402354
0350:Ret  user32.ShowWindow() retval=00000001 ret=00402354
0350:Call KERNEL32.CreateFileA(0044b9a4
"init.ew",80000000,00000001,00000000,00000003,08000000,00000000) ret=004391c9
...
0350:Ret  KERNEL32.CreateFileA() retval=000000b0 ret=004391c9
0350:Call KERNEL32.ReadFile(000000b0,004454c4,00000004,0032fd40,00000000)
ret=00439253
0350:Call
ntdll.NtReadFile(000000b0,00000000,00000000,00000000,0032fbb8,004454c4,00000004,00000000,00000000)
ret=7b012f72
0350:Ret  ntdll.NtReadFile() retval=00000000 ret=7b012f72
0350:Ret  KERNEL32.ReadFile() retval=00000001 ret=00439253 
...
0350:Call KERNEL32.ReadFile(000000b0,015dd848,00001b69,0032fd3c,00000000)
ret=004392d4
0350:Call
ntdll.NtReadFile(000000b0,00000000,00000000,00000000,0032fbb8,015dd848,00001b69,00000000,00000000)
ret=7b012f72
0350:Ret  ntdll.NtReadFile() retval=00000000 ret=7b012f72
0350:Ret  KERNEL32.ReadFile() retval=00000001 ret=004392d4
0350:Call KERNEL32.GetSystemDirectoryA(0032fcf0,00000104) ret=00408b44
0350:Ret  KERNEL32.GetSystemDirectoryA() retval=00000013 ret=00408b44
0350:Call KERNEL32.LoadModule(0032fcf0
"C:\\windows\\system32\\DISPDIB.DLL",0032fcb8) ret=00408b6c 
...
0350:Call
ntdll.RtlCreateProcessParametersEx(0032f52c,0032f57c,0032f56c,00000000,0032f564,00000000,0032f55c,0032f554,00000000,0032f548,00000001)
ret=7b0374b1
0350:Ret  ntdll.RtlCreateProcessParametersEx() retval=00000000 ret=7b0374b1
...
0350:Call
ntdll.NtCreateUserProcess(0032f580,0032f584,001fffff,001fffff,0032f40c,0032f3f4,00000000,00000001,001a93f8,0032f498,0032f424)
ret=7b03805c
0350:Ret  ntdll.NtCreateUserProcess() retval=c0000131 ret=7b03805c
...
0350:Call ntdll.RtlInitUnicodeString(001a9438,001a6c28
L"C:\\windows\\system32\\winevdm.exe --app-name
\"C:\\windows\\system32\\dispdib.dll\" C:\\windows\\system32\\DISPDIB.DLL ")
ret=7b038164
0350:Ret  ntdll.RtlInitUnicodeString() retval=000000dc ret=7b038164
...
0350:Call
ntdll.NtCreateUserProcess(0032f580,0032f584,001fffff,001fffff,0032f3cc,0032f3b4,00000000,00000001,001a93f8,0032f458,0032f3e4)
ret=7b03805c
...
0360:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\winevdm.exe" at
7E9A0000: builtin
0360:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\kernelbase.dll"
at 7B000000: builtin
0360:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\kernel32.dll"
at 7B600000: builtin
0350:Ret  ntdll.NtCreateUserProcess() retval=00000000 ret=7b03805c
...
0360:trace:loaddll:MODULE_LoadModule16 Loaded module "krnl386.exe" : builtin 
...
0360:trace:loaddll:MODULE_LoadModule16 Loaded module "dispdib.dll" : builtin 
...
0360:Ret  krnl386.exe16.LoadModule16() retval=000002af ret=7e9a8333
...
0350:Ret  KERNEL32.LoadModule() retval=00000021 ret=00408b6c
...
0350:Call user32.CreateWindowExA(00000000,0044cfbc "DisplayDibWindow",0044cfb8
"",80000000,00000000,00000000,00000a00,000005a0,0004007e,00000000,00400000,00000000)
ret=00408bb6 
...
0350:Ret  user32.CreateWindowExA() retval=00000000 ret=00408bb6 
0350:Call user32.MessageBoxA(00000000,0032fcf0 "Bad or missing dispdib.dll -
error 33",00445cf0 "Earthworm Jim",00000010) ret=00408c00 
...
--- snip ---

Found another game with same error message:

https://web.archive.org/web/20201231220908/https://thisoldrecliner.neocities.org/pitfall.html

The error dialog is not critical and can be dismissed. The game is still
playable.

The game specifically checks if it's being run under Win9x or WindowsNT based
systems.

--- snip ---
00408AE0 | push ebp                                      |
00408AE1 | mov ebp,esp                                   |
00408AE3 | sub esp,14C                                   |
00408AE9 | push ebx                                      |
00408AEA | push esi                                      |
00408AEB | push edi                                      |
00408AEC | mov dword ptr ss:[ebp-13C],0                  |
00408AF6 | mov dword ptr ss:[ebp-138],worm.44CFA4        |
00408B00 | mov dword ptr ss:[ebp-134],worm.44CFA0        |
00408B0A | mov dword ptr ss:[ebp-130],0                  |
00408B14 | mov dword ptr ds:[44A084],0                   |
00408B1E | cmp dword ptr ds:[447014],0                   | IsWin9X?
00408B25 | jne worm.408B32                               |
00408B2B | xor eax,eax                                   | WindowsNT
00408B2D | jmp worm.408CF6                               |
00408B32 | push 104                                      | Win9X
00408B37 | lea eax,dword ptr ss:[ebp-104]                |
00408B3D | push eax                                      |
00408B3E | call dword ptr ds:[<&_GetSystemDirectoryA at 8>] |
00408B44 | push worm.44CFA8                              | "\\DISPDIB.DLL"
00408B49 | lea eax,dword ptr ss:[ebp-104]                |
00408B4F | push eax                                      |
00408B50 | call worm.43EEB4                              |
00408B55 | add esp,8                                     |
00408B58 | lea eax,dword ptr ss:[ebp-13C]                |
00408B5E | push eax                                      |
00408B5F | lea eax,dword ptr ss:[ebp-104]                |
00408B65 | push eax                                      |
00408B66 | call dword ptr ds:[<&_LoadModule at 8>]          |
00408B6C | mov dword ptr ss:[ebp-4],eax                  |
00408B6F | cmp dword ptr ss:[ebp-4],20                   |
00408B73 | jl worm.408BBB                                |
00408B79 | push 0                                        |
00408B7B | mov eax,dword ptr ds:[4474A0]                 |
00408B80 | push eax                                      |
00408B81 | push 0                                        |
00408B83 | mov eax,dword ptr ds:[44A044]                 |
00408B88 | push eax                                      |
00408B89 | push 1                                        |
00408B8B | call dword ptr ds:[<&_GetSystemMetrics at 4>]    |
00408B91 | push eax                                      |
00408B92 | push 0                                        |
00408B94 | call dword ptr ds:[<&_GetSystemMetrics at 4>]    |
00408B9A | push eax                                      |
00408B9B | push 0                                        |
00408B9D | push 0                                        |
00408B9F | push 80000000                                 |
00408BA4 | push worm.44CFB8                              |
00408BA9 | push worm.44CFBC                              | "DisplayDibWindow"
00408BAE | push 0                                        |
00408BB0 | call dword ptr ds:[<&_CreateWindowExA at 48>]    |
00408BB6 | mov dword ptr ds:[44A048],eax                 |
00408BBB | cmp dword ptr ss:[ebp-4],20                   |
00408BBF | jl worm.408BD2                                |
00408BC5 | cmp dword ptr ds:[44A048],0                   |
00408BCC | jne worm.408C11                               |
00408BD2 | mov eax,dword ptr ss:[ebp-4]                  |
00408BD5 | push eax                                      |
00408BD6 | push worm.446B20                              |
00408BDB | lea eax,dword ptr ss:[ebp-104]                |
00408BE1 | push eax                                      |
00408BE2 | call worm.43EFC1                              |
00408BE7 | add esp,C                                     |
00408BEA | push 10                                       |
00408BEC | push worm.445CF0                              |
00408BF1 | lea eax,dword ptr ss:[ebp-104]                |
00408BF7 | push eax                                      |
00408BF8 | push 0                                        |
00408BFA | call dword ptr ds:[<&_MessageBoxA at 16>]        |
00408C00 | mov dword ptr ds:[44A048],0                   |
00408C0A | xor eax,eax                                   |
00408C0C | jmp worm.408CF6                               |
00408C11 | mov dword ptr ss:[ebp-12C],28                 |
00408C1B | mov word ptr ss:[ebp-120],1                   |
00408C24 | mov word ptr ss:[ebp-11E],8                   |
00408C2D | mov dword ptr ss:[ebp-11C],0                  |
00408C37 | mov dword ptr ss:[ebp-118],0                  |
00408C41 | mov dword ptr ss:[ebp-114],0                  |
00408C4B | mov dword ptr ss:[ebp-110],0                  |
00408C55 | mov dword ptr ss:[ebp-10C],0                  |
00408C5F | mov dword ptr ss:[ebp-108],0                  |
00408C69 | mov dword ptr ss:[ebp-128],140                |
00408C73 | mov dword ptr ss:[ebp-124],C8                 |
00408C7D | mov eax,dword ptr ds:[44A048]                 |
00408C82 | mov dword ptr ss:[ebp-14C],eax                |
00408C88 | mov dword ptr ss:[ebp-148],400                |
00408C92 | lea eax,dword ptr ss:[ebp-12C]                |
00408C98 | test eax,eax                                  |
00408C9A | je worm.408CAF                                |
00408CA0 | mov dword ptr ss:[ebp-144],428                |
00408CAA | jmp worm.408CB9                               |
00408CAF | mov dword ptr ss:[ebp-144],0                  |
00408CB9 | lea eax,dword ptr ss:[ebp-12C]                |
00408CBF | mov dword ptr ss:[ebp-140],eax                |
00408CC5 | lea eax,dword ptr ss:[ebp-148]                |
00408CCB | push eax                                      |
00408CCC | push 0                                        |
00408CCE | push 4A                                       |
00408CD0 | mov eax,dword ptr ss:[ebp-14C]                |
00408CD6 | push eax                                      |
00408CD7 | call dword ptr ds:[<&_SendMessageA at 16>]       |
00408CDD | jmp worm.408CE2                               |
00408CE2 | mov dword ptr ds:[44A084],1                   |
00408CEC | mov eax,1                                     |
00408CF1 | jmp worm.408CF6                               |
00408CF6 | pop edi                                       |
00408CF7 | pop esi                                       |
00408CF8 | pop ebx                                       |
00408CF9 | leave                                         |
00408CFA | ret                                           |
--- snip ---

References to address 0x447014 ('IsWin9X' variable)

--- snip ---
00401010  cmp dword ptr ds:[447014],0
00401F52  mov dword ptr ds:[447014],1
00401F61  mov dword ptr ds:[447014],0
00401F6B  cmp dword ptr ds:[447014],0
00408043  cmp dword ptr ds:[447014],0
00408071  cmp dword ptr ds:[447014],0
0040809D  cmp dword ptr ds:[447014],0
0040810C  cmp dword ptr ds:[447014],0
00408319  cmp dword ptr ds:[447014],0
00408393  cmp dword ptr ds:[447014],0
004083A7  cmp dword ptr ds:[447014],0
00408754  cmp dword ptr ds:[447014],0
00408A1A  cmp dword ptr ds:[447014],0
00408B1E  cmp dword ptr ds:[447014],0
00409394  cmp dword ptr ds:[447014],0
0040A253  cmp dword ptr ds:[447014],0
--- snip ---

OS version check:

--- snip ---
00401F24 | mov dword ptr ds:[447050],0       |
00401F2E | call dword ptr ds:[<&GetVersion>] |
00401F34 | cmp eax,80000000                  |
00401F39 | jbe worm.401F61                   | <= WindowsNT
00401F3F | call dword ptr ds:[<&GetVersion>] |
00401F45 | xor ecx,ecx                       |
00401F47 | mov cl,al                         |
00401F49 | cmp ecx,4                         |
00401F4C | jl worm.401F61                    |
00401F52 | mov dword ptr ds:[447014],1       | Win9X
00401F5C | jmp worm.401F6B                   |
00401F61 | mov dword ptr ds:[447014],0       | WindowsNT
00401F6B | cmp dword ptr ds:[447014],0       |
00401F72 | jne worm.401F9E                   |
--- snip ---

@WineBuG

--- quote ---
The problem occurs on Windows Vista too if you use Win95 compatibility mode.
--- quote ---

If you use the "lie about OS version" appcompat feature on Windows this is by
design/expected. See the disassembly above.

I don't see the point of this bug report. Wine behaves exactly the same as
modern NT-based Windows versions. The fullscreen mode "hack" for win16 apps
can't work by design here. It's not needed anyway.

$ sha1sum ewjdemo.zip 
1c6afe11d8cfeae3f35e66d652487860ef909a98  ewjdemo.zip

$ du -sh ewjdemo.zip 
3.4M    ewjdemo.zip

$ wine --version
wine-6.4

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.


More information about the wine-bugs mailing list