diff options
author | kato <kato@FreeBSD.org> | 2000-08-02 08:46:08 +0000 |
---|---|---|
committer | kato <kato@FreeBSD.org> | 2000-08-02 08:46:08 +0000 |
commit | 719b29e2f0d5823f3e24dc32952bd58e8f13d054 (patch) | |
tree | 4ff0084a96f61ec9fa4dd8ce8182098d363bfe1a /sys/boot/pc98/boot0 | |
parent | f67558eb8f564a54d499830fe8082f8f74d3cf45 (diff) | |
download | FreeBSD-src-719b29e2f0d5823f3e24dc32952bd58e8f13d054.zip FreeBSD-src-719b29e2f0d5823f3e24dc32952bd58e8f13d054.tar.gz |
Added PC-98 HDD boot manager. The boot0 is the `IPL' which occupies
sector 0 of a disk and boot0.5 is the `boot selector' which starts
from address 0x400. The IPL loads boot0.5 and boot0.5 loads bootblock
of a slice.
The boot manager stuff was developed by me (kato) with Borland C++,
and then, translated into bcc in the ports collection by Nokubi-san.
After that, boot0 has been translated into gas with the .code16
directive by Takahashi-san (nyan) and boot0.5 has been rewritten in
gas by me.
Diffstat (limited to 'sys/boot/pc98/boot0')
-rw-r--r-- | sys/boot/pc98/boot0/Makefile | 20 | ||||
-rw-r--r-- | sys/boot/pc98/boot0/boot0.s | 108 |
2 files changed, 128 insertions, 0 deletions
diff --git a/sys/boot/pc98/boot0/Makefile b/sys/boot/pc98/boot0/Makefile new file mode 100644 index 0000000..27a2a3a --- /dev/null +++ b/sys/boot/pc98/boot0/Makefile @@ -0,0 +1,20 @@ +# $FreeBSD$ + +PROG= boot0 +OBJS= boot0.o +NOMAN= +STRIP= +BINDIR?= /boot +BINMODE= 444 + +ORG= 0x0000 + +boot0: boot0.out + objcopy -S -O binary boot0.out ${.TARGET} + +boot0.out: ${OBJS} + ${LD} -N -e start -Ttext ${ORG} -o ${.TARGET} ${OBJS} + +CLEANFILES+= boot0.out + +.include <bsd.prog.mk> 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 |