Back to home page

DOS ain't dead

Forum index page

Log in | Register

Back to the forum
Board view  Mix view

GVFM 2.66 beta /"Drive A" bug (Announce)

posted by jaybur Homepage E-mail, UK, 28.12.2007, 03:47

> I just tested the 2.66 beta and I unfortunately have to confirm DOS386
> observation that the diskette seeking issue is still present.

Ok, thanks. :-(

> I make a test under plain MS-DOS 7.1 and in this environment is all OK. So
> only problematic behaviour is under FreeDOS.

Ok.

> The difference can be also observed on program initialization (while seeking the disk drives?).

Drive A should only be scanned during initialization if, when you exited GVFM the last time, you had a browser window[s] open on Drive A. Otherwise it should not be accessed at all.

> In MS-DOS it run in few milliseconds and no noise from diskette drive is
> heard, in FreeDOS it takes slightly more time and I can hear the noise from
> diskette.

Can you add "A" to GVFM's list of excluded drives, and see if that stops it?

> BTW: How does the drive searching routine look like?

It uses 21h/2906h - Parse Filename into FCB on 'A:\' through to 'Z:\'. If 21h/2906h doesn't return 0FFh in AL then the drive is considered valid. For drives 'A' and 'B', a read of CMOS location 10h is used instead to see if the BIOS has recognised any floppy drives:

function TDosFileSystem.GetDrives: string;  { Return list of valid system   }
var                                         { drives. eg: a return string of}
  Drv : Char;                               { 'ACDJ' means A:,C:,D: and J:  }
  Regs: TRealRegs;                          { are valid on this machine.    }
begin                                       { This list is only constructed }
  if DriveList = '' then                    { once.                         }
  begin
    Host^.FailSysErrors(true);       { Prevent "Drive Not Ready" and similar}

    { Check for the existance of floppy drives 1 and 2 from CMOS }

    if (ReadCMOS($10) shr 4 <> 0) and (GetFloppyType('A') <> 0) then
      DriveList := 'A';                     { Has first floppy drive        }
    if (ReadCMos($10) and $0F <> 0) and (GetFloppyType('B') <> 0) then
      DriveList := DriveList + 'B';         { Has second floppy drive       }

    { Check for the existance of all other drives }

    for Drv := 'C' to 'Z' do
      if DosPathValid(Drv + ':') then
        DriveList := DriveList + Drv;
    if Pos('AB', DriveList) <> 0 then       { Check for single floppy       }
    begin
      ClearRealRegs(Regs);
      Regs.AX := $440E;                     { IOCTL - Get logical device map}
      Regs.BL := 1;                         {         for Drive A:          }
      if Lo(MsDos(Regs)) <> 0 then          { More than 1 block dev assigned}
      begin
        if Regs.AL <> 1 then
        begin
          Regs.AX := $440F;                 { IOCTL - Set logical device map}
          Regs.BL := 1;                     { Only assigned to Drive A      }
          MsDos(Regs);
        end;
        System.Delete(DriveList, 2, 1);     { Remove Drive B from list      }
      end;
    end;
    Get1stNetDrive;                 { Ensure all network drives are defined }
    Host^.FailSysErrors(false);     { Re-enable critical error messages     }
  end;
  GetDrives := DriveList;
end;

> And I found one bug - if I try to select 32-bit videomode with LFB
> enabled, GVFM crashes and reboots computer. (with 32b banked mode or 8bpp or 16bpp bit mode is it OK)
> My graphics card is nVidia GeForce 4 MX with 64MB, VESA 3.0 compatible

Ok, that should be quite easy to find once you have the source code, which I'm still working my way through, cleaning up all the smaller GV demo programs, making sure they all still work and what-not.

 

Complete thread:

Back to the forum
Board view  Mix view
22632 Postings in 2109 Threads, 402 registered users, 443 users online (0 registered, 443 guests)
DOS ain't dead | Admin contact
RSS Feed
powered by my little forum