From 1f9b10a59e655294832c361d4467985a93f43ae0 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Fri, 15 Feb 2013 20:42:20 -0500 Subject: [PATCH] UnloadSeg, use StackFrame templates --- toolbox/rm.cpp | 78 +++++++++++++++------------------------------ toolbox/rm.h | 3 ++ toolbox/toolbox.cpp | 5 +++ 3 files changed, 34 insertions(+), 52 deletions(-) diff --git a/toolbox/rm.cpp b/toolbox/rm.cpp index 6183763..e8534a1 100644 --- a/toolbox/rm.cpp +++ b/toolbox/rm.cpp @@ -6,54 +6,7 @@ #include #include - -namespace -{ - - uint32_t PopLong() - { - uint32_t sp = cpuGetAReg(7); - uint32_t value = memoryReadLong(sp); - cpuSetAReg(7, sp + 4); - return value; - } - - - uint16_t PopWord() - { - uint32_t sp = cpuGetAReg(7); - uint16_t value = memoryReadWord(sp); - cpuSetAReg(7, sp + 2); - return value; - } - - uint32_t StackFrame(uint32_t &b, uint32_t &a) - { - uint32_t sp = cpuGetAReg(7); - a = memoryReadLong(sp); sp += 4; - b = memoryReadLong(sp); sp += 4; - cpuSetAReg(7, sp); - - return sp; - } - - uint32_t StackFrame(uint32_t &b, uint16_t &a) - { - uint32_t sp = cpuGetAReg(7); - a = memoryReadWord(sp); sp += 2; - b = memoryReadLong(sp); sp += 4; - cpuSetAReg(7, sp); - - return sp; - } - - void ToolReturn(uint32_t sp, uint32_t value) - { - memoryWriteLong(value, sp); - } - - -} +#include "stackframe.h" namespace RM { @@ -78,13 +31,13 @@ namespace RM uint32_t theType; uint32_t name; - sp = StackFrame(theType, name); + sp = StackFrame<8>(theType, name); std::string sname = ToolBox::ReadPString(name); fprintf(stderr, "%04x Get1NamedResource(%08x, %s)\n", trap, theType, sname.c_str()); - ToolReturn(sp, (uint32_t)0); + ToolReturn<4>(sp, 0); return -192; } @@ -109,12 +62,33 @@ namespace RM uint32_t theType; uint16_t theID; - sp = StackFrame(theType, theID); + sp = StackFrame<6>(theType, theID); fprintf(stderr, "%04x GetResource(%08x, %04x)\n", trap, theType, theID); - ToolReturn(sp, (uint32_t)0); + ToolReturn<4>(sp, 0); return -192; } + uint16_t UnloadSeg(uint16_t trap) + { + // UnloadSeg (routineAddr: Ptr); + + /* + * ------------ + * +0 routineAddr + * ------------ + * + */ + + uint32_t sp; + uint32_t routineAddr; + + sp = StackFrame<4>(routineAddr); + + fprintf(stderr, "%04x UnloadSeg(%08x)\n", trap, routineAddr); + + return 0; + } + } diff --git a/toolbox/rm.h b/toolbox/rm.h index d6f8889..73e9302 100644 --- a/toolbox/rm.h +++ b/toolbox/rm.h @@ -8,6 +8,9 @@ namespace RM uint16_t Get1NamedResource(uint16_t trap); uint16_t GetResource(uint16_t trap); + + uint16_t UnloadSeg(uint16_t trap); } + #endif \ No newline at end of file diff --git a/toolbox/toolbox.cpp b/toolbox/toolbox.cpp index ff3ccf8..fe43ebf 100644 --- a/toolbox/toolbox.cpp +++ b/toolbox/toolbox.cpp @@ -116,6 +116,11 @@ namespace ToolBox { d0 = RM::GetResource(trap); break; + // UnloadSeg (routineAddr: Ptr); + case 0xa9f1: + d0 = RM::UnloadSeg(trap); + break; + // quickdraw (AsmIIgs ... ) // _ShowCursor();