http://bugs.winehq.org/show_bug.cgi?id=15601
Summary: Phantasmagoria 1 crashes at startup Product: Wine Version: 1.1.6 Platform: PC OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: dos AssignedTo: wine-bugs@winehq.org ReportedBy: deadlock@start.no
When I run Phantasmagoria 1, it will crash right after calling int 31, ax=0001 which is a DPMI interrupt, free LDT descriptor. Which means that it crashes somewhere around line 882 in file dlls/winedos/int31.c I then commented out what's between the else { and }. The comment that is already there reads: /* If a segment register contains the selector being freed, */ /* set it to zero. */
Which probably means that the game tries to use either the DS, ES, FS or GS segment after it has freed the LDT descriptor. Is this function/interrupt really supposed to fiddle with DS, ES, FS and GS? I can't see any mention of that in the DPMI specifications(http://www.delorie.com/djgpp/doc/dpmi/api/310001.html) and apparently Windows handles it differently, since it won't crash when I comment out the lines that reset these segments.