added proper assertions; use hash tables for labels and module names
[urasm.git] / src / urforth.h
blob86fff01509d6d3427bb1fd6af72e63824e0ea523
1 // and now for something completely different...
2 // UrAsm built-in Forth Engine!
3 // GPLv3 ONLY
4 #ifndef URFORTH_HEADER
5 #define URFORTH_HEADER
7 #include <stddef.h>
8 #include <stdint.h>
11 enum {
12 UFO_ZX_LABEL_UNDEFINED = -1,
13 UFO_ZX_LABEL_UNKNOWN = 0, // referenced, but not defined yet
14 UFO_ZX_LABEL_VAR = 1, // a = value
15 UFO_ZX_LABEL_EQU = 2, // a equ value
16 UFO_ZX_LABEL_CODE = 3,
17 UFO_ZX_LABEL_DATA = 4,
18 UFO_ZX_LABEL_STOFS = 5, // structure offset
22 // should abort; defined by the main app
23 extern void ufoFatalError (void) __attribute__((noreturn));
25 extern void ufoZXPostInit (void);
27 // return pointer to line text or NULL
28 extern const char *ufoGetSrcLine (const char **fname, int *lnum);
30 // returns malloced string
31 extern char *ufoCreateIncludeName (const char *fname, int assystem, const char *lastIncPath);
33 // this also creates labels
34 extern void ufoZXSetLabelValue (const char *name, int type, int value);
35 extern int ufoZXGetLabelValue (const char *name);
36 // returns `UFO_ZX_LABEL_xxx`
37 extern int ufoZXGetLabelType (const char *name);
39 // return !0 to stop; returns cb result
40 extern uint32_t ufoZXForeachLabel (uint32_t (*cb) (const char *name, int type, int value, void *udata), void *udata);
42 extern uint32_t ufoZXGetU8 (uint32_t addr);
43 extern void ufoZXPutU8 (uint32_t addr, uint32_t v);
44 extern uint32_t ufoZXGetU16 (uint32_t addr);
45 extern void ufoZXPutU16 (uint32_t addr, uint32_t v);
46 extern void ufoZXEmitU8 (uint32_t v);
47 extern void ufoZXEmitU16 (uint32_t v);
49 extern int ufoZXGetReserved (uint32_t addr);
50 extern void ufoZXSetReserved (uint32_t addr, int resvflag);
52 extern int ufoZXGetPass (void);
53 extern uint32_t ufoZXGetOrg (void);
54 extern void ufoZXSetOrg (uint32_t addr);
55 extern uint32_t ufoZXGetDisp (void);
56 extern void ufoZXSetDisp (uint32_t addr);
57 extern uint32_t ufoZXGetEnt (void);
58 extern void ufoZXSetEnt (uint32_t addr);
60 // can be called by the main app
61 void ufoFatal (const char *fmt, ...) __attribute__((noreturn)) __attribute__((format(printf, 1, 2)));
63 void ufoInlineRun (void);
64 uint32_t ufoIsMacro (const char *wname);
65 void ufoMacroRun (uint32_t cfaidx, const char *line, const char *fname, int lnum);
66 void ufoDeinit (void);
69 #endif