mpw/toolbox/mm.h

172 lines
3.6 KiB
C
Raw Normal View History

2013-02-07 22:49:20 -05:00
#ifndef __mpw_mm_h__
#define __mpw_mm_h__
2013-02-07 22:12:30 -05:00
#include <cstdint>
2015-02-07 12:30:12 -05:00
#include <macos/tool_return.h>
2013-02-07 22:12:30 -05:00
namespace MM
{
2016-08-05 17:16:39 -04:00
enum {
attrResource = 1 << 5,
attrPurgeable = 1 << 6,
attrLocked = 1 << 7,
};
struct HandleInfo
{
uint32_t address = 0;
uint32_t size = 0;
bool locked = false;
bool purgeable = false;
bool resource = false;
HandleInfo(uint32_t a = 0, uint32_t s = 0) :
address(a), size(s)
{}
2016-08-05 17:16:39 -04:00
HandleInfo(uint32_t a, uint32_t s, unsigned attr) :
address(a), size(s)
{
resource = attr & attrResource;
purgeable = attr & attrPurgeable;
locked = attr & attrLocked;
}
};
// native functions.
namespace Native
{
2013-02-17 21:54:45 -05:00
using MacOS::tool_return;
struct hp {
uint32_t handle = 0;
uint32_t pointer = 0;
hp() = default;
hp(uint32_t a, uint32_t b) : handle(a), pointer(b) {};
};
2013-07-05 13:56:06 -04:00
void MemoryInfo(uint32_t address);
2013-02-17 21:54:45 -05:00
void PrintMemoryStats();
tool_return<hp> NewHandle(uint32_t size, bool clear);
2016-08-05 17:16:39 -04:00
tool_return<hp> NewHandleWithAttr(uint32_t size, unsigned attr);
tool_return<uint32_t> NewEmptyHandle();
tool_return<uint32_t> NewPtr(uint32_t size, bool clear);
tool_return<void> DisposeHandle(uint32_t handle);
tool_return<void> DisposePtr(uint32_t pointer);
tool_return<uint32_t> GetHandleSize(uint32_t handle);
2016-08-05 17:16:39 -04:00
tool_return<uint32_t> SetHandleSize(uint32_t handle, uint32_t newSize);
tool_return<uint32_t> ReallocHandle(uint32_t handle, uint32_t newSize);
tool_return<void> HSetState(uint32_t handle, uint16_t attr);
tool_return<uint16_t> HGetState(uint32_t handle);
2013-02-17 15:07:32 -05:00
tool_return<void> HSetRBit(uint32_t handle);
tool_return<void> HClrRBit(uint32_t handle);
2013-06-26 22:50:30 -04:00
tool_return<void> HLock(uint32_t handle);
tool_return<void> HUnlock(uint32_t handle);
2016-08-05 17:16:39 -04:00
tool_return<void> EmptyHandle(uint32_t handle);
tool_return<HandleInfo> GetHandleInfo(uint32_t handle);
2013-08-03 19:17:15 -04:00
tool_return<uint32_t> GetHandleSize(uint32_t handle);
}
bool Init(uint8_t *memory, uint32_t memorySize, uint32_t globals, uint32_t stack);
2013-02-17 21:54:45 -05:00
2015-02-07 12:30:12 -05:00
using MacOS::tool_return;
2013-02-07 23:44:58 -05:00
uint16_t BlockMove(uint16_t trap);
2013-02-15 00:08:22 -05:00
uint32_t CompactMem(uint16_t trap);
2013-03-30 18:45:20 -04:00
uint32_t MaxMem(uint16_t trap);
2013-05-17 19:05:03 -04:00
uint32_t MaxBlock(uint16_t trap);
2013-03-30 18:45:20 -04:00
uint32_t FreeMem(uint16_t trap);
2013-03-31 23:49:59 -04:00
uint16_t ReserveMem(uint16_t trap);
2014-12-14 19:51:49 -05:00
uint32_t PurgeSpace(uint16_t trap);
2013-03-31 23:49:59 -04:00
2013-02-14 23:08:56 -05:00
uint16_t DisposeHandle(uint16_t trap);
2013-02-16 15:37:55 -05:00
uint16_t DisposePtr(uint16_t trap);
2013-03-03 21:54:53 -05:00
uint16_t EmptyHandle(uint16_t trap);
uint16_t ReallocHandle(uint16_t trap);
2013-02-16 15:37:55 -05:00
uint32_t GetHandleSize(uint16_t);
uint32_t GetPtrSize(uint16_t);
2013-02-14 23:08:56 -05:00
uint16_t NewHandle(uint16_t trap);
2013-02-16 15:37:55 -05:00
uint16_t NewPtr(uint16_t trap);
2013-02-15 20:33:00 -05:00
uint16_t SetHandleSize(uint16_t);
2013-02-16 15:37:55 -05:00
uint16_t SetPtrSize(uint16_t);
2014-12-20 13:03:02 -05:00
uint32_t RecoverHandle(uint16_t);
2013-08-03 19:17:50 -04:00
uint16_t HGetState(uint16_t trap);
2015-01-05 11:56:33 -05:00
uint16_t HSetState(uint16_t trap);
2013-08-03 19:17:50 -04:00
2013-02-16 15:37:55 -05:00
uint16_t HLock(uint16_t trap);
uint16_t HUnlock(uint16_t trap);
2013-02-19 18:28:29 -05:00
2013-02-24 23:20:38 -05:00
uint16_t HPurge(uint16_t trap);
2015-01-14 14:26:49 -05:00
uint16_t HNoPurge(uint16_t trap);
2015-01-14 14:26:49 -05:00
uint16_t HSetRBit(uint16_t trap);
uint16_t HClrRBit(uint16_t trap);
2013-02-19 18:28:29 -05:00
uint16_t MoveHHi(uint16_t trap);
2013-02-25 17:33:26 -05:00
uint32_t StripAddress(uint16_t trap);
2013-02-26 18:32:39 -05:00
// operating system utility routines
uint16_t HandAndHand(uint16_t trap);
uint16_t HandToHand(uint16_t trap);
uint16_t PtrAndHand(uint16_t trap);
uint16_t PtrToHand(uint16_t trap);
uint16_t PtrToXHand(uint16_t trap);
2013-06-26 22:50:53 -04:00
uint32_t StackSpace(uint16_t trap);
uint16_t HandleZone(uint16_t trap);
2013-06-26 23:50:08 -04:00
uint16_t GetZone(uint16_t trap);
uint16_t SetZone(uint16_t trap);
2014-07-24 11:37:21 -04:00
uint16_t MaxApplZone(uint16_t trap);
2014-12-14 19:52:08 -05:00
2015-02-27 08:55:10 -05:00
uint16_t SetApplLimit(uint16_t trap);
2014-12-14 19:52:08 -05:00
// OS Dispatch
uint16_t TempMaxMem(void);
2014-12-18 14:40:03 -05:00
uint16_t TempFreeMem(void);
2014-12-28 18:15:27 -05:00
uint16_t TempNewHandle(void);
uint16_t TempHLock(void);
uint16_t TempHUnlock(void);
uint16_t TempDisposeHandle(void);
2013-02-07 22:12:30 -05:00
}
2013-02-15 00:08:22 -05:00
#endif