#!/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