6003a768 |
1 | \r |
619b1824 |
2 | // This file is part of the Cyclone 68000 Emulator\r |
3 | \r |
d9d77995 |
4 | // Copyright (c) 2004,2011 FinalDave (emudave (at) gmail.com)\r |
5 | // Copyright (c) 2005-2011 GraÅžvydas "notaz" Ignotas (notasas (at) gmail.com)\r |
c41b9b97 |
6 | \r |
619b1824 |
7 | // This code is licensed under the GNU General Public License version 2.0 and the MAME License.\r |
8 | // You can choose the license that has the most advantages for you.\r |
9 | \r |
10 | // SVN repository can be found at http://code.google.com/p/cyclone68000/\r |
11 | \r |
d9d77995 |
12 | \r |
6003a768 |
13 | #include <stdio.h>\r |
14 | #include <stdarg.h>\r |
15 | #include <stdlib.h>\r |
16 | #include <string.h>\r |
17 | \r |
d9d77995 |
18 | #ifndef CONFIG_FILE\r |
19 | #define CONFIG_FILE "config.h"\r |
20 | #endif\r |
21 | #include CONFIG_FILE\r |
22 | \r |
6003a768 |
23 | // Disa.c\r |
d9d77995 |
24 | #include "Disa/Disa.h"\r |
6003a768 |
25 | \r |
26 | // Ea.cpp\r |
65044ba9 |
27 | enum EaRWType {\r |
28 | earwt_sign_extend = 1,\r |
29 | earwt_zero_extend,\r |
30 | earwt_shifted_up,\r |
31 | earwt_msb_dont_care,\r |
32 | };\r |
33 | \r |
d9d77995 |
34 | extern int earead_check_addrerr;\r |
35 | extern int eawrite_check_addrerr;\r |
36 | extern int g_jmp_cycle_table[];\r |
37 | extern int g_jsr_cycle_table[];\r |
38 | extern int g_lea_cycle_table[];\r |
39 | extern int g_pea_cycle_table[];\r |
40 | extern int g_movem_cycle_table[];\r |
41 | int Ea_add_ns(int *tab, int ea); // add nonstandard EA cycles\r |
65044ba9 |
42 | int EaCalc(int a,int mask,int ea,int size,EaRWType type=earwt_sign_extend); // 6\r |
43 | int EaRead(int a,int v,int ea,int size,int mask,EaRWType type=earwt_sign_extend,int set_nz=0); // 8\r |
44 | int EaCalcRead(int r_ea,int r,int ea,int size,int mask,EaRWType type=earwt_sign_extend,int set_nz=0); // 7\r |
6003a768 |
45 | int EaCanRead(int ea,int size);\r |
65044ba9 |
46 | int EaWrite(int a,int v,int ea,int size,int mask,EaRWType type=earwt_sign_extend);\r |
6003a768 |
47 | int EaCanWrite(int ea);\r |
d9d77995 |
48 | int EaAn(int ea);\r |
6003a768 |
49 | \r |
50 | // Main.cpp\r |
d9d77995 |
51 | extern int *CyJump; // Jump table\r |
52 | extern int ms; // If non-zero, output in Microsoft ARMASM format\r |
53 | extern const char * const Narm[4]; // Normal ARM Extensions for operand sizes 0,1,2\r |
54 | extern const char * const Sarm[4]; // Sign-extend ARM Extensions for operand sizes 0,1,2\r |
55 | extern int Cycles; // Current cycles for opcode\r |
56 | extern int pc_dirty; // something changed PC during processing\r |
57 | extern int arm_op_count; // for stats\r |
19a2e095 |
58 | void ot(const char *format, ...)\r |
59 | #ifdef __GNUC__\r |
60 | __attribute__((format(printf, 1, 2)));\r |
61 | #endif\r |
62 | ;\r |
6003a768 |
63 | void ltorg();\r |
d9d77995 |
64 | int MemHandler(int type,int size,int addrreg=0,int need_addrerr_check=1);\r |
355815eb |
65 | void FlushPC(int force=0);\r |
6003a768 |
66 | \r |
67 | // OpAny.cpp\r |
d9d77995 |
68 | extern int g_op;\r |
69 | extern int opend_op_changes_cycles, opend_check_interrupt, opend_check_trace;\r |
70 | int OpGetFlags(int subtract,int xbit,int sprecialz=0);\r |
3504ce94 |
71 | void OpGetFlagsNZ(int rd);\r |
19881760 |
72 | void SignExtend(int rd, int rs, int size);\r |
73 | void ZeroExtend(int rd, int rs, int size);\r |
6003a768 |
74 | void OpUse(int op,int use);\r |
d9d77995 |
75 | void OpStart(int op,int sea=0,int tea=0,int op_changes_cycles=0,int supervisor_check=0);\r |
76 | void OpEnd(int sea=0,int tea=0);\r |
77 | int OpBase(int op,int size,int sepa=0);\r |
6003a768 |
78 | void OpAny(int op);\r |
79 | \r |
80 | //----------------------\r |
81 | // OpArith.cpp\r |
82 | int OpArith(int op);\r |
83 | int OpLea(int op);\r |
84 | int OpAddq(int op);\r |
85 | int OpArithReg(int op);\r |
86 | int OpMul(int op);\r |
87 | int OpAbcd(int op);\r |
d9d77995 |
88 | int OpNbcd(int op);\r |
6003a768 |
89 | int OpAritha(int op);\r |
90 | int OpAddx(int op);\r |
91 | int OpCmpEor(int op);\r |
d9d77995 |
92 | int OpCmpm(int op);\r |
93 | int OpChk(int op);\r |
94 | int GetXBit(int subtract);\r |
6003a768 |
95 | \r |
96 | // OpBranch.cpp\r |
97 | void OpPush32();\r |
98 | void OpPushSr(int high);\r |
99 | int OpTrap(int op);\r |
100 | int OpLink(int op);\r |
101 | int OpUnlk(int op);\r |
102 | int Op4E70(int op);\r |
103 | int OpJsr(int op);\r |
104 | int OpBranch(int op);\r |
105 | int OpDbra(int op);\r |
106 | \r |
107 | // OpLogic.cpp\r |
108 | int OpBtstReg(int op);\r |
109 | int OpBtstImm(int op);\r |
110 | int OpNeg(int op);\r |
111 | int OpSwap(int op);\r |
112 | int OpTst(int op);\r |
113 | int OpExt(int op);\r |
114 | int OpSet(int op);\r |
115 | int OpAsr(int op);\r |
116 | int OpAsrEa(int op);\r |
d9d77995 |
117 | int OpTas(int op, int gen_special=0);\r |
cfe17eee |
118 | const char *TestCond(int m68k_cc, int invert=0);\r |
6003a768 |
119 | \r |
120 | // OpMove.cpp\r |
121 | int OpMove(int op);\r |
122 | int OpLea(int op);\r |
123 | void OpFlagsToReg(int high);\r |
d9d77995 |
124 | void OpRegToFlags(int high,int srh_reg=0);\r |
6003a768 |
125 | int OpMoveSr(int op);\r |
126 | int OpArithSr(int op);\r |
127 | int OpPea(int op);\r |
128 | int OpMovem(int op);\r |
129 | int OpMoveq(int op);\r |
130 | int OpMoveUsp(int op);\r |
131 | int OpExg(int op);\r |
d9d77995 |
132 | int OpMovep(int op);\r |
133 | int OpStopReset(int op);\r |
134 | void SuperEnd(void);\r |
135 | void SuperChange(int op,int srh_reg=-1);\r |
136 | \r |