Index: /trunk/include/VBox/VMMDevTesting.h
===================================================================
--- /trunk/include/VBox/VMMDevTesting.h	(revision 60439)
+++ /trunk/include/VBox/VMMDevTesting.h	(revision 60440)
@@ -63,5 +63,5 @@
 /** The high nanosecond timestamp - 4 RO.  Read this after the low one!  */
 #define VMMDEV_TESTING_IOPORT_TS_HIGH   (VMMDEV_TESTING_IOPORT_BASE + 2)
-/** Command register usually used for preparing the data register - 4 WO. */
+/** Command register usually used for preparing the data register - 4/2 WO. */
 #define VMMDEV_TESTING_IOPORT_CMD       (VMMDEV_TESTING_IOPORT_BASE + 3)
 /** Data register which use depends on the current command - 1s, 4 WO. */
@@ -92,4 +92,11 @@
 /** Print string, sending a string including newline. (RTTestPrintf) */
 #define VMMDEV_TESTING_CMD_PRINT        UINT32_C(0xcab1e008)
+
+/** The magic part of the command. */
+#define VMMDEV_TESTING_CMD_MAGIC        UINT32_C(0xcab1e000)
+/** The magic part of the command. */
+#define VMMDEV_TESTING_CMD_MAGIC_MASK   UINT32_C(0xffffff00)
+/** The magic high word automatically supplied to 16-bit CMD writes. */
+#define VMMDEV_TESTING_CMD_MAGIC_HI_WORD UINT32_C(0xcab10000)
 /** @} */
 
Index: /trunk/src/VBox/Devices/VMMDev/VMMDevTesting.cpp
===================================================================
--- /trunk/src/VBox/Devices/VMMDev/VMMDevTesting.cpp	(revision 60439)
+++ /trunk/src/VBox/Devices/VMMDev/VMMDevTesting.cpp	(revision 60440)
@@ -240,7 +240,13 @@
 
         /*
-         * The command port (DWORD write only).
+         * The command port (DWORD and WORD write only).
+         * (We have to allow WORD writes for 286, 186 and 8086 execution modes.)
          */
         case VMMDEV_TESTING_IOPORT_CMD:
+            if (cb == 2)
+            {
+                u32 |= VMMDEV_TESTING_CMD_MAGIC_HI_WORD;
+                cb = 4;
+            }
             if (cb == 4)
             {
@@ -324,4 +330,23 @@
                 case VMMDEV_TESTING_CMD_TERM:
                 case VMMDEV_TESTING_CMD_SUB_DONE:
+                    if (cb == 2)
+                    {
+                        if (off == 0)
+                        {
+                            pThis->TestingData.Error.c = u32;
+                            pThis->offTestingData = 2;
+                            break;
+                        }
+                        if (off == 2)
+                        {
+                            u32 <<= 16;
+                            u32  |= pThis->TestingData.Error.c & UINT16_MAX;
+                            cb    = 4;
+                            off   = 0;
+                        }
+                        else
+                            break;
+                    }
+
                     if (   off == 0
                         && cb  == 4)
@@ -372,4 +397,24 @@
                         return VINF_SUCCESS;
                     }
+                    if (cb == 2)
+                    {
+                        if (off == 0)
+                            pThis->TestingData.Value.u64Value.Words.w0 = (uint16_t)u32;
+                        else if (off == 2)
+                            pThis->TestingData.Value.u64Value.Words.w1 = (uint16_t)u32;
+                        else if (off == 4)
+                            pThis->TestingData.Value.u64Value.Words.w2 = (uint16_t)u32;
+                        else if (off == 6)
+                            pThis->TestingData.Value.u64Value.Words.w3 = (uint16_t)u32;
+                        else if (off == 8)
+                            pThis->TestingData.Value.u32Unit = (uint16_t)u32;
+                        else if (off == 10)
+                            pThis->TestingData.Value.u32Unit = u32 << 16;
+                        else
+                            break;
+                        pThis->offTestingData = off + 2;
+                        return VINF_SUCCESS;
+                    }
+
                     if (   off >= 12
                         && cb  == 1
