Synchronize with following changes:

>  Revision  Changes    Path
>  1.11      +127 -1    src/sys/i386/boot/biosboot/bios.S
>  1.20      +6 -2      src/sys/i386/boot/biosboot/boot.h
>  1.24      +32 -5     src/sys/i386/boot/biosboot/io.c
This commit is contained in:
KATO Takenori 1997-07-13 12:13:02 +00:00
parent 11523cf5fb
commit 604526fa72
3 changed files with 164 additions and 7 deletions

View File

@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:34:26 rpd
* $Id: bios.S,v 1.6 1997/02/22 09:43:05 peter Exp $
* $Id: bios.S,v 1.7 1997/05/18 12:28:38 kato Exp $
*/
/*
@ -51,6 +51,39 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/*
* Ported to PC-9801 by Yoshio Kimura
*/
/*
* Extensions for El Torito CD-ROM booting:
*
* Copyright © 1997 Pluto Technologies International, Inc. Boulder CO
* Copyright © 1997 interface business GmbH, Dresden.
* All rights reserved.
*
* This code has been written by Jörg Wunsch, Dresden.
* Direct comments to <joerg_wunsch@interface-business.de>.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
.file "bios.s"
@ -58,6 +91,8 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "asm.h"
.text
#ifndef CDBOOT
/*
* biosread(dev, cyl, head, sec, nsec, offset)
* Read "nsec" sectors from disk to offset "offset" in boot segment
@ -135,6 +170,97 @@ ENTRY(biosread)
ret
#else /* CDBOOT */
/*
* int
* getbootspec(struct specpacket *offset)
*
* Read CD-ROM boot specification packet to "offset".
*/
ENTRY(getbootspec)
push %ebp
mov %esp, %ebp
push %esi
push %ebx
movw 0x8(%ebp), %si
mov $0x7f, %edx
/* prot_to_real will set %es to BOOTSEG */
call EXT(prot_to_real) /* enter real mode */
movw $0x4b01, %ax /* (do not) terminate disk emulation */
movb $0x7f, %dl /* any drive */
sti
int $0x13
cli
/* save return value (actually movw %ax, %bx) */
mov %eax, %ebx
data32
call EXT(real_to_prot) /* back to protected mode */
xor %eax, %eax
movb %bh, %al /* return value in %ax */
pop %ebx
pop %esi
pop %ebp
ret
/*
* int
* biosreadlba(struct daddrpacket *daddr)
* Read sectors using the BIOS "read extended" function
* BIOS call "INT 0x13 Function 0x42" to read sectors from disk into memory
* Call with %ah = 0x42
* %dl = drive (0x0 for floppy disk, or emulated CD)
* %ds:%si = ptr to disk address packet
* Return:
* %ah = 0x0 on success; err code on failure
*/
ENTRY(biosreadlba)
push %ebp
mov %esp, %ebp
push %ebx
push %esi
movw 8(%ebp), %si
movl $0, %edx /* emulated CD is always drive 0 */
/* prot_to_real will set %es to BOOTSEG */
call EXT(prot_to_real) /* enter real mode */
movw $0x4200, %ax /* subfunction */
movb $0, %dl
sti
int $0x13
cli
/* save return value (actually movw %ax, %bx) */
mov %eax, %ebx
data32
call EXT(real_to_prot) /* back to protected mode */
xor %eax, %eax
movb %bh, %al /* return value in %ax */
pop %esi
pop %ebx
pop %ebp
ret
#endif /* !CDBOOT */
/*
* getc()

View File

@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:35:03 rpd
* $Id: boot.h,v 1.9 1997/05/28 09:22:59 kato Exp $
* $Id: boot.h,v 1.10 1997/06/09 13:44:04 kato Exp $
*/
#include <sys/param.h>
@ -81,8 +81,12 @@ void printf(const char *format, ...);
void putchar(int c);
void delay1ms(void);
int gets(char *buf);
#ifndef CDBOOT
int strcmp(const char *s1, const char *s2);
void bcopy(const char *from, char *to, int len);
#else /* CDBOOT */
int strncasecmp(const char *s1, const char *s2, size_t s);
#endif /* !CDBOOT */
void bcopy(const void *from, void *to, size_t len);
void twiddle(void);
#ifdef PC98
void machine_check(void);

View File

@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, Revision 2.2 92/04/04 11:35:57 rpd
* $Id: io.c,v 1.10 1997/05/28 09:22:59 kato Exp $
* $Id: io.c,v 1.11 1997/06/09 13:44:04 kato Exp $
*/
#include "boot.h"
@ -257,6 +257,8 @@ gets(char *buf)
return 0;
}
#ifndef CDBOOT
int
strcmp(const char *s1, const char *s2)
{
@ -268,11 +270,36 @@ strcmp(const char *s1, const char *s2)
return 1;
}
void
bcopy(const char *from, char *to, int len)
#else /* CDBOOT */
int
strncasecmp(const char *s1, const char *s2, size_t s)
{
/*
* We only consider ASCII chars and don't anticipate
* control characters (they are invalid in filenames
* anyway).
*/
while (s > 0 && (*s1 & 0x5f) == (*s2 & 0x5f)) {
if (!*s1++)
return 0;
s2++;
}
if (s == 0)
return 0;
return 1;
}
#endif /* !CDBOOT */
void
bcopy(const void *from, void *to, size_t len)
{
char *fp = (char *)from;
char *tp = (char *)to;
while (len-- > 0)
*to++ = *from++;
*tp++ = *fp++;
}
/* To quote Ken: "You are not expected to understand this." :) */