1# Copyright (c) KATO Takenori, 1999, 2000.
2#
3# All rights reserved.  Unpublished rights reserved under the copyright
4# laws of Japan.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9#
10# 1. Redistributions of source code must retain the above copyright
11#    notice, this list of conditions and the following disclaimer as
12#    the first lines of this file unmodified.
13# 2. Redistributions in binary form must reproduce the above copyright
14#    notice, this list of conditions and the following disclaimer in the
15#    documentation and/or other materials provided with the distribution.
16# 3. The name of the author may not be used to endorse or promote products
17#    derived from this software without specific prior written permission.
18#
19# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29#
30# $FreeBSD: stable/11/stand/pc98/boot0/boot0.s 64123 2000-08-02 08:46:08Z kato $
31
32	.globl start
33	.code16
34start:
35	jmp	main
36
37	.org	4
38	.ascii	"IPL1"
39	.byte	0, 0, 0
40
41	.globl start
42main:
43	xor	%ax, %ax
44	mov	%ax, %ds
45	mov	(0x584), %al		# DA/UA
46	mov	%al, %ah
47	and	$0xf0, %ah
48	cmp	$0x90, %ah
49	je	fdd
50
51	# hdd
52	mov	$6, %ah
53	mov	$0x3000, %bx
54	mov	%bx, %es
55	mov	$0x2000, %bx
56	xor	%cx, %cx
57	xor	%dx, %dx
58	xor	%bp, %bp
59	int	$0x1b
60	jc	error_hdd
61
62	push	%ax
63	mov	%es, %ax
64	add	$0x40, %ax
65	mov	%ax, %es
66	pop	%ax
67	push	%es
68	push	%bp
69	lret
70
71	# fdd
72fdd:
73	xor	%di, %di
74fdd_retry:
75	mov	$0xd6, %ah
76	mov	$0x3000, %bx
77	mov	%bx, %es
78	mov	$0x2000, %bx
79	mov	$0x0200, %cx
80	mov	$0x0001, %dx
81	xor	%bp, %bp
82	int	$0x1b
83	jc	error
84	push	%ax
85	mov	%es, %ax
86	add	$0x40, %ax
87	mov	%ax, %es
88	pop	%ax
89	push	%es
90	push	%bp
91	lret
92
93error:
94	or	%di, %di
95	jnz	error_hdd
96	and	$0x0f, %al
97	or	$0x30, %al
98	jmp	fdd_retry
99
100error_hdd:
101	jmp	error
102
103	.org	0x1fa
104	.byte	0			# defflag_off
105	.byte	0			# defpart_off
106	.byte	1			# menu version
107	.byte	0
108	.word	0xaa55
109