public inbox for linux-8086@vger.kernel.org
 help / color / mirror / Atom feed
* Broken-up patch #11
@ 2004-05-28 23:35 Tommy McCabe
  2004-06-01 13:31 ` Miguel Bolanos
  0 siblings, 1 reply; 2+ messages in thread
From: Tommy McCabe @ 2004-05-28 23:35 UTC (permalink / raw)
  To: linux-8086

Interconnected patch to:

1. Incorporate a few files from bootblocks into the
source treeso linux-86 isn't necessary for compiling.

2. Move MAKEDEV and MAKESET out of rootfs_template to
save 12KB of space.

3. Fix I-don't-know-how-many-bugs in MAKEDEV.

4. Change /mnt/elks to /mnt/test.

diff -ruN ./elks-stuff/elkscmd/MAKEDEV
./elks/elkscmd/MAKEDEV
--- ./elks-stuff/elkscmd/MAKEDEV	1969-12-31
19:00:00.000000000 -0500
+++ ./elks/elkscmd/MAKEDEV	2004-05-28
15:31:49.000000000 -0400
@@ -0,0 +1,266 @@
+#!/bin/sh
+
+# Devices are generated by this script in the same
order that they are listed
+# in the Documentation/devices.txt file in the Linux
2.4.18 and5.21 kernel
+# sources. This includes devices that are not
currently relevant to ELKS, to
+# encourage the use of common node numbers when these
devices are eventually
+# implemented.
+#
+# Where different node numbers are currently used by
ELKS, the current ELKS
+# node numbers are generated by lines labelled
"Currently" and the relevant
+# Linux node numbers are generated by lines labelled
"Ought to be".
+#
+# Refer to the MAKESET command, also in this
directory, for usage details.
+
+LINK=ln
+MKDEV=mknod
+MKSET=./MAKESET
+TARGET_MNT=/mnt/test
+DEVDIR=./$TARGET_MNT/dev
+
+##############################################################################
+# Ensure required auxilliary script is present.
+
+if ! test -f "$MKSET"
+then
+    echo ERROR: \"$MKSET\" script missing, unable to
continue.
+    exit 1
+fi
+
+##############################################################################
+# Create memory devices.
+
+	$MKDEV $DEVDIR/mem c 1 1
+	$MKDEV $DEVDIR/kmem c 1 2
+	$MKDEV $DEVDIR/null c 1 3
+#	$MKDEV $DEVDIR/port c 1 4
+	$MKDEV $DEVDIR/zero c 1 5
+#	$MKDEV $DEVDIR/core c 1 6
+	$MKDEV $DEVDIR/full c 1 7
+#	$MKDEV $DEVDIR/random c 1 8
+#	$MKDEV $DEVDIR/urandom c 1 9
+#	$MKDEV $DEVDIR/aio c 1 10
+
+##############################################################################
+# RAM disks.
+
+	$MKSET   0 7  $MKDEV $DEVDIR/ram b 1
+
+	$LINK  $DEVDIR/ram1 $DEVDIR/ramdisk
+
+##############################################################################
+# Pseudo-TTY master devices. These are not yet
supported by the ELKS kernel.
+
+#	$MKSET   0 15 $MKDEV $DEVDIR/ptyp x 2
+#	$MKSET  16 15 $MKDEV $DEVDIR/ptyq x 2
+#	$MKSET  32 15 $MKDEV $DEVDIR/ptyr x 2
+#	$MKSET  48 15 $MKDEV $DEVDIR/ptys x 2
+#	$MKSET  64 15 $MKDEV $DEVDIR/ptyt x 2
+#	$MKSET  80 15 $MKDEV $DEVDIR/ptyu x 2
+#	$MKSET  96 15 $MKDEV $DEVDIR/ptyv x 2
+#	$MKSET 112 15 $MKDEV $DEVDIR/ptyw x 2
+#	$MKSET 128 15 $MKDEV $DEVDIR/ptyx x 2
+#	$MKSET 144 15 $MKDEV $DEVDIR/ptyy x 2
+#	$MKSET 160 15 $MKDEV $DEVDIR/ptyz x 2
+#	$MKSET 176 15 $MKDEV $DEVDIR/ptya x 2
+#	$MKSET 192 15 $MKDEV $DEVDIR/ptyb x 2
+#	$MKSET 208 15 $MKDEV $DEVDIR/ptyc x 2
+#	$MKSET 224 15 $MKDEV $DEVDIR/ptyd x 2
+#	$MKSET 240 15 $MKDEV $DEVDIR/ptye x 2
+
+##############################################################################
+# Floppy diskettes. Only the auto-detect nodes are
listed.
+
+	$MKDEV $DEVDIR/fd0	b 3 128 	# Currently.
+	$MKDEV $DEVDIR/fd1	b 3 192 	# Currently.
+
+#	$MKSET   0 3  $MKDEV $DEVDIR/fd b 2	# Ought to be.
+
+##############################################################################
+# Pseudo-TTY master devices. These are not yet
supported by the ELKS kernel.
+
+#	$MKSET   0 15 $MKDEV $DEVDIR/ttyp x 3
+#	$MKSET  16 15 $MKDEV $DEVDIR/ttyq x 3
+#	$MKSET  32 15 $MKDEV $DEVDIR/ttyr x 3
+#	$MKSET  48 15 $MKDEV $DEVDIR/ttys x 3
+#	$MKSET  64 15 $MKDEV $DEVDIR/ttyt x 3
+#	$MKSET  80 15 $MKDEV $DEVDIR/ttyu x 3
+#	$MKSET  96 15 $MKDEV $DEVDIR/ttyv x 3
+#	$MKSET 112 15 $MKDEV $DEVDIR/ttyw x 3
+#	$MKSET 128 15 $MKDEV $DEVDIR/ttyx x 3
+#	$MKSET 144 15 $MKDEV $DEVDIR/ttyy x 3
+#	$MKSET 160 15 $MKDEV $DEVDIR/ttyz x 3
+#	$MKSET 176 15 $MKDEV $DEVDIR/ttya x 3
+#	$MKSET 192 15 $MKDEV $DEVDIR/ttyb x 3
+#	$MKSET 208 15 $MKDEV $DEVDIR/ttyc x 3
+#	$MKSET 224 15 $MKDEV $DEVDIR/ttyd x 3
+#	$MKSET 240 15 $MKDEV $DEVDIR/ttye x 3
+
+##############################################################################
+# Direct IDE disks, Primary channel.
+
+	$MKSET   0 7 $MKDEV $DEVDIR/hda b 5	# Currently.
+	$MKSET  8 7 $MKDEV $DEVDIR/hdb b 5	# Currently.
+
+#	$MKSET   0 7 $MKDEV $DEVDIR/hda b 3	# Ought to be.
+#	$MKSET  8 7 $MKDEV $DEVDIR/hdb b 3	# Ought to be.
+
+##############################################################################
+# Virtual consoles. Note that tty4 through tty7 can't
be enabled at this
+# time because of the possible conflict with ttyS0
through ttyS3 which
+# used to use the node numbers these now use.
However, it is expected that
+# this restriction can be removed in the near future.
+
+	$MKSET  0 3  $MKDEV $DEVDIR/tty c 4	# Currently
+#	$MKSET  0 15 $MKDEV $DEVDIR/tty c 4	# Soon to be
+
+# Serial ports, as detected by the ROM BIOS.
+
+	$MKSET 64 3  $MKDEV $DEVDIR/ttyS c 4
+
+##############################################################################
+# Alternate TTY devices. These are not yet supported.
+
+#	$MKDEV $DEVDIR/tty	c 5 0
+#	$MKDEV $DEVDIR/console	c 5 1
+#	$MKDEV $DEVDIR/ptmx	c 5 2
+
+##############################################################################
+# Parallel devices, as detected by the ROM BIOS.
+
+	$MKSET  0 3  $MKDEV $DEVDIR/lp c 6
+
+##############################################################################
+# Loopback devices. These are not yet supported.
+
+#	$MKSET  0 15 $MKDEV $DEVDIR/loop c 7
+
+##############################################################################
+# SCSI disks. These are not yet supported.
+
+#	$MKSET   0 7 $MKDEV $DEVDIR/sda b 8
+#	$MKSET   8 7 $MKDEV $DEVDIR/sdb b 8
+#	$MKSET  16 7 $MKDEV $DEVDIR/sdc b 8
+#	$MKSET  24 7 $MKDEV $DEVDIR/sdd b 8
+#	$MKSET  32 7 $MKDEV $DEVDIR/sde b 8
+#	$MKSET  40 7 $MKDEV $DEVDIR/sdf b 8
+#	$MKSET  48 7 $MKDEV $DEVDIR/sdg b 8
+#	$MKSET  56 7 $MKDEV $DEVDIR/sdh b 8
+#	$MKSET  64 7 $MKDEV $DEVDIR/sdi b 8
+#	$MKSET  72 7 $MKDEV $DEVDIR/sdj b 8
+#	$MKSET  80 7 $MKDEV $DEVDIR/sdk b 8
+#	$MKSET  88 7 $MKDEV $DEVDIR/sdl b 8
+#	$MKSET  96 7 $MKDEV $DEVDIR/sdm b 8
+#	$MKSET 104 7 $MKDEV $DEVDIR/sdn b 8
+#	$MKSET 112 7 $MKDEV $DEVDIR/sdo b 8
+#	$MKSET 120 7 $MKDEV $DEVDIR/sdp b 8
+
+##############################################################################
+# SCSI tapes. These are not yet supported.
+
+#	$MKSET   0 31 $MKDEV $DEVDIR/st c 9
+#	$MKSET  32 31 $MKDEV $DEVDIR/st c 9 l
+#	$MKSET  64 31 $MKDEV $DEVDIR/st c 9 m
+#	$MKSET  96 31 $MKDEV $DEVDIR/st c 9 a
+#	$MKSET 128 31 $MKDEV $DEVDIR/nst c 9
+#	$MKSET 160 31 $MKDEV $DEVDIR/nst c 9 l
+#	$MKSET 192 31 $MKDEV $DEVDIR/nst c 9 m
+#	$MKSET 224 31 $MKDEV $DEVDIR/nst c 9 a
+
+##############################################################################
+# Metadisk (RAID) devices. These are not yet
supported.
+
+#	$MKSET   0 15 $MKDEV $DEVDIR/md b 9
+
+##############################################################################
+# SCSI CD-ROM devices. These are not yet supported.
+
+#	$MKDEV $DEVDIR/scd b 11
+
+##############################################################################
+# MSCDEX CD-ROM devices. These are not yet supported.
+
+#	$MKDEV $DEVDIR/doscd b 12
+
+##############################################################################
+# 8-bit MFM/RLL controllers. These are not yet
supported.
+
+#	$MKSET   0 7 $MKDEV $DEVDIR/xda b 13
+#	$MKSET  8 7 $MKDEV $DEVDIR/xdb b 13
+
+##############################################################################
+# BIOS hard disks.
+
+	$MKSET   0 7 $MKDEV $DEVDIR/bda b 3	# Currently
+	$MKSET  8  7 $MKDEV $DEVDIR/bdb b 3	# Currently
+	$MKSET  16 7 $MKDEV $DEVDIR/bdc b 3	# Currently
+	$MKSET  24 7 $MKDEV $DEVDIR/bdd b 3	# Currently
+
+#	$MKSET   0 7 $MKDEV $DEVDIR/bda b 14	# Ought to be
+#	$MKSET  8 7 $MKDEV $DEVDIR/bdb b 14	# Ought to be
+#	$MKSET  16 7 $MKDEV $DEVDIR/bdc b 14	# Ought to be
+#	$MKSET  24 7 $MKDEV $DEVDIR/bdd b 14	# Ought to be
+
+##############################################################################
+# Joysticks. These are not yet supported.
+
+#	$MKDEV $DEVDIR/js c 15
+#	$MKDEV $DEVDIR/djs c 15
+
+##############################################################################
+# Generic SCSI devices. These are not yet supported.
+
+#	$MKSET   0 15 $MKDEV $DEVDIR/sg c 21
+
+##############################################################################
+# Direct IDE disks, Secondary channel. These are not
yet supported.
+
+#	$MKSET   0 7 $MKDEV $DEVDIR/hdc b 22
+#	$MKSET  8 7 $MKDEV $DEVDIR/hdd b 22
+
+##############################################################################
+# Direct IDE disks, Tertiary channel. These are not
yet supported.
+
+#	$MKSET   0 7 $MKDEV $DEVDIR/hde b 33
+#	$MKSET  8 7 $MKDEV $DEVDIR/hdf b 33
+
+##############################################################################
+# Z80-SIO devices. These are not yet supported.
+
+#	$MKSET   0  7 $MKDEV $DEVDIR/scc c 34
+
+##############################################################################
+# Direct IDE disks, Quaternary channel. These are not
yet supported.
+
+#	$MKSET   0 7 $MKDEV $DEVDIR/hde b 34
+#	$MKSET  8 7 $MKDEV $DEVDIR/hdf b 34
+
+##############################################################################
+# Direct IDE disks, Quinternary channel. These are
not yet supported.
+
+#	$MKSET   0 7 $MKDEV $DEVDIR/hdg b 56
+#	$MKSET  8 7 $MKDEV $DEVDIR/hdh b 56
+
+##############################################################################
+# Direct IDE disks, Septernary channel. These are not
yet supported.
+
+#	$MKSET   0 7 $MKDEV $DEVDIR/hdi b 57
+#	$MKSET  8 7 $MKDEV $DEVDIR/hdj b 57
+
+##############################################################################
+# SCSI Media Changer. These are not yet supported.
+
+#	$MKSET   0 15 $MKDEV $DEVDIR/sch c 86
+
+##############################################################################
+# I2C bus drivers. These are not yet supported.
+
+#	$MKSET   0 7  $MKDEV $DEVDIR/i2c c 89
+
+##############################################################################
+# Conrad Electronic Parallel Port Radio Clocks. These
are not yet supported.
+
+#	$MKSET	 0 1  $MKDEV $DEVDIR/pcfclock c 181
+
+##############################################################################
+# EOF.
diff -ruN ./elks-stuff/elkscmd/MAKESET
./elks/elkscmd/MAKESET
--- ./elks-stuff/elkscmd/MAKESET	1969-12-31
19:00:00.000000000 -0500
+++ ./elks/elkscmd/MAKESET	2004-04-18
14:54:13.000000000 -0400
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+if [ $# -lt 6 -o $# -gt 7 ]; then
+    echo
+    echo "Usage: makeset min count cmd prefix type
major [suffix]"
+    echo
+    echo "where  min     is the minor of the first
node to make,"
+    echo "       count   is the number of the last
node to make,"
+    echo "       cmd     is the command to make a
node,"
+    echo "       prefix  is the node name prefix,"
+    echo "       type    is the type selector for the
node,"
+    echo "       major   is the major number for the
node,"
+    echo "  and  suffix  is a suffix to append to the
node names."
+    echo
+    echo "The following type selectors are
supported:"
+    echo
+    echo "   b    Block device, all nodes have
numeric suffix."
+    echo "   d    Block device, first node is raw
device without numeric suffix."
+    echo
+    echo "   c    Character device with decimal
numeric suffix."
+    echo "   x    Character device with hexadecimal
numeric suffix."
+    echo
+else
+    N=0
+    while [ $N -le $2 ]; do
+	P=`expr $N + $1`
+	case ".$5" in
+	    .b)     eval $3 $4$N$7 $5 $6 $P
+		    ;;
+	    .c)     eval $3 $4$N$7 $5 $6 $P
+		    ;;
+	    .d)     if [ $N -gt 0 ]; then
+			eval $3 $4$N$7 $5 $6 $P
+		    else
+			eval $3 $4$7 $5 $6 $P
+		    fi
+		    ;;
+	    .x)	    if [ $N -gt 9 ]; then
+			R=`echo 123456789abcdef | cut -b $N`
+			eval $3 $4$R$7 c $6 $P
+		    else
+			eval $3 $4$N$7 c $6 $P
+		    fi
+		    ;;
+	esac
+	N=`expr $N + 1`
+    done
+fi
diff -ruN ./elks-stuff/elkscmd/Make.defs
./elks/elkscmd/Make.defs
--- ./elks-stuff/elkscmd/Make.defs	2004-05-28
16:02:01.000000000 -0400
+++ ./elks/elkscmd/Make.defs	2004-04-18
15:02:51.000000000 -0400
@@ -147,7 +147,7 @@
 MKFS=/sbin/mkfs.minix
 MKFS_OPTS=-n14
 
-MINIX_BOOT=$(DEV86_DIR)/bootblocks
+MINIX_BOOT=./bootblocks
 

##############################################################################
 #
@@ -159,7 +159,7 @@
 endif
 
 ifeq ($(TARGET_MODE),LOOP)
-TARGET_MNT=/mnt/elks
+TARGET_MNT=/mnt/test
 LOOP=-o loop
 endif
 
diff -ruN ./elks-stuff/elkscmd/Makefile
./elks/elkscmd/Makefile
--- ./elks-stuff/elkscmd/Makefile	2004-05-28
16:02:01.000000000 -0400
+++ ./elks/elkscmd/Makefile	2004-05-28
15:30:59.000000000 -0400
@@ -46,9 +46,10 @@
 		$(FULL3_TARGET_FS) $(FULL5_TARGET_FS) || true
 	rm -f $(COMB_TARGET_FS) $(ROOT_TARGET_FS)
$(ROOT_NET_TARGET_FS) \
 		$(FULL3_TARGET_FS) $(FULL5_TARGET_FS) boot
images.zip core
-	rm -rf rootfs_template $(ROOTDIR)
+	rm -rf ./rootfs_template $(ROOTDIR)
+	rm -rf ./bootblocks/*s ./bootblocks/*bin
./bootblocks/*v
 	@for i in $(DIRS); do make -C $$i clean ; done
-	tar xf rootfs_template.tar
+	tar xzf rootfs_template.tar.gz
 

###############################################################################
 #
@@ -119,10 +120,13 @@
 # Create relevant parts of other packages.
 
 $(FD_BSECT):
-	make -C $(MINIX_BOOT) bin
+	bcc -Mf -O -DTRY_FLOPPY -DDOTS -o
./bootblocks/minix.s -S ./bootblocks/minix.c
+	as86 -w- -0 -b ./bootblocks/minix.bin -s
./bootblocks/minix.sym ./bootblocks/minix.s
 
 $(KHELPER):
-	make -C $(MINIX_BOOT)
+	as86_encap ./bootblocks/minix.s ./bootblocks/minix.v
minix_ -0 -w
+	bcc -Mf -O -DDOTS -o ./bootblocks/minix_elks.s -S
./bootblocks/minix_elks.c
+	as86 -w- -0 -b ./bootblocks/minix_elks.bin -s
./bootblocks/minix_elks.sym ./bootblocks/minix_elks.s
 

###############################################################################
 #
@@ -146,8 +150,8 @@
 $(SIBO_TARGET_FS):
 	dd if=/dev/zero of=$(SIBO_TARGET_FS) bs=1024
count=$(SIBO_TARGET_BLKS)
 
-$(ELKSCMD_DIR)/rootfs_template/etc/passwd:
rootfs_template.tar
-	tar xpf rootfs_template.tar
+$(ELKSCMD_DIR)/rootfs_template/etc/passwd:
rootfs_template.tar.gz
+	tar xzpf rootfs_template.tar.gz
 
 $(ELKSCMD_DIR)/rootfs_template/etc/issue:
$(ELKSCMD_DIR)/rootfs_template/etc/passwd
$(ELKS_DIR)/Makefile
 	$(ELKSCMD_DIR)/tools/ver.pl $(ELKS_DIR)/Makefile >
$(ELKSCMD_DIR)/rootfs_template/etc/issue
@@ -155,37 +159,37 @@
 mount_combfs: $(COMB_TARGET_FS)
$(ELKSCMD_DIR)/rootfs_template/etc/issue
 	$(MKFS) $(MKFS_OPTS) $(COMB_TARGET_FS)
$(COMB_TARGET_BLKS)
 	mount $(COMB_TARGET_FS) $(TARGET_MNT) $(LOOP)
-	(cd $(ELKSCMD_DIR)/rootfs_template ; tar cf -
--exclude CVS *) | \
-		(cd $(TARGET_MNT) ; tar xpvf -)
-	(cd $(TARGET_MNT)/dev ; ./MAKEDEV)
+	cd $(ELKSCMD_DIR)/rootfs_template; tar cf test.tar
./; cp ./test.tar $(TARGET_MNT)
+	cd $(TARGET_MNT); tar -xpf ./test.tar; rm -rf
test.tar; cd $(ELKSCMD_DIR)
+	rm -rf ./rootfs_template/test.tar; ./MAKEDEV
 
 mount_full3fs: $(FULL3_TARGET_FS)
$(ELKSCMD_DIR)/rootfs_template/etc/issue
 	$(MKFS) $(MKFS_OPTS) $(FULL3_TARGET_FS)
$(FULL3_TARGET_BLKS)
 	mount $(FULL3_TARGET_FS) $(TARGET_MNT) $(LOOP)
-	(cd $(ELKSCMD_DIR)/rootfs_template ; tar cf -
--exclude CVS *) | \
-		(cd $(TARGET_MNT) ; tar xpvf -)
-	(cd $(TARGET_MNT)/dev ; ./MAKEDEV)
+	cd $(ELKSCMD_DIR)/rootfs_template; tar cf test.tar
./; cp ./test.tar $(TARGET_MNT)
+	cd $(TARGET_MNT); tar -xpf ./test.tar; rm -rf
test.tar; cd $(ELKSCMD_DIR)
+	rm -rf ./rootfs_template/test.tar; ./MAKEDEV
 
 mount_full5fs: $(FULL5_TARGET_FS)
$(ELKSCMD_DIR)/rootfs_template/etc/issue
 	$(MKFS) $(MKFS_OPTS) $(FULL5_TARGET_FS)
$(FULL5_TARGET_BLKS)
 	mount $(FULL5_TARGET_FS) $(TARGET_MNT) $(LOOP)
-	(cd $(ELKSCMD_DIR)/rootfs_template ; tar cf -
--exclude CVS *) | \
-		(cd $(TARGET_MNT) ; tar xpvf -)
-	(cd $(TARGET_MNT)/dev ; ./MAKEDEV)
+	cd $(ELKSCMD_DIR)/rootfs_template; tar cf test.tar
./; cp ./test.tar $(TARGET_MNT)
+	cd $(TARGET_MNT); tar -xpf ./test.tar; rm -rf
test.tar; cd $(ELKSCMD_DIR)
+	rm -rf ./rootfs_template/test.tar; ./MAKEDEV
 
 mount_rootfs: $(ROOT_TARGET_FS)
$(ELKSCMD_DIR)/rootfs_template/etc/issue
-	$(MKFS) $(MKFS_OPTS) $(ROOT_TARGET_FS)
$(ROOT_TARGET_BLKS)
+	$(MKFS) -i 200 $(MKFS_OPTS) $(ROOT_TARGET_FS)
$(ROOT_TARGET_BLKS)
 	mount $(ROOT_TARGET_FS) $(TARGET_MNT) $(LOOP)
-	(cd $(ELKSCMD_DIR)/rootfs_template ; tar cf -
--exclude CVS *) | \
-		(cd $(TARGET_MNT) ; tar xpvf -)
-	(cd $(TARGET_MNT)/dev ; ./MAKEDEV)
+	cd $(ELKSCMD_DIR)/rootfs_template; tar cf test.tar
./; cp ./test.tar $(TARGET_MNT)
+	cd $(TARGET_MNT); tar -xpf ./test.tar; rm -rf
test.tar; cd $(ELKSCMD_DIR)
+	rm -rf ./rootfs_template/test.tar; ./MAKEDEV
 
 mount_rootnetfs: $(ROOT_NET_TARGET_FS)
$(ELKSCMD_DIR)/rootfs_template/etc/issue
 	$(MKFS) $(MKFS_OPTS) $(ROOT_NET_TARGET_FS)
$(ROOT_NET_TARGET_BLKS)
 	mount $(ROOT_NET_TARGET_FS) $(TARGET_MNT) $(LOOP)
-	(cd $(ELKSCMD_DIR)/rootfs_template ; tar cf -
--exclude CVS *) | \
-		(cd $(TARGET_MNT) ; tar xpvf -)
-	(cd $(TARGET_MNT)/dev ; ./MAKEDEV)
+	cd $(ELKSCMD_DIR)/rootfs_template; tar cf test.tar
./; cp ./test.tar $(TARGET_MNT)
+	cd $(TARGET_MNT); tar -xpf ./test.tar; rm -rf
test.tar; cd $(ELKSCMD_DIR)
+	rm -rf ./rootfs_template/test.tar; ./MAKEDEV
 	
 mount_sibofs: $(SIBO_TARGET_FS)
$(ELKSCMD_DIR)/rootfs_template/etc/issue
 	$(MKFS) $(MKFS_OPTS) $(SIBO_TARGET_FS)
$(SIBO_TARGET_BLKS)
@@ -210,35 +214,42 @@
 	
 
 comb: mount_combfs $(ELKS_DIR)/arch/i86/boot/Image
$(FD_BSECT) $(KHELPER)
+	dd if=/dev/zero of=./flagfile bs=1k count=0
 	@for i in $(DIRS); do make -C $$i min_rfs ; done
+	mkdir $(TARGET_MNT)/boot
 	cp $(ELKS_DIR)/arch/i86/boot/Image
$(TARGET_MNT)/boot/linux
 	cp $(KHELPER) $(TARGET_MNT)/boot/boot
 	umount $(COMB_TARGET_FS)
 	dd if=$(FD_BSECT) of=$(COMB_TARGET_FS) bs=512
count=2 conv=notrunc
 
 full3: mount_full3fs $(ELKS_DIR)/arch/i86/boot/Image
$(FD_BSECT) $(KHELPER)
+	mkdir $(TARGET_MNT)/bin; cp -p -f
$(ELKSNET_DIR)/ktcp/ktcp $(TARGET_MNT)/bin
 	@for i in $(DIRS); do make -C $$i rfs ; done
+	mkdir $(TARGET_MNT)/boot
 	cp $(ELKS_DIR)/arch/i86/boot/Image
$(TARGET_MNT)/boot/linux
 	cp $(KHELPER) $(TARGET_MNT)/boot/boot
 	umount $(FULL3_TARGET_FS)
 	dd if=$(FD_BSECT) of=$(FULL3_TARGET_FS) bs=512
count=2 conv=notrunc
 
-full5: mount_full3fs $(ELKS_DIR)/arch/i86/boot/Image
$(FD_BSECT) $(KHELPER)
+full5: mount_full5fs $(ELKS_DIR)/arch/i86/boot/Image
$(FD_BSECT) $(KHELPER)
 	@for i in $(DIRS); do make -C $$i rfs ; done
+	mkdir $(TARGET_MNT)/boot
 	cp $(ELKS_DIR)/arch/i86/boot/Image
$(TARGET_MNT)/boot/linux
 	cp $(KHELPER) $(TARGET_MNT)/boot/boot
-	umount $(FULL3_TARGET_FS)
-	dd if=$(FD_BSECT) of=$(FULL3_TARGET_FS) bs=512
count=2 conv=notrunc
+	umount $(FULL5_TARGET_FS)
+	dd if=$(FD_BSECT) of=$(FULL5_TARGET_FS) bs=512
count=2 conv=notrunc
 
 root: mount_rootfs
+	rm -rf ./flagfile
 	@for i in $(DIRS); do make -C $$i min_rfs ; done
 	umount $(ROOT_TARGET_FS)
 	
 comb_net: mount_rootnetfs
$(ELKS_DIR)/arch/i86/boot/Image $(FD_BSECT) $(KHELPER)
 	cd $(ELKSNET_DIR)/ktcp ; \
 	make ; \
-	cp -p -f ktcp $(TARGET_MNT)/bin
+	mkdir $(TARGET_MNT)/bin; cp -p -f ktcp
$(TARGET_MNT)/bin
 	@for i in $(DIRS); do make -C $$i net_rfs ; done
+	mkdir $(TARGET_MNT)/boot
 	cp $(ELKS_DIR)/arch/i86/boot/Image
$(TARGET_MNT)/boot/linux
 	cp $(KHELPER) $(TARGET_MNT)/boot/boot
 	umount $(ROOT_NET_TARGET_FS)

diff -ruN ./elks-stuff/elkscmd/bootblocks/minix.c
./elks/elkscmd/bootblocks/minix.c
--- ./elks-stuff/elkscmd/bootblocks/minix.c	1969-12-31
19:00:00.000000000 -0500
+++ ./elks/elkscmd/bootblocks/minix.c	2004-04-18
15:00:49.000000000 -0400
@@ -0,0 +1,943 @@
+/*
+ * This bootblock loads the linux-8086 executable in
the file 'boot'
+ * from the root directory of a minix filesystem.
+ *
+ * Copyright (C) 1990-1998 Robert de Bath,
distributed under the GPL Version 2
+ * Based on minix filesystem definitions.
+ *
+ * TODO:
+ *       Alter nogood() to do a mov sp,... so the
helper program can override
+ *       the panic message.
+ */
+
+#include <a.out.h>
+#include "minix.h"
+
+/* #define DOTS		/* define to have dots printed */
+/* #define HARDDISK	/* Define for hard disk version
*/
+/* #define TRY_FLOPPY	/* To do trial reads to find
floppy size */
+
+/* #define MIN_SPACE	   */
+
+#define zone_shift 0	/* for any < 32M (!= 0 not
supported yet, if ever) */
+#define seg_at(k) ((k)*64)
+#define seg_of(p) ((unsigned int)p >>4)
+#define BOOTSEG	  (0x07c0)
+#define LOADSEG   (0x1000)
+#define ORGADDR   (0x0500)
+
+#ifdef HARDDISK
+#define get_now()
+#endif
+
+#ifdef zone_shift
+#if zone_shift == 0
+#define load_zone load_block
+#endif
+#else
+static short     zone_shift;
+#endif
+
+#asm 
+BOOTADDR = 0x7c00
+
+.text
+! Apparently on startup the only things we can assume
are that we start at
+! `start` (ABS addr $07C00) and the boot sector is in
the segment.
+
+! So first set CS=DS=ES=SS=0
+! The we move this to $0500 and put the stack at the
top of the first 64k.
+! The directory 'file' is loaded $1500 and scanned
there.
+! The final executable will be loaded in the 2nd 64k
chunk.
+!
+org ORGADDR	! The lowest available address.
+start:
+#ifndef MIN_SPACE
+  include sysboot.s
+
+org start	! The lowest available address, again.
+  j	skip_vars
+
+org dos_sysid
+  .ascii "MINIXFS BOOT (C) 1990-1999,  Robert de
Bath"
+
+  org codestart
+#endif
+
+! A few variables we need to know the positions of
for patching, so export
+! them and as86_encaps will make some variables. Put
them here at the start
+! so they're in the same place for both Floppy and
harddisk versions as they
+! will be used by helper programs.
+
+export	inode			! Inode to search
+inode:
+_inode: .word	1		! ROOT_INODE
+
+#ifndef MIN_SPACE
+export	dinode			! Inode of directory file was found
in.
+dinode:
+_dinode: .word	1		! ROOT_INODE
+#endif
+
+export	bootfile		! File to boot, make this whatever
you like,
+bootfile:			! 'boot' is good, 'linux' too.
+_bootfile:
+   .ascii	"boot"
+   .byte	0,0,0,0,0,0,0,0,0,0
+
+skip_vars:
+#ifdef HARDDISK
+  mov	bx,[si+8]	! Fetch the linear address of part
from DS:SI
+  mov	dh,[si+10]	! DL is drive number
+#endif
+
+  xor	ax,ax		! All segments are zero, first 64k of
mem.
+  mov	ds,ax
+  mov	es,ax
+  mov	ss,ax
+  mov	sp,ax
+
+#ifndef HARDDISK
+loopy:
+  mov	ax,#$0203		! Read 3 sectors, code + superblock.
+  mov	bx,#start		! Where this _should_ be
+  mov	cx,#$0001		! From sector 1
+  xor	dx,dx			! Of the floppy drive head zero
+  int	$13
+  jc	loopy
+#else
+
+  mov	cx,#$100	! Move 256 words
+  mov	si,#BOOTADDR	! From default BB
+  mov	di,#ORGADDR	! To the correct address.
+  rep
+   movsw
+
+  xchg	dl,dh
+  mov	[bootpart],bx	! Save the partition sector
offset (and drive)
+  mov	[bootpart+2],dx
+
+  ! Read next 2 sectors of hd.
+  xor	dx,dx
+  mov	cx,#1
+  mov	bx,#ORGADDR+$200
+  mov	al,#2
+
+  call	load_sect
+#endif
+
+  jmpi	code,#0
+
+#endasm
+
+/*  /* */
+/****************************************************************************/
+/* Section cdef */
+/****************************************************************************/
+
+/* The name of the file and inode to start */
+extern char bootfile[];
+extern inode_nr inode;
+extern inode_nr dinode;
+
+/* For multi-sector reads */
+extern sect_nr lastsect;
+extern sect_nr firstsect;
+extern unsigned loadaddr;
+extern unsigned loadcount;
+
+/* Keep track of zones to load */
+extern zone_nr * next_zone;
+extern zone_nr * end_zone;
+extern zone_nr   indirect;
+
+/* Where to load zones */
+extern unsigned ldaddr;
+
+/* Directory reading */
+extern dir_struct * dirptr;
+extern unsigned flength;
+extern unsigned dir_32;
+
+#ifndef HARDDISK
+/* The 'shape' of the floppy - intuit from superblock
or try to read max */
+extern unsigned n_sectors;
+#endif
+
+extern struct super_block b_super;
+extern d_inode            b_inode[INODES_PER_BLOCK];
+extern zone_nr            b_zone[NR_INDIRECTS];
+extern dir_struct         directory[];
+
+/*  /* */
+/****************************************************************************/
+/* Section adef */
+/****************************************************************************/
+
+#asm
+.text
+
+#ifdef HARDDISK
+bootpart:   .long	0
+#else
+_loadcount: .word	0
+_firstsect: .word	0
+_loadaddr:  .word	0
+_lastsect:  .word	0
+#endif
+
+  block start+0x400
+_b_super:	.blkb 512
+
+#ifndef MIN_SPACE
+export helper
+helper:		.blkb 1024
+export helper_end
+helper_end:
+#endif
+
+_b_inode:	.blkb 1024
+_b_zone:	.blkb 1024
+
+#ifdef MIN_SPACE
+temp_space:	.blkb 512
+#endif
+probe_buf:
+_directory:	.blkb 32768
+  endb
+
+#endasm
+
+/*  /* */
+/****************************************************************************/
+/* Section nogood */
+/****************************************************************************/
+/* #if defined(HARDDISK) && !defined(SKIPBOOT) */
+#ifndef SKIPBOOT
+static
+nogood()
+{
+#asm
+  mov	si,#fail_fs
+min_nextc:
+  lodsb
+  cmp	al,#0
+  jz	min_eos
+  mov	bx,#7
+  mov	ah,#$E		! Can't use $13 cause that's AT+ only!
+  int	$10
+  jmp	min_nextc
+min_eos:		! Wait for a key then reboot
+  xor	ax,ax
+  int	$16
+  jmpi	$0,$FFFF	! Reboot.
+
+fail_fs:
+  .byte		13,10
+#if defined(HARDDISK)
+  .asciz	"Initial boot failed, press return to
reboot\r\n"
+#else
+  .asciz	"Boot failed:"
+#endif
+#endasm
+}
+
+#else
+
+static
+nogood()
+{
+/* This didn't work, chain the boot sector of the HD
*/
+#asm
+  push	cs
+  pop	es
+hcode:
+  mov	ax,#$0201		! Read 1 sector
+  mov	bx,#BOOTADDR		! In the boot area
+  mov	cx,#$0001		! From sector 1
+  mov	dx,#$0080		! Of the hard drive head zero
+  int	$13
+  jc	hcode			! Keep trying forever!
+  jmpi	BOOTADDR,0
+#endasm
+}
+#endif
+
+/*  /* */
+/****************************************************************************/
+/* Section hd_sect */
+/****************************************************************************/
+#ifdef HARDDISK
+#asm
+!
+! Load AL sectors from linear sector DX:CX into
location ES:BX
+! Linear sector zero is at [bootpart]
+! This loads one sector at a time, but that's OK
cause even in the _very_
+! worst case it'll take no more that 5 seconds to
load a 16 bit executable.
+!
+load_sect:
+  add	cx,[bootpart]
+  adc	dx,[bootpart+2]
+moresect:
+  cmp	al,#0
+  jnz	onesect
+  clc
+  ret
+
+! Load one sector...
+onesect:
+  push	ax	! Save lots
+  push	di
+  push	si
+  push	cx	! Drive and sector.
+  push	dx
+
+  push	es	! Load location
+  push	bx
+
+  push	cx	! Drive and sector again.
+  push	dx
+
+  ! Fetch drive 'shape'
+  mov	ah,#8
+  mov	dl,dh
+  int	$13	! DX:CX = drive specification
+  jc	_nogood
+
+  and	cx,#$3F	! Get sector count => DI
+  mov	di,cx
+
+  xor	dl,dl	! Get head count  => SI
+  xchg	dl,dh
+  inc	dx
+  mov	si,dx
+  
+  pop	dx	! Get back drive and sector
+  pop	ax
+
+  mov	bl,dh	! Save drive
+  xor	dh,dh
+
+  div	di	! DX=sector, AX=track number
+  mov	cx,dx
+  inc	cl	! CL=sector number
+
+  xor	dx,dx
+  div	si	! DX=head, AX=cylinder
+
+  mov	dh,dl
+  mov	dl,bl	! DX for int 1302
+
+  xchg	al,ah
+  ror	al,#1
+  ror	al,#1
+  or	cx,ax	! CX for int 1302
+
+  pop	bx	! ES:BX for int 1302
+  pop	es
+
+  mov	di,#5	! Lots of retries for a hd
+retry:
+  mov	ax,#$0201
+  int	$13
+  jnc	got_hd_sect
+
+  xor	ax,ax	! Reset between each try.
+  int	$13
+
+  dec	di
+  jnz	retry
+  br	_nogood
+
+got_hd_sect:
+  pop	dx
+  pop	cx
+  pop	si
+  pop	di
+  pop	ax
+
+  dec	al
+  add	cx,#1
+  adc	dh,#0
+  add	bh,#2
+  jmp	moresect
+#endasm
+#endif
+
+/****************************************************************************/
+/* This is the end of the parts that MUST be in the
first sector            */
+/* From here down the functions can safely be in any
order.                 */
+/****************************************************************************/
+
+/*  /* */
+/****************************************************************************/
+/* Section fd_block */
+/****************************************************************************/
+#ifndef HARDDISK
+static
+load_block(address, blkno)
+unsigned address, blkno;
+{
+   register sect_nr sectno;
+   if(blkno == 0) { zero_block(address); return; }
+#ifdef DOTS
+   prt_dot();
+#endif
+
+   sectno = (sect_nr)blkno * 2;
+   load_sect(address,    sectno);
+   load_sect(address+32, sectno+1);
+}
+#endif
+
+/****************************************************************************/
+/* Section fd_bpb */
+/****************************************************************************/
+#ifndef HARDDISK
+#asm
+_set_bpb:
+#ifdef MIN_SPACE
+bios_tabl=temp_space		! Temp space.
+bios_disk=temp_space+4		!
+#else
+bios_tabl=dosfs_stat		! Temp space.
+bios_disk=dosfs_stat+4		!
+#endif
+
+#ifndef __CALLER_SAVES__
+  push	si
+  push	di
+#endif
+
+  mov	di,#bios_disk
+  mov	bx,#0x78		
+! 0:bx is parameter table address
+
+  push	ds
+  push	di
+
+  mov	si,[bx]
+  mov	ax,[bx+2]
+  mov	[bios_tabl],si
+  mov	[bios_tabl+2],ax
+  push	ax
+
+  pop	ds
+! ds:si is source
+
+! copy 12 bytes
+  mov	cl,#6			
+  cld
+  rep
+  movsw
+
+  pop	di
+  pop	ds
+  mov	ax,[_n_sectors]
+  movb	4[di],al		! patch sector count
+
+  mov	[bx],di
+  mov	2[bx],es
+
+#ifndef __CALLER_SAVES__
+  pop	si
+  pop	di
+#endif
+  ret
+
+_unset_bpb:
+! 0:0x78 is parameter table address
+
+  mov	ax,[bios_tabl]
+  mov	[0x78],ax
+  mov	ax,[bios_tabl+2]
+  mov	[0x78+2],ax
+  ret
+
+#endasm
+#endif
+
+/****************************************************************************/
+/* Section fd_get_now */
+/****************************************************************************/
+#ifndef HARDDISK
+static
+get_now()
+{
+#asm
+  mov	si,#5
+retry_get:
+  xor	dx,dx
+  mov	cx,[_firstsect]
+  shr	ch,#1
+  adc	dh,#0
+  mov	es,[_loadaddr]
+  xor	bx,bx
+  mov	ax,[_loadcount]
+  test	ax,ax
+  jz	no_load
+  mov	ah,#2
+  int	$13		! Try fetch
+  jnc	no_load
+  xor	ax,ax		! Bad, retry.
+  int	$13
+  dec	si
+  jnz	retry_get
+  br	_nogood
+no_load:
+  xor	ax,ax
+  mov	[_loadcount],ax
+#endasm
+}
+#endif
+
+/****************************************************************************/
+/* Section fd_probe */
+/****************************************************************************/
+#ifndef HARDDISK
+#ifdef TRY_FLOPPY
+#asm
+!-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+!
+! These are the number of sectors per track that will
be scanned for.
+! For 3.5 inch floppies 36 is 2.88 Mb, 18 is 1.44Mb,
21 is 1.68Mb on
+! a 1.44Mb floppy drive. 15 and 9 are for 5.25 inch
floppies.
+
+disksizes: .byte 36,21,18,15,9
+
+! It seems that there is no BIOS call to get the
number of sectors.  Guess
+! 36 sectors if sector 36 can be read, 18 sectors if
sector 18 can be read,
+! 15 if sector 15 can be read.  Otherwise guess 9.
+
+_probe_sectors:
+	mov	si,#disksizes		! table of sizes to try
+
+probe_loop:
+	lodsb
+	cbw				! extend to word
+	mov	_n_sectors, ax
+	cmp	al,#9
+	je	got_sectors		! if all else fails, try 9
+	xchg	ax, cx			! cx = track and sector
+	xor	dx, dx			! drive 0, head 0
+	mov	bx,#probe_buf 		! address after setup (es = cs)
+	mov	ax,#0x0201		! service 2, 1 sector
+	int	0x13
+	jc	probe_loop		! try next value
+got_sectors:
+
+	ret
+#endasm
+#else
+probe_sectors()
+{
+   /* Guess the number of sectors based on the size
of the file system */
+   if( (n_sectors = b_super.s_nzones / 40) > 11 )
n_sectors /= 2;
+}
+#endif
+#endif
+
+/****************************************************************************/
+/* Section fd_sect */
+/****************************************************************************/
+#ifndef HARDDISK
+static
+load_sect(address, sectno)
+unsigned address;
+sect_nr sectno;
+{
+   register sect_nr nsect;
+
+   nsect   =  sectno%n_sectors +1;
+   sectno /= n_sectors;
+   nsect  |= (sectno<<8);
+
+   if( loadcount )
+   {
+      lastsect++;
+      if( ( address & 4095 ) && nsect == lastsect )
+      {
+         loadcount++;
+         return;
+      }
+      get_now();
+   }
+
+   lastsect  = firstsect = nsect;
+   loadaddr  = address;
+   loadcount = 1;
+}
+#endif
+
+/****************************************************************************/
+/* Section fd_zeroblk */
+/****************************************************************************/
+#ifndef HARDDISK
+static
+zero_block(address)
+{
+#asm
+#if __FIRST_ARG_IN_AX__
+  mov	es,ax
+#else
+  mov	bx,sp
+  mov	es,[bx+2]
+#endif
+  push	di
+  mov	cx,#512
+  xor	ax,ax
+  mov	di,ax
+  rep
+   stosw
+  pop	di
+#endasm
+}
+#endif
+
+/****************************************************************************/
+/* Section hd_block */
+/****************************************************************************/
+#ifdef HARDDISK
+/*----------------------------------*/
+/* Hard disk block driver           */
+/*----------------------------------*/
+
+#asm
+_load_block:
+  push	bp
+  mov	bp,sp
+#if __FIRST_ARG_IN_AX__
+  ! Fetch load location
+  mov	es,ax
+
+  ! Test for block zero
+  mov	ax,4[bp]
+#else
+  ! Fetch load location
+  mov	ax,[bp+4]
+  mov	es,ax
+
+  ! Test for block zero
+  mov	ax,6[bp]
+#endif
+  test	ax,ax
+  jne 	real_block
+
+  ! Iff block zero, zap memory
+  push	di
+  mov	cx,#512
+  xor	ax,ax
+  mov	di,ax
+  rep
+   stosw
+  pop	di
+
+func_exit:
+  mov	sp,bp
+  pop	bp
+  ret
+
+real_block:
+#ifdef DOTS
+  push	ax
+  call	_prt_dot
+  pop	ax
+#endif
+
+! Load a real block.
+  mov	cx,ax
+  xor	dx,dx
+  shl	cx,#1
+  rcl	dx,#1
+
+  xor	bx,bx
+  mov	al,#2
+  call	load_sect 
+
+  j	func_exit
+#endasm
+#endif
+
+/****************************************************************************/
+/* Section main */
+/****************************************************************************/
+#asm
+code:
+  call	_loadprog
+  call	_runprog
+  br	_nogood
+
+#endasm
+
+/****************************************************************************/
+/* Section prt_dots */
+/****************************************************************************/
+#ifdef DOTS
+#asm
+_prt_crlf:
+  mov   al,#13
+  call	outch
+  mov	al,#10
+  j	outch
+_prt_dot:
+  mov   al,#'.
+outch:
+  mov	ah,#$0E
+  mov	bx,#7
+  int	$10
+  ret
+#endasm
+#endif
+
+/****************************************************************************/
+/* Section end_1 */
+/****************************************************************************/
+#if defined(HARDDISK) || !defined(MIN_SPACE)
+#asm
+end_of_part1:
+#ifdef HARDDISK
+  if *>start+0x1FE	! Leave space for magic
+#else
+  if *>start+0x200
+#endif
+     fail! Part 1 too large!
+  endif
+  .blkb	0x200+start-*
+#endasm
+#endif
+
+/****************************************************************************/
+/* Section prog_load */
+/****************************************************************************/
+
+loadprog()
+{
+#ifdef DOTS
+   prt_dot();
+#endif
+   if( b_super.s_magic == SUPER_MAGIC2 ) 
+      dir_32 = 1;
+   else if( b_super.s_magic == SUPER_MAGIC )
+      dir_32 = 0;
+   else
+      nogood();
+
+#ifdef zone_shift
+   if( zone_shift != b_super.s_log_zone_size)
nogood();
+#else
+   zone_shift = b_super.s_log_zone_size;
+#endif
+
+#ifndef HARDDISK
+   probe_sectors();
+
+   /* if( (n_sectors = b_super.s_nzones / 40) > 11 )
n_sectors /= 2; */
+
+   set_bpb();
+#endif
+
+try_again:;
+   inode--;
+   load_block(seg_of(b_inode), inode/INODES_PER_BLOCK
+                          + b_super.s_imap_blocks
+                          + b_super.s_zmap_blocks
+                          + 2);
+   get_now();
+
+   ldaddr = LOADSEG;		/* Load at 64k mark */
+
+   {
+      register d_inode * i_ptr;
+      i_ptr = b_inode + inode%INODES_PER_BLOCK;
+      next_zone = i_ptr->i_zone;
+      flength   = i_ptr->i_size;
+      if( (i_ptr->i_mode & I_TYPE) == I_DIRECTORY )
+      {
+	 ldaddr = seg_of(directory);
+#ifndef MIN_SPACE
+	 dinode  = inode+1;	/* Remember current directory */
+#endif
+	 inode  = 0;		/* Mark - we've no _file_ inode yet */
+      }
+   }
+
+   end_zone = next_zone+NR_DZONE_NUM;
+   load_zone(seg_of(b_zone), (indirect =
next_zone[NR_DZONE_NUM]));
+   get_now();
+
+   for(;;)
+   {
+      if( next_zone >= end_zone )
+      {
+         if( indirect != 0 )
+         {
+            next_zone = b_zone;
+            end_zone  = next_zone + NR_INDIRECTS;
+            indirect  = 0;
+            continue;
+         }
+	 break;
+      }
+      load_zone(ldaddr, *next_zone);
+      next_zone++;
+      ldaddr += (seg_at(1) << zone_shift);
+   }
+   get_now();
+
+#ifdef DOTS
+   prt_crlf();
+#endif
+   if(!inode)
+   {
+      dirptr = directory;
+      while(flength > 0)
+      {
+register char * s = bootfile;
+register char * p = dirptr->d_name;
+
+	 if( dirptr->d_inum )
+	 {
+	    for(;;)
+	    {
+	       if( *s == '\0')
+	       {
+		  if(*p == '\0')
+		  {
+		     inode = dirptr->d_inum;
+		     goto try_again;
+		  }
+		  break;
+	       }
+	       if( *s++ != *p++ ) break;
+	    }
+	 }
+	 flength -= 16;
+	 dirptr++;
+	 if( dir_32 )
+	 {
+	    flength -= 16;
+	    dirptr++;
+	 }
+      }
+      nogood();
+   }
+#ifndef HARDDISK
+   unset_bpb();
+#endif
+}
+
+/****************************************************************************/
+/* Section prog_run */
+/****************************************************************************/
+static
+runprog()
+{
+/* It all worked, run the loaded executable */
+#asm
+#ifdef HARDDISK
+  mov	dx,[bootpart+2]
+  xchg	dh,dl		! DX => hard drive
+  push	[bootpart]	! CX => partition offset
+  xor	si,si
+#else
+  xor	dx,dx		! DX=0 => floppy drive
+  push	dx		! CX=0 => partition offset = 0
+  mov	si,[_n_sectors]	! Save for monitor.out
+#endif
+
+  mov	bx,#LOADSEG
+  mov	ds,bx		! DS = loadaddress
+  xor	di,di		! Zero
+  mov	ax,[di]
+  cmp	ax,#0x0301	! Right magic ?
+  jnz	binfile		! Yuk ... assume .SYS
+  inc	bx
+  inc	bx		! bx = initial CS
+  mov	ax,[di+2]
+  and	ax,#$20		! Is it split I/D ?
+  jz	impure		! No ...
+  mov	cl,#4
+  mov	ax,[di+8]
+  shr	ax,cl
+impure:
+  pop	cx
+  add	ax,bx
+  mov	ss,ax
+  mov	sp,[di+24]	! Chmem value
+  mov	ds,ax
+binfile:
+
+  push	bx
+  push	di		!  jmpi	0,#LOADSEG+2
+  retf
+#endasm
+}
+
+/****************************************************************************/
+/* Section sys_libs */
+/****************************************************************************/
+#asm
+! These functions are pulled from the C library.
+libstuff:
+imodu:
+	xor	dx,dx
+	div	bx
+	mov	ax,dx		! instruction queue full so xchg slower
+	ret
+idiv_u:
+	xor	dx,dx
+	div	bx
+	ret
+#ifndef zone_shift
+isl:
+islu:
+	mov	cl,bl
+	shl	ax,cl
+	ret
+#endif
+libend:
+#endasm
+
+/****************************************************************************/
+/* Section sys_vars */
+/****************************************************************************/
+#asm
+#ifdef MIN_SPACE
+  block	temp_space+64
+#endif
+vars:
+#ifndef HARDDISK
+_n_sectors:	.blkw 1
+#endif
+_next_zone:	.blkw 1
+_end_zone:	.blkw 1
+_indirect:	.blkw 1
+_ldaddr:	.blkw 1
+_dirptr:	.blkw 1
+_flength:	.blkw 1
+_dir_32:	.blkw 1
+varend:
+#ifdef MIN_SPACE
+  endb
+#endif
+#endasm
+
+/****************************************************************************/
+/* Section end_2 */
+/****************************************************************************/
+#asm
+end_of_prog:
+  if *>start+0x400
+     fail! Part 2 too large!
+  endif
+
+  if end_of_prog<start+0x201
+  .blkb	0x400+start-*
+  else
+  .blkb	0x3FF+start-*
+  .byte 0xFF
+  endif
+
+#endasm
+
+/****************************************************************************/
diff -ruN ./elks-stuff/elkscmd/bootblocks/minix.h
./elks/elkscmd/bootblocks/minix.h
--- ./elks-stuff/elkscmd/bootblocks/minix.h	1969-12-31
19:00:00.000000000 -0500
+++ ./elks/elkscmd/bootblocks/minix.h	2004-04-18
15:00:59.000000000 -0400
@@ -0,0 +1,104 @@
+/****************************************************************************/
+/* Super block table.  The root file system and every
mounted file system
+ * has an entry here.  The entry holds information
about the sizes of the bit
+ * maps and inodes.  The s_ninodes field gives the
number of inodes available
+ * for files and directories, including the root
directory.  Inode 0 is 
+ * on the disk, but not used.  Thus s_ninodes = 4
means that 5 bits will be
+ * used in the bit map, bit 0, which is always 1 and
not used, and bits 1-4
+ * for files and directories.  The disk layout is:
+ *
+ *      Item        # blocks
+ *    boot block      1
+ *    super block     1
+ *    inode map     s_imap_blocks
+ *    zone map      s_zmap_blocks
+ *    inodes        (s_ninodes + 1 + INODES_PER_BLOCK
- 1)/INODES_PER_BLOCK
+ *    unused        whatever is needed to fill out
the current zone
+ *    data zones    (s_nzones - s_firstdatazone) <<
s_log_zone_size
+ *
+ * A super_block slot is free if s_dev == NO_DEV. 
+ */
+
+#define BLOCK_SIZE      1024	/* # bytes in a disk
block */
+
+/* Flag bits for i_mode in the inode. */
+#define I_TYPE          0170000	/* this field gives
inode type */
+#define I_REGULAR       0100000	/* regular file, not
dir or special */
+#define I_BLOCK_SPECIAL 0060000	/* block special file
*/
+#define I_DIRECTORY     0040000	/* file is a
directory */
+#define I_CHAR_SPECIAL  0020000	/* character special
file */
+#define I_SET_UID_BIT   0004000	/* set effective uid
on exec */
+#define I_SET_GID_BIT   0002000	/* set effective gid
on exec */
+#define ALL_MODES       0006777	/* all bits for user,
group and others */
+#define RWX_MODES       0000777	/* mode bits for RWX
only */
+#define R_BIT           0000004	/* Rwx protection bit
*/
+#define W_BIT           0000002	/* rWx protection bit
*/
+#define X_BIT           0000001	/* rwX protection bit
*/
+#define I_NOT_ALLOC     0000000	/* this inode is free
*/
+
+/* Type definitions */
+typedef unsigned short unshort;	/* must be 16-bit
unsigned */
+typedef unshort block_nr;	/* block number */
+typedef unshort inode_nr;	/* inode number */
+typedef unshort zone_nr;	/* zone number */
+typedef unshort bit_nr;		/* if inode_nr & zone_nr
both unshort,
+				   then also unshort, else long */
+
+typedef unshort sect_nr;
+
+typedef long zone_type;		/* zone size */
+typedef unshort mask_bits;	/* mode bits */
+typedef unshort dev_nr;		/* major | minor device
number */
+typedef char links;		/* number of links to an inode
*/
+typedef long real_time;		/* real time in seconds
since Jan 1, 1970 */
+typedef long file_pos;		/* position in, or length of,
a file */
+typedef short uid;		/* user id */
+typedef char gid;		/* group id */
+
+/* Tables sizes */
+#define NR_ZONE_NUMS       9	/* # zone numbers in an
inode */
+#define NAME_SIZE         14	/* # bytes in a
directory component */
+
+/* Miscellaneous constants */
+#define SUPER_MAGIC   0x137F	/* magic number
contained in super-block */
+#define SUPER_MAGIC2  0x138F	/* Secondary magic 30
char names */
+
+#define BOOT_BLOCK  (block_nr)0	/* block number of
boot block */
+#define SUPER_BLOCK (block_nr)1	/* block number of
super block */
+#define ROOT_INODE  (inode_nr)1	/* inode number for
root directory */
+
+/* Derived sizes */
+#define NR_DZONE_NUM     (NR_ZONE_NUMS-2)		/* # zones
in inode */
+#define INODES_PER_BLOCK (BLOCK_SIZE/sizeof(d_inode))
/* # inodes/disk blk */
+#define NR_INDIRECTS     (BLOCK_SIZE/sizeof(zone_nr))
/* # zones/indir blk */
+#define INTS_PER_BLOCK   (BLOCK_SIZE/sizeof(int))	/*
# integers/blk */
+
+struct super_block {
+  inode_nr s_ninodes;		/* # usable inodes on the
minor device */
+  zone_nr s_nzones;		/* total device size, including
bit maps etc */
+  unshort s_imap_blocks;	/* # of blocks used by inode
bit map */
+  unshort s_zmap_blocks;	/* # of blocks used by zone
bit map */
+  zone_nr s_firstdatazone;	/* number of first data
zone */
+  short s_log_zone_size;	/* log2 of blocks/zone */
+  file_pos s_max_size;		/* maximum file size on this
device */
+  short s_magic;		/* magic number to recognize
super-blocks */
+
+} ;
+
+/* Type definitions local to the File System. */
+typedef struct {		/* directory entry */
+  inode_nr d_inum;		/* inode number */
+  char d_name[NAME_SIZE];	/* character string */
+} dir_struct;
+
+/* Declaration of the disk inode used in rw_inode().
*/
+typedef struct {		/* disk inode.  Memory inode is in
"inotab.h" */
+  mask_bits i_mode;		/* file type, protection, etc.
*/
+  uid i_uid;			/* user id of the file's owner */
+  file_pos i_size;		/* current file size in bytes */
+  real_time i_modtime;		/* when was file data last
changed */
+  gid i_gid;			/* group number */
+  links i_nlinks;		/* how many links to this file */
+  zone_nr i_zone[NR_ZONE_NUMS];	/* block nums for
direct, ind, and dbl ind */
+} d_inode;
+
diff -ruN ./elks-stuff/elkscmd/bootblocks/minix.sym
./elks/elkscmd/bootblocks/minix.sym
--- ./elks-stuff/elkscmd/bootblocks/minix.sym
1969-12-31 19:00:00.000000000 -0500
+++ ./elks/elkscmd/bootblocks/minix.sym	2004-05-09
13:36:50.000000000 -0400
@@ -0,0 +1,137 @@
++ 00000500 ----- $start
++ 00000900 ----- $end
+0 FFFFFFFE ---A- ..FFFF
+0 000005B7 ---A- .1
+0 000007A0 ---A- .10
+0 0000078A ---A- .11
+0 00000813 ---A- .12
+0 00000811 ---A- .13
+0 000007C6 ---A- .14
+0 000007F2 ---A- .15
+0 000007D0 ---A- .16
+0 000007F0 ---A- .17
+0 000007D7 ---A- .18
+0 00000896 ---A- .19
+0 00000823 ---A- .1A
+0 00000893 ---A- .1B
+0 0000088C ---A- .1C
+0 0000082B ---A- .1D
+0 00000869 ---A- .1E
+0 0000083F ---A- .1F
+0 000005AD ---A- .2
+0 00000869 ---A- .20
+0 00000867 ---A- .21
+0 0000083F ---A- .22
+0 0000085E ---A- .23
+0 00000845 ---A- .24
+0 0000085C ---A- .25
+0 0000084B ---A- .26
+0 00000867 ---A- .27
+0 00000865 ---A- .28
+0 0000088C ---A- .29
+0 0000087E ---A- .2A
+0 00000893 ---A- .2B
+0 000006B7 ---A- .3
+0 00000697 ---A- .4
+0 000006B4 ---A- .5
+0 000006AC ---A- .6
+0 000006A3 ---A- .7
+0 00000716 ---A- .8
+0 0000070E ---A- .9
+0 00000728 ---A- .A
+0 00000725 ---A- .B
+0 0000071E ---A- .C
+0 00000728 ---A- .D
+0 00000732 ---A- .E
+0 0000072F ---A- .F
+0 00000738 ---A- .FFFF
+0 00007C00 ---A- BOOTADDR
+0 00000F00 ---A- _b_inode
+0 00000900 ---A- _b_super
+0 00001300 ---A- _b_zone
+0 00000542 ---A- _bootfile
+0 00000540 ---A- _dinode
+0 000008E9 ---A- _dir_32
+0 00001700 ---A- _directory
+0 000008E5 ---A- _dirptr
+0 000008DF ---A- _end_zone
+0 00000570 ---A- _firstsect
+0 000008E7 ---A- _flength
+0 00000615 ---A- _get_now
+0 000008E1 ---A- _indirect
+0 0000053E ---A- _inode
+0 00000574 ---A- _lastsect
+0 000008E3 ---A- _ldaddr
+0 000005A0 ---A- _load_block
+0 00000665 ---A- _load_sect
+0 00000572 ---A- _loadaddr
+0 0000056E ---A- _loadcount
+0 00000700 E--A- _loadprog
+0 000008DB ---A- _n_sectors
+0 000008DD ---A- _next_zone
+0 00000576 ---A- _nogood
+0 0000064B ---A- _probe_sectors
+0 000006E7 ---A- _prt_crlf
+0 000006F0 ---A- _prt_dot
+0 0000089B ---A- _runprog
+0 000005DF ---A- _set_bpb
+0 00000608 ---A- _unset_bpb
+0 000006D0 ---A- _zero_block
+0 000008CB ---A- binfile
+0 0000050F ---A- bios_disk
+0 0000050B ---A- bios_tabl
+0 000006FE E--A- bootblock_magic
+0 00000542 E--A- bootfile
+0 000006DE ---A- code
+0 0000053E E--A- codestart
+0 00000540 E--A- dinode
+0 00000646 ---A- disksizes
+0 00000536 ---A- dos4_fattype
+0 0000052B ---A- dos4_label
+0 00000520 ---A- dos4_maxsect
+0 00000524 ---A- dos4_phy_drive
+0 00000527 ---A- dos4_serial
+0 0000050D ---A- dos_clust
+0 00000516 ---A- dos_fatlen
+0 0000051A ---A- dos_heads
+0 0000051C ---A- dos_hidden
+0 00000513 ---A- dos_maxsect
+0 00000515 ---A- dos_media
+0 00000510 ---A- dos_nfat
+0 00000511 ---A- dos_nroot
+0 0000050E ---A- dos_resv
+0 0000050B ---A- dos_sect
+0 00000518 ---A- dos_spt
+0 00000503 ---A- dos_sysid
+0 0000050B E--A- dosfs_stat
+0 000006FA ---A- end_of_part1
+0 000008EB ---A- end_of_prog
+0 00000590 ---A- fail_fs
+0 00000527 ---A- floppy_temp
+0 00000664 ---A- got_sectors
+0 00000B00 E--A- helper
+0 00000F00 E--A- helper_end
+0 000008D6 ---A- idiv_u
+0 000008CF ---A- imodu
+0 000008C1 ---A- impure
+0 0000053E E--A- inode
+0 000008DB ---A- libend
+0 000008CF ---A- libstuff
+0 0000055A ---A- loopy
+0 00000587 ---A- min_eos
+0 00000579 ---A- min_nextc
+0 00000640 ---A- no_load
+0 000006F2 ---A- outch
+0 000006BE ---A- partition_1
+0 000006CE ---A- partition_2
+0 000006DE ---A- partition_3
+0 000006EE ---A- partition_4
+0 00001700 ---A- probe_buf
+0 0000064E ---A- probe_loop
+0 00000618 ---A- retry_get
+0 00000550 ---A- skip_vars
+0 00000500 ---A- start
+0 00000000 ---R- sysboot.s
+0 00000500 ---A- sysboot_start
+0 000008EB ---A- varend
+0 000008DB ---A- vars
diff -ruN ./elks-stuff/elkscmd/bootblocks/minix_elks.c
./elks/elkscmd/bootblocks/minix_elks.c
--- ./elks-stuff/elkscmd/bootblocks/minix_elks.c
1969-12-31 19:00:00.000000000 -0500
+++ ./elks/elkscmd/bootblocks/minix_elks.c	2004-04-18
15:04:37.000000000 -0400
@@ -0,0 +1,152 @@
+
+#define __ASSEMBLY__
+
+#asm
+#include "minix.v"
+
+! Must match minix.c ...
+#define LOADSEG   (0x1000)
+
+! Must match ELKS
+#define ELKS_INITSEG	(0x0100)
+#define ELKS_SYSSEG	(0x1000)
+
+org minix_helper
+
+  push	cs
+  pop	ds
+  xor	ax,ax
+  mov	es,ax
+  mov	ss,ax
+  mov	sp,ax
+
+  mov	cx,#$200		! Move 512 words
+  mov	si,ax			! Current load address.
+  mov	di,#minix_helper	! To the correct address.
+  rep
+   movsw
+
+  mov	ds,ax
+  jmpi	code,0
+
+msg_p2:
+  .asciz	"\r\nLoading ELKS kernel\r\n"
+
+msg_p3:
+  .asciz	"Starting ...\r\n"
+
+aint_elks:
+  .asciz	"Not an ELKS image!"
+
+elks_name:
+  .asciz	"linux"
+  .byte		0,0,0,0,0,0,0,0,0
+
+dispmsg:		! SI now has pointer to a message
+  lodsb
+  cmp	al,#0
+  jz	EOS
+  mov	bx,#7
+  mov	ah,#$E		! Can't use $13 cause that's AT+ only!
+  int	$10
+  jmp	dispmsg
+EOS:
+  ret
+
+code:
+  mov	si,#msg_p2
+  call	dispmsg
+
+  mov	ax,minix_dinode		! In the same directory.
+  mov	minix_inode,ax
+
+  mov	cx,#14
+  mov	si,#elks_name
+  mov	di,#minix_bootfile
+  rep
+   movsb
+
+  call	minix__loadprog
+  				! Ok, now loaded "boot/linux" (or so)
+  mov	si,#msg_p3
+  call	dispmsg
+
+  call	kill_motor		! For kernels without a floppy
driver.
+!
+  mov	ax,#LOADSEG
+  mov	ds,ax
+
+  mov	ax,$1E6			! Check for ELKS magic number
+  cmp	ax,#$4C45
+  jnz	not_elks
+  mov	ax,$1E8
+  cmp	ax,#$534B
+  jz	boot_it
+not_elks:
+  xor	ax,ax
+  mov	ds,ax
+  mov	si,#aint_elks
+  call	dispmsg
+  xor	ax,ax
+  int	$16
+  jmpi	$0,$FFFF
+
+boot_it:
+  mov	ax,#ELKS_INITSEG
+  mov	es,ax
+
+  mov	bl,497			! Fetch number of setup sects.
+  xor	bh,bh
+  inc	bx
+  mov	ax,500			! Fetch system size
+  mov	cl,#5
+  add	ax,#31
+  shr	ax,cl
+  mov	dx,ax
+
+looping:			! Put the setup where it belongs
+  call	copy_sect
+  dec	bx
+  jnz	looping
+
+  mov	ax,#ELKS_SYSSEG
+  mov	es,ax
+
+looping2:			! Put the body code in the right place.
+  call	copy_sect
+  dec	dx
+  jnz	looping2
+  
+  ! Ok, everything should be where it belongs call
it.
+  mov	ax,#ELKS_INITSEG
+  mov	ds,ax
+  mov	es,ax
+  mov	ss,ax
+  mov	sp,#0x4000-12
+  jmpi	0,ELKS_INITSEG+$20
+
+copy_sect:
+  mov	cx,#256
+  xor	si,si
+  xor	di,di
+  rep
+   movsw
+
+  mov	ax,ds
+  add	ax,#32
+  mov	ds,ax
+  mov	ax,es
+  add	ax,#32
+  mov	es,ax
+  ret
+  
+kill_motor:
+  push	dx
+  mov	dx,#0x3f2
+  xor	al, al
+  outb
+  pop	dx
+  ret
+
+#endasm
+
diff -ruN
./elks-stuff/elkscmd/bootblocks/minix_elks.sym
./elks/elkscmd/bootblocks/minix_elks.sym
--- ./elks-stuff/elkscmd/bootblocks/minix_elks.sym
1969-12-31 19:00:00.000000000 -0500
+++ ./elks/elkscmd/bootblocks/minix_elks.sym
2004-05-09 13:36:50.000000000 -0400
@@ -0,0 +1,26 @@
++ 00000B00 ----- $start
++ 00000C19 ----- $end
+0 00000B72 ---A- EOS
+0 00000B42 ---A- aint_elks
+0 00000BBE ---A- boot_it
+0 00000B73 ---A- code
+0 00000BF8 ---A- copy_sect
+0 00000B64 ---A- dispmsg
+0 00000B55 ---A- elks_name
+0 00000C10 ---A- kill_motor
+0 00000BD6 ---A- looping
+0 00000BE1 ---A- looping2
+0 00000700 ---A- minix__loadprog
+0 000006FE ---A- minix_bootblock_magic
+0 00000542 ---A- minix_bootfile
+0 0000053E ---A- minix_codestart
+0 00000540 ---A- minix_dinode
+0 0000050B ---A- minix_dosfs_stat
+0 00000B00 ---A- minix_helper
+0 00000F00 ---A- minix_helper_end
+0 0000053E ---A- minix_inode
+0 00000400 ---A- minix_size
+0 00000500 ---A- minix_start
+0 00000B1B ---A- msg_p2
+0 00000B33 ---A- msg_p3
+0 00000BAB ---A- not_elks

diff -ruN
./elks-stuff/elkscmd/rootfs_template/dev/MAKEDEV
./elks/elkscmd/rootfs_template/dev/MAKEDEV
--- ./elks-stuff/elkscmd/rootfs_template/dev/MAKEDEV
2004-05-28 16:02:01.000000000 -0400
+++ ./elks/elkscmd/rootfs_template/dev/MAKEDEV
1969-12-31 19:00:00.000000000 -0500
@@ -1,264 +0,0 @@
-#!/bin/sh
-
-# Devices are generated by this script in the same
order that they are listed
-# in the Documentation/devices.txt file in the Linux
2.4.18 and5.21 kernel
-# sources. This includes devices that are not
currently relevant to ELKS, to
-# encourage the use of common node numbers when these
devices are eventually
-# implemented.
-#
-# Where different node numbers are currently used by
ELKS, the current ELKS
-# node numbers are generated by lines labelled
"Currently" and the relevant
-# Linux node numbers are generated by lines labelled
"Ought to be".
-#
-# Refer to the MAKESET command, also in this
directory, for usage details.
-
-LINK=/bin/ln
-MKDEV=/bin/mknod
-MKSET=/dev/MAKESET
-
-##############################################################################
-# Ensure required auxilliary script is present.
-
-if ! /bin/test -f "$MKSET"
-then
-    echo ERROR: \"$MKSET\" script missing, unable to
continue.
-    exit 1
-fi
-
-##############################################################################
-# Create memory devices.
-
-	$MKDEV mem	c 1 1
-	$MKDEV kmem	c 1 2
-	$MKDEV null	c 1 3
-#	$MKDEV port	c 1 4
-	$MKDEV zero	c 1 5
-#	$MKDEV core	c 1 6
-	$MKDEV full	c 1 7
-#	$MKDEV random	c 1 8
-#	$MKDEV urandom	c 1 9
-#	$MKDEV aio	c 1 10
-
-##############################################################################
-# RAM disks.
-
-	$MKSET   0 7  $MKDEV ram b 1
-
-	$LINK  ram1	ramdisk
-
-##############################################################################
-# Pseudo-TTY master devices. These are not yet
supported by the ELKS kernel.
-
-#	$MKSET   0 15 $MKDEV ptyp x 2
-#	$MKSET  16 15 $MKDEV ptyq x 2
-#	$MKSET  32 15 $MKDEV ptyr x 2
-#	$MKSET  48 15 $MKDEV ptys x 2
-#	$MKSET  64 15 $MKDEV ptyt x 2
-#	$MKSET  80 15 $MKDEV ptyu x 2
-#	$MKSET  96 15 $MKDEV ptyv x 2
-#	$MKSET 112 15 $MKDEV ptyw x 2
-#	$MKSET 128 15 $MKDEV ptyx x 2
-#	$MKSET 144 15 $MKDEV ptyy x 2
-#	$MKSET 160 15 $MKDEV ptyz x 2
-#	$MKSET 176 15 $MKDEV ptya x 2
-#	$MKSET 192 15 $MKDEV ptyb x 2
-#	$MKSET 208 15 $MKDEV ptyc x 2
-#	$MKSET 224 15 $MKDEV ptyd x 2
-#	$MKSET 240 15 $MKDEV ptye x 2
-
-##############################################################################
-# Floppy diskettes. Only the auto-detect nodes are
listed.
-
-	$MKDEV fd0	b 3 128 	# Currently.
-	$MKDEV fd1	b 3 192 	# Currently.
-
-#	$MKSET   0 3  $MKDEV fd b 2	# Ought to be.
-
-##############################################################################
-# Pseudo-TTY master devices. These are not yet
supported by the ELKS kernel.
-
-#	$MKSET   0 15 $MKDEV ttyp x 3
-#	$MKSET  16 15 $MKDEV ttyq x 3
-#	$MKSET  32 15 $MKDEV ttyr x 3
-#	$MKSET  48 15 $MKDEV ttys x 3
-#	$MKSET  64 15 $MKDEV ttyt x 3
-#	$MKSET  80 15 $MKDEV ttyu x 3
-#	$MKSET  96 15 $MKDEV ttyv x 3
-#	$MKSET 112 15 $MKDEV ttyw x 3
-#	$MKSET 128 15 $MKDEV ttyx x 3
-#	$MKSET 144 15 $MKDEV ttyy x 3
-#	$MKSET 160 15 $MKDEV ttyz x 3
-#	$MKSET 176 15 $MKDEV ttya x 3
-#	$MKSET 192 15 $MKDEV ttyb x 3
-#	$MKSET 208 15 $MKDEV ttyc x 3
-#	$MKSET 224 15 $MKDEV ttyd x 3
-#	$MKSET 240 15 $MKDEV ttye x 3
-
-##############################################################################
-# Direct IDE disks, Primary channel.
-
-	$MKSET   0 63 $MKDEV hda d 5	# Currently.
-	$MKSET  64 63 $MKDEV hdb d 5	# Currently.
-
-#	$MKSET   0 63 $MKDEV hda d 3	# Ought to be.
-#	$MKSET  64 63 $MKDEV hdb d 3	# Ought to be.
-
-##############################################################################
-# Virtual consoles. Note that tty4 through tty7 can't
be enabled at this
-# time because of the possible conflict with ttyS0
through ttyS3 which
-# used to use the node numbers these now use.
However, it is expected that
-# this restriction can be removed in the near future.
-
-	$MKSET  0 3  $MKDEV tty c 4	# Currently
-#	$MKSET  0 15 $MKDEV tty c 4	# Soon to be
-
-# Serial ports, as detected by the ROM BIOS.
-
-	$MKSET 64 3  $MKDEV ttyS c 4
-
-##############################################################################
-# Alternate TTY devices. These are not yet supported.
-
-#	$MKDEV tty	c 5 0
-#	$MKDEV console	c 5 1
-#	$MKDEV ptmx	c 5 2
-
-##############################################################################
-# Parallel devices, as detected by the ROM BIOS.
-
-	$MKSET  0 3  $MKDEV lp c 6
-
-##############################################################################
-# Loopback devices. These are not yet supported.
-
-#	$MKSET  0 15 $MKDEV loop c 7
-
-##############################################################################
-# SCSI disks. These are not yet supported.
-
-#	$MKSET   0 15 $MKDEV sda d 8
-#	$MKSET  16 15 $MKDEV sdb d 8
-#	$MKSET  32 15 $MKDEV sdc d 8
-#	$MKSET  48 15 $MKDEV sdd d 8
-#	$MKSET  64 15 $MKDEV sde d 8
-#	$MKSET  80 15 $MKDEV sdf d 8
-#	$MKSET  96 15 $MKDEV sdg d 8
-#	$MKSET 112 15 $MKDEV sdh d 8
-#	$MKSET 128 15 $MKDEV sdi d 8
-#	$MKSET 144 15 $MKDEV sdj d 8
-#	$MKSET 160 15 $MKDEV sdk d 8
-#	$MKSET 176 15 $MKDEV sdl d 8
-#	$MKSET 192 15 $MKDEV sdm d 8
-#	$MKSET 208 15 $MKDEV sdn d 8
-#	$MKSET 224 15 $MKDEV sdo d 8
-#	$MKSET 240 15 $MKDEV sdp d 8
-
-##############################################################################
-# SCSI tapes. These are not yet supported.
-
-#	$MKSET   0 31 $MKDEV st c 9
-#	$MKSET  32 31 $MKDEV st c 9 l
-#	$MKSET  64 31 $MKDEV st c 9 m
-#	$MKSET  96 31 $MKDEV st c 9 a
-#	$MKSET 128 31 $MKDEV nst c 9
-#	$MKSET 160 31 $MKDEV nst c 9 l
-#	$MKSET 192 31 $MKDEV nst c 9 m
-#	$MKSET 224 31 $MKDEV nst c 9 a
-
-##############################################################################
-# Metadisk (RAID) devices. These are not yet
supported.
-
-#	$MKSET   0 15 $MKDEV md b 9
-
-##############################################################################
-# SCSI CD-ROM devices. These are not yet supported.
-
-#	$MKSET   0 15 $MKDEV scd b 11
-
-##############################################################################
-# MSCDEX CD-ROM devices. These are not yet supported.
-
-#	$MKSET   0 15 $MKDEV doscd b 12
-
-##############################################################################
-# 8-bit MFM/RLL controllers. These are not yet
supported.
-
-#	$MKSET   0 63 $MKDEV xda b 13
-#	$MKSET  64 63 $MKDEV xdb b 13
-
-##############################################################################
-# BIOS hard disks.
-
-	$MKSET   0 63 $MKDEV bda d 3	# Currently
-	$MKSET  64 63 $MKDEV bdb d 3	# Currently
-	$MKSET 128 63 $MKDEV bdc d 3	# Currently
-	$MKSET 192 63 $MKDEV bdd d 3	# Currently
-
-#	$MKSET   0 63 $MKDEV bda d 14	# Ought to be
-#	$MKSET  64 63 $MKDEV bdb d 14	# Ought to be
-#	$MKSET 128 63 $MKDEV bdc d 14	# Ought to be
-#	$MKSET 192 63 $MKDEV bdd d 14	# Ought to be
-
-##############################################################################
-# Joysticks. These are not yet supported.
-
-#	$MKSET   0 15 $MKDEV js c 15
-#	$MKSET 128 15 $MKDEV djs c 15
-
-##############################################################################
-# Generic SCSI devics. These are not yet supported.
-
-#	$MKSET   0 15 $MKDEV sg c 21
-
-##############################################################################
-# Direct IDE disks, Secondary channel. These are not
yet supported.
-
-#	$MKSET   0 63 $MKDEV hdc d 22
-#	$MKSET  64 63 $MKDEV hdd d 22
-
-##############################################################################
-# Direct IDE disks, Tertiary channel. These are not
yet supported.
-
-#	$MKSET   0 63 $MKDEV hde d 33
-#	$MKSET  64 63 $MKDEV hdf d 33
-
-##############################################################################
-# Z80-SIO devices. These are not yet supported.
-
-#	$MKSET   0  7 $MKDEV scc c 34
-
-##############################################################################
-# Direct IDE disks, Quaternary channel. These are not
yet supported.
-
-#	$MKSET   0 63 $MKDEV hde d 34
-#	$MKSET  64 63 $MKDEV hdf d 34
-
-##############################################################################
-# Direct IDE disks, Quinternary channel. These are
not yet supported.
-
-#	$MKSET   0 63 $MKDEV hdg d 56
-#	$MKSET  64 63 $MKDEV hdh d 56
-
-##############################################################################
-# Direct IDE disks, Quaternary channel. These are not
yet supported.
-
-#	$MKSET   0 63 $MKDEV hdi d 57
-#	$MKSET  64 63 $MKDEV hdj d 57
-
-##############################################################################
-# SCSI Media Changer. These are not yet supported.
-
-#	$MKSET   0 15 $MKDEV sch c 86
-
-##############################################################################
-# I2C bus drivers. These are not yet supported.
-
-#	$MKSET   0 7  $MKDEV i2c c 89
-
-##############################################################################
-# Conrad Electronic Parallel Port Radio Clocks. These
are not yet supported.
-
-#	$MKSET	 0 1  $MKDEV pcfclock c 181
-
-##############################################################################
-# EOF.

diff -ruN
./elks-stuff/elkscmd/rootfs_template/dev/MAKESET
./elks/elkscmd/rootfs_template/dev/MAKESET
--- ./elks-stuff/elkscmd/rootfs_template/dev/MAKESET
2004-05-28 16:02:01.000000000 -0400
+++ ./elks/elkscmd/rootfs_template/dev/MAKESET
1969-12-31 19:00:00.000000000 -0500
@@ -1,48 +0,0 @@
-#!/bin/sh
-
-if [ $# -lt 6 -o $# -gt 7 ]; then
-    echo
-    echo "Usage: makeset min count cmd prefix type
major [suffix]"
-    echo
-    echo "where  min     is the minor of the first
node to make,"
-    echo "       count   is the number of the last
node to make,"
-    echo "       cmd     is the command to make a
node,"
-    echo "       prefix  is the node name prefix,"
-    echo "       type    is the type selector for the
node,"
-    echo "       major   is the major number for the
node,"
-    echo "  and  suffix  is a suffix to append to the
node names."
-    echo
-    echo "The following type selectors are
supported:"
-    echo
-    echo "   b    Block device, all nodes have
numeric suffix."
-    echo "   d    Block device, first node is raw
device without numeric suffix."
-    echo
-    echo "   c    Character device with decimal
numeric suffix."
-    echo "   x    Character device with hexadecimal
numeric suffix."
-    echo
-else
-    N=0
-    while [ $N -le $2 ]; do
-	P=`expr $N + $1`
-	case ".$5" in
-	    .b)     eval $3 $4$N$7 $5 $6 $P
-		    ;;
-	    .c)     eval $3 $4$N$7 $5 $6 $P
-		    ;;
-	    .d)     if [ $N -gt 0 ]; then
-			eval $3 $4$N$7 $5 $6 $P
-		    else
-			eval $3 $4$7 $5 $6 $P
-		    fi
-		    ;;
-	    .x)	    if [ $N -gt 9 ]; then
-			R=`echo 123456789abcdef | cut -b $N`
-			eval $3 $4$R$7 c $6 $P
-		    else
-			eval $3 $4$N$7 c $6 $P
-		    fi
-		    ;;
-	esac
-	N=`expr $N + 1`
-    done
-fi

diff -ruN ./elks-stuff/elkscmd/sysboot.s
./elks/elkscmd/sysboot.s
--- ./elks-stuff/elkscmd/sysboot.s	1969-12-31
19:00:00.000000000 -0500
+++ ./elks/elkscmd/sysboot.s	2004-04-19
21:56:00.000000000 -0400
@@ -0,0 +1,82 @@
+
+! The master boot sector will have setup a stack,
+! this is normally at 0:7c00 down.
+! DS, SS, CS and ES will all have value 0 so the
execution address is 0:7c00
+! On entry the register SI will be pointer to the
partition entry that
+! this sector was loaded from, DL is the drive.
+
+! Also if it's a standard Master boot DH will be the
head, CX will be the
+! sector and cylinder, BX=7C00, AX=1, DI=7DFE, BP=SI.
There's a reasonable
+! chance that this isn't true though.
+
+! The Master boot itself will have been loaded and
run at $07c00
+! The BIOS must have setup a stack because interrupts
are enabled
+! Little else can be assumed because DOS doesn`t
assume anything either
+
+sysboot_start:
+j codestart
+nop		! DOS appears to _require_ this to identify an
MSDOS disk!!
+
+.blkb sysboot_start+3-*
+public dosfs_stat
+dos_sysid:	.ascii "LINUX"	! System ID
+		.byte 0,0,0
+dosfs_stat:
+dos_sect:	.blkw 1		! Sector size
+dos_clust:	.blkb 1		! Cluster size
+dos_resv:	.blkw 1		! Res-sector
+dos_nfat:	.blkb 1		! FAT count
+dos_nroot:	.blkw 1		! Root dir entries
+dos_maxsect:	.blkw 1		! Sector count (=0 if large FS)
+dos_media:	.blkb 1		! Media code
+dos_fatlen:	.blkw 1		! FAT length
+dos_spt:	.blkw 1		! Sect/Track
+dos_heads:	.blkw 1		! Heads
+dos_hidden:	.blkw 2		! Hidden sectors
+
+! Here down is DOS 4+ and probably not needed for
floppy boots.
+
+dos4_maxsect:	.blkw 2		! Large FS sector count
+dos4_phy_drive:	.blkb 1		! Phys drive
+.blkb 1		! Reserved
+.blkb 1		! DOS 4
+
+floppy_temp:
+dos4_serial:	.blkw 2		! Serial number
+dos4_label:	.blkb 11	! Disk Label (DOS 4+)
+dos4_fattype:	.blkb 8		! FAT type
+
+!
+! This is where the code will be overlaid, the
default is a hang
+.blkb sysboot_start+0x3E-*
+public codestart
+codestart:
+  j	codestart
+
+! Partition table
+public bootblock_magic
+
+.blkb sysboot_start+0x1BE-*
+partition_1:
+.blkb 8			! IN,SH,SS,ST,OS,EH,ES,ET
+.blkw 2			! Linear position (0 based)
+.blkw 2			! Linear length
+.blkb sysboot_start+0x1CE-*
+partition_2:
+.blkb 8			! IN,SH,SS,ST,OS,EH,ES,ET
+.blkw 2			! Linear position (0 based)
+.blkw 2			! Linear length
+.blkb sysboot_start+0x1DE-*
+partition_3:
+.blkb 8			! IN,SH,SS,ST,OS,EH,ES,ET
+.blkw 2			! Linear position (0 based)
+.blkw 2			! Linear length
+.blkb sysboot_start+0x1EE-*
+partition_4:
+.blkb 8			! IN,SH,SS,ST,OS,EH,ES,ET
+.blkw 2			! Linear position (0 based)
+.blkw 2			! Linear length
+
+.blkb sysboot_start+0x1FE-*
+bootblock_magic:
+.word 0xAA55


	
		
__________________________________
Do you Yahoo!?
Friends.  Fun.  Try the all-new Yahoo! Messenger.
http://messenger.yahoo.com/ 

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Broken-up patch #11
  2004-05-28 23:35 Broken-up patch #11 Tommy McCabe
@ 2004-06-01 13:31 ` Miguel Bolanos
  0 siblings, 0 replies; 2+ messages in thread
From: Miguel Bolanos @ 2004-06-01 13:31 UTC (permalink / raw)
  To: Tommy McCabe; +Cc: linux-8086

Greetings,

On Fri, 2004-05-28 at 17:35, Tommy McCabe wrote:
> Interconnected patch to:
> 
> 1. Incorporate a few files from bootblocks into the
> source treeso linux-86 isn't necessary for compiling.
> 

mm... I see a lot of "mkdir" lines which still require the -p option, 

> 2. Move MAKEDEV and MAKESET out of rootfs_template to
> save 12KB of space.
>
> 3. Fix I-don't-know-how-many-bugs in MAKEDEV.
> 

You do realize that in your changes to the tar creation you omitted the
exclusion of "CVS" dirs?
Do we really want MAKEDEV and MAKESET out of rootfs_template?

Also, honestly it would be better to have a list of the bugs fixed
better than a "Fix I-don't-know-how-many-bugs in ..." line, because we
wouldn't know what you are doing.

> 4. Change /mnt/elks to /mnt/test.
> 

So what's the advantage of this?

> diff -ruN ./elks-stuff/elkscmd/MAKEDEV
> ./elks/elkscmd/MAKEDEV
> --- ./elks-stuff/elkscmd/MAKEDEV	1969-12-31
> 19:00:00.000000000 -0500
> +++ ./elks/elkscmd/MAKEDEV	2004-05-28
> 15:31:49.000000000 -0400
> @@ -0,0 +1,266 @@
> +#!/bin/sh
> +
> +# Devices are generated by this script in the same
> order that they are listed
> +# in the Documentation/devices.txt file in the Linux
> 2.4.18 and5.21 kernel
> +# sources. This includes devices that are not
> currently relevant to ELKS, to
> +# encourage the use of common node numbers when these
> devices are eventually
> +# implemented.
> +#
> +# Where different node numbers are currently used by
> ELKS, the current ELKS
> +# node numbers are generated by lines labelled
> "Currently" and the relevant
> +# Linux node numbers are generated by lines labelled
> "Ought to be".
> +#
> +# Refer to the MAKESET command, also in this
> directory, for usage details.
> +
> +LINK=ln
> +MKDEV=mknod
> +MKSET=./MAKESET
> +TARGET_MNT=/mnt/test
> +DEVDIR=./$TARGET_MNT/dev
> +
> +##############################################################################
> +# Ensure required auxilliary script is present.
> +
> +if ! test -f "$MKSET"
> +then
> +    echo ERROR: \"$MKSET\" script missing, unable to
> continue.
> +    exit 1
> +fi
> +
> +##############################################################################
> +# Create memory devices.
> +
> +	$MKDEV $DEVDIR/mem c 1 1
> +	$MKDEV $DEVDIR/kmem c 1 2
> +	$MKDEV $DEVDIR/null c 1 3
> +#	$MKDEV $DEVDIR/port c 1 4
> +	$MKDEV $DEVDIR/zero c 1 5
> +#	$MKDEV $DEVDIR/core c 1 6
> +	$MKDEV $DEVDIR/full c 1 7
> +#	$MKDEV $DEVDIR/random c 1 8
> +#	$MKDEV $DEVDIR/urandom c 1 9
> +#	$MKDEV $DEVDIR/aio c 1 10
> +
> +##############################################################################
> +# RAM disks.
> +
> +	$MKSET   0 7  $MKDEV $DEVDIR/ram b 1
> +
> +	$LINK  $DEVDIR/ram1 $DEVDIR/ramdisk
> +
> +##############################################################################
> +# Pseudo-TTY master devices. These are not yet
> supported by the ELKS kernel.
> +
> +#	$MKSET   0 15 $MKDEV $DEVDIR/ptyp x 2
> +#	$MKSET  16 15 $MKDEV $DEVDIR/ptyq x 2
> +#	$MKSET  32 15 $MKDEV $DEVDIR/ptyr x 2
> +#	$MKSET  48 15 $MKDEV $DEVDIR/ptys x 2
> +#	$MKSET  64 15 $MKDEV $DEVDIR/ptyt x 2
> +#	$MKSET  80 15 $MKDEV $DEVDIR/ptyu x 2
> +#	$MKSET  96 15 $MKDEV $DEVDIR/ptyv x 2
> +#	$MKSET 112 15 $MKDEV $DEVDIR/ptyw x 2
> +#	$MKSET 128 15 $MKDEV $DEVDIR/ptyx x 2
> +#	$MKSET 144 15 $MKDEV $DEVDIR/ptyy x 2
> +#	$MKSET 160 15 $MKDEV $DEVDIR/ptyz x 2
> +#	$MKSET 176 15 $MKDEV $DEVDIR/ptya x 2
> +#	$MKSET 192 15 $MKDEV $DEVDIR/ptyb x 2
> +#	$MKSET 208 15 $MKDEV $DEVDIR/ptyc x 2
> +#	$MKSET 224 15 $MKDEV $DEVDIR/ptyd x 2
> +#	$MKSET 240 15 $MKDEV $DEVDIR/ptye x 2
> +
> +##############################################################################
> +# Floppy diskettes. Only the auto-detect nodes are
> listed.
> +
> +	$MKDEV $DEVDIR/fd0	b 3 128 	# Currently.
> +	$MKDEV $DEVDIR/fd1	b 3 192 	# Currently.
> +
> +#	$MKSET   0 3  $MKDEV $DEVDIR/fd b 2	# Ought to be.
> +
> +##############################################################################
> +# Pseudo-TTY master devices. These are not yet
> supported by the ELKS kernel.
> +
> +#	$MKSET   0 15 $MKDEV $DEVDIR/ttyp x 3
> +#	$MKSET  16 15 $MKDEV $DEVDIR/ttyq x 3
> +#	$MKSET  32 15 $MKDEV $DEVDIR/ttyr x 3
> +#	$MKSET  48 15 $MKDEV $DEVDIR/ttys x 3
> +#	$MKSET  64 15 $MKDEV $DEVDIR/ttyt x 3
> +#	$MKSET  80 15 $MKDEV $DEVDIR/ttyu x 3
> +#	$MKSET  96 15 $MKDEV $DEVDIR/ttyv x 3
> +#	$MKSET 112 15 $MKDEV $DEVDIR/ttyw x 3
> +#	$MKSET 128 15 $MKDEV $DEVDIR/ttyx x 3
> +#	$MKSET 144 15 $MKDEV $DEVDIR/ttyy x 3
> +#	$MKSET 160 15 $MKDEV $DEVDIR/ttyz x 3
> +#	$MKSET 176 15 $MKDEV $DEVDIR/ttya x 3
> +#	$MKSET 192 15 $MKDEV $DEVDIR/ttyb x 3
> +#	$MKSET 208 15 $MKDEV $DEVDIR/ttyc x 3
> +#	$MKSET 224 15 $MKDEV $DEVDIR/ttyd x 3
> +#	$MKSET 240 15 $MKDEV $DEVDIR/ttye x 3
> +
> +##############################################################################
> +# Direct IDE disks, Primary channel.
> +
> +	$MKSET   0 7 $MKDEV $DEVDIR/hda b 5	# Currently.
> +	$MKSET  8 7 $MKDEV $DEVDIR/hdb b 5	# Currently.
> +
> +#	$MKSET   0 7 $MKDEV $DEVDIR/hda b 3	# Ought to be.
> +#	$MKSET  8 7 $MKDEV $DEVDIR/hdb b 3	# Ought to be.
> +
> +##############################################################################
> +# Virtual consoles. Note that tty4 through tty7 can't
> be enabled at this
> +# time because of the possible conflict with ttyS0
> through ttyS3 which
> +# used to use the node numbers these now use.
> However, it is expected that
> +# this restriction can be removed in the near future.
> +
> +	$MKSET  0 3  $MKDEV $DEVDIR/tty c 4	# Currently
> +#	$MKSET  0 15 $MKDEV $DEVDIR/tty c 4	# Soon to be
> +
> +# Serial ports, as detected by the ROM BIOS.
> +
> +	$MKSET 64 3  $MKDEV $DEVDIR/ttyS c 4
> +
> +##############################################################################
> +# Alternate TTY devices. These are not yet supported.
> +
> +#	$MKDEV $DEVDIR/tty	c 5 0
> +#	$MKDEV $DEVDIR/console	c 5 1
> +#	$MKDEV $DEVDIR/ptmx	c 5 2
> +
> +##############################################################################
> +# Parallel devices, as detected by the ROM BIOS.
> +
> +	$MKSET  0 3  $MKDEV $DEVDIR/lp c 6
> +
> +##############################################################################
> +# Loopback devices. These are not yet supported.
> +
> +#	$MKSET  0 15 $MKDEV $DEVDIR/loop c 7
> +
> +##############################################################################
> +# SCSI disks. These are not yet supported.
> +
> +#	$MKSET   0 7 $MKDEV $DEVDIR/sda b 8
> +#	$MKSET   8 7 $MKDEV $DEVDIR/sdb b 8
> +#	$MKSET  16 7 $MKDEV $DEVDIR/sdc b 8
> +#	$MKSET  24 7 $MKDEV $DEVDIR/sdd b 8
> +#	$MKSET  32 7 $MKDEV $DEVDIR/sde b 8
> +#	$MKSET  40 7 $MKDEV $DEVDIR/sdf b 8
> +#	$MKSET  48 7 $MKDEV $DEVDIR/sdg b 8
> +#	$MKSET  56 7 $MKDEV $DEVDIR/sdh b 8
> +#	$MKSET  64 7 $MKDEV $DEVDIR/sdi b 8
> +#	$MKSET  72 7 $MKDEV $DEVDIR/sdj b 8
> +#	$MKSET  80 7 $MKDEV $DEVDIR/sdk b 8
> +#	$MKSET  88 7 $MKDEV $DEVDIR/sdl b 8
> +#	$MKSET  96 7 $MKDEV $DEVDIR/sdm b 8
> +#	$MKSET 104 7 $MKDEV $DEVDIR/sdn b 8
> +#	$MKSET 112 7 $MKDEV $DEVDIR/sdo b 8
> +#	$MKSET 120 7 $MKDEV $DEVDIR/sdp b 8
> +
> +##############################################################################
> +# SCSI tapes. These are not yet supported.
> +
> +#	$MKSET   0 31 $MKDEV $DEVDIR/st c 9
> +#	$MKSET  32 31 $MKDEV $DEVDIR/st c 9 l
> +#	$MKSET  64 31 $MKDEV $DEVDIR/st c 9 m
> +#	$MKSET  96 31 $MKDEV $DEVDIR/st c 9 a
> +#	$MKSET 128 31 $MKDEV $DEVDIR/nst c 9
> +#	$MKSET 160 31 $MKDEV $DEVDIR/nst c 9 l
> +#	$MKSET 192 31 $MKDEV $DEVDIR/nst c 9 m
> +#	$MKSET 224 31 $MKDEV $DEVDIR/nst c 9 a
> +
> +##############################################################################
> +# Metadisk (RAID) devices. These are not yet
> supported.
> +
> +#	$MKSET   0 15 $MKDEV $DEVDIR/md b 9
> +
> +##############################################################################
> +# SCSI CD-ROM devices. These are not yet supported.
> +
> +#	$MKDEV $DEVDIR/scd b 11
> +
> +##############################################################################
> +# MSCDEX CD-ROM devices. These are not yet supported.
> +
> +#	$MKDEV $DEVDIR/doscd b 12
> +
> +##############################################################################
> +# 8-bit MFM/RLL controllers. These are not yet
> supported.
> +
> +#	$MKSET   0 7 $MKDEV $DEVDIR/xda b 13
> +#	$MKSET  8 7 $MKDEV $DEVDIR/xdb b 13
> +
> +##############################################################################
> +# BIOS hard disks.
> +
> +	$MKSET   0 7 $MKDEV $DEVDIR/bda b 3	# Currently
> +	$MKSET  8  7 $MKDEV $DEVDIR/bdb b 3	# Currently
> +	$MKSET  16 7 $MKDEV $DEVDIR/bdc b 3	# Currently
> +	$MKSET  24 7 $MKDEV $DEVDIR/bdd b 3	# Currently
> +
> +#	$MKSET   0 7 $MKDEV $DEVDIR/bda b 14	# Ought to be
> +#	$MKSET  8 7 $MKDEV $DEVDIR/bdb b 14	# Ought to be
> +#	$MKSET  16 7 $MKDEV $DEVDIR/bdc b 14	# Ought to be
> +#	$MKSET  24 7 $MKDEV $DEVDIR/bdd b 14	# Ought to be
> +
> +##############################################################################
> +# Joysticks. These are not yet supported.
> +
> +#	$MKDEV $DEVDIR/js c 15
> +#	$MKDEV $DEVDIR/djs c 15
> +
> +##############################################################################
> +# Generic SCSI devices. These are not yet supported.
> +
> +#	$MKSET   0 15 $MKDEV $DEVDIR/sg c 21
> +
> +##############################################################################
> +# Direct IDE disks, Secondary channel. These are not
> yet supported.
> +
> +#	$MKSET   0 7 $MKDEV $DEVDIR/hdc b 22
> +#	$MKSET  8 7 $MKDEV $DEVDIR/hdd b 22
> +
> +##############################################################################
> +# Direct IDE disks, Tertiary channel. These are not
> yet supported.
> +
> +#	$MKSET   0 7 $MKDEV $DEVDIR/hde b 33
> +#	$MKSET  8 7 $MKDEV $DEVDIR/hdf b 33
> +
> +##############################################################################
> +# Z80-SIO devices. These are not yet supported.
> +
> +#	$MKSET   0  7 $MKDEV $DEVDIR/scc c 34
> +
> +##############################################################################
> +# Direct IDE disks, Quaternary channel. These are not
> yet supported.
> +
> +#	$MKSET   0 7 $MKDEV $DEVDIR/hde b 34
> +#	$MKSET  8 7 $MKDEV $DEVDIR/hdf b 34
> +
> +##############################################################################
> +# Direct IDE disks, Quinternary channel. These are
> not yet supported.
> +
> +#	$MKSET   0 7 $MKDEV $DEVDIR/hdg b 56
> +#	$MKSET  8 7 $MKDEV $DEVDIR/hdh b 56
> +
> +##############################################################################
> +# Direct IDE disks, Septernary channel. These are not
> yet supported.
> +
> +#	$MKSET   0 7 $MKDEV $DEVDIR/hdi b 57
> +#	$MKSET  8 7 $MKDEV $DEVDIR/hdj b 57
> +
> +##############################################################################
> +# SCSI Media Changer. These are not yet supported.
> +
> +#	$MKSET   0 15 $MKDEV $DEVDIR/sch c 86
> +
> +##############################################################################
> +# I2C bus drivers. These are not yet supported.
> +
> +#	$MKSET   0 7  $MKDEV $DEVDIR/i2c c 89
> +
> +##############################################################################
> +# Conrad Electronic Parallel Port Radio Clocks. These
> are not yet supported.
> +
> +#	$MKSET	 0 1  $MKDEV $DEVDIR/pcfclock c 181
> +
> +##############################################################################
> +# EOF.
> diff -ruN ./elks-stuff/elkscmd/MAKESET
> ./elks/elkscmd/MAKESET
> --- ./elks-stuff/elkscmd/MAKESET	1969-12-31
> 19:00:00.000000000 -0500
> +++ ./elks/elkscmd/MAKESET	2004-04-18
> 14:54:13.000000000 -0400
> @@ -0,0 +1,48 @@
> +#!/bin/sh
> +
> +if [ $# -lt 6 -o $# -gt 7 ]; then
> +    echo
> +    echo "Usage: makeset min count cmd prefix type
> major [suffix]"
> +    echo
> +    echo "where  min     is the minor of the first
> node to make,"
> +    echo "       count   is the number of the last
> node to make,"
> +    echo "       cmd     is the command to make a
> node,"
> +    echo "       prefix  is the node name prefix,"
> +    echo "       type    is the type selector for the
> node,"
> +    echo "       major   is the major number for the
> node,"
> +    echo "  and  suffix  is a suffix to append to the
> node names."
> +    echo
> +    echo "The following type selectors are
> supported:"
> +    echo
> +    echo "   b    Block device, all nodes have
> numeric suffix."
> +    echo "   d    Block device, first node is raw
> device without numeric suffix."
> +    echo
> +    echo "   c    Character device with decimal
> numeric suffix."
> +    echo "   x    Character device with hexadecimal
> numeric suffix."
> +    echo
> +else
> +    N=0
> +    while [ $N -le $2 ]; do
> +	P=`expr $N + $1`
> +	case ".$5" in
> +	    .b)     eval $3 $4$N$7 $5 $6 $P
> +		    ;;
> +	    .c)     eval $3 $4$N$7 $5 $6 $P
> +		    ;;
> +	    .d)     if [ $N -gt 0 ]; then
> +			eval $3 $4$N$7 $5 $6 $P
> +		    else
> +			eval $3 $4$7 $5 $6 $P
> +		    fi
> +		    ;;
> +	    .x)	    if [ $N -gt 9 ]; then
> +			R=`echo 123456789abcdef | cut -b $N`
> +			eval $3 $4$R$7 c $6 $P
> +		    else
> +			eval $3 $4$N$7 c $6 $P
> +		    fi
> +		    ;;
> +	esac
> +	N=`expr $N + 1`
> +    done
> +fi
> diff -ruN ./elks-stuff/elkscmd/Make.defs
> ./elks/elkscmd/Make.defs
> --- ./elks-stuff/elkscmd/Make.defs	2004-05-28
> 16:02:01.000000000 -0400
> +++ ./elks/elkscmd/Make.defs	2004-04-18
> 15:02:51.000000000 -0400
> @@ -147,7 +147,7 @@
>  MKFS=/sbin/mkfs.minix
>  MKFS_OPTS=-n14
>  
> -MINIX_BOOT=$(DEV86_DIR)/bootblocks
> +MINIX_BOOT=./bootblocks
>  
> 
> ##############################################################################
>  #
> @@ -159,7 +159,7 @@
>  endif
>  
>  ifeq ($(TARGET_MODE),LOOP)
> -TARGET_MNT=/mnt/elks
> +TARGET_MNT=/mnt/test
>  LOOP=-o loop
>  endif
>  
> diff -ruN ./elks-stuff/elkscmd/Makefile
> ./elks/elkscmd/Makefile
> --- ./elks-stuff/elkscmd/Makefile	2004-05-28
> 16:02:01.000000000 -0400
> +++ ./elks/elkscmd/Makefile	2004-05-28
> 15:30:59.000000000 -0400
> @@ -46,9 +46,10 @@
>  		$(FULL3_TARGET_FS) $(FULL5_TARGET_FS) || true
>  	rm -f $(COMB_TARGET_FS) $(ROOT_TARGET_FS)
> $(ROOT_NET_TARGET_FS) \
>  		$(FULL3_TARGET_FS) $(FULL5_TARGET_FS) boot
> images.zip core
> -	rm -rf rootfs_template $(ROOTDIR)
> +	rm -rf ./rootfs_template $(ROOTDIR)
> +	rm -rf ./bootblocks/*s ./bootblocks/*bin
> ./bootblocks/*v
>  	@for i in $(DIRS); do make -C $$i clean ; done
> -	tar xf rootfs_template.tar
> +	tar xzf rootfs_template.tar.gz
>  
> 
> ###############################################################################
>  #
> @@ -119,10 +120,13 @@
>  # Create relevant parts of other packages.
>  
>  $(FD_BSECT):
> -	make -C $(MINIX_BOOT) bin
> +	bcc -Mf -O -DTRY_FLOPPY -DDOTS -o
> ./bootblocks/minix.s -S ./bootblocks/minix.c
> +	as86 -w- -0 -b ./bootblocks/minix.bin -s
> ./bootblocks/minix.sym ./bootblocks/minix.s
>  
>  $(KHELPER):
> -	make -C $(MINIX_BOOT)
> +	as86_encap ./bootblocks/minix.s ./bootblocks/minix.v
> minix_ -0 -w
> +	bcc -Mf -O -DDOTS -o ./bootblocks/minix_elks.s -S
> ./bootblocks/minix_elks.c
> +	as86 -w- -0 -b ./bootblocks/minix_elks.bin -s
> ./bootblocks/minix_elks.sym ./bootblocks/minix_elks.s
>  
> 
> ###############################################################################
>  #
> @@ -146,8 +150,8 @@
>  $(SIBO_TARGET_FS):
>  	dd if=/dev/zero of=$(SIBO_TARGET_FS) bs=1024
> count=$(SIBO_TARGET_BLKS)
>  
> -$(ELKSCMD_DIR)/rootfs_template/etc/passwd:
> rootfs_template.tar
> -	tar xpf rootfs_template.tar
> +$(ELKSCMD_DIR)/rootfs_template/etc/passwd:
> rootfs_template.tar.gz
> +	tar xzpf rootfs_template.tar.gz
>  
>  $(ELKSCMD_DIR)/rootfs_template/etc/issue:
> $(ELKSCMD_DIR)/rootfs_template/etc/passwd
> $(ELKS_DIR)/Makefile
>  	$(ELKSCMD_DIR)/tools/ver.pl $(ELKS_DIR)/Makefile >
> $(ELKSCMD_DIR)/rootfs_template/etc/issue
> @@ -155,37 +159,37 @@
>  mount_combfs: $(COMB_TARGET_FS)
> $(ELKSCMD_DIR)/rootfs_template/etc/issue
>  	$(MKFS) $(MKFS_OPTS) $(COMB_TARGET_FS)
> $(COMB_TARGET_BLKS)
>  	mount $(COMB_TARGET_FS) $(TARGET_MNT) $(LOOP)
> -	(cd $(ELKSCMD_DIR)/rootfs_template ; tar cf -
> --exclude CVS *) | \
> -		(cd $(TARGET_MNT) ; tar xpvf -)
> -	(cd $(TARGET_MNT)/dev ; ./MAKEDEV)
> +	cd $(ELKSCMD_DIR)/rootfs_template; tar cf test.tar
> ./; cp ./test.tar $(TARGET_MNT)
> +	cd $(TARGET_MNT); tar -xpf ./test.tar; rm -rf
> test.tar; cd $(ELKSCMD_DIR)
> +	rm -rf ./rootfs_template/test.tar; ./MAKEDEV
>  
>  mount_full3fs: $(FULL3_TARGET_FS)
> $(ELKSCMD_DIR)/rootfs_template/etc/issue
>  	$(MKFS) $(MKFS_OPTS) $(FULL3_TARGET_FS)
> $(FULL3_TARGET_BLKS)
>  	mount $(FULL3_TARGET_FS) $(TARGET_MNT) $(LOOP)
> -	(cd $(ELKSCMD_DIR)/rootfs_template ; tar cf -
> --exclude CVS *) | \
> -		(cd $(TARGET_MNT) ; tar xpvf -)
> -	(cd $(TARGET_MNT)/dev ; ./MAKEDEV)
> +	cd $(ELKSCMD_DIR)/rootfs_template; tar cf test.tar
> ./; cp ./test.tar $(TARGET_MNT)
> +	cd $(TARGET_MNT); tar -xpf ./test.tar; rm -rf
> test.tar; cd $(ELKSCMD_DIR)
> +	rm -rf ./rootfs_template/test.tar; ./MAKEDEV
>  
>  mount_full5fs: $(FULL5_TARGET_FS)
> $(ELKSCMD_DIR)/rootfs_template/etc/issue
>  	$(MKFS) $(MKFS_OPTS) $(FULL5_TARGET_FS)
> $(FULL5_TARGET_BLKS)
>  	mount $(FULL5_TARGET_FS) $(TARGET_MNT) $(LOOP)
> -	(cd $(ELKSCMD_DIR)/rootfs_template ; tar cf -
> --exclude CVS *) | \
> -		(cd $(TARGET_MNT) ; tar xpvf -)
> -	(cd $(TARGET_MNT)/dev ; ./MAKEDEV)
> +	cd $(ELKSCMD_DIR)/rootfs_template; tar cf test.tar
> ./; cp ./test.tar $(TARGET_MNT)
> +	cd $(TARGET_MNT); tar -xpf ./test.tar; rm -rf
> test.tar; cd $(ELKSCMD_DIR)
> +	rm -rf ./rootfs_template/test.tar; ./MAKEDEV
>  
>  mount_rootfs: $(ROOT_TARGET_FS)
> $(ELKSCMD_DIR)/rootfs_template/etc/issue
> -	$(MKFS) $(MKFS_OPTS) $(ROOT_TARGET_FS)
> $(ROOT_TARGET_BLKS)
> +	$(MKFS) -i 200 $(MKFS_OPTS) $(ROOT_TARGET_FS)
> $(ROOT_TARGET_BLKS)
>  	mount $(ROOT_TARGET_FS) $(TARGET_MNT) $(LOOP)
> -	(cd $(ELKSCMD_DIR)/rootfs_template ; tar cf -
> --exclude CVS *) | \
> -		(cd $(TARGET_MNT) ; tar xpvf -)
> -	(cd $(TARGET_MNT)/dev ; ./MAKEDEV)
> +	cd $(ELKSCMD_DIR)/rootfs_template; tar cf test.tar
> ./; cp ./test.tar $(TARGET_MNT)
> +	cd $(TARGET_MNT); tar -xpf ./test.tar; rm -rf
> test.tar; cd $(ELKSCMD_DIR)
> +	rm -rf ./rootfs_template/test.tar; ./MAKEDEV
>  
>  mount_rootnetfs: $(ROOT_NET_TARGET_FS)
> $(ELKSCMD_DIR)/rootfs_template/etc/issue
>  	$(MKFS) $(MKFS_OPTS) $(ROOT_NET_TARGET_FS)
> $(ROOT_NET_TARGET_BLKS)
>  	mount $(ROOT_NET_TARGET_FS) $(TARGET_MNT) $(LOOP)
> -	(cd $(ELKSCMD_DIR)/rootfs_template ; tar cf -
> --exclude CVS *) | \
> -		(cd $(TARGET_MNT) ; tar xpvf -)
> -	(cd $(TARGET_MNT)/dev ; ./MAKEDEV)
> +	cd $(ELKSCMD_DIR)/rootfs_template; tar cf test.tar
> ./; cp ./test.tar $(TARGET_MNT)
> +	cd $(TARGET_MNT); tar -xpf ./test.tar; rm -rf
> test.tar; cd $(ELKSCMD_DIR)
> +	rm -rf ./rootfs_template/test.tar; ./MAKEDEV
>  	
>  mount_sibofs: $(SIBO_TARGET_FS)
> $(ELKSCMD_DIR)/rootfs_template/etc/issue
>  	$(MKFS) $(MKFS_OPTS) $(SIBO_TARGET_FS)
> $(SIBO_TARGET_BLKS)
> @@ -210,35 +214,42 @@
>  	
>  
>  comb: mount_combfs $(ELKS_DIR)/arch/i86/boot/Image
> $(FD_BSECT) $(KHELPER)
> +	dd if=/dev/zero of=./flagfile bs=1k count=0
>  	@for i in $(DIRS); do make -C $$i min_rfs ; done
> +	mkdir $(TARGET_MNT)/boot
>  	cp $(ELKS_DIR)/arch/i86/boot/Image
> $(TARGET_MNT)/boot/linux
>  	cp $(KHELPER) $(TARGET_MNT)/boot/boot
>  	umount $(COMB_TARGET_FS)
>  	dd if=$(FD_BSECT) of=$(COMB_TARGET_FS) bs=512
> count=2 conv=notrunc
>  
>  full3: mount_full3fs $(ELKS_DIR)/arch/i86/boot/Image
> $(FD_BSECT) $(KHELPER)
> +	mkdir $(TARGET_MNT)/bin; cp -p -f
> $(ELKSNET_DIR)/ktcp/ktcp $(TARGET_MNT)/bin
>  	@for i in $(DIRS); do make -C $$i rfs ; done
> +	mkdir $(TARGET_MNT)/boot
>  	cp $(ELKS_DIR)/arch/i86/boot/Image
> $(TARGET_MNT)/boot/linux
>  	cp $(KHELPER) $(TARGET_MNT)/boot/boot
>  	umount $(FULL3_TARGET_FS)
>  	dd if=$(FD_BSECT) of=$(FULL3_TARGET_FS) bs=512
> count=2 conv=notrunc
>  
> -full5: mount_full3fs $(ELKS_DIR)/arch/i86/boot/Image
> $(FD_BSECT) $(KHELPER)
> +full5: mount_full5fs $(ELKS_DIR)/arch/i86/boot/Image
> $(FD_BSECT) $(KHELPER)
>  	@for i in $(DIRS); do make -C $$i rfs ; done
> +	mkdir $(TARGET_MNT)/boot
>  	cp $(ELKS_DIR)/arch/i86/boot/Image
> $(TARGET_MNT)/boot/linux
>  	cp $(KHELPER) $(TARGET_MNT)/boot/boot
> -	umount $(FULL3_TARGET_FS)
> -	dd if=$(FD_BSECT) of=$(FULL3_TARGET_FS) bs=512
> count=2 conv=notrunc
> +	umount $(FULL5_TARGET_FS)
> +	dd if=$(FD_BSECT) of=$(FULL5_TARGET_FS) bs=512
> count=2 conv=notrunc
>  
>  root: mount_rootfs
> +	rm -rf ./flagfile
>  	@for i in $(DIRS); do make -C $$i min_rfs ; done
>  	umount $(ROOT_TARGET_FS)
>  	
>  comb_net: mount_rootnetfs
> $(ELKS_DIR)/arch/i86/boot/Image $(FD_BSECT) $(KHELPER)
>  	cd $(ELKSNET_DIR)/ktcp ; \
>  	make ; \
> -	cp -p -f ktcp $(TARGET_MNT)/bin
> +	mkdir $(TARGET_MNT)/bin; cp -p -f ktcp
> $(TARGET_MNT)/bin
>  	@for i in $(DIRS); do make -C $$i net_rfs ; done
> +	mkdir $(TARGET_MNT)/boot
>  	cp $(ELKS_DIR)/arch/i86/boot/Image
> $(TARGET_MNT)/boot/linux
>  	cp $(KHELPER) $(TARGET_MNT)/boot/boot
>  	umount $(ROOT_NET_TARGET_FS)
> 
> diff -ruN ./elks-stuff/elkscmd/bootblocks/minix.c
> ./elks/elkscmd/bootblocks/minix.c
> --- ./elks-stuff/elkscmd/bootblocks/minix.c	1969-12-31
> 19:00:00.000000000 -0500
> +++ ./elks/elkscmd/bootblocks/minix.c	2004-04-18
> 15:00:49.000000000 -0400
> @@ -0,0 +1,943 @@
> +/*
> + * This bootblock loads the linux-8086 executable in
> the file 'boot'
> + * from the root directory of a minix filesystem.
> + *
> + * Copyright (C) 1990-1998 Robert de Bath,
> distributed under the GPL Version 2
> + * Based on minix filesystem definitions.
> + *
> + * TODO:
> + *       Alter nogood() to do a mov sp,... so the
> helper program can override
> + *       the panic message.
> + */
> +
> +#include <a.out.h>
> +#include "minix.h"
> +
> +/* #define DOTS		/* define to have dots printed */
> +/* #define HARDDISK	/* Define for hard disk version
> */
> +/* #define TRY_FLOPPY	/* To do trial reads to find
> floppy size */
> +
> +/* #define MIN_SPACE	   */
> +
> +#define zone_shift 0	/* for any < 32M (!= 0 not
> supported yet, if ever) */
> +#define seg_at(k) ((k)*64)
> +#define seg_of(p) ((unsigned int)p >>4)
> +#define BOOTSEG	  (0x07c0)
> +#define LOADSEG   (0x1000)
> +#define ORGADDR   (0x0500)
> +
> +#ifdef HARDDISK
> +#define get_now()
> +#endif
> +
> +#ifdef zone_shift
> +#if zone_shift == 0
> +#define load_zone load_block
> +#endif
> +#else
> +static short     zone_shift;
> +#endif
> +
> +#asm 
> +BOOTADDR = 0x7c00
> +
> +.text
> +! Apparently on startup the only things we can assume
> are that we start at
> +! `start` (ABS addr $07C00) and the boot sector is in
> the segment.
> +
> +! So first set CS=DS=ES=SS=0
> +! The we move this to $0500 and put the stack at the
> top of the first 64k.
> +! The directory 'file' is loaded $1500 and scanned
> there.
> +! The final executable will be loaded in the 2nd 64k
> chunk.
> +!
> +org ORGADDR	! The lowest available address.
> +start:
> +#ifndef MIN_SPACE
> +  include sysboot.s
> +
> +org start	! The lowest available address, again.
> +  j	skip_vars
> +
> +org dos_sysid
> +  .ascii "MINIXFS BOOT (C) 1990-1999,  Robert de
> Bath"
> +
> +  org codestart
> +#endif
> +
> +! A few variables we need to know the positions of
> for patching, so export
> +! them and as86_encaps will make some variables. Put
> them here at the start
> +! so they're in the same place for both Floppy and
> harddisk versions as they
> +! will be used by helper programs.
> +
> +export	inode			! Inode to search
> +inode:
> +_inode: .word	1		! ROOT_INODE
> +
> +#ifndef MIN_SPACE
> +export	dinode			! Inode of directory file was found
> in.
> +dinode:
> +_dinode: .word	1		! ROOT_INODE
> +#endif
> +
> +export	bootfile		! File to boot, make this whatever
> you like,
> +bootfile:			! 'boot' is good, 'linux' too.
> +_bootfile:
> +   .ascii	"boot"
> +   .byte	0,0,0,0,0,0,0,0,0,0
> +
> +skip_vars:
> +#ifdef HARDDISK
> +  mov	bx,[si+8]	! Fetch the linear address of part
> from DS:SI
> +  mov	dh,[si+10]	! DL is drive number
> +#endif
> +
> +  xor	ax,ax		! All segments are zero, first 64k of
> mem.
> +  mov	ds,ax
> +  mov	es,ax
> +  mov	ss,ax
> +  mov	sp,ax
> +
> +#ifndef HARDDISK
> +loopy:
> +  mov	ax,#$0203		! Read 3 sectors, code + superblock.
> +  mov	bx,#start		! Where this _should_ be
> +  mov	cx,#$0001		! From sector 1
> +  xor	dx,dx			! Of the floppy drive head zero
> +  int	$13
> +  jc	loopy
> +#else
> +
> +  mov	cx,#$100	! Move 256 words
> +  mov	si,#BOOTADDR	! From default BB
> +  mov	di,#ORGADDR	! To the correct address.
> +  rep
> +   movsw
> +
> +  xchg	dl,dh
> +  mov	[bootpart],bx	! Save the partition sector
> offset (and drive)
> +  mov	[bootpart+2],dx
> +
> +  ! Read next 2 sectors of hd.
> +  xor	dx,dx
> +  mov	cx,#1
> +  mov	bx,#ORGADDR+$200
> +  mov	al,#2
> +
> +  call	load_sect
> +#endif
> +
> +  jmpi	code,#0
> +
> +#endasm
> +
> +/*  /* */
> +/****************************************************************************/
> +/* Section cdef */
> +/****************************************************************************/
> +
> +/* The name of the file and inode to start */
> +extern char bootfile[];
> +extern inode_nr inode;
> +extern inode_nr dinode;
> +
> +/* For multi-sector reads */
> +extern sect_nr lastsect;
> +extern sect_nr firstsect;
> +extern unsigned loadaddr;
> +extern unsigned loadcount;
> +
> +/* Keep track of zones to load */
> +extern zone_nr * next_zone;
> +extern zone_nr * end_zone;
> +extern zone_nr   indirect;
> +
> +/* Where to load zones */
> +extern unsigned ldaddr;
> +
> +/* Directory reading */
> +extern dir_struct * dirptr;
> +extern unsigned flength;
> +extern unsigned dir_32;
> +
> +#ifndef HARDDISK
> +/* The 'shape' of the floppy - intuit from superblock
> or try to read max */
> +extern unsigned n_sectors;
> +#endif
> +
> +extern struct super_block b_super;
> +extern d_inode            b_inode[INODES_PER_BLOCK];
> +extern zone_nr            b_zone[NR_INDIRECTS];
> +extern dir_struct         directory[];
> +
> +/*  /* */
> +/****************************************************************************/
> +/* Section adef */
> +/****************************************************************************/
> +
> +#asm
> +.text
> +
> +#ifdef HARDDISK
> +bootpart:   .long	0
> +#else
> +_loadcount: .word	0
> +_firstsect: .word	0
> +_loadaddr:  .word	0
> +_lastsect:  .word	0
> +#endif
> +
> +  block start+0x400
> +_b_super:	.blkb 512
> +
> +#ifndef MIN_SPACE
> +export helper
> +helper:		.blkb 1024
> +export helper_end
> +helper_end:
> +#endif
> +
> +_b_inode:	.blkb 1024
> +_b_zone:	.blkb 1024
> +
> +#ifdef MIN_SPACE
> +temp_space:	.blkb 512
> +#endif
> +probe_buf:
> +_directory:	.blkb 32768
> +  endb
> +
> +#endasm
> +
> +/*  /* */
> +/****************************************************************************/
> +/* Section nogood */
> +/****************************************************************************/
> +/* #if defined(HARDDISK) && !defined(SKIPBOOT) */
> +#ifndef SKIPBOOT
> +static
> +nogood()
> +{
> +#asm
> +  mov	si,#fail_fs
> +min_nextc:
> +  lodsb
> +  cmp	al,#0
> +  jz	min_eos
> +  mov	bx,#7
> +  mov	ah,#$E		! Can't use $13 cause that's AT+ only!
> +  int	$10
> +  jmp	min_nextc
> +min_eos:		! Wait for a key then reboot
> +  xor	ax,ax
> +  int	$16
> +  jmpi	$0,$FFFF	! Reboot.
> +
> +fail_fs:
> +  .byte		13,10
> +#if defined(HARDDISK)
> +  .asciz	"Initial boot failed, press return to
> reboot\r\n"
> +#else
> +  .asciz	"Boot failed:"
> +#endif
> +#endasm
> +}
> +
> +#else
> +
> +static
> +nogood()
> +{
> +/* This didn't work, chain the boot sector of the HD
> */
> +#asm
> +  push	cs
> +  pop	es
> +hcode:
> +  mov	ax,#$0201		! Read 1 sector
> +  mov	bx,#BOOTADDR		! In the boot area
> +  mov	cx,#$0001		! From sector 1
> +  mov	dx,#$0080		! Of the hard drive head zero
> +  int	$13
> +  jc	hcode			! Keep trying forever!
> +  jmpi	BOOTADDR,0
> +#endasm
> +}
> +#endif
> +
> +/*  /* */
> +/****************************************************************************/
> +/* Section hd_sect */
> +/****************************************************************************/
> +#ifdef HARDDISK
> +#asm
> +!
> +! Load AL sectors from linear sector DX:CX into
> location ES:BX
> +! Linear sector zero is at [bootpart]
> +! This loads one sector at a time, but that's OK
> cause even in the _very_
> +! worst case it'll take no more that 5 seconds to
> load a 16 bit executable.
> +!
> +load_sect:
> +  add	cx,[bootpart]
> +  adc	dx,[bootpart+2]
> +moresect:
> +  cmp	al,#0
> +  jnz	onesect
> +  clc
> +  ret
> +
> +! Load one sector...
> +onesect:
> +  push	ax	! Save lots
> +  push	di
> +  push	si
> +  push	cx	! Drive and sector.
> +  push	dx
> +
> +  push	es	! Load location
> +  push	bx
> +
> +  push	cx	! Drive and sector again.
> +  push	dx
> +
> +  ! Fetch drive 'shape'
> +  mov	ah,#8
> +  mov	dl,dh
> +  int	$13	! DX:CX = drive specification
> +  jc	_nogood
> +
> +  and	cx,#$3F	! Get sector count => DI
> +  mov	di,cx
> +
> +  xor	dl,dl	! Get head count  => SI
> +  xchg	dl,dh
> +  inc	dx
> +  mov	si,dx
> +  
> +  pop	dx	! Get back drive and sector
> +  pop	ax
> +
> +  mov	bl,dh	! Save drive
> +  xor	dh,dh
> +
> +  div	di	! DX=sector, AX=track number
> +  mov	cx,dx
> +  inc	cl	! CL=sector number
> +
> +  xor	dx,dx
> +  div	si	! DX=head, AX=cylinder
> +
> +  mov	dh,dl
> +  mov	dl,bl	! DX for int 1302
> +
> +  xchg	al,ah
> +  ror	al,#1
> +  ror	al,#1
> +  or	cx,ax	! CX for int 1302
> +
> +  pop	bx	! ES:BX for int 1302
> +  pop	es
> +
> +  mov	di,#5	! Lots of retries for a hd
> +retry:
> +  mov	ax,#$0201
> +  int	$13
> +  jnc	got_hd_sect
> +
> +  xor	ax,ax	! Reset between each try.
> +  int	$13
> +
> +  dec	di
> +  jnz	retry
> +  br	_nogood
> +
> +got_hd_sect:
> +  pop	dx
> +  pop	cx
> +  pop	si
> +  pop	di
> +  pop	ax
> +
> +  dec	al
> +  add	cx,#1
> +  adc	dh,#0
> +  add	bh,#2
> +  jmp	moresect
> +#endasm
> +#endif
> +
> +/****************************************************************************/
> +/* This is the end of the parts that MUST be in the
> first sector            */
> +/* From here down the functions can safely be in any
> order.                 */
> +/****************************************************************************/
> +
> +/*  /* */
> +/****************************************************************************/
> +/* Section fd_block */
> +/****************************************************************************/
> +#ifndef HARDDISK
> +static
> +load_block(address, blkno)
> +unsigned address, blkno;
> +{
> +   register sect_nr sectno;
> +   if(blkno == 0) { zero_block(address); return; }
> +#ifdef DOTS
> +   prt_dot();
> +#endif
> +
> +   sectno = (sect_nr)blkno * 2;
> +   load_sect(address,    sectno);
> +   load_sect(address+32, sectno+1);
> +}
> +#endif
> +
> +/****************************************************************************/
> +/* Section fd_bpb */
> +/****************************************************************************/
> +#ifndef HARDDISK
> +#asm
> +_set_bpb:
> +#ifdef MIN_SPACE
> +bios_tabl=temp_space		! Temp space.
> +bios_disk=temp_space+4		!
> +#else
> +bios_tabl=dosfs_stat		! Temp space.
> +bios_disk=dosfs_stat+4		!
> +#endif
> +
> +#ifndef __CALLER_SAVES__
> +  push	si
> +  push	di
> +#endif
> +
> +  mov	di,#bios_disk
> +  mov	bx,#0x78		
> +! 0:bx is parameter table address
> +
> +  push	ds
> +  push	di
> +
> +  mov	si,[bx]
> +  mov	ax,[bx+2]
> +  mov	[bios_tabl],si
> +  mov	[bios_tabl+2],ax
> +  push	ax
> +
> +  pop	ds
> +! ds:si is source
> +
> +! copy 12 bytes
> +  mov	cl,#6			
> +  cld
> +  rep
> +  movsw
> +
> +  pop	di
> +  pop	ds
> +  mov	ax,[_n_sectors]
> +  movb	4[di],al		! patch sector count
> +
> +  mov	[bx],di
> +  mov	2[bx],es
> +
> +#ifndef __CALLER_SAVES__
> +  pop	si
> +  pop	di
> +#endif
> +  ret
> +
> +_unset_bpb:
> +! 0:0x78 is parameter table address
> +
> +  mov	ax,[bios_tabl]
> +  mov	[0x78],ax
> +  mov	ax,[bios_tabl+2]
> +  mov	[0x78+2],ax
> +  ret
> +
> +#endasm
> +#endif
> +
> +/****************************************************************************/
> +/* Section fd_get_now */
> +/****************************************************************************/
> +#ifndef HARDDISK
> +static
> +get_now()
> +{
> +#asm
> +  mov	si,#5
> +retry_get:
> +  xor	dx,dx
> +  mov	cx,[_firstsect]
> +  shr	ch,#1
> +  adc	dh,#0
> +  mov	es,[_loadaddr]
> +  xor	bx,bx
> +  mov	ax,[_loadcount]
> +  test	ax,ax
> +  jz	no_load
> +  mov	ah,#2
> +  int	$13		! Try fetch
> +  jnc	no_load
> +  xor	ax,ax		! Bad, retry.
> +  int	$13
> +  dec	si
> +  jnz	retry_get
> +  br	_nogood
> +no_load:
> +  xor	ax,ax
> +  mov	[_loadcount],ax
> +#endasm
> +}
> +#endif
> +
> +/****************************************************************************/
> +/* Section fd_probe */
> +/****************************************************************************/
> +#ifndef HARDDISK
> +#ifdef TRY_FLOPPY
> +#asm
> +!-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> +!
> +! These are the number of sectors per track that will
> be scanned for.
> +! For 3.5 inch floppies 36 is 2.88 Mb, 18 is 1.44Mb,
> 21 is 1.68Mb on
> +! a 1.44Mb floppy drive. 15 and 9 are for 5.25 inch
> floppies.
> +
> +disksizes: .byte 36,21,18,15,9
> +
> +! It seems that there is no BIOS call to get the
> number of sectors.  Guess
> +! 36 sectors if sector 36 can be read, 18 sectors if
> sector 18 can be read,
> +! 15 if sector 15 can be read.  Otherwise guess 9.
> +
> +_probe_sectors:
> +	mov	si,#disksizes		! table of sizes to try
> +
> +probe_loop:
> +	lodsb
> +	cbw				! extend to word
> +	mov	_n_sectors, ax
> +	cmp	al,#9
> +	je	got_sectors		! if all else fails, try 9
> +	xchg	ax, cx			! cx = track and sector
> +	xor	dx, dx			! drive 0, head 0
> +	mov	bx,#probe_buf 		! address after setup (es = cs)
> +	mov	ax,#0x0201		! service 2, 1 sector
> +	int	0x13
> +	jc	probe_loop		! try next value
> +got_sectors:
> +
> +	ret
> +#endasm
> +#else
> +probe_sectors()
> +{
> +   /* Guess the number of sectors based on the size
> of the file system */
> +   if( (n_sectors = b_super.s_nzones / 40) > 11 )
> n_sectors /= 2;
> +}
> +#endif
> +#endif
> +
> +/****************************************************************************/
> +/* Section fd_sect */
> +/****************************************************************************/
> +#ifndef HARDDISK
> +static
> +load_sect(address, sectno)
> +unsigned address;
> +sect_nr sectno;
> +{
> +   register sect_nr nsect;
> +
> +   nsect   =  sectno%n_sectors +1;
> +   sectno /= n_sectors;
> +   nsect  |= (sectno<<8);
> +
> +   if( loadcount )
> +   {
> +      lastsect++;
> +      if( ( address & 4095 ) && nsect == lastsect )
> +      {
> +         loadcount++;
> +         return;
> +      }
> +      get_now();
> +   }
> +
> +   lastsect  = firstsect = nsect;
> +   loadaddr  = address;
> +   loadcount = 1;
> +}
> +#endif
> +
> +/****************************************************************************/
> +/* Section fd_zeroblk */
> +/****************************************************************************/
> +#ifndef HARDDISK
> +static
> +zero_block(address)
> +{
> +#asm
> +#if __FIRST_ARG_IN_AX__
> +  mov	es,ax
> +#else
> +  mov	bx,sp
> +  mov	es,[bx+2]
> +#endif
> +  push	di
> +  mov	cx,#512
> +  xor	ax,ax
> +  mov	di,ax
> +  rep
> +   stosw
> +  pop	di
> +#endasm
> +}
> +#endif
> +
> +/****************************************************************************/
> +/* Section hd_block */
> +/****************************************************************************/
> +#ifdef HARDDISK
> +/*----------------------------------*/
> +/* Hard disk block driver           */
> +/*----------------------------------*/
> +
> +#asm
> +_load_block:
> +  push	bp
> +  mov	bp,sp
> +#if __FIRST_ARG_IN_AX__
> +  ! Fetch load location
> +  mov	es,ax
> +
> +  ! Test for block zero
> +  mov	ax,4[bp]
> +#else
> +  ! Fetch load location
> +  mov	ax,[bp+4]
> +  mov	es,ax
> +
> +  ! Test for block zero
> +  mov	ax,6[bp]
> +#endif
> +  test	ax,ax
> +  jne 	real_block
> +
> +  ! Iff block zero, zap memory
> +  push	di
> +  mov	cx,#512
> +  xor	ax,ax
> +  mov	di,ax
> +  rep
> +   stosw
> +  pop	di
> +
> +func_exit:
> +  mov	sp,bp
> +  pop	bp
> +  ret
> +
> +real_block:
> +#ifdef DOTS
> +  push	ax
> +  call	_prt_dot
> +  pop	ax
> +#endif
> +
> +! Load a real block.
> +  mov	cx,ax
> +  xor	dx,dx
> +  shl	cx,#1
> +  rcl	dx,#1
> +
> +  xor	bx,bx
> +  mov	al,#2
> +  call	load_sect 
> +
> +  j	func_exit
> +#endasm
> +#endif
> +
> +/****************************************************************************/
> +/* Section main */
> +/****************************************************************************/
> +#asm
> +code:
> +  call	_loadprog
> +  call	_runprog
> +  br	_nogood
> +
> +#endasm
> +
> +/****************************************************************************/
> +/* Section prt_dots */
> +/****************************************************************************/
> +#ifdef DOTS
> +#asm
> +_prt_crlf:
> +  mov   al,#13
> +  call	outch
> +  mov	al,#10
> +  j	outch
> +_prt_dot:
> +  mov   al,#'.
> +outch:
> +  mov	ah,#$0E
> +  mov	bx,#7
> +  int	$10
> +  ret
> +#endasm
> +#endif
> +
> +/****************************************************************************/
> +/* Section end_1 */
> +/****************************************************************************/
> +#if defined(HARDDISK) || !defined(MIN_SPACE)
> +#asm
> +end_of_part1:
> +#ifdef HARDDISK
> +  if *>start+0x1FE	! Leave space for magic
> +#else
> +  if *>start+0x200
> +#endif
> +     fail! Part 1 too large!
> +  endif
> +  .blkb	0x200+start-*
> +#endasm
> +#endif
> +
> +/****************************************************************************/
> +/* Section prog_load */
> +/****************************************************************************/
> +
> +loadprog()
> +{
> +#ifdef DOTS
> +   prt_dot();
> +#endif
> +   if( b_super.s_magic == SUPER_MAGIC2 ) 
> +      dir_32 = 1;
> +   else if( b_super.s_magic == SUPER_MAGIC )
> +      dir_32 = 0;
> +   else
> +      nogood();
> +
> +#ifdef zone_shift
> +   if( zone_shift != b_super.s_log_zone_size)
> nogood();
> +#else
> +   zone_shift = b_super.s_log_zone_size;
> +#endif
> +
> +#ifndef HARDDISK
> +   probe_sectors();
> +
> +   /* if( (n_sectors = b_super.s_nzones / 40) > 11 )
> n_sectors /= 2; */
> +
> +   set_bpb();
> +#endif
> +
> +try_again:;
> +   inode--;
> +   load_block(seg_of(b_inode), inode/INODES_PER_BLOCK
> +                          + b_super.s_imap_blocks
> +                          + b_super.s_zmap_blocks
> +                          + 2);
> +   get_now();
> +
> +   ldaddr = LOADSEG;		/* Load at 64k mark */
> +
> +   {
> +      register d_inode * i_ptr;
> +      i_ptr = b_inode + inode%INODES_PER_BLOCK;
> +      next_zone = i_ptr->i_zone;
> +      flength   = i_ptr->i_size;
> +      if( (i_ptr->i_mode & I_TYPE) == I_DIRECTORY )
> +      {
> +	 ldaddr = seg_of(directory);
> +#ifndef MIN_SPACE
> +	 dinode  = inode+1;	/* Remember current directory */
> +#endif
> +	 inode  = 0;		/* Mark - we've no _file_ inode yet */
> +      }
> +   }
> +
> +   end_zone = next_zone+NR_DZONE_NUM;
> +   load_zone(seg_of(b_zone), (indirect =
> next_zone[NR_DZONE_NUM]));
> +   get_now();
> +
> +   for(;;)
> +   {
> +      if( next_zone >= end_zone )
> +      {
> +         if( indirect != 0 )
> +         {
> +            next_zone = b_zone;
> +            end_zone  = next_zone + NR_INDIRECTS;
> +            indirect  = 0;
> +            continue;
> +         }
> +	 break;
> +      }
> +      load_zone(ldaddr, *next_zone);
> +      next_zone++;
> +      ldaddr += (seg_at(1) << zone_shift);
> +   }
> +   get_now();
> +
> +#ifdef DOTS
> +   prt_crlf();
> +#endif
> +   if(!inode)
> +   {
> +      dirptr = directory;
> +      while(flength > 0)
> +      {
> +register char * s = bootfile;
> +register char * p = dirptr->d_name;
> +
> +	 if( dirptr->d_inum )
> +	 {
> +	    for(;;)
> +	    {
> +	       if( *s == '\0')
> +	       {
> +		  if(*p == '\0')
> +		  {
> +		     inode = dirptr->d_inum;
> +		     goto try_again;
> +		  }
> +		  break;
> +	       }
> +	       if( *s++ != *p++ ) break;
> +	    }
> +	 }
> +	 flength -= 16;
> +	 dirptr++;
> +	 if( dir_32 )
> +	 {
> +	    flength -= 16;
> +	    dirptr++;
> +	 }
> +      }
> +      nogood();
> +   }
> +#ifndef HARDDISK
> +   unset_bpb();
> +#endif
> +}
> +
> +/****************************************************************************/
> +/* Section prog_run */
> +/****************************************************************************/
> +static
> +runprog()
> +{
> +/* It all worked, run the loaded executable */
> +#asm
> +#ifdef HARDDISK
> +  mov	dx,[bootpart+2]
> +  xchg	dh,dl		! DX => hard drive
> +  push	[bootpart]	! CX => partition offset
> +  xor	si,si
> +#else
> +  xor	dx,dx		! DX=0 => floppy drive
> +  push	dx		! CX=0 => partition offset = 0
> +  mov	si,[_n_sectors]	! Save for monitor.out
> +#endif
> +
> +  mov	bx,#LOADSEG
> +  mov	ds,bx		! DS = loadaddress
> +  xor	di,di		! Zero
> +  mov	ax,[di]
> +  cmp	ax,#0x0301	! Right magic ?
> +  jnz	binfile		! Yuk ... assume .SYS
> +  inc	bx
> +  inc	bx		! bx = initial CS
> +  mov	ax,[di+2]
> +  and	ax,#$20		! Is it split I/D ?
> +  jz	impure		! No ...
> +  mov	cl,#4
> +  mov	ax,[di+8]
> +  shr	ax,cl
> +impure:
> +  pop	cx
> +  add	ax,bx
> +  mov	ss,ax
> +  mov	sp,[di+24]	! Chmem value
> +  mov	ds,ax
> +binfile:
> +
> +  push	bx
> +  push	di		!  jmpi	0,#LOADSEG+2
> +  retf
> +#endasm
> +}
> +
> +/****************************************************************************/
> +/* Section sys_libs */
> +/****************************************************************************/
> +#asm
> +! These functions are pulled from the C library.
> +libstuff:
> +imodu:
> +	xor	dx,dx
> +	div	bx
> +	mov	ax,dx		! instruction queue full so xchg slower
> +	ret
> +idiv_u:
> +	xor	dx,dx
> +	div	bx
> +	ret
> +#ifndef zone_shift
> +isl:
> +islu:
> +	mov	cl,bl
> +	shl	ax,cl
> +	ret
> +#endif
> +libend:
> +#endasm
> +
> +/****************************************************************************/
> +/* Section sys_vars */
> +/****************************************************************************/
> +#asm
> +#ifdef MIN_SPACE
> +  block	temp_space+64
> +#endif
> +vars:
> +#ifndef HARDDISK
> +_n_sectors:	.blkw 1
> +#endif
> +_next_zone:	.blkw 1
> +_end_zone:	.blkw 1
> +_indirect:	.blkw 1
> +_ldaddr:	.blkw 1
> +_dirptr:	.blkw 1
> +_flength:	.blkw 1
> +_dir_32:	.blkw 1
> +varend:
> +#ifdef MIN_SPACE
> +  endb
> +#endif
> +#endasm
> +
> +/****************************************************************************/
> +/* Section end_2 */
> +/****************************************************************************/
> +#asm
> +end_of_prog:
> +  if *>start+0x400
> +     fail! Part 2 too large!
> +  endif
> +
> +  if end_of_prog<start+0x201
> +  .blkb	0x400+start-*
> +  else
> +  .blkb	0x3FF+start-*
> +  .byte 0xFF
> +  endif
> +
> +#endasm
> +
> +/****************************************************************************/
> diff -ruN ./elks-stuff/elkscmd/bootblocks/minix.h
> ./elks/elkscmd/bootblocks/minix.h
> --- ./elks-stuff/elkscmd/bootblocks/minix.h	1969-12-31
> 19:00:00.000000000 -0500
> +++ ./elks/elkscmd/bootblocks/minix.h	2004-04-18
> 15:00:59.000000000 -0400
> @@ -0,0 +1,104 @@
> +/****************************************************************************/
> +/* Super block table.  The root file system and every
> mounted file system
> + * has an entry here.  The entry holds information
> about the sizes of the bit
> + * maps and inodes.  The s_ninodes field gives the
> number of inodes available
> + * for files and directories, including the root
> directory.  Inode 0 is 
> + * on the disk, but not used.  Thus s_ninodes = 4
> means that 5 bits will be
> + * used in the bit map, bit 0, which is always 1 and
> not used, and bits 1-4
> + * for files and directories.  The disk layout is:
> + *
> + *      Item        # blocks
> + *    boot block      1
> + *    super block     1
> + *    inode map     s_imap_blocks
> + *    zone map      s_zmap_blocks
> + *    inodes        (s_ninodes + 1 + INODES_PER_BLOCK
> - 1)/INODES_PER_BLOCK
> + *    unused        whatever is needed to fill out
> the current zone
> + *    data zones    (s_nzones - s_firstdatazone) <<
> s_log_zone_size
> + *
> + * A super_block slot is free if s_dev == NO_DEV. 
> + */
> +
> +#define BLOCK_SIZE      1024	/* # bytes in a disk
> block */
> +
> +/* Flag bits for i_mode in the inode. */
> +#define I_TYPE          0170000	/* this field gives
> inode type */
> +#define I_REGULAR       0100000	/* regular file, not
> dir or special */
> +#define I_BLOCK_SPECIAL 0060000	/* block special file
> */
> +#define I_DIRECTORY     0040000	/* file is a
> directory */
> +#define I_CHAR_SPECIAL  0020000	/* character special
> file */
> +#define I_SET_UID_BIT   0004000	/* set effective uid
> on exec */
> +#define I_SET_GID_BIT   0002000	/* set effective gid
> on exec */
> +#define ALL_MODES       0006777	/* all bits for user,
> group and others */
> +#define RWX_MODES       0000777	/* mode bits for RWX
> only */
> +#define R_BIT           0000004	/* Rwx protection bit
> */
> +#define W_BIT           0000002	/* rWx protection bit
> */
> +#define X_BIT           0000001	/* rwX protection bit
> */
> +#define I_NOT_ALLOC     0000000	/* this inode is free
> */
> +
> +/* Type definitions */
> +typedef unsigned short unshort;	/* must be 16-bit
> unsigned */
> +typedef unshort block_nr;	/* block number */
> +typedef unshort inode_nr;	/* inode number */
> +typedef unshort zone_nr;	/* zone number */
> +typedef unshort bit_nr;		/* if inode_nr & zone_nr
> both unshort,
> +				   then also unshort, else long */
> +
> +typedef unshort sect_nr;
> +
> +typedef long zone_type;		/* zone size */
> +typedef unshort mask_bits;	/* mode bits */
> +typedef unshort dev_nr;		/* major | minor device
> number */
> +typedef char links;		/* number of links to an inode
> */
> +typedef long real_time;		/* real time in seconds
> since Jan 1, 1970 */
> +typedef long file_pos;		/* position in, or length of,
> a file */
> +typedef short uid;		/* user id */
> +typedef char gid;		/* group id */
> +
> +/* Tables sizes */
> +#define NR_ZONE_NUMS       9	/* # zone numbers in an
> inode */
> +#define NAME_SIZE         14	/* # bytes in a
> directory component */
> +
> +/* Miscellaneous constants */
> +#define SUPER_MAGIC   0x137F	/* magic number
> contained in super-block */
> +#define SUPER_MAGIC2  0x138F	/* Secondary magic 30
> char names */
> +
> +#define BOOT_BLOCK  (block_nr)0	/* block number of
> boot block */
> +#define SUPER_BLOCK (block_nr)1	/* block number of
> super block */
> +#define ROOT_INODE  (inode_nr)1	/* inode number for
> root directory */
> +
> +/* Derived sizes */
> +#define NR_DZONE_NUM     (NR_ZONE_NUMS-2)		/* # zones
> in inode */
> +#define INODES_PER_BLOCK (BLOCK_SIZE/sizeof(d_inode))
> /* # inodes/disk blk */
> +#define NR_INDIRECTS     (BLOCK_SIZE/sizeof(zone_nr))
> /* # zones/indir blk */
> +#define INTS_PER_BLOCK   (BLOCK_SIZE/sizeof(int))	/*
> # integers/blk */
> +
> +struct super_block {
> +  inode_nr s_ninodes;		/* # usable inodes on the
> minor device */
> +  zone_nr s_nzones;		/* total device size, including
> bit maps etc */
> +  unshort s_imap_blocks;	/* # of blocks used by inode
> bit map */
> +  unshort s_zmap_blocks;	/* # of blocks used by zone
> bit map */
> +  zone_nr s_firstdatazone;	/* number of first data
> zone */
> +  short s_log_zone_size;	/* log2 of blocks/zone */
> +  file_pos s_max_size;		/* maximum file size on this
> device */
> +  short s_magic;		/* magic number to recognize
> super-blocks */
> +
> +} ;
> +
> +/* Type definitions local to the File System. */
> +typedef struct {		/* directory entry */
> +  inode_nr d_inum;		/* inode number */
> +  char d_name[NAME_SIZE];	/* character string */
> +} dir_struct;
> +
> +/* Declaration of the disk inode used in rw_inode().
> */
> +typedef struct {		/* disk inode.  Memory inode is in
> "inotab.h" */
> +  mask_bits i_mode;		/* file type, protection, etc.
> */
> +  uid i_uid;			/* user id of the file's owner */
> +  file_pos i_size;		/* current file size in bytes */
> +  real_time i_modtime;		/* when was file data last
> changed */
> +  gid i_gid;			/* group number */
> +  links i_nlinks;		/* how many links to this file */
> +  zone_nr i_zone[NR_ZONE_NUMS];	/* block nums for
> direct, ind, and dbl ind */
> +} d_inode;
> +
> diff -ruN ./elks-stuff/elkscmd/bootblocks/minix.sym
> ./elks/elkscmd/bootblocks/minix.sym
> --- ./elks-stuff/elkscmd/bootblocks/minix.sym
> 1969-12-31 19:00:00.000000000 -0500
> +++ ./elks/elkscmd/bootblocks/minix.sym	2004-05-09
> 13:36:50.000000000 -0400
> @@ -0,0 +1,137 @@
> ++ 00000500 ----- $start
> ++ 00000900 ----- $end
> +0 FFFFFFFE ---A- ..FFFF
> +0 000005B7 ---A- .1
> +0 000007A0 ---A- .10
> +0 0000078A ---A- .11
> +0 00000813 ---A- .12
> +0 00000811 ---A- .13
> +0 000007C6 ---A- .14
> +0 000007F2 ---A- .15
> +0 000007D0 ---A- .16
> +0 000007F0 ---A- .17
> +0 000007D7 ---A- .18
> +0 00000896 ---A- .19
> +0 00000823 ---A- .1A
> +0 00000893 ---A- .1B
> +0 0000088C ---A- .1C
> +0 0000082B ---A- .1D
> +0 00000869 ---A- .1E
> +0 0000083F ---A- .1F
> +0 000005AD ---A- .2
> +0 00000869 ---A- .20
> +0 00000867 ---A- .21
> +0 0000083F ---A- .22
> +0 0000085E ---A- .23
> +0 00000845 ---A- .24
> +0 0000085C ---A- .25
> +0 0000084B ---A- .26
> +0 00000867 ---A- .27
> +0 00000865 ---A- .28
> +0 0000088C ---A- .29
> +0 0000087E ---A- .2A
> +0 00000893 ---A- .2B
> +0 000006B7 ---A- .3
> +0 00000697 ---A- .4
> +0 000006B4 ---A- .5
> +0 000006AC ---A- .6
> +0 000006A3 ---A- .7
> +0 00000716 ---A- .8
> +0 0000070E ---A- .9
> +0 00000728 ---A- .A
> +0 00000725 ---A- .B
> +0 0000071E ---A- .C
> +0 00000728 ---A- .D
> +0 00000732 ---A- .E
> +0 0000072F ---A- .F
> +0 00000738 ---A- .FFFF
> +0 00007C00 ---A- BOOTADDR
> +0 00000F00 ---A- _b_inode
> +0 00000900 ---A- _b_super
> +0 00001300 ---A- _b_zone
> +0 00000542 ---A- _bootfile
> +0 00000540 ---A- _dinode
> +0 000008E9 ---A- _dir_32
> +0 00001700 ---A- _directory
> +0 000008E5 ---A- _dirptr
> +0 000008DF ---A- _end_zone
> +0 00000570 ---A- _firstsect
> +0 000008E7 ---A- _flength
> +0 00000615 ---A- _get_now
> +0 000008E1 ---A- _indirect
> +0 0000053E ---A- _inode
> +0 00000574 ---A- _lastsect
> +0 000008E3 ---A- _ldaddr
> +0 000005A0 ---A- _load_block
> +0 00000665 ---A- _load_sect
> +0 00000572 ---A- _loadaddr
> +0 0000056E ---A- _loadcount
> +0 00000700 E--A- _loadprog
> +0 000008DB ---A- _n_sectors
> +0 000008DD ---A- _next_zone
> +0 00000576 ---A- _nogood
> +0 0000064B ---A- _probe_sectors
> +0 000006E7 ---A- _prt_crlf
> +0 000006F0 ---A- _prt_dot
> +0 0000089B ---A- _runprog
> +0 000005DF ---A- _set_bpb
> +0 00000608 ---A- _unset_bpb
> +0 000006D0 ---A- _zero_block
> +0 000008CB ---A- binfile
> +0 0000050F ---A- bios_disk
> +0 0000050B ---A- bios_tabl
> +0 000006FE E--A- bootblock_magic
> +0 00000542 E--A- bootfile
> +0 000006DE ---A- code
> +0 0000053E E--A- codestart
> +0 00000540 E--A- dinode
> +0 00000646 ---A- disksizes
> +0 00000536 ---A- dos4_fattype
> +0 0000052B ---A- dos4_label
> +0 00000520 ---A- dos4_maxsect
> +0 00000524 ---A- dos4_phy_drive
> +0 00000527 ---A- dos4_serial
> +0 0000050D ---A- dos_clust
> +0 00000516 ---A- dos_fatlen
> +0 0000051A ---A- dos_heads
> +0 0000051C ---A- dos_hidden
> +0 00000513 ---A- dos_maxsect
> +0 00000515 ---A- dos_media
> +0 00000510 ---A- dos_nfat
> +0 00000511 ---A- dos_nroot
> +0 0000050E ---A- dos_resv
> +0 0000050B ---A- dos_sect
> +0 00000518 ---A- dos_spt
> +0 00000503 ---A- dos_sysid
> +0 0000050B E--A- dosfs_stat
> +0 000006FA ---A- end_of_part1
> +0 000008EB ---A- end_of_prog
> +0 00000590 ---A- fail_fs
> +0 00000527 ---A- floppy_temp
> +0 00000664 ---A- got_sectors
> +0 00000B00 E--A- helper
> +0 00000F00 E--A- helper_end
> +0 000008D6 ---A- idiv_u
> +0 000008CF ---A- imodu
> +0 000008C1 ---A- impure
> +0 0000053E E--A- inode
> +0 000008DB ---A- libend
> +0 000008CF ---A- libstuff
> +0 0000055A ---A- loopy
> +0 00000587 ---A- min_eos
> +0 00000579 ---A- min_nextc
> +0 00000640 ---A- no_load
> +0 000006F2 ---A- outch
> +0 000006BE ---A- partition_1
> +0 000006CE ---A- partition_2
> +0 000006DE ---A- partition_3
> +0 000006EE ---A- partition_4
> +0 00001700 ---A- probe_buf
> +0 0000064E ---A- probe_loop
> +0 00000618 ---A- retry_get
> +0 00000550 ---A- skip_vars
> +0 00000500 ---A- start
> +0 00000000 ---R- sysboot.s
> +0 00000500 ---A- sysboot_start
> +0 000008EB ---A- varend
> +0 000008DB ---A- vars
> diff -ruN ./elks-stuff/elkscmd/bootblocks/minix_elks.c
> ./elks/elkscmd/bootblocks/minix_elks.c
> --- ./elks-stuff/elkscmd/bootblocks/minix_elks.c
> 1969-12-31 19:00:00.000000000 -0500
> +++ ./elks/elkscmd/bootblocks/minix_elks.c	2004-04-18
> 15:04:37.000000000 -0400
> @@ -0,0 +1,152 @@
> +
> +#define __ASSEMBLY__
> +
> +#asm
> +#include "minix.v"
> +
> +! Must match minix.c ...
> +#define LOADSEG   (0x1000)
> +
> +! Must match ELKS
> +#define ELKS_INITSEG	(0x0100)
> +#define ELKS_SYSSEG	(0x1000)
> +
> +org minix_helper
> +
> +  push	cs
> +  pop	ds
> +  xor	ax,ax
> +  mov	es,ax
> +  mov	ss,ax
> +  mov	sp,ax
> +
> +  mov	cx,#$200		! Move 512 words
> +  mov	si,ax			! Current load address.
> +  mov	di,#minix_helper	! To the correct address.
> +  rep
> +   movsw
> +
> +  mov	ds,ax
> +  jmpi	code,0
> +
> +msg_p2:
> +  .asciz	"\r\nLoading ELKS kernel\r\n"
> +
> +msg_p3:
> +  .asciz	"Starting ...\r\n"
> +
> +aint_elks:
> +  .asciz	"Not an ELKS image!"
> +
> +elks_name:
> +  .asciz	"linux"
> +  .byte		0,0,0,0,0,0,0,0,0
> +
> +dispmsg:		! SI now has pointer to a message
> +  lodsb
> +  cmp	al,#0
> +  jz	EOS
> +  mov	bx,#7
> +  mov	ah,#$E		! Can't use $13 cause that's AT+ only!
> +  int	$10
> +  jmp	dispmsg
> +EOS:
> +  ret
> +
> +code:
> +  mov	si,#msg_p2
> +  call	dispmsg
> +
> +  mov	ax,minix_dinode		! In the same directory.
> +  mov	minix_inode,ax
> +
> +  mov	cx,#14
> +  mov	si,#elks_name
> +  mov	di,#minix_bootfile
> +  rep
> +   movsb
> +
> +  call	minix__loadprog
> +  				! Ok, now loaded "boot/linux" (or so)
> +  mov	si,#msg_p3
> +  call	dispmsg
> +
> +  call	kill_motor		! For kernels without a floppy
> driver.
> +!
> +  mov	ax,#LOADSEG
> +  mov	ds,ax
> +
> +  mov	ax,$1E6			! Check for ELKS magic number
> +  cmp	ax,#$4C45
> +  jnz	not_elks
> +  mov	ax,$1E8
> +  cmp	ax,#$534B
> +  jz	boot_it
> +not_elks:
> +  xor	ax,ax
> +  mov	ds,ax
> +  mov	si,#aint_elks
> +  call	dispmsg
> +  xor	ax,ax
> +  int	$16
> +  jmpi	$0,$FFFF
> +
> +boot_it:
> +  mov	ax,#ELKS_INITSEG
> +  mov	es,ax
> +
> +  mov	bl,497			! Fetch number of setup sects.
> +  xor	bh,bh
> +  inc	bx
> +  mov	ax,500			! Fetch system size
> +  mov	cl,#5
> +  add	ax,#31
> +  shr	ax,cl
> +  mov	dx,ax
> +
> +looping:			! Put the setup where it belongs
> +  call	copy_sect
> +  dec	bx
> +  jnz	looping
> +
> +  mov	ax,#ELKS_SYSSEG
> +  mov	es,ax
> +
> +looping2:			! Put the body code in the right place.
> +  call	copy_sect
> +  dec	dx
> +  jnz	looping2
> +  
> +  ! Ok, everything should be where it belongs call
> it.
> +  mov	ax,#ELKS_INITSEG
> +  mov	ds,ax
> +  mov	es,ax
> +  mov	ss,ax
> +  mov	sp,#0x4000-12
> +  jmpi	0,ELKS_INITSEG+$20
> +
> +copy_sect:
> +  mov	cx,#256
> +  xor	si,si
> +  xor	di,di
> +  rep
> +   movsw
> +
> +  mov	ax,ds
> +  add	ax,#32
> +  mov	ds,ax
> +  mov	ax,es
> +  add	ax,#32
> +  mov	es,ax
> +  ret
> +  
> +kill_motor:
> +  push	dx
> +  mov	dx,#0x3f2
> +  xor	al, al
> +  outb
> +  pop	dx
> +  ret
> +
> +#endasm
> +
> diff -ruN
> ./elks-stuff/elkscmd/bootblocks/minix_elks.sym
> ./elks/elkscmd/bootblocks/minix_elks.sym
> --- ./elks-stuff/elkscmd/bootblocks/minix_elks.sym
> 1969-12-31 19:00:00.000000000 -0500
> +++ ./elks/elkscmd/bootblocks/minix_elks.sym
> 2004-05-09 13:36:50.000000000 -0400
> @@ -0,0 +1,26 @@
> ++ 00000B00 ----- $start
> ++ 00000C19 ----- $end
> +0 00000B72 ---A- EOS
> +0 00000B42 ---A- aint_elks
> +0 00000BBE ---A- boot_it
> +0 00000B73 ---A- code
> +0 00000BF8 ---A- copy_sect
> +0 00000B64 ---A- dispmsg
> +0 00000B55 ---A- elks_name
> +0 00000C10 ---A- kill_motor
> +0 00000BD6 ---A- looping
> +0 00000BE1 ---A- looping2
> +0 00000700 ---A- minix__loadprog
> +0 000006FE ---A- minix_bootblock_magic
> +0 00000542 ---A- minix_bootfile
> +0 0000053E ---A- minix_codestart
> +0 00000540 ---A- minix_dinode
> +0 0000050B ---A- minix_dosfs_stat
> +0 00000B00 ---A- minix_helper
> +0 00000F00 ---A- minix_helper_end
> +0 0000053E ---A- minix_inode
> +0 00000400 ---A- minix_size
> +0 00000500 ---A- minix_start
> +0 00000B1B ---A- msg_p2
> +0 00000B33 ---A- msg_p3
> +0 00000BAB ---A- not_elks
> 
> diff -ruN
> ./elks-stuff/elkscmd/rootfs_template/dev/MAKEDEV
> ./elks/elkscmd/rootfs_template/dev/MAKEDEV
> --- ./elks-stuff/elkscmd/rootfs_template/dev/MAKEDEV
> 2004-05-28 16:02:01.000000000 -0400
> +++ ./elks/elkscmd/rootfs_template/dev/MAKEDEV
> 1969-12-31 19:00:00.000000000 -0500
> @@ -1,264 +0,0 @@
> -#!/bin/sh
> -
> -# Devices are generated by this script in the same
> order that they are listed
> -# in the Documentation/devices.txt file in the Linux
> 2.4.18 and5.21 kernel
> -# sources. This includes devices that are not
> currently relevant to ELKS, to
> -# encourage the use of common node numbers when these
> devices are eventually
> -# implemented.
> -#
> -# Where different node numbers are currently used by
> ELKS, the current ELKS
> -# node numbers are generated by lines labelled
> "Currently" and the relevant
> -# Linux node numbers are generated by lines labelled
> "Ought to be".
> -#
> -# Refer to the MAKESET command, also in this
> directory, for usage details.
> -
> -LINK=/bin/ln
> -MKDEV=/bin/mknod
> -MKSET=/dev/MAKESET
> -
> -##############################################################################
> -# Ensure required auxilliary script is present.
> -
> -if ! /bin/test -f "$MKSET"
> -then
> -    echo ERROR: \"$MKSET\" script missing, unable to
> continue.
> -    exit 1
> -fi
> -
> -##############################################################################
> -# Create memory devices.
> -
> -	$MKDEV mem	c 1 1
> -	$MKDEV kmem	c 1 2
> -	$MKDEV null	c 1 3
> -#	$MKDEV port	c 1 4
> -	$MKDEV zero	c 1 5
> -#	$MKDEV core	c 1 6
> -	$MKDEV full	c 1 7
> -#	$MKDEV random	c 1 8
> -#	$MKDEV urandom	c 1 9
> -#	$MKDEV aio	c 1 10
> -
> -##############################################################################
> -# RAM disks.
> -
> -	$MKSET   0 7  $MKDEV ram b 1
> -
> -	$LINK  ram1	ramdisk
> -
> -##############################################################################
> -# Pseudo-TTY master devices. These are not yet
> supported by the ELKS kernel.
> -
> -#	$MKSET   0 15 $MKDEV ptyp x 2
> -#	$MKSET  16 15 $MKDEV ptyq x 2
> -#	$MKSET  32 15 $MKDEV ptyr x 2
> -#	$MKSET  48 15 $MKDEV ptys x 2
> -#	$MKSET  64 15 $MKDEV ptyt x 2
> -#	$MKSET  80 15 $MKDEV ptyu x 2
> -#	$MKSET  96 15 $MKDEV ptyv x 2
> -#	$MKSET 112 15 $MKDEV ptyw x 2
> -#	$MKSET 128 15 $MKDEV ptyx x 2
> -#	$MKSET 144 15 $MKDEV ptyy x 2
> -#	$MKSET 160 15 $MKDEV ptyz x 2
> -#	$MKSET 176 15 $MKDEV ptya x 2
> -#	$MKSET 192 15 $MKDEV ptyb x 2
> -#	$MKSET 208 15 $MKDEV ptyc x 2
> -#	$MKSET 224 15 $MKDEV ptyd x 2
> -#	$MKSET 240 15 $MKDEV ptye x 2
> -
> -##############################################################################
> -# Floppy diskettes. Only the auto-detect nodes are
> listed.
> -
> -	$MKDEV fd0	b 3 128 	# Currently.
> -	$MKDEV fd1	b 3 192 	# Currently.
> -
> -#	$MKSET   0 3  $MKDEV fd b 2	# Ought to be.
> -
> -##############################################################################
> -# Pseudo-TTY master devices. These are not yet
> supported by the ELKS kernel.
> -
> -#	$MKSET   0 15 $MKDEV ttyp x 3
> -#	$MKSET  16 15 $MKDEV ttyq x 3
> -#	$MKSET  32 15 $MKDEV ttyr x 3
> -#	$MKSET  48 15 $MKDEV ttys x 3
> -#	$MKSET  64 15 $MKDEV ttyt x 3
> -#	$MKSET  80 15 $MKDEV ttyu x 3
> -#	$MKSET  96 15 $MKDEV ttyv x 3
> -#	$MKSET 112 15 $MKDEV ttyw x 3
> -#	$MKSET 128 15 $MKDEV ttyx x 3
> -#	$MKSET 144 15 $MKDEV ttyy x 3
> -#	$MKSET 160 15 $MKDEV ttyz x 3
> -#	$MKSET 176 15 $MKDEV ttya x 3
> -#	$MKSET 192 15 $MKDEV ttyb x 3
> -#	$MKSET 208 15 $MKDEV ttyc x 3
> -#	$MKSET 224 15 $MKDEV ttyd x 3
> -#	$MKSET 240 15 $MKDEV ttye x 3
> -
> -##############################################################################
> -# Direct IDE disks, Primary channel.
> -
> -	$MKSET   0 63 $MKDEV hda d 5	# Currently.
> -	$MKSET  64 63 $MKDEV hdb d 5	# Currently.
> -
> -#	$MKSET   0 63 $MKDEV hda d 3	# Ought to be.
> -#	$MKSET  64 63 $MKDEV hdb d 3	# Ought to be.
> -
> -##############################################################################
> -# Virtual consoles. Note that tty4 through tty7 can't
> be enabled at this
> -# time because of the possible conflict with ttyS0
> through ttyS3 which
> -# used to use the node numbers these now use.
> However, it is expected that
> -# this restriction can be removed in the near future.
> -
> -	$MKSET  0 3  $MKDEV tty c 4	# Currently
> -#	$MKSET  0 15 $MKDEV tty c 4	# Soon to be
> -
> -# Serial ports, as detected by the ROM BIOS.
> -
> -	$MKSET 64 3  $MKDEV ttyS c 4
> -
> -##############################################################################
> -# Alternate TTY devices. These are not yet supported.
> -
> -#	$MKDEV tty	c 5 0
> -#	$MKDEV console	c 5 1
> -#	$MKDEV ptmx	c 5 2
> -
> -##############################################################################
> -# Parallel devices, as detected by the ROM BIOS.
> -
> -	$MKSET  0 3  $MKDEV lp c 6
> -
> -##############################################################################
> -# Loopback devices. These are not yet supported.
> -
> -#	$MKSET  0 15 $MKDEV loop c 7
> -
> -##############################################################################
> -# SCSI disks. These are not yet supported.
> -
> -#	$MKSET   0 15 $MKDEV sda d 8
> -#	$MKSET  16 15 $MKDEV sdb d 8
> -#	$MKSET  32 15 $MKDEV sdc d 8
> -#	$MKSET  48 15 $MKDEV sdd d 8
> -#	$MKSET  64 15 $MKDEV sde d 8
> -#	$MKSET  80 15 $MKDEV sdf d 8
> -#	$MKSET  96 15 $MKDEV sdg d 8
> -#	$MKSET 112 15 $MKDEV sdh d 8
> -#	$MKSET 128 15 $MKDEV sdi d 8
> -#	$MKSET 144 15 $MKDEV sdj d 8
> -#	$MKSET 160 15 $MKDEV sdk d 8
> -#	$MKSET 176 15 $MKDEV sdl d 8
> -#	$MKSET 192 15 $MKDEV sdm d 8
> -#	$MKSET 208 15 $MKDEV sdn d 8
> -#	$MKSET 224 15 $MKDEV sdo d 8
> -#	$MKSET 240 15 $MKDEV sdp d 8
> -
> -##############################################################################
> -# SCSI tapes. These are not yet supported.
> -
> -#	$MKSET   0 31 $MKDEV st c 9
> -#	$MKSET  32 31 $MKDEV st c 9 l
> -#	$MKSET  64 31 $MKDEV st c 9 m
> -#	$MKSET  96 31 $MKDEV st c 9 a
> -#	$MKSET 128 31 $MKDEV nst c 9
> -#	$MKSET 160 31 $MKDEV nst c 9 l
> -#	$MKSET 192 31 $MKDEV nst c 9 m
> -#	$MKSET 224 31 $MKDEV nst c 9 a
> -
> -##############################################################################
> -# Metadisk (RAID) devices. These are not yet
> supported.
> -
> -#	$MKSET   0 15 $MKDEV md b 9
> -
> -##############################################################################
> -# SCSI CD-ROM devices. These are not yet supported.
> -
> -#	$MKSET   0 15 $MKDEV scd b 11
> -
> -##############################################################################
> -# MSCDEX CD-ROM devices. These are not yet supported.
> -
> -#	$MKSET   0 15 $MKDEV doscd b 12
> -
> -##############################################################################
> -# 8-bit MFM/RLL controllers. These are not yet
> supported.
> -
> -#	$MKSET   0 63 $MKDEV xda b 13
> -#	$MKSET  64 63 $MKDEV xdb b 13
> -
> -##############################################################################
> -# BIOS hard disks.
> -
> -	$MKSET   0 63 $MKDEV bda d 3	# Currently
> -	$MKSET  64 63 $MKDEV bdb d 3	# Currently
> -	$MKSET 128 63 $MKDEV bdc d 3	# Currently
> -	$MKSET 192 63 $MKDEV bdd d 3	# Currently
> -
> -#	$MKSET   0 63 $MKDEV bda d 14	# Ought to be
> -#	$MKSET  64 63 $MKDEV bdb d 14	# Ought to be
> -#	$MKSET 128 63 $MKDEV bdc d 14	# Ought to be
> -#	$MKSET 192 63 $MKDEV bdd d 14	# Ought to be
> -
> -##############################################################################
> -# Joysticks. These are not yet supported.
> -
> -#	$MKSET   0 15 $MKDEV js c 15
> -#	$MKSET 128 15 $MKDEV djs c 15
> -
> -##############################################################################
> -# Generic SCSI devics. These are not yet supported.
> -
> -#	$MKSET   0 15 $MKDEV sg c 21
> -
> -##############################################################################
> -# Direct IDE disks, Secondary channel. These are not
> yet supported.
> -
> -#	$MKSET   0 63 $MKDEV hdc d 22
> -#	$MKSET  64 63 $MKDEV hdd d 22
> -
> -##############################################################################
> -# Direct IDE disks, Tertiary channel. These are not
> yet supported.
> -
> -#	$MKSET   0 63 $MKDEV hde d 33
> -#	$MKSET  64 63 $MKDEV hdf d 33
> -
> -##############################################################################
> -# Z80-SIO devices. These are not yet supported.
> -
> -#	$MKSET   0  7 $MKDEV scc c 34
> -
> -##############################################################################
> -# Direct IDE disks, Quaternary channel. These are not
> yet supported.
> -
> -#	$MKSET   0 63 $MKDEV hde d 34
> -#	$MKSET  64 63 $MKDEV hdf d 34
> -
> -##############################################################################
> -# Direct IDE disks, Quinternary channel. These are
> not yet supported.
> -
> -#	$MKSET   0 63 $MKDEV hdg d 56
> -#	$MKSET  64 63 $MKDEV hdh d 56
> -
> -##############################################################################
> -# Direct IDE disks, Quaternary channel. These are not
> yet supported.
> -
> -#	$MKSET   0 63 $MKDEV hdi d 57
> -#	$MKSET  64 63 $MKDEV hdj d 57
> -
> -##############################################################################
> -# SCSI Media Changer. These are not yet supported.
> -
> -#	$MKSET   0 15 $MKDEV sch c 86
> -
> -##############################################################################
> -# I2C bus drivers. These are not yet supported.
> -
> -#	$MKSET   0 7  $MKDEV i2c c 89
> -
> -##############################################################################
> -# Conrad Electronic Parallel Port Radio Clocks. These
> are not yet supported.
> -
> -#	$MKSET	 0 1  $MKDEV pcfclock c 181
> -
> -##############################################################################
> -# EOF.
> 
> diff -ruN
> ./elks-stuff/elkscmd/rootfs_template/dev/MAKESET
> ./elks/elkscmd/rootfs_template/dev/MAKESET
> --- ./elks-stuff/elkscmd/rootfs_template/dev/MAKESET
> 2004-05-28 16:02:01.000000000 -0400
> +++ ./elks/elkscmd/rootfs_template/dev/MAKESET
> 1969-12-31 19:00:00.000000000 -0500
> @@ -1,48 +0,0 @@
> -#!/bin/sh
> -
> -if [ $# -lt 6 -o $# -gt 7 ]; then
> -    echo
> -    echo "Usage: makeset min count cmd prefix type
> major [suffix]"
> -    echo
> -    echo "where  min     is the minor of the first
> node to make,"
> -    echo "       count   is the number of the last
> node to make,"
> -    echo "       cmd     is the command to make a
> node,"
> -    echo "       prefix  is the node name prefix,"
> -    echo "       type    is the type selector for the
> node,"
> -    echo "       major   is the major number for the
> node,"
> -    echo "  and  suffix  is a suffix to append to the
> node names."
> -    echo
> -    echo "The following type selectors are
> supported:"
> -    echo
> -    echo "   b    Block device, all nodes have
> numeric suffix."
> -    echo "   d    Block device, first node is raw
> device without numeric suffix."
> -    echo
> -    echo "   c    Character device with decimal
> numeric suffix."
> -    echo "   x    Character device with hexadecimal
> numeric suffix."
> -    echo
> -else
> -    N=0
> -    while [ $N -le $2 ]; do
> -	P=`expr $N + $1`
> -	case ".$5" in
> -	    .b)     eval $3 $4$N$7 $5 $6 $P
> -		    ;;
> -	    .c)     eval $3 $4$N$7 $5 $6 $P
> -		    ;;
> -	    .d)     if [ $N -gt 0 ]; then
> -			eval $3 $4$N$7 $5 $6 $P
> -		    else
> -			eval $3 $4$7 $5 $6 $P
> -		    fi
> -		    ;;
> -	    .x)	    if [ $N -gt 9 ]; then
> -			R=`echo 123456789abcdef | cut -b $N`
> -			eval $3 $4$R$7 c $6 $P
> -		    else
> -			eval $3 $4$N$7 c $6 $P
> -		    fi
> -		    ;;
> -	esac
> -	N=`expr $N + 1`
> -    done
> -fi
> 
> diff -ruN ./elks-stuff/elkscmd/sysboot.s
> ./elks/elkscmd/sysboot.s
> --- ./elks-stuff/elkscmd/sysboot.s	1969-12-31
> 19:00:00.000000000 -0500
> +++ ./elks/elkscmd/sysboot.s	2004-04-19
> 21:56:00.000000000 -0400
> @@ -0,0 +1,82 @@
> +
> +! The master boot sector will have setup a stack,
> +! this is normally at 0:7c00 down.
> +! DS, SS, CS and ES will all have value 0 so the
> execution address is 0:7c00
> +! On entry the register SI will be pointer to the
> partition entry that
> +! this sector was loaded from, DL is the drive.
> +
> +! Also if it's a standard Master boot DH will be the
> head, CX will be the
> +! sector and cylinder, BX=7C00, AX=1, DI=7DFE, BP=SI.
> There's a reasonable
> +! chance that this isn't true though.
> +
> +! The Master boot itself will have been loaded and
> run at $07c00
> +! The BIOS must have setup a stack because interrupts
> are enabled
> +! Little else can be assumed because DOS doesn`t
> assume anything either
> +
> +sysboot_start:
> +j codestart
> +nop		! DOS appears to _require_ this to identify an
> MSDOS disk!!
> +
> +.blkb sysboot_start+3-*
> +public dosfs_stat
> +dos_sysid:	.ascii "LINUX"	! System ID
> +		.byte 0,0,0
> +dosfs_stat:
> +dos_sect:	.blkw 1		! Sector size
> +dos_clust:	.blkb 1		! Cluster size
> +dos_resv:	.blkw 1		! Res-sector
> +dos_nfat:	.blkb 1		! FAT count
> +dos_nroot:	.blkw 1		! Root dir entries
> +dos_maxsect:	.blkw 1		! Sector count (=0 if large FS)
> +dos_media:	.blkb 1		! Media code
> +dos_fatlen:	.blkw 1		! FAT length
> +dos_spt:	.blkw 1		! Sect/Track
> +dos_heads:	.blkw 1		! Heads
> +dos_hidden:	.blkw 2		! Hidden sectors
> +
> +! Here down is DOS 4+ and probably not needed for
> floppy boots.
> +
> +dos4_maxsect:	.blkw 2		! Large FS sector count
> +dos4_phy_drive:	.blkb 1		! Phys drive
> +.blkb 1		! Reserved
> +.blkb 1		! DOS 4
> +
> +floppy_temp:
> +dos4_serial:	.blkw 2		! Serial number
> +dos4_label:	.blkb 11	! Disk Label (DOS 4+)
> +dos4_fattype:	.blkb 8		! FAT type
> +
> +!
> +! This is where the code will be overlaid, the
> default is a hang
> +.blkb sysboot_start+0x3E-*
> +public codestart
> +codestart:
> +  j	codestart
> +
> +! Partition table
> +public bootblock_magic
> +
> +.blkb sysboot_start+0x1BE-*
> +partition_1:
> +.blkb 8			! IN,SH,SS,ST,OS,EH,ES,ET
> +.blkw 2			! Linear position (0 based)
> +.blkw 2			! Linear length
> +.blkb sysboot_start+0x1CE-*
> +partition_2:
> +.blkb 8			! IN,SH,SS,ST,OS,EH,ES,ET
> +.blkw 2			! Linear position (0 based)
> +.blkw 2			! Linear length
> +.blkb sysboot_start+0x1DE-*
> +partition_3:
> +.blkb 8			! IN,SH,SS,ST,OS,EH,ES,ET
> +.blkw 2			! Linear position (0 based)
> +.blkw 2			! Linear length
> +.blkb sysboot_start+0x1EE-*
> +partition_4:
> +.blkb 8			! IN,SH,SS,ST,OS,EH,ES,ET
> +.blkw 2			! Linear position (0 based)
> +.blkw 2			! Linear length
> +
> +.blkb sysboot_start+0x1FE-*
> +bootblock_magic:
> +.word 0xAA55
> 
> 
> 	
> 		
> __________________________________
> Do you Yahoo!?
> Friends.  Fun.  Try the all-new Yahoo! Messenger.
> http://messenger.yahoo.com/
> -
> To unsubscribe from this list: send the line "unsubscribe linux-8086" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-06-01 13:31 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-05-28 23:35 Broken-up patch #11 Tommy McCabe
2004-06-01 13:31 ` Miguel Bolanos

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox