\ ========== Copyright Header Begin ========================================== \ \ Hypervisor Software File: forthinit.fth \ \ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. \ \ - Do no alter or remove copyright notices \ \ - Redistribution and use of this software in source and binary forms, with \ or without modification, are permitted provided that the following \ conditions are met: \ \ - Redistribution of source code must retain the above copyright notice, \ this list of conditions and the following disclaimer. \ \ - Redistribution in binary form must reproduce the above copyright notice, \ this list of conditions and the following disclaimer in the \ documentation and/or other materials provided with the distribution. \ \ Neither the name of Sun Microsystems, Inc. or the names of contributors \ may be used to endorse or promote products derived from this software \ without specific prior written permission. \ \ This software is provided "AS IS," without a warranty of any kind. \ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, \ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A \ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN \ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR \ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR \ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN \ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR \ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE \ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, \ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF \ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. \ \ You acknowledge that this software is not designed, licensed or \ intended for use in the design, construction, operation or maintenance of \ any nuclear facility. \ \ ========== Copyright Header End ============================================ id: @(#)forthinit.fth 1.5 07/06/05 10:54:36 purpose: copyright: Copyright 2007 Sun Microsystems, Inc. All Rights Reserved copyright: Use is subject to license terms. headerless 0 value heap-base : initial-mem ( -- adr,len ) heap-base prom-main-task over - ; ' initial-mem is initial-heap \ In: \ up, base \ %o0 = memory base \ %o1 = memory size or free-memory size if %o2 is non-zero. \ %o2 = Non-standard layout flag. \ \ non Zero %o2 means dont compute anything just use %o0,%o1 as base,len \ \ Out: \ up, base, %o0 = rp, %o1 = sp \ \ This routine returns initial values for up, base, sp, an rp. \ The initialization ip is left to the caller. Since we want \ to provide a degree of flexibility in the assignment of \ processor registers to the forth engine, we really should \ be returning all those registers in out registers to allow \ the caller to assign them to arbitrary registers. However, \ since this routine is dependent on the use of base and up \ registers, and they are still assigned to global registers, \ it's easier to leave them in place rather than copy them to \ out registers and have the caller copy them back. But \ because sp and rp are %in registers and they are not visible \ within this register window, we must return those registers \ in %o0 and %o1. label init-forth-environment \ Set the base register %g0 %g0 %g0 save %i2 %g0 %g0 subcc \ Use non standard layout? 0= if nop \ (delay) %i0 %i1 %o1 add \ Top of memory pagesize %l1 set RAMsize-start %l4 set ROMsize %o2 set %o1 %o2 %o1 sub \ remove OBPs dictionary %o1 %l4 %o1 sub \ %o1 = Addr of User Area %o1 %l1 %o0 sub \ %o0 = Addr of locked VPT %o0 %i0 %i1 sub \ Size of unused memory in %i1 then scr sc1 sc2 mutex-try-enter prom-lock \ Clear the initial user segment [ifdef] PreCleanedMemory \ Platforms (currently, only StarCat) that come up with \ memory pre-cleaned (e.g., by POST), still dirty-up the \ area used for scratch during decompression. \ \ The following only works for platforms that have the \ decompression scratch area hard-coded at VA=0 and for \ which a range of physical memory -- hard-coded to a size \ of 1/2 meg -- extends through the initial user segment \ and the initial VPT. \ \ See the platform-specific reset.fth file. 0 %l3 set h# 8.0000 %l2 set [else] RAMbase %l3 set RAMsize-start %l2 set [then] \ %l3 = base VA %l2 = size begin %l2 /n %l2 subcc 0= until %g0 %l3 %l2 stx \ Delay slot \ Copy the PROM copy of the data segment into RAM, \ Including the user area base h# 18 %l3 ldx \ get the dictionary length base %l3 %l3 add \ compute the VA base h# 10 %l2 ldx \ sizeof user segment begin %l2 /n %l2 subcc %l3 %l2 %l5 ldx 0= until %l5 up %l2 stx \ (Delay) \itc up %g0 iflush \ For t16 this is required. \ The User Area is now initialized %i0 pageshift %i0 srlx \ convert to page# 'user# hi-memory-base scr set %i0 up scr nput \ Set the memory configuration variable %i1 pageshift %i1 srlx \ convert to #pages 'user# hi-memory-size scr set %i1 up scr nput \ Set the memory configuration variable up 'user up0 nput \ Set the up0 user variable RAMbase rs-size + %i0 set \ Initialize the Return Stack Pointer %i0 'user .rp0 nput \ Set the rp0 user variable %i0 h# 20 scr add scr ps-size scr add scr 'user .sp0 nput \ Set the sp0 user variable scr /n %i1 add \ Account for the top of stack register %i1 /n scr add 'user# heap-base sc1 set scr up sc1 nput %i7 8 return nop \ (delay) end-code