2 \ Copyright (C) 2009 Stefan Reinauer
4 \ See the file "COPYING" for further information about
5 \ the copyright and warranty status of this work.
8 \ Implementation of IEEE Draft Std P1275.6/D5
9 \ Standard for Boot (Initialization Configuration) Firmware
13 cell /x = constant 64bit?
17 : 32>64 ( 32bitsigned -- 64bitsigned )
18 dup 80000000 and if \ is it negative?
19 ffffffff00000000 or \ then set all high bits
23 : 64>32 ( 64bitsigned -- 32bitsigned )
27 : lxjoin ( quad.lo quad.hi -- o )
31 : wxjoin ( w.lo w.2 w.3 w.hi -- o )
32 wljoin >r wljoin r> lxjoin
35 : bxjoin ( b.lo b.2 b.3 b.4 b.5 b.6 b.7 b.hi -- o )
36 bljoin >r bljoin r> lxjoin
43 : unaligned-x@ ( addr - o )
44 dup la1+ unaligned-l@ 64>32 swap unaligned-l@ 64>32 lxjoin
47 : unaligned-x! ( o oaddr -- )
48 >r dup d# 32 rshift r@ unaligned-l!
49 h# ffffffff and r> la1+ unaligned-l!
53 unaligned-x@ \ for now
57 unaligned-x! \ for now
64 : (rx!) ( o oaddr -- )
76 : xa+ ( addr1 index -- addr2 )
80 : xa1+ ( addr1 -- addr2 )
84 : xlsplit ( o -- quad.lo quad.hi )
85 dup h# ffffffff and swap d# 32 rshift
88 : xwsplit ( o -- w.lo w.2 w.3 w.hi )
89 xlsplit >r lwsplit r> lwsplit
92 : xbsplit ( o -- b.lo b.2 b.3 b.4 b.5 b.6 b.7 b.hi )
93 xlsplit >r lbsplit r> lbsplit
96 : xlflip ( oct1 -- oct2 )
100 : xlflips ( oaddr len -- )
102 i unaligned-x@ xlflip i unaligned-x!
106 : xwflip ( oct1 -- oct2 )
107 xlsplit lwflip swap lwflip lxjoin
110 : xwflips ( oaddr len -- )
112 i unaligned-x@ xwflip i unaligned-x! /x
116 : xbflip ( oct1 -- oct2 )
117 xlsplit lbflip swap lbflip lxjoin
120 : xbflips ( oaddr len -- )
122 i unaligned-x@ xbflip i unaligned-x!
126 \ : b(lit) b(lit) 32>64 ;