[openfirmware] r1505 - cpu/x86/pc/biosload
svn at openfirmware.info
svn at openfirmware.info
Wed Nov 25 21:53:26 CET 2009
Author: wmb
Date: 2009-11-25 21:53:26 +0100 (Wed, 25 Nov 2009)
New Revision: 1505
Added:
cpu/x86/pc/biosload/makeusbboot.fth
Log:
Checked in rarely-used tool for creating a bootable image that can be dd'ed onto a USB key.
Added: cpu/x86/pc/biosload/makeusbboot.fth
===================================================================
--- cpu/x86/pc/biosload/makeusbboot.fth (rev 0)
+++ cpu/x86/pc/biosload/makeusbboot.fth 2009-11-25 20:53:26 UTC (rev 1505)
@@ -0,0 +1,55 @@
+\ This program creates a bootable disk image with an
+\ initially-empty FAT16 filesystem.
+\ The FATs begin at sector 2. Sectors 0 and 1 contain a simple
+\ FAT filesystem reader that uses INT 13 to load the file "\OFW.IMG"
+\ into memory, then jumps to it.
+
+hex
+
+d# 512 constant /sector
+/sector buffer: sector-buf
+
+create ofw-boot-sectors
+ " ${BP}/cpu/x86/pc/biosload/build/bootsec.img" $file,
+here ofw-boot-sectors - constant /ofw-boot-sectors
+
+: make-fat16-image ( -- )
+ " usb.img" $new-file
+
+ \ Write boot sectors
+ ofw-boot-sectors /ofw-boot-sectors ofd @ fputs
+
+ \ Init FATs
+ sector-buf /sector erase
+
+ \ BPB offset h#10.b is NumFATCopies
+ ofw-boot-sectors h# 10 + c@ 0 ?do \ Loop over number of FATs
+ h# fffffff8 sector-buf le-l! \ First FAT16 entry
+ sector-buf /sector ofd @ fputs
+ 0 sector-buf le-l!
+
+ \ BPB offset h#16.w is SectorsPerFAT
+ ofw-boot-sectors h# 16 + le-w@ 1- 0 ?do \ Remainder of FAT
+ sector-buf /sector ofd @ fputs
+ loop
+ loop
+
+ \ Init root directory
+ \ BPB offset h#11.w is RootDirEntries. Each entry is h#20 bytes.
+ ofw-boot-sectors h# 11 + le-w@ ( #root-dir-entries )
+ h# 20 * ( root-dir-bytes )
+ /sector / 0 ?do \ Loop over root dir sectors
+ sector-buf /sector ofd @ fputs
+ loop
+
+ \ Zero the rest of the floppy image
+ ofw-boot-sectors h# 13 + le-w@ ( total#sectors )
+ /sector * ofd @ fsize ?do
+ sector-buf /sector ofd @ fputs
+ /sector +loop
+
+ ofd @ fclose
+ ." Open Firmware bootable floppy image created as usb.img ." cr
+ ." Loopback-mount it and copy OFW.IMG to it." cr
+;
+make-fat16-image
More information about the openfirmware
mailing list