mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-22 01:57:16 +00:00
10fee205e1
suggestion, but I prepared the patch long before reading the mail :-). Also, the remaining parts of the control panel etc. have been moved into a class of their own. This is still work in progress. I'm well aware that some of the classes aren't as well separated as they ought to be, and that using global variables to keep track of the different classes probably isn't pretty. svn-id: r10561
106 lines
2.8 KiB
C++
106 lines
2.8 KiB
C++
/* Copyright (C) 1994-2003 Revolution Software Ltd
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* $Header$
|
|
*/
|
|
|
|
#ifndef MEMORY_H
|
|
#define MEMORY_H
|
|
|
|
#include "common/scummsys.h"
|
|
|
|
typedef struct {
|
|
uint32 state;
|
|
uint32 age; // *not used*
|
|
uint32 size;
|
|
int32 parent; // who is before us
|
|
int32 child; // who is after us
|
|
// id of a position in the _resList or some other unique id - for the
|
|
// visual display only
|
|
uint32 uid;
|
|
uint8 *ad;
|
|
} mem;
|
|
|
|
#define MEM_null 0 // null
|
|
#define MEM_free 1
|
|
#define MEM_locked 2
|
|
#define MEM_float 3
|
|
|
|
//---------------------------------------
|
|
// MEMORY BLOCKS
|
|
|
|
#define MAX_mem_blocks 999
|
|
|
|
// maintain at a good 50% higher than the
|
|
// highest recorded value from the on-screen info
|
|
//---------------------------------------
|
|
|
|
#define UID_memman 0xffffffff
|
|
#define UID_NULL 0xfffffffe // FREE
|
|
#define UID_font 0xfffffffd
|
|
#define UID_temp 0xfffffffc
|
|
#define UID_decompression_buffer 0xfffffffb
|
|
#define UID_shrink_buffer 0xfffffffa
|
|
#define UID_con_sprite 0xfffffff9
|
|
#define UID_text_sprite 0xfffffff8
|
|
#define UID_walk_anim 0xfffffff7
|
|
#define UID_savegame_buffer 0xfffffff6
|
|
#define UID_restoregame_buffer 0xfffffff5
|
|
|
|
class Sword2MemoryManager {
|
|
private:
|
|
// Address of init malloc to be freed later
|
|
uint8 *_freeMemman;
|
|
|
|
uint32 _totalFreeMemory;
|
|
uint32 _totalBlocks;
|
|
|
|
// Start position of the defragger as indicated by its sister,
|
|
// VirtualDefrag.
|
|
int32 _suggestedStart;
|
|
|
|
mem *lowLevelAlloc(uint32 size, uint32 type, uint32 unique_id);
|
|
int32 defragMemory(uint32 req_size);
|
|
|
|
// Used to determine if the required size can be obtained if the
|
|
// defragger is allowed to run.
|
|
int32 virtualDefrag(uint32 size);
|
|
|
|
// Debugging functions
|
|
void debugMemory(void);
|
|
const char *fetchOwner(uint32 uid);
|
|
void memoryString(char *string);
|
|
|
|
public:
|
|
// List of defined memory handles - each representing a block of memory
|
|
mem _memList[MAX_mem_blocks];
|
|
uint32 _baseMemBlock;
|
|
|
|
void init(void);
|
|
void exit(void);
|
|
mem *allocMemory(uint32 size, uint32 type, uint32 unique_id);
|
|
void freeMemory(mem *block);
|
|
void floatMemory(mem *block);
|
|
void lockMemory(mem *block);
|
|
|
|
// Debugging function
|
|
void displayMemory(void);
|
|
};
|
|
|
|
extern Sword2MemoryManager memory;
|
|
|
|
#endif
|