[Bug 46962] New: Macromedia Director Player 4.x based games (16-bit NE) fail to run: "This program requires at least 4MB free memory to run." ( The Rock)
wine-bugs at winehq.org
wine-bugs at winehq.org
Fri Apr 5 07:31:01 CDT 2019
https://bugs.winehq.org/show_bug.cgi?id=46962
Bug ID: 46962
Summary: Macromedia Director Player 4.x based games (16-bit NE)
fail to run: "This program requires at least 4MB free
memory to run." (The Rock)
Product: Wine
Version: 4.5
Hardware: x86-64
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: kernel32
Assignee: wine-bugs at winehq.org
Reporter: focht at gmx.net
Distribution: ---
Hello folks,
I found a game written with Macromedia Director 4.0.4 using Internet Archive:
https://archive.org/search.php?query=macromedia%20director%205&and[]=mediatype%3A%22software%22
https://archive.org/details/THEROCK_201807
-> https://archive.org/download/THEROCK_201807/THE_ROCK.zip
It's a 16-bit NE Windows binary.
--- snip ---
$ WINEDEBUG=+seh,+relay,+globalmem wine ./THE_ROCK.EXE >>log.txt 2>&1
...
005c:Call KERNEL.169: GETFREESPACE(0000) ret=1247:0b09 ds=1577
005c:Call KERNEL32.GlobalMemoryStatus(0087f810) ret=7e57ee80
005c:trace:globalmem:GlobalMemoryStatusEx <-- LPMEMORYSTATUSEX: dwLength 64,
dwMemoryLoad 16, ullTotalPhys 3e30a3000, ullAvailPhys 3407f6000,
ullTotalPageFile 5d90a2000, ullAvailPageFile 5367f5000, ullTotalVirtual
fffdffff, ullAvailVirtual fffcffff
005c:trace:globalmem:GlobalMemoryStatus Length 32, MemoryLoad 16, TotalPhys
ffffffff, AvailPhys ffffffff, TotalPageFile 7fffffff, AvailPageFile 7fffffff,
TotalVirtual fffdffff, AvailVirtual fffcffff
005c:Ret KERNEL32.GlobalMemoryStatus() retval=000000c7 ret=7e57ee80
005c:Ret KERNEL.169: GETFREESPACE() retval=fffcffff ret=1247:0b09 ds=1577
...
005c:Call user32.MessageBoxA(00000000,003b504e "This program requires at least
4MB free memory to run.",003b514e "Director Player 4.0",00000000) ret=f7b4a765
--- snip ---
Wine source:
--- snip ---
1365 /***********************************************************************
1366 * GlobalMemoryStatus (KERNEL32.@)
1367 * Provides information about the status of the memory, so apps can tell
1368 * roughly how much they are able to allocate
1369 *
1370 * RETURNS
1371 * None
1372 */
1373 VOID WINAPI GlobalMemoryStatus( LPMEMORYSTATUS lpBuffer )
1374 {
1375 MEMORYSTATUSEX memstatus;
1376 OSVERSIONINFOW osver;
1377 IMAGE_NT_HEADERS *nt = RtlImageNtHeader( GetModuleHandleW(0) );
1378
1379 /* Because GlobalMemoryStatus is identical to GlobalMemoryStatusEX
save
1380 for one extra field in the struct, and the lack of a bug, we simply
1381 call GlobalMemoryStatusEx and copy the values across. */
1382 memstatus.dwLength = sizeof(memstatus);
1383 GlobalMemoryStatusEx(&memstatus);
1384
1385 lpBuffer->dwLength = sizeof(*lpBuffer);
1386 lpBuffer->dwMemoryLoad = memstatus.dwMemoryLoad;
...
1430 /* limit page file size for really old binaries */
1431 if (nt->OptionalHeader.MajorSubsystemVersion < 4 ||
1432 nt->OptionalHeader.MajorOperatingSystemVersion < 4)
1433 {
1434 if (lpBuffer->dwTotalPageFile > MAXLONG) lpBuffer->dwTotalPageFile
= MAXLONG;
1435 if (lpBuffer->dwAvailPageFile > MAXLONG) lpBuffer->dwAvailPageFile
= MAXLONG;
1436 }
1437
1438 TRACE_(globalmem)("Length %u, MemoryLoad %u, TotalPhys %lx, AvailPhys
%lx,"
1439 " TotalPageFile %lx, AvailPageFile %lx, TotalVirtual %lx,
AvailVirtual %lx\n",
1440 lpBuffer->dwLength, lpBuffer->dwMemoryLoad,
lpBuffer->dwTotalPhys,
1441 lpBuffer->dwAvailPhys, lpBuffer->dwTotalPageFile,
lpBuffer->dwAvailPageFile,
1442 lpBuffer->dwTotalVirtual, lpBuffer->dwAvailVirtual );
1443 }
--- snip ---
"limit page file size for really old binaries" -> apparently the same has to be
done for reported virtual memory size (cap at 2GB).
Capping allows the game to start and show intro/gameplay sequence (until it
runs out of local heap which is a different issue).
NOTE: This is not the same as bug 44931 ("Macromedia Director Player 5.0/6.0
based games fail to run: "This program requires at least 3MB of free virtual
memory to run" (Nine: The last Resort)") which is about capping
dwAvailPageFile+dwAvailPhys <= 0x7FFFFFFF (2GB).
$ sha1sum THE_ROCK.*
efe3caca127562528d9496a434b1649a7c6ff46d THE_ROCK.EXE
6dc54219cf8b64d98a8a24f1bd2ebd32cefee8e8 THE_ROCK.zip
$ du -sh THE_ROCK.*
2.1M THE_ROCK.EXE
984K THE_ROCK.zip
$ wine --version
wine-4.5-185-g17056908ac
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