capsules/v4/sys: the nucleus's fourteen sources as .f18 blobs (made once by v4/tools/v4tof18.py: header becomes the ROM's directives, every other token and line kept), the memory map as map-<width>.f18 (mkmap sys, from one table in host_map.h that host_load reads too), and end.f18, the switch-on state mkimage.c set in C, the image record, and start (IDLE). test_host_rom_nucleus.c: the ROM, fed those blobs through the console, builds RAM identical word for word to mkimage.c's, outside its own state and the image record, and starts at (IDLE), at both widths. The cost: 60.7 million instructions, 1.5 s on the C model. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
73 lines
4.3 KiB
Plaintext
73 lines
4.3 KiB
Plaintext
\ log.v4 -- logging, as v3: a message has a level, and is printed if the
|
|
\ level is at or below LOG-LEVEL.
|
|
\
|
|
\ DECOMPOSITION.md 5.25: the level constants LOG-ERROR LOG-WARN LOG-INFO
|
|
\ LOG-TEST LOG-DEBUG (0 .. 4), LOG-LEVEL! LOG-LEVEL@, LOG-ERROR" ... LOG-DEBUG"
|
|
\ and LOG-ERROR-STR ... LOG-DEBUG-STR. Part of the compiler capsule; rests
|
|
\ on core.v4, codegen.v4 and quit.v4.
|
|
\
|
|
\ WHAT IS PRINTED is v3's line without its time of day, which a node has
|
|
\ not got: the level's colour, the level's name and a colon, the colour off,
|
|
\ the text, a new line --
|
|
\ ESC [32m INFO: ESC [0m text
|
|
\ On the mesh a message will go to the recorder's log ring (5.25); until
|
|
\ then it goes to the console.
|
|
\
|
|
\ Constants the loader supplies:
|
|
\ (LOG-LEVEL) word address of the variable: 2, LOG-INFO, at switch-on
|
|
|
|
set HDR-NFA here ", LOG-ERROR #, 8 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-ERROR 0 ;
|
|
set HDR-NFA here ", LOG-WARN #, 8 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-WARN 1 ;
|
|
set HDR-NFA here ", LOG-INFO #, 8 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-INFO 2 ;
|
|
set HDR-NFA here ", LOG-TEST #, 8 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-TEST 3 ;
|
|
set HDR-NFA here ", LOG-DEBUG #, 8 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-DEBUG 4 ;
|
|
|
|
set HDR-NFA here ", LOG-LEVEL@ #, 0 #, HDR-NFA #, HDR-LINK set HDR-LINK here
|
|
: LOG-LEVEL@ ( -- n ) (LOG-LEVEL) a! @ ;
|
|
\ ( n -- ) as v3: a level below 0 is 0, one above 4 is 4
|
|
set HDR-NFA here ", LOG-LEVEL! #, 0 #, HDR-NFA #, HDR-LINK set HDR-LINK here
|
|
: LOG-LEVEL!
|
|
-if POS drop 0 jump SET
|
|
POS: dup -5 + -if BIG drop jump SET
|
|
BIG: drop drop 4
|
|
SET: (LOG-LEVEL) a! ! ;
|
|
|
|
\ ( baddr u level -- ) the message, if the level is at or below LOG-LEVEL
|
|
: (LOG)
|
|
dup inv (LOG-LEVEL) a! @ + 1 + -if SHOW drop drop drop drop ; \ LOG-LEVEL - level
|
|
SHOW: drop
|
|
if P0 -1 + if P1 -1 + if P2 -1 + if P3 -1 + if P4
|
|
drop jump OUT
|
|
P0: drop $31335B1B (EMIT4) $6D (EMIT4) $4F525245 (EMIT4) $203A52 (EMIT4) $6D305B1B (EMIT4) jump OUT
|
|
P1: drop $33335B1B (EMIT4) $6D (EMIT4) $4E524157 (EMIT4) $203A (EMIT4) $6D305B1B (EMIT4) jump OUT
|
|
P2: drop $32335B1B (EMIT4) $6D (EMIT4) $4F464E49 (EMIT4) $203A (EMIT4) $6D305B1B (EMIT4) jump OUT
|
|
P3: drop $35335B1B (EMIT4) $6D (EMIT4) $54534554 (EMIT4) $203A (EMIT4) $6D305B1B (EMIT4) jump OUT
|
|
P4: drop $34335B1B (EMIT4) $6D (EMIT4) $55424544 (EMIT4) $203A47 (EMIT4) $6D305B1B (EMIT4) jump OUT
|
|
OUT: TYPE jump CR
|
|
|
|
set HDR-NFA here ", LOG-ERROR-STR #, 0 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-ERROR-STR ( baddr u -- ) 0 jump (LOG)
|
|
set HDR-NFA here ", LOG-WARN-STR #, 0 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-WARN-STR ( baddr u -- ) 1 jump (LOG)
|
|
set HDR-NFA here ", LOG-INFO-STR #, 0 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-INFO-STR ( baddr u -- ) 2 jump (LOG)
|
|
set HDR-NFA here ", LOG-TEST-STR #, 0 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-TEST-STR ( baddr u -- ) 3 jump (LOG)
|
|
set HDR-NFA here ", LOG-DEBUG-STR #, 0 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-DEBUG-STR ( baddr u -- ) 4 jump (LOG)
|
|
|
|
\ ( level -- ) the run time of LOG-xxx" : the text is after the call, as
|
|
\ for ." ; log it at that level and go on after it.
|
|
set HDR-NFA here ", (LOG") #, 16 #, HDR-NFA #, HDR-LINK set HDR-LINK here
|
|
: (LOG")
|
|
pop 4* dup C@ over + 4/ 1 + push \ level baddr R: the cell after the text
|
|
COUNT ROT jump (LOG)
|
|
|
|
\ ( level -- ) LOG-xxx" text" logs the text -- now, if interpreting; when
|
|
\ the word it is compiled into runs, if compiling. (Q)+3 holds the level.
|
|
: (LOG-QUOTE)
|
|
(Q)+3 a! ! 34 (PARSE) drop
|
|
STATE a! @ if NOW
|
|
drop (Q)+3 a! @ (LIT,) &(LOG") (CALL,) jump (STRING,)
|
|
NOW: drop WBUF COUNT (Q)+3 a! @ jump (LOG)
|
|
set HDR-NFA here ", LOG-ERROR" #, 1 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-ERROR-QUOTE 0 jump (LOG-QUOTE)
|
|
set HDR-NFA here ", LOG-WARN" #, 1 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-WARN-QUOTE 1 jump (LOG-QUOTE)
|
|
set HDR-NFA here ", LOG-INFO" #, 1 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-INFO-QUOTE 2 jump (LOG-QUOTE)
|
|
set HDR-NFA here ", LOG-TEST" #, 1 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-TEST-QUOTE 3 jump (LOG-QUOTE)
|
|
set HDR-NFA here ", LOG-DEBUG" #, 1 #, HDR-NFA #, HDR-LINK set HDR-LINK here : LOG-DEBUG-QUOTE 4 jump (LOG-QUOTE)
|