Subversion Repositories HelenOS

Rev

Rev 448 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 jermar 1
#
2
# Copyright (C) 2001-2004 Jakub Jermar
3
# All rights reserved.
4
#
5
# Redistribution and use in source and binary forms, with or without
6
# modification, are permitted provided that the following conditions
7
# are met:
8
#
9
# - Redistributions of source code must retain the above copyright
10
#   notice, this list of conditions and the following disclaimer.
11
# - Redistributions in binary form must reproduce the above copyright
12
#   notice, this list of conditions and the following disclaimer in the
13
#   documentation and/or other materials provided with the distribution.
14
# - The name of the author may not be used to endorse or promote products
15
#   derived from this software without specific prior written permission.
16
#
17
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
#
28
 
29
# This is a very primitive boot.s
30
 
31
# It assumes that the first sector of the kernel image is found
32
# on head 0, track 0, sector 2 of the first floppy drive (1440K).
33
# Next kernel sectors follow on disk sector 3, 4, ...
34
#
35
 
36
 
18 jermar 37
# KERNEL_SIZE is passed from the outside to the preprocessor
38
#if (KERNEL_SIZE%512>0)
39
#define TAIL		1
40
#else
41
#define	TAIL		0
42
#endif
43
 
44
#define SECTORS		(KERNEL_SIZE/512+TAIL)
45
 
1 jermar 46
.text
47
.global _start_0x7c00
48
 
49
.code16
50
_start_0x7c00:
51
	xorw %ax,%ax		# reset, %al will be used below
52
	movw %ax,%dx		# fd0, %dh and %dl will be used below
125 jermar 53
	movw %dx,%ds
1 jermar 54
 
18 jermar 55
	movw %dx,%ss		# initialize stack
56
	movw $stack,%sp
57
 
58
	int $0x13		# reset floppy
1 jermar 59
	jc stop_trying
60
 
125 jermar 61
	movw %dx,%ds
18 jermar 62
	movw %dx,%ss
63
	movw $0x7c00,%sp
64
	movw $0xffe0,%si	# after next increment, %si will become 0x0000
65
	movw %si,%es
66
	movw $0x8000,%bx	# at %es:%bx
1 jermar 67
 
18 jermar 68
	movl $(SECTORS),%edi
1 jermar 69
 
70
read_next:
71
	test %edi,%edi
72
	jnz read_sectors
73
 
74
	movb $12,%al
75
	movw $0x3f2,%dx
76
	outb %al,%dx
77
 
18 jermar 78
	movb $('$'),%al
1 jermar 79
	call echo_mark
80
 
81
	jmpl $0,$0x8000
82
 
83
read_sectors:
18 jermar 84
	movb $('.'),%al	
1 jermar 85
	call echo_mark
86
 
87
	decl %edi
88
	incw logical_sector
89
	movw %es,%si
90
	addw $0x20,%si
91
	movw %si,%es
92
 
93
	movw logical_sector,%ax
94
	divb sectors
125 jermar 95
 
1 jermar 96
	movb %ah,%cl
125 jermar 97
	incb %cl			# sector
98
 
1 jermar 99
	movb %al,%ch
100
	shrb $1,%ch			# track
125 jermar 101
 
1 jermar 102
	movb %al,%dh
103
	andb $1,%dh			# head
104
 
105
	movw $0x0201,%ax
106
	int $0x13
107
	jnc read_next
108
 
18 jermar 109
	movb $('R'),%al
1 jermar 110
	call echo_mark
111
 
112
	xorw %ax,%ax			# try to reset
113
	movw %ax,%dx			# fd0
114
	int $0x13
115
	jnc read_next
116
 
117
stop_trying:
18 jermar 118
	movb $('F'),%al	
1 jermar 119
	call echo_mark
120
 
121
	cli
122
	hlt
123
 
124
CH=4
125
echo_mark:
126
	push %bp
127
	movw %sp,%bp
128
	pusha
125 jermar 129
 
1 jermar 130
	movb $0xe,%ah
131
	movb $7,%bl
132
	int $0x10
125 jermar 133
 
1 jermar 134
	popa
135
	pop %bp
136
	ret
137
 
138
# current logical sector from the beginning of the disk
139
logical_sector:
18 jermar 140
	.word 0
1 jermar 141
 
142
# number of sectors per track on 1440 floppy
143
sectors:
144
	.byte 18
145
 
146
# boot floppy signature
147
.org 0x1fe
148
boot_floppy_signature:
149
	.byte 0x55
150
	.byte 0xaa
18 jermar 151
stack: