diff --git a/blk.fs b/blk.fs index 3a90684..7c818ea 100644 --- a/blk.fs +++ b/blk.fs @@ -1123,7 +1123,7 @@ lblexec BSET L1 FSET ( B284 ) L2 FSET ( B286 ) A ORr, IFZ, JP(HL), THEN, A DECr, ( compiled? ) IFNZ, ( no ) 3 CPi, IFZ, ( alias ) LDDE(HL), JR, lblexec BWR THEN, - IFNC, ( switch ) + IFNC, ( ialias ) LDDE(HL), EXDEHL, LDDE(HL), JR, lblexec BWR THEN, ( cell or does. push PFA ) HL PUSH, A DECr, JRZ, lblnext BWR ( cell ) @@ -1739,7 +1739,7 @@ with "390 LOAD" ( ----- 355 ) : +! TUCK @ + SWAP ! ; : *! ( addr alias -- ) 1+ ! ; -: **! ( addr switch -- ) 1+ @ ! ; +: **! ( addr ialias -- ) 1+ @ ! ; : / /MOD NIP ; : MOD /MOD DROP ; : ALLOT HERE +! ; @@ -2155,7 +2155,7 @@ XCURRENT @ _xapply ORG @ 0x04 ( stable ABI BOOT ) + ! ( ----- 391 ) ( Now we have "as late as possible" stuff. See bootstrap doc. ) : :* ( addr -- ) (entry) 4 ( alias ) C, , ; -: :** ( addr -- ) (entry) 5 ( switch ) C, , ; +: :** ( addr -- ) (entry) 5 ( ialias ) C, , ; ( ----- 392 ) : _bchk DUP 0x7f + 0xff > IF LIT" br ovfl" (print) ABORT THEN ; : DO COMPILE 2>R H@ ; IMMEDIATE @@ -2599,8 +2599,8 @@ lblexec BSET ( DI -> wordref ) DI PUSHx, JMPs, lblnext @ RPCs, THEN, AL DECr, IFZ, ( does ) DI PUSHx, DI INCx, DI INCx, DI [DI] MOVx[], THEN, - ( alias or switch ) DI [DI] MOVx[], - AL DECr, IFNZ, ( switch ) DI [DI] MOVx[], THEN, + ( alias or ialias ) DI [DI] MOVx[], + AL DECr, IFNZ, ( ialias ) DI [DI] MOVx[], THEN, JMPs, lblexec @ RPCs, THEN, ( continue to compiled ) BP INCx, BP INCx, [BP] 0 DX MOV[]+x, ( pushRS ) diff --git a/doc/dict.txt b/doc/dict.txt index 6e64f86..4b9591c 100644 --- a/doc/dict.txt +++ b/doc/dict.txt @@ -66,7 +66,7 @@ WORD( a -- a Get wordref's beginning addr. : x ... ; -- Define a new word :* x a -- Define a new alias -:** x a -- Define a new switch +:** x a -- Define a new ialias CREATE x -- Create cell named x. Doesn't allocate a PF. [COMPILE] x -- *I* Compile word x and write it to HERE. IMMEDIATE words are *not* executed. @@ -164,7 +164,7 @@ C! c a -- Store byte c in address a C!+ c a -- a+1 Store byte c in a and inc a. C!- c a -- a-1 Store byte c in a and dec a. *! a al -- Change alias al's addr to a. -**! a sw -- Change switch sw's addr to a. +**! a sw -- Change ialias sw's addr to a. CURRENT -- a Set a to wordref of last added entry. CURRENT* -- a A pointer to active CURRENT*. Useful when we have multiple active dicts. @@ -185,7 +185,7 @@ MOVEW notes: this word's purpose is to interface with word- based systems. src and dst are addressed as *bytes* but u is a *word* count. Every iteration increases src and dst by 2. This shouldn't be used on regular memory, it will yield weird -results. Use it with A! switch pointing to a word-based target. +results. Use it with A! ialias pointing to a word-based target. # Arithmetic / Bits diff --git a/doc/impl.txt b/doc/impl.txt index ac31e43..0aa0d69 100644 --- a/doc/impl.txt +++ b/doc/impl.txt @@ -109,7 +109,7 @@ compiled word. 4: alias. See usage.txt. PFA is like a cell, but instead of pushing it to PS, we execute it. -5: switch. Same as alias, but with an added indirection. +5: ialias. Same as alias, but with an added indirection. # System variables diff --git a/doc/usage.txt b/doc/usage.txt index 11d0ccc..074a51e 100644 --- a/doc/usage.txt +++ b/doc/usage.txt @@ -52,7 +52,7 @@ Interpreter output is unbuffered and only has EMIT. This word can also be overriden, mostly as a companion to the raison d'etre of your KEY override. -# Aliases and Switches +# Aliases A common pattern in Forth is to add an indirection layer with a pointer word. For example, if you have a word "FOO" for @@ -65,7 +65,7 @@ verbose, which make us want to avoid this pattern for words that are often used. For this purpose, Collapse OS has two special word types: -alias and switches. +alias and ialiases (indirect alias). An alias is a variable that contains a pointer to another word. When invoked, we invoke the specified pointer with minimal over- @@ -74,18 +74,18 @@ with "' _FOO :* FOO". Invoking FOO will then invoke "_FOO". You can change the alias' pointer with "*!" like this: "' BAR ' FOO *!". FOO now invokes BAR. -A switch is like an alias, but with a second level of indi- +A ialias is like an alias, but with a second level of indi- rection. The variable points to a cell pointing to our word. It works like an alias, except you have to use ":**" and "**!". -Switches are used by core code which point to hardcoded +Ialiases are used by core code which point to hardcoded addresses in RAM (because the core code is designed to run from ROM, we can't have regular variables). You are unlikely to -need switches in regular code. +need ialiases in regular code. # Addressed devices A@, A! and A, are the indirect versions of C@, C! and C,. They -are switch words and initially point to C@, C! and C,. +are ialias words and initially point to C@, C! and C,. Addressed device words can be useful to "pipe" processing to places outside of regular memory.