76 EMIT 111 EMIT 97 EMIT 100 EMIT 105 EMIT 110 EMIT 103 EMIT 32 EMIT 112 EMIT 114 EMIT 101 EMIT 108 EMIT 117 EMIT 100 EMIT 101 EMIT 32 EMIT : \ KEY 10 = 0BRANCH [ -20 , ] ; IMMEDIATE \ Now we have line comments :) \ We'll periodically sprinkle these in so that it's clear to the user \ that things are happening. 46 EMIT \ Conditionals : IF LIT 0BRANCH , HERE @ 0 , ; IMMEDIATE : THEN DUP HERE @ SWAP - SWAP ! ; IMMEDIATE : ELSE LIT BRANCH , HERE @ 0 , SWAP DUP HERE @ SWAP - SWAP ! ; IMMEDIATE 46 EMIT \ Loops : BEGIN HERE @ ; IMMEDIATE : UNTIL LIT 0BRANCH , HERE @ - , ; IMMEDIATE : AGAIN LIT BRANCH , HERE @ - , ; IMMEDIATE 46 EMIT \ Recursive calls : RECURSE LATEST @ >CFA , ; IMMEDIATE \ Block comments (with nesting) : ( BEGIN KEY DUP 40 = IF RECURSE THEN 41 = UNTIL ; IMMEDIATE ( ( Take that, C ) ) 46 EMIT \ Peripheral register addresses : TXBUF 0 ; : RXBUF 32 ; : TXHEAD 64 ; : TXTAIL 65 ; : RXHEAD 66 ; : RXTAIL 67 ; : SYSREADY 68 ; 46 EMIT \ Printing utilities : CR 10 EMIT ; : SPACE 32 EMIT ; : CHAR KEY STATE @ 0<> IF LIT LIT , , \ Append LIT to definition if compiling THEN ; IMMEDIATE : EMIT-DIGIT DUP 10 < IF CHAR 0 ELSE CHAR A THEN + EMIT ; CHAR . EMIT : . \ Handle negatives DUP 0< IF CHAR - EMIT NEGATE THEN \ Determine starting place value 1 BEGIN BASE @ * 2DUP / 0= UNTIL \ Print leading non-zero digits BEGIN BASE @ / 2DUP / EMIT-DIGIT TUCK MOD SWAP OVER 0= UNTIL \ Print any trailing zeros BASE @ / DUP 0<> IF BEGIN CHAR 0 EMIT BASE @ / 0= UNTIL THEN 2DROP ; CHAR . EMIT : TYPE ( addr len -- ) BEGIN DUP 0= IF 2DROP EXIT THEN SWAP DUP C@ EMIT 1+ SWAP 1- AGAIN ; CHAR . EMIT : C, HERE @ C! 1 HERE +! ; : ." STATE @ IF LIT BRANCH , \ Compile BRANCH for jumping over string data HERE @ 0 , \ Compile placeholder offset and push offset cell address 0 BEGIN KEY DUP CHAR " = IF DROP HERE @ ALIGN HERE ! \ Pad to alignment SWAP DUP HERE @ SWAP - \ Compute offset OVER ! \ Update branch offset to skip data 4+ LIT LIT , , \ Append LIT LIT LIT , , \ Append LIT LIT TYPE , \ Append TYPE EXIT THEN C, 1+ \ Write byte and increment length AGAIN ELSE BEGIN KEY DUP CHAR " = IF DROP EXIT THEN EMIT AGAIN THEN ; IMMEDIATE CHAR . EMIT \ Version number : VERSION-MAJOR 0 ; : VERSION-MINOR 1 ; : VERSION-PATCH 0 ; : VERSION-PRINT ." v" VERSION-MAJOR . ." ." VERSION-MINOR . ." ." VERSION-PATCH . ; CHAR . EMIT \ Welcome banner : BANNER ." _ __ " CR ." _ __(_)__ ___ / / " CR ." | |/|/ / / _ \_ (_-./ _ \" CR ." |__,__/_/ .__(_)___/_//_/" CR ." /_/ " CR CR ." Wipforth " VERSION-PRINT CR CR ; ." done" CR BANNER \ Set SYSREADY high to indicate prelude has finished and enable user \ input on the JS side. 1 SYSREADY AC!