1 #ifndef UAE_READCPU_H
2 #define UAE_READCPU_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 typedef enum {
9   Dreg, Areg, Aind, Aipi, Apdi, Ad16, Ad8r,
10   absw, absl, PC16, PC8r, imm, imm0, imm1, imm2, immi, am_unknown, am_illg
11 } amodes;
12 
13 typedef enum {
14     i_ILLG,
15 
16     i_OR, i_AND, i_EOR, i_ORSR, i_ANDSR, i_EORSR,
17     i_SUB, i_SUBA, i_SUBX, i_SBCD,
18     i_ADD, i_ADDA, i_ADDX, i_ABCD,
19     i_NEG, i_NEGX, i_NBCD, i_CLR, i_NOT, i_TST,
20     i_BTST, i_BCHG, i_BCLR, i_BSET,
21     i_CMP, i_CMPM, i_CMPA,
22     i_MVPRM, i_MVPMR, i_MOVE, i_MOVEA, i_MVSR2, i_MV2SR,
23     i_SWAP, i_EXG, i_EXT, i_MVMEL, i_MVMLE,
24     i_TRAP, i_MVR2USP, i_MVUSP2R, i_RESET, i_NOP, i_STOP, i_RTE, i_RTD,
25     i_LINK, i_UNLK,
26     i_RTS, i_TRAPV, i_RTR,
27     i_JSR, i_JMP, i_BSR, i_Bcc,
28     i_LEA, i_PEA, i_DBcc, i_Scc,
29     i_DIVU, i_DIVS, i_MULU, i_MULS,
30     i_ASR, i_ASL, i_LSR, i_LSL, i_ROL, i_ROR, i_ROXL, i_ROXR,
31     i_ASRW, i_ASLW, i_LSRW, i_LSLW, i_ROLW, i_RORW, i_ROXLW, i_ROXRW,
32     i_CHK,i_CHK2,
33     i_MOVEC2, i_MOVE2C, i_CAS, i_CAS2, i_DIVL, i_MULL,
34     i_BFTST,i_BFEXTU,i_BFCHG,i_BFEXTS,i_BFCLR,i_BFFFO,i_BFSET,i_BFINS,
35     i_PACK, i_UNPK, i_TAS, i_BKPT, i_CALLM, i_RTM, i_TRAPcc, i_MOVES,
36     i_FPP, i_FDBcc, i_FScc, i_FTRAPcc, i_FBcc, i_FSAVE, i_FRESTORE,
37     i_CINVL, i_CINVP, i_CINVA, i_CPUSHL, i_CPUSHP, i_CPUSHA, i_MOVE16,
38     i_MMUOP, i_EMULOP_RETURN, i_EMULOP, i_NATFEAT_ID, i_NATFEAT_CALL
39 } instrmnem;
40 
41 extern struct mnemolookup {
42     instrmnem mnemo;
43     const char *name;
44 } lookuptab[];
45 
46 typedef enum {
47     sz_byte, sz_word, sz_long
48 } wordsizes;
49 
50 typedef enum {
51     fa_set, fa_unset, fa_zero, fa_one, fa_dontcare, fa_unknown, fa_isjmp,
52     fa_isbranch
53 } flagaffect;
54 
55 typedef enum {
56     fu_used, fu_unused, fu_maybecc, fu_unknown, fu_isjmp
57 } flaguse;
58 
59 typedef enum {
60     fl_normal		= 0,
61     fl_branch		= 1,
62     fl_jump		= 2,
63     fl_return		= 3,
64     fl_trap		= 4,
65     fl_const_jump	= 8,
66     /* Instructions that can trap don't mark the end of a block */
67     fl_end_block	= 3
68 } cflow_t;
69 
70 typedef enum {
71     bit0, bit1, bitc, bitC, bitf, biti, bitI, bitj, bitJ, bitk, bitK,
72     bits, bitS, bitd, bitD, bitr, bitR, bitz, bitE, bitp, lastbit
73 } bitvals;
74 
75 struct instr_def {
76     unsigned int bits;
77     int n_variable;
78     char bitpos[16];
79     unsigned int mask;
80     int cpulevel;
81     int plevel;
82     struct {
83 	unsigned int flaguse:3;
84 	unsigned int flagset:3;
85     } flaginfo[5];
86     unsigned char cflow;
87     unsigned char sduse;
88     const char *opcstr;
89 };
90 
91 extern struct instr_def defs68k[];
92 extern int n_defs68k;
93 
94 extern struct instr {
95     long int handler;
96     unsigned char dreg;
97     unsigned char sreg;
98     signed char dpos;
99     signed char spos;
100     unsigned char sduse;
101     int flagdead:8, flaglive:8;
102     unsigned int mnemo:8;
103     unsigned int cc:4;
104     unsigned int plev:2;
105     wordsizes size:2;
106     amodes smode:5;
107     unsigned int stype:3;
108     amodes dmode:5;
109     unsigned int suse:1;
110     unsigned int duse:1;
111     unsigned int unused1:1;
112     unsigned int clev:3;
113     unsigned int cflow:3;
114     unsigned int unused2:2;
115 } *table68k;
116 
117 extern void init_table68k(void);
118 extern void exit_table68k(void);
119 extern int nr_cpuop_funcs;
120 
121 #ifdef __cplusplus
122 }
123 #endif
124 
125 #endif
126