From eca05160940bbc686efeae8a3e22d10002c4c135 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Wed, 14 Jan 2015 14:26:49 -0500 Subject: [PATCH] HNoPurge toolcall --- toolbox/mm.cpp | 25 +++++++++++++++++++++++++ toolbox/mm.h | 5 +++++ toolbox/toolbox.cpp | 5 +++++ 3 files changed, 35 insertions(+) diff --git a/toolbox/mm.cpp b/toolbox/mm.cpp index 7ca6fc6..fced9d2 100644 --- a/toolbox/mm.cpp +++ b/toolbox/mm.cpp @@ -1235,6 +1235,31 @@ namespace MM return SetMemError(0); } + + uint16_t HNoPurge(uint16_t trap) + { + /* + * on entry: + * A0 Handle + * + * on exit: + * D0 Result code + * + */ + + + uint32_t hh = cpuGetAReg(0); + + Log("%04x HNoPurge(%08x)\n", trap, hh); + + auto iter = HandleMap.find(hh); + + if (iter == HandleMap.end()) return SetMemError(MacOS::memWZErr); + iter->second.purgeable = false; + + return SetMemError(0); + } + uint16_t HLock(uint16_t trap) { /* diff --git a/toolbox/mm.h b/toolbox/mm.h index 345956a..d50b721 100644 --- a/toolbox/mm.h +++ b/toolbox/mm.h @@ -68,7 +68,12 @@ namespace MM uint16_t HUnlock(uint16_t trap); uint16_t HPurge(uint16_t trap); + uint16_t HNoPurge(uint16_t trap); + uint16_t HSetRBit(uint16_t trap); + uint16_t HClrRBit(uint16_t trap); + + uint16_t MoveHHi(uint16_t trap); uint32_t StripAddress(uint16_t trap); diff --git a/toolbox/toolbox.cpp b/toolbox/toolbox.cpp index af8eb0b..29defe3 100644 --- a/toolbox/toolbox.cpp +++ b/toolbox/toolbox.cpp @@ -253,6 +253,11 @@ namespace ToolBox { d0 = MM::HPurge(trap); break; + case 0xa04a: + d0 = MM::HNoPurge(trap); + break; + + case 0xA11D: d0 = MM::MaxMem(trap); break;