diff --git a/toolbox/CMakeLists.txt b/toolbox/CMakeLists.txt index da3e81d..7f0199c 100644 --- a/toolbox/CMakeLists.txt +++ b/toolbox/CMakeLists.txt @@ -29,6 +29,7 @@ set(TOOLBOX_SRC realpath.c dispatch.cpp fpinfo.cpp + debug.cpp ) diff --git a/toolbox/debug.cpp b/toolbox/debug.cpp new file mode 100644 index 0000000..c037673 --- /dev/null +++ b/toolbox/debug.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2016, 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 "debug.h" +#include "toolbox.h" + +#include +#include +#include + +#include "stackframe.h" + +using ToolBox::Log; + +namespace Debug { + + // pascal void DebugStr(ConstStr255Param debuggerMsg) + uint16_t DebugStr(uint16_t trap) + { + + uint32_t theString; + uint32_t sp; + + std::string s; + + sp = StackFrame<4>(theString); + + s = ToolBox::ReadPString(theString); + + Log("%04x DebugStr(%s)\n", trap, s.c_str()); + fprintf(stderr, "%s\n", s.c_str()); + return 0; + } +} diff --git a/toolbox/debug.h b/toolbox/debug.h new file mode 100644 index 0000000..78b4ba4 --- /dev/null +++ b/toolbox/debug.h @@ -0,0 +1,13 @@ +#ifndef __mpw_debug_h__ +#define __mpw_debug_h__ + +#include + +namespace Debug +{ + + uint16_t DebugStr(uint16_t trap); + +} + +#endif diff --git a/toolbox/dispatch.cpp b/toolbox/dispatch.cpp index 2a9bba0..e2a2901 100644 --- a/toolbox/dispatch.cpp +++ b/toolbox/dispatch.cpp @@ -48,6 +48,7 @@ #include "stackframe.h" #include "toolbox.h" #include "utility.h" +#include "debug.h" #include #include @@ -1094,6 +1095,11 @@ namespace ToolBox { d0 = OS::OSDispatch(trap); break; + case 0xABFF: + d0 = Debug::DebugStr(trap); + break; + + default: fprintf(stderr, "Unsupported tool trap: %04x (%s)\n", trap, TrapName(trap)); diff --git a/toolbox/toolbox.cpp b/toolbox/toolbox.cpp index 6b4b454..b127474 100644 --- a/toolbox/toolbox.cpp +++ b/toolbox/toolbox.cpp @@ -51,6 +51,7 @@ #include "sane.h" #include "stackframe.h" #include "utility.h" +#include "debug.h" @@ -665,6 +666,11 @@ namespace ToolBox { d0 = OSDispatch(trap); break; + + case 0xABFF: + d0 = Debug::DebugStr(trap); + break; + default: fprintf(stderr, "Unsupported tool trap: %04x (%s)\n", trap, TrapName(trap));