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