+++ /dev/null
-\r
-#include "core.h"\r
-\r
-Memory SystemMemory;\r
-\r
-void Initialise_MemoryBlock(IO_MemoryControl *mainctrl)\r
-{\r
- SystemMemory.addr = 0;\r
- SystemMemory.size = 0;\r
- SystemMemory.next = 0;\r
- SystemMemory.ctrl = mainctrl;\r
- SystemMemory.description[0] = 0x00;\r
- return;\r
-}\r
-\r
-void *MemoryBlock_Allocate_System(uint size)\r
-{\r
- Memory *block = MemoryControl_Allocate(SystemMemory.ctrl, sizeof(Memory));\r
- uint *retaddr;\r
-\r
- retaddr = &size;\r
-\r
- if(block == 0){\r
- Emergency_Out("[0x%08X]SysMemAlloc0 Failed.(%dBytes)", *(retaddr - 1), size);\r
- debug("[0x%08X]SysMemAlloc0 Failed.(%dBytes)", *(retaddr - 1), size);\r
- for(;;){\r
- IO_HLT();\r
- }\r
- }\r
-\r
- block->addr = MemoryControl_Allocate(SystemMemory.ctrl, size);\r
-\r
- if(block->addr == 0){\r
- Emergency_Out("[0x%08X]SysMemAlloc1 Failed.(%dBytes)", *(retaddr - 1), size);\r
- debug("[0x%08X]SysmMemAlloc1 Failed.(%dBytes)", *(retaddr - 1), size);\r
- for(;;){\r
- IO_HLT();\r
- }\r
- }\r
-\r
- block->size = size;\r
- block->next = SystemMemory.next;\r
- SystemMemory.next = block;\r
- SystemMemory.size++;\r
- block->ctrl = SystemMemory.ctrl;\r
- block->description[0] = 0x00;\r
- return block->addr;\r
-}\r
-\r
-void *MemoryBlock_Allocate_User(uint size, IO_MemoryControl *ctrl)\r
-{\r
- Memory *block = MemoryControl_Allocate(SystemMemory.ctrl, sizeof(Memory));\r
- uint *retaddr;\r
-\r
- retaddr = &size;\r
-\r
- if(block == 0){\r
- Emergency_Out("[0x%08X]UsrMemAlloc0 Failed.(%dBytes)", *(retaddr - 1), size);\r
- debug("[0x%08X]UsrMemAlloc0 Failed.(%dBytes)", *(retaddr - 1), size);\r
- for(;;){\r
- IO_HLT();\r
- }\r
- }\r
-\r
- block->addr = MemoryControl_Allocate(ctrl, size);\r
-\r
- if(block->addr == 0){\r
- Emergency_Out("[0x%08X]UsrMemAlloc1 Failed.(%dBytes)", *(retaddr - 1), size);\r
- debug("[0x%08X]UsrMemAlloc1 Failed.(%dBytes)", *(retaddr - 1), size);\r
- for(;;){\r
- IO_HLT();\r
- }\r
- }\r
-\r
- block->size = (size + 7) & ~7;\r
- block->next = SystemMemory.next;\r
- SystemMemory.next = block;\r
- SystemMemory.size++;\r
- block->ctrl = ctrl;\r
- block->description[0] = 0x00;\r
- return block->addr;\r
-}\r
-\r
-Memory *MemoryBlock_Verify(void *addr)\r
-{\r
- Memory *next;\r
-\r
- for(next = &SystemMemory; next->next != 0; next = next->next){\r
- if(next->next->addr == addr){\r
- return next->next;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-int MemoryBlock_Write_Description(void *addr, const uchar *description)\r
-{\r
- uint i;\r
- Memory *block;\r
-\r
- block = MemoryBlock_Verify(addr);\r
-\r
- if(block){\r
- for(i = 0; i < (MEMORY_DESCRIPTION_LENGTH - 1); i++){\r
- if(description[i] == 0x00){\r
- break;\r
- }\r
- block->description[i] = description[i];\r
- }\r
- block->description[i] = 0x00;\r
- return i;\r
- }\r
- return -1;\r
-}\r
-\r
-int MemoryBlock_Free(void *addr)\r
-{\r
- Memory *next, *block;\r
-\r
- if(addr == 0){\r
- return -1;\r
- }\r
-\r
- for(next = &SystemMemory; next->next != 0; next = next->next){\r
- if(next->next->addr == addr){\r
- block = next->next;\r
- next->next = block->next;\r
- if(MemoryControl_Free(block->ctrl, block->addr, block->size) != 0){\r
- return -2;\r
- }\r
- if(MemoryControl_Free(SystemMemory.ctrl, block, sizeof(Memory)) != 0){\r
- return -3;\r
- }\r
- SystemMemory.size--;\r
- return 0;\r
- }\r
- }\r
- return -1;\r
-}\r