additional support routines for boot code

This commit is contained in:
dsl 2003-04-16 13:24:09 +00:00
parent 8e37d38a09
commit 4cf0478777
5 changed files with 429 additions and 0 deletions

View File

@ -0,0 +1,71 @@
/* $NetBSD: biosgetsystime.S,v 1.1 2003/04/16 13:24:09 dsl Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by David Laight.
*
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
#include <machine/asm.h>
/* Return system time (~18.2Hz ticks since midnight) */
ENTRY(biosgetsystime)
pushl %ebp
movl %esp, %ebp
pushl %ebx
pushl %ecx
pushl %edx
push %esi
push %edi
call _C_LABEL(prot_to_real) # enter real mode
.code16
movb $0, %ah
int $0x1a
calll _C_LABEL(real_to_prot) # back to protected mode
.code32
mov %ecx, %eax
shl $16, %eax
movw %dx, %ax
pop %edi
pop %esi
popl %edx
popl %ecx
popl %ebx
popl %ebp
ret

View File

@ -0,0 +1,70 @@
/* $NetBSD: dump_eax.S,v 1.1 2003/04/16 13:24:09 dsl Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by David Laight.
*
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
#include <machine/asm.h>
/* This is useful for debugging - although you may need to
* delete some code to fit it in.
* %ds:dump_eax_buff must be somewhere it is safe to write 10 bytes.
*/
ENTRY(dump_eax)
.code16
pusha /* saves bottom 16 bits only! */
push %es /* allow for %es != %ds */
push %ds
pop %es
movw $dump_eax_buff, %si
mov %si, %di
movw $8, %cx
1: roll $4, %eax
push %ax
andb $0x0f, %al
addb $0x30, %al /* 30..3f - clear AF */
#if 1 /* 5 bytes to generate real hex... */
daa /* 30..39, 40..45 */
addb $0xc0, %al /* f0..f9, 00..05 */
adcb $0x40, %al /* 30..39, 41..45 */
#endif
stosb
pop %ax
loop 1b
movw $0x20, %ax /* space + null */
stosw
pop %es
jmp message_1

View File

@ -0,0 +1,75 @@
/* $NetBSD: message.S,v 1.1 2003/04/16 13:24:09 dsl Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by David Laight.
*
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
#include <machine/asm.h>
/*
* message: write the error message in %ds:%esi to the console
*/
ENTRY(message)
/*
* BIOS call "INT 10H Function 0Eh" to write character to console
* Call with %ah = 0x0e
* %al = character
* %bh = page
* %bl = foreground color
*/
.code16
pusha
ENTRY(message_1) /* for dump_eax */
1:
cld
lodsb
testb %al, %al
jz 2f
movb $0x0e, %ah
movw $0x0001, %bx
int $0x10
jmp 1b
2:
#ifdef MESSAGE_PAUSE
/* Delay for about 1 second to allow message to be read */
movb $0x86, %ah
mov $16, %cx /* about a second */
int $0x15 /* delay cx:dx usecs */
#endif
popa
ret

View File

@ -0,0 +1,91 @@
/* $NetBSD: putstr.S,v 1.1 2003/04/16 13:24:10 dsl Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by David Laight.
*
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
#include <machine/asm.h>
/*
* Diagnostic print routines callable from 32bit C code during early
* parts of the boot process.
*/
/*
* void putstr(const char *)
*
* display message on console
* bugs: message address must be less than 64k
*/
.globl _C_LABEL(putstr)
_C_LABEL(putstr):
.code32
movl 4(%esp), %eax
pusha
movl %eax, %esi
call _C_LABEL(prot_to_real)
.code16
movl %esi, %eax
call message
calll _C_LABEL(real_to_prot)
.code32
popa
ret
/*
* void putint(int)
*
* display value on console as 8 hex digits followed by a space
*/
.globl _C_LABEL(putint)
_C_LABEL(putint):
.code32
movl 4(%esp), %eax
pusha
call _C_LABEL(prot_to_real)
.code16
call dump_eax
calll _C_LABEL(real_to_prot)
.code32
popa
ret

View File

@ -0,0 +1,122 @@
/* $NetBSD: pvcopy.S,v 1.1 2003/04/16 13:24:10 dsl Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by David Laight.
*
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
#include <machine/asm.h>
/*
* Routines to copy to/from absolute virtual addresses.
* Needed because the boot code runs with %ds having a 64k offset
* whereas Unix runs with a zero offset.
*
* These routines are optimised for code space, not execution speed.
*/
/*
* pbzero(void *dst, int cnt)
* zero absolute virtual memory
*/
ENTRY(pbzero)
.code32
push %edi
push %es
mov 12(%esp),%edi
mov 16(%esp),%ecx
mov $flatdataseg, %ax /* selector with offset == 0 */
mov %ax, %es
xor %eax,%eax
cld
rep
stosb
pop %es
pop %edi
ret
/*
* vpbcopy(const void *src, void *dst, int cnt)
* Copy to absolute virtual address
*/
ENTRY(vpbcopy)
.code32
push %esi
push %edi
push %es
mov 16(%esp),%esi
mov 20(%esp),%edi
mov 24(%esp),%ecx
mov $flatdataseg, %ax /* selector with offset == 0 */
mov %ax, %es
xor %eax,%eax
cld
rep
movsb
popl %es
popl %edi
popl %esi
ret
/*
* pvbcopy(const void *src, void *dst, int cnt)
* Copy from absolute virtual address
*/
ENTRY(pvbcopy)
.code32
push %esi
push %edi
push %ds
mov 16(%esp),%esi
mov 20(%esp),%edi
mov 24(%esp),%ecx
mov $flatdataseg, %ax /* selector with offset == 0 */
mov %ax, %ds
xor %eax,%eax
cld
rep
movsb
popl %ds
popl %edi
popl %esi
ret