OSDN Git Service

FICK!!!!! i need super legit help!
authorsparky4 <sparky4@cock.li>
Wed, 22 Jul 2015 17:12:30 +0000 (12:12 -0500)
committersparky4 <sparky4@cock.li>
Wed, 22 Jul 2015 17:12:30 +0000 (12:12 -0500)
modified:   16.exe
new file:   16.hed
new file:   DEBUG.16
deleted:    DEBUG.TXT
new file:   MMDUMP.16
deleted:    MMDUMP.TXT
new file:   PROFILE.16
modified:   exmmtest.exe
modified:   fmemtest.exe
modified:   fontgfx.exe
modified:   fonttest.exe
modified:   inputest.exe
modified:   makefile
modified:   maptest.exe
modified:   palettec.exe
modified:   pcxtest.exe
modified:   sountest.exe
modified:   src/exmmtest.c
modified:   src/lib/16_ca.c
modified:   src/lib/16_ca.h
modified:   src/lib/16_head.c
modified:   src/lib/16_head.h
modified:   src/lib/16_mm.c
modified:   src/lib/16_mm.h
modified:   src/lib/16_pm.c
modified:   test.exe
modified:   test2.exe
modified:   tsthimem.exe

28 files changed:
16.exe
16.hed [new file with mode: 0644]
DEBUG.16 [new file with mode: 0644]
DEBUG.TXT [deleted file]
MMDUMP.16 [new file with mode: 0644]
MMDUMP.TXT [deleted file]
PROFILE.16 [new file with mode: 0644]
exmmtest.exe
fmemtest.exe
fontgfx.exe
fonttest.exe
inputest.exe
makefile
maptest.exe
palettec.exe
pcxtest.exe
sountest.exe
src/exmmtest.c
src/lib/16_ca.c
src/lib/16_ca.h
src/lib/16_head.c
src/lib/16_head.h
src/lib/16_mm.c
src/lib/16_mm.h
src/lib/16_pm.c
test.exe
test2.exe
tsthimem.exe

diff --git a/16.exe b/16.exe
index adda6ad..9ebcb31 100644 (file)
Binary files a/16.exe and b/16.exe differ
diff --git a/16.hed b/16.hed
new file mode 100644 (file)
index 0000000..2b186fb
Binary files /dev/null and b/16.hed differ
diff --git a/DEBUG.16 b/DEBUG.16
new file mode 100644 (file)
index 0000000..1f794e8
--- /dev/null
+++ b/DEBUG.16
@@ -0,0 +1,6 @@
+Seg:0  Size:109104     Owner:0xfdba\r
+Seg:1b9c       Size:16 Owner:0xc31e\r
+Seg:1b9d       Size:4096       Owner:0xc25c\r
+Seg:1f42       Size:789472     Owner:0xa8c\r
+\r
+MM_ShowMemory: Memory block order currupted!\r
diff --git a/DEBUG.TXT b/DEBUG.TXT
deleted file mode 100644 (file)
index 24bdfb8..0000000
--- a/DEBUG.TXT
+++ /dev/null
@@ -1,4 +0,0 @@
-Seg:0  Size:105952     Owner:0xfc46\r
-Seg:19de       Size:4096       Owner:0x56f8\r
-Seg:218e       Size:8080       Owner:0x46f6\r
-Seg:6385       Size:640928     Owner:0x2ef7\r
diff --git a/MMDUMP.16 b/MMDUMP.16
new file mode 100644 (file)
index 0000000..02fa2ec
Binary files /dev/null and b/MMDUMP.16 differ
diff --git a/MMDUMP.TXT b/MMDUMP.TXT
deleted file mode 100644 (file)
index fb7e099..0000000
Binary files a/MMDUMP.TXT and /dev/null differ
diff --git a/PROFILE.16 b/PROFILE.16
new file mode 100644 (file)
index 0000000..e69de29
index 35859a0..5b068f6 100644 (file)
Binary files a/exmmtest.exe and b/exmmtest.exe differ
index 9d584f0..39ee9b8 100644 (file)
Binary files a/fmemtest.exe and b/fmemtest.exe differ
index ac4912d..5813254 100644 (file)
Binary files a/fontgfx.exe and b/fontgfx.exe differ
index b8327e4..f812b28 100644 (file)
Binary files a/fonttest.exe and b/fonttest.exe differ
index 4731161..842c7b7 100644 (file)
Binary files a/inputest.exe and b/inputest.exe differ
index cd103e7..7e24fab 100644 (file)
--- a/makefile
+++ b/makefile
@@ -12,9 +12,9 @@ TARGET_OS = dos
 #-zk0 = kanji support~
 #-zkl = current codepage
 
-ZFLAGS=-zk0 -zc# -zu -zm# -zdp# -zp16 -zq
+ZFLAGS=-zk0 -zu -zc# -zm# -zdp# -zp16 -zq
 DFLAGS=-DTARGET_MSDOS=16 -DMSDOS=1
-CFLAGS=-wo -x -mc -wo -k32768#16384#
+CFLAGS=-ei -wo -x -mc -r -fh=16.hed -k60000#16384#
 OFLAGS=-ot -ox -ob -oh -or -om -ol# -ol+
 FLAGS=-0 -d2 -lr $(OFLAGS) $(CFLAGS) $(DFLAGS) $(ZFLAGS)
 SRC=src$(DIRSEP)
index 7480d47..11ee1cb 100644 (file)
Binary files a/maptest.exe and b/maptest.exe differ
index 196f524..1cb67ec 100644 (file)
Binary files a/palettec.exe and b/palettec.exe differ
index e2a7093..401a18c 100644 (file)
Binary files a/pcxtest.exe and b/pcxtest.exe differ
index 841f817..04c88cd 100644 (file)
Binary files a/sountest.exe and b/sountest.exe differ
index ead23e7..9546bc1 100644 (file)
@@ -35,8 +35,8 @@
 #pragma warn -use
 
 //file load or read definition
-//#define FILERL
-//#define FILEREAD
+#define FILERL
+#define FILEREAD
 
 void
 main(int argc, char *argv[])
@@ -44,8 +44,9 @@ main(int argc, char *argv[])
        mminfo_t mm; mminfotype mmi;
        __segment segu;
 #ifdef FILERL
-       memptr  bigbuffer;
-       static char *bakapee;
+       memptr bigbuffer;
+       char *bakapee;
+//     int bakapeehandle;
        word baka;
 #endif
        //static page_t screen;
@@ -77,6 +78,9 @@ main(int argc, char *argv[])
 
        printf("main()=%Fp      start MM\n", *argv[0]);
        MM_Startup(&mm, &mmi);
+       //PM_Startup();\r
+       //PM_UnlockMainMem();\r
+       CA_Startup();
        printf("                done!\n");
        /*if(FP_SEG(*argv[0])==0)
        {
@@ -87,9 +91,12 @@ main(int argc, char *argv[])
                exit(-5);
        }*/
        printf("&main()=%Fp\n", *argv[0]);
-       printf("&segu=%p\n", (segu));
+       printf("&segu=%p\n", (segu));\r
        //printf("mmi.segu=%p\n", (mmi.segu));
 #ifdef FILERL
+//     bakapeehandle = open(bakapee,O_RDONLY | O_BINARY, S_IREAD);
+       printf("size of big buffer~=%lu\n", _bmsize(segu, bigbuffer));
+//     if(CA_FarRead(bakapeehandle,(void far *)&bigbuffer,sizeof(bigbuffer),&mm))
 #ifdef FILEREAD
        printf("                read\n");
        if(CA_ReadFile(bakapee, &bigbuffer, &mm))
@@ -100,6 +107,7 @@ main(int argc, char *argv[])
                baka=1;
        else
                baka=0;
+//     close(bakapeehandle);
        //hmm functions in cache system use the buffered stuff
        printf("size of big buffer~=%lu\n", _bmsize(segu, bigbuffer));
 #endif
@@ -118,6 +126,8 @@ main(int argc, char *argv[])
 #ifdef FILERL
        MM_FreePtr(&bigbuffer, &mm);
 #endif
+       //PM_Shutdown();
+       CA_Shutdown();
        MM_Shutdown(&mm);
        printf("                done!\n");
 #ifdef FILERL
index bf94bc8..f74a571 100644 (file)
@@ -175,8 +175,8 @@ long GRFILEPOS(int c)
 */\r
 void CA_OpenDebug(void)\r
 {\r
-       unlink("debug.txt");\r
-       debughandle = open("debug.txt", O_CREAT | O_WRONLY | O_TEXT);\r
+       unlink("debug.16");\r
+       debughandle = open("debug.16", O_CREAT | O_WRONLY | O_TEXT);\r
 }\r
 \r
 void CA_CloseDebug(void)\r
@@ -330,7 +330,8 @@ End:
 boolean CA_ReadFile(char *filename, memptr *ptr, mminfo_t *mm)\r
 {\r
        int handle;\r
-       dword size;\r
+       dword size;
+       //long size;\r
 \r
        if((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
                return false;\r
@@ -360,7 +361,8 @@ boolean CA_ReadFile(char *filename, memptr *ptr, mminfo_t *mm)
 boolean CA_LoadFile(char *filename, memptr *ptr, mminfo_t *mm, mminfotype *mmi)\r
 {\r
        int handle;\r
-       long size;\r
+       dword size;
+       //long size;\r
 \r
        if((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
                return false;\r
@@ -1045,8 +1047,8 @@ asm       mov     ds,ax
 void CA_Startup(void)\r
 {\r
 #ifdef PROFILE\r
-       unlink("PROFILE.TXT");\r
-       profilehandle = open("PROFILE.TXT", O_CREAT | O_WRONLY | O_TEXT);\r
+       unlink("profile.16");\r
+       profilehandle = open("profile.16", O_CREAT | O_WRONLY | O_TEXT);\r
 #endif\r
 /*++++\r
 // MDM begin - (GAMERS EDGE)\r
index 29030c6..7780938 100644 (file)
@@ -36,7 +36,8 @@
 //#define AUDIOHEADERLINKED\r
 \r
 //#define NUMMAPS              39\r
-//#define MAPPLANES            3\r
+//#define MAPPLANES            3
+#define PROFILE\r
 \r
 //===========================================================================\r
 \r
index 6ad9bcc..008c654 100644 (file)
 
 #include "src/lib/16_head.h"
 
-/* local function */\r
-void wait(clock_t wait);
-void* AllocateLargestFreeBlock(size_t* Size);
-size_t GetFreeSize(void);
-long int filesize(FILE *fp);\r
-\r
 /* Function: Wait **********************************************************\r
 *\r
 *     Parameters:    wait - time in microseconds\r
@@ -117,6 +111,69 @@ size_t GetFreeSize(void)
   return total;
 }
 
+void far* AllocateLargestFarFreeBlock(size_t far* Size)
+{
+       size_t s0, s1;
+       void far* p;
+
+       s0 = ~(size_t)0 ^ (~(size_t)0 >> 1);
+       while (s0 && (p = _fmalloc(s0)) == NULL)
+               s0 >>= 1;
+
+       if (p)
+               _ffree(p);
+
+       s1 = s0 >> 1;
+       while (s1)
+       {
+               if ((p = _fmalloc(s0 + s1)) != NULL)
+               {
+                       s0 += s1;
+                       _ffree(p);
+               }
+       s1 >>= 1;
+       }
+       while (s0 && (p = _fmalloc(s0)) == NULL)
+               s0 ^= s0 & -s0;
+
+       *Size = s0;
+       return p;
+}
+
+size_t GetFarFreeSize(void)
+{
+       size_t total = 0;
+       void far* pFirst = NULL;
+       void far* pLast = NULL;
+       for(;;)
+       {
+               size_t largest;
+               void far* p = AllocateLargestFarFreeBlock(&largest);
+               if (largest < sizeof(void far*))
+               {
+                       if (p != NULL)
+                       _ffree(p);
+                       break;
+               }
+               *(void far* far*)p = NULL;
+               total += largest;
+               if (pFirst == NULL)
+                       pFirst = p;
+
+               if (pLast != NULL)
+                       *(void far* far*)pLast = p;
+               pLast = p;
+       }
+
+       while (pFirst != NULL)
+       {
+               void far* p = *(void far* far*)pFirst;
+               _ffree(pFirst);
+               pFirst = p;
+       }
+       return total;
+}
+
 long int
 filesize(FILE *fp)\r
 {\r
index 9e00e49..da071b7 100644 (file)
@@ -151,12 +151,14 @@ extern    int                     profilehandle,debughandle;
 typedef union REGPACK  regs_t;
 typedef        enum    {false,true}    boolean;
 
+/* local function */\r
 void wait(clock_t wait);
 void* AllocateLargestFreeBlock(size_t* Size);
 size_t GetFreeSize(void);
+void far *AllocateLargestFarFreeBlock(size_t far* Size);
+size_t GetFarFreeSize(void);
 long int filesize(FILE *fp);
 int US_CheckParm(char *parm,char **strings);
-//void Quit(char *error, ...);
 
 extern void CA_OpenDebug (void);\r
 extern void CA_CloseDebug (void);
index 7b0b833..138a31b 100644 (file)
@@ -47,9 +47,9 @@ Open Watcom port by sparky4
 
 */
 #include "src/lib/16_mm.h"
-#pragma hdrstop\r
-\r
-#pragma warn -pro\r
+#pragma hdrstop
+
+#pragma warn -pro
 #pragma warn -use
 
 /*
@@ -671,10 +671,10 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi)
 //
 // get all available near conventional memory segments
 //
-       printf("                nearheap making!\n");
 //---- length=coreleft();
+       printf("                nearheap making!\n");
        _heapgrow();
-       length=_memmax();
+       length=_memmax();//(dword)GetFreeSize();
        start = (void huge *)(mm->nearheap = malloc(length));
        length -= 16-(FP_OFF(start)&15);
        length -= SAVENEARHEAP;
@@ -682,21 +682,7 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi)
        segstart = FP_SEG(start)+(FP_OFF(start)+15)/16;
        MML_UseSpace(segstart,seglength, mm);
        mmi->nearheap = length;
-       printf("start=%Fp       segstart=%x     seglen=%lu      len=%lu\n", start, segstart, seglength, length);
-       /*switch( _nheapchk() ) {
-               case _HEAPOK:
-                       printf( "OK - nearheap is good\n" );
-               break;
-               case _HEAPEMPTY:
-                       printf( "OK - nearheap is empty\n" );
-               break;
-               case _HEAPBADBEGIN:
-                       printf( "ERROR - nearheap is damaged\n" );
-               break;
-               case _HEAPBADNODE:
-                       printf( "ERROR - bad node in nearheap\n" );
-               break;
-       }*/
+       printf("start=%FP       segstart=%X     seglen=%lu      len=%lu\n", start, segstart, seglength, length);
        printf("                near heap ok!\n");
 
 //
@@ -705,37 +691,26 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi)
 //---- length=farcoreleft();
        printf("                farheap making!\n");
        _fheapgrow();
-       length=0xffffUL*4UL;
-       start = mm->farheap = halloc(length, sizeof(byte));
-       //start = mm->farheap = _fmalloc(length);
+       length=(dword)GetFarFreeSize();//0xffffUL*4UL;
+       //start = mm->farheap = halloc(length, 1);
+       start = mm->farheap = _fmalloc(length);
        length -= 16-(FP_OFF(start)&15);
        length -= SAVEFARHEAP;
        seglength = length / 16;                        // now in paragraphs
        segstart = FP_SEG(start)+(FP_OFF(start)+15)/16;
        MML_UseSpace(segstart,seglength, mm);
        mmi->farheap = length;
-       mmi->mainmem = mmi->nearheap + mmi->farheap;
-       printf("start=%Fp       segstart=%x     seglen=%lu      len=%lu\n", start, segstart, seglength, length);
-       /*switch( _fheapchk() ) {
-               case _HEAPOK:
-                       printf( "OK - farheap is good\n" );
-               break;
-               case _HEAPEMPTY:
-                       printf( "OK - farheap is empty\n" );
-               break;
-               case _HEAPBADBEGIN:
-                       printf( "ERROR - farheap is damaged\n" );
-               break;
-               case _HEAPBADNODE:
-                       printf( "ERROR - bad node in farheap\n" );
-               break;
-       }*/
+       printf("start=%FP       segstart=%X     seglen=%lu      len=%lu\n", start, segstart, seglength, length);
        printf("                far heap ok!\n");
 
+       mmi->mainmem = mmi->nearheap + mmi->farheap;
+
+       getch();
+
 //
 // detect EMS and allocate up to 64K at page frame
 //
-/*printf("             EMS1\n");
+printf("               EMS1\n");
 printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");    //bug!
        mmi->EMSmem = 0;
        for(i = 1;i < __argc;i++)
@@ -764,7 +739,7 @@ printf("            EMS4\n");
 //
 // detect XMS and get upper memory blocks
 //
-emsskip:
+emsskip:/*
        mmi->XMSmem = 0;
        for(i = 1;i < __argc;i++)
        {
@@ -784,8 +759,8 @@ printf("            XMS!\n");
 //
 xmsskip:*/
 /*mmi->nearheap = 0;
-mmi->farheap = 0;*/
-mmi->EMSmem = 0;
+mmi->farheap = 0;
+mmi->EMSmem = 0;*/
 mmi->XMSmem = 0;
        mm->mmrover = mm->mmhead;               // start looking for space after low block
 
@@ -809,12 +784,8 @@ void MM_Shutdown(mminfo_t *mm)
        if(!(mm->mmstarted))
                return;
 
-       _ffree(mm->farheap);
-       printf("                far freed\n");
-       free(mm->nearheap);
-       printf("                near freed\n");
-       //hfree(mm->hugeheap);
-       //printf("huge freed\n");
+       _ffree(mm->farheap);    printf("                far freed\n");
+       free(mm->nearheap);     printf("                near freed\n");
        if(MML_CheckForEMS()){ MML_ShutdownEMS(mm); printf("            EMS freed\n"); }
        if(MML_CheckForXMS(mm)){ MML_ShutdownXMS(mm); printf("          XMS freed\n"); }
 }
@@ -914,7 +885,10 @@ void MM_GetPtr(memptr *baseptr,dword size, mminfo_t *mm, mminfotype *mmi)
        }
 
        if (mm->bombonerror)
+       {
                printf(OUT_OF_MEM_MSG,(size-mmi->nearheap));
+               exit(-5);
+       }
        else
                mm->mmerror = true;
 }
@@ -1278,9 +1252,9 @@ void MM_DumpData(mminfo_t *mm)
 
 
        //++++free(mm->nearheap);
-       dumpfile = fopen ("mmdump.txt","w");
+       dumpfile = fopen ("mmdump.16","w");
        if (!dumpfile){
-               printf("MM_DumpData: Couldn't open MMDUMP.TXT!\n");
+               printf("MM_DumpData: Couldn't open MMDUMP.16!\n");
                return;
        }
 
@@ -1321,7 +1295,7 @@ void MM_DumpData(mminfo_t *mm)
        } while (lowest != 0xffff);
 
        fclose(dumpfile);
-       printf("MMDUMP.TXT created.\n");
+       printf("MMDUMP.16 created.\n");
 }
 
 //==========================================================================
@@ -1351,8 +1325,8 @@ dword MM_UnusedMemory(mminfo_t *mm)
                scan = scan->next;
        }
 
-       return free*16l;
-//     return free;
+//     return free*16l;
+       return free;
 }
 
 //==========================================================================
@@ -1384,8 +1358,8 @@ dword MM_TotalFree(mminfo_t *mm)
                scan = scan->next;
        }
 
-       return free*16l;
-//     return free;
+//     return free*16l;
+       return free;
 }
 
 //==========================================================================
index 2a37f37..7de1ef2 100644 (file)
@@ -37,7 +37,7 @@
 
 
 #define SAVENEARHEAP   0//x200         // space to leave in data segment
-#define SAVEFARHEAP    0//x2000                        // space to leave in far heap
+#define SAVEFARHEAP    0x400                   // space to leave in far heap
 
 #define        BUFFERSIZE              0x1000          // miscelanious, allways available buffer
 
index 57c15aa..bc9ba74 100644 (file)
@@ -4,7 +4,7 @@
 //     Primary coder: Jason Blochowiak\r
 //\r
 \r
-#include "ID_HEADS.H"\r
+#include "src/lib/16_pm.h"\r
 #pragma hdrstop\r
 \r
 //     Main Mem specific variables\r
@@ -56,15 +56,19 @@ static      char            *ParmStrings[] = {"nomain","noems","noxms",nil};
 //\r
 void\r
 PML_MapEMS(word logical,word physical)\r
-{\r
-       _AL = physical;\r
-       _BX = logical;\r
-       _DX = EMSHandle;\r
-       _AH = EMS_MAPPAGE;\r
-asm    int     EMS_INT\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
+       }\r
 \r
-       if (_AH)\r
-               Quit("PML_MapEMS: Page mapping failed");\r
+       if(CPURegs.h.ah)\r
+               printf("PML_MapEMS: Page mapping failed\n");\r
 }\r
 \r
 //\r
@@ -177,7 +181,7 @@ PML_ShutdownEMS(void)
        asm     mov     dx,[EMSHandle]\r
        asm     int     EMS_INT\r
                if (_AH)\r
-                       Quit ("PML_ShutdownEMS: Error freeing EMS");\r
+                       printf("PML_ShutdownEMS: Error freeing EMS\n");\r
        }\r
 }\r
 \r
@@ -243,7 +247,7 @@ error:
 void\r
 PML_XMSCopy(boolean toxms,byte far *addr,word xmspage,word length)\r
 {\r
-       longword        xoffset;\r
+       dword   xoffset;\r
        struct\r
        {\r
                longword        length;\r
@@ -254,7 +258,7 @@ PML_XMSCopy(boolean toxms,byte far *addr,word xmspage,word length)
        } copy;\r
 \r
        if (!addr)\r
-               Quit("PML_XMSCopy: zero address");\r
+               printf("PML_XMSCopy: zero address\n");\r
 \r
        xoffset = (longword)xmspage * PMPageSize;\r
 \r
@@ -1171,8 +1175,11 @@ PM_Startup(void)
        if (!noxms)\r
                PML_StartupXMS();\r
 \r
-       if (nomain && !EMSPresent)\r
-               Quit("PM_Startup: No main or EMS");\r
+       if (nomain && !EMSPresent)
+       {\r
+               printf("PM_Startup: No main or EMS\n");
+               return;
+       }\r
        else\r
                PML_StartupMainMem();\r
 \r
index e04c291..60ad10d 100644 (file)
Binary files a/test.exe and b/test.exe differ
index 77e009f..4131aea 100644 (file)
Binary files a/test2.exe and b/test2.exe differ
index 24c25b0..465bcca 100644 (file)
Binary files a/tsthimem.exe and b/tsthimem.exe differ