\ Copyright 2022 Bradley D. Nelson 
\ 
\ Licensed under the Apache License, Version 2.0 (the "License"); 
\ you may not use this file except in compliance with the License. 
\ You may obtain a copy of the License at 
\ 
\     http://www.apache.org/licenses/LICENSE-2.0 
\ 
\ Unless required by applicable law or agreed to in writing, software 
\ distributed under the License is distributed on an "AS IS" BASIS, 
\ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
\ See the License for the specific language governing permissions and 
\ limitations under the License. 
 
( Lazy loaded code words ) 
: asm r| 
 
also forth definitions 
vocabulary asm 
internals definitions 
 
: ca! ( n a -- ) dup cell-base >r cell-shift swap over lshift 
                 swap 255 swap lshift invert r@ @ and or r> ! ; 
 
also asm definitions 
 
variable code-start 
variable code-at 
 
DEFINED? posix [IF] 
also posix 
: reserve ( n -- ) 
  0 swap PROT_READ PROT_WRITE PROT_EXEC or or 
  MAP_ANONYMOUS MAP_PRIVATE or -1 0 mmap code-start ! ; 
previous 
4096 reserve 
[THEN] 
 
DEFINED? esp [IF] 
also esp 
: reserve ( n -- ) MALLOC_CAP_EXEC heap_caps_malloc code-start ! ; 
previous 
1024 reserve 
[THEN] 
 
code-start @ code-at ! 
 
: chere ( -- a ) code-at @ ; 
: callot ( n -- ) code-at +! ; 
: code1, ( n -- ) chere ca! 1 callot ; 
: code2, ( n -- ) dup code1, 8 rshift code1, ; 
: code3, ( n -- ) dup code2, 16 rshift code1, ; 
: code4, ( n -- ) dup code2, 16 rshift code2, ; 
cell 8 = [IF] 
: code,  dup code4, 32 rshift code4, ; 
[ELSE] 
: code,  code4, ; 
[THEN] 
: end-code   previous ; 
 
also forth definitions 
 
: code ( "name" ) create ['] callcode @ latestxt ! 
                  code-at @ latestxt cell+ ! also asm ; 
 
previous previous previous 
asm 
 
| evaluate ; 
 

Legal: site web personnel sans commerce / personal site without seling