Module Name: src
Committed By: dsl
Date: Sat Nov 21 11:52:57 UTC 2009
Modified Files:
src/sys/arch/i386/stand/lib: bios_disk.S biosmemps2.S dos_file.S
Log Message:
Preserve %ds over bios calls.
Not strickly necessary because real_to_prot doesn't normally rely on in.
However it caused much confusion while debugging, and does no harm.
To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/i386/stand/lib/bios_disk.S
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/i386/stand/lib/biosmemps2.S
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/i386/stand/lib/dos_file.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/i386/stand/lib/bios_disk.S
diff -u src/sys/arch/i386/stand/lib/bios_disk.S:1.18 src/sys/arch/i386/stand/lib/bios_disk.S:1.19
--- src/sys/arch/i386/stand/lib/bios_disk.S:1.18 Sun Dec 11 12:17:48 2005
+++ src/sys/arch/i386/stand/lib/bios_disk.S Sat Nov 21 11:52:57 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: bios_disk.S,v 1.18 2005/12/11 12:17:48 christos Exp $ */
+/* $NetBSD: bios_disk.S,v 1.19 2009/11/21 11:52:57 dsl Exp $ */
/*
* Ported to boot 386BSD by Julian Elischer ([email protected]) Sept 1992
@@ -287,6 +287,7 @@
call _C_LABEL(prot_to_real) # enter real mode
.code16
+ push %ds
movl %esi, %eax
shrl $4, %eax
movw %ds, %bx
@@ -298,6 +299,7 @@
int $0x13
setc %bl
movb %ah, %bh # save error code
+ pop %ds
calll _C_LABEL(real_to_prot) # back to protected mode
.code32
@@ -328,6 +330,7 @@
call _C_LABEL(prot_to_real) # enter real mode
.code16
+ push %ds
movl %esi, %eax
shrl $4, %eax
andw $0xf, %si
@@ -338,6 +341,7 @@
movb $0x48, %ah # subfunction
int $0x13
setc %bl
+ pop %ds
calll _C_LABEL(real_to_prot) # back to protected mode
.code32
Index: src/sys/arch/i386/stand/lib/biosmemps2.S
diff -u src/sys/arch/i386/stand/lib/biosmemps2.S:1.3 src/sys/arch/i386/stand/lib/biosmemps2.S:1.4
--- src/sys/arch/i386/stand/lib/biosmemps2.S:1.3 Mon Apr 28 20:23:25 2008
+++ src/sys/arch/i386/stand/lib/biosmemps2.S Sat Nov 21 11:52:57 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: biosmemps2.S,v 1.3 2008/04/28 20:23:25 martin Exp $ */
+/* $NetBSD: biosmemps2.S,v 1.4 2009/11/21 11:52:57 dsl Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -70,6 +70,7 @@
getmem:
# move the parameter to right register
+ push %ds
movl %edx, %esi
andl $0xf, %esi
shrl $4, %edx
@@ -81,6 +82,7 @@
movb $0xc7, %ah
int $0x15
setc %bl # save carry
+ pop %ds
out:
calll _C_LABEL(real_to_prot)
Index: src/sys/arch/i386/stand/lib/dos_file.S
diff -u src/sys/arch/i386/stand/lib/dos_file.S:1.5 src/sys/arch/i386/stand/lib/dos_file.S:1.6
--- src/sys/arch/i386/stand/lib/dos_file.S:1.5 Sat Feb 1 14:48:18 2003
+++ src/sys/arch/i386/stand/lib/dos_file.S Sat Nov 21 11:52:57 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: dos_file.S,v 1.5 2003/02/01 14:48:18 dsl Exp $ */
+/* $NetBSD: dos_file.S,v 1.6 2009/11/21 11:52:57 dsl Exp $ */
/* extracted from Tor Egge's patches for NetBSD boot */
@@ -29,6 +29,7 @@
call _C_LABEL(prot_to_real) # enter real mode
.code16
+ push %ds
movl %edx, %eax
shrl $4, %eax
mov %ds, %si
@@ -42,6 +43,7 @@
sti
int $0x21
cli
+ pop %ds
jnc ok1
mov %ax, _C_LABEL(doserrno)
@@ -80,6 +82,7 @@
call _C_LABEL(prot_to_real) # enter real mode
.code16
+ push %ds
movl %edx, %eax
shrl $4, %eax
mov %ds, %si
@@ -92,6 +95,7 @@
sti
int $0x21
cli
+ pop %ds
jnc ok2
mov %ax, _C_LABEL(doserrno)