Annotation of qemu/roms/openbios/forth/device/feval.fs, revision 1.1

1.1     ! root        1: \ tag: FCode evaluator
        !             2: \ 
        !             3: \ this code implements an fcode evaluator 
        !             4: \ as described in IEEE 1275-1994
        !             5: \ 
        !             6: \ Copyright (C) 2003 Stefan Reinauer
        !             7: \ 
        !             8: \ See the file "COPYING" for further information about
        !             9: \ the copyright and warranty status of this work.
        !            10: \ 
        !            11: 
        !            12: defer init-fcode-table
        !            13: 
        !            14: : alloc-fcode-table 
        !            15:   4096 cells alloc-mem to fcode-table
        !            16:   ?fcode-verbose if
        !            17:     ." fcode-table at 0x" fcode-table . cr
        !            18:   then
        !            19:   init-fcode-table
        !            20:   ;
        !            21:  
        !            22: : free-fcode-table
        !            23:   fcode-table 4096 cells free-mem
        !            24:   0 to fcode-table
        !            25:   ;
        !            26: 
        !            27: : (debug-feval) ( fcode# -- fcode# )
        !            28:   \ Address
        !            29:   fcode-stream 1 - . ." : "
        !            30: 
        !            31:   \ Indicate if word is compiled
        !            32:   state @ 0<> if
        !            33:     ." (compile) "
        !            34:   then
        !            35:   dup fcode>xt cell - lfa2name type
        !            36:   dup ."  [ 0x" . ." ]" cr
        !            37:   ;
        !            38: 
        !            39: : (feval) ( -- ?? )
        !            40:   begin
        !            41:     fcode#
        !            42:     ?fcode-verbose if
        !            43:       (debug-feval)
        !            44:     then
        !            45:     fcode>xt
        !            46:     dup flags? 0<> state @ 0= or if
        !            47:       execute
        !            48:     else
        !            49:       ,
        !            50:     then
        !            51:   fcode-end @ until
        !            52: ;
        !            53: 
        !            54: : byte-load ( addr xt -- )
        !            55:   ?fcode-verbose if
        !            56:     cr ." byte-load: evaluating fcode at 0x" over . cr
        !            57:   then
        !            58: 
        !            59:   \ save state
        !            60:   >r >r fcode-push-state r> r>
        !            61: 
        !            62:   \ set fcode-c@ defer
        !            63:   dup 1 = if drop ['] c@ then      \ FIXME: uses c@ rather than rb@ for now...
        !            64:   to fcode-c@
        !            65:   dup to fcode-stream-start
        !            66:   to fcode-stream
        !            67:   1 to fcode-spread
        !            68:   false to ?fcode-offset16 
        !            69:   alloc-fcode-table
        !            70:   false fcode-end !
        !            71:   
        !            72:   \ protect against stack overflow/underflow
        !            73:   0 0 0 0 0 0 depth >r
        !            74:   
        !            75:   ['] (feval) catch if
        !            76:     cr ." byte-load: exception caught!" cr
        !            77:   then
        !            78: 
        !            79:   s" fcode-debug?" evaluate if
        !            80:     depth r@ <> if
        !            81:       cr ." byte-load: warning stack overflow, diff " depth r@ - . cr
        !            82:     then
        !            83:   then
        !            84: 
        !            85:   r> depth! 3drop 3drop
        !            86: 
        !            87:   free-fcode-table
        !            88: 
        !            89:   \ restore state
        !            90:   fcode-pop-state
        !            91: ;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.