\r
#include "src/lib/16_pm.h"\r
#pragma hdrstop\r
-\r
+/*\r
// Main Mem specific variables\r
boolean MainPresent;\r
memptr MainMemPages[PMMaxMainMem];\r
// XMS specific variables\r
boolean XMSPresent;\r
word XMSAvail,XMSPagesAvail,XMSHandle;\r
- longword XMSDriver;\r
+ dword XMSDriver;\r
int XMSProtectPage = -1;\r
\r
// File specific variables\r
long PMFrameCount;\r
PageListStruct far *PMPages,\r
_seg *PMSegPages;\r
-\r
+*/\r
static char *ParmStrings[] = {"nomain","noems","noxms",nil};\r
\r
/////////////////////////////////////////////////////////////////////////////\r
//\r
void\r
PML_MapEMS(word logical,word physical)\r
-{
+{\r
union REGS CPURegs;\r
CPURegs.h.al = physical;\r
CPURegs.x.bx = logical;\r
CPURegs.x.dx = EMSHandle;\r
CPURegs.h.ah = EMS_MAPPAGE;\r
- __asm
- {
- int EMS_INT
+ __asm\r
+ {\r
+ int EMS_INT\r
}\r
\r
if(CPURegs.h.ah)\r
- printf("PML_MapEMS: Page mapping failed\n");\r
+ {\r
+ Quit("PML_MapEMS: Page mapping failed\n");\r
+ return;\r
+ }\r
}\r
\r
//\r
boolean\r
PML_StartupEMS(void)\r
{\r
+ union REGS CPURegs;\r
int i;\r
long size;\r
\r
EMSPresent = false; // Assume that we'll fail\r
EMSAvail = 0;\r
\r
- _DX = (word)EMMDriverName;\r
- _AX = 0x3d00;\r
+ CPURegs.x.dx = (word)EMMDriverName;\r
+ CPURegs.x.ax = 0x3d00;\r
geninterrupt(0x21); // try to open EMMXXXX0 device\r
asm jnc gothandle\r
goto error;\r
\r
gothandle:\r
- _BX = _AX;\r
- _AX = 0x4400;\r
+ CPURegs.x.bx = CPURegs.x.ax;\r
+ CPURegs.x.ax = 0x4400;\r
geninterrupt(0x21); // get device info\r
asm jnc gotinfo;\r
goto error;\r
\r
gotinfo:\r
asm and dx,0x80\r
- if (!_DX)\r
+ if (!CPURegs.x.dx)\r
goto error;\r
\r
- _AX = 0x4407;\r
+ CPURegs.x.ax = 0x4407;\r
geninterrupt(0x21); // get status\r
asm jc error\r
- if (!_AL)\r
+ if (!CPURegs.l.al)\r
goto error;\r
\r
- _AH = 0x3e;\r
+ CPURegs.h.ah = 0x3e;\r
geninterrupt(0x21); // close handle\r
\r
- _AH = EMS_STATUS;\r
+ CPURegs.h.ah = EMS_STATUS;\r
geninterrupt(EMS_INT);\r
- if (_AH)\r
+ if (CPURegs.h.ah)\r
goto error; // make sure EMS hardware is present\r
\r
- _AH = EMS_VERSION;\r
+ CPURegs.h.ah = EMS_VERSION;\r
geninterrupt(EMS_INT);\r
- if (_AH || (_AL < 0x32)) // only work on EMS 3.2 or greater (silly, but...)\r
+ if (CPURegs.h.ah || (CPURegs.l.al < 0x32)) // only work on EMS 3.2 or greater (silly, but...)\r
goto error;\r
\r
- _AH = EMS_GETFRAME;\r
+ CPURegs.h.ah = EMS_GETFRAME;\r
geninterrupt(EMS_INT);\r
- if (_AH)\r
+ if (CPURegs.h.ah)\r
goto error; // find the page frame address\r
- EMSPageFrame = _BX;\r
+ EMSPageFrame = CPURegs.x.bx;\r
\r
- _AH = EMS_GETPAGES;\r
+ CPURegs.h.ah = EMS_GETPAGES;\r
geninterrupt(EMS_INT);\r
- if (_AH)\r
+ if (CPURegs.h.ah)\r
goto error;\r
- if (_BX < 2)\r
+ if (CPURegs.x.bx < 2)\r
goto error; // Require at least 2 pages (32k)\r
- EMSAvail = _BX;\r
+ EMSAvail = CPURegs.x.bx;\r
\r
// Don't hog all available EMS\r
size = EMSAvail * (long)EMSPageSize;\r
EMSAvail = size / EMSPageSize;\r
}\r
\r
- _AH = EMS_ALLOCPAGES;\r
- _BX = EMSAvail;\r
+ CPURegs.h.ah = EMSCPURegs.l.alLOCPAGES;\r
+ CPURegs.x.bx = EMSAvail;\r
geninterrupt(EMS_INT);\r
- if (_AH)\r
+ if (CPURegs.h.ah)\r
goto error;\r
- EMSHandle = _DX;\r
+ EMSHandle = CPURegs.x.dx;\r
\r
mminfo.EMSmem += EMSAvail * (long)EMSPageSize;\r
\r
{\r
if (EMSPresent)\r
{\r
- asm mov ah,EMS_FREEPAGES\r
- asm mov dx,[EMSHandle]\r
- asm int EMS_INT\r
- if (_AH)\r
- printf("PML_ShutdownEMS: Error freeing EMS\n");\r
+ __asm {\r
+ mov ah,EMS_FREEPAGES\r
+ mov dx,[EMSHandle]\r
+ int EMS_INT\r
+ }\r
+ if (CPURegs.h.ah)\r
+ {\r
+ Quit("PML_ShutdownEMS: Error freeing EMS\n");\r
+ //return;\r
+ }\r
}\r
}\r
\r
\r
asm mov ax,0x4300\r
asm int XMS_INT // Check for presence of XMS driver\r
- if (_AL != 0x80)\r
+ if (CPURegs.l.al != 0x80)\r
goto error;\r
\r
\r
asm mov [WORD PTR XMSDriver+2],es // function pointer to XMS driver\r
\r
XMS_CALL(XMS_QUERYFREE); // Find out how much XMS is available\r
- XMSAvail = _AX;\r
- if (!_AX) // AJR: bugfix 10/8/92\r
+ XMSAvail = CPURegs.x.ax;\r
+ if (!CPURegs.x.ax) // AJR: bugfix 10/8/92\r
goto error;\r
\r
XMSAvail &= ~(PMPageSizeKB - 1); // Round off to nearest page size\r
if (XMSAvail < (PMPageSizeKB * 2)) // Need at least 2 pages\r
goto error;\r
\r
- _DX = XMSAvail;\r
- XMS_CALL(XMS_ALLOC); // And do the allocation\r
- XMSHandle = _DX;\r
+ CPURegs.x.dx = XMSAvail;\r
+ XMS_CALL(XMSCPURegs.l.alLOC); // And do the allocation\r
+ XMSHandle = CPURegs.x.dx;\r
\r
- if (!_AX) // AJR: bugfix 10/8/92\r
+ if (!CPURegs.x.ax) // AJR: bugfix 10/8/92\r
{\r
XMSAvail = 0;\r
goto error;\r
dword xoffset;\r
struct\r
{\r
- longword length;\r
+ dword length;\r
word source_handle;\r
- longword source_offset;\r
+ dword source_offset;\r
word target_handle;\r
- longword target_offset;\r
+ dword target_offset;\r
} copy;\r
\r
if (!addr)\r
- printf("PML_XMSCopy: zero address\n");\r
+ {\r
+ Quit("PML_XMSCopy: zero address\n");\r
+ //return;\r
+ }\r
\r
- xoffset = (longword)xmspage * PMPageSize;\r
+ xoffset = (dword)xmspage * PMPageSize;\r
\r
copy.length = (length + 1) & ~1;\r
copy.source_handle = toxms? 0 : XMSHandle;\r
copy.target_offset = toxms? xoffset : (long)addr;\r
\r
asm push si\r
- _SI = (word)©\r
+ CPURegs.i.si = (word)©\r
XMS_CALL(XMS_MOVE);\r
asm pop si\r
- if (!_AX)\r
+ if (!CPURegs.x.ax)\r
+ {\r
Quit("PML_XMSCopy: Error on copy");\r
+ //return;\r
+ }\r
}\r
\r
#if 1\r
{\r
if (XMSPresent)\r
{\r
- _DX = XMSHandle;\r
+ CPURegs.x.dx = XMSHandle;\r
XMS_CALL(XMS_FREE);\r
- if (_BL)\r
+ if (CPURegs.l.bl)\r
+ {\r
Quit("PML_ShutdownXMS: Error freeing XMS");\r
+ //return;\r
+ }\r
}\r
}\r
\r
if (mmerror)\r
mmerror = false;\r
if (MainPagesAvail < PMMinMainMem)\r
+ {\r
Quit("PM_SetupMainMem: Not enough main memory");\r
+ //return;\r
+ }\r
MainPresent = true;\r
}\r
\r
PML_ReadFromFile(byte far *buf,long offset,word length)\r
{\r
if (!buf)\r
+ {\r
Quit("PML_ReadFromFile: Null pointer");\r
+ //return;\r
+ }\r
if (!offset)\r
+ {\r
Quit("PML_ReadFromFile: Zero offset");\r
+ //return;\r
+ }\r
if (lseek(PageFile,offset,SEEK_SET) != offset)\r
+ {\r
Quit("PML_ReadFromFile: Seek failed");\r
+ //return;\r
+ }\r
if (!CA_FarRead(PageFile,buf,length))\r
Quit("PML_ReadFromFile: Read failed");\r
+ //return;\r
+ }\r
}\r
\r
//\r
{\r
int i;\r
long size;\r
- void _seg *buf;\r
- longword far *offsetptr;\r
+ __SEGA *buf;\r
+ dword far *offsetptr;\r
word far *lengthptr;\r
PageListStruct far *page;\r
\r
PageFile = open(PageFileName,O_RDONLY + O_BINARY);\r
if (PageFile == -1)\r
+ {\r
Quit("PML_OpenPageFile: Unable to open page file");\r
+ //return;\r
+ }\r
\r
// Read in header variables\r
read(PageFile,&ChunksInFile,sizeof(ChunksInFile));\r
_fmemset(PMPages,0,sizeof(PageListStruct) * PMNumBlocks);\r
\r
// Read in the chunk offsets\r
- size = sizeof(longword) * ChunksInFile;\r
+ size = sizeof(dword) * ChunksInFile;\r
MM_GetPtr(&buf,size);\r
if (!CA_FarRead(PageFile,(byte far *)buf,size))\r
+ {\r
Quit("PML_OpenPageFile: Offset read failed");\r
- offsetptr = (longword far *)buf;\r
+ //return;\r
+ }\r
+ offsetptr = (dword far *)buf;\r
for (i = 0,page = PMPages;i < ChunksInFile;i++,page++)\r
page->offset = *offsetptr++;\r
MM_FreePtr(&buf);\r
size = sizeof(word) * ChunksInFile;\r
MM_GetPtr(&buf,size);\r
if (!CA_FarRead(PageFile,(byte far *)buf,size))\r
+ {\r
Quit("PML_OpenPageFile: Length read failed");\r
+ //return;\r
+ }\r
lengthptr = (word far *)buf;\r
for (i = 0,page = PMPages;i < ChunksInFile;i++,page++)\r
page->length = *lengthptr++;\r
if (PMSegPages)\r
{\r
MM_SetLock(&(memptr)PMSegPages,false);\r
- MM_FreePtr(&(void _seg *)PMSegPages);\r
+ MM_FreePtr(&(__SEGA *)PMSegPages);\r
}\r
}\r
\r
// to map our page in. If normal page, use EMS physical page 3, else\r
// use the physical page specified by the lock type\r
//\r
-#if 1\r
+#ifdef __DEBUG__\r
#pragma argsused // DEBUG - remove lock parameter\r
memptr\r
PML_GetEMSAddress(int page,PMLockType lock)\r
// If page isn't already mapped in, find LRU EMS frame, and use it\r
if (emspage == -1)\r
{\r
- longword last = MAXLONG;\r
+ dword last = MAXLONG;\r
for (i = 0;i < EMSFrameCount;i++)\r
{\r
if (EMSList[i].lastHit < last)\r
if (!noxms)\r
PML_StartupXMS();\r
\r
- if (nomain && !EMSPresent)
+ if (nomain && !EMSPresent)\r
{\r
- printf("PM_Startup: No main or EMS\n");
- return;
+ Quit("PM_Startup: No main or EMS\n");\r
+ //return;\r
}\r
else\r
PML_StartupMainMem();\r