diff options
Diffstat (limited to 'SrcShared/Hardware/EmUAEGlue.cpp')
-rw-r--r-- | SrcShared/Hardware/EmUAEGlue.cpp | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/SrcShared/Hardware/EmUAEGlue.cpp b/SrcShared/Hardware/EmUAEGlue.cpp new file mode 100644 index 0000000..351fa43 --- /dev/null +++ b/SrcShared/Hardware/EmUAEGlue.cpp @@ -0,0 +1,166 @@ +/* -*- mode: C++; tab-width: 4 -*- */ +/* ===================================================================== *\ + Copyright (c) 1999-2001 Palm, Inc. or its subsidiaries. + All rights reserved. + + This file is part of the Palm OS Emulator. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +\* ===================================================================== */ + +#include "EmCommon.h" +#include "EmUAEGlue.h" + +#include "EmCPU68K.h" // ProcessException, etc. +#include "EmSession.h" // gSession->Reset +#include "Platform.h" // AllocateMemory +#include "UAE.h" // MakeSR, uae_s32, etc. + + +// --------------------------------------------------------------------------- +// Glue functions to bridge from UAE-generated code to the implemenations +// we define. +// --------------------------------------------------------------------------- + +void customreset (void) +{ + EmAssert (gSession); + + gSession->ScheduleReset (kResetSoft); +} + + +void Exception (int nr, emuptr /*oldpc*/) +{ + EmAssert (gCPU68K); + + gCPU68K->ProcessException ((ExceptionNumber) nr); +} + + +unsigned long op_illg (uint32 iOpcode) +{ + EmAssert (gCPU68K); + + gCPU68K->ProcessIllegalInstruction (iOpcode); + return 0; +} + + +void Software_ProcessLINK (int32 linkSize) +{ + EmAssert (gCPU68K); + + gCPU68K->ProcessLINK (linkSize); +} + + +int Software_ProcessRTS (emuptr dest) +{ + EmAssert (gCPU68K); + + gCPU68K->CheckNewPC (dest); + return gCPU68K->ProcessRTS (dest); +} + + +int Software_ProcessRTE (emuptr dest) +{ + EmAssert (gCPU68K); + + gCPU68K->CheckNewPC (dest); + return gCPU68K->ProcessRTE (dest); +} + + +int Software_ProcessJSR (emuptr oldpc, emuptr dest) +{ + EmAssert (gCPU68K); + + gCPU68K->CheckNewPC (dest); + return gCPU68K->ProcessJSR (oldpc, dest); +} + + +int Software_ProcessJSR_Ind (emuptr oldpc, emuptr dest) +{ + EmAssert (gCPU68K); + + return gCPU68K->ProcessJSR_Ind (oldpc, dest); +} + + +void Software_CheckNewPC (emuptr dest) +{ + EmAssert (gCPU68K); + + gCPU68K->CheckNewPC (dest); +} + + +void Software_CheckStackPointerAssignment () +{ + EmAssert (gCPU68K); + + gCPU68K->CheckNewSP (kStackPointerChanged); +} + + +void Software_CheckStackPointerDecrement () +{ + EmAssert (gCPU68K); + + gCPU68K->CheckNewSP (kStackPointerDecremented); +} + + +void Software_CheckStackPointerIncrement () +{ + EmAssert (gCPU68K); + + gCPU68K->CheckNewSP (kStackPointerIncremented); +} + + +void Software_CheckKernelStack () +{ + EmAssert (gCPU68K); + + gCPU68K->CheckNewSP (kStackPointerKernelStackHack); +} + + +void MakeSR (void) +{ + EmAssert (gCPU68K); + + gCPU68K->UpdateSRFromRegisters (); +} + + +void MakeFromSR (void) +{ + EmAssert (gCPU68K); + + gCPU68K->UpdateRegistersFromSR (); +} + + +void* xmalloc (size_t size) +{ + return Platform::AllocateMemory (size); +} + +uint32 get_disp_ea_000 (uint32 base, uint32 dp) +{ + int reg = (dp >> 12) & 15; + uae_s32 regd = regs.regs[reg]; + + if ((dp & 0x800) == 0) + regd = (uae_s32)(uae_s16)regd; + + return base + (uae_s8)dp + regd; +} |