#!/bin/sh function asm() { gcc -c "$1".S -o tmp.o || exit $? nm tmp.o | grep -F ' U ' && exit $? objcopy -O binary tmp.o tmp.bin || exit $? dd if=tmp.bin of="$1".bin bs=1 skip=$((0x600)) hexdump -v -C <"$1".bin >"$1".hex || exit $? objcopy -I binary -B i386 -O elf32-i386 "$1".bin "$1".elf || exit $? objdump -Dr -M i8086 "$1".elf >"$1".S.dis || exit $? { echo "unsigned char $1[] = {" cat "$1".hex \ | grep -F ' ' | sed 's/ /!/g' | cut -d '!' -f 2,3 \ | sed -e 's/^/0x/' -e 's/[ !]/,0x/g' -e 's/0x$//' -e 's/$/,/' -e 's/,,/,/g' echo "};" } >"$1".h } asm mboot_mbr asm mboot_ext diet -Os gcc -Os -static -o mbinstall mbinstall.c \ && strip mbinstall