#! /bin/sh
#
# Makecram2 - make a dual-formatted cramdisk
#
[ $# -lt 1 -o $# -gt 2 ] && {
        echo "Usage: `basename $0` {fs.z|-} [blocks]"
        exit 1
}

[ "$1" != - -a ! -f "$1" ] && {
        echo "`basename $0`: $1 not found"
        exit 2
}

fs=$1
[ "$fs" = - ] && fs=

[ ! -f $kernel ] && {
        echo "`basename $0`: $kernel not found"
        exit 3
}
# kerneloffs can be 528 for kerneltracks=22, holds 396K kernel
# kerneloffs can be 480 for kerneltracks=20, holds 360K kernel
# kerneloffs can be 456 for kerneltracks=19, holds 342K kernel
# kerneloffs can be 432 for kerneltracks=18, holds 324K kernel
# kerneloffs can be 408 for kerneltracks=17, holds 306K kernel
#
# kerneloffs = # of tracks * 24
# kernelsize = # of tracks * 18
# holds kernel size = # of tracks * 18
#
#  When booting, the kernel boot loader on the floppy
#   reads a little past the end of the kernel, so we
#   need to format an extra track beyond the end of
#   the kernel.
#
# kerneloffs=456
# kerneltracks=19
#
#kernel=/usr/src/linux/arch/i386/boot/zImage
kernel=zImage
#
kernelsize=`ls -s $kernel | cut -d " " -f2`
echo "Kernel size is $kernelsize."
#
kerneltracks=$[$kernelsize+28]
kerneltracks=$[kerneltracks/18+1]
kerneltracks=19
#
kerneloffs=$[$kerneltracks*24]
echo kerneltracks $kerneltracks kerneloffs $kerneloffs
#
# create the correct floppy device
#
# /sbin/mknod /dev/fd0H1920 b 2 100
#
# set the floppy device sectors and tracks for 1920 K/floppy
#
setfdprm /dev/fd0H1920 3840 24 2 80 0 0x1c 0x24 0xcf 0x8d
#
# format the floppy with superformat to 1920 K (24sectors/track)
#
superformat -s24 --no2m /dev/fd0H1920 >& /dev/null
superformat -s24 --no2m /dev/fd0
# superformat -s24 /dev/fd0
#
# write the filesystem on the 1920 format floppy with offset
#
dd ${fs:+if=}$fs of=/dev/fd0H1920 bs=1024 seek=$kerneloffs
#
# reformat the first 22 ($kerneltracks) to hold the kernel and boot
#
superformat -s18 -e$kerneltracks /dev/fd0
#
# copy the kernel 
#
dd if=$kernel of=/dev/fd0H1440 
#
# modify kernel to boot the 1920K floppy with offset
#
rdev /dev/fd0 /dev/fd0H1920
rdev -r /dev/fd0 $[16384+$kerneloffs]
rdev -R /dev/fd0 0


