1 #ifndef _ASMDEF_H 2 #define _ASMDEF_H 3 /* asmdef.h */ 4 /*****************************************************************************/ 5 /* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only */ 6 /* */ 7 /* AS-Portierung */ 8 /* */ 9 /* global benutzte Variablen und Definitionen */ 10 /* */ 11 /*****************************************************************************/ 12 13 #include <stddef.h> 14 #include <stdio.h> 15 16 #include "chunks.h" 17 #include "fileformat.h" 18 #include "dynstring.h" 19 #include "strcomp.h" 20 #include "lstmacroexp.h" 21 #include "cpulist.h" 22 #include "tempresult.h" 23 24 struct sRelocEntry; 25 26 typedef struct 27 { 28 TempType Typ; 29 struct sRelocEntry *Relocs; 30 union 31 { 32 LargeInt IWert; 33 Double FWert; 34 struct 35 { 36 char *Contents; 37 unsigned Length; 38 } String; 39 tRegDescr RegDescr; 40 } Contents; 41 } SymbolVal; 42 43 typedef struct _TCrossRef 44 { 45 struct _TCrossRef *Next; 46 Byte FileNum; 47 LongInt LineNum; 48 Integer OccNum; 49 } TCrossRef,*PCrossRef; 50 51 52 typedef struct _TPatchEntry 53 { 54 struct _TPatchEntry *Next; 55 LargeWord Address; 56 char *Ref; 57 Word len; 58 LongWord RelocType; 59 } TPatchEntry, *PPatchEntry; 60 61 typedef struct _TExportEntry 62 { 63 struct _TExportEntry *Next; 64 char *Name; 65 Word len; 66 LongWord Flags; 67 LargeWord Value; 68 } TExportEntry, *PExportEntry; 69 70 typedef enum 71 { 72 DebugNone, 73 DebugMAP, 74 DebugAOUT, 75 DebugCOFF, 76 DebugELF, 77 DebugAtmel, 78 DebugNoICE 79 } DebugType; 80 81 #define Char_NUL 0 82 #define Char_BEL '\a' 83 #define Char_BS '\b' 84 #define Char_HT 9 85 #define Char_LF '\n' 86 #define Char_FF 12 87 #define Char_CR 13 88 #define Char_ESC 27 89 90 #define ListMask_FormFeed (1 << 0) 91 #define ListMask_SymbolList (1 << 1) 92 #define ListMask_MacroList (1 << 2) 93 #define ListMask_FunctionList (1 << 3) 94 #define ListMask_LineNums (1 << 4) 95 #define ListMask_DefineList (1 << 5) 96 #define ListMask_RegDefList (1 << 6) 97 #define ListMask_Codepages (1 << 7) 98 #define ListMask_StructList (1 << 8) 99 100 extern char SrcSuffix[],IncSuffix[],PrgSuffix[],LstSuffix[], 101 MacSuffix[],PreSuffix[],LogSuffix[],MapSuffix[], 102 OBJSuffix[]; 103 104 #define MomCPUName "MOMCPU" /* mom. Prozessortyp */ 105 #define MomCPUIdentName "MOMCPUNAME" /* mom. Prozessortyp */ 106 #define SupAllowedName "INSUPMODE" /* privilegierte Befehle erlaubt */ 107 #define DoPaddingName "PADDING" /* Padding an */ 108 #define PackingName "PACKING" /* gepackte Ablage an */ 109 #define MaximumName "INMAXMODE" /* CPU im Maximum-Modus */ 110 #define FPUAvailName "HASFPU" /* FPU-Befehle erlaubt */ 111 #define ListOnName "LISTON" /* Listing an/aus */ 112 #define RelaxedName "RELAXED" /* alle Zahlenschreibweisen zugelassen */ 113 #define SrcModeName "INSRCMODE" /* CPU im Quellcode-kompatiblen Modus */ 114 #define BigEndianName "BIGENDIAN" /* Datenablage MSB first */ 115 #define BranchExtName "BRANCHEXT" /* Spruenge autom. verlaengern */ 116 #define FlagTrueName "TRUE" /* Flagkonstanten */ 117 #define FlagFalseName "FALSE" 118 #define PiName "CONSTPI" /* Zahl Pi */ 119 #define DateName "DATE" /* Datum & Zeit */ 120 #define TimeName "TIME" 121 #define VerName "VERSION" /* speichert Versionsnummer */ 122 #define CaseSensName "CASESENSITIVE" /* zeigt Gross/Kleinunterscheidung an */ 123 #define Has64Name "HAS64" /* arbeitet Parser mit 64-Bit-Integers ? */ 124 #define ArchName "ARCHITECTURE" /* Zielarchitektur von AS */ 125 #define AttrName "ATTRIBUTE" /* Attributansprache in Makros */ 126 #define LabelName "__LABEL__" /* Labelansprache in Makros */ 127 #define ArgCName "ARGCOUNT" /* Argumentzahlansprache in Makros */ 128 #define AllArgName "ALLARGS" /* Ansprache Argumentliste in Makros */ 129 #define DefStackName "DEFSTACK" /* Default-Stack */ 130 #define NestMaxName "NESTMAX" /* max. nesting level of a macro */ 131 #define DottedStructsName "DOTTEDSTRUCTS" /* struct elements by default with . */ 132 133 extern const char *EnvName; 134 135 /* This results from the tokenized representation of macro arguments 136 in macro bodys: (31*16) - 4 for special arguments: */ 137 138 #define ArgCntMax 476 139 140 #define ChapMax 4 141 142 #define StructSeg (PCMax + 1) 143 144 extern const char *SegNames[PCMax + 2]; 145 extern char SegShorts[PCMax + 2]; 146 147 #define AscOfs '0' 148 149 #define MaxCodeLen_Ini 256 150 #define MaxCodeLen_Max 65535 151 extern LongWord MaxCodeLen; 152 153 #define DEF_NESTMAX 256 154 155 typedef void (*SimpProc)( 156 #ifdef __PROTOS__ 157 void 158 #endif 159 ); 160 161 typedef void (*DissectBitProc)( 162 #ifdef __PROTOS__ 163 char *pDest, size_t DestSize, LargeWord Inp 164 #endif 165 ); 166 167 typedef Boolean (*tQualifyQuoteFnc)(const char *pStart, const char *pQuotePos); 168 169 typedef Word WordField[6]; /* fuer Zahlenumwandlung */ 170 typedef enum 171 { 172 ConstModeIntel, /* Hex xxxxh, Oct xxxxo, Bin xxxxb */ 173 ConstModeMoto, /* Hex $xxxx, Oct @xxxx, Bin %xxxx */ 174 ConstModeC, /* Hex 0x..., Oct 0...., Bin ----- */ 175 ConstModeWeird /* Hex [xh]'xxxx', Oct o'xxxx', Bin b'xxxx' */ 176 } TConstMode; 177 178 typedef struct _TTransTable 179 { 180 struct _TTransTable *Next; 181 char *Name; 182 unsigned char *Table; 183 } TTransTable, *PTransTable; 184 185 typedef struct _TSaveState 186 { 187 struct _TSaveState *Next; 188 CPUVar SaveCPU; 189 char *pSaveCPUArgs; 190 Integer SavePC; 191 Byte SaveListOn; 192 tLstMacroExp SaveLstMacroExp; 193 tLstMacroExpMod SaveLstMacroExpModDefault, 194 SaveLstMacroExpModOverride; 195 PTransTable SaveTransTable; 196 Integer SaveEnumSegment; 197 LongInt SaveEnumCurrentValue, SaveEnumIncrement; 198 } TSaveState,*PSaveState; 199 200 typedef struct _TForwardSymbol 201 { 202 struct _TForwardSymbol *Next; 203 StringPtr Name; 204 LongInt DestSection; 205 StringPtr pErrorPos; 206 } TForwardSymbol, *PForwardSymbol; 207 208 typedef struct _TSaveSection 209 { 210 struct _TSaveSection *Next; 211 PForwardSymbol LocSyms, GlobSyms, ExportSyms; 212 LongInt Handle; 213 } TSaveSection, *PSaveSection; 214 215 typedef struct sSavePhase 216 { 217 struct sSavePhase *pNext; 218 LargeWord SaveValue; 219 } tSavePhase; 220 221 typedef struct _TDefinement 222 { 223 struct _TDefinement *Next; 224 StringPtr TransFrom, TransTo; 225 Byte Compiled[256]; 226 } TDefinement, *PDefinement; 227 228 typedef struct _ASSUMERec 229 { 230 const char *Name; 231 LongInt *Dest; 232 LongInt Min,Max; 233 LongInt NothingVal; 234 void (*pPostProc)(void); 235 } ASSUMERec; 236 237 extern StringPtr SourceFile; 238 239 extern StringPtr CursUp; 240 241 extern LargeWord *PCs; 242 extern Boolean RelSegs; 243 extern LargeWord StartAdr; 244 extern LargeWord AfterBSRAddr; 245 extern Boolean StartAdrPresent; 246 extern LargeWord *Phases; 247 extern Word Grans[StructSeg+1]; 248 extern Word ListGrans[StructSeg+1]; 249 extern ChunkList SegChunks[StructSeg+1]; 250 extern Integer ActPC; 251 extern Boolean PCsUsed[StructSeg+1]; 252 extern LargeWord *SegInits; 253 extern LargeWord *SegLimits; 254 extern LongInt ValidSegs; 255 extern Boolean ENDOccured; 256 extern Boolean Retracted; 257 extern Boolean ListToStdout,ListToNull; 258 259 extern unsigned ASSUMERecCnt; 260 extern const ASSUMERec *pASSUMERecs; 261 extern void (*pASSUMEOverride)(void); 262 263 extern Integer PassNo; 264 extern Integer JmpErrors; 265 extern Boolean ThrowErrors; 266 extern Boolean Repass; 267 extern Byte MaxSymPass; 268 extern Byte ShareMode; 269 extern DebugType DebugMode; 270 extern Word NoICEMask; 271 extern Byte ListMode; 272 extern Byte ListOn; 273 extern Boolean MakeUseList; 274 extern Boolean MakeCrossList; 275 extern Boolean MakeSectionList; 276 extern Boolean MakeIncludeList; 277 extern Boolean RelaxedMode, DefRelaxedMode; 278 extern Word ListMask; 279 extern ShortInt ExtendErrors; 280 extern Integer EnumSegment; 281 extern LongInt EnumIncrement, EnumCurrentValue; 282 extern LongWord MaxErrors; 283 extern Boolean TreatWarningsAsErrors; 284 285 extern LongInt MomSectionHandle; 286 extern PSaveSection SectionStack; 287 extern tSavePhase *pPhaseStacks[PCMax]; 288 289 extern tSymbolSize AttrPartOpSize; 290 extern LongInt CodeLen; 291 extern Byte *BAsmCode; 292 extern Word *WAsmCode; 293 extern LongWord *DAsmCode; 294 295 extern Boolean DontPrint; 296 extern Word ActListGran; 297 298 extern Boolean NumericErrors; 299 extern Boolean CodeOutput; 300 extern Boolean MacProOutput; 301 extern Boolean MacroOutput; 302 extern Boolean QuietMode; 303 extern Boolean HardRanges; 304 extern const char *DivideChars; 305 extern Boolean HasAttrs; 306 extern const char *AttrChars; 307 extern Boolean MsgIfRepass; 308 extern Integer PassNoForMessage; 309 extern Boolean CaseSensitive; 310 extern LongInt NestMax; 311 extern Boolean GNUErrors; 312 313 extern FILE *PrgFile; 314 315 extern StringPtr ErrorPath,ErrorName; 316 extern StringPtr OutName; 317 extern StringPtr CurrFileName; 318 extern LongInt CurrLine; 319 extern LongInt MomLineCounter; 320 extern LongInt LineSum; 321 extern LongInt MacLineSum; 322 323 extern LongInt NOPCode; 324 extern Boolean TurnWords; 325 extern Byte HeaderID; 326 extern const char *PCSymbol; 327 extern TConstMode ConstMode; 328 extern Boolean ConstModeWeirdNoTerm; 329 extern Boolean (*SetIsOccupiedFnc)(void); 330 extern Boolean SwitchIsOccupied, PageIsOccupied, ShiftIsOccupied; 331 extern Boolean (*DecodeAttrPart)(void); 332 extern void (*MakeCode)(void); 333 extern Boolean (*ChkPC)(LargeWord Addr); 334 extern Boolean (*IsDef)(void); 335 extern void (*SwitchFrom)(void); 336 extern void (*InternSymbol)(char *Asc, TempResult *Erg); 337 extern DissectBitProc DissectBit; 338 extern DissectRegProc DissectReg; 339 extern tQualifyQuoteFnc QualifyQuote; 340 341 extern StringPtr IncludeList; 342 extern Integer IncDepth,NextIncDepth; 343 extern FILE *ErrorFile; 344 extern FILE *LstFile; 345 extern FILE *ShareFile; 346 extern FILE *MacProFile; 347 extern FILE *MacroFile; 348 extern Boolean InMacroFlag; 349 extern StringPtr LstName, MacroName, MacProName; 350 extern tLstMacroExp DoLst, NextDoLst; 351 extern StringPtr ShareName; 352 extern CPUVar MomCPU, MomVirtCPU; 353 extern StringPtr MomCPUArgs; 354 extern char DefCPU[20]; 355 extern char MomCPUIdent[20]; 356 357 extern Boolean FPUAvail; 358 extern Boolean DoPadding; 359 extern Boolean Packing; 360 extern Boolean SupAllowed; 361 extern Boolean Maximum; 362 extern Boolean DoBranchExt; 363 364 extern int RadixBase, OutRadixBase, ListRadixBase; 365 366 extern tStrComp *ArgStr; 367 extern StringPtr pLOpPart; 368 extern tStrComp LabPart, CommPart, ArgPart, OpPart, AttrPart; 369 extern char AttrSplit; 370 extern int ArgCnt; 371 extern StringPtr OneLine; 372 #ifdef PROFILE_MEMO 373 extern unsigned NumMemo; 374 extern unsigned long NumMemoSum, NumMemoCnt; 375 #endif 376 377 #define forallargs(pArg, cond) \ 378 for (pArg = ArgStr + 1; (cond) && (pArg <= ArgStr + ArgCnt); pArg++) 379 380 extern Byte LstCounter; 381 extern Word PageCounter[ChapMax+1]; 382 extern Byte ChapDepth; 383 extern StringPtr ListLine; 384 extern Byte PageLength, PageWidth; 385 extern tLstMacroExpMod LstMacroExpModOverride, LstMacroExpModDefault; 386 extern Boolean DottedStructs; 387 extern StringPtr PrtInitString; 388 extern StringPtr PrtExitString; 389 extern StringPtr PrtTitleString; 390 391 extern Byte StopfZahl; 392 393 extern Boolean SuppWarns; 394 395 #define CharTransTable CurrTransTable->Table 396 extern PTransTable TransTables, CurrTransTable; 397 398 extern PDefinement FirstDefine; 399 400 extern PSaveState FirstSaveState; 401 402 extern Boolean MakeDebug; 403 extern FILE *Debug; 404 405 extern Boolean WasIF, WasMACRO; 406 407 extern void AsmDefInit(void); 408 409 extern void NullProc(void); 410 411 extern int SetMaxCodeLen(LongWord NewMaxCodeLen); 412 413 extern void Default_InternSymbol(char *Asc, TempResult *Erg); 414 415 extern void Default_DissectBit(char *pDest, size_t DestSize, LargeWord BitSpec); 416 417 extern void IncArgCnt(void); 418 419 420 extern Boolean SetIsOccupied(void); 421 422 423 extern void asmdef_init(void); 424 #endif /* _ASMDEF_H */ 425