]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_pm.c
pm mm and ca i am working on pm started wwww
[16.git] / src / lib / 16_pm.c
index bc9ba74c759fc091e2442664689cc7aa8658e32e..7d112a9e9ff57909965d8fbe461963e4c6994fd7 100755 (executable)
@@ -6,7 +6,7 @@
 \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
@@ -22,7 +22,7 @@
 //     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
@@ -42,7 +42,7 @@
        long                    PMFrameCount;\r
        PageListStruct  far *PMPages,\r
                                        _seg *PMSegPages;\r
-\r
+*/\r
 static char            *ParmStrings[] = {"nomain","noems","noxms",nil};\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
@@ -56,19 +56,22 @@ static      char            *ParmStrings[] = {"nomain","noems","noxms",nil};
 //\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
@@ -85,62 +88,63 @@ PML_MapEMS(word logical,word physical)
 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
@@ -150,12 +154,12 @@ asm       jc      error
                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
@@ -177,11 +181,16 @@ PML_ShutdownEMS(void)
 {\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
@@ -205,7 +214,7 @@ PML_StartupXMS(void)
 \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
@@ -215,19 +224,19 @@ asm       mov     [WORD PTR XMSDriver],bx
 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
@@ -250,17 +259,20 @@ PML_XMSCopy(boolean toxms,byte far *addr,word xmspage,word length)
        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
@@ -269,11 +281,14 @@ PML_XMSCopy(boolean toxms,byte far *addr,word xmspage,word length)
        copy.target_offset = toxms? xoffset : (long)addr;\r
 \r
 asm    push si\r
-       _SI = (word)&copy;\r
+       CPURegs.i.si = (word)&copy;\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
@@ -309,10 +324,13 @@ PML_ShutdownXMS(void)
 {\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
@@ -440,7 +458,10 @@ PML_StartupMainMem(void)
        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
@@ -473,13 +494,24 @@ void
 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
@@ -490,14 +522,17 @@ PML_OpenPageFile(void)
 {\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
@@ -512,11 +547,14 @@ PML_OpenPageFile(void)
        _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
@@ -525,7 +563,10 @@ PML_OpenPageFile(void)
        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
@@ -543,7 +584,7 @@ PML_ClosePageFile(void)
        if (PMSegPages)\r
        {\r
                MM_SetLock(&(memptr)PMSegPages,false);\r
-               MM_FreePtr(&(void _seg *)PMSegPages);\r
+               MM_FreePtr(&(__SEGA *)PMSegPages);\r
        }\r
 }\r
 \r
@@ -560,7 +601,7 @@ PML_ClosePageFile(void)
 //             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
@@ -585,7 +626,7 @@ PML_GetEMSAddress(int page,PMLockType lock)
        // 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
@@ -1175,10 +1216,10 @@ PM_Startup(void)
        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