aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorRodney W. Grimes <rgrimes@FreeBSD.org>1994-10-02 05:18:26 +0000
committerRodney W. Grimes <rgrimes@FreeBSD.org>1994-10-02 05:18:26 +0000
commit12fafb2d5ae3a12b8dc46c12124b079cf798a991 (patch)
treebc021c5db739840f4f3967f01ea94bf44e20f961 /sys
parentea56956912c7a98eddf96db60b6a6bc0fcd4cb4f (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/i386/boot/Makefile131
-rw-r--r--sys/i386/boot/asm.S132
-rw-r--r--sys/i386/boot/bios.S175
-rw-r--r--sys/i386/boot/biosboot/Makefile131
-rw-r--r--sys/i386/boot/biosboot/asm.S132
-rw-r--r--sys/i386/boot/biosboot/bios.S175
-rw-r--r--sys/i386/boot/biosboot/start.S106
-rw-r--r--sys/i386/boot/start.S106
8 files changed, 496 insertions, 592 deletions
diff --git a/sys/i386/boot/Makefile b/sys/i386/boot/Makefile
index 568fec905532..0c5d1386a091 100644
--- a/sys/i386/boot/Makefile
+++ b/sys/i386/boot/Makefile
@@ -1,107 +1,50 @@
-#
-# Permission to use, copy, modify and distribute this software and its
-# documentation is hereby granted, provided that both the copyright
-# notice and this permission notice appear in all copies of the
-# software, derivative works or modified versions, and any portions
-# thereof, and that both notices appear in supporting documentation.
-#
-# CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
-# CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
-# ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
-#
-# Carnegie Mellon requests users of this software to return to
-#
-# Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
-# School of Computer Science
-# Carnegie Mellon University
-# Pittsburgh PA 15213-3890
-#
-# any improvements or extensions that they make and grant Carnegie Mellon
-# the rights to redistribute these changes.
-#
-# from: Mach, Revision 2.2 92/04/04 11:33:46 rpd
-# $Id: Makefile,v 1.15 1994/09/19 19:54:49 adam Exp $
+# $Id$
#
-wd0:
- dd if=boot of=biosboot count=1
- dd if=boot of=bootbios skip=1
- disklabel -B -b biosboot -s bootbios wd0
- rm biosboot bootbios
+PROG= boot
+# Order is very important on the SRCS line for this prog
+SRCS= start.S table.c boot2.S boot.c asm.S bios.S io.c disk.c sys.c
-NOPROG= noprog
-NOMAN= noman
+BINDIR= /usr/mdec
+BINMODE= 444
+CFLAGS+= -O2 -DDO_BAD144 -DBOOTWAIT=${BOOTWAIT}
+CFLAGS+= -I${.CURDIR} -I${.CURDIR}/../..
+CLEANFILES+= boot.nohdr boot.strip boot1 boot2
+DPADD= ${LIBC}
+LDFLAGS+= -N -T 0 -nostdlib
+LDADD= -lc
+LINKS= ${BINDIR}/sdboot ${BINDIR}/wdboot\
+ ${BINDIR}/sdboot ${BINDIR}/fdboot\
+ ${BINDIR}/bootsd ${BINDIR}/bootwd\
+ ${BINDIR}/bootsd ${BINDIR}/bootfd
+NOSHARED= YES
+NOMAN=
+STRIP=
# tunable timeout parameter, waiting for keypress, calibrated in mS
BOOTWAIT?= 5000
-
-CFLAGS = -O2 -DDO_BAD144 -DBOOTWAIT=${BOOTWAIT} -I${.CURDIR}
-LIBS= -lc
-INC= -I${.CURDIR}/../..
-
-# start.o should be first
-OBJS = start.o table.o boot2.o boot.o asm.o bios.o io.o disk.o sys.o
-
-.SUFFIXES: .S .c .o
-
-.c.o:
- $(CC) $(CFLAGS) $(INC) -c $<
-
-.S.o:
- $(CC) $(CFLAGS) -c $<
-
-boot: $(OBJS)
- $(LD) -Bstatic -N -T 0 -o boot $(OBJS) ${LDDESTDIR} $(LIBS)
- cp boot boot.sym
- @strip boot
- @size boot
- @sh ${.CURDIR}/rmaouthdr boot boot.tmp
- @mv -f boot.tmp boot
- @ls -l boot
-
-biosboot: boot
- dd if=boot of=biosboot count=1
-
-bootbios: boot
- dd if=boot of=bootbios skip=1
-
-${DESTDIR}/usr/mdec/bootsd: bootbios
- cp bootbios ${DESTDIR}/usr/mdec/bootsd
-
-${DESTDIR}/usr/mdec/sdboot: biosboot
- cp biosboot ${DESTDIR}/usr/mdec/sdboot
-
-${DESTDIR}/usr/mdec/bootwd: ${DESTDIR}/usr/mdec/bootsd
- rm -f ${DESTDIR}/usr/mdec/bootwd
- ln ${DESTDIR}/usr/mdec/bootsd ${DESTDIR}/usr/mdec/bootwd
-
-${DESTDIR}/usr/mdec/wdboot: ${DESTDIR}/usr/mdec/sdboot
- rm -f ${DESTDIR}/usr/mdec/wdboot
- ln ${DESTDIR}/usr/mdec/sdboot ${DESTDIR}/usr/mdec/wdboot
-
-${DESTDIR}/usr/mdec/bootfd: ${DESTDIR}/usr/mdec/bootsd
- rm -f ${DESTDIR}/usr/mdec/bootfd
- ln ${DESTDIR}/usr/mdec/bootsd ${DESTDIR}/usr/mdec/bootfd
-
-${DESTDIR}/usr/mdec/fdboot: ${DESTDIR}/usr/mdec/sdboot
- rm -f ${DESTDIR}/usr/mdec/fdboot
- ln ${DESTDIR}/usr/mdec/sdboot ${DESTDIR}/usr/mdec/fdboot
-sd: ${DESTDIR}/usr/mdec/bootsd ${DESTDIR}/usr/mdec/sdboot
-wd: ${DESTDIR}/usr/mdec/bootwd ${DESTDIR}/usr/mdec/wdboot
-fd: ${DESTDIR}/usr/mdec/bootfd ${DESTDIR}/usr/mdec/fdboot
+boot.strip: boot
+ cp -p boot boot.strip
+ strip boot.strip
+ size boot.strip
-all: biosboot bootbios
+boot.nohdr: boot.strip
+ dd if=boot.strip of=boot.nohdr ibs=32 skip=1 obs=1024b
+ ls -l boot.nohdr
-fd0:
- dd if=boot of=biosboot count=1
- dd if=boot of=bootbios skip=1
- disklabel -B -b biosboot -s bootbios fd0
- rm biosboot bootbios
+boot1: boot.nohdr
+ dd if=boot.nohdr of=boot1 bs=512 count=1
-install: wd sd fd
+boot2: boot.nohdr
+ dd if=boot.nohdr of=boot2 bs=512 skip=1
-clean:
- /bin/rm -f *.o *.d boot bootbios biosboot boot.sym
+all: boot1 boot2
+beforeinstall:
+ install ${COPY} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}\
+ boot1 ${BINDIR}/sdboot
+ install ${COPY} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}\
+ boot2 ${BINDIR}/bootsd
+
.include <bsd.prog.mk>
diff --git a/sys/i386/boot/asm.S b/sys/i386/boot/asm.S
index f9bf4e06fd23..2993bc992ddf 100644
--- a/sys/i386/boot/asm.S
+++ b/sys/i386/boot/asm.S
@@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:34:13 rpd
- * $Id: asm.S,v 1.2 1993/10/16 19:11:27 rgrimes Exp $
+ * $Id: asm.S,v 1.3 1994/08/30 01:38:02 bde Exp $
*/
@@ -63,88 +63,96 @@ CR0_PE_OFF = 0xfffffffe
.text
/*
-#
-# real_to_prot()
-# transfer from real mode to protected mode.
-*/
+ *
+ * real_to_prot()
+ * transfer from real mode to protected mode.
+ */
ENTRY(real_to_prot)
- # guarantee that interrupt is disabled when in prot mode
+ /* guarantee that interrupt is disabled when in prot mode */
cli
- # load the gdtr
+ /* load the gdtr */
addr32
data32
lgdt EXT(Gdtr)
- # set the PE bit of CR0
+ /* set the PE bit of CR0 */
mov %cr0, %eax
data32
or $CR0_PE_ON, %eax
mov %eax, %cr0
- # make intrasegment jump to flush the processor pipeline and
- # reload CS register
+ /*
+ * make intrasegment jump to flush the processor pipeline and
+ * reload CS register
+ */
data32
ljmp $0x18, $xprot
xprot:
- # we are in USE32 mode now
- # set up the protected mode segment registers : DS, SS, ES
+ /*
+ * we are in USE32 mode now
+ * set up the protected mode segment registers : DS, SS, ES
+ */
mov $0x20, %eax
movw %ax, %ds
movw %ax, %ss
movw %ax, %es
#ifdef BDE_DEBUGGER
- # load idtr so we can debug
+ /* load idtr so we can debug */
lidt EXT(Idtr_prot)
#endif
ret
/*
-#
-# prot_to_real()
-# transfer from protected mode to real mode
-#
-*/
+ *
+ * prot_to_real()
+ * transfer from protected mode to real mode
+ *
+ */
ENTRY(prot_to_real)
- # set up a dummy stack frame for the second seg change.
+ /* set up a dummy stack frame for the second seg change. */
movl _ouraddr, %eax
sarl $4, %eax
pushw %ax
- movw $xreal, %ax # gas botches pushw $xreal - extra bytes 0, 0
- pushw %ax # decode to add %al, (%eax) (%al usually 0)
+ movw $xreal, %ax /* gas botches pushw $xreal, extra bytes 0, 0 */
+ pushw %ax /* decode to add %al, (%eax) (%al usually 0) */
- # Change to use16 mode.
+ /* Change to use16 mode. */
ljmp $0x28, $x16
x16:
- # clear the PE bit of CR0
+ /* clear the PE bit of CR0 */
mov %cr0, %eax
data32
and $CR0_PE_OFF, %eax
mov %eax, %cr0
- # make intersegment jmp to flush the processor pipeline
- # using the fake stack frame set up earlier
- # and reload CS register
+ /*
+ * make intersegment jmp to flush the processor pipeline
+ * using the fake stack frame set up earlier
+ * and reload CS register
+ */
lret
xreal:
- # we are in real mode now
- # set up the real mode segment registers : DS, SS, ES
+ /*
+ * we are in real mode now
+ * set up the real mode segment registers : DS, SS, ES
+ */
movw %cs, %ax
movw %ax, %ds
movw %ax, %ss
movw %ax, %es
#ifdef BDE_DEBUGGER
- # load idtr so we can debug
+ /* load idtr so we can debug */
addr32
data32
lidt EXT(Idtr_real)
@@ -154,49 +162,47 @@ xreal:
ret
/*
-#
-# startprog(phyaddr)
-# start the program on protected mode where phyaddr is the entry point
-#
-*/
+ * startprog(phyaddr)
+ * start the program on protected mode where phyaddr is the entry point
+ */
ENTRY(startprog)
push %ebp
mov %esp, %ebp
- # get things we need into registers
- movl 0x8(%ebp), %ecx # entry offset
- movl 0x0c(%ebp), %eax # &argv
+ /* get things we need into registers */
+ movl 0x8(%ebp), %ecx /* entry offset */
+ movl 0x0c(%ebp), %eax /* &argv */
- # make a new stack at 0:0xa0000 (big segs)
+ /* make a new stack at 0:0xa0000 (big segs) */
mov $0x10, %ebx
movw %bx, %ss
movl $0xa0000, %ebx
movl %ebx, %esp
- # push some number of args onto the stack
- pushl $0 # nominally a cyl offset in the boot.
- pushl 0x8(%eax) # argv[2] = bootdev
- pushl 0x4(%eax) # argv[1] = howto
- pushl $0 # dummy 'return' address
+ /* push some number of args onto the stack */
+ pushl $0 /* was a cyl offset in the boot. */
+ pushl 0x8(%eax) /* argv[2] = bootdev */
+ pushl 0x4(%eax) /* argv[1] = howto */
+ pushl $0 /* dummy 'return' address */
- # push on our entry address
- mov $0x08, %ebx # segment
+ /* push on our entry address */
+ mov $0x08, %ebx /* segment */
pushl %ebx
pushl %ecx
- # convert over the other data segs
+ /* convert over the other data segs */
mov $0x10, %ebx
movw %bx, %ds
movw %bx, %es
- # convert the PC (and code seg)
+ /* convert the PC (and code seg) */
lret
/*
-#
-# pbzero( dst, cnt)
-# where src is a virtual address and dst is a physical address
-*/
+ *
+ * pbzero( dst, cnt)
+ * where src is a virtual address and dst is a physical address
+ */
ENTRY(pbzero)
push %ebp
@@ -208,13 +214,13 @@ ENTRY(pbzero)
cld
- # set %es to point at the flat segment
+ /* set %es to point at the flat segment */
mov $0x10, %eax
movw %ax, %es
- mov 0x8(%ebp), %edi # destination
- mov 0xc(%ebp), %ecx # count
- mov $0x0, %eax # value
+ mov 0x8(%ebp), %edi /* destination */
+ mov 0xc(%ebp), %ecx /* count */
+ mov $0x0, %eax /* value */
rep
stosb
@@ -227,11 +233,9 @@ ENTRY(pbzero)
ret
/*
-#
-# pcpy(src, dst, cnt)
-# where src is a virtual address and dst is a physical address
-#
-*/
+ * pcpy(src, dst, cnt)
+ * where src is a virtual address and dst is a physical address
+ */
ENTRY(pcpy)
push %ebp
@@ -243,13 +247,13 @@ ENTRY(pcpy)
cld
- # set %es to point at the flat segment
+ /* set %es to point at the flat segment */
mov $0x10, %eax
movw %ax, %es
- mov 0x8(%ebp), %esi # source
- mov 0xc(%ebp), %edi # destination
- mov 0x10(%ebp), %ecx # count
+ mov 0x8(%ebp), %esi /* source */
+ mov 0xc(%ebp), %edi /* destination */
+ mov 0x10(%ebp), %ecx /* count */
rep
movsb
diff --git a/sys/i386/boot/bios.S b/sys/i386/boot/bios.S
index 687ca18c7d4b..16ded4dfc7db 100644
--- a/sys/i386/boot/bios.S
+++ b/sys/i386/boot/bios.S
@@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:34:26 rpd
- * $Id$
+ * $Id: bios.S,v 1.2 1993/10/16 19:11:30 rgrimes Exp $
*/
/*
@@ -56,19 +56,19 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.text
/*
-# biosread(dev, cyl, head, sec, nsec, offset)
-# Read "nsec" sectors from disk to offset "offset" in boot segment
-# BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory
-# Call with %ah = 0x2
-# %al = number of sectors
-# %ch = cylinder
-# %cl = sector
-# %dh = head
-# %dl = drive (0x80 for hard disk, 0x0 for floppy disk)
-# %es:%bx = segment:offset of buffer
-# Return:
-# %al = 0x0 on success; err code on failure
-*/
+ * biosread(dev, cyl, head, sec, nsec, offset)
+ * Read "nsec" sectors from disk to offset "offset" in boot segment
+ * BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory
+ * Call with %ah = 0x2
+ * %al = number of sectors
+ * %ch = cylinder
+ * %cl = sector
+ * %dh = head
+ * %dl = drive (0x80 for hard disk, 0x0 for floppy disk)
+ * %es:%bx = segment:offset of buffer
+ * Return:
+ * %al = 0x0 on success; err code on failure
+ */
ENTRY(biosread)
push %ebp
@@ -81,31 +81,33 @@ ENTRY(biosread)
movb 0x10(%ebp), %dh
movw 0x0c(%ebp), %cx
- xchgb %ch, %cl # cylinder; the highest 2 bits of cyl is in %cl
+ /* cylinder; the highest 2 bits of cyl is in %cl */
+ xchgb %ch, %cl
rorb $2, %cl
movb 0x14(%ebp), %al
orb %al, %cl
- incb %cl # sector; sec starts from 1, not 0
- movb 0x8(%ebp), %dl # device
- movl 0x1c(%ebp), %ebx # offset
- # prot_to_real will set %es to BOOTSEG
+ incb %cl /* sector; sec starts from 1, not 0 */
+ movb 0x8(%ebp), %dl /* device */
+ movl 0x1c(%ebp), %ebx /* offset */
- call EXT(prot_to_real) # enter real mode
- movb $0x2, %ah # subfunction
+ /* prot_to_real will set %es to BOOTSEG */
+ call EXT(prot_to_real) /* enter real mode */
+ movb $0x2, %ah /* subfunction */
addr32
- movb 0x18(%ebp), %al # number of sectors
+ movb 0x18(%ebp), %al /* number of sectors */
sti
int $0x13
cli
- mov %eax, %ebx # save return value (actually movw %ax, %bx)
+ /* save return value (actually movw %ax, %bx) */
+ mov %eax, %ebx
data32
- call EXT(real_to_prot) # back to protected mode
+ call EXT(real_to_prot) /* back to protected mode */
xor %eax, %eax
- movb %bh, %al # return value in %ax
+ movb %bh, %al /* return value in %ax */
pop %es
pop %edx
@@ -117,13 +119,13 @@ ENTRY(biosread)
/*
-# putc(ch)
-# BIOS call "INT 10H Function 0Eh" to write character to console
-# Call with %ah = 0x0e
-# %al = character
-# %bh = page
-# %bl = foreground color ( graphics modes)
-*/
+ * putc(ch)
+ * BIOS call "INT 10H Function 0Eh" to write character to console
+ * Call with %ah = 0x0e
+ * %al = character
+ * %bh = page
+ * %bl = foreground color ( graphics modes)
+ */
ENTRY(putc)
@@ -137,11 +139,11 @@ ENTRY(putc)
call EXT(prot_to_real)
data32
- mov $0x1, %ebx # %bh=0, %bl=1 (blue)
+ mov $0x1, %ebx /* %bh=0, %bl=1 (blue) */
movb $0xe, %ah
movb %cl, %al
sti
- int $0x10 # display a byte
+ int $0x10 /* display a byte */
cli
data32
@@ -154,17 +156,17 @@ ENTRY(putc)
/*
-# getc()
-# BIOS call "INT 16H Function 00H" to read character from keyboard
-# Call with %ah = 0x0
-# Return: %ah = keyboard scan code
-# %al = ASCII character
-*/
+ * getc()
+ * BIOS call "INT 16H Function 00H" to read character from keyboard
+ * Call with %ah = 0x0
+ * Return: %ah = keyboard scan code
+ * %al = ASCII character
+ */
ENTRY(getc)
push %ebp
mov %esp, %ebp
- push %ebx # save %ebx
+ push %ebx /* save %ebx */
call EXT(prot_to_real)
@@ -173,7 +175,7 @@ ENTRY(getc)
int $0x16
cli
- movb %al, %bl # real_to_prot uses %eax
+ movb %al, %bl /* real_to_prot uses %eax */
data32
call EXT(real_to_prot)
@@ -185,24 +187,24 @@ ENTRY(getc)
pop %ebp
ret
/*
-# ischar()
-# if there is a character pending, return it; otherwise return 0
-# BIOS call "INT 16H Function 01H" to check whether a character is pending
-# Call with %ah = 0x1
-# Return:
-# If key waiting to be input:
-# %ah = keyboard scan code
-# %al = ASCII character
-# Zero flag = clear
-# else
-# Zero flag = set
-*/
+ * ischar()
+ * if there is a character pending, return it; otherwise return 0
+ * BIOS call "INT 16H Function 01H" to check whether a character is pending
+ * Call with %ah = 0x1
+ * Return:
+ * If key waiting to be input:
+ * %ah = keyboard scan code
+ * %al = ASCII character
+ * Zero flag = clear
+ * else
+ * Zero flag = set
+ */
ENTRY(ischar)
push %ebp
mov %esp, %ebp
push %ebx
- call EXT(prot_to_real) # enter real mode
+ call EXT(prot_to_real) /* enter real mode */
xor %ebx, %ebx
movb $0x1, %ah
@@ -225,11 +227,11 @@ nochar:
ret
/*
-#
-# get_diskinfo(): return a word that represents the
-# max number of sectors and heads and drives for this device
-#
-*/
+ *
+ * get_diskinfo(): return a word that represents the
+ * max number of sectors and heads and drives for this device
+ *
+ */
ENTRY(get_diskinfo)
push %ebp
@@ -239,10 +241,10 @@ ENTRY(get_diskinfo)
push %ecx
push %edx
- movb 0x8(%ebp), %dl # diskinfo(drive #)
- call EXT(prot_to_real) # enter real mode
+ movb 0x8(%ebp), %dl /* diskinfo(drive #) */
+ call EXT(prot_to_real) /* enter real mode */
- movb $0x8, %ah # ask for disk info
+ movb $0x8, %ah /* ask for disk info */
sti
int $0x13
@@ -254,27 +256,28 @@ ENTRY(get_diskinfo)
* Guess it's a 15-sector floppy. Initialize all the registers for
* documentation, although we only need head and sector counts.
*/
- subb %ah, %ah # %ax = 0
+ subb %ah, %ah /* %ax = 0 */
movb %al, %al
- movb %ah, %bh # %bh = 0
- movb $2, %bl # %bl bits 0-3 = drive type, 2 = 1.2M
- movb $79, %ch # max track
- movb $15, %cl # max sector
- movb $1, %dh # max head
- movb $1, %dl # # floppy drives installed
- # es:di = parameter table
- # carry = 0
+ movb %ah, %bh /* %bh = 0 */
+ movb $2, %bl /* %bl bits 0-3 = drive type,
+ bit 2 = 1.2M */
+ movb $79, %ch /* max track */
+ movb $15, %cl /* max sector */
+ movb $1, %dh /* max head */
+ movb $1, %dl /* # floppy drives installed */
+ /* es:di = parameter table */
+ /* carry = 0 */
ok:
data32
- call EXT(real_to_prot) # back to protected mode
+ call EXT(real_to_prot) /* back to protected mode */
xor %eax, %eax
- /*form a longword representing all this gunk*/
- movb %dh, %ah # max head
- andb $0x3f, %cl # mask of cylinder gunk
- movb %cl, %al # max sector (and # sectors)
+ /* form a longword representing all this gunk */
+ movb %dh, %ah /* max head */
+ andb $0x3f, %cl /* mask of cylinder gunk */
+ movb %cl, %al /* max sector (and # sectors) */
pop %edx
pop %ecx
@@ -284,14 +287,14 @@ ok:
ret
/*
-#
-# memsize(i) : return the memory size in KB. i == 0 for conventional memory,
-# i == 1 for extended memory
-# BIOS call "INT 12H" to get conventional memory size
-# BIOS call "INT 15H, AH=88H" to get extended memory size
-# Both have the return value in AX.
-#
-*/
+ *
+ * memsize(i) : return the memory size in KB. i == 0 for conventional memory,
+ * i == 1 for extended memory
+ * BIOS call "INT 12H" to get conventional memory size
+ * BIOS call "INT 15H, AH=88H" to get extended memory size
+ * Both have the return value in AX.
+ *
+ */
ENTRY(memsize)
push %ebp
@@ -300,7 +303,7 @@ ENTRY(memsize)
mov 8(%ebp), %ebx
- call EXT(prot_to_real) # enter real mode
+ call EXT(prot_to_real) /* enter real mode */
cmpb $0x1, %bl
data32
diff --git a/sys/i386/boot/biosboot/Makefile b/sys/i386/boot/biosboot/Makefile
index 568fec905532..0c5d1386a091 100644
--- a/sys/i386/boot/biosboot/Makefile
+++ b/sys/i386/boot/biosboot/Makefile
@@ -1,107 +1,50 @@
-#
-# Permission to use, copy, modify and distribute this software and its
-# documentation is hereby granted, provided that both the copyright
-# notice and this permission notice appear in all copies of the
-# software, derivative works or modified versions, and any portions
-# thereof, and that both notices appear in supporting documentation.
-#
-# CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
-# CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
-# ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
-#
-# Carnegie Mellon requests users of this software to return to
-#
-# Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
-# School of Computer Science
-# Carnegie Mellon University
-# Pittsburgh PA 15213-3890
-#
-# any improvements or extensions that they make and grant Carnegie Mellon
-# the rights to redistribute these changes.
-#
-# from: Mach, Revision 2.2 92/04/04 11:33:46 rpd
-# $Id: Makefile,v 1.15 1994/09/19 19:54:49 adam Exp $
+# $Id$
#
-wd0:
- dd if=boot of=biosboot count=1
- dd if=boot of=bootbios skip=1
- disklabel -B -b biosboot -s bootbios wd0
- rm biosboot bootbios
+PROG= boot
+# Order is very important on the SRCS line for this prog
+SRCS= start.S table.c boot2.S boot.c asm.S bios.S io.c disk.c sys.c
-NOPROG= noprog
-NOMAN= noman
+BINDIR= /usr/mdec
+BINMODE= 444
+CFLAGS+= -O2 -DDO_BAD144 -DBOOTWAIT=${BOOTWAIT}
+CFLAGS+= -I${.CURDIR} -I${.CURDIR}/../..
+CLEANFILES+= boot.nohdr boot.strip boot1 boot2
+DPADD= ${LIBC}
+LDFLAGS+= -N -T 0 -nostdlib
+LDADD= -lc
+LINKS= ${BINDIR}/sdboot ${BINDIR}/wdboot\
+ ${BINDIR}/sdboot ${BINDIR}/fdboot\
+ ${BINDIR}/bootsd ${BINDIR}/bootwd\
+ ${BINDIR}/bootsd ${BINDIR}/bootfd
+NOSHARED= YES
+NOMAN=
+STRIP=
# tunable timeout parameter, waiting for keypress, calibrated in mS
BOOTWAIT?= 5000
-
-CFLAGS = -O2 -DDO_BAD144 -DBOOTWAIT=${BOOTWAIT} -I${.CURDIR}
-LIBS= -lc
-INC= -I${.CURDIR}/../..
-
-# start.o should be first
-OBJS = start.o table.o boot2.o boot.o asm.o bios.o io.o disk.o sys.o
-
-.SUFFIXES: .S .c .o
-
-.c.o:
- $(CC) $(CFLAGS) $(INC) -c $<
-
-.S.o:
- $(CC) $(CFLAGS) -c $<
-
-boot: $(OBJS)
- $(LD) -Bstatic -N -T 0 -o boot $(OBJS) ${LDDESTDIR} $(LIBS)
- cp boot boot.sym
- @strip boot
- @size boot
- @sh ${.CURDIR}/rmaouthdr boot boot.tmp
- @mv -f boot.tmp boot
- @ls -l boot
-
-biosboot: boot
- dd if=boot of=biosboot count=1
-
-bootbios: boot
- dd if=boot of=bootbios skip=1
-
-${DESTDIR}/usr/mdec/bootsd: bootbios
- cp bootbios ${DESTDIR}/usr/mdec/bootsd
-
-${DESTDIR}/usr/mdec/sdboot: biosboot
- cp biosboot ${DESTDIR}/usr/mdec/sdboot
-
-${DESTDIR}/usr/mdec/bootwd: ${DESTDIR}/usr/mdec/bootsd
- rm -f ${DESTDIR}/usr/mdec/bootwd
- ln ${DESTDIR}/usr/mdec/bootsd ${DESTDIR}/usr/mdec/bootwd
-
-${DESTDIR}/usr/mdec/wdboot: ${DESTDIR}/usr/mdec/sdboot
- rm -f ${DESTDIR}/usr/mdec/wdboot
- ln ${DESTDIR}/usr/mdec/sdboot ${DESTDIR}/usr/mdec/wdboot
-
-${DESTDIR}/usr/mdec/bootfd: ${DESTDIR}/usr/mdec/bootsd
- rm -f ${DESTDIR}/usr/mdec/bootfd
- ln ${DESTDIR}/usr/mdec/bootsd ${DESTDIR}/usr/mdec/bootfd
-
-${DESTDIR}/usr/mdec/fdboot: ${DESTDIR}/usr/mdec/sdboot
- rm -f ${DESTDIR}/usr/mdec/fdboot
- ln ${DESTDIR}/usr/mdec/sdboot ${DESTDIR}/usr/mdec/fdboot
-sd: ${DESTDIR}/usr/mdec/bootsd ${DESTDIR}/usr/mdec/sdboot
-wd: ${DESTDIR}/usr/mdec/bootwd ${DESTDIR}/usr/mdec/wdboot
-fd: ${DESTDIR}/usr/mdec/bootfd ${DESTDIR}/usr/mdec/fdboot
+boot.strip: boot
+ cp -p boot boot.strip
+ strip boot.strip
+ size boot.strip
-all: biosboot bootbios
+boot.nohdr: boot.strip
+ dd if=boot.strip of=boot.nohdr ibs=32 skip=1 obs=1024b
+ ls -l boot.nohdr
-fd0:
- dd if=boot of=biosboot count=1
- dd if=boot of=bootbios skip=1
- disklabel -B -b biosboot -s bootbios fd0
- rm biosboot bootbios
+boot1: boot.nohdr
+ dd if=boot.nohdr of=boot1 bs=512 count=1
-install: wd sd fd
+boot2: boot.nohdr
+ dd if=boot.nohdr of=boot2 bs=512 skip=1
-clean:
- /bin/rm -f *.o *.d boot bootbios biosboot boot.sym
+all: boot1 boot2
+beforeinstall:
+ install ${COPY} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}\
+ boot1 ${BINDIR}/sdboot
+ install ${COPY} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}\
+ boot2 ${BINDIR}/bootsd
+
.include <bsd.prog.mk>
diff --git a/sys/i386/boot/biosboot/asm.S b/sys/i386/boot/biosboot/asm.S
index f9bf4e06fd23..2993bc992ddf 100644
--- a/sys/i386/boot/biosboot/asm.S
+++ b/sys/i386/boot/biosboot/asm.S
@@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:34:13 rpd
- * $Id: asm.S,v 1.2 1993/10/16 19:11:27 rgrimes Exp $
+ * $Id: asm.S,v 1.3 1994/08/30 01:38:02 bde Exp $
*/
@@ -63,88 +63,96 @@ CR0_PE_OFF = 0xfffffffe
.text
/*
-#
-# real_to_prot()
-# transfer from real mode to protected mode.
-*/
+ *
+ * real_to_prot()
+ * transfer from real mode to protected mode.
+ */
ENTRY(real_to_prot)
- # guarantee that interrupt is disabled when in prot mode
+ /* guarantee that interrupt is disabled when in prot mode */
cli
- # load the gdtr
+ /* load the gdtr */
addr32
data32
lgdt EXT(Gdtr)
- # set the PE bit of CR0
+ /* set the PE bit of CR0 */
mov %cr0, %eax
data32
or $CR0_PE_ON, %eax
mov %eax, %cr0
- # make intrasegment jump to flush the processor pipeline and
- # reload CS register
+ /*
+ * make intrasegment jump to flush the processor pipeline and
+ * reload CS register
+ */
data32
ljmp $0x18, $xprot
xprot:
- # we are in USE32 mode now
- # set up the protected mode segment registers : DS, SS, ES
+ /*
+ * we are in USE32 mode now
+ * set up the protected mode segment registers : DS, SS, ES
+ */
mov $0x20, %eax
movw %ax, %ds
movw %ax, %ss
movw %ax, %es
#ifdef BDE_DEBUGGER
- # load idtr so we can debug
+ /* load idtr so we can debug */
lidt EXT(Idtr_prot)
#endif
ret
/*
-#
-# prot_to_real()
-# transfer from protected mode to real mode
-#
-*/
+ *
+ * prot_to_real()
+ * transfer from protected mode to real mode
+ *
+ */
ENTRY(prot_to_real)
- # set up a dummy stack frame for the second seg change.
+ /* set up a dummy stack frame for the second seg change. */
movl _ouraddr, %eax
sarl $4, %eax
pushw %ax
- movw $xreal, %ax # gas botches pushw $xreal - extra bytes 0, 0
- pushw %ax # decode to add %al, (%eax) (%al usually 0)
+ movw $xreal, %ax /* gas botches pushw $xreal, extra bytes 0, 0 */
+ pushw %ax /* decode to add %al, (%eax) (%al usually 0) */
- # Change to use16 mode.
+ /* Change to use16 mode. */
ljmp $0x28, $x16
x16:
- # clear the PE bit of CR0
+ /* clear the PE bit of CR0 */
mov %cr0, %eax
data32
and $CR0_PE_OFF, %eax
mov %eax, %cr0
- # make intersegment jmp to flush the processor pipeline
- # using the fake stack frame set up earlier
- # and reload CS register
+ /*
+ * make intersegment jmp to flush the processor pipeline
+ * using the fake stack frame set up earlier
+ * and reload CS register
+ */
lret
xreal:
- # we are in real mode now
- # set up the real mode segment registers : DS, SS, ES
+ /*
+ * we are in real mode now
+ * set up the real mode segment registers : DS, SS, ES
+ */
movw %cs, %ax
movw %ax, %ds
movw %ax, %ss
movw %ax, %es
#ifdef BDE_DEBUGGER
- # load idtr so we can debug
+ /* load idtr so we can debug */
addr32
data32
lidt EXT(Idtr_real)
@@ -154,49 +162,47 @@ xreal:
ret
/*
-#
-# startprog(phyaddr)
-# start the program on protected mode where phyaddr is the entry point
-#
-*/
+ * startprog(phyaddr)
+ * start the program on protected mode where phyaddr is the entry point
+ */
ENTRY(startprog)
push %ebp
mov %esp, %ebp
- # get things we need into registers
- movl 0x8(%ebp), %ecx # entry offset
- movl 0x0c(%ebp), %eax # &argv
+ /* get things we need into registers */
+ movl 0x8(%ebp), %ecx /* entry offset */
+ movl 0x0c(%ebp), %eax /* &argv */
- # make a new stack at 0:0xa0000 (big segs)
+ /* make a new stack at 0:0xa0000 (big segs) */
mov $0x10, %ebx
movw %bx, %ss
movl $0xa0000, %ebx
movl %ebx, %esp
- # push some number of args onto the stack
- pushl $0 # nominally a cyl offset in the boot.
- pushl 0x8(%eax) # argv[2] = bootdev
- pushl 0x4(%eax) # argv[1] = howto
- pushl $0 # dummy 'return' address
+ /* push some number of args onto the stack */
+ pushl $0 /* was a cyl offset in the boot. */
+ pushl 0x8(%eax) /* argv[2] = bootdev */
+ pushl 0x4(%eax) /* argv[1] = howto */
+ pushl $0 /* dummy 'return' address */
- # push on our entry address
- mov $0x08, %ebx # segment
+ /* push on our entry address */
+ mov $0x08, %ebx /* segment */
pushl %ebx
pushl %ecx
- # convert over the other data segs
+ /* convert over the other data segs */
mov $0x10, %ebx
movw %bx, %ds
movw %bx, %es
- # convert the PC (and code seg)
+ /* convert the PC (and code seg) */
lret
/*
-#
-# pbzero( dst, cnt)
-# where src is a virtual address and dst is a physical address
-*/
+ *
+ * pbzero( dst, cnt)
+ * where src is a virtual address and dst is a physical address
+ */
ENTRY(pbzero)
push %ebp
@@ -208,13 +214,13 @@ ENTRY(pbzero)
cld
- # set %es to point at the flat segment
+ /* set %es to point at the flat segment */
mov $0x10, %eax
movw %ax, %es
- mov 0x8(%ebp), %edi # destination
- mov 0xc(%ebp), %ecx # count
- mov $0x0, %eax # value
+ mov 0x8(%ebp), %edi /* destination */
+ mov 0xc(%ebp), %ecx /* count */
+ mov $0x0, %eax /* value */
rep
stosb
@@ -227,11 +233,9 @@ ENTRY(pbzero)
ret
/*
-#
-# pcpy(src, dst, cnt)
-# where src is a virtual address and dst is a physical address
-#
-*/
+ * pcpy(src, dst, cnt)
+ * where src is a virtual address and dst is a physical address
+ */
ENTRY(pcpy)
push %ebp
@@ -243,13 +247,13 @@ ENTRY(pcpy)
cld
- # set %es to point at the flat segment
+ /* set %es to point at the flat segment */
mov $0x10, %eax
movw %ax, %es
- mov 0x8(%ebp), %esi # source
- mov 0xc(%ebp), %edi # destination
- mov 0x10(%ebp), %ecx # count
+ mov 0x8(%ebp), %esi /* source */
+ mov 0xc(%ebp), %edi /* destination */
+ mov 0x10(%ebp), %ecx /* count */
rep
movsb
diff --git a/sys/i386/boot/biosboot/bios.S b/sys/i386/boot/biosboot/bios.S
index 687ca18c7d4b..16ded4dfc7db 100644
--- a/sys/i386/boot/biosboot/bios.S
+++ b/sys/i386/boot/biosboot/bios.S
@@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:34:26 rpd
- * $Id$
+ * $Id: bios.S,v 1.2 1993/10/16 19:11:30 rgrimes Exp $
*/
/*
@@ -56,19 +56,19 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.text
/*
-# biosread(dev, cyl, head, sec, nsec, offset)
-# Read "nsec" sectors from disk to offset "offset" in boot segment
-# BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory
-# Call with %ah = 0x2
-# %al = number of sectors
-# %ch = cylinder
-# %cl = sector
-# %dh = head
-# %dl = drive (0x80 for hard disk, 0x0 for floppy disk)
-# %es:%bx = segment:offset of buffer
-# Return:
-# %al = 0x0 on success; err code on failure
-*/
+ * biosread(dev, cyl, head, sec, nsec, offset)
+ * Read "nsec" sectors from disk to offset "offset" in boot segment
+ * BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory
+ * Call with %ah = 0x2
+ * %al = number of sectors
+ * %ch = cylinder
+ * %cl = sector
+ * %dh = head
+ * %dl = drive (0x80 for hard disk, 0x0 for floppy disk)
+ * %es:%bx = segment:offset of buffer
+ * Return:
+ * %al = 0x0 on success; err code on failure
+ */
ENTRY(biosread)
push %ebp
@@ -81,31 +81,33 @@ ENTRY(biosread)
movb 0x10(%ebp), %dh
movw 0x0c(%ebp), %cx
- xchgb %ch, %cl # cylinder; the highest 2 bits of cyl is in %cl
+ /* cylinder; the highest 2 bits of cyl is in %cl */
+ xchgb %ch, %cl
rorb $2, %cl
movb 0x14(%ebp), %al
orb %al, %cl
- incb %cl # sector; sec starts from 1, not 0
- movb 0x8(%ebp), %dl # device
- movl 0x1c(%ebp), %ebx # offset
- # prot_to_real will set %es to BOOTSEG
+ incb %cl /* sector; sec starts from 1, not 0 */
+ movb 0x8(%ebp), %dl /* device */
+ movl 0x1c(%ebp), %ebx /* offset */
- call EXT(prot_to_real) # enter real mode
- movb $0x2, %ah # subfunction
+ /* prot_to_real will set %es to BOOTSEG */
+ call EXT(prot_to_real) /* enter real mode */
+ movb $0x2, %ah /* subfunction */
addr32
- movb 0x18(%ebp), %al # number of sectors
+ movb 0x18(%ebp), %al /* number of sectors */
sti
int $0x13
cli
- mov %eax, %ebx # save return value (actually movw %ax, %bx)
+ /* save return value (actually movw %ax, %bx) */
+ mov %eax, %ebx
data32
- call EXT(real_to_prot) # back to protected mode
+ call EXT(real_to_prot) /* back to protected mode */
xor %eax, %eax
- movb %bh, %al # return value in %ax
+ movb %bh, %al /* return value in %ax */
pop %es
pop %edx
@@ -117,13 +119,13 @@ ENTRY(biosread)
/*
-# putc(ch)
-# BIOS call "INT 10H Function 0Eh" to write character to console
-# Call with %ah = 0x0e
-# %al = character
-# %bh = page
-# %bl = foreground color ( graphics modes)
-*/
+ * putc(ch)
+ * BIOS call "INT 10H Function 0Eh" to write character to console
+ * Call with %ah = 0x0e
+ * %al = character
+ * %bh = page
+ * %bl = foreground color ( graphics modes)
+ */
ENTRY(putc)
@@ -137,11 +139,11 @@ ENTRY(putc)
call EXT(prot_to_real)
data32
- mov $0x1, %ebx # %bh=0, %bl=1 (blue)
+ mov $0x1, %ebx /* %bh=0, %bl=1 (blue) */
movb $0xe, %ah
movb %cl, %al
sti
- int $0x10 # display a byte
+ int $0x10 /* display a byte */
cli
data32
@@ -154,17 +156,17 @@ ENTRY(putc)
/*
-# getc()
-# BIOS call "INT 16H Function 00H" to read character from keyboard
-# Call with %ah = 0x0
-# Return: %ah = keyboard scan code
-# %al = ASCII character
-*/
+ * getc()
+ * BIOS call "INT 16H Function 00H" to read character from keyboard
+ * Call with %ah = 0x0
+ * Return: %ah = keyboard scan code
+ * %al = ASCII character
+ */
ENTRY(getc)
push %ebp
mov %esp, %ebp
- push %ebx # save %ebx
+ push %ebx /* save %ebx */
call EXT(prot_to_real)
@@ -173,7 +175,7 @@ ENTRY(getc)
int $0x16
cli
- movb %al, %bl # real_to_prot uses %eax
+ movb %al, %bl /* real_to_prot uses %eax */
data32
call EXT(real_to_prot)
@@ -185,24 +187,24 @@ ENTRY(getc)
pop %ebp
ret
/*
-# ischar()
-# if there is a character pending, return it; otherwise return 0
-# BIOS call "INT 16H Function 01H" to check whether a character is pending
-# Call with %ah = 0x1
-# Return:
-# If key waiting to be input:
-# %ah = keyboard scan code
-# %al = ASCII character
-# Zero flag = clear
-# else
-# Zero flag = set
-*/
+ * ischar()
+ * if there is a character pending, return it; otherwise return 0
+ * BIOS call "INT 16H Function 01H" to check whether a character is pending
+ * Call with %ah = 0x1
+ * Return:
+ * If key waiting to be input:
+ * %ah = keyboard scan code
+ * %al = ASCII character
+ * Zero flag = clear
+ * else
+ * Zero flag = set
+ */
ENTRY(ischar)
push %ebp
mov %esp, %ebp
push %ebx
- call EXT(prot_to_real) # enter real mode
+ call EXT(prot_to_real) /* enter real mode */
xor %ebx, %ebx
movb $0x1, %ah
@@ -225,11 +227,11 @@ nochar:
ret
/*
-#
-# get_diskinfo(): return a word that represents the
-# max number of sectors and heads and drives for this device
-#
-*/
+ *
+ * get_diskinfo(): return a word that represents the
+ * max number of sectors and heads and drives for this device
+ *
+ */
ENTRY(get_diskinfo)
push %ebp
@@ -239,10 +241,10 @@ ENTRY(get_diskinfo)
push %ecx
push %edx
- movb 0x8(%ebp), %dl # diskinfo(drive #)
- call EXT(prot_to_real) # enter real mode
+ movb 0x8(%ebp), %dl /* diskinfo(drive #) */
+ call EXT(prot_to_real) /* enter real mode */
- movb $0x8, %ah # ask for disk info
+ movb $0x8, %ah /* ask for disk info */
sti
int $0x13
@@ -254,27 +256,28 @@ ENTRY(get_diskinfo)
* Guess it's a 15-sector floppy. Initialize all the registers for
* documentation, although we only need head and sector counts.
*/
- subb %ah, %ah # %ax = 0
+ subb %ah, %ah /* %ax = 0 */
movb %al, %al
- movb %ah, %bh # %bh = 0
- movb $2, %bl # %bl bits 0-3 = drive type, 2 = 1.2M
- movb $79, %ch # max track
- movb $15, %cl # max sector
- movb $1, %dh # max head
- movb $1, %dl # # floppy drives installed
- # es:di = parameter table
- # carry = 0
+ movb %ah, %bh /* %bh = 0 */
+ movb $2, %bl /* %bl bits 0-3 = drive type,
+ bit 2 = 1.2M */
+ movb $79, %ch /* max track */
+ movb $15, %cl /* max sector */
+ movb $1, %dh /* max head */
+ movb $1, %dl /* # floppy drives installed */
+ /* es:di = parameter table */
+ /* carry = 0 */
ok:
data32
- call EXT(real_to_prot) # back to protected mode
+ call EXT(real_to_prot) /* back to protected mode */
xor %eax, %eax
- /*form a longword representing all this gunk*/
- movb %dh, %ah # max head
- andb $0x3f, %cl # mask of cylinder gunk
- movb %cl, %al # max sector (and # sectors)
+ /* form a longword representing all this gunk */
+ movb %dh, %ah /* max head */
+ andb $0x3f, %cl /* mask of cylinder gunk */
+ movb %cl, %al /* max sector (and # sectors) */
pop %edx
pop %ecx
@@ -284,14 +287,14 @@ ok:
ret
/*
-#
-# memsize(i) : return the memory size in KB. i == 0 for conventional memory,
-# i == 1 for extended memory
-# BIOS call "INT 12H" to get conventional memory size
-# BIOS call "INT 15H, AH=88H" to get extended memory size
-# Both have the return value in AX.
-#
-*/
+ *
+ * memsize(i) : return the memory size in KB. i == 0 for conventional memory,
+ * i == 1 for extended memory
+ * BIOS call "INT 12H" to get conventional memory size
+ * BIOS call "INT 15H, AH=88H" to get extended memory size
+ * Both have the return value in AX.
+ *
+ */
ENTRY(memsize)
push %ebp
@@ -300,7 +303,7 @@ ENTRY(memsize)
mov 8(%ebp), %ebx
- call EXT(prot_to_real) # enter real mode
+ call EXT(prot_to_real) /* enter real mode */
cmpb $0x1, %bl
data32
diff --git a/sys/i386/boot/biosboot/start.S b/sys/i386/boot/biosboot/start.S
index aa6521293d9b..7b1770147093 100644
--- a/sys/i386/boot/biosboot/start.S
+++ b/sys/i386/boot/biosboot/start.S
@@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:36:29 rpd
- * $Id: start.S,v 1.2 1993/10/16 19:11:38 rgrimes Exp $
+ * $Id: start.S,v 1.3 1994/06/13 19:27:52 jkh Exp $
*/
/*
@@ -53,37 +53,39 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.file "start.s"
-BOOTSEG = 0x9000 # boot will be loaded here (below 640K)
-BOOTSTACK = 0xe000 # boot stack
-SIGNATURE = 0xaa55
-LOADSZ = 15 # size of unix boot
-PARTSTART = 0x1be # starting address of partition table
-NUMPART = 4 # number of partitions in partition table
-PARTSZ = 16 # each partition table entry is 16 bytes
-BSDPART = 0xA5 # value of boot_ind, means bootable partition
-BOOTABLE = 0x80 # value of boot_ind, means bootable partition
+BOOTSEG= 0x9000 /* boot will be loaded here (below 640K) */
+BOOTSTACK= 0xe000 /* boot stack */
+SIGNATURE= 0xaa55
+LOADSZ= 15 /* size of unix boot */
+PARTSTART= 0x1be /* starting address of partition table */
+NUMPART= 4 /* number of partitions in partition table */
+PARTSZ= 16 /* each partition table entry is 16 bytes */
+BSDPART= 0xA5 /* value of boot_ind, means bootable partition */
+BOOTABLE= 0x80 /* value of boot_ind, means bootable partition */
.text
ENTRY(boot1)
- # start (aka boot1) is loaded at 0x0:0x7c00 but we want 0x7c0:0
- # ljmp to the next instruction to adjust %cs
+ /*
+ * start (aka boot1) is loaded at 0x0:0x7c00 but we want 0x7c0:0
+ * ljmp to the next instruction to adjust %cs
+ */
data32
ljmp $0x7c0, $start
start:
- # set up %ds
+ /* set up %ds */
mov %cs, %ax
mov %ax, %ds
- # set up %ss and %esp
+ /* set up %ss and %esp */
data32
mov $BOOTSEG, %eax
mov %ax, %ss
data32
mov $BOOTSTACK, %esp
- /*** set up %es, (where we will load boot2 to) ***/
+ /* set up %es, (where we will load boot2 to) */
mov %ax, %es
#ifdef DEBUG
@@ -93,14 +95,14 @@ start:
call message
#endif
- # bootstrap passes us drive number in %dl
+ /* bootstrap passes us drive number in %dl */
cmpb $0x80, %dl
data32
jae hd
fd:
mov $0x0, %dl
-# reset the disk system
+ /* reset the disk system */
#ifdef DEBUG
data32
mov $two, %esi
@@ -110,8 +112,8 @@ fd:
movb $0x0, %ah
int $0x13
data32
- mov $0x0001, %ecx # cyl 0, sector 1
- movb $0, %dh # head
+ mov $0x0001, %ecx /* cyl 0, sector 1 */
+ movb $0, %dh /* head */
#ifdef DEBUG
data32
mov $three, %esi
@@ -130,7 +132,7 @@ hd: /**** load sector 0 into the BOOTSEG ****/
#endif
data32
mov $0x0201, %eax
- xor %ebx, %ebx # %bx = 0
+ xor %ebx, %ebx /* %bx = 0 */
data32
mov $0x0001, %ecx
#ifdef DEBUG
@@ -146,14 +148,14 @@ hd: /**** load sector 0 into the BOOTSEG ****/
data32
jb read_error
- /***# find the first 386BSD partition *****/
+ /* find the first 386BSD partition */
data32
mov $PARTSTART, %ebx
data32
mov $NUMPART, %ecx
again:
addr32
- movb %es:4(%ebx), %al
+ movb %es:4(%ebx), %al
cmpb $BSDPART, %al
data32
je found
@@ -168,17 +170,17 @@ again:
/*
-# BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory
-# Call with %ah = 0x2
-# %al = number of sectors
-# %ch = cylinder
-# %cl = sector
-# %dh = head
-# %dl = drive (0x80 for hard disk, 0x0 for floppy disk)
-# %es:%bx = segment:offset of buffer
-# Return:
-# %al = 0x0 on success; err code on failure
-*/
+ * BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory
+ * Call with %ah = 0x2
+ * %al = number of sectors
+ * %ch = cylinder
+ * %cl = sector
+ * %dh = head
+ * %dl = drive (0x80 for hard disk, 0x0 for floppy disk)
+ * %es:%bx = segment:offset of buffer
+ * Return:
+ * %al = 0x0 on success; err code on failure
+ */
found:
addr32
@@ -194,9 +196,11 @@ load:
data32
jb read_error
- # ljmp to the second stage boot loader (boot2).
- # After ljmp, %cs is BOOTSEG and boot1 (512 bytes) will be used
- # as an internal buffer "intbuf".
+ /*
+ * ljmp to the second stage boot loader (boot2).
+ * After ljmp, %cs is BOOTSEG and boot1 (512 bytes) will be used
+ * as an internal buffer "intbuf".
+ */
#ifdef DEBUG
data32
@@ -207,10 +211,9 @@ load:
data32
ljmp $BOOTSEG, $ EXT(boot2)
-#
-# read_error
-#
-
+/*
+ * read_error
+ */
read_error:
data32
mov $eread, %esi
@@ -220,16 +223,15 @@ err_stop:
data32
jmp stop
-#
-# message: write the error message in %ds:%esi to console
-#
-
-message:
/*
- # Use BIOS "int 10H Function 0Eh" to write character in teletype mode
- # %ah = 0xe %al = character
- # %bh = page %bl = foreground color (graphics modes)
-*/
+ * message: write the error message in %ds:%esi to console
+ */
+message:
+ /*
+ * Use BIOS "int 10H Function 0Eh" to write character in teletype mode
+ * %ah = 0xe %al = character
+ * %bh = page %bl = foreground color (graphics modes)
+ */
data32
push %eax
@@ -240,12 +242,12 @@ message:
cld
nextb:
- lodsb # load a byte into %al
+ lodsb /* load a byte into %al */
cmpb $0x0, %al
data32
je done
movb $0xe, %ah
- int $0x10 # display a byte
+ int $0x10 /* display a byte */
data32
jmp nextb
done:
@@ -258,7 +260,7 @@ done:
stop: hlt
data32
- jmp stop # halt doesnt actually halt forever
+ jmp stop /* halt doesnt actually halt forever */
/* error messages */
diff --git a/sys/i386/boot/start.S b/sys/i386/boot/start.S
index aa6521293d9b..7b1770147093 100644
--- a/sys/i386/boot/start.S
+++ b/sys/i386/boot/start.S
@@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:36:29 rpd
- * $Id: start.S,v 1.2 1993/10/16 19:11:38 rgrimes Exp $
+ * $Id: start.S,v 1.3 1994/06/13 19:27:52 jkh Exp $
*/
/*
@@ -53,37 +53,39 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.file "start.s"
-BOOTSEG = 0x9000 # boot will be loaded here (below 640K)
-BOOTSTACK = 0xe000 # boot stack
-SIGNATURE = 0xaa55
-LOADSZ = 15 # size of unix boot
-PARTSTART = 0x1be # starting address of partition table
-NUMPART = 4 # number of partitions in partition table
-PARTSZ = 16 # each partition table entry is 16 bytes
-BSDPART = 0xA5 # value of boot_ind, means bootable partition
-BOOTABLE = 0x80 # value of boot_ind, means bootable partition
+BOOTSEG= 0x9000 /* boot will be loaded here (below 640K) */
+BOOTSTACK= 0xe000 /* boot stack */
+SIGNATURE= 0xaa55
+LOADSZ= 15 /* size of unix boot */
+PARTSTART= 0x1be /* starting address of partition table */
+NUMPART= 4 /* number of partitions in partition table */
+PARTSZ= 16 /* each partition table entry is 16 bytes */
+BSDPART= 0xA5 /* value of boot_ind, means bootable partition */
+BOOTABLE= 0x80 /* value of boot_ind, means bootable partition */
.text
ENTRY(boot1)
- # start (aka boot1) is loaded at 0x0:0x7c00 but we want 0x7c0:0
- # ljmp to the next instruction to adjust %cs
+ /*
+ * start (aka boot1) is loaded at 0x0:0x7c00 but we want 0x7c0:0
+ * ljmp to the next instruction to adjust %cs
+ */
data32
ljmp $0x7c0, $start
start:
- # set up %ds
+ /* set up %ds */
mov %cs, %ax
mov %ax, %ds
- # set up %ss and %esp
+ /* set up %ss and %esp */
data32
mov $BOOTSEG, %eax
mov %ax, %ss
data32
mov $BOOTSTACK, %esp
- /*** set up %es, (where we will load boot2 to) ***/
+ /* set up %es, (where we will load boot2 to) */
mov %ax, %es
#ifdef DEBUG
@@ -93,14 +95,14 @@ start:
call message
#endif
- # bootstrap passes us drive number in %dl
+ /* bootstrap passes us drive number in %dl */
cmpb $0x80, %dl
data32
jae hd
fd:
mov $0x0, %dl
-# reset the disk system
+ /* reset the disk system */
#ifdef DEBUG
data32
mov $two, %esi
@@ -110,8 +112,8 @@ fd:
movb $0x0, %ah
int $0x13
data32
- mov $0x0001, %ecx # cyl 0, sector 1
- movb $0, %dh # head
+ mov $0x0001, %ecx /* cyl 0, sector 1 */
+ movb $0, %dh /* head */
#ifdef DEBUG
data32
mov $three, %esi
@@ -130,7 +132,7 @@ hd: /**** load sector 0 into the BOOTSEG ****/
#endif
data32
mov $0x0201, %eax
- xor %ebx, %ebx # %bx = 0
+ xor %ebx, %ebx /* %bx = 0 */
data32
mov $0x0001, %ecx
#ifdef DEBUG
@@ -146,14 +148,14 @@ hd: /**** load sector 0 into the BOOTSEG ****/
data32
jb read_error
- /***# find the first 386BSD partition *****/
+ /* find the first 386BSD partition */
data32
mov $PARTSTART, %ebx
data32
mov $NUMPART, %ecx
again:
addr32
- movb %es:4(%ebx), %al
+ movb %es:4(%ebx), %al
cmpb $BSDPART, %al
data32
je found
@@ -168,17 +170,17 @@ again:
/*
-# BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory
-# Call with %ah = 0x2
-# %al = number of sectors
-# %ch = cylinder
-# %cl = sector
-# %dh = head
-# %dl = drive (0x80 for hard disk, 0x0 for floppy disk)
-# %es:%bx = segment:offset of buffer
-# Return:
-# %al = 0x0 on success; err code on failure
-*/
+ * BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory
+ * Call with %ah = 0x2
+ * %al = number of sectors
+ * %ch = cylinder
+ * %cl = sector
+ * %dh = head
+ * %dl = drive (0x80 for hard disk, 0x0 for floppy disk)
+ * %es:%bx = segment:offset of buffer
+ * Return:
+ * %al = 0x0 on success; err code on failure
+ */
found:
addr32
@@ -194,9 +196,11 @@ load:
data32
jb read_error
- # ljmp to the second stage boot loader (boot2).
- # After ljmp, %cs is BOOTSEG and boot1 (512 bytes) will be used
- # as an internal buffer "intbuf".
+ /*
+ * ljmp to the second stage boot loader (boot2).
+ * After ljmp, %cs is BOOTSEG and boot1 (512 bytes) will be used
+ * as an internal buffer "intbuf".
+ */
#ifdef DEBUG
data32
@@ -207,10 +211,9 @@ load:
data32
ljmp $BOOTSEG, $ EXT(boot2)
-#
-# read_error
-#
-
+/*
+ * read_error
+ */
read_error:
data32
mov $eread, %esi
@@ -220,16 +223,15 @@ err_stop:
data32
jmp stop
-#
-# message: write the error message in %ds:%esi to console
-#
-
-message:
/*
- # Use BIOS "int 10H Function 0Eh" to write character in teletype mode
- # %ah = 0xe %al = character
- # %bh = page %bl = foreground color (graphics modes)
-*/
+ * message: write the error message in %ds:%esi to console
+ */
+message:
+ /*
+ * Use BIOS "int 10H Function 0Eh" to write character in teletype mode
+ * %ah = 0xe %al = character
+ * %bh = page %bl = foreground color (graphics modes)
+ */
data32
push %eax
@@ -240,12 +242,12 @@ message:
cld
nextb:
- lodsb # load a byte into %al
+ lodsb /* load a byte into %al */
cmpb $0x0, %al
data32
je done
movb $0xe, %ah
- int $0x10 # display a byte
+ int $0x10 /* display a byte */
data32
jmp nextb
done:
@@ -258,7 +260,7 @@ done:
stop: hlt
data32
- jmp stop # halt doesnt actually halt forever
+ jmp stop /* halt doesnt actually halt forever */
/* error messages */