diff options
Diffstat (limited to 'sys/boot/pc98/boot0/boot0.s')
-rw-r--r-- | sys/boot/pc98/boot0/boot0.s | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/sys/boot/pc98/boot0/boot0.s b/sys/boot/pc98/boot0/boot0.s new file mode 100644 index 0000000..508e252 --- /dev/null +++ b/sys/boot/pc98/boot0/boot0.s @@ -0,0 +1,108 @@ +# Copyright (c) KATO Takenori, 1999, 2000. +# +# All rights reserved. Unpublished rights reserved under the copyright +# laws of Japan. +# +# 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 as +# the first lines of this file unmodified. +# 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. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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. +# +# $FreeBSD$ + + .globl start + .code16 +start: + jmp main + + .org 4 + .ascii "IPL1" + .byte 0, 0, 0 + + .globl start +main: + xor %ax, %ax + mov %ax, %ds + mov (0x584), %al # DA/UA + mov %al, %ah + and $0xf0, %ah + cmp $0x90, %ah + je fdd + + # hdd + mov $6, %ah + mov $0x3000, %bx + mov %bx, %es + mov $0x2000, %bx + xor %cx, %cx + xor %dx, %dx + xor %bp, %bp + int $0x1b + jc error_hdd + + push %ax + mov %es, %ax + add $0x40, %ax + mov %ax, %es + pop %ax + push %es + push %bp + lret + + # fdd +fdd: + xor %di, %di +fdd_retry: + mov $0xd6, %ah + mov $0x3000, %bx + mov %bx, %es + mov $0x2000, %bx + mov $0x0200, %cx + mov $0x0001, %dx + xor %bp, %bp + int $0x1b + jc error + push %ax + mov %es, %ax + add $0x40, %ax + mov %ax, %es + pop %ax + push %es + push %bp + lret + +error: + or %di, %di + jnz error_hdd + and $0x0f, %al + or $0x30, %al + jmp fdd_retry + +error_hdd: + jmp error + + .org 0x1fa + .byte 0 # defflag_off + .byte 0 # defpart_off + .byte 1 # menu version + .byte 0 + .word 0xaa55 |