picodrive/cpu/sh2mame/sh2.h
notaz 1d7a28a723 32x: watchdog for Star Wars, SCI IRQs for X-men (also needs idle loop hacks)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@799 be3aeb3a-fb24-0410-a615-afba39da0efa
2009-10-01 20:53:36 +00:00

65 lines
2.1 KiB
C

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