diff --git a/toolbox/qd.cpp b/toolbox/qd.cpp new file mode 100644 index 0000000..f8ffafb --- /dev/null +++ b/toolbox/qd.cpp @@ -0,0 +1,73 @@ +#include "qd.h" +#include "toolbox.h" + +#include +#include +#include + + +namespace +{ + + uint32_t StackFrame(uint32_t &a) + { + uint32_t sp = cpuGetAReg(7); + a = memoryReadLong(sp); sp += 4; + cpuSetAReg(7, sp); + + return sp; + } + + uint32_t StackFrame(uint16_t &a) + { + uint32_t sp = cpuGetAReg(7); + a = memoryReadWord(sp); sp += 2; + cpuSetAReg(7, sp); + + return sp; + } + + void ToolReturn(uint32_t sp, uint32_t value) + { + memoryWriteLong(value, sp); + } + +} + +namespace QD { + + + uint16_t ShowCursor(uint16_t trap) + { + fprintf(stderr, "%04x ShowCursor()\n", trap); + return 0; + } + + uint16_t GetCursor(uint16_t trap) + { + uint32_t sp; + uint16_t cursorID; + + sp = StackFrame(cursorID); + + fprintf(stderr, "%04x GetCursor(%04x)\n", trap, cursorID); + + + ToolReturn(sp, 0); + return 0; + } + + uint16_t SetCursor(uint16_t trap) + { + uint32_t sp; + uint32_t cursor; + + sp = StackFrame(cursor); + + fprintf(stderr, "%04x SetCursor(%08x)\n", trap, cursor); + + return 0; + } + + +} \ No newline at end of file diff --git a/toolbox/qd.h b/toolbox/qd.h new file mode 100644 index 0000000..c727298 --- /dev/null +++ b/toolbox/qd.h @@ -0,0 +1,15 @@ +#ifndef __mpw_qd_h__ +#define __mpw_qd_h__ + +#include + +namespace QD +{ + + uint16_t ShowCursor(uint16_t trap); + uint16_t GetCursor(uint16_t trap); + uint16_t SetCursor(uint16_t trap); + +} + +#endif diff --git a/toolbox/toolbox.cpp b/toolbox/toolbox.cpp index f678c26..dc57eee 100644 --- a/toolbox/toolbox.cpp +++ b/toolbox/toolbox.cpp @@ -11,6 +11,7 @@ #include "rm.h" #include "mm.h" #include "os.h" +#include "qd.h" #include "mpw_time.h" @@ -90,13 +91,28 @@ namespace ToolBox { d0 = RM::GetResource(trap); break; - // quickdraw + // quickdraw (AsmIIgs ... ) // _ShowCursor(); case 0xA853: - d0 = 0; + d0 = QD::ShowCursor(trap); + break; + + // GetCursor (cursorlD: INTEGER) : CursHandle; + case 0xA9B9: + d0 = QD::GetCursor(trap); + break; + + + //SetCursor (crsr: Cursor) + case 0xA851: + d0 = QD::SetCursor(trap); + break; + + // GetFNum (fontName: Str255; VAR theNum: INTEGER); + case 0xa900: + d0 = QD::GetFNum(trap); break; - default: