1 | /*****************************************************************************/ |
2 | /* */ |
3 | /* attrtab.h */ |
4 | /* */ |
5 | /* Disassembler attribute table */ |
6 | /* */ |
7 | /* */ |
8 | /* */ |
9 | /* (C) 2000-2014, 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 ATTRTAB_H |
37 | #define ATTRTAB_H |
38 | |
39 | |
40 | |
41 | /*****************************************************************************/ |
42 | /* Data */ |
43 | /*****************************************************************************/ |
44 | |
45 | |
46 | |
47 | typedef enum attr_t { |
48 | |
49 | /* Styles */ |
50 | atDefault = 0x0000, /* Default style */ |
51 | atCode = 0x0001, |
52 | atIllegal = 0x0002, |
53 | atByteTab = 0x0003, /* Same as illegal */ |
54 | atDByteTab = 0x0004, |
55 | atWordTab = 0x0005, |
56 | atDWordTab = 0x0006, |
57 | atAddrTab = 0x0007, |
58 | atRtsTab = 0x0008, |
59 | atTextTab = 0x0009, |
60 | atSkip = 0x000A, /* Skip code completely */ |
61 | |
62 | /* Label flags */ |
63 | atNoLabel = 0x0000, /* No label for this address */ |
64 | atExtLabel = 0x0010, /* External label */ |
65 | atIntLabel = 0x0020, /* Internally generated label */ |
66 | atDepLabel = 0x0040, /* Dependent label */ |
67 | atUnnamedLabel = 0x0080, /* Unnamed label */ |
68 | |
69 | atLabelDefined = 0x0100, /* True if we defined the label */ |
70 | |
71 | atStyleMask = 0x000F, /* Output style */ |
72 | atLabelMask = 0x00F0, /* Label information */ |
73 | |
74 | /* Segment */ |
75 | atSegment = 0x0100, /* Code is in a segment */ |
76 | atSegmentEnd = 0x0200, /* Segment end */ |
77 | atSegmentStart = 0x0400, /* Segment start */ |
78 | } attr_t; |
79 | |
80 | |
81 | |
82 | /*****************************************************************************/ |
83 | /* Code */ |
84 | /*****************************************************************************/ |
85 | |
86 | |
87 | |
88 | void AddrCheck (unsigned Addr); |
89 | /* Check if the given address has a valid range */ |
90 | |
91 | attr_t GetAttr (unsigned Addr); |
92 | /* Return the attribute for the given address */ |
93 | |
94 | int SegmentDefined (unsigned Start, unsigned End); |
95 | /* Return true if the atSegment bit is set somewhere in the given range */ |
96 | |
97 | int IsSegmentEnd (unsigned Addr); |
98 | /* Return true if a segment ends at the given address */ |
99 | |
100 | int IsSegmentStart (unsigned Addr); |
101 | /* Return true if a segment starts at the given address */ |
102 | |
103 | unsigned GetGranularity (attr_t Style); |
104 | /* Get the granularity for the given style */ |
105 | |
106 | void MarkRange (unsigned Start, unsigned End, attr_t Attr); |
107 | /* Mark a range with the given attribute */ |
108 | |
109 | void MarkAddr (unsigned Addr, attr_t Attr); |
110 | /* Mark an address with an attribute */ |
111 | |
112 | attr_t GetStyleAttr (unsigned Addr); |
113 | /* Return the style attribute for the given address */ |
114 | |
115 | attr_t GetLabelAttr (unsigned Addr); |
116 | /* Return the label attribute for the given address */ |
117 | |
118 | |
119 | |
120 | /* End of attrtab.h */ |
121 | #endif |
122 | |