From 1871f85e7b379e7ffc793a0431ec9571988fd282 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Sat, 2 Mar 2013 17:39:54 -0500 Subject: [PATCH] HFS Dispatch (in design) --- toolbox/CMakeLists.txt | 1 + toolbox/os.h | 1 + toolbox/os_hfs_dispatch.cpp | 62 +++++++++++++++++++++++++++++++++++++ toolbox/toolbox.cpp | 12 ++++++- 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 toolbox/os_hfs_dispatch.cpp diff --git a/toolbox/CMakeLists.txt b/toolbox/CMakeLists.txt index 982905e..6b091e4 100644 --- a/toolbox/CMakeLists.txt +++ b/toolbox/CMakeLists.txt @@ -10,6 +10,7 @@ set(TOOLBOX_SRC mm.cpp os.cpp os_internal.cpp + os_hfs_dispatch.cpp os_highlevel.cpp qd.cpp sane.cpp diff --git a/toolbox/os.h b/toolbox/os.h index 2bee36c..8cca2be 100644 --- a/toolbox/os.h +++ b/toolbox/os.h @@ -150,6 +150,7 @@ namespace OS uint16_t TickCount(uint16_t trap); + uint16_t HFSDispatch(uint16_t trap); uint16_t HighLevelHFSDispatch(uint16_t trap); } diff --git a/toolbox/os_hfs_dispatch.cpp b/toolbox/os_hfs_dispatch.cpp new file mode 100644 index 0000000..5bc4e3b --- /dev/null +++ b/toolbox/os_hfs_dispatch.cpp @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include "os.h" +#include "os_internal.h" +#include "toolbox.h" +#include "stackframe.h" + +using ToolBox::Log; +using namespace ToolBox::Errors; + +namespace OS { + + uint16_t PBGetCatInfo(uint32_t paramBlock) + { + + return 0; + } + + uint16_t HFSDispatch(uint16_t trap) + { + + uint32_t selector = cpuGetDReg(0); + uint32_t paramBlock = cpuGetAReg(0); + + Log("%04x HFSDispatch(%08x, %08x)\n", trap, selector, paramBlock); + + switch (selector) + { + case 0x0009: + //return PBGetCatInfo(paramBlock); + //break; + + default: + fprintf(stderr, "HFSDispatch: selector %08x not implemented\n", + selector); + exit(1); + } + return 0; + } + + + +} diff --git a/toolbox/toolbox.cpp b/toolbox/toolbox.cpp index 508f4c0..4c50b4f 100644 --- a/toolbox/toolbox.cpp +++ b/toolbox/toolbox.cpp @@ -65,7 +65,10 @@ namespace ToolBox { d0 = OS::GetVol(trap); break; - + case 0xa260: + d0 = OS::HFSDispatch(trap); + break; + case 0xaa52: d0 = OS::HighLevelHFSDispatch(trap); break; @@ -256,6 +259,13 @@ namespace ToolBox { exit(255); } + if (d0) + { + int16_t v = (int16_t)d0; + Log(" -> %d\n", v); + } + + cpuSetDReg(0, d0); cpuSetFlagsNZ00NewW(d0); }