[OpenBIOS] r620 - in trunk/openbios-devel: forth/lib kernel

svn at openbios.org svn at openbios.org
Fri Nov 20 17:37:42 CET 2009


Author: stepan
Date: 2009-11-20 17:37:41 +0100 (Fri, 20 Nov 2009)
New Revision: 620

Modified:
   trunk/openbios-devel/forth/lib/64bit.fs
   trunk/openbios-devel/kernel/cross.h
Log:
improve x@ and x! functions, at least x@?\194?\160reads back what x! wrote, now.


Modified: trunk/openbios-devel/forth/lib/64bit.fs
===================================================================
--- trunk/openbios-devel/forth/lib/64bit.fs	2009-11-20 15:58:55 UTC (rev 619)
+++ trunk/openbios-devel/forth/lib/64bit.fs	2009-11-20 16:37:41 UTC (rev 620)
@@ -20,6 +20,10 @@
   then
 ;
 
+: 64>32 ( 64bitsigned -- 32bitsigned )
+  h# ffffffff and
+;
+
 : lxjoin ( quad.lo quad.hi -- o )
   d# 32 lshift or
 ;
@@ -37,12 +41,12 @@
 ;
 
 : unaligned-x@ ( addr - o )
-  dup la+ unaligned-l@ swap unaligned-l@ lxjoin
+  dup la1+ unaligned-l@ 64>32 swap unaligned-l@ 64>32 lxjoin
 ;
 
-: unaligned-x! ( oaddr o -- )
-  2dup d# 32 rshift unaligned-l!
-  swap la+ swap h# ffffffff and unaligned-l!
+: unaligned-x! ( o oaddr -- )
+  >r dup d# 32 rshift r@ unaligned-l!
+  h# ffffffff and r> la1+ unaligned-l!
 ;
   
 : x@ ( oaddr -- o )

Modified: trunk/openbios-devel/kernel/cross.h
===================================================================
--- trunk/openbios-devel/kernel/cross.h	2009-11-20 15:58:55 UTC (rev 619)
+++ trunk/openbios-devel/kernel/cross.h	2009-11-20 16:37:41 UTC (rev 620)
@@ -77,11 +77,11 @@
 	    (unaligned_read_word(addr)|(unaligned_read_word((u8 *)addr+2)<<16))
 
 #define unaligned_write_word(addr, value) \
-	write_byte(addr, value & 0xff); write_byte((u8 *)addr+1, value>>8)
+	write_byte(addr, (value & 0xff)); write_byte((u8 *)(addr+1), (value>>8))
 
 #define unaligned_write_long(addr, value) \
-	unaligned_write_word(addr, value & 0xffff); \
-	unaligned_write_word(addr + 2, value >> 16)
+	unaligned_write_word(addr, (value & 0xffff)); \
+	unaligned_write_word((addr + 2), (value >> 16))
 
 #endif
 
@@ -93,11 +93,11 @@
 	    ((unaligned_read_word(addr)<<16)|unaligned_read_word((u8 *)addr+2))
 
 #define unaligned_write_word(addr, value) \
-	write_byte(addr, value >> 8); write_byte((u8 *)addr+1, value & 0xff)
+	write_byte(addr, (value >> 8)); write_byte((u8 *)(addr+1), (value & 0xff)) 
 
 #define unaligned_write_long(addr, value) \
-	unaligned_write_word(addr, value >> 16); \
-	unaligned_write_word(addr + 2, value & 0xffff)
+	unaligned_write_word(addr, (value >> 16)); \
+	unaligned_write_word((addr + 2), (value & 0xffff))
 #endif
 
 /* bit width handling */




More information about the OpenBIOS mailing list