diff --git a/sys/arch/i386/stand/lib/biosgetsystime.S b/sys/arch/i386/stand/lib/biosgetsystime.S new file mode 100644 index 000000000000..70b9227f7694 --- /dev/null +++ b/sys/arch/i386/stand/lib/biosgetsystime.S @@ -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 + +/* 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 diff --git a/sys/arch/i386/stand/lib/dump_eax.S b/sys/arch/i386/stand/lib/dump_eax.S new file mode 100644 index 000000000000..df62b8a5222f --- /dev/null +++ b/sys/arch/i386/stand/lib/dump_eax.S @@ -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 + +/* 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 diff --git a/sys/arch/i386/stand/lib/message.S b/sys/arch/i386/stand/lib/message.S new file mode 100644 index 000000000000..b1e27149a1dc --- /dev/null +++ b/sys/arch/i386/stand/lib/message.S @@ -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 + +/* + * 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 diff --git a/sys/arch/i386/stand/lib/putstr.S b/sys/arch/i386/stand/lib/putstr.S new file mode 100644 index 000000000000..78e7563c5f4d --- /dev/null +++ b/sys/arch/i386/stand/lib/putstr.S @@ -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 + +/* + * 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 diff --git a/sys/arch/i386/stand/lib/pvcopy.S b/sys/arch/i386/stand/lib/pvcopy.S new file mode 100644 index 000000000000..30eba84b6873 --- /dev/null +++ b/sys/arch/i386/stand/lib/pvcopy.S @@ -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 + +/* + * 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