-Seg:0 Size:46544 Owner:0x0\r
-Seg:b5d Size:4096 Owner:0x1586\r
-Seg:199b Size:9264 Owner:0x0\r
-Seg:5bdc Size:541248 Owner:0x0\r
-Seg:e000 Size:131056 Owner:0x0\r
+Seg:1411 Size:557915488 Owner:0x1511\r
+Seg:8bfd Size:-385858080 Owner:0x8ba6\r
+\r
+MM_ShowMemory: Memory block order currupted!\r
#include <conio.h> // just for wait
#include <time.h> // just for wait
#include <stdlib.h>
+#include <malloc.h>
#include <ctype.h>
#include <unistd.h>\r
#include <fcntl.h>\r
void MM_Startup(mminfo_t *mm, mminfotype *mmi)
{
int i;
- dword length;
+ dword length,seglength;
void huge *start;
- unsigned segstart,seglength,endfree;
+ unsigned segstart,endfree;
+ printf("mmi->segu=%Fp\n", (mmi->segu));
if(mm->mmstarted)
MM_Shutdown(mm);
mm->mmstarted = true;
mm->bombonerror = true;
+
//
// set up the linked list (everything in the free list;
//
- printf(" linked list making!\n");
+ //printf(" linked list making!\n");
mm->mmhead = NULL;
mm->mmfree = &(mm->mmblocks[0]);
for(i=0;i<MAXBLOCKS-1;i++)
mm->mmblocks[i].next = &(mm->mmblocks[i+1]);
}
mm->mmblocks[i].next = NULL;
+ printf("mmi->segu=%Fp\n", (mmi->segu));
//
// locked block of all memory until we punch out free space
//
- printf(" newblock making!\n");
+ //printf(" newblock making!\n");
MM_GetNewBlock(mm);
mm->mmhead = mm->mmnew; // this will allways be the first node
mm->mmnew->start = 0;
- mm->mmnew->length = 0x1;
+ mm->mmnew->length = 0xffff;
mm->mmnew->attributes = LOCKBIT;
mm->mmnew->next = NULL;
mm->mmrover = mm->mmhead;
+ printf("mmi->segu=%Fp\n", (mmi->segu));
//
// get all available near conventional memory segments
//
- printf(" nearheap making!\n");
+ //printf(" nearheap making!\n");
//---- length=coreleft();
//_nheapgrow();
length=_memmax();
- //printf(" %Fp\n", mmi->segu);
- start = (void huge *)(mm->nearheap = malloc(length));
+ start = /*(void *)*/(mm->nearheap = _nmalloc(length));
length -= 16-(FP_OFF(start)&15);
length -= SAVENEARHEAP;
seglength = length / 16; // now in paragraphs
printf( "ERROR - bad node in nearheap\n" );
break;
}*/
- printf(" near heap ok!\n");
+ //printf(" near heap ok!\n");
//
// get all available far conventional memory segments
//
//---- length=farcoreleft();
- printf(" farheap making!\n");
- _fheapgrow();
+ //printf(" farheap making!\n");
+ //_fheapgrow();
length=0xffffUL*4UL;//_memavl();
- //printf(" %Fp\n", mmi->segu);
start = mm->farheap = halloc(length, sizeof(byte));
//start = mm->farheap = _fmalloc(length);
length -= 16-(FP_OFF(start)&15);
printf( "ERROR - bad node in farheap\n" );
break;
}*/
- printf(" far heap ok!\n");
+ //printf(" far heap ok!\n");
//
// detect EMS and allocate up to 64K at page frame
{
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!
printf(" XMS!\n");
- //++++
- MML_SetupXMS(mm, mmi); // allocate as many UMBs as possible
+ //++++ MML_SetupXMS(mm, mmi); // allocate as many UMBs as possible
}
//
#define BUFFERSIZE 0x1000 // miscelanious, allways available buffer
-#define MAXBLOCKS 600//720
+#define MAXBLOCKS 720
typedef struct
{
dword nearheap,farheap,EMSmem,XMSmem,mainmem;
- //word __based(__segname("_CODE")) segu;
+ //__segment segu;
+ word segu;
//
} mminfotype;
typedef struct mmblockstruct
{
- word start,length;
+ word start;//,length;
//dword start,length;
//word start;
- //dword length;
+ dword length;
//byte segm; //how many 64kb segment blocks it takes up if there is many data!
unsigned attributes;
memptr *useptr; // pointer to the segment start
/*
exmm test
*/
+#include <stdio.h>
+#include <dos.h>
+
#include "src/lib/16_head.h"
-//#include "src/lib/16_ca.h"
-//#include "src/lib/16_mm.h"
+#include "src/lib/16_ca.h"
+#include "src/lib/16_mm.h"
//#include "src/lib/modex16.h"
-//#define FILERL
+#define FILERL
//#define FILEINIT
void
main(int argc, char *argv[])
{
- //mminfo_t mm; mminfotype mmi;
- //memptr bigbuffer;
- //__segment segu;
- //char *bakapee;
- //word baka;
+ static mminfo_t mm; mminfotype mmi;
+ static const __segment segu;
+ static memptr bigbuffer;
+ static char *bakapee;
+ word baka;
//static page_t screen;
+ mmi.segu=FP_SEG(segu);
+
printf("&main()=%Fp\n", *argv[0]);
- printf("&argc=%Fp\n", FP_SEG(&argc));
-//++++ printf("&segu=%Fp\n", segu);
+ printf("&segu=%p\n", (segu));
+ printf("mmi.segu=%p\n", (mmi.segu));
- //++++bakapee = malloc(64);
+ bakapee = _nmalloc(64);
// memset(bakapee, 0, 64);
-//++++ mm.mmstarted=0;
+ mm.mmstarted=0;
- /*if(argv[1]) bakapee = argv[1];
- else bakapee = "data/koishi~~.pcx";*/
+ if(argv[1]) bakapee = argv[1];
+ else bakapee = "data/koishi~~.pcx";
-//++++ textInit();\r
+ textInit();\r
/* setup camera and screen~ */
//bug!!!\r
/*screen.width += (16*2);\r
screen.height += (16*2);*/
- printf("&main()=%Fp start MM\n", *argv[0]);
-//++++ MM_Startup(&mm, &mmi);
+ printf("main()=%Fp start MM\n", *argv[0]);
+ MM_Startup(&mm, &mmi);
printf(" done!\n");
/*if(FP_SEG(*argv[0])==0)
{
exit(-5);
}*/
printf("&main()=%Fp\n", *argv[0]);
- printf("&argc=%Fp\n", FP_SEG(&argc));
-//++++ printf("&segu=%Fp\n", segu);
-/*++++#ifdef FILERL
+ printf("&segu=%p\n", (segu));
+ printf("mmi.segu=%p\n", (mmi.segu));
+#ifdef FILERL
#ifdef FILEINIT
printf(" read\n");
if(CA_ReadFile(bakapee, &bigbuffer, &mm))
baka=1;
else
baka=0;
-#endif*/
+#endif
//hmm functions in cache system use the buffered stuff
-//++++ printf("size of big buffer~=%u\n", _bmsize(segu, bigbuffer));
+ printf("size of big buffer~=%lu\n", _bmsize(segu, bigbuffer));
printf("dark purple = purgable\n");
printf("medium blue = non purgable\n");
printf("red = locked\n");
- //++++getch();
+ getch();
//++++modexEnter();
//++++modexShowPage(&screen);
- //++++MM_ShowMemory(/*&screen, */&mm);
- //++++getch();
- //++++MM_DumpData(&mm);
+ MM_ShowMemory(/*&screen, */&mm);
+ getch();
+ MM_DumpData(&mm);
//++++modexLeave();
- //++++MM_Report(&mm, &mmi);
+ MM_Report(&mm, &mmi);
printf(" stop!\n");
-//++++ MM_FreePtr(&bigbuffer, &mm);
-//++++ MM_Shutdown(&mm);
+ MM_FreePtr(&bigbuffer, &mm);
+ MM_Shutdown(&mm);
printf(" done!\n");
-/*#ifdef FILERL
- //++++free(bakapee);
+#ifdef FILERL
+ free(bakapee);
if(baka) printf("\nyay!\n");
else printf("\npoo!\n");
-#endif*/
+#endif
}