Using Floppy Disks with Windows Virtual PC

Using Floppy Disks with Windows Virtual PC

Rate This
  • Comments 40

Most users of Windows Virtual PC do not need to use floppy disks with their virtual machines, as general usage of floppy disks has become rarer and rarer.  Those who do need to use floppy disks – may think that they can no longer do this – as there is no user interface for connecting floppy disks to virtual machines.

Do not be fooled.

Windows Virtual PC does support the use of floppy disks – but as this feature is only used by a small subset of users – we did not expose this in the user interface.  To use floppy disks you need to have a script to help you.  And here are the scripts:

VBScript:

Option Explicit
 
' Define constants for floppy drive attachment types
CONST vmFloppyDrive_None = 0
CONST vmFloppyDrive_Image = 1
CONST vmFloppyDrive_HostDrive = 2
 
Dim namedArguments, argumentError, vpc, vm, vmName, action, floppy, vmFloppyDrive
 
' Check that the script is running at the command line.
If UCase(Right(Wscript.FullName, 11)) = "WSCRIPT.EXE" Then
 WScript.Echo "This script must be run under CScript."
 WScript.Quit
End If
 
' Get the virtual machine name / floppy commands from the command-line arguments
Set namedArguments = WScript.Arguments.Named
 
argumentError = false
 
If namedArguments.Exists("vm") Then
 vmName = namedArguments.Item("vm")
Else
 argumentError = true
End If
 
If namedArguments.Exists("action") Then
 action = namedArguments.Item("action")
Else
 argumentError = true
End If
 
If namedArguments.Exists("floppy") Then
 floppy = namedArguments.Item("floppy")
Else
 If (not ((action = "info") or (action = "disconnect"))) Then
  argumentError = true
 End If
End If
 
' Display usage information if wrong arguments are provided
if argumentError then
 WScript.Echo "Missing command-line argument"
 WScript.Echo
 WScript.Echo "Usage: FloppyDrive.vbs /vm:" & chr(34) & "Name of virtual machine to be started" & chr(34)
 WScript.Echo
 WScript.Echo "                       /action:info       - to display information about the current floppy configuration"
 WScript.Echo "                               disconnect - to disconnect any attached floppy disk or floppy disk image"
 WScript.Echo "                               vfd        - to attach a virtual floppy disk image"
 WScript.Echo "                               physical   - to attach a physical floppy disk"
 WScript.Echo
 WScript.Echo "                       /floppy:name       - where name is either the full name and path for a virtual"
 WScript.Echo "                                            floppy disk or the letter of a physical disk to attach"
 WScript.Echo
 WScript.Quit
end if
 
' Attempt to connect to Virtual PC
On Error Resume Next
Set vpc = CreateObject("VirtualPC.Application")
If Err.Number <> 0 Then
 WScript.Echo "Unable to connect to Virtual PC."
 WScript.Quit
End if
On Error Goto 0
 
' Get virtual machine object
Set vm = vpc.FindVirtualMachine(vmName)
 
' Get the floppy drive
set vmFloppyDrive = vm.FloppyDrives.item(1)
 
' Perform the specified action
Select Case action
 
 ' Display floppy disk information
 case "info"
  wscript.echo "Floppy disk information"
  wscript.echo "======================="
 
  ' Different information is needed for each attachment type
  select case vmFloppyDrive.Attachment
   case vmFloppyDrive_None 
    wscript.echo "Floppy Attachment : No floppy disk attached"
    wscript.echo "Drive Number      : " & vmFloppyDrive.DriveNumber
   case vmFloppyDrive_Image 
    wscript.echo "Floppy Attachment : Floppy disk image attached"
    wscript.echo "Drive Number      : " & vmFloppyDrive.DriveNumber
    wscript.echo "Image File        : " & vmFloppyDrive.ImageFile 
   case vmFloppyDrive_HostDrive 
    wscript.echo "Floppy Attachment : Physical floppy disk attached"
    wscript.echo "Drive Number      : " & vmFloppyDrive.DriveNumber
    wscript.echo "Host Drive Letter : " & vmFloppyDrive.HostDriveLetter 
  end select
 
 ' Disconnect the current floppy disk
 case "disconnect"
 
  wscript.echo "Disconnecting the floppy disk."
 
  ' A different method is used to disconnect a floppy disk image than for a physical disk 
  select case vmFloppyDrive.Attachment
   case vmFloppyDrive_Image 
    vmFloppyDrive.ReleaseImage
   case vmFloppyDrive_HostDrive 
    vmFloppyDrive.ReleaseHostDrive
  end select
 
 ' Attach a floppy disk image
 case "vfd"
 
  wscript.echo "Attaching " & floppy & " to the floppy drive."
  vmFloppyDrive.AttachImage(floppy)
 
 ' Attach a physical floppy disk
 case "physical"
 
  wscript.echo "Attaching physical disk " & floppy & ": to the floppy drive."
  vmFloppyDrive.AttachHostDrive(floppy)
 
 ' Catch invalid actions
 case else
  wscript.echo "Invalid action provided. Info, disconnect, vfd and physical are valid options."
 
end select
 
wscript.echo

PowerShell:

param([string]$vmName, [string]$action, [string]$floppy)
 
$argumentError = 0
 
# Check for correct command-line arguments
If ($vmName -eq "")
 {$argumentError = 1}
 
If ($action -eq "")
 {$argumentError = 1}
 
If ($floppy -eq "")
 {
  if ((!([string]::Compare($action, "vfd", $True))) -or (!([string]::Compare($action, "physical", $True))))
  {$argumentError = 1}
 }
 
# Display usage information if wrong arguments are provided
If ($argumentError -eq 1)
 {
 write-host "Missing command-line argument."
 write-host "USage: FloppyDrive.ps1 -vmName `"Name of virtual machine`""
 write-host "                       -action info       - to display information about the current floppy configuration"
 write-host "                               disconnect - to disconnect any attached floppy disk or floppy disk image"
 write-host "                               vfd        - to attach a virtual floppy disk image"
 write-host "                               physical   - to attach a physical floppy disk"
 write-host
 write-host "                       -floppy name       - where name is either the full name and path for a virtual"
 write-host "                                            floppy disk or the letter of a physical disk to attach"
 exit
 }
 
# Connect to Virtual PC
$vpc=new-object –com VirtualPC.Application –Strict
 
# Get virtual machine object
$vm = $vpc.FindVirtualMachine($vmName)
 
# Get the floppy drive
$vmFloppyDrive = $vm.FloppyDrives.item(1)
 
# Perform the specified action
switch ($action) 
   {
 
   # Display floppy disk information
   "info" {
      write-host "Floppy disk information"
      write-host "======================="
 
      # Different information is needed for each attachment type
      switch ($vmFloppyDrive.Attachment)
        {
        0 {
           write-host "Floppy Attachment : No floppy disk attached"
           write-host "Drive Number      : " $vmFloppyDrive.DriveNumber}
        1 { 
           write-host "Floppy Attachment : Floppy disk image attached"
           write-host "Drive Number      : " $vmFloppyDrive.DriveNumber
           write-host "Image File        : " $vmFloppyDrive.ImageFile }
        2 { 
           write-host "Floppy Attachment : Physical floppy disk attached"
           write-host "Drive Number      : " $vmFloppyDrive.DriveNumber
           write-host "Host Drive Letter : " $vmFloppyDrive.HostDriveLetter }
        }
      }
 
   # Disconnect the current floppy disk
   "disconnect" {
 
      write-host "Disconnecting the floppy disk."
 
      # A different method is used to disconnect a floppy disk image than for a physical disk 
      switch ($vmFloppyDrive.Attachment)
         {
         1 {$vmFloppyDrive.ReleaseImage()}
         2 {$vmFloppyDrive.ReleaseHostDrive()}
         }
      }
 
   # Attach a floppy disk image
   "vfd" {
      write-host "Attaching " $floppy " to the floppy drive."
      $vmFloppyDrive.AttachImage($floppy)
      }
      
   # Attach a physical floppy disk
   "physical"  {
      write-host "Attaching physical disk " $floppy ": to the floppy drive."
      $vmFloppyDrive.AttachHostDrive($floppy)
      }
      
   # Catch invalid actions
   default {write-host "Invalid action provided. Info, disconnect, vfd and physical are valid options."}
   }

These scripts are fairly “self documenting” and will provide error messages if the wrong input is provided.  They will allow you to connect both physical and virtual floppy disks to a virtual machine.  As well as to check the information about the current floppy disk configuration.

I have also attached these scripts for download.

Cheers,
Ben

Attachment: Floppy Drive Scripts.zip
Leave a Comment
  • Please add 4 and 8 and type the answer here:
  • Post
  • ex-VPC user -

    I am sorry, but I had to delete your comment due to your use of profanity.  But to answer your questions:

    The UI for floppies was not deleted.  It was never created.  The entire Windows Virtual PC UI is a new creation - and floppy settings were not included in it.

    If you need to run this as part of a batch file you can do that by just running the command:

    cscript.exe FloppyDrive.vbs

    Cheers,

    Ben

  • Thanks, but I've already started migrating to Virtual Box.

    I know this is shocking but floppy users are NOT in the minority, and we do infact use virtualization products to maintain our own stuff that is 20+ years old.

    But thanks for the good years of Virtual PC, it's too bad that it's not usefull anymore, and that it's become a shell to Windows XP.

    Remember when Virtual PC had parallel ports, floppy drives & sound blasters?

    It's no wonder that MS-DOS games will not be reviewed either as DOSBox ate Virtual PC's lunch, and now VMWare & Virtual BOX will end up winning those of us with legacy needs, and no if I wanted to paste in that 20k of 'stuff' to who knows where to simply mount a floppy I'll just move to another product where I can right click and mount an image.

  • You did have a UI for floppy support. As you say, you had a whole interface you threw away. for what? To dumb it down and make it less useful.

    You also ised to have a great product for the Mac, but no more.

    Interest is waning and I have to agree with Jason.

  • Thanks Ben,

    I will looking at the code and will look to building a GUI to allow me to change the floppy disk on the virtual machine better than through the script. It would be great if working with older machines that the GUI for changing the floppy disk would have been built into the Windows Virtual PC interface directly. I really rather stay away from the command it at all possible.

  • I would like to think that the removal of the floppy option in the GUI was just for this specific ver of VPC for Windows 7, since they seem to refer to it only as an Application Compatibility solution for Windows 7.

    If they do continue the VPC line (with support for prior host versions of Windows) or Hyper-V for Vista+ host OS's then I'd hope they would at least take 5 minutes to poll their users and check out their competition on what they should be doing with their product.

  • I have to agree with the sentiments already posted. Microsoft has taken a big step backward by not keeping floppy support in VPC.

    Windows XP is not the be-all end-all of backwards compatibility, and whether Microsoft wants to believe it or not, many users of virtualization technology depend on legacy support that stretches back to DOS.

    I am not a scripter, and I am not a programmer. I don't have the time- nor the inclination- to learn Powershell. The VBScript you provided, despite following the instructions and doggedly perusing the help files and TechNet, was a dead-end. Still no floppy in VPC.

    End result: My virtualization needs will now be met by VirtualBox or VMWare.

  • I also agree with the sentiments above

     The omission of access to the feature in the UI only serves to lessen it's usability and versatility for many users.

    It will effectively promote many to seek out and use other products for their virtualization needs.

    I hope the Dev team rethinks it's decision to omit Floppy support from the UI and includes the feature it via patch, add-on or rerelease sp1 version

  • Thanks for the scripts.  There REALLY should be an add on to the UI as it is hard to test some things w/o the floppy (ntbackup for one!) to SCSI devices and the lot.  I am trying to mount images but I keep getting "cannot find specified file" errors no matter where I put or point my images.  I know they are valid (worked on previous version) so I'm wondering if there's a bug or if I'm doing something wrong?

    $> cscript Floppydrive.vbs /vm:WXP-demo /action:vfd /floppy:C:\shared\flpyDOS.img

  • I have always used VirtualPC and loved it mainly for the Old Os's that I still run believe it or not.. Dos 5, OS/2 etc... and other older windows apps/games that I can't run in Vmware workstation or Dosbox.

    But now in Windows 7 with Windows VPC if I want to use floppy disk images.. I'm at two options...

    Stay with Windows XP or Vista and keep using MS VirtualPC or upgrade to win7 and use Sun's VirtualBox which has the best of both worlds of VirtualPC and VMware workstation.

  • @SirDeath, I am getting the same error.  

    @VirtualPC Guy,  why is this so difficult?  Why can't there be a floppy image in the product itself?  One of the reasons for virtualization is to run legacy systems.  Most legacy systems have floppy drives.

    Grrrrrr.

  • Here is my syntax

    cscript Floppydrive.vbs /vm:win31 /action:

    vfd /floppy:z:\144upg1.img

  • Thank you for these scripts.

    They work fine, except I get the error "The system cannot find the file specified." if the file does not have a .vfd extension.

    Please document or remove this requirement.

  • Thanks for the scripts!! And the help with floppy disks.

    I want to and know that I need to learn powershell to really use Virtual technology with MS, but I'm not there yet.  I can run the vb script, but when I to run the powershell script I get an execution error.

  • I have to chime in with the others - floppy support is CRITICAL for older OS's and applications. Lack of a simple GUI element for this is a critical mistake.

    I suppose it scarcely matters, though, as Windows 7 itself seems to have problems writing to floppies anyway. . . Every time I try to write any data to a floppy disk (command line or GUI) in Win7, the FAT gets corrupted. Tried this on 3 different machines running Windows 7 RTM (x86 and x64). It reads floppies fine, just corrupts them on write. I ultimately had to dual-boot my main system to WinXP for full floppy support. :(

  • Clarification Note: I have all of my floppy disks imaged with WinImage, and I occasionally need to have a physical copy of disks for the 486 computer I keep on my desk for legacy DOS stuff.

Page 1 of 3 (40 items) 123