|
|
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: \ The /memory node.
14:
15: \ See 3.7.6.
16: new-device
17:
18: s" memory" 2dup device-name device-type
19:
20: : mem-size-u3 20000000 ;
21: : (mem-size-u4) ( # -- size )
22: 4 lshift f8002200 + rl@ dup 1 and 0= IF drop 0 EXIT THEN
23: dup c000 and e rshift over 3000 and c rshift + 10000000 swap lshift
24: swap 2 and 0= IF 2* THEN ;
25: : mem-size-u4 0 4 0 DO i (mem-size-u4) + LOOP ;
26: : mem-size u3? IF mem-size-u3 THEN u4? IF mem-size-u4 THEN ;
27: : mem-speed-u4 f8000800 rl@ 12 rshift 7 and 4 + d# 200 * 3 / ;
28: : mem-speed-u3 f8000f60 rl@ c rshift f and d# 100 * 3 / ;
29: : mem-speed u3? IF mem-speed-u3 THEN u4? IF mem-speed-u4 THEN ;
30:
31:
32: : encode-our-reg
33: 0 encode-int 0 encode-int+
34: mem-size dup >r 80000000 > IF
35: 0 encode-int+ 80000000 encode-int+
36: 1 encode-int+ 0 encode-int+ r> 80000000 - >r THEN
37: r@ 20 rshift encode-int+ r> ffffffff and encode-int+ ;
38: encode-our-reg s" reg" property
39: 0 mem-size release \ Make our memory available
40:
41:
42: : mem-report
43: base @ decimal mem-size 1e rshift 0 .r
44: mem-size 3fffffff and IF ." .5" THEN ." GB of RAM @ "
45: mem-speed . ." MHz" base ! ;
46:
47: get-node memnode !
48:
49: : open true ;
50: : close ;
51:
52: finish-device
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.