mirror of https://github.com/minexew/Shrine.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.6 KiB
64 lines
1.6 KiB
U0 MemDemo() |
|
{ |
|
I64 i; |
|
"$$HL,1$$$$BLACK$$ |
|
#define MEM_PAG_BITS 9 |
|
#define MEM_PAG_SIZE (1<<MEM_PAG_BITS) |
|
#define MEM_HEAP_HASH_SIZE 1024 |
|
#define MEM_FREE_PAG_HASH_SIZE 0x100 |
|
#define MEM_EXTRA_HASH2_PAGS 2 |
|
|
|
public class CBlkPool |
|
{ |
|
CMemBlk *free_pag_hash[MEM_FREE_PAG_HASH_SIZE], |
|
*free_pag_hash2[64-MEM_PAG_BITS]; |
|
}; |
|
|
|
public class CHeapCtrl |
|
{ |
|
CBlkPool *bp; |
|
CMemUnused *heap_hash[MEM_HEAP_HASH_SIZE/sizeof(U8 *)]; |
|
}; |
|
|
|
public class CTask //The Fs segment reg points to current CTask. |
|
{ |
|
CHeapCtrl *code_heap,*data_heap; |
|
}; |
|
$$HL,0$$$$FG$$ |
|
|
|
"; |
|
|
|
|
|
"$$PURPLE$$Chunks in increments of 8 bytes, owned by the task.$$FG$$\n"; |
|
for (i=sizeof(CMemUnused);i<MEM_HEAP_HASH_SIZE;i+=8) |
|
if (i==0x48) |
|
"...\n"; |
|
else if (!(0x48<i<0x3C8)) |
|
"Fs->data_heap->heap_hash[%X/8]" |
|
"$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$\n",i; |
|
"\n\n"; |
|
|
|
"$$PURPLE$$Pages of 512 bytes, owned by the system.$$FG$$\n"; |
|
for (i=MEM_HEAP_HASH_SIZE;i<MEM_FREE_PAG_HASH_SIZE*MEM_PAG_SIZE; |
|
i+=MEM_PAG_SIZE) |
|
if (i==0x1200) |
|
"...\n"; |
|
else if (!(0x1200<i<0x1F200)) |
|
"Fs->data_heap->bp->free_pag_hash[%X/512]" |
|
"$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$\n",i; |
|
"\n\n"; |
|
|
|
"$$PURPLE$$Powers of two, owned by the system.$$FG$$\n"; |
|
for (i=Bsf(MEM_FREE_PAG_HASH_SIZE*MEM_PAG_SIZE);i<64;i++) |
|
if (i==0x1A) |
|
"...\n"; |
|
else if (!(0x1A<=i<=0x36)) |
|
"Fs->data_heap->bp->free_pag_hash2[%X] %016X" |
|
"$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$\n",i, |
|
1<<i+MEM_EXTRA_HASH2_PAGS*MEM_PAG_SIZE; |
|
"\n\n"; |
|
} |
|
|
|
MemDemo; |
|
|
|
|
|
|