[openfirmware] [commit] r2345 - forth/lib

repository service svn at openfirmware.info
Tue Jul 12 11:15:12 CEST 2011


Author: wmb
Date: Tue Jul 12 11:15:11 2011
New Revision: 2345
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2345

Log:
Added a couple of tools to forth/lib for handling WinCE binaries.  Not used by any standard builds.

Added:
   forth/lib/dumpcebin.fth
   forth/lib/makecebin.fth

Added: forth/lib/dumpcebin.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ forth/lib/dumpcebin.fth	Tue Jul 12 11:15:11 2011	(r2345)
@@ -0,0 +1,41 @@
+purpose: Show the sections of a WinCE .bin file
+
+h# 60 constant /buf
+/buf buffer: secbuf
+: +buf  ( offset -- adr )  secbuf +  ;
+: sec@  ( offset -- l )  +buf l@  ;
+
+0 value section-len
+: .section  ( offset -- offset' )
+   ." File offset: " dup 8 u.r
+   dup ifd @ fseek   ( offset )
+   secbuf d# 12 ifd @ fgets d# 12 <> abort" read failure"
+   0 sec@ 0=  if
+      ."   Final record: "  4 sec@ 8 u.r  ."   " 8 sec@ 8 u.r cr
+      exit
+   then
+
+   ."   Start " 0 sec@ 8 u.r  ."   Length " 4 sec@ 8 u.r  ."   Sum " 8 sec@ 8 u.r  cr
+   4 sec@ to section-len
+   secbuf  h# 60  section-len min  ifd @ fgets drop
+   secbuf  h# 60  section-len min  ldump  cr  ( offset )
+   d# 12 +  section-len +
+;
+
+: (dump-bin)  ( filename$ -- )
+   hex
+   $read-open
+   secbuf h# f ifd @ fgets  h# f <> abort" Signature read failure"
+   secbuf  " B000FF"n"  comp  abort" Bad signature"
+
+   ." Load start " 7 sec@ 8 u.r   ."  Total length "  h# b sec@ 8 u.r  cr cr
+
+   h#  f   begin  ifd @ ftell  ifd @ fsize  <  while  ( offset )
+      .section              ( offset' )
+   repeat                   ( offset )
+   drop                     ( )
+   ifd @ fclose
+;
+: dump-bin  ( "filename" -- )
+   safe-parse-word  (dump-bin)
+;

Added: forth/lib/makecebin.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ forth/lib/makecebin.fth	Tue Jul 12 11:15:11 2011	(r2345)
@@ -0,0 +1,39 @@
+purpose: Wrap an OFW image in a WinCE ".bin" file format
+
+h# 100000 constant ofw-load-address
+h# 100000 constant ofw-entry-address
+
+: put-long  ( l -- )
+   lbsplit  swap 2swap swap   ( hi hmid lmid lo )
+   4 0  do  ofd @ fputc  loop
+;
+
+: make-bin-file  ( "in-filename" "out-filename" -- )
+   reading writing
+
+   " B000FF"n" ofd @ fputs      \ Signature
+   ofw-load-address  put-long   \ Lowest load address
+   ifd @ fsize  put-long        \ Total size
+
+   ofw-load-address  put-long   \ Section load address - offset h# 0f
+   ifd @ fsize  put-long        \ Total size             offset h# 13
+   0 put-long                   \ Checksum, will be patched later - offset h# 17
+
+   0                            ( sum )
+   begin                        ( sum )
+      ifd @ fgetc               ( sum char )
+      dup -1 <>                 ( sum char more? )
+   while                        ( sum char )
+      dup ofd @ fputc           ( sum char )
+      +                         ( sum' )
+   repeat                       ( sum )
+
+   \ Final record with entry address
+   0 put-long                   ( )
+   ofw-entry-address put-long   ( )
+   0 put-long                   ( )
+
+   h# 17 ofd @ fseek            ( sum )
+   put-long                     ( )
+   ofd @ fclose                 ( )
+;



More information about the openfirmware mailing list