summaryrefslogtreecommitdiffstats
path: root/private/mvdm/softpc.new/obj.vdm
diff options
context:
space:
mode:
Diffstat (limited to 'private/mvdm/softpc.new/obj.vdm')
-rw-r--r--private/mvdm/softpc.new/obj.vdm/c_regs.c431
-rw-r--r--private/mvdm/softpc.new/obj.vdm/cdefine.inc69
-rw-r--r--private/mvdm/softpc.new/obj.vdm/makefile6
-rw-r--r--private/mvdm/softpc.new/obj.vdm/makefile.std6
-rw-r--r--private/mvdm/softpc.new/obj.vdm/ntvdm.c354
-rw-r--r--private/mvdm/softpc.new/obj.vdm/ntvdm.prf615
-rw-r--r--private/mvdm/softpc.new/obj.vdm/ntvdm.src236
-rw-r--r--private/mvdm/softpc.new/obj.vdm/resource.rc124
-rw-r--r--private/mvdm/softpc.new/obj.vdm/sources156
9 files changed, 1997 insertions, 0 deletions
diff --git a/private/mvdm/softpc.new/obj.vdm/c_regs.c b/private/mvdm/softpc.new/obj.vdm/c_regs.c
new file mode 100644
index 000000000..5e69470ec
--- /dev/null
+++ b/private/mvdm/softpc.new/obj.vdm/c_regs.c
@@ -0,0 +1,431 @@
+#ifndef MONITOR
+
+//
+// temp file for Assembler CPU which provides a simple C cpu -> A cpu register
+// mapping for MS libraries (DEM/WOW32/XMS) which are linked for ccpu register
+// gets & sets. STF.
+
+#include "host_def.h"
+#include "insignia.h"
+#include "xt.h"
+#include CpuH
+
+#ifdef A3CPU
+
+#ifndef CCPU
+half_word c_getAL()
+{
+ half_word xal; //pedantic method put in to check compiler correct etc...
+ xal = a3_getAL();
+ return(xal);
+}
+
+half_word c_getAH()
+{
+ half_word xah;
+ xah = a3_getAH();
+ return(xah);
+}
+
+word c_getAX()
+{
+ word xax;
+ xax = a3_getAX();
+ return(xax);
+}
+
+half_word c_getBL()
+{
+ half_word xbl;
+ xbl = a3_getBL();
+ return(xbl);
+}
+
+half_word c_getBH()
+{
+ half_word xbh;
+ xbh = a3_getBH();
+ return(xbh);
+}
+
+word c_getBP()
+{
+ word xbp;
+ xbp = a3_getBP();
+ return(xbp);
+}
+
+word c_getBX()
+{
+ word xbx;
+ xbx = a3_getBX();
+ return(xbx);
+}
+
+INT c_getCF()
+{
+ INT xcf;
+
+ xcf = a3_getCF();
+ return(xcf);
+}
+
+half_word c_getCH()
+{
+ half_word xch;
+ xch = a3_getCH();
+ return(xch);
+}
+
+half_word c_getCL()
+{
+ half_word xcl;
+ xcl = a3_getCL();
+ return(xcl);
+}
+
+word c_getCS()
+{
+ word xcs;
+ xcs = a3_getCS();
+ return(xcs);
+}
+
+word c_getCX()
+{
+ word xcx;
+ xcx = a3_getCX();
+ return(xcx);
+}
+
+half_word c_getDH()
+{
+ half_word xdh;
+ xdh = a3_getDH();
+ return(xdh);
+}
+
+word c_getDI()
+{
+ word xdi;
+ xdi = a3_getDI();
+ return(xdi);
+}
+
+half_word c_getDL()
+{
+ half_word xdl;
+ xdl = a3_getDL();
+ return(xdl);
+}
+
+word c_getDS()
+{
+ word xds;
+ xds = a3_getDS();
+ return(xds);
+}
+
+word c_getDX()
+{
+ word xdx;
+ xdx = a3_getDX();
+ return(xdx);
+}
+
+word c_getES()
+{
+ word xes;
+ xes = a3_getES();
+ return(xes);
+}
+
+word c_getSI()
+{
+ word xsi;
+ xsi = a3_getSI();
+ return(xsi);
+}
+
+word c_getSP()
+{
+ word xsp;
+ xsp = a3_getSP();
+ return(xsp);
+}
+
+word c_getIP()
+{
+ word xip;
+ xip = a3_getIP();
+ return(xip);
+}
+
+word c_getSS()
+{
+ word xss;
+ xss = a3_getSS();
+ return(xss);
+}
+
+word c_getGS()
+{
+#ifndef PROD
+ printf("NO NO NO NO NO getGS - I'm not a 386\n");
+#endif
+ return(0);
+}
+
+word c_getFS()
+{
+#ifndef PROD
+ printf("NO NO NO NO NO getFS - I'm not a 386\n");
+#endif
+ return(0);
+}
+
+word c_getAF()
+{
+ return(a3_getAF());
+}
+
+word c_getDF()
+{
+ return(a3_getDF());
+}
+
+word c_getIF()
+{
+ return(a3_getIF());
+}
+
+word setMSW()
+{
+ return(a3_p_setMSW());
+}
+
+word c_getOF()
+{
+ return(a3_getOF());
+}
+
+word c_getPF()
+{
+ return(a3_getPF());
+}
+
+word c_getSF()
+{
+ return(a3_getSF());
+}
+
+word c_getZF()
+{
+ return(a3_getZF());
+}
+void c_setAL(val)
+half_word val;
+{
+ a3_setAL(val);
+}
+
+void c_setAH(val)
+half_word val;
+{
+ a3_setAH(val);
+}
+
+void c_setAX(val)
+word val;
+{
+ a3_setAX(val);
+}
+
+void c_setBP(val)
+word val;
+{
+ a3_setBP(val);
+}
+
+void c_setBL(val)
+half_word val;
+{
+ a3_setBL(val);
+}
+
+void c_setBH(val)
+half_word val;
+{
+ a3_setBH(val);
+}
+
+void c_setBX(val)
+word val;
+{
+ a3_setBX(val);
+}
+
+void c_setCF(val)
+INT val;
+{
+ a3_setCF(val);
+}
+
+void c_setCH(val)
+half_word val;
+{
+ a3_setCH(val);
+}
+
+void c_setCL(val)
+half_word val;
+{
+ a3_setCL(val);
+}
+
+void c_setCX(val)
+word val;
+{
+ a3_setCX(val);
+}
+
+void c_setDH(val)
+half_word val;
+{
+ a3_setDH(val);
+}
+
+void c_setDL(val)
+half_word val;
+{
+ a3_setDL(val);
+}
+
+void c_setDX(val)
+word val;
+{
+ a3_setDX(val);
+}
+
+void c_setSI(val)
+word val;
+{
+ a3_setSI(val);
+}
+
+void c_setDI(val)
+word val;
+{
+ a3_setDI(val);
+}
+
+
+void c_setAF(word val)
+{
+ a3_setAF(val);
+}
+
+void c_setIF(word val)
+{
+ a3_setIF(val);
+}
+
+void c_setOF(word val)
+{
+ a3_setOF(val);
+}
+
+void c_setPF(word val)
+{
+ a3_setPF(val);
+}
+
+void c_setSF(word val)
+{
+ a3_setSF(val);
+}
+
+void c_setMSW(word val)
+{
+ a3_p_setMSW(val);
+}
+
+void c_setZF(word val)
+{
+ a3_setZF(val);
+}
+
+void c_setIP(word val)
+{
+ a3_setIP(val);
+}
+
+void c_setDF(word val)
+{
+ a3_setDF(val);
+}
+void c_setSP(val)
+word val;
+{
+ a3_setSP(val);
+}
+
+INT c_setSS(val)
+word val;
+{
+ return(a3_setSS(val));
+}
+
+INT c_setES(val)
+word val;
+{
+ return(a3_setES(val));
+}
+
+INT c_setDS(val)
+word val;
+{
+ return(a3_setDS(val));
+}
+
+INT c_setCS(val)
+word val;
+{
+ return(a3_setCS(val));
+}
+
+INT c_setGS(val)
+word val;
+{
+#ifndef PROD
+ printf("NO NO NO NO NO setGS - I'm not a 386\n");
+#endif
+ return(0);
+}
+
+INT c_setFS(val)
+word val;
+{
+#ifndef PROD
+ printf("NO NO NO NO NO setFS - I'm not a 386\n");
+#endif
+ return(0);
+}
+#endif /* CCPU */
+
+
+// these two crept into WOW - they are x86 monitor'isms
+
+word getEIP()
+{
+ return(a3_getIP());
+}
+
+void setEIP(val)
+word val;
+{
+ a3_setIP(val);
+}
+
+#endif // A3CPU
+#endif // !MONITOR
diff --git a/private/mvdm/softpc.new/obj.vdm/cdefine.inc b/private/mvdm/softpc.new/obj.vdm/cdefine.inc
new file mode 100644
index 000000000..9c043e527
--- /dev/null
+++ b/private/mvdm/softpc.new/obj.vdm/cdefine.inc
@@ -0,0 +1,69 @@
+# Check for Checked (dev) or Free (PROD) builds.
+
+!IF "$(NTDEBUG)" == "" || "$(NTDEBUG)" == "retail"
+
+SPC_VAR=-DPROD
+
+!ELSE
+
+!IF "$(PIG)" == ""
+
+!IF "$(HUNTER)" == ""
+
+SPC_VAR=
+
+!ELSE
+
+SPC_VAR=-DHUNTER
+
+!ENDIF
+
+!ELSE
+
+SPC_VAR=-DPIG
+
+!ENDIF
+
+!ENDIF
+
+
+SOFTPC_TREE=$(BASEDIR)\private\mvdm\softpc.new
+
+# Set machine specific variables. Differences are for X86 vs. RISC
+
+!IF $(386)
+
+SPC_MC_DEF= -DMONITOR \
+ -DC_VID \
+ -DX86GFX
+!ELSE
+
+# not an X86. At this point, all RISC architectures have the same defines.
+
+!IF "$(CCPU)" == ""
+CPU_DEFS= -DCPU_40_STYLE
+!ELSE
+CPU_DEFS= -DCPU_40_STYLE -DCCPU -DC_VID
+!ENDIF
+
+SPC_MC_DEF= $(CPU_DEFS) \
+ -DNEW_CPU \
+ -DSPC386 \
+ -DSIM32 \
+ -DV7VGA
+
+
+
+
+#Amend include path to include CPU build system generated files
+!if "$(NTDEBUG)" == ""
+CPU_INCLUDES=$(SOFTPC_TREE)\host\inc\$(PROCESSOR_ARCHITECTURE)\prod
+!else
+CPU_INCLUDES=$(SOFTPC_TREE)\host\inc\$(PROCESSOR_ARCHITECTURE)\pig
+!endif
+
+INCLUDES=$(CPU_INCLUDES);$(INCLUDES)
+
+!ENDIF
+
+C_DEFINES= $(SPC_VAR) $(SPC_MC_DEF) -DANSI
diff --git a/private/mvdm/softpc.new/obj.vdm/makefile b/private/mvdm/softpc.new/obj.vdm/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/mvdm/softpc.new/obj.vdm/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/mvdm/softpc.new/obj.vdm/makefile.std b/private/mvdm/softpc.new/obj.vdm/makefile.std
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/mvdm/softpc.new/obj.vdm/makefile.std
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/mvdm/softpc.new/obj.vdm/ntvdm.c b/private/mvdm/softpc.new/obj.vdm/ntvdm.c
new file mode 100644
index 000000000..be19e3327
--- /dev/null
+++ b/private/mvdm/softpc.new/obj.vdm/ntvdm.c
@@ -0,0 +1,354 @@
+#include <nt.h>
+#include <ntrtl.h>
+#include <nturtl.h>
+#include <windows.h>
+#include "host_def.h"
+#include "insignia.h"
+#include <stdlib.h>
+#include "xt.h"
+#include "error.h"
+#include "host_rrr.h"
+#include "host_nls.h"
+#include "nt_timer.h"
+
+
+
+void CpuEnvInit(void);
+
+typedef struct _CpuEnvironmentVariable {
+ struct _CpuEnvironmentVariable *Next;
+ char *Data;
+ char Name[1];
+} CPUENVVAR, *PCPUENVVAR;
+
+PCPUENVVAR CpuEnvVarListHead=NULL;
+
+#if DBG
+BOOLEAN verboseGetenv;
+#endif
+
+
+INT host_main(INT argc, CHAR **argv); // located in base\support\main.c
+
+_CRTAPI1 main(int argc, CHAR ** argv)
+{
+ int ret=-1;
+
+ /*
+ * Intialize synchronization events for the timer\heartbeat
+ * so that we can always suspend the heartbeat when an exception
+ * occurs.
+ */
+ TimerInit();
+
+
+
+ try {
+
+ CpuEnvInit();
+
+ /*
+ * Load in the default system error message, since a resource load
+ * will fail when we are out of memory, if this fails we must exit
+ * to avoid confusion.
+ */
+ nls_init();
+
+ ret = host_main(argc, argv);
+ }
+ except(VdmUnhandledExceptionFilter(GetExceptionInformation())) {
+ ; // we shouldn't arrive here
+ }
+
+ return ret;
+}
+
+
+
+
+
+
+//
+// The following function is placed here, so build will resolve references to
+// DbgBreakPoint here, instead of NTDLL.
+//
+
+VOID
+DbgBreakPoint(
+ VOID
+ )
+/*++
+
+Routine Description:
+
+ This routine is a substitute for the NT DbgBreakPoint routine.
+ If a user mode debugger is atached we invoke the real DbgBreakPoint()
+ thru the win32 api DebugBreak.
+
+ If no usermode debugger is attached:
+ - free build no effect
+ - checked build raise an acces violation to invoke the system
+ hard error popup which will give user a chance to invoke
+ ntsd.
+
+Arguments:
+
+ None.
+
+Return Value:
+
+ None.
+
+--*/
+{
+HANDLE MyDebugPort;
+DWORD dw;
+
+ // are we being debugged ??
+ dw = NtQueryInformationProcess(
+ NtCurrentProcess(),
+ ProcessDebugPort,
+ &MyDebugPort,
+ sizeof(MyDebugPort),
+ NULL );
+ if (!NT_SUCCESS(dw) || MyDebugPort == NULL) {
+#ifndef PROD
+ RaiseException(STATUS_ACCESS_VIOLATION, 0L, 0L, NULL);
+#endif
+ return;
+ }
+
+ DebugBreak();
+}
+
+
+
+
+
+/*
+ * Softpc env variables are mapped to the registry
+ *
+ * "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\WOW\CpuEnv"
+ *
+ * The string values for the CpuEnv key are read at initialization
+ * into the CpuEnv linked list. The Environment variables are defined
+ * as string key values, where the name of the value is equivalent to
+ * the Cpu Environment Variable name, and the string value is equivalent
+ * to the value of the environment variable value. This allows the
+ * emulator defaults to be overridden, by adding the appropriate value
+ * to CpuEnv subkey. Under standard retail setup there won't normally
+ * be a CpuEnv subkey, and NO cpu env variables defined to minimize
+ * code\data on a standard retail system.
+ *
+ */
+
+
+
+/*
+ * Adds a CpuEnv KEY_VALUE_FULL_INFORMATION to the CpuEnvList
+ */
+BOOLEAN
+AddToCpuEnvList(
+ PKEY_VALUE_FULL_INFORMATION KeyValueInfo
+ )
+{
+ NTSTATUS Status;
+ ULONG BufferSize;
+ PCPUENVVAR CpuEnvVar;
+ UNICODE_STRING UnicodeString;
+ ANSI_STRING ValueName;
+ ANSI_STRING ValueData;
+ char NameBuffer[MAX_PATH+sizeof(WCHAR)];
+ char DataBuffer[MAX_PATH+sizeof(WCHAR)];
+
+
+ /*
+ * Convert Value Name and Data strings from unicode to ansi
+ */
+
+ ValueName.Buffer = NameBuffer;
+ ValueName.MaximumLength = sizeof(NameBuffer) - sizeof(WCHAR);
+ ValueName.Length = 0;
+ UnicodeString.Buffer = (PWSTR)KeyValueInfo->Name;
+ UnicodeString.MaximumLength =
+ UnicodeString.Length = (USHORT)KeyValueInfo->NameLength;
+ Status = RtlUnicodeStringToAnsiString(&ValueName, &UnicodeString,FALSE);
+ if (!NT_SUCCESS(Status)) {
+ return FALSE;
+ }
+
+ ValueData.Buffer = DataBuffer;
+ ValueData.MaximumLength = sizeof(DataBuffer) - sizeof(WCHAR);
+ ValueData.Length = 0;
+ UnicodeString.Buffer = (PWSTR)((PBYTE)KeyValueInfo + KeyValueInfo->DataOffset);
+ UnicodeString.MaximumLength =
+ UnicodeString.Length = (USHORT)KeyValueInfo->DataLength;
+ Status = RtlUnicodeStringToAnsiString(&ValueData, &UnicodeString, FALSE);
+ if (!NT_SUCCESS(Status)) {
+ return FALSE;
+ }
+
+
+ /*
+ * Allocate CPUENVLIST structure, with space for the ansi strings
+ */
+ CpuEnvVar = malloc(sizeof(CPUENVVAR)+ // list structure size
+ ValueName.Length + // strlen Name
+ ValueData.Length + // strlen Data
+ 1 // Null for Data
+ );
+ if (!CpuEnvVar) {
+ return FALSE;
+ }
+
+
+ /*
+ * Copy in the ansi strings, and link it into CpuEnvVar List
+ */
+ memcpy(CpuEnvVar->Name, ValueName.Buffer, ValueName.Length);
+ *(CpuEnvVar->Name + ValueName.Length) = '\0';
+ CpuEnvVar->Data = CpuEnvVar->Name + ValueName.Length + 1;
+ memcpy(CpuEnvVar->Data, ValueData.Buffer, ValueData.Length);
+ *(CpuEnvVar->Data + ValueData.Length) = '\0';
+ CpuEnvVar->Next = CpuEnvVarListHead;
+ CpuEnvVarListHead = CpuEnvVar;
+
+ return TRUE;
+}
+
+
+
+
+/*
+ * Reads the CpuEnv values from the registry, into CpuEnvList
+ */
+void
+CpuEnvInit(
+ void
+ )
+{
+ int Index;
+ NTSTATUS Status;
+ HANDLE CpuEnvKey = NULL;
+ ULONG ResultLength;
+ UNICODE_STRING UnicodeString;
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ PKEY_VALUE_FULL_INFORMATION KeyValueInfo;
+ BYTE NameDataBuffer[sizeof(KEY_VALUE_FULL_INFORMATION) + MAX_PATH*2*sizeof(WCHAR)];
+
+
+
+ KeyValueInfo = (PKEY_VALUE_FULL_INFORMATION) NameDataBuffer;
+
+#ifndef MONITOR
+/*
+ * BUGBUG temp hack code to add two env var, which aren't properly
+ * defaulted to in the risc cpu emulator
+ *
+ * THIS is to be removed before SUR ship 19-Dec-1995 Jonle
+ */
+ {
+ PWCHAR Data;
+
+ wcscpy(KeyValueInfo->Name, L"Soft486Buffers");
+ KeyValueInfo->NameLength = wcslen(KeyValueInfo->Name) * sizeof(WCHAR);
+ Data = (PWCH)((PBYTE)KeyValueInfo->Name + KeyValueInfo->NameLength + sizeof(WCHAR));
+ wcscpy(Data, L"511");
+ KeyValueInfo->DataLength = wcslen(Data) * sizeof(WCHAR);
+ KeyValueInfo->DataOffset = (PBYTE)Data - (PBYTE)KeyValueInfo;
+ AddToCpuEnvList(KeyValueInfo);
+
+ wcscpy(KeyValueInfo->Name, L"LCIF_FILENAME");
+ KeyValueInfo->NameLength = wcslen(KeyValueInfo->Name) * sizeof(WCHAR);
+ Data = (PWCH)((PBYTE)KeyValueInfo->Name + KeyValueInfo->NameLength + sizeof(WCHAR));
+ wcscpy(Data, L"R lcif");
+ KeyValueInfo->DataLength = wcslen(Data) * sizeof(WCHAR);
+ KeyValueInfo->DataOffset = (PBYTE)Data - (PBYTE)KeyValueInfo;
+ AddToCpuEnvList(KeyValueInfo);
+ }
+
+#endif
+
+
+
+ RtlInitUnicodeString(
+ &UnicodeString,
+ L"\\REGISTRY\\MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Wow\\CpuEnv"
+ );
+
+ InitializeObjectAttributes(&ObjectAttributes,
+ &UnicodeString,
+ OBJ_CASE_INSENSITIVE,
+ (HANDLE)NULL,
+ NULL
+ );
+
+ Status = NtOpenKey(&CpuEnvKey,
+ KEY_READ,
+ &ObjectAttributes
+ );
+
+ //
+ // If there is no CpuEnv key, CpuEnvList is empty.
+ //
+ if (!NT_SUCCESS(Status)) {
+ return;
+ }
+
+ Index = 0;
+ while (TRUE) {
+ Status = NtEnumerateValueKey(CpuEnvKey,
+ Index,
+ KeyValueFullInformation,
+ KeyValueInfo,
+ sizeof(NameDataBuffer),
+ &ResultLength
+ );
+
+ if (!NT_SUCCESS(Status) || !AddToCpuEnvList(KeyValueInfo)) {
+ break;
+ }
+
+ Index++;
+ };
+
+ NtClose(CpuEnvKey);
+
+#if DBG
+ {
+ char *pEnvStr;
+ pEnvStr = getenv("VERBOSE_GETENV");
+ verboseGetenv = pEnvStr && !_stricmp(pEnvStr, "TRUE");
+ }
+#endif
+
+}
+
+
+
+/*
+ * In order to catch all references, we define our own
+ * version of the CRT getenv, which does the mapping.
+ */
+char * _CRTAPI1 getenv(const char *Name)
+{
+ PCPUENVVAR CpuEnvVar;
+ char *Value = NULL;
+
+ CpuEnvVar = CpuEnvVarListHead;
+ while (CpuEnvVar) {
+ if (!_stricmp(CpuEnvVar->Name, Name)) {
+ Value = CpuEnvVar->Data;
+ break;
+ }
+ CpuEnvVar = CpuEnvVar->Next;
+ }
+
+#if DBG
+ if (verboseGetenv) {
+ DbgPrint("getenv %s:<%s>\n", Name, Value);
+ }
+#endif
+
+ return Value;
+}
diff --git a/private/mvdm/softpc.new/obj.vdm/ntvdm.prf b/private/mvdm/softpc.new/obj.vdm/ntvdm.prf
new file mode 100644
index 000000000..6d70d669b
--- /dev/null
+++ b/private/mvdm/softpc.new/obj.vdm/ntvdm.prf
@@ -0,0 +1,615 @@
+host_ica_unlock@0
+host_ica_lock@0
+BlockWOWIdle@4
+EndUseLockedPMStack@0
+MS_bop_3@0
+VDDRetrieveNtHandle@16
+getMSW@0
+DpmiDispatch@0
+FastEnterPm@0
+EventVdmBop@0
+DpmiFaultHandlerIret16@0
+Sim32pGetVDMPointer@8
+host_lpt_heart_beat@0
+PlaySound@4
+clocksSinceCounterUpdate@12
+_allmul
+SWTMR_time_tick@0
+GetPerfCounterUsecs@8
+getIdealTime@4
+host_timer_event@0
+WOWIdle@4
+host_GetSysTime@4
+DispatchInterrupts@0
+issueIREQ0@4
+updateCount@0
+LazyBeep@8
+DemHeartBeat@0
+getIF@0
+time_strobe@0
+PlayContinuousTone@0
+updateIdealTime@0
+RtcTick@4
+timer_generate_int@0
+__sbh_alloc_block
+updateCounter@0
+host_com_heart_beat@0
+DelayHeartBeat@4
+NtVdmControl@8
+host_flpy_heart_beat@0
+cpu_interrupt@8
+ThreadLookUp@4
+DpmiSetFaultHandler@0
+getIP@0
+HostIdleNoActivity@0
+printer_bop_openclose@4
+DemDispatch@4
+ica_hw_interrupt_cancel@8
+getBL@0
+NoTranslation@0
+getSI@0
+demFileTimes@0
+DosxTranslated@0
+getBX@0
+MS_bop_0@0
+printer_io@0
+DpmiXlatInt21Call@0
+DpmiSetDescriptorEntry@0
+free
+DpmiSwitchToProtectedMode@0
+getDX@0
+getSS@0
+DpmiSetProtectedmodeInterrupt@0
+switch_to_protected_mode@0
+host_DelayHwInterrupt@12
+ica_clear_int@8
+DpmiSwitchToDosxStack@4
+SetPSP@0
+switch_to_real_mode@0
+setCF@4
+VDDAssociateNtHandle@12
+getSP@0
+VDDAllocateDosHandle@12
+ica_restart_interrupts@4
+IgetSP@0
+IOCTL@0
+cpu_simulate@0
+ica_scan_irr@4
+getCS@0
+setCX@4
+DpmiSwitchToRealMode@0
+DpmiSaveSegmentsAndStack@4
+DpmiSwitchFromDosxStack@0
+DpmiRestoreSegmentsAndStack@0
+DpmiFreeAllBuffers@0
+setSP@4
+host_unsimulate@0
+SetDTA@0
+setIP@4
+DpmiPushRmInt@4
+GetFreeSftEntry@8
+SuspendTimerThread@0
+setDX@4
+DpmiSimulateIretCF@0
+DispatchHwInterrupt@0
+ica_accept@4
+ica_intack@4
+ica_RestartInterrupts@4
+DpmiSetX86Descriptor@12
+ReinitIdealTime@4
+GetPspFFindList@4
+FloppyTerminatePDB@4
+host_ExitThread@4
+VDDTerminateUserHook@4
+HostTerminatePDB@4
+host_lpt_dos_close@4
+demTerminatePDB@0
+FdiskTerminatePDB@4
+cpu_exitthread@0
+__sbh_alloc_block_from_page
+__sbh_free_block
+malloc
+ThreadStartupRoutine@4
+cpu_createthread@4
+rtc_init@0
+host_lpt_dos_open@4
+__sbh_find_block
+EventVdmIntAck@0
+host_init_bda_timer@0
+CreatePSP@0
+ResetAlarm@0
+_nh_malloc
+ResumeTimerThread@0
+FastLeavePm@0
+host_CreateThread@24
+_heap_alloc
+fla_outb@8
+ppi_init@0
+get_scanlines@0
+find_mode_table@8
+hostModeChange@0
+demFindFirst@0
+calcScreenParams@8
+MS_bop_4@0
+ShowStartGlass@4
+host_com_lock@4
+set_index_state@0
+nt_set_screen_scale@4
+getCH@0
+nt_set_border_colour@4
+dma_init@0
+diskette_post@0
+nt_change_plane_mask@4
+WriteExpanded@12
+diskette_int@0
+fast_disk_bios_detach@4
+emu_8253@12
+load_font@20
+fast_disk_bios_attach@4
+get_screen_scale@0
+nt_cursor_size_changed@8
+ica_interrupt_cpu@8
+InitScreenDesc@0
+CreateDisplayPalette@0
+SetupConsoleMode@0
+demLoadDos@0
+deinstall_host_mouse@0
+emm_init@0
+mouse_in_use@0
+mouse_reset@0
+sprintf
+SegmentFree@8
+loadNativeBIOSfont@4
+printer_setup_table@4
+resetNowCur@0
+MouseAttachMenuItem@4
+HeartBeatThread@4
+vga_seq_clock@8
+loadCounter@0
+ConsoleInit@0
+setOutputAfterMode@0
+setCH@4
+vga_init@0
+init_vga_globals@0
+GetFFindEntryByFindId@4
+nt_init_screen@0
+vga_dac_outb@8
+vga_gc_read_map@8
+vga_dac_data_outb@8
+vga_ipstat1_inb@8
+vga_gc_misc@8
+ExpandConfigFiles@4
+vga_seq_outb_index@8
+vga_gc_dont_care@8
+host_gfi_rdiskette_active@12
+setCL@4
+vga_gc_mask_ff@8
+IsDebuggee@0
+com_post@4
+vga_crtc_outb@8
+low_set_mode@4
+ega_video_init@0
+vga_seq_map_mask@8
+vga_misc_inb@8
+xmsNotifyHookI15@0
+host_main@8
+fdisk_reset@0
+AddSystemFiles@0
+vga_gc_outb_index@8
+host_applInit@8
+vga_gc_enable_set@8
+xmsQueryExtMem@0
+RegisterEOIHook@8
+vote_vga_mode@0
+xmsAllocBlock@0
+outputHigh@0
+CounterBufferLoaded@0
+xmsInitUMB@0
+ega_read_routines_update@0
+xmsA20@0
+xmsMoveBlock@0
+demClose@0
+mouse_init@0
+mouse_outb@8
+GfxReset@0
+update_shift_count@0
+waitingFor2ndWrite@8
+setAX@4
+DeleteConfigFiles@0
+TimerInit@0
+memory_size@0
+cmos_post@0
+cmdGetAutoexecBat@0
+InterruptInit@0
+init_vga_dac@4
+DBGInit@8
+vga_gc_set_reset@8
+setIF@4
+demCreateCommon@4
+setCS@4
+nt_init_event_thread@0
+host_fdisk_active@12
+getCL@0
+host_fdisk_get_params@16
+host_using_fdisk@4
+host_com_unlock@4
+host_fdisk_valid@16
+ica1_init@0
+ica1_post@0
+com_int_data@12
+ica0_post@0
+ica0_init@0
+demIOCTL@0
+fl_disk_type@4
+fl_disk_parms@4
+disable_gfx_update_routines@0
+gfi_drive_type@4
+SetupInstallableVDD@0
+fdc_command_completed@8
+host_runtime_init@0
+IgetDX@0
+host_runtime_set@8
+fla_init@0
+trap_ndma@0
+fla_inb@8
+gfi_high@8
+WriteFileAssert@12
+DpmiInitRegisterSize@0
+flag_mode_change_required@0
+getDL@0
+MapASCIIZDSDX@0
+InitDetect@0
+host_mouse_install1@0
+demDOSDispRet@0
+kb_setup_vectors@0
+reset_paint_routines@0
+InitSound@4
+GetPIFConfigFiles@8
+cmdGetNextCmd@0
+DpmiDpmiInUse@0
+fdisk_ioattach@0
+update_banking@0
+diskette_io@0
+dma_post@0
+demEntryDosApp@0
+cmdComSpec@0
+host_block_timer@0
+init_host_uis@0
+cmdInitConsole@0
+ega_read_init@0
+demCreateNew@0
+nt_rflop_reset@8
+ega_mode_init@0
+mouse_installed@0
+setDI@4
+ConsoleMenuControl@12
+host_memset@12
+vga_gc_rotate@8
+cmdSetInfo@0
+strtoul
+display_string@4
+setBL@4
+vga_gc_compare@8
+InitPerfCounter@0
+set_floppy_parms@4
+IsConfigCommand@12
+_ioinit
+cmdGetInitEnvironment@0
+_heap_init
+xmsDisableA20Wrapping@0
+video_init@0
+mouse_install1@0
+follow_ptr@4
+xmsEnableA20Wrapping@0
+vga_misc_outb@8
+MS_bop_6@0
+MS_bop_1@0
+reset@0
+CmdDispatch@4
+getDI@0
+setBX@4
+IsVdmRedirLoaded@0
+search_for_roms@0
+demSetHardErrorInfo@0
+demFdiskInit@0
+cmos_read@4
+demFloppyInit@0
+sas_scratch_address@4
+demClientErrorEx@12
+main
+MS_bop_E@0
+MS_bop_F@0
+WaitIcaLockFullyInitialized@0
+DpmiPassTableAddress@0
+printer_post@4
+nt_rflop_command@8
+gfi_fdc_command@8
+nt_fdisk_init@12
+cmdGetKbdLayout@0
+patch_rom@8
+in_index_state@0
+com_init@4
+recalc_screen_params@0
+gvi_init@4
+nt_rflop_drive_type@4
+setDL@4
+cmos_inb@8
+cmos_pickup@0
+host_fdisk_seek0@4
+InitializeIcaLock@0
+nt_start_event_thread@0
+host_com_ioctl@12
+set_banking@8
+SWTMR_gate@8
+scs_init@8
+host_com_reset@4
+CMDInit@8
+outputWaveForm@20
+isgraph
+setTriggerCond@0
+getES@0
+gfi_init@0
+gfi_floppy_active@12
+gfi_empty_active@12
+initialise_npx@0
+IsCdRomFile@4
+screen_refresh_required@0
+fdisk_physattach@4
+GetROMsMapped@0
+ch_malloc@4
+DBGDispatch@0
+translate_old@4
+DpmiGetFastBopEntry@0
+CreateNewUMBNode@12
+host_fdisk_change@8
+uninit@8
+IdealTimeInit@0
+Timer_init@0
+counter_init@4
+timer_init@0
+timer_post@0
+sas_init@4
+sas_connect_memory@12
+sas_term@0
+sas_memory_size@0
+sas_memory_type@4
+sas_enable_20_bit_wrapping@0
+sas_disable_20_bit_wrapping@0
+cmos_outb@8
+sas_w_at@4
+sas_dw_at@4
+sas_store@8
+sas_storew@8
+sas_storedw@8
+sas_loads@12
+sas_stores@12
+mainCRTStartup
+demDasdInit@0
+sas_hw_at_no_check@4
+sas_w_at_no_check@4
+sas_store_no_check@8
+sas_storew_no_check@8
+effective_addr@8
+sas_twenty_bit_wrapping_enabled@0
+demWOWFiles@0
+host_com_da_int_change@12
+demIoctlChangeable@0
+cpu_init@0
+demSetDTALocation@0
+demIsDebug@0
+cmdCreateTempFile@8
+XMSDispatch@4
+cmos_write_byte@8
+_setargv
+time_of_day_init@0
+host_print_auto_feed@8
+nls_init@0
+idle_ctl@4
+realloc
+vga_ac_outb@8
+vga_seq_char_map@8
+HostReleaseKbd@0
+WaitKbdHdw@4
+host_com_disable_open@8
+gfi_reset@8
+SegmentLoad@20
+getIntelRegistersPointer@0
+DpmiInitDosx@0
+get_total_pages@0
+cursor_changed@8
+getCF@0
+DpmiAllocateXmem@0
+ega_seq_reset@8
+ReturnESBX@0
+equipment@0
+sas_loadw@8
+GetDriveTypeOem@4
+DpmiInitApp@0
+keyboard_init@0
+getAX@0
+setup_vga_globals@0
+setup_global_data_ptr@0
+DpmiGetMemoryInfo@0
+UpdateKbdInt15@8
+GetPIFData@8
+config@0
+config_inquire@8
+vga_crtc_inb@8
+vga_seq_mem_mode@8
+xmsCommitBlock@8
+DpmiAllocateVirtualMemory@8
+SetPifDefaults@4
+ega_write_routines_update@4
+xmsQueryFreeExtMem@0
+nt_kb_prepare@0
+demGetDPBList@0
+DpmiPassPmStackInfo@0
+InitialiseDosEmulation@8
+hda_init@0
+fdisk_iodetach@0
+host_lpt_flush_initialize@0
+enable_gfx_update_routines@0
+process_pif_exe@4
+vga_gc_mode@8
+host_reset@0
+IsBlockCommitted@8
+SAAllocate@12
+SAQueryFree@12
+AllocateChunkAt@16
+CommitChunk@16
+SAInitialize@20
+setAH@4
+getAH@0
+CreateFileOem@28
+copyConsoleToRegen@16
+disableUpdates@0
+setVDMCursorPosition@8
+locateNativeBIOSfonts@0
+AddTempIVTFixups@0
+enableUpdates@0
+getCX@0
+setBP@4
+nt_rdiskette_open_drive@4
+nt_gfi_rdiskette_term@4
+GetConsoleDisplayMode@4
+outb@8
+setES@4
+getBP@0
+cassette_io@0
+AT_kbd_init@0
+timestamp@0
+nt_gfi_rdiskette_init@4
+nt_rflop_rate@8
+GetPhysicalDriveType@4
+CopyDirInfoToDosData@12
+FileFindNext@8
+FileFindClose@4
+FileFindOpen@12
+demGetPhysicalDriveType@4
+demChgFilePtr@0
+cmdCreateVDMEnvironment@4
+DpmiMapString@12
+_strupr
+tolower
+NIDDB_Allocate_Instance_Data@12
+DpmiUnmapString@8
+get_lim_backfill_segment@0
+get_lim_configuration_data@4
+mouse_driver_initialisation@0
+DpmiMapAndCopyBuffer@8
+DemInit@8
+ega_set_mode@0
+video_effective_addr@8
+initTextSection@0
+GetWowKernelCmdLine@0
+host_timer_init@0
+setAL@4
+InitUMBList@0
+inb@8
+io_define_inb@8
+ica_inb@8
+ica_outb@8
+ica_hw_interrupt@12
+io_connect_port@12
+demChMod@0
+UpdateCmosTime@0
+do_checksum@0
+verify_equip_byte@4
+cmos_error@24
+DpmiFreeBuffer@8
+demFileFindFirst@12
+DemOemToUni@8
+CpuEnvInit@0
+GetFileAttributesOem@4
+clear_buff_6805@0
+getAL@0
+clear_string@0
+demGetDrives@0
+IgetDI@0
+init_key_arrays@0
+demGetBootDrive@0
+demClientError@8
+io_init@0
+disk_post@0
+GetPerfCounter@0
+host_runtime_inquire@4
+MS_bop_2@0
+cmdGetCurrentDir@0
+q_event_init@0
+RegisterWOWIdle@0
+SearchFile@16
+io_disconnect_port@8
+demOpen@0
+IsNamedPipeName@4
+FillSrchDta@8
+_cinit
+fl_disk_reset@4
+XMSInit@8
+printer_init@4
+sas_load@8
+keyboard_post@0
+KbdResume@0
+__initstdio
+__crtGetEnvironmentStringsA
+_setmbcp
+__initmbctable
+calloc
+demFindNext@0
+_setenvp
+SafeLoadLibrary@4
+_output
+ega_write_init@0
+host_idle_init@0
+getNtScreenState@0
+Win32_host_timer@0
+controlWordReg@4
+cmos_init@0
+cmos_read_byte@8
+recalc_text@4
+host_release_timer@0
+ReserveUMB@12
+host_com_open@4
+UMBNotify@4
+DpmiSegmentToSelector@4
+do_new_cursor@0
+setDH@4
+demFileFindNext@4
+io_define_in_routines@20
+io_define_outb@8
+io_define_out_routines@20
+GetVolumeInformationOem@32
+ica_eoi@12
+host_timer2_waveform@20
+getDS@0
+GetNextVDMCommand@4
+SWTMR_init_funcptrs@0
+RegisterConsoleVDM@44
+waitingFor1stWrite@8
+DpmiUnmapBuffer@8
+timer_conv@4
+GetEnvironmentVariableOem@12
+SWTMR_outb@8
+WtComplete@0
+host_EOI_hook@8
+VDDCreateUserHook@4
+ExpandEnvironmentStringsOem@12
+host_set_hw_int@0
+host_printer_setup_table@12
+MonitorInitializePrinterInfo@24
+__sbh_new_region
+base_cursor_shape_changed@0
+cmdGetConfigSys@0
+xmsRequestUMB@0
+AT_kbd_post@0
+__sbh_resize_block
+strchr
+_local_unwind2
+_NLG_Notify
+_stricmp
+_aullrem
+_strnicmp
+strstr
+strncpy
+GetFastBopEntryAddress@4
+memmove
+_aulldiv
diff --git a/private/mvdm/softpc.new/obj.vdm/ntvdm.src b/private/mvdm/softpc.new/obj.vdm/ntvdm.src
new file mode 100644
index 000000000..dbfbb6d5b
--- /dev/null
+++ b/private/mvdm/softpc.new/obj.vdm/ntvdm.src
@@ -0,0 +1,236 @@
+NAME ntvdm.exe
+
+EXPORTS
+#if defined(i386)
+ getEAX
+ getEBX
+ getECX
+ getEDX
+ getESP
+ getEBP
+ getESI
+ getEDI
+ getFS
+ getGS
+ setEAX
+ setEBX
+ setECX
+ setEDX
+ setESP
+ setEBP
+ setESI
+ setEDI
+ setFS
+ setGS
+ MGetVdmPointer = ExpSim32GetVDMPointer ; for 1.0 VDD compatibility
+ setMSW
+ getEIP
+ CurrentMonitorTeb DATA
+ ExpVdmTib = VdmTib DATA
+ SelectorLimit = ExpSelectorLimit DATA
+
+#else // Risc platforms
+ c_getAX = getAX
+ c_getAL = getAL
+ c_getAH = getAH
+ c_getBX = getBX
+ c_getBL = getBL
+ c_getBH = getBH
+ c_getCX = getCX
+ c_getCL = getCL
+ c_getCH = getCH
+ c_getDX = getDX
+ c_getDL = getDL
+ c_getDH = getDH
+ c_getSP = getSP
+ c_getBP = getBP
+ c_getSI = getSI
+ c_getDI = getDI
+ c_getIP = getIP
+ c_getCS = getCS
+ c_getSS = getSS
+ c_getDS = getDS
+ c_getES = getES
+ c_getCF = getCF
+ c_getPF = getPF
+ c_getAF = getAF
+ c_getZF = getZF
+ c_getSF = getSF
+ c_getIF = getIF
+ c_getDF = getDF
+ c_getOF = getOF
+ c_setAX = setAX
+ c_setAH = setAH
+ c_setAL = setAL
+ c_setBX = setBX
+ c_setBH = setBH
+ c_setBL = setBL
+ c_setCX = setCX
+ c_setCH = setCH
+ c_setCL = setCL
+ c_setDX = setDX
+ c_setDH = setDH
+ c_setDL = setDL
+ c_setSP = setSP
+ c_setBP = setBP
+ c_setSI = setSI
+ c_setDI = setDI
+ c_setIP = setIP
+ c_setCS = setCS
+ c_setSS = setSS
+ c_setDS = setDS
+ c_setES = setES
+ c_setCF = setCF
+ c_setPF = setPF
+ c_setAF = setAF
+ c_setZF = setZF
+ c_setSF = setSF
+ c_setIF = setIF
+ c_setDF = setDF
+ c_setOF = setOF
+ c_setMSW = setMSW ; should be setMSW
+ Sim32SetVDMMemory
+ Sim32FlushVDMPointer
+ Sim32GetVDMPointer = ExpSim32GetVDMPointer ; for pr 1.0 compatibility
+ SetWOWforceIncrAlloc
+
+#endif
+
+ getMSW
+ getAX
+ getAL
+ getAH
+ getBX
+ getBL
+ getBH
+ getCX
+ getCL
+ getCH
+ getDX
+ getDL
+ getDH
+ getSP
+ getBP
+ getSI
+ getDI
+ getIP
+ getCS
+ getSS
+ getDS
+ getES
+ getCF
+ getPF
+ getAF
+ getZF
+ getSF
+ getIF
+ getDF
+ getOF
+ setAX
+ setAH
+ setAL
+ setBX
+ setBH
+ setBL
+ setCX
+ setCH
+ setCL
+ setDX
+ setDH
+ setDL
+ setSP
+ setBP
+ setSI
+ setDI
+ setIP
+ setCS
+ setSS
+ setDS
+ setES
+ setCF
+ setPF
+ setAF
+ setZF
+ setSF
+ setIF
+ setDF
+ setOF
+
+ host_simulate
+ host_CreateThread
+ host_ExitThread
+ Sim32pGetVDMPointer ; for internal use
+ getIntelRegistersPointer
+
+ RegisterWOWIdle
+ BlockWOWIdle
+ SuspendTimerThread
+ ResumeTimerThread
+
+ call_ica_hw_interrupt = ica_hw_interrupt
+ GetWOWShortCutInfo
+
+ DispatchInterrupts
+ ExpLdt = Ldt DATA
+ FlatAddress DATA
+ pDeviceChain DATA
+ fSeparateWow DATA
+
+ host_com_close
+ host_direct_access_error
+
+ VDDInstallIOHook
+ VDDDeInstallIOHook
+ VDDRequestDMA
+ VDDSetDMA
+ VDDQueryDMA
+ VDDInstallMemoryHook
+ VDDDeInstallMemoryHook
+ VDDAllocMem
+ VDDFreeMem
+ VDDIncludeMem
+ VDDExcludeMem
+ VDDTerminateVDM
+
+ VDDInstallUserHook
+ VDDDeInstallUserHook
+ VDDSimulate16
+
+ VDDReserveIrqLine
+ VDDReleaseIrqLine
+
+ VDDAllocateDosHandle
+ VDDAssociateNtHandle
+ VDDReleaseDosHandle
+ VDDRetrieveNtHandle
+
+ DBGNotifyNewTask
+ DBGNotifyRemoteThreadAddress
+ DBGNotifyDebugged
+
+ cpu_createthread
+
+ WaitIfIdle
+ WOWSysErrorBox
+ SoftPcEoi
+
+ demFileFindFirst
+ demFileFindNext
+ demClientErrorEx
+
+#ifdef CPU_40_STYLE
+
+ VdmAllocateVirtualMemory
+ VdmFreeVirtualMemory
+ VdmQueryFreeVirtualMemory
+ VdmReallocateVirtualMemory
+ VdmAddVirtualMemory
+ VdmRemoveVirtualMemory
+
+#endif
+
+#ifndef i386
+
+ VdmAddDescriptorMapping
+
+#endif
diff --git a/private/mvdm/softpc.new/obj.vdm/resource.rc b/private/mvdm/softpc.new/obj.vdm/resource.rc
new file mode 100644
index 000000000..227b69dbe
--- /dev/null
+++ b/private/mvdm/softpc.new/obj.vdm/resource.rc
@@ -0,0 +1,124 @@
+/*
+
+Filename : softpc.rc
+Purpose : Contains resource file definition for softpc
+Author : D.A.Bartlett
+
+Contains :
+
+ Error Panel dialog and icon
+ SoftPC Icon
+ String resource table
+
+
+Revision History :
+
+*/
+
+/*:::::::::::::::::::::::::::::: Manifests used to generate resource binary */
+#include <windows.h>
+#include "nt_uis.h"
+#include "error.h"
+#include "host_rrr.h"
+
+/*
+ * resource compiler can't handle MAKEINTRESOURCE 08-May-1993 Jonle
+ */
+#undef IDI_HAND
+#define IDI_HAND 32513
+
+/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Error Panel */
+
+ERRORPANEL DIALOG 0, 0, 240, 87
+STYLE WS_VISIBLE | WS_POPUP | WS_CAPTION | DS_MODALFRAME | DS_SETFOREGROUND | WS_SYSMENU
+FONT 8 "MS Shell Dlg"
+CAPTION "16 bit MS-DOS Subsystem"
+BEGIN
+ ICON IDI_HAND, IDE_ICON, 6, 24, 18, 20
+ LTEXT "", IDE_APPTITLE, 30, 6, 200,24
+ LTEXT "", IDE_ERRORMSG, 30, 30, 200,32
+ EDITTEXT, IDE_EDIT 30, 42, 200,12, WS_GROUP| WS_TABSTOP | WS_BORDER | ES_AUTOHSCROLL | ES_LEFT
+ PUSHBUTTON "&Terminate",IDB_QUIT, 0, 64, 40, 16, WS_TABSTOP
+ PUSHBUTTON "&Retry", IDB_RETRY, 0, 64, 40, 16, WS_TABSTOP
+ PUSHBUTTON "&Ignore", IDB_CONTINUE, 0, 64, 40, 16, WS_TABSTOP
+ PUSHBUTTON "OK", IDB_OKEDIT, 200, 64, 40, 16, WS_TABSTOP
+END
+
+/* removed for Daytona, as they are obsolete */
+/* EG_GATE_A20, "Extended Memory has not been configured."*/
+/* EG_BAD_COMMS_NAME, "The communications name is invalid."*/
+/* EG_BAD_CONF, "The configuration file entry shown below has an invalid value." */
+/* EG_DATE_BACK, "The date has been set backward. The VDM date may be incorrect." */
+/* EG_DATE_FWD, "The date has been set forward, or the system frozen for a period. The VDM date may be incorrect." */
+/* D_A_OLDPIF, "use an obsolete PIF format" */
+/* EG_EMM_CONFIG, "Your machine configuration will not support Expanded Memory." */
+
+STRINGTABLE
+ {
+
+ /* First, Base errors (range 0 - ) */
+ EG_BAD_OP, "The NTVDM CPU has encountered an illegal instruction."
+ EG_OWNUP, "Internal error in NTVDM procedure."
+ EG_NO_ROM_BASIC, "NTVDM does not support a ROM BASIC."
+ EG_EXPANDED_MEM_FAILURE, "Failure to allocate the requested number of Expanded Memory pages."
+ EG_CONT_RESET, "A continuous RESET state has been entered."
+ EG_NO_REZ_UPDATE, "The CMOS file cmos.ram could not be created."
+ EG_REZ_UPDATE, "The CMOS file cmos.ram could not be updated."
+ EG_MALLOC_FAILURE, "The memory resources needed by NTVDM could not be allocated."
+ EG_SYS_MISSING_FILE, "An installation file required by NTVDM is missing, execution must terminate."
+ EG_INSUF_MEMORY, "Insufficient memory resources."
+ EG_PIF_BAD_FORMAT, "PIF file not found or bad file format."
+ EG_PIF_STARTDIR_ERR, "Invalid startup directory, please check your pif file."
+ EG_PIF_STARTFILE_ERR,"Invalid program file name, please check your pif file."
+ EG_PIF_CMDLINE_ERR, "Command line too long."
+ EG_PIF_ASK_CMDLINE, "Please input parameters for the application:"
+ EG_ENVIRONMENT_ERR, "Error while setting up environment for the application."
+ EG_BAD_OP386, "The NTVDM CPU has encountered an unsupported 386 instruction."
+ EG_BAD_EMM_LINE, "The EMM command line in your config.nt contains invalid parameters or syntax errors."
+ EG_BAD_FAULT, "The NTVDM CPU has encountered an unhandled exception."
+ EG_DOS_PROG_EXTENSION,"\nThe file is not a valid MS-DOS program file.\n MS-DOS program files must end with the extension .EXE, .COM, or .BAT."
+ /* Direct Access panel strings */
+ D_A_MESS, "An application has attempted to %s, which cannot be supported. This may cause the application to function incorrectly."
+ D_A_FLOPPY, "directly access an incompatible diskette format"
+ D_A_HARDDISK, "directly access the hard disk"
+ D_A_DRIVER, "load a 16-bit Dos device driver"
+ D_A_ILLBOP, "perform an unknown internal 'BOP' opcode"
+ D_A_NOLIM, "allocate Expanded Memory"
+ D_A_MOUSEDRVR "use a third party mouse driver"
+
+ ED_WOWPROMPT, "Choose 'Close' to terminate the application."
+ ED_WOWTITLE, "16 bit Windows Subsystem"
+ ED_BADSYSFILE,"The system file is not suitable for running MS-DOS and Microsoft Windows applications."
+ ED_INITMEMERR, "Memory error during intialization."
+ ED_INITTMPFILE,"A temporary file needed for initialization could not be created or could not be written to. Make sure that the directory path exists, and disk space is available."
+ ED_INITFSCREEN, "The video device failed to initialize for fullscreen mode."
+ ED_MEMORYVDD, "Insufficient memory to load installable Virtual Device Drivers."
+ ED_REGVDD, "Virtual Device Driver format in the registry is invalid."
+ ED_LOADVDD, "An installable Virtual Device Driver failed Dll initialization."
+
+ ED_LOCKDRIVE, "Unable to lock for exclusive access. Another application may be using the drive. When the other application has finished using the drive you may retry the operation."
+ ED_DRIVENUM, "Drive %c: "
+
+
+ SM_HIDE_MOUSE, "&Hide Mouse Pointer"
+ SM_DISPLAY_MOUSE, "&Display Mouse Pointer"
+
+ IDS_BURRRR, " - FROZEN"
+
+ EXIT_NO_CLOSE, "Inactive "
+
+ /* Host Errors range (1000 - ??)*/
+ EHS_FUNC_FAILED, "Function failed"
+ EHS_SYSTEM_ERROR, "NTVDM has encountered a System Error"
+ EHS_UNSUPPORTED_BAUD, "Driver does not support selected Baud Rate"
+ EHS_ERR_OPENING_COM_PORT, "The system cannot open %s port requested by the application."
+ }
+
+#include <ntverp.h>
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT2_UNKNOWN
+#define VER_FILEDESCRIPTION_STR "NTVDM.EXE"
+#define VER_INTERNALNAME_STR "NTVDM.EXE\0"
+
+#include "common.ver"
diff --git a/private/mvdm/softpc.new/obj.vdm/sources b/private/mvdm/softpc.new/obj.vdm/sources
new file mode 100644
index 000000000..ea682d39a
--- /dev/null
+++ b/private/mvdm/softpc.new/obj.vdm/sources
@@ -0,0 +1,156 @@
+!IF 0
+
+Copyright (c) 1989 Microsoft Corporation
+
+Module Name:
+
+ sources.
+
+Abstract:
+
+ This file specifies the target component being built and the list of
+ sources files needed to build that component. Also specifies optional
+ compiler switches and libraries that are unique for the component being
+ built.
+
+
+Author:
+
+ Steve Wood (stevewo) 12-Apr-1990
+
+NOTE: Commented description of this file is in \nt\bak\bin\sources.tpl
+
+!ENDIF
+
+
+MAJORCOMP=spc
+MINORCOMP=ntvdm
+TARGETNAME=ntvdm
+
+
+EXEPROFILEINPUT=yes
+
+SOFTPC_TREE=$(BASEDIR)\private\mvdm\softpc.new
+
+INCLUDES=$(SOFTPC_TREE)\host\inc;$(SOFTPC_TREE)\base\inc
+
+!IF $(MIPS)
+GPSIZE=0
+!ENDIF
+
+TARGETPATH=$(BASEDIR)\public\sdk\lib
+TARGETTYPE=PROGLIB
+
+!if $(386)
+TARGETLIBS=\
+ $(BASEDIR)\public\sdk\lib\*\gdi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\user32p.lib \
+ $(BASEDIR)\public\sdk\lib\*\ntdll.lib \
+ $(BASEDIR)\public\sdk\lib\*\advapi32.lib
+!else
+TARGETLIBS=\
+ $(BASEDIR)\public\sdk\lib\*\binmode.obj \
+ $(BASEDIR)\public\sdk\lib\*\gdi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\user32p.lib \
+ $(BASEDIR)\public\sdk\lib\*\ntdll.lib \
+ $(BASEDIR)\public\sdk\lib\*\advapi32.lib
+!endif
+
+BACKGROUND_USE=1
+
+SYNCHRONIZE_DRAIN=1
+SYNCHRONIZE_BLOCK=1
+
+#
+# X86 needs LINKLIBS set for the fuzzymatch code in the linker.
+# MIPS and ALPHA need TARGETLIBS set so small.lib (CRTLIBS) will
+# come *after* these libraries but before libc.lib.
+#
+
+!if $(386)
+LINKLIBS = \
+ $(SOFTPC_TREE)\base\support\obj\*\MAIN.obj \
+ $(SOFTPC_TREE)\host\src\obj\*\FPRT.OBJ \
+ $(SOFTPC_TREE)\base\system\obj\*\SYSTEM.LIB \
+ $(SOFTPC_TREE)\base\bios\obj\*\BIOS.LIB \
+ $(SOFTPC_TREE)\base\video\obj\*\VIDEO.LIB \
+ $(SOFTPC_TREE)\base\dos\obj\*\DOS.LIB \
+ $(SOFTPC_TREE)\base\comms\obj\*\COMMS.LIB \
+ $(SOFTPC_TREE)\base\debug\obj\*\DEBUG.LIB \
+ $(SOFTPC_TREE)\base\support\obj\*\SUPPORT.LIB \
+ $(SOFTPC_TREE)\base\disks\obj\*\DISKS.LIB \
+ $(SOFTPC_TREE)\base\keymouse\obj\*\KEYMOUSE.LIB \
+ $(SOFTPC_TREE)\host\src\obj\*\SRC.LIB \
+ $(BASEDIR)\public\sdk\lib\*\monitor.lib \
+ $(BASEDIR)\public\sdk\lib\*\dem.lib \
+ $(BASEDIR)\public\sdk\lib\*\dbg.lib \
+ $(BASEDIR)\public\sdk\lib\*\command.lib \
+ $(BASEDIR)\public\sdk\lib\*\dpmi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\xms486.lib \
+ $(BASEDIR)\public\sdk\lib\*\suballoc.lib \
+ $(BASEDIR)\public\sdk\lib\*\oemuni.lib
+!else
+
+#
+# Pull these symbols in first.
+#
+
+LINKER_FLAGS=$(LINKER_FLAGS) -INCLUDE:__mb_cur_max -INCLUDE:_pctype
+
+LINKLIBS = \
+ $(SOFTPC_TREE)\base\support\obj\*\MAIN.obj \
+ $(SOFTPC_TREE)\host\src\obj\*\FPRT.OBJ \
+ $(SOFTPC_TREE)\host\src\obj\*\SRC.LIB \
+ $(SOFTPC_TREE)\base\system\obj\*\SYSTEM.LIB \
+ $(SOFTPC_TREE)\base\bios\obj\*\BIOS.LIB \
+ $(SOFTPC_TREE)\base\video\obj\*\VIDEO.LIB \
+ $(SOFTPC_TREE)\base\dos\obj\*\DOS.LIB \
+ $(SOFTPC_TREE)\base\comms\obj\*\COMMS.LIB \
+ $(SOFTPC_TREE)\base\debug\obj\*\DEBUG.LIB \
+ $(SOFTPC_TREE)\base\dasm386\obj\*\DASM386.LIB \
+ $(SOFTPC_TREE)\base\support\obj\*\SUPPORT.LIB \
+ $(SOFTPC_TREE)\base\disks\obj\*\DISKS.LIB \
+ $(SOFTPC_TREE)\base\keymouse\obj\*\KEYMOUSE.LIB \
+ $(CPULIBS) \
+ $(BASEDIR)\public\sdk\lib\*\dbg.lib \
+ $(BASEDIR)\public\sdk\lib\*\dem.lib \
+ $(BASEDIR)\public\sdk\lib\*\suballoc.lib \
+ $(BASEDIR)\public\sdk\lib\*\command.lib \
+ $(BASEDIR)\public\sdk\lib\*\dpmi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\xms486.lib \
+ $(BASEDIR)\public\sdk\lib\*\oemuni.lib
+!endif
+
+!if "$(NTDEBUG)" == ""
+PD = Pd
+!else
+PD = Pg
+!endif
+
+# Decide whether to use assembler or C CPU.
+
+!if "$(CCPU)" == ""
+CPULIBS=$(SOFTPC_TREE)\*\libs\a4$(PD).lib
+!else
+CPULIBS=$(SOFTPC_TREE)\obj.vdm\obj\*\ccpu486.lib
+!endif
+
+SOURCES=ntvdm.c \
+ resource.rc
+
+i386_SOURCES=
+MIPS_SOURCES=
+ALPHA_SOURCES=
+
+!INCLUDE CDEFINE.INC
+
+UMTYPE=console
+
+#
+# base at < 256 MB (0x10000000), so that softpc code buffer
+# in allocated Virtual Memory (bottom up) is within
+# near jump range to ntvdm's code.
+#
+UMBASE=0x0f000000
+
+DLLDEF=obj\*\ntvdm.def