1 /*****************************************************************************/
5 /* Address size definitions */
9 /* (C) 2003-2009, Ullrich von Bassewitz */
10 /* Roemerstrasse 52 */
11 /* D-70794 Filderstadt */
12 /* EMail: uz@cc65.org */
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. */
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: */
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 */
32 /*****************************************************************************/
42 /*****************************************************************************/
44 /*****************************************************************************/
48 const char* AddrSizeToStr (unsigned char AddrSize)
49 /* Return the name for an address size specifier */
52 case ADDR_SIZE_DEFAULT: return "default";
53 case ADDR_SIZE_ZP: return "zeropage";
54 case ADDR_SIZE_ABS: return "absolute";
55 case ADDR_SIZE_FAR: return "far";
56 case ADDR_SIZE_LONG: return "long";
57 default: return "unknown";
63 unsigned char AddrSizeFromStr (const char* Str)
64 /* Return the address size for a given string. Returns ADDR_SIZE_INVALID if
65 * the string cannot be mapped to an address size.
70 unsigned char AddrSize;
72 { "abs", ADDR_SIZE_ABS },
73 { "absolute", ADDR_SIZE_ABS },
74 { "default", ADDR_SIZE_DEFAULT },
75 { "direct", ADDR_SIZE_ZP },
76 { "dword", ADDR_SIZE_LONG },
77 { "far", ADDR_SIZE_FAR },
78 { "long", ADDR_SIZE_LONG },
79 { "near", ADDR_SIZE_ABS },
80 { "zeropage", ADDR_SIZE_ZP },
81 { "zp", ADDR_SIZE_ZP },
85 for (I = 0; I < sizeof (AddrSizeTable) / sizeof (AddrSizeTable[0]); ++I) {
86 if (StrCaseCmp (Str, AddrSizeTable[I].Name) == 0) {
88 return AddrSizeTable[I].AddrSize;
93 return ADDR_SIZE_INVALID;