-/*****************************************************************************\r
- *\r
- * sh2.h\r
- * Portable Hitachi SH-2 (SH7600 family) emulator interface\r
- *\r
- * Copyright Juergen Buchmueller <pullmoll@t-online.de>,\r
- * all rights reserved.\r
- *\r
- * - This source code is released as freeware for non-commercial purposes.\r
- * - You are free to use and redistribute this code in modified or\r
- * unmodified form, provided you list me in the credits.\r
- * - If you modify this source code, you must add a notice to each modified\r
- * source file that it has been changed. If you're a nice person, you\r
- * will clearly mark each change too. :)\r
- * - If you wish to use this for commercial purposes, please contact me at\r
- * pullmoll@t-online.de\r
- * - The author of this copywritten work reserves the right to change the\r
- * terms of its usage and license at any time, including retroactively\r
- * - This entire notice must remain in the source code.\r
- *\r
- * This work is based on <tiraniddo@hotmail.com> C/C++ implementation of\r
- * the SH-2 CPU core and was heavily changed to the MAME CPU requirements.\r
- * Thanks also go to Chuck Mason <chukjr@sundail.net> and Olivier Galibert\r
- * <galibert@pobox.com> for letting me peek into their SEMU code :-)\r
- *\r
- *****************************************************************************/\r
-\r
-#pragma once\r
-\r
-#ifndef __SH2_H__\r
-#define __SH2_H__\r
-\r
-typedef struct\r
-{\r
- unsigned int r[16];\r
- unsigned int ppc;\r
- unsigned int pc;\r
- unsigned int pr;\r
- unsigned int sr;\r
- unsigned int gbr, vbr;\r
- unsigned int mach, macl;\r
-\r
- unsigned int ea;\r
- unsigned int delay;\r
- unsigned int test_irq;\r
-\r
- int pending_irl;\r
- int pending_int_irq; // internal irq\r
- int pending_int_vector;\r
- void (*irq_callback)(int id, int level);\r
- int is_slave;\r
-\r
- unsigned int cycles_aim; // subtract sh2_icount to get global counter\r
-} SH2;\r
-\r
-SH2 *sh2; // active sh2\r
-extern int sh2_icount;\r
-\r
-void sh2_init(SH2 *sh2, int is_slave);\r
-void sh2_reset(SH2 *sh2);\r
-int sh2_execute(SH2 *sh2_, int cycles);\r
-void sh2_irl_irq(SH2 *sh2, int level);\r
-void sh2_internal_irq(SH2 *sh2, int level, int vector);\r
-\r
-#endif /* __SH2_H__ */\r