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 */
48typedef 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 */
64enum {
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 */
78extern cpu_t CPU;
79
80/* Table with CPU names */
81extern const char* CPUNames[CPU_COUNT];
82
83/* Table with CPU the instruction sets */
84extern const unsigned CPUIsets[CPU_COUNT];
85
86
87
88/*****************************************************************************/
89/* Code */
90/*****************************************************************************/
91
92
93
94int ValidAddrSizeForCPU (unsigned char AddrSize);
95/* Check if the given address size is valid for the current CPU */
96
97cpu_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