-
Notifications
You must be signed in to change notification settings - Fork 10
Description
This issue occurs when running SvarDos and Win3.1 (in standard mode), using either HDPMI16 or the Win31-supplied DOSX.EXE as DPMI host. It may actually also occur in Enhanced-Mode, but I haven't setup such a test machine. The problem is that ProgMan.exe may show no drives ("Laufwerke") at all in its "common dialog", which is used when a new program item is to be added and then the "Browse" button is pressed.
The problem occurs on a real system that has NO fdisk controller and hence no floppies. It does NOT occur when there exist "floppy" disks (tested on a Qemu VM)
Running a Win3.1 monitor program that logs the DOS calls one can see the difference. Here's how the system checks if a drive is valid (note that newer entries are ABOVE the older ones):
Nr Funktion AX BX CX DX C AX BX CX DX DS CS:IP Task
61 SelectDisk 0E05 1902 0006 0B06 C 0E0B 1902 0006 0B06 0D9F 010F:1CF5 PROGMAN
60 CurrentDisk 190B 1902 0005 0B05 C 1905 1902 0005 0B05 0D9F 010F:1D48 PROGMAN
59 SelectDisk 0E04 1902 0005 0B05 C 0E0B 1902 0005 0B05 0D9F 010F:1CF5 PROGMAN
58 CurrentDisk 190B 1902 0004 0B04 C 1904 1902 0004 0B04 0D9F 010F:1D48 PROGMAN
57 SelectDisk 0E03 1902 0004 0B04 C 0E0B 1902 0004 0B04 0D9F 010F:1CF5 PROGMAN
56 CurrentDisk 190B 1902 0003 0B03 C 1903 1902 0003 0B03 0D9F 010F:1D48 PROGMAN
55 SelectDisk 0E02 1902 0003 0B03 C 0E0B 1902 0003 0B03 0D9F 010F:1CF5 PROGMAN
54 CurrentDisk 190B 1902 0002 0B02 C 1902 1902 0002 0B02 0D9F 010F:1D48 PROGMAN
53 SelectDisk 0E01 1902 0002 0B02 C 0E0B 1902 0002 0B02 0D9F 010F:1CF5 PROGMAN
52 CurrentDisk 190B 1902 0001 0B01 C 1901 1902 0001 0B01 0D9F 010F:1D48 PROGMAN
51 SelectDisk 0E00 1902 0001 0B01 C 0E0B 1902 0001 0B01 0D9F 010F:1CF5 PROGMAN
50 CurrentDisk 190B 1902 0000 0B00 C 1900 1902 0000 0B00 0D9F 010F:1D48 PROGMAN
49 SelectDisk 0E02 1902 0000 0000 C 0E0B 1902 0000 0000 0D9F 010F:1CF5 PROGMAN
It runs int 21h, ah=0Eh (drive no in DL) and then calls int 21h, ah=19h to see if the current disk has changed.
It's strange that for SvarDOS, drive A: and B: are valid ( with MS-DOS, they are NOT valid on that machine )
Then it checks if any of the drives is remote or removeable:
Nr Funktion AX BX CX DX C AX BX CX DX DS CS:IP Task
88 IoCtl 4408 0002 0000 2842 0000 0002 0000 2842 014F 010F:1CF5 PROGMAN
87 IoCtl 4409 0002 0000 1902 0300 0002 0000 2842 014F 010F:1CF5 PROGMAN
86 SelectDisk 0E01 0101 0000 1902 C 0E0B 0101 0000 1902 014F 010F:1CF5 PROGMAN
85 CurrentDisk 190B 0001 0000 0001 C 1901 0001 0000 0001 014F 010F:1D48 PROGMAN
84 SelectDisk 0E02 0001 0000 0001 C 0E0B 0001 0000 0001 014F 010F:1CF5 PROGMAN
83 CurrentDisk 1900 0001 0000 0A27 C 1902 0001 0000 0A27 014F 010F:1D48 PROGMAN
82 Set PSP (U) 5000 09D7 0000 0A27 5000 09D7 0000 0A27 0127 010F:1CE3 PROGMAN
81 5D SubSys(U) 5D0A 0003 002B 0626 5D00 0003 002B 0626 0127 010F:1D1C PROGMAN
80 WriteFile 40D7 0003 002B 167A C 0053 0003 002B 167A 0A27 010F:1CF5 PROGMAN
79 GetExtErrorC 5943 0000 0000 03A2 0015 0507 0400 03A2 0127 010F:0AAF 87
78 Set PSP (U) 50D7 00A7 002B 167A 50D7 00A7 002B 167A 0127 010F:1CE3 PROGMAN
77 IoCtl 4408 0001 0007 2842 0000 0001 0007 2842 014F 010F:1CF5 PROGMAN
76 IoCtl 4409 0001 0007 1902 0300 0001 0007 2842 014F 010F:1CF5 PROGMAN
75 SelectDisk 0E00 0000 0007 1902 C 0E0B 0000 0007 1902 014F 010F:1CF5 PROGMAN
The interesting part is that apparently int 21h, ax=4408h causes an INT 24h "callback" with AX=15h as error code (that's line 78-82) for drive A: (and also for B:). This won't show up in Windows (after all, the system just wants to display the available drives). But this Int 24h confuses either Windows or SvarDOS (haven't analyzed it too deeply yet).