Index: /trunk/src/VBox/Devices/PC/DevACPI.cpp
===================================================================
--- /trunk/src/VBox/Devices/PC/DevACPI.cpp	(revision 10371)
+++ /trunk/src/VBox/Devices/PC/DevACPI.cpp	(revision 10372)
@@ -67,4 +67,5 @@
 #define SYSI_DATA       0x0000404c
 #define ACPI_RESET_BLK  0x00004050
+#define FDC_STATUS      0x00004054
 
 /* PM1x status register bits */
@@ -185,4 +186,5 @@
     uint8_t             u8IndexShift;
     uint8_t             u8UseIOApic;
+    uint8_t             u8UseFdc;
     bool                fPowerButtonHandled;
 
@@ -424,4 +426,5 @@
 IO_WRITE_PROTO (acpiBatIndexWrite);
 IO_READ_PROTO  (acpiBatDataRead);
+IO_READ_PROTO  (acpiFdcStatusRead);
 IO_READ_PROTO  (acpiSysInfoDataRead);
 IO_WRITE_PROTO (acpiSysInfoDataWrite);
@@ -1081,4 +1084,24 @@
 }
 
+IO_READ_PROTO (acpiFdcStatusRead)
+{
+    ACPIState *s = (ACPIState *)pvUser;
+
+    switch (cb)
+    {
+        case 4:
+            *pu32 = s->u8UseFdc 
+                ?   STA_DEVICE_PRESENT_MASK                 /* present */
+                  | STA_DEVICE_ENABLED_MASK                 /* enabled and decodes its resources */
+                  | STA_DEVICE_SHOW_IN_UI_MASK              /* should be shown in UI */
+                  | STA_DEVICE_FUNCTIONING_PROPERLY_MASK    /* functioning properly */
+                : 0;                                        /* device not present */
+            break;
+        default:
+            return VERR_IOM_IOPORT_UNUSED;
+    }
+    return VINF_SUCCESS;
+}
+
 IO_WRITE_PROTO (acpiSysInfoIndexWrite)
 {
@@ -1551,5 +1574,5 @@
 
     /* Validate and read the configuration. */
-    if (!CFGMR3AreValuesValid (pCfgHandle, "RamSize\0IOAPIC\0GCEnabled\0R0Enabled\0"))
+    if (!CFGMR3AreValuesValid (pCfgHandle, "RamSize\0IOAPIC\0GCEnabled\0R0Enabled\0FdcEnabled\0"))
         return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES,
                                 N_("Configuration error: Invalid config key for ACPI device"));
@@ -1564,4 +1587,12 @@
         return PDMDEV_SET_ERROR(pDevIns, rc,
                                 N_("Configuration error: Failed to read \"IOAPIC\""));
+
+    /* query whether we are supposed to present an FDC controller */
+    rc = CFGMR3QueryU8 (pCfgHandle, "FdcEnabled", &s->u8UseFdc);
+    if (rc == VERR_CFGM_VALUE_NOT_FOUND)
+        s->u8UseFdc = 1;
+    else if (VBOX_FAILURE (rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("Configuration error: Failed to read \"FdcEnabled\""));
 
     rc = CFGMR3QueryBool (pCfgHandle, "GCEnabled", &fGCEnabled);
@@ -1615,4 +1646,5 @@
     R (SYSI_INDEX,     1, acpiSysInfoIndexWrite, NULL,                "ACPI system info index");
     R (SYSI_DATA,      1, acpiSysInfoDataWrite,  acpiSysInfoDataRead, "ACPI system info data");
+    R (FDC_STATUS,     1, NULL,                  acpiFdcStatusRead,   "ACPI FDC status index");
     R (GPE0_BLK + L,   L, acpiGpe0EnWrite,       acpiGpe0EnRead,      "ACPI GPE0 Enable");
     R (GPE0_BLK,       L, acpiGpe0StsWrite,      acpiGpe0StsRead,     "ACPI GPE0 Status");
Index: /trunk/src/VBox/Devices/PC/vbox.dsl
===================================================================
--- /trunk/src/VBox/Devices/PC/vbox.dsl	(revision 10371)
+++ /trunk/src/VBox/Devices/PC/vbox.dsl	(revision 10372)
@@ -378,4 +378,15 @@
                     Name (_HID, EisaId ("PNP0700"))
 
+                    OperationRegion (CFDC, SystemIO, 0x4054, 0x08)
+                    Field (CFDC, DwordAcc, NoLock, Preserve)
+                    {
+                        FSTA, 32,
+                    }
+
+                    Method (_STA, 0, NotSerialized)
+                    {
+                        Return (FSTA)
+                    }
+
                     // Current resource settings
                     Name (_CRS, ResourceTemplate ()
Index: /trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 10371)
+++ /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 10372)
@@ -319,27 +319,4 @@
 
     /*
-     * ACPI
-     */
-    BOOL fACPI;
-    hrc = biosSettings->COMGETTER(ACPIEnabled)(&fACPI);                             H();
-    if (fACPI)
-    {
-        rc = CFGMR3InsertNode(pDevices, "acpi", &pDev);                             RC_CHECK();
-        rc = CFGMR3InsertNode(pDev,     "0", &pInst);                               RC_CHECK();
-        rc = CFGMR3InsertInteger(pInst, "Trusted", 1);              /* boolean */   RC_CHECK();
-        rc = CFGMR3InsertNode(pInst,    "Config", &pCfg);                           RC_CHECK();
-        rc = CFGMR3InsertInteger(pCfg,  "RamSize",          cRamMBs * _1M);         RC_CHECK();
-        rc = CFGMR3InsertInteger(pCfg,  "IOAPIC", fIOAPIC);                         RC_CHECK();
-        rc = CFGMR3InsertInteger(pInst, "PCIDeviceNo",          7);                 RC_CHECK();
-        Assert(!afPciDeviceNo[7]);
-        afPciDeviceNo[7] = true;
-        rc = CFGMR3InsertInteger(pInst, "PCIFunctionNo",        0);                 RC_CHECK();
-
-        rc = CFGMR3InsertNode(pInst,    "LUN#0", &pLunL0);                          RC_CHECK();
-        rc = CFGMR3InsertString(pLunL0, "Driver",               "ACPIHost");        RC_CHECK();
-        rc = CFGMR3InsertNode(pLunL0,   "Config", &pCfg);                           RC_CHECK();
-    }
-
-    /*
      * DMA
      */
@@ -392,7 +369,7 @@
     ComPtr<IFloppyDrive> floppyDrive;
     hrc = pMachine->COMGETTER(FloppyDrive)(floppyDrive.asOutParam());               H();
-    BOOL fFloppyEnabled;
-    hrc = floppyDrive->COMGETTER(Enabled)(&fFloppyEnabled);                         H();
-    if (fFloppyEnabled)
+    BOOL fFdcEnabled;
+    hrc = floppyDrive->COMGETTER(Enabled)(&fFdcEnabled);                            H();
+    if (fFdcEnabled)
     {
         rc = CFGMR3InsertNode(pDevices, "i82078",    &pDev);                        RC_CHECK();
@@ -456,4 +433,28 @@
             }
         }
+    }
+
+    /*
+     * ACPI
+     */
+    BOOL fACPI;
+    hrc = biosSettings->COMGETTER(ACPIEnabled)(&fACPI);                             H();
+    if (fACPI)
+    {
+        rc = CFGMR3InsertNode(pDevices, "acpi", &pDev);                             RC_CHECK();
+        rc = CFGMR3InsertNode(pDev,     "0", &pInst);                               RC_CHECK();
+        rc = CFGMR3InsertInteger(pInst, "Trusted", 1);              /* boolean */   RC_CHECK();
+        rc = CFGMR3InsertNode(pInst,    "Config", &pCfg);                           RC_CHECK();
+        rc = CFGMR3InsertInteger(pCfg,  "RamSize",          cRamMBs * _1M);         RC_CHECK();
+        rc = CFGMR3InsertInteger(pCfg,  "IOAPIC", fIOAPIC);                         RC_CHECK();
+        rc = CFGMR3InsertInteger(pCfg,  "FdcEnabled", fFdcEnabled);                 RC_CHECK();
+        rc = CFGMR3InsertInteger(pInst, "PCIDeviceNo",          7);                 RC_CHECK();
+        Assert(!afPciDeviceNo[7]);
+        afPciDeviceNo[7] = true;
+        rc = CFGMR3InsertInteger(pInst, "PCIFunctionNo",        0);                 RC_CHECK();
+
+        rc = CFGMR3InsertNode(pInst,    "LUN#0", &pLunL0);                          RC_CHECK();
+        rc = CFGMR3InsertString(pLunL0, "Driver",               "ACPIHost");        RC_CHECK();
+        rc = CFGMR3InsertNode(pLunL0,   "Config", &pCfg);                           RC_CHECK();
     }
 
