Annotation of qemu/roms/SLOF/slof/fs/fcode/evaluator.fs, revision 1.1.1.1

1.1       root        1: \ *****************************************************************************
                      2: \ * Copyright (c) 2004, 2008 IBM Corporation
                      3: \ * All rights reserved.
                      4: \ * This program and the accompanying materials
                      5: \ * are made available under the terms of the BSD License
                      6: \ * which accompanies this distribution, and is available at
                      7: \ * http://www.opensource.org/licenses/bsd-license.php
                      8: \ *
                      9: \ * Contributors:
                     10: \ *     IBM Corporation - initial implementation
                     11: \ ****************************************************************************/
                     12: 
                     13: ( eva - gordons fcode bytecode evaluator )
                     14: 
                     15: hex
                     16: 
                     17: -1 constant true
                     18:  0 constant false
                     19: 
                     20: variable ip
                     21: variable fcode-end 
                     22: variable fcode-num
                     23:  1 value fcode-spread
                     24: 16 value fcode-offset
                     25: false value eva-debug?
                     26: false value fcode-debug?
                     27: defer fcode-rb@
                     28: defer fcode@
                     29: 
                     30: ' c@ to fcode-rb@
                     31: 
                     32: create token-table 2000 cells allot    \ 1000h = 4096d
                     33: 
                     34: include core.fs
                     35: include 1275.fs
                     36: include tokens.fs
                     37: 
                     38: 0 value buff
                     39: 0 value buff-size
                     40: 
                     41: ( ---------------------------------------------------- )
                     42: 
                     43: ' read-fcode# to fcode@
                     44: 
                     45: : step next-ip fcode@ exec ; immediate
                     46: ( ---------------------------------------------------- )
                     47: 
                     48: : rom-code-ignored ( image# name len -- )
                     49:     diagnostic-mode? IF type ."  code found in image " .  ." , ignoring ..." cr
                     50:     ELSE 3drop THEN
                     51: ;
                     52: 
                     53: : pci-find-rom ( baseaddr -- addr )
                     54:     -8 and dup IF
                     55:        dup rw@ 55aa = IF
                     56:                diagnostic-mode? IF ." Device ROM found at " dup . cr THEN
                     57:        ELSE drop 0 THEN
                     58:     THEN
                     59: ;
                     60: 
                     61: : pci-find-fcode ( baseaddr -- addr len | false )
                     62:     pci-find-rom ?dup IF
                     63:        dup 18 + rw@ wbflip +
                     64:        0 swap BEGIN
                     65:            dup rl@ 50434952 ( 'PCIR') <> IF
                     66:                diagnostic-mode? IF
                     67:                        ." Invalid PCI Data structure, ignoring ROM contents" cr
                     68:                THEN
                     69:                2drop false EXIT
                     70:            THEN
                     71:            dup 14 + rb@ CASE
                     72:                0 OF over . s" Intel x86 BIOS" rom-code-ignored ENDOF
                     73:                1 OF swap diagnostic-mode? IF
                     74:                                ." Open Firmware FCode found at image " . cr
                     75:                        ELSE drop THEN
                     76:                        dup a + rw@ wbflip over + \ This code start
                     77:                        swap 10 + rw@ wbflip 200 * \ This code length
                     78:                        EXIT
                     79:                ENDOF
                     80:                2 OF over . s" HP PA RISC" rom-code-ignored ENDOF
                     81:                3 OF over . s" EFI" rom-code-ignored ENDOF
                     82:                dup OF over . s" Unknown type" rom-code-ignored ENDOF
                     83:            ENDCASE
                     84:            dup 15 + rb@ 80 and IF 2drop EXIT THEN \ End of last image
                     85:            dup 10 + rw@ wbflip 200 * + \ Next image start
                     86:            swap 1+ swap \ Next image #
                     87:        0 UNTIL
                     88:     THEN false
                     89: ;
                     90: 
                     91: : execute-rom-fcode ( addr len | false -- )
                     92:        ?dup IF
                     93:                diagnostic-mode? IF ." , executing ..." cr THEN
                     94:                dup >r r@ alloc-mem dup >r swap rmove
                     95:                r@ set-ip evaluate-fcode
                     96:                diagnostic-mode? IF ." Done." cr THEN
                     97:                r> r> free-mem
                     98:        THEN
                     99: ;

unix.superglobalmegacorp.com

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