From 5130649a9edca0d7d170af96b87a9a924eaf13cd Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Thu, 15 Aug 2013 23:35:39 -0400 Subject: [PATCH] loader.cpp --- toolbox/loader.cpp | 73 +++++++++++++++++++++++++++++++++++++++++++++ toolbox/loader.h | 12 ++++++++ toolbox/rm.cpp | 25 ---------------- toolbox/rm.h | 2 -- toolbox/toolbox.cpp | 13 ++++---- 5 files changed, 92 insertions(+), 33 deletions(-) create mode 100644 toolbox/loader.cpp create mode 100644 toolbox/loader.h diff --git a/toolbox/loader.cpp b/toolbox/loader.cpp new file mode 100644 index 0000000..c1e67f3 --- /dev/null +++ b/toolbox/loader.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2013, Kelvin W Sherlock + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include + +#include "loader.h" +#include "toolbox.h" +#include "stackframe.h" + + + +using ToolBox::Log; + +namespace Loader { + + + /* + * struct { uint32_t a5; uint32_t pc; }; + * future state: Native::LoadFile(const std::string &path, a5pc) -> + * load file, set global page variables, set A5, return PC. + * + */ + + + uint16_t UnloadSeg(uint16_t trap) + { + // UnloadSeg (routineAddr: Ptr); + + /* + * ------------ + * +0 routineAddr + * ------------ + * + */ + + uint32_t sp; + uint32_t routineAddr; + + sp = StackFrame<4>(routineAddr); + + Log("%04x UnloadSeg(%08x)\n", trap, routineAddr); + + return 0; + } + + + +} \ No newline at end of file diff --git a/toolbox/loader.h b/toolbox/loader.h new file mode 100644 index 0000000..9bc5f1c --- /dev/null +++ b/toolbox/loader.h @@ -0,0 +1,12 @@ +#ifndef __mpw_loader_h__ +#define __mpw_loader_h__ + +#include + +namespace Loader { + + uint16_t UnloadSeg(uint16_t trap); + +} + +#endif diff --git a/toolbox/rm.cpp b/toolbox/rm.cpp index b2e2799..91bddf7 100644 --- a/toolbox/rm.cpp +++ b/toolbox/rm.cpp @@ -916,29 +916,4 @@ namespace RM } - - - - // todo -- move since it's not RM related. - uint16_t UnloadSeg(uint16_t trap) - { - // UnloadSeg (routineAddr: Ptr); - - /* - * ------------ - * +0 routineAddr - * ------------ - * - */ - - uint32_t sp; - uint32_t routineAddr; - - sp = StackFrame<4>(routineAddr); - - Log("%04x UnloadSeg(%08x)\n", trap, routineAddr); - - return 0; - } - } diff --git a/toolbox/rm.h b/toolbox/rm.h index f71b6e8..d588c42 100644 --- a/toolbox/rm.h +++ b/toolbox/rm.h @@ -19,8 +19,6 @@ namespace RM uint16_t Get1Resource(uint16_t trap); uint16_t Get1IndResource(uint16_t trap); - uint16_t UnloadSeg(uint16_t trap); - uint16_t ReleaseResource(uint16_t trap); uint16_t ResError(uint16_t trap); diff --git a/toolbox/toolbox.cpp b/toolbox/toolbox.cpp index c61d0db..e80c3f8 100644 --- a/toolbox/toolbox.cpp +++ b/toolbox/toolbox.cpp @@ -40,7 +40,7 @@ #include "qd.h" #include "sane.h" #include "utility.h" - +#include "loader.h" // yuck. TST.W d0 extern "C" void cpuSetFlagsNZ00NewW(UWO res); @@ -421,11 +421,6 @@ namespace ToolBox { d0 = RM::OpenRFPerm(trap); break; - // UnloadSeg (routineAddr: Ptr); - case 0xa9f1: - d0 = RM::UnloadSeg(trap); - break; - case 0xa9f6: d0 = RM::GetResFileAttrs(trap); break; @@ -435,6 +430,12 @@ namespace ToolBox { break; + // UnloadSeg (routineAddr: Ptr); + case 0xa9f1: + d0 = Loader::UnloadSeg(trap); + break; + + // quickdraw (AsmIIgs ... ) // _ShowCursor();