From f6f7964f819d67d3d323fb9fc8c0c8587de3412d Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Sun, 14 Dec 2014 19:52:08 -0500 Subject: [PATCH] OSDispatch call --- toolbox/mm.cpp | 21 +++++++++++++++++++++ toolbox/mm.h | 4 ++++ toolbox/toolbox.cpp | 27 +++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/toolbox/mm.cpp b/toolbox/mm.cpp index d7ff43d..4069dd5 100644 --- a/toolbox/mm.cpp +++ b/toolbox/mm.cpp @@ -40,6 +40,8 @@ #include #include +#include "stackframe.h" + using ToolBox::Log; namespace @@ -1485,4 +1487,23 @@ namespace MM cpuSetAReg(0, mplite_maxmem(&pool)); return mplite_freemem(&pool); } + + uint16_t TempMaxMem(void) + { + // FUNCTION TempMaxMem (VAR grow: Size): Size; + + uint32_t address; + + uint32_t sp = StackFrame<4>(address); + + Log(" TempMaxMem(%08x)\n", address); + + if (address) memoryWriteLong(0, address); + + ToolReturn<4>(sp, mplite_maxmem(&pool)); + SetMemError(0); // not sure if this is correct. oh well. + + return 0; + } + } diff --git a/toolbox/mm.h b/toolbox/mm.h index 725b3fd..e15a728 100644 --- a/toolbox/mm.h +++ b/toolbox/mm.h @@ -84,6 +84,10 @@ namespace MM uint16_t SetZone(uint16_t trap); uint16_t MaxApplZone(uint16_t trap); + + // OS Dispatch + + uint16_t TempMaxMem(void); } diff --git a/toolbox/toolbox.cpp b/toolbox/toolbox.cpp index fe7657f..6ba6ffb 100644 --- a/toolbox/toolbox.cpp +++ b/toolbox/toolbox.cpp @@ -42,6 +42,8 @@ #include "utility.h" #include "loader.h" #include "macos/traps.h" +#include "stackframe.h" + // yuck. TST.W d0 extern "C" void cpuSetFlagsNZ00NewW(UWO res); @@ -50,6 +52,27 @@ namespace ToolBox { bool Trace = false; + uint16_t OSDispatch(uint16_t trap) + { + uint16_t selector; + + + StackFrame<2>(selector); + Log("%04x OSDispatch(%04x)\n", trap, selector); + + switch(selector) + { + case 0x0015: + return MM::TempMaxMem(); + + default: + fprintf(stderr, "OSDispatch: selector %04x not implemented\n", + selector); + exit(1); + } + + } + void dispatch(uint16_t trap) { // todo -- check/remove extra bits for save a0, toolglue, etc. @@ -522,6 +545,10 @@ namespace ToolBox { d0 = Utility::BitTst(trap); break; + case 0xa88f: + d0 = OSDispatch(trap); + break; + default: fprintf(stderr, "Unsupported tool trap: %04x (%s)\n", trap, TrapName(trap));