1 | /*****************************************************************************/ |
2 | /* */ |
3 | /* cpu.h */ |
4 | /* */ |
5 | /* CPU specifications */ |
6 | /* */ |
7 | /* */ |
8 | /* */ |
9 | /* (C) 2003-2011, Ullrich von Bassewitz */ |
10 | /* Roemerstrasse 52 */ |
11 | /* D-70794 Filderstadt */ |
12 | /* EMail: uz@cc65.org */ |
13 | /* */ |
14 | /* */ |
15 | /* This software is provided 'as-is', without any expressed or implied */ |
16 | /* warranty. In no event will the authors be held liable for any damages */ |
17 | /* arising from the use of this software. */ |
18 | /* */ |
19 | /* Permission is granted to anyone to use this software for any purpose, */ |
20 | /* including commercial applications, and to alter it and redistribute it */ |
21 | /* freely, subject to the following restrictions: */ |
22 | /* */ |
23 | /* 1. The origin of this software must not be misrepresented; you must not */ |
24 | /* claim that you wrote the original software. If you use this software */ |
25 | /* in a product, an acknowledgment in the product documentation would be */ |
26 | /* appreciated but is not required. */ |
27 | /* 2. Altered source versions must be plainly marked as such, and must not */ |
28 | /* be misrepresented as being the original software. */ |
29 | /* 3. This notice may not be removed or altered from any source */ |
30 | /* distribution. */ |
31 | /* */ |
32 | /*****************************************************************************/ |
33 | |
34 | |
35 | |
36 | #ifndef CPU_H |
37 | #define CPU_H |
38 | |
39 | |
40 | |
41 | /*****************************************************************************/ |
42 | /* Data */ |
43 | /*****************************************************************************/ |
44 | |
45 | |
46 | |
47 | /* CPUs */ |
48 | typedef enum { |
49 | CPU_UNKNOWN = -1, /* Not specified or invalid target */ |
50 | CPU_NONE, /* No CPU - for assembler */ |
51 | CPU_6502, |
52 | CPU_6502X, /* "Extended", that is: with illegal opcodes */ |
53 | CPU_65SC02, |
54 | CPU_65C02, |
55 | CPU_65816, |
56 | CPU_SWEET16, |
57 | CPU_HUC6280, /* Used in PC engine */ |
58 | CPU_M740, /* Mitsubishi 740 series MCUs */ |
59 | CPU_4510, /* CPU of C65 */ |
60 | CPU_COUNT /* Number of different CPUs */ |
61 | } cpu_t; |
62 | |
63 | /* CPU instruction sets */ |
64 | enum { |
65 | CPU_ISET_NONE = 1 << CPU_NONE, |
66 | CPU_ISET_6502 = 1 << CPU_6502, |
67 | CPU_ISET_6502X = 1 << CPU_6502X, |
68 | CPU_ISET_65SC02 = 1 << CPU_65SC02, |
69 | CPU_ISET_65C02 = 1 << CPU_65C02, |
70 | CPU_ISET_65816 = 1 << CPU_65816, |
71 | CPU_ISET_SWEET16 = 1 << CPU_SWEET16, |
72 | CPU_ISET_HUC6280 = 1 << CPU_HUC6280, |
73 | CPU_ISET_M740 = 1 << CPU_M740, |
74 | CPU_ISET_4510 = 1 << CPU_4510, |
75 | }; |
76 | |
77 | /* CPU used */ |
78 | extern cpu_t CPU; |
79 | |
80 | /* Table with CPU names */ |
81 | extern const char* CPUNames[CPU_COUNT]; |
82 | |
83 | /* Table with CPU the instruction sets */ |
84 | extern const unsigned CPUIsets[CPU_COUNT]; |
85 | |
86 | |
87 | |
88 | /*****************************************************************************/ |
89 | /* Code */ |
90 | /*****************************************************************************/ |
91 | |
92 | |
93 | |
94 | int ValidAddrSizeForCPU (unsigned char AddrSize); |
95 | /* Check if the given address size is valid for the current CPU */ |
96 | |
97 | cpu_t FindCPU (const char* Name); |
98 | /* Find a CPU by name and return the target id. CPU_UNKNOWN is returned if |
99 | ** the given name is no valid target. |
100 | */ |
101 | |
102 | |
103 | |
104 | /* End of cpu.h */ |
105 | |
106 | #endif |
107 | |