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 ( ) +;
openfirmware@openfirmware.info