1 /*---------------------------------------------------------------------------* 2 Project: TwlSDK - tools - makelcf 3 File: makelcf.h 4 5 Copyright 2003-2008 Nintendo. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Date:: 2009-11-11#$ 14 $Rev: 11140 $ 15 $Author: kitase_hirotake $ 16 *---------------------------------------------------------------------------*/ 17 #ifndef MAKELCF_H_ 18 #define MAKELCF_H_ 19 20 #include "misc.h" 21 22 /*============================================================================ 23 * CONTAINER 24 */ 25 typedef struct tAfterList 26 { 27 struct tAfter *head; 28 struct tAfter *tail; 29 } 30 tAfterList; 31 32 typedef struct tAfter 33 { 34 struct tAfter *next; 35 const char *name; 36 } 37 tAfter; 38 39 typedef struct tObjectList 40 { 41 struct tObject *head; 42 struct tObject *tail; 43 } 44 tObjectList; 45 46 typedef enum 47 { 48 OBJTYPE_NONE, 49 OBJTYPE_FILE, // Regular file 50 OBJTYPE_STAR, // "*" 51 OBJTYPE_GROUP, // GROUP(xxxx) 52 OBJTYPE_OBJECT // OBJECT(yyy,zzz) 53 } 54 tObjectType; 55 56 #define isNeedSection(obj) ((obj)->objectType != OBJTYPE_OBJECT) 57 58 typedef struct tObject 59 { 60 struct tObject *next; 61 const char *objectName; 62 const char *sectionName; 63 tObjectType objectType; 64 } 65 tObject; 66 67 typedef struct tOverlayList 68 { 69 struct tOverlay *head; 70 struct tOverlay *tail; 71 u32 num; 72 } 73 tOverlayList; 74 75 typedef enum 76 { 77 MEMTYPE_NONE = 0, 78 MEMTYPE_MAIN, 79 MEMTYPE_MAINEX, 80 MEMTYPE_ITCM, 81 MEMTYPE_DTCM, 82 MEMTYPE_ITCM_BSS, 83 MEMTYPE_DTCM_BSS, 84 MEMTYPE_SHARED, 85 MEMTYPE_WRAM, 86 MEMTYPE_WRAM_BSS, 87 MEMTYPE_VRAM, 88 MEMTYPE_DUMMY, 89 } 90 tMemType; 91 92 typedef struct tOverlay 93 { 94 struct tOverlay *next; 95 u32 id; 96 const char *name; 97 const char *group; 98 u32 address; 99 char compressSpec; 100 struct tAfterList afters; 101 struct tObjectList objects; 102 struct tObjectList libraries; 103 struct tObjectList searchSymbols; 104 struct tObjectList forces; 105 tMemType memtype; 106 107 } 108 tOverlay; 109 110 typedef struct tStatic 111 { 112 const char *name; 113 u32 address; 114 struct tObjectList objects; 115 struct tObjectList libraries; 116 struct tObjectList searchSymbols; 117 struct tObjectList forces; 118 u32 stacksize; 119 u32 stacksize_irq; 120 tMemType memtype; 121 122 } 123 tStatic; 124 125 typedef struct 126 { 127 const char *overlaydefs; 128 const char *overlaytable; 129 const char *ltdoverlaydefs; 130 const char *ltdoverlaytable; 131 const char *suffix; 132 const char *flxsuffix; 133 const char *ltdsuffix; 134 135 } 136 tProperty; 137 138 BOOL AddOverlay(const char *overlayName); 139 BOOL AddAutoload(const char *overlayName); 140 BOOL AddLtdoverlay(const char *overlayName); 141 BOOL AddLtdautoload(const char *overlayName); 142 BOOL OverlaySetId(u32 id); 143 BOOL OverlaySetGroup(const char *overlayGroup); 144 BOOL OverlaySetAddress(u32 address); 145 BOOL OverlayAddAfter(const char *overlayName); 146 BOOL OverlayAddObject(const char *objectName, tObjectType objectType); 147 BOOL OverlaySetObjectSection(const char *sectionName); 148 BOOL OverlayAddLibrary(const char *objectName, tObjectType objectType); 149 BOOL OverlaySetLibrarySection(const char *sectionName); 150 BOOL OverlayAddSearchSymbol(const char *searchName); 151 BOOL OverlayAddForce(const char *forcename); 152 BOOL OverlaySetCompress(const char *compressSpec); 153 154 BOOL StaticSetName(const char *fileName); 155 BOOL StaticSetAddress(u32 address); 156 BOOL StaticAddObject(const char *objectName, tObjectType objectType); 157 BOOL StaticSetObjectSection(const char *sectionName); 158 BOOL StaticAddLibrary(const char *objectName, tObjectType objectType); 159 BOOL StaticSetLibrarySection(const char *sectionName); 160 BOOL StaticAddSearchSymbol(const char *searchName); 161 BOOL StaticAddForce(const char *forceName); 162 BOOL StaticSetStackSize(u32 stacksize); 163 BOOL StaticSetStackSizeIrq(u32 stacksize); 164 BOOL PropertySetOverlayDefs(const char *filename); 165 BOOL PropertySetOverlayTable(const char *filename); 166 BOOL PropertySetLtdoverlayDefs(const char *filename); 167 BOOL PropertySetLtdoverlayTable(const char *filename); 168 BOOL PropertySetSuffix(const char *suffix); 169 BOOL PropertySetFlxsuffix(const char *flxsuffix); 170 BOOL PropertySetLtdsuffix(const char *ltdsuffix); 171 172 BOOL CheckSpec(void); 173 void DumpSpec(void); 174 BOOL isSame(const char *s1, const char *s2); 175 176 int ParseSpecFile(const char *filename); 177 178 extern tStatic Static; 179 extern tProperty Property; 180 extern tOverlayList OverlayList; 181 extern tOverlayList AutoloadList; 182 extern tOverlayList LtdoverlayList; 183 extern tOverlayList LtdautoloadList; 184 185 #define DEFAULT_OVERLAYDEFS "%_defs" 186 #define DEFAULT_OVERLAYTABLE "%_table" 187 #define DEFAULT_LTDOVERLAYDEFS "%_defs" 188 #define DEFAULT_LTDOVERLAYTABLE "%_table" 189 #define DEFAULT_SUFFIX ".sbin" 190 #define DEFAULT_FLXSUFFIX ".TWL.FLX.sbin" 191 #define DEFAULT_LTDSUFFIX ".TWL.LTD.sbin" 192 /* NITRO-SDK4.0RC: increased 0x400->0x800 */ 193 #define DEFAULT_IRQSTACKSIZE 0x800 194 195 int spec_yyparse(void); 196 int spec_yylex(void); 197 void spec_yyerror(const char *str); 198 199 200 /*============================================================================ 201 * TOKEN BUFFER 202 */ 203 typedef struct tTokenBuffer 204 { 205 int id; 206 const char *string; 207 int loop_end; 208 } 209 tTokenBuffer; 210 211 typedef struct tLoopStack 212 { 213 int id; 214 int start; 215 } 216 tLoopStack; 217 218 #define TOKEN_LEN 65536 219 #define LOOP_STACK_MAX 32 220 221 int ParseTlcfFile(const char *filename); 222 int CreateLcfFile(const char *filename); 223 224 extern tTokenBuffer tokenBuffer[TOKEN_LEN]; 225 extern int tokenBufferEnd; 226 227 int tlcf_yyparse(void); 228 int tlcf_yylex(void); 229 void tlcf_yyerror(const char *str); 230 void lcf_error(const char *fmt, ...); 231 232 extern BOOL DebugMode; 233 void debug_printf(const char *str, ...); 234 235 typedef struct 236 { 237 char *string; 238 tObjectType type; 239 } 240 tObjectName; 241 242 // for IF-ELSE-ENDIF 243 #define COND_STACK_MAX 32 244 245 typedef enum 246 { 247 COND_BLOCK_NOCOND, // non conditional block 248 COND_BLOCK_IF, // if(){} block 249 COND_BLOCK_ELSE // else{} block 250 } 251 tCondBlock; 252 253 typedef struct 254 { 255 BOOL valid; // condition is TRUE or FALSE 256 tCondBlock block; // regular/if{}/else{} 257 } 258 tCondStack; 259 260 #endif //MAKELCF_H_ 261