summaryrefslogtreecommitdiffstats
path: root/sys/boot/i386/boot0
diff options
context:
space:
mode:
authorrnordier <rnordier@FreeBSD.org>1998-10-19 19:13:53 +0000
committerrnordier <rnordier@FreeBSD.org>1998-10-19 19:13:53 +0000
commit59abe72c15ca058ae7f370015b5804af0d2eab23 (patch)
tree2a0febd1d5ba4e7a00eafe99e7c2affdf4b72db6 /sys/boot/i386/boot0
parent5805a01b44ba4922820b163463bb090fcc83cc76 (diff)
downloadFreeBSD-src-59abe72c15ca058ae7f370015b5804af0d2eab23.zip
FreeBSD-src-59abe72c15ca058ae7f370015b5804af0d2eab23.tar.gz
Make configurable (a) whether to use int 0x13 extensions; (b) timeout
value. Ignore failure to update mbr sector. Disable interrupts while using extended registers. Default to F1 not F2.
Diffstat (limited to 'sys/boot/i386/boot0')
-rw-r--r--sys/boot/i386/boot0/Makefile9
-rw-r--r--sys/boot/i386/boot0/boot0.m43
-rw-r--r--sys/boot/i386/boot0/boot0.s30
3 files changed, 25 insertions, 17 deletions
diff --git a/sys/boot/i386/boot0/Makefile b/sys/boot/i386/boot0/Makefile
index d9790a4..4e890da 100644
--- a/sys/boot/i386/boot0/Makefile
+++ b/sys/boot/i386/boot0/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.4 1998/10/13 18:29:18 rnordier Exp $
+# $Id: Makefile,v 1.5 1998/10/17 14:20:25 rnordier Exp $
PROG= boot0
NOMAN=
@@ -8,6 +8,9 @@ BINMODE= 444
M4?= m4
+B0FLAGS=0x0
+B0TICKS=0xb6
+
ORG= 0x600
boot0: boot0.o
@@ -20,8 +23,8 @@ boot0: boot0.o
.endif
boot0.o: boot0.m4 boot0.s
- (cd ${.CURDIR}; ${M4} boot0.m4 boot0.s) | \
- ${AS} ${AFLAGS} -o ${.TARGET}
+ (cd ${.CURDIR}; ${M4} -DFLAGS=${B0FLAGS} -DTICKS=${B0TICKS} \
+ boot0.m4 boot0.s) | ${AS} ${AFLAGS} -o ${.TARGET}
CLEANFILES+= boot0.out boot0.o
diff --git a/sys/boot/i386/boot0/boot0.m4 b/sys/boot/i386/boot0/boot0.m4
index c0a38b7..b5fdaa6 100644
--- a/sys/boot/i386/boot0/boot0.m4
+++ b/sys/boot/i386/boot0/boot0.m4
@@ -13,7 +13,7 @@
# purpose.
#
-# $Id:$
+# $Id: boot0.m4,v 1.1.1.1 1998/10/05 10:08:37 rnordier Exp $
define(_al,0x0)dnl
define(_cl,0x1)dnl
@@ -73,4 +73,5 @@ define(movwir,`.byte 0xb8 | $2; .word $1')dnl
define(movbi0,`.byte 0xc6; .byte $2; .byte $1')dnl
define(callwi,`.byte 0xe8; .word $1 - . - 0x2')dnl
define(jmpnwi,`.byte 0xe9; .word $1 - . - 0x2')dnl
+define(tstbim,`.byte 0xf6; .byte 0x6; .word $2; .byte $1')dnl
define(incb1,`.byte 0xfe; .byte 0x40 | $2; .byte $1')dnl
diff --git a/sys/boot/i386/boot0/boot0.s b/sys/boot/i386/boot0/boot0.s
index ae7fa5d..7bba626 100644
--- a/sys/boot/i386/boot0/boot0.s
+++ b/sys/boot/i386/boot0/boot0.s
@@ -13,7 +13,7 @@
# purpose.
#
-# $Id: boot0.s,v 1.2 1998/10/09 17:19:51 rnordier Exp $
+# $Id: boot0.s,v 1.3 1998/10/10 14:03:03 rnordier Exp $
# A 512-byte boot manager.
@@ -119,7 +119,6 @@ main.10: cwtl # Option
movwir(0x301,_ax) # Write sector
callwi(intx13) # to disk
popl %esi # Restore
- jc main.5 # If error
main.11: movwir(LOAD,_bx) # Address for read
movwir(0x201,_ax) # Read sector
callwi(intx13) # from disk
@@ -158,10 +157,21 @@ putchr: pushl %ebx # Save
# Disk I/O
-intx13: movb1r(0x1,_si_,_dh) # Load head
+intx13: cli # Disable interrupts
+ movb1r(0x1,_si_,_dh) # Load head
movw1r(0x2,_si_,_cx) # Load cylinder:sector
o16 # Load
movw1r(0x8,_si_,_di) # offset
+ movwir(break,_si) # Packet pointer
+ movbi0(0x10,_si_) # Packet size
+ movbr1(_al,0x2,_si_) # Block count
+ movwr1(_bx,0x4,_si_) # Transfer
+ movws1(_es,0x6,_si_) # buffer
+ o16 # LBA
+ movwr1(_di,0x8,_si_) # address
+ sti # Enable interrupts
+ tstbim(0x80,flags) # Try for extensions?
+ jz intx13.2 # No
pushl %ecx # Save
pushl %ebx # caller's
movwir(0x55aa,_bx) # Magic
@@ -179,13 +189,6 @@ intx13.1: popl %ebx # Restore
popl %ecx # caller's
testb $0x40,%ah # Use EDD?
jz intx13.2 # No
- movwir(break,_si) # Packet pointer
- movbi0(0x10,_si_) # Packet size
- movbr1(_al,0x2,_si_) # Block count
- movwr1(_bx,0x4,_si_) # Transfer
- movws1(_es,0x6,_si_) # buffer
- o16 # LBA
- movwr1(_di,0x8,_si_) # address
xorb %al,%al # Verify off
intx13.2: int $0x13 # BIOS: Disk I/O
ret # To caller
@@ -221,10 +224,11 @@ os_linux: .ascii "Linu"; .byte 'x'|0x80
os_freebsd: .ascii "Free"
os_bsd: .ascii "BS"; .byte 'D'|0x80
- .org PRT_OFF-0x3,0x90
+ .org PRT_OFF-0x4,0x90
-opt: .byte 0x1 # Option
-ticks: .word 0xb6 # Delay
+opt: .byte 0x0 # Option
+flags: .byte FLAGS # Flags
+ticks: .word TICKS # Delay
partbl: .fill 0x40,0x1,0x0 # Partition table
.word 0xaa55 # Magic number
OpenPOWER on IntegriCloud