First commit
[clinton/Virtual-Jaguar-Rx.git] / src / m68000 / cpudefs.h
1 //
2 // Common definitions for the UAE 68000 core
3 //
4 // by James Hammons
5 // (C) 2011 Underground Software
6 //
7 // This file is distributed under the GNU Public License, version 3 or at your
8 // option any later version. Read the file GPLv3 for details.
9 //
10
11 #ifndef __CPUDEFS_H__
12 #define __CPUDEFS_H__
13
14 #include "sysdeps.h"
15
16 /* Special flags */
17 #define SPCFLAG_DEBUGGER 0x001
18 #define SPCFLAG_STOP 0x002
19 #define SPCFLAG_BUSERROR 0x004
20 #define SPCFLAG_INT 0x008
21 #define SPCFLAG_BRK 0x010
22 #define SPCFLAG_EXTRA_CYCLES 0x020
23 #define SPCFLAG_TRACE 0x040
24 #define SPCFLAG_DOTRACE 0x080
25 #define SPCFLAG_DOINT 0x100
26 #define SPCFLAG_MFP 0x200
27 #define SPCFLAG_EXEC 0x400
28 #define SPCFLAG_MODE_CHANGE 0x800
29
30 struct regstruct
31 {
32 uint32_t regs[16];
33 uint32_t usp, isp;
34 uint16_t sr;
35 uint8_t s;
36 uint8_t stopped;
37 int intmask;
38 int intLevel;
39
40 unsigned int c;
41 unsigned int z;
42 unsigned int n;
43 unsigned int v;
44 unsigned int x;
45
46 uint32_t pc;
47 uint8_t * pc_p;
48 uint8_t * pc_oldp;
49
50 uint32_t spcflags;
51
52 uint32_t prefetch_pc;
53 uint32_t prefetch;
54
55 int32_t remainingCycles;
56 uint32_t interruptCycles;
57 };
58
59 extern struct regstruct regs, lastint_regs;
60
61 #define m68k_dreg(r, num) ((r).regs[(num)])
62 #define m68k_areg(r, num) (((r).regs + 8)[(num)])
63
64 #define ZFLG (regs.z)
65 #define NFLG (regs.n)
66 #define CFLG (regs.c)
67 #define VFLG (regs.v)
68 #define XFLG (regs.x)
69
70 /* Possible exceptions sources for M68000_Exception() and Exception() */
71 #define M68000_EXC_SRC_CPU 1 /* Direct CPU exception */
72 #define M68000_EXC_SRC_AUTOVEC 2 /* Auto-vector exception (e.g. VBL) */
73 //#define M68000_EXC_SRC_INT_MFP 3 /* MFP interrupt exception */
74 //#define M68000_EXC_SRC_INT_DSP 4 /* DSP interrupt exception */
75
76 #define SET_CFLG(x) (CFLG = (x))
77 #define SET_NFLG(x) (NFLG = (x))
78 #define SET_VFLG(x) (VFLG = (x))
79 #define SET_ZFLG(x) (ZFLG = (x))
80 #define SET_XFLG(x) (XFLG = (x))
81
82 #define GET_CFLG CFLG
83 #define GET_NFLG NFLG
84 #define GET_VFLG VFLG
85 #define GET_ZFLG ZFLG
86 #define GET_XFLG XFLG
87
88 #define CLEAR_CZNV do { \
89 SET_CFLG(0); \
90 SET_ZFLG(0); \
91 SET_NFLG(0); \
92 SET_VFLG(0); \
93 } while (0)
94
95 #define COPY_CARRY (SET_XFLG(GET_CFLG))
96
97 #endif // __CPUDEFS_H__