view scripts/bundi @ 2143:d73ef8872d87

Updated standard.bl for SuperBoard descs, added W8-W15
author boisy
date Mon, 18 Feb 2008 14:04:33 +0000
parents 1e312b144f4d
children
line wrap: on
line source

#!/usr/bin/perl
#
# BUNDI - Build the Ultimate NitrOS-9 Disk Image
#
# This script builds the ULTIMATE NitrOS-9 disk image,
# complete with HDB-DOS drives!
#
# The resulting image has a NitrOS-9 partition and an HDB-DOS partition.
# The first drive of the HDB-DOS partition is the HDB-DOS distribution
# diskette.  The last drive is the NitrOS-9 boot disk.
#
# Size of image is 90,624 256-byte sectors, which fits in
# $00B100 OS-9 Offset in HDB-DOS

use IO::File;
use POSIX qw(tmpnam);

#
# ATTENTION!  Set the HDB-DOS offset in your HDB-DOS ROM here! (must be in decimal)
$hdbdos_offset = 45312;		# 0x00B100
# ATTENTION!  Set the number of HDB-DOS virtual disks (must be in decimal)
$num_hdbdos_disks = 128;
$NITROS9DIR = $ENV{'NITROS9DIR'};
$CLOUD9DIR = $ENV{'CLOUD9DIR'};
$DISTRO = "6809l2";


# Check for proper number of arguments
$numargs = $#ARGV + 1;
if ($numargs != 4)
{
	print "Usage: bundi <bootlist> <tracklist> <diskname> <distro>\n";
	exit;
}

$bootlist = $ARGV[0];
$tracklist = $ARGV[1];
$diskname = $ARGV[2];
$DISTRO = $ARGV[3];

printf("Building '%s' distribution onto '%s'\n", $DISTRO, $diskname);

$multiplier = 2;
$os9_sectors = $hdbdos_offset * $multiplier;
printf("Number of sectors: %d\n", $os9_sectors);
$hdb_drives = $num_hdbdos_disks - 3;

print "########## PART  I ##########\n";
print "#                           #\n";
print "#    Assemble EVERYTHING!   #\n";
print "#                           #\n";
print "#############################\n\n";

print "Step 1 - Making the ENTIRE NitrOS-9 Project (could take a while)...\n";
#system("cd $NITROS9DIR; make dsk>&/dev/null");

print "Step 2 - Making the HDB-DOS Product...\n";
system("cd $CLOUD9DIR/Products/HDB-DOS/Software; make dsk>&/dev/null");

print "Step 3 - Making the Ved Product...\n";
system("cd $ENV{'CLOUD9DIR'}/Products/Ved/Software; make dsk>&/dev/null");

print "########## PART II ##########\n";
print "#                           #\n";
print "#   Prepare the Disk Image  #\n";
print "#                           #\n";
print "#############################\n\n";

print "Step 1 - Format the disk and make the boot disk\n";
system("os9 format -qe -l$os9_sectors tmp.dsk");


# Read bootlist file and expand any variables
open(FILE, "$bootlist") or die ("Unable to open $bootlist");
@bootarray = <FILE>;
close(FILE);
foreach $element (@bootarray)
{
	if (($element =~ /^#/) || ($element =~ /^\*/))
	{
		$element = "";
	}
	else
	{
		$element =~ s/\$(\w+)/${$1}/g;
		$element =~ s/\s+$//;
	}
}

$bls = "@bootarray";
system("cat $bls>bootfile");

# Read tracklist file and expand any variables
open(FILE, "$tracklist") or die ("Unable to open $tracklist");
@trackarray = <FILE>;
close(FILE);
foreach $element (@trackarray)
{
	if (($element =~ /^#/) || ($element =~ /^\*/))
	{
		$element = "";
	}
	else
	{
		$element =~ s/\$(\w+)/${$1}/g;
		$element =~ s/\s+$//;
	}
}

$tls = "@trackarray";
system("cat $tls>trackfile");
system("os9 padrom 4608 trackfile");

system("os9 gen -b=bootfile -t=trackfile tmp.dsk>&/dev/null");
system("os9 copy -o=0 $NITROS9DIR/$DISTRO/modules/sysgo_dd tmp.dsk,sysgo");
system("os9 attr tmp.dsk,sysgo -epepr");
system("os9 dsave -e $NITROS9DIR/$DISTRO/nos9"."$DISTRO"."_80d.dsk, tmp.dsk, >&/dev/null");
system("os9 dsave -e $NITROS9DIR/3rdparty/packages/uucpbb/uucpbb21_6309.dsk, tmp.dsk, >&/dev/null");
system("os9 dsave -e $NITROS9DIR/3rdparty/packages/cc/cc.dsk, tmp.dsk, >&/dev/null");
system("os9 dsave -e $NITROS9DIR/3rdparty/packages/basic09/basic09v010100.dsk, tmp.dsk, >&/dev/null");
system("os9 dsave -e $CLOUD9DIR/Products/Ved/Software/ved.dsk, tmp.dsk, >&/dev/null");
system("os9 format -qe -ss -dd boot.dsk");
system("os9 gen -b=bootfile -t=trackfile boot.dsk>&/dev/null");

print "Step 2 - Build the HDB-DOS drives\n";
system("rm hdbdrives.dsk");
system("decb dskini -h$hdb_drives hdbdrives.dsk");
system("rm hdbdrives2.dsk");
system("cat $CLOUD9DIR/Products/HDB-DOS/Software/hdbdos.dsk hdbdrives.dsk $CLOUD9DIR/Products/SuperIDE/Distributions/v1.0/superide.dsk boot.dsk>hdbdrives2.dsk");
system("rm hdbdrives.dsk boot.dsk");
system("decb hdbconv hdbdrives2.dsk hdbdrives.dsk");
system("rm hdbdrives2.dsk");

print "Step 3 - Put it all together\n";
system("rm $diskname");
system("cat tmp.dsk hdbdrives.dsk>$diskname");
system("rm tmp.dsk hdbdrives.dsk");

print "Ok, we're done! The file $diskname is now a fresh disk image.\n";