From 8cdd69d75d0d1f2b820dc4fa0ebf8892ab70f03d Mon Sep 17 00:00:00 2001
From: sparky4 <sparky4@cock.li>
Date: Thu, 22 Sep 2016 11:20:42 -0500
Subject: [PATCH] 16_pm tweakings

---
 DEBUG.16W          |  20 +++----
 MMDUMP.16W         | Bin 66 -> 66 bytes
 makefile           |   3 +-
 src/exmmtest.c     |   5 +-
 src/lib/16_head.h  |  18 ++++++-
 src/lib/16_mm.c    |  62 ++++++++++++----------
 src/lib/16_mm.h    |   6 +--
 src/lib/16_pm.c    | 128 ++++++++++++++++++++++++++-------------------
 src/lib/typdefst.h |   3 +-
 9 files changed, 142 insertions(+), 103 deletions(-)

diff --git a/DEBUG.16W b/DEBUG.16W
index 443a5fd6..5fb5e282 100755
--- a/DEBUG.16W
+++ b/DEBUG.16W
@@ -1,12 +1,12 @@
-Seg:0	Size:10392	Owner:0x7cfc
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0
-Seg:2898	Size:256	Owner:0x638e
-+++++
-Seg:2998	Size:401	Owner:0xa41a
-++++++
-Seg:2e11	Size:36	Owner:0x0
-+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-Seg:be35	Size:8651	Owner:0x0
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Seg:0	Size:8568	Owner:0xfe7e
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0
+Seg:2178	Size:256	Owner:0x5434
+++++
+Seg:2278	Size:17	Owner:0x9480
++
+Seg:27ec	Size:44	Owner:0x0
+++0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Seg:b818	Size:10216	Owner:0x0
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 Seg:e000	Size:8191	Owner:0x0
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\ No newline at end of file
diff --git a/MMDUMP.16W b/MMDUMP.16W
index 300e3279762e6d5eb41f81bd1adea17b2d92d237..4bf1c809f6d6b2988d2b2f86a1bfb477c54c02e3 100755
GIT binary patch
literal 66
zcmXr0FfcGmu`)F=Hc`;fWzbZxRWRV?GJuF$nphYBMFo*WO_HtBQq5C=q7_h40KNAO
AMF0Q*

literal 66
zcmXr0FfcGmu`)BZNLA3#WzbZxRWRV?G60I2BwLv$rzHbLXCR3J)h3!4CIUq#LPY`U
CXbx!r

diff --git a/makefile b/makefile
index 2496bbd8..e8aa09fc 100755
--- a/makefile
+++ b/makefile
@@ -106,9 +106,8 @@ LIBFLAGS=$(WLIBQ) -b -n
 # objects
 #
 VGMSNDOBJ = vgmSnd.$(OBJ) 16_snd.$(OBJ)
-COREOBJS = 16_mm.$(OBJ) 16_pm.$(OBJ) 16_ca.$(OBJ) 16_lib.$(OBJ) 16_in.$(OBJ) 16_head.$(OBJ) 16_dbg.$(OBJ) kitten.$(OBJ) 16_hc.$(OBJ)
 GFXLIBOBJS = modex16.$(OBJ) bitmap.$(OBJ) 16text.$(OBJ) bakapee.$(OBJ) scroll16.$(OBJ) 16render.$(OBJ) 16_vrs.$(OBJ) 16_sprit.$(OBJ)
-16LIBOBJS = $(COREOBJS) wcpu.$(OBJ) 16_timer.$(OBJ)
+16LIBOBJS = 16_mm.$(OBJ) 16_pm.$(OBJ) 16_ca.$(OBJ) 16_lib.$(OBJ) 16_in.$(OBJ) 16_head.$(OBJ) 16_dbg.$(OBJ) kitten.$(OBJ) 16_hc.$(OBJ) wcpu.$(OBJ) 16_timer.$(OBJ)
 #16planar.$(OBJ) planar.$(OBJ)
 DOSLIBOBJ = adlib.$(OBJ) 8254.$(OBJ) 8259.$(OBJ) dos.$(OBJ) cpu.$(OBJ)
 !ifeq DEBUGSERIAL 1
diff --git a/src/exmmtest.c b/src/exmmtest.c
index 046380ce..bddf4a09 100755
--- a/src/exmmtest.c
+++ b/src/exmmtest.c
@@ -95,11 +95,10 @@ main(int argc, char *argv[])
 		bakapee1 = "data/koishi~.pcx";
 		bakapee2 = "data/test.map";
 	}
-//	printf("main()=%Fp	start MM\n", *argv[0]);
+	//printf("main()=%Fp	start MM\n", *argv[0]);
 	MM_Startup(&gvar);
 	PM_Startup(&gvar);
-	PM_UnlockMainMem(&gvar);
-	//PM_LockMainMem(&gvar);
+	//PM_UnlockMainMem(&gvar);
 	CA_Startup(&gvar);
 //	printf("		done!\n");
 	PRINTBB;
diff --git a/src/lib/16_head.h b/src/lib/16_head.h
index baa983e8..b3423ed0 100755
--- a/src/lib/16_head.h
+++ b/src/lib/16_head.h
@@ -160,7 +160,23 @@ extern	int			profilehandle,debughandle;	//make it into game global
 #endif
 #ifdef __WATCOMC__
 #define _FCORELEFT 0x90000UL+16UL
-extern union REGS CPURegs;
+static union REGS CPURegs;
+
+#define _AX CPURegs.x.ax
+#define _BX CPURegs.x.bx
+#define _CX CPURegs.x.cx
+#define _DX CPURegs.x.dx
+
+#define _SI CPURegs.x.si
+
+#define _AH CPURegs.h.ah
+#define _AL CPURegs.h.al
+#define _BH CPURegs.h.bh
+#define _BL CPURegs.h.bl
+#define _CH CPURegs.h.ch
+#define _CL CPURegs.h.cl
+#define _DH CPURegs.h.dh
+#define _DL CPURegs.h.dl
 
 #define geninterrupt(n) int86(n,&CPURegs,&CPURegs);
 #define peekb(segm,ofs) (*(byte far*)MK_FP((segm),(ofs)))
diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c
index 9eb93c67..9333d380 100755
--- a/src/lib/16_mm.c
+++ b/src/lib/16_mm.c
@@ -157,8 +157,8 @@ byte MML_SetupEMS(global_game_variables_t *gvar)
 
 	unsigned int EMSVer = 0;
 	//byte	EMS_status;
-	unsigned	totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle;
-	totalEMSpages = freeEMSpages = EMSpageframe = EMSpagesmapped = 0;
+	unsigned	totalEMSpages,freeEMSpages,EMSPageFrame,EMSpagesmapped,EMSHandle;
+	totalEMSpages = freeEMSpages = EMSPageFrame = EMSpagesmapped = 0;
 
 	__asm {
 		mov	ah,EMS_STATUS
@@ -179,7 +179,7 @@ byte MML_SetupEMS(global_game_variables_t *gvar)
 		int	EMS_INT						// find the page frame address
 		or	ah,ah
 		jnz	error
-		mov	[EMSpageframe],bx
+		mov	[EMSPageFrame],bx
 
 		mov	ah,EMS_GETPAGES
 		int	EMS_INT						// find out how much EMS is there
@@ -218,7 +218,7 @@ byte MML_SetupEMS(global_game_variables_t *gvar)
 		int	EMS_INT
 		or	ah,ah
 		jnz	error
-		mov	[EMShandle],dx
+		mov	[EMSHandle],dx
 		jmp End
 #ifdef __BORLANDC__
 	}
@@ -245,12 +245,12 @@ End:
 		printf("%s\n",str);
 		return err;
 	}
-	gvar->mm.totalEMSpages=totalEMSpages;
-	gvar->mm.freeEMSpages=freeEMSpages;
-	gvar->mm.EMSpageframe=EMSpageframe;
-	gvar->mm.EMSpagesmapped=EMSpagesmapped;
-	gvar->mm.EMShandle=EMShandle;
-	gvar->mm.EMSVer=EMSVer;
+	gvar->pm.emm.totalEMSpages=totalEMSpages;
+	gvar->pm.emm.freeEMSpages=freeEMSpages;
+	gvar->pm.emm.EMSPageFrame=EMSPageFrame;
+	gvar->pm.emm.EMSpagesmapped=EMSpagesmapped;
+	gvar->pm.emm.EMSHandle=EMSHandle;
+	gvar->pm.emm.EMSVer=EMSVer;
 	return 0;
 }
 
@@ -266,13 +266,13 @@ End:
 void MML_ShutdownEMS(global_game_variables_t *gvar)
 {
 	boolean errorflag=false;
-	unsigned EMShandle=gvar->mm.EMShandle;
+	unsigned EMSHandle=gvar->pm.emm.EMSHandle;
 
-	if(!EMShandle)
+	if(!EMSHandle)
 		return;
 	__asm {
 		mov	ah,EMS_FREEPAGES
-		mov	dx,[EMShandle]
+		mov	dx,[EMSHandle]
 		int	EMS_INT
 		or	ah,ah
 		jz	ok
@@ -303,11 +303,11 @@ void MML_ShutdownEMS(global_game_variables_t *gvar)
 byte MM_MapEMS(global_game_variables_t *gvar)
 {
 	byte	str[160];
-	unsigned	EMShandle;
+	unsigned	EMSHandle;
 	byte err;
 	boolean	errorflag=false;
 	int	i;
-	EMShandle=gvar->mm.EMShandle;
+	EMSHandle=gvar->pm.emm.EMSHandle;
 
 	for (i=0;i<4/*MAPPAGES*/;i++)
 	{
@@ -315,7 +315,7 @@ byte MM_MapEMS(global_game_variables_t *gvar)
 			mov	ah,EMS_MAPPAGE
 			mov	bx,[i]			// logical page
 			mov	al,bl			// physical page
-			mov	dx,[EMShandle]	// handle
+			mov	dx,[EMSHandle]	// handle
 			int	EMS_INT
 			or	ah,ah
 			jnz	error
@@ -375,12 +375,12 @@ byte MM_MapXEMS(global_game_variables_t *gvar)
 //END SUB
 	byte	str[160];
 	byte err;
-	word	EMShandle;
+	word	EMSHandle;
 	boolean	errorflag=false;
 	int	i;
-	EMShandle=gvar->mm.EMShandle;
+	EMSHandle=gvar->pm.emm.EMSHandle;
 
-	if(gvar->mm.EMSVer<0x40)
+	if(gvar->pm.emm.EMSVer<0x40)
 		return 5;
 
 	for (i=0;i<MAPPAGES;i++)
@@ -389,7 +389,7 @@ byte MM_MapXEMS(global_game_variables_t *gvar)
 			mov	ah,EMS_MAPXPAGE
 			mov	cx,[i]			// logical page
 			mov	al,bl			// physical page
-			mov	dx,[EMShandle]	// handle
+			mov	dx,[EMSHandle]	// handle
 			int	EMS_INT
 			or	ah,ah
 			jnz	error
@@ -864,7 +864,7 @@ void MM_Startup(global_game_variables_t *gvar)
 	{
 		MML_SetupEMS(gvar);					// allocate space
 		//TODO: EMS4! AND EMS 3.2 MASSIVE DATA HANDLMENT!
-		MML_UseSpace(gvar->mm.EMSpageframe,(MAPPAGES)*0x4000lu, gvar);
+		MML_UseSpace(gvar->pm.emm.EMSPageFrame,(MAPPAGES)*0x4000lu, gvar);
 		//if(gvar->pm.emm.EMSVer<0x40)
 			MM_MapEMS(gvar);					// map in used pages
 		//else
@@ -964,9 +964,10 @@ void MM_GetPtr (memptr *baseptr, dword size, global_game_variables_t *gvar)
 	gvar->mm.mmnew->useptr = baseptr;
 	//if(gvar->mm.mmnew->useptr==NULL){
 #ifdef __DEBUG__
-		printf("baseptr=%04x	", baseptr); printf("useptr=%04x\n", gvar->mm.mmnew->useptr);
-		printf("*baseptr=%04x	", *baseptr); printf("*useptr=%04x\n", *(gvar->mm.mmnew->useptr));
-		printf("*baseptr=%Fp	", *baseptr); printf("*useptr=%Fp\n", *(gvar->mm.mmnew->useptr));
+		printf("	MM_GetPtr\n");
+		printf("		baseptr=%04x	", baseptr); printf("useptr=%04x\n", gvar->mm.mmnew->useptr);
+		printf("		*baseptr=%04x	", *baseptr); printf("*useptr=%04x\n", *(gvar->mm.mmnew->useptr));
+		printf("		*baseptr=%Fp	", *baseptr); printf("*useptr=%Fp\n", *(gvar->mm.mmnew->useptr));
 #endif
 	//exit(-5); }
 	gvar->mm.mmnew->attributes = BASEATTRIBUTES;
@@ -1124,8 +1125,11 @@ void MM_SetPurge(memptr *baseptr, int purge, global_game_variables_t *gvar)
 			gvar->mm.mmrover = gvar->mm.mmhead;
 		else if(gvar->mm.mmrover == start)
 		{
-			Quit("MM_SetPurge: Block not found!");
-			//return;
+			//Quit("MM_SetPurge: Block not found!");
+			printf("%Fp	%u\n", start->start, start->length);
+			printf("MM_SetPurge: Block not found!\n");
+			exit(1);
+			return;
 		}
 
 	} while(1);
@@ -1605,9 +1609,9 @@ void MM_Report_(global_game_variables_t *gvar)
 	if(MML_CheckForEMS())
 	{
 		printf("	LIMEMS\n");
-		printf("		EMM v%x.%x available\n", gvar->mm.EMSVer>>4,gvar->mm.EMSVer&0x0F);
-		printf("		totalEMSpages:	%u	", gvar->mm.totalEMSpages); printf("freeEMSpages:	%u\n", gvar->mm.freeEMSpages);
-		printf("		EMSpageframe:	%x\n", gvar->mm.EMSpageframe);
+		printf("		EMM v%x.%x available\n", gvar->pm.emm.EMSVer>>4,gvar->pm.emm.EMSVer&0x0F);
+		printf("		totalEMSpages:	%u	", gvar->pm.emm.totalEMSpages); printf("freeEMSpages:	%u\n", gvar->pm.emm.freeEMSpages);
+		printf("		EMSPageFrame:	%x\n", gvar->pm.emm.EMSPageFrame);
 	}
 	if(MML_CheckForXMS(gvar))
 	{
diff --git a/src/lib/16_mm.h b/src/lib/16_mm.h
index 7995bf23..206a3c8b 100755
--- a/src/lib/16_mm.h
+++ b/src/lib/16_mm.h
@@ -26,9 +26,9 @@
 #include "src/lib/16_head.h"
 #include "src/lib/16_hc.h"
 #include "src/lib/16_lib.h"
-//#include "src/lib/modex16.h"
 //++++mh	#include "src/lib/16_in.h"
 
+
 #ifdef __DEBUG__		// 1 == Debug/Dev  ;  0 == Production/final
 #define OUT_OF_MEM_MSG	"MM_GetPtr: Out of memory!\nYou were short :%lu bytes\n"
 #else
@@ -205,12 +205,12 @@ void MM_FreePtr(memptr *baseptr, global_game_variables_t *gvar);
 void MM_SetPurge(memptr *baseptr, int purge, global_game_variables_t *gvar);
 void MM_SetLock(memptr *baseptr, boolean locked, global_game_variables_t *gvar);
 void MM_SortMem(global_game_variables_t *gvar);
-void MM_ShowMemory(global_game_variables_t *gvar);//,/*page_t *page, */mminfo_t *mm);
+void MM_ShowMemory(global_game_variables_t *gvar);
 void MM_DumpData(global_game_variables_t *gvar);
 dword MM_UnusedMemory(global_game_variables_t *gvar);
 dword MM_TotalFree(global_game_variables_t *gvar);
 void MM_Report_(global_game_variables_t *gvar);
-static void MM_EMSerr(byte *stri, byte err);
+/*static */void MM_EMSerr(byte *stri, byte err);
 void MM_BombOnError(boolean bomb, global_game_variables_t *gvar);
 //void MM_GetNewBlock(mminfo_t *mm);
 //void MM_FreeBlock(mmblocktype *x, mminfo_t *mm);
diff --git a/src/lib/16_pm.c b/src/lib/16_pm.c
index 97401951..8ebf0ec0 100755
--- a/src/lib/16_pm.c
+++ b/src/lib/16_pm.c
@@ -28,7 +28,7 @@
 
 #include "src/lib/16_pm.h"
 #pragma hdrstop
-union REGS CPURegs;
+
 /*
 //	Main Mem specific variables
 	boolean			MainPresent;
@@ -77,23 +77,50 @@ static	char		*ParmStrings[] = {"nomain","noems","noxms",nil};
 //
 //	PML_MapEMS() - Maps a logical page to a physical page
 //
-void
-PML_MapEMS(word logical, word physical, global_game_variables_t *gvar)
+byte
+PML_MapEMS(word logical, byte physical, global_game_variables_t *gvar)
 {
-	union REGS CPURegs;
-	CPURegs.h.al = physical;
-	CPURegs.x.bx = logical;
-	CPURegs.x.dx = gvar->pm.emm.EMSHandle;
-	CPURegs.h.ah = EMS_MAPPAGE;
+	byte	str[160];
+	unsigned	EMShandle;
+	byte err;
+	boolean	errorflag=false;
+	int	i;
+	EMShandle=gvar->pm.emm.EMSHandle;
+
 	__asm {
+		mov	ah,EMS_MAPPAGE
+		mov	al,physical
+		mov	bx,logical
+		mov	dx,EMShandle
 		int	EMS_INT
+		or	ah,ah
+		jnz	error
+		jmp End
+#ifdef __BORLANDC__
 	}
-
-	if(CPURegs.h.ah)
+#endif
+		error:
+#ifdef __BORLANDC__
+	__asm {
+#endif
+		mov	err,ah
+		mov	errorflag,1
+#ifdef __BORLANDC__
+	}
+#endif
+		End:
+#ifdef __WATCOMC__
+	}
+#endif
+	if(errorflag==true)
 	{
+		strcpy(str,"MM_MapEMS: EMS error ");
+		MM_EMSerr(str, err);
+		printf("%s\n",str);
 		Quit("PML_MapEMS: Page mapping failed\n");
-		return;
+		return err;
 	}
+	return 0;
 }
 
 //
@@ -111,7 +138,6 @@ boolean
 PML_StartupEMS(global_game_variables_t *gvar)
 {
 	boolean emmcfems;
-	union REGS CPURegs;
 
 	int		i;
 	long	size;
@@ -121,8 +147,8 @@ PML_StartupEMS(global_game_variables_t *gvar)
 	emmcfems=0;
 
 	__asm {
-	//CPURegs.x.dx = (word)EMMDriverName;
-	//CPURegs.x.ax = 0x3d00;
+	//_DX = (word)EMMDriverName;
+	//_AX = 0x3d00;
 	//geninterrupt(0x21);			// try to open EMMXXXX0 device
 		mov	dx,OFFSET EMMDriverName
 		mov	ax,0x3d00
@@ -139,8 +165,8 @@ gothandle:
 #ifdef __BORLANDC__
 	__asm {
 #endif
-	//CPURegs.x.bx = CPURegs.x.ax;
-	//CPURegs.x.ax = 0x4400;
+	//_BX = _AX;
+	//_AX = 0x4400;
 	//geninterrupt(0x21);			// get device info
 		mov	bx,ax
 		mov	ax,0x4400
@@ -159,43 +185,43 @@ gotinfo:
 #endif
 	if(emmcfems!=0) goto error;
 	__asm and	dx,0x80
-	if (!CPURegs.x.dx)
+	if (!_DX)
 		goto error;
 
-	CPURegs.x.ax = 0x4407;
+	_AX = 0x4407;
 	geninterrupt(0x21);			// get status
 	__asm mov	emmcfems,1
 	if(emmcfems!=0) goto error;
 
-	if (!CPURegs.h.al)
+	if (!_AL)
 		goto error;
 
-	CPURegs.h.ah = 0x3e;
+	_AH = 0x3e;
 	geninterrupt(0x21);			// close handle
 
-	CPURegs.h.ah = EMS_STATUS;
+	_AH = EMS_STATUS;
 	geninterrupt(EMS_INT);
-	if (CPURegs.h.ah)
+	if (_AH)
 		goto error;				// make sure EMS hardware is present
 
-	CPURegs.h.ah = EMS_VERSION;
+	_AH = EMS_VERSION;
 	geninterrupt(EMS_INT);
-	if (CPURegs.h.ah || (CPURegs.h.al < 0x32))	// only work on EMS 3.2 or greater (silly, but...)
+	if (_AH || (_AL < 0x32))	// only work on EMS 3.2 or greater (silly, but...)
 		goto error;
 
-	CPURegs.h.ah = EMS_GETFRAME;
+	_AH = EMS_GETFRAME;
 	geninterrupt(EMS_INT);
-	if (CPURegs.h.ah)
+	if (_AH)
 		goto error;				// find the page frame address
-	gvar->pm.emm.EMSPageFrame = CPURegs.x.bx;
+	gvar->pm.emm.EMSPageFrame = _BX;
 
-	CPURegs.h.ah = EMS_GETPAGES;
+	_AH = EMS_GETPAGES;
 	geninterrupt(EMS_INT);
-	if (CPURegs.h.ah)
+	if (_AH)
 		goto error;
-	if (CPURegs.x.bx < 2)
+	if (_BX < 2)
 		goto error;         	// Require at least 2 pages (32k)
-	gvar->pm.emm.EMSAvail = CPURegs.x.bx;
+	gvar->pm.emm.EMSAvail = _BX;
 
 	// Don't hog all available EMS
 	size = gvar->pm.emm.EMSAvail * (long)EMSPageSize;
@@ -205,12 +231,12 @@ gotinfo:
 		gvar->pm.emm.EMSAvail = size / EMSPageSize;
 	}
 
-	CPURegs.h.ah = EMS_ALLOCPAGES;
-	CPURegs.x.bx = gvar->pm.emm.EMSAvail;
+	_AH = EMS_ALLOCPAGES;
+	_BX = gvar->pm.emm.EMSAvail;
 	geninterrupt(EMS_INT);
-	if (CPURegs.h.ah)
+	if (_AH)
 		goto error;
-	gvar->pm.emm.EMSHandle = CPURegs.x.dx;
+	gvar->pm.emm.EMSHandle = _DX;
 
 	gvar->mmi.EMSmem += gvar->pm.emm.EMSAvail * (long)EMSPageSize;
 
@@ -230,14 +256,12 @@ error:
 void
 PML_ShutdownEMS(global_game_variables_t *gvar)
 {
-	union REGS CPURegs;
-
 	if (gvar->pm.emm.EMSPresent)
 	{
-			CPURegs.h.ah=EMS_FREEPAGES;
-			CPURegs.x.ax=gvar->pm.emm.EMSHandle;
+			_AH=EMS_FREEPAGES;
+			_AX=gvar->pm.emm.EMSHandle;
 			geninterrupt(EMS_INT);
-		if (CPURegs.h.ah)
+		if (_AH)
 		{
 			Quit("PML_ShutdownEMS: Error freeing EMS\n");
 			//return;
@@ -260,15 +284,13 @@ PML_ShutdownEMS(global_game_variables_t *gvar)
 boolean
 PML_StartupXMS(global_game_variables_t *gvar)
 {
-	union REGS CPURegs;
-
 	XMSD;
 	gvar->pm.xmm.XMSPresent = false;					// Assume failure
 	gvar->pm.xmm.XMSAvail = 0;
 
-	CPURegs.x.ax=0x4300;
+	_AX=0x4300;
 	geninterrupt(XMS_INT);         				// Check for presence of XMS driver
-	if (CPURegs.h.al != 0x80)
+	if (_AL != 0x80)
 		goto error;
 
 
@@ -280,19 +302,19 @@ PML_StartupXMS(global_game_variables_t *gvar)
 	}
 
 	XMS_CALL(XMS_QUERYFREE, gvar);			// Find out how much XMS is available
-	gvar->pm.xmm.XMSAvail = CPURegs.x.ax;
-	if (!CPURegs.x.ax)				// AJR: bugfix 10/8/92
+	gvar->pm.xmm.XMSAvail = _AX;
+	if (!_AX)				// AJR: bugfix 10/8/92
 		goto error;
 
 	gvar->pm.xmm.XMSAvail &= ~(PMPageSizeKB - 1);	// Round off to nearest page size
 	if (gvar->pm.xmm.XMSAvail < (PMPageSizeKB * 2))	// Need at least 2 pages
 		goto error;
 
-	CPURegs.x.dx = gvar->pm.xmm.XMSAvail;
+	_DX = gvar->pm.xmm.XMSAvail;
 	XMS_CALL(XMS_ALLOC, gvar);				// And do the allocation
-	gvar->pm.xmm.XMSHandle = CPURegs.x.dx;
+	gvar->pm.xmm.XMSHandle = _DX;
 
-	if (!CPURegs.x.ax)				// AJR: bugfix 10/8/92
+	if (!_AX)				// AJR: bugfix 10/8/92
 	{
 		gvar->pm.xmm.XMSAvail = 0;
 		goto error;
@@ -340,12 +362,12 @@ PML_XMSCopy(boolean toxms,byte far *addr,word xmspage,word length, global_game_v
 	__asm {
 		push si
 	}
-	CPURegs.x.si = (word)&copy;
+	_SI = (word)&copy;
 	XMS_CALL(XMS_MOVE, gvar);
 	__asm {
 		pop	si
 	}
-	if (!CPURegs.x.ax)
+	if (!_AX)
 	{
 		Quit("PML_XMSCopy: Error on copy");
 		//return;
@@ -386,9 +408,9 @@ PML_ShutdownXMS(global_game_variables_t *gvar)
 	XMSD;
 	if (gvar->pm.xmm.XMSPresent)
 	{
-		CPURegs.x.dx = gvar->pm.xmm.XMSHandle;
+		_DX = gvar->pm.xmm.XMSHandle;
 		XMS_CALL(XMS_FREE, gvar);
-		if (CPURegs.h.bl)
+		if (_BL)
 		{
 			Quit("PML_ShutdownXMS: Error freeing XMS");
 			//return;
diff --git a/src/lib/typdefst.h b/src/lib/typdefst.h
index 5aa4c8c3..4d031f9e 100755
--- a/src/lib/typdefst.h
+++ b/src/lib/typdefst.h
@@ -170,8 +170,6 @@ typedef struct
 	void __near	*nearheap;
 #endif
 	//byte		EMS_status;
-	unsigned	totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle;//TODO: PM use
-	unsigned int EMSVer;
 	word numUMBs,UMBbase[MAXUMBS];
 	//dword	numUMBs,UMBbase[MAXUMBS];
 	//huge mmblocktype	huge mmblocks[MAXBLOCKS],huge *mmhead,huge *mmfree,huge *mmrover,huge *mmnew;
@@ -248,6 +246,7 @@ typedef struct
 	boolean			EMSPresent;
 	word			EMSAvail,EMSPagesAvail,EMSHandle,
 					EMSPageFrame,EMSPhysicalPage, EMSVer;
+	word			totalEMSpages, freeEMSpages, EMSpagesmapped;
 	EMSListStruct	EMSList[EMSFrameCount];
 } pm_emmi_t;
 
-- 
2.39.5