feat(v4): the ROM assembles text as text.c does -- words, labels, macros, FOR, directives, start
word.f18: (NEXT-TOKEN) reads the console or a macro being expanded; labels, branches by name (a label of the word, or a word, now or later), the table of branches waiting, end of word, FOR/NEXT/UNEXT, macros, &NAME, CONST+N, and (ONE), which dispatches a token. A forward branch to a name not yet defined waits on a placeholder symbol, filled in by (DEFINE). dir.f18: constant set here #, ", store, and start, which resolves, clears the tables the ROM used and runs the word it names. main.f18: the ROM itself, entry 12; on an error it stops at (ROM-FAILED) with the code and line in its state, for the loader to report. sym.f18 generalized: any counted string, placeholders, a hash of only a name's own cells. test_host_rom_asm.c gives test_text.c's own texts (accepted and refused), its four real definitions and the ROM's directives to text.c and to the ROM: the same words, the same errors on the same lines, at both widths. The ROM is 2036 words. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c233cb6536
commit
084c520a54
@@ -61,6 +61,57 @@ int main(void)
|
||||
constant("ADDR-TOP", (long)ROM_ADDR_TOP);
|
||||
constant("ERR-FIT", (long)ROM_ERR_FIT);
|
||||
constant("ERR-OPCODE", (long)ROM_ERR_OPCODE);
|
||||
constant("(NREF)", (long)ROM_NREF);
|
||||
constant("(NLAB)", (long)ROM_NLAB);
|
||||
constant("(WNP)", (long)ROM_WNP);
|
||||
constant("(NFOR)", (long)ROM_NFOR);
|
||||
constant("(FORS)", (long)ROM_FORS);
|
||||
constant("(RDEPTH)", (long)ROM_RDEPTH);
|
||||
constant("(RPTRS)", (long)ROM_RPTRS);
|
||||
constant("(T1)", (long)ROM_T1);
|
||||
constant("(T2)", (long)ROM_T2);
|
||||
constant("(T3)", (long)ROM_T3);
|
||||
constant("(T4)", (long)ROM_T4);
|
||||
constant("(CFROM)", (long)ROM_CFROM);
|
||||
constant("(CTO)", (long)ROM_CTO);
|
||||
constant("(CN)", (long)ROM_CN);
|
||||
constant("(RAW)", (long)ROM_RAW);
|
||||
constant("(T5)", (long)ROM_T5);
|
||||
constant("(T6)", (long)ROM_T6);
|
||||
constant("(MLEN)", (long)ROM_MLEN);
|
||||
constant("(REFS)", (long)ROM_REFS);
|
||||
constant("(LABELS)", (long)ROM_LABELS);
|
||||
constant("(WNAMES)", (long)ROM_WNAMES);
|
||||
constant("(TSAVE)", (long)ROM_TSAVE);
|
||||
constant("(MTEMP)", (long)ROM_MTEMP);
|
||||
constant("(MBODY)", (long)ROM_MBODY);
|
||||
constant("ORIGIN", (long)ROM_ORIGIN);
|
||||
constant("REFS-MAX", (long)ROM_REFS_MAX);
|
||||
constant("WN-SIZE", (long)ROM_WN_SIZE);
|
||||
constant("MBODY-SIZE", (long)ROM_MBODY_SIZE);
|
||||
constant("DICT-W", (long)DICT_W);
|
||||
constant("DICT-END", (long)DICT_END_W);
|
||||
constant("BUF0", (long)BUF0_W);
|
||||
constant("TIB-W", (long)TIB_W);
|
||||
constant("ERR-IN-MACRO", (long)ROM_ERR_IN_MACRO);
|
||||
constant("ERR-MACRO", (long)ROM_ERR_MACRO);
|
||||
constant("ERR-LABEL-DUP", (long)ROM_ERR_LABEL_DUP);
|
||||
constant("ERR-LABELS", (long)ROM_ERR_LABELS);
|
||||
constant("ERR-FOR", (long)ROM_ERR_FOR);
|
||||
constant("ERR-UNEXT", (long)ROM_ERR_UNEXT);
|
||||
constant("ERR-TARGET", (long)ROM_ERR_TARGET);
|
||||
constant("ERR-UNDEFINED", (long)ROM_ERR_UNDEFINED);
|
||||
constant("ERR-BIG", (long)ROM_ERR_BIG);
|
||||
constant("ERR-AMP", (long)ROM_ERR_AMP);
|
||||
constant("ERR-FETCH-P", (long)ROM_ERR_FETCH_P);
|
||||
constant("ERR-MISSING", (long)ROM_ERR_MISSING);
|
||||
constant("ERR-DEEP", (long)ROM_ERR_DEEP);
|
||||
constant("ERR-REFS", (long)ROM_ERR_REFS);
|
||||
constant("ERR-VALUE", (long)ROM_ERR_VALUE);
|
||||
constant("ERR-NO-START", (long)ROM_ERR_NO_START);
|
||||
constant("ERR-START", (long)ROM_ERR_START);
|
||||
constant("DSTACK-REG", (long)DSTACK_REG);
|
||||
constant("RSTACK-REG", (long)RSTACK_REG);
|
||||
/* the cell width's constants (NUMBER) needs, written as signed cells */
|
||||
constant("MSB", (long)(v4_cell)V4_MSB);
|
||||
constant("DEC-LIMIT", (long)(v4_cell)(~(v4_ucell)0 / 10u));
|
||||
|
||||
Reference in New Issue
Block a user