summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/sh2/sh2.h
blob: 7436b1b24ae7d63b6ffa7078c381144348537bea (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*****************************************************************************
 *
 *   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__

#include "cpuintrf.h"

#define SH2_INT_NONE	-1
#define SH2_INT_VBLIN	0
#define SH2_INT_VBLOUT	1
#define SH2_INT_HBLIN	2
#define SH2_INT_TIMER0	3
#define SH2_INT_TIMER1	4
#define SH2_INT_DSP 	5
#define SH2_INT_SOUND	6
#define SH2_INT_SMPC	7
#define SH2_INT_PAD 	8
#define SH2_INT_DMA2	9
#define SH2_INT_DMA1	10
#define SH2_INT_DMA0	11
#define SH2_INT_DMAILL	12
#define SH2_INT_SPRITE	13
#define SH2_INT_14		14
#define SH2_INT_15		15
#define SH2_INT_ABUS	16

enum
{
	SH2_PC=1, SH2_SR, SH2_PR, SH2_GBR, SH2_VBR, SH2_MACH, SH2_MACL,
	SH2_R0, SH2_R1, SH2_R2, SH2_R3, SH2_R4, SH2_R5, SH2_R6, SH2_R7,
	SH2_R8, SH2_R9, SH2_R10, SH2_R11, SH2_R12, SH2_R13, SH2_R14, SH2_R15, SH2_EA
};

enum
{
	CPUINFO_INT_SH2_FRT_INPUT = CPUINFO_INT_CPU_SPECIFIC,

	CPUINFO_INT_SH2_DRC_OPTIONS,

	CPUINFO_INT_SH2_FASTRAM_SELECT,
	CPUINFO_INT_SH2_FASTRAM_START,
	CPUINFO_INT_SH2_FASTRAM_END,
	CPUINFO_INT_SH2_FASTRAM_READONLY,

	CPUINFO_INT_SH2_HOTSPOT_SELECT,
	CPUINFO_INT_SH2_HOTSPOT_PC,
	CPUINFO_INT_SH2_HOTSPOT_OPCODE,
	CPUINFO_INT_SH2_HOTSPOT_CYCLES,

	CPUINFO_INT_SH2_PCFLUSH_SELECT,
	CPUINFO_INT_SH2_PCFLUSH_ADDR
};

enum
{
	CPUINFO_PTR_SH2_FTCSR_READ_CALLBACK = CPUINFO_PTR_CPU_SPECIFIC,

	CPUINFO_PTR_SH2_FASTRAM_BASE
};

typedef struct _sh2_cpu_core sh2_cpu_core;
struct _sh2_cpu_core
{
  int is_slave;
  int  (*dma_callback_kludge)(UINT32 src, UINT32 dst, UINT32 data, int size);
};

extern CPU_GET_INFO( sh2 );

WRITE32_HANDLER( sh2_internal_w );
READ32_HANDLER( sh2_internal_r );

extern unsigned DasmSH2( char *dst, unsigned pc, UINT16 opcode );

/***************************************************************************
    COMPILER-SPECIFIC OPTIONS
***************************************************************************/

#define SH2DRC_STRICT_VERIFY		0x0001			/* verify all instructions */
#define SH2DRC_FLUSH_PC			0x0002			/* flush the PC value before each memory access */
#define SH2DRC_STRICT_PCREL		0x0004			/* do actual loads on MOVLI/MOVWI instead of collapsing to immediates */

#define SH2DRC_COMPATIBLE_OPTIONS	(SH2DRC_STRICT_VERIFY | SH2DRC_FLUSH_PC | SH2DRC_STRICT_PCREL)
#define SH2DRC_FASTEST_OPTIONS	(0)

#endif /* __SH2_H__ */