//\r
typedef struct _EFI_EBC_VM_TEST_PROTOCOL EFI_EBC_VM_TEST_PROTOCOL;\r
\r
+//\r
+// VM major/minor version\r
+//\r
+#define VM_MAJOR_VERSION 1\r
+#define VM_MINOR_VERSION 0\r
+\r
+//\r
+// Bits in the VM->StopFlags field\r
+//\r
+#define STOPFLAG_APP_DONE 0x0001\r
+#define STOPFLAG_BREAKPOINT 0x0002\r
+#define STOPFLAG_INVALID_BREAK 0x0004\r
+#define STOPFLAG_BREAK_ON_CALLEX 0x0008\r
+\r
+//\r
+// Masks for working with the VM flags register\r
+//\r
+#define VMFLAGS_CC 0x0001 // condition flag\r
+#define VMFLAGS_STEP 0x0002 // step instruction mode\r
+#define VMFLAGS_ALL_VALID (VMFLAGS_CC | VMFLAGS_STEP)\r
+\r
+//\r
+// Macros for operating on the VM flags register\r
+//\r
+#define VMFLAG_SET(pVM, Flag) (pVM->Flags |= (Flag))\r
+#define VMFLAG_ISSET(pVM, Flag) ((pVM->Flags & (Flag)) ? 1 : 0)\r
+#define VMFLAG_CLEAR(pVM, Flag) (pVM->Flags &= ~(Flag))\r
+\r
+//\r
+// Define a macro to get the operand. Then we can change it to be either a\r
+// direct read or have it call a function to read memory.\r
+//\r
+#define GETOPERANDS(pVM) (UINT8) (*(UINT8 *) (pVM->Ip + 1))\r
+#define GETOPCODE(pVM) (UINT8) (*(UINT8 *) pVM->Ip)\r
+\r
+//\r
+// Macros for operating on the VM GP registers\r
+//\r
+#define OPERAND1_REGDATA(pVM, Op) pVM->Gpr[OPERAND1_REGNUM (Op)]\r
+#define OPERAND2_REGDATA(pVM, Op) pVM->Gpr[OPERAND2_REGNUM (Op)]\r
+\r
+//\r
+// Bits of exception flags field of VM context\r
+//\r
+#define EXCEPTION_FLAG_FATAL 0x80000000 // can't continue\r
+#define EXCEPTION_FLAG_ERROR 0x40000000 // bad, but try to continue\r
+#define EXCEPTION_FLAG_WARNING 0x20000000 // harmless problem\r
+#define EXCEPTION_FLAG_NONE 0x00000000 // for normal return\r
+\r
///\r
/// instruction pointer for the VM\r
///\r