Subversion Repositories Kolibri OS

Rev

Rev 1065 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1065 Lrz 1
; Copyright (c) 2008-2009, diamond
2
; All rights reserved.
3
;
4
; Redistribution and use in source and binary forms, with or without
5
; modification, are permitted provided that the following conditions are met:
6
;       * Redistributions of source code must retain the above copyright
7
;       notice, this list of conditions and the following disclaimer.
8
;       * Redistributions in binary form must reproduce the above copyright
9
;       notice, this list of conditions and the following disclaimer in the
10
;       documentation and/or other materials provided with the distribution.
11
;       * Neither the name of the  nor the
12
;       names of its contributors may be used to endorse or promote products
13
;       derived from this software without specific prior written permission.
14
;
15
; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka  ''AS IS'' AND ANY
16
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
; DISCLAIMED. IN NO EVENT SHALL  BE LIABLE FOR ANY
19
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
;*****************************************************************************
26
 
3539 clevermous 27
Спецификация на первичный загрузчик KordOS.
28
Загрузчик должен предоставлять следующие сервисы:
29
1. При загрузке компьютера, получив управление от BIOS'а, загружать
30
	файл loader из папки kord по адресу 1000:0000.
31
	Размер файла loader не превосходит 30000h = 192 Kb.
32
2. При этом устанавливать следующие регистры:
33
	ax идентифицирует устройство:
34
	al = тип:
35
		'f' - флопик
1065 Lrz 36
		'h' - HDD
37
		'c' - CD/DVD
3539 clevermous 38
		'u' - USB флешка
39
		'?' - неизвестное устройство
40
	ah = номер устройства (среди всех устройств фиксированного типа)
41
	bx = тип файловой системы:
1065 Lrz 42
		'12' = FAT12
43
		'16' = FAT16
44
		'32' = FAT32
45
		'nt' = NTFS
46
		'is' = ISO-9660
3539 clevermous 47
	ds:si = far-указатель на callback-сервис
48
3. Предоставлять callback-сервис для вторичного загрузчика - far-процедуру:
49
	на входе: ax = запрашиваемая функция
50
	на выходе: CF=1, если функция не поддерживается; CF=0 иначе
51
	Загрузчик может разрушать все регистры, включая сегментные,
52
	за исключением ss и sp.
53
4. Всегда должна поддерживаться callback-функция 1:
54
	назначение: прочитать файл, расположенный на загрузочном устройстве
55
	на входе: ax = 1, ds:di = указатель на информационную структуру:
56
		dw:dw	far-указатель на буфер,
57
			первое слово - смещение, второе - сегмент
58
		dw	максимальное число 4Kb-блоков для чтения (0x1000 байт)
59
			должно быть ненулевым и строго меньше 0x100
60
		ASCIIZ	имя файла в формате "<папка1>/<папка2>/<файл>"
61
	Если имя файла содержит символы из старшей половины
62
	ASCIIZ-таблицы или не является 8.3-именем (в смысле, одна из компонент
63
	имени файла имеет имя длиннее 8 символов или расширение длиннее 3),
64
	загрузчик может не найти такой файл, даже если он есть
65
	(а может и найти).
66
	на выходе: bx = статус:
67
 
68
		1 = файл оказался слишком большим, буфер заполнен целиком
69
			и есть ещё данные файла
70
		2 = файл не найден
71
		3 = произошла ошибка чтения
72
		dx:ax = размер файла или FFFF:FFFF, если файл не найден
73
5. Всегда должна поддерживаться callback-функция 2:
74
	назначение: продолжить чтение файла, частично загруженного функцией 1
75
	на входе: ax = 2, ds:di = указатель на информационную структуру:
76
		dw:dw	far-указатель на буфер,
77
			первое слово - смещение, второе - сегмент
78
		dw	максимальное число 4Kb-блоков для чтения (0x1000 байт)
79
			должно быть ненулевым и строго меньше 0x100
80
	на выходе: bx = статус:
81
 
82
		1 = файл оказался слишком большим, буфер заполнен целиком
83
			и есть ещё данные файла
84
		3 = произошла ошибка чтения
85
		dx:ax = размер файла
86
	Функцию можно вызывать только в случае, когда последний вызов функции
87
	1 и все последующие вызовы функции 2 вернули bx=1 (иными словами,
88
	только для продолжения загрузки файла, который уже был частично
89
	загружен, но ещё не загружен полностью).
90
Загрузчик может быть уверен, что данные в областях памяти 0-9000 и
91
	60000-A0000 не будут модифицированы ядром.