summaryrefslogtreecommitdiff
path: root/build_helpers/splicetobootsect.sh
blob: 7a5b0b8408322741b98c99bd312e4b37998b4b85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#! /bin/bash
set -u
set -e

. build_helpers/progressif.ly.io.sh

if [ -z "$1" ] || [ ! -f "$1" ]; then
  track err_argpath "Argument must be the path to a binary to splice into a bootsector"
  trackend err_argpath f
  exit 1
fi

INSIZE=$(stat -c%s $1)
if [ $INSIZE -ge 510 ]; then
  track err_bootsectsize "Input file is greater than bootsector max size (510 bytes)"
  trackend err_bootsectsize f
  exit 1
fi

OUTFILE="bootable.img"
track bootsect_template "Creating bootsector template... "
dd if=/dev/zero bs=510 count=1 of="$OUTFILE" >/dev/null 2>&1
echo -ne "\x55\xaa" >> "$OUTFILE"
dd if=/dev/zero bs=512 count=255 ibs=512 seek=1 of="$OUTFILE" >/dev/null 2>&1
trackend bootsect_template t

track create_bootsect "Inserting bootsector... "
dd if="$1" of="$OUTFILE" conv=notrunc >/dev/null 2>&1
trackend create_bootsect t

track insert_kernel "Inserting kernel... "
dd if="bin/src._kernel._main.bin" of="$OUTFILE" conv=notrunc ibs=512 seek=1 >/dev/null 2>&1
trackend insert_kernel t
track splice_done "Done. File at: '$OUTFILE'"
trackend splice_done t