Subversion Repositories Kolibri OS

Rev

Rev 1635 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1635 Rev 3555
Line 22... Line 22...
22
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
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
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.
24
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
;*****************************************************************************
25
;*****************************************************************************
Line 26... Line 26...
26
 
26
 
27
Ñïåöèôèêàöèÿ íà ïåðâè÷íûé çàãðóç÷èê KordOS.
27
Спецификация на первичный загрузчик KordOS.
28
Çàãðóç÷èê äîëæåí ïðåäîñòàâëÿòü ñëåäóþùèå ñåðâèñû:
28
Загрузчик должен предоставлять следующие сервисы:
29
1. Ïðè çàãðóçêå êîìïüþòåðà, ïîëó÷èâ óïðàâëåíèå îò BIOS'à, çàãðóæàòü
29
1. При загрузке компьютера, получив управление от BIOS'а, загружать
30
	ôàéë loader èç ïàïêè kord ïî àäðåñó 1000:0000.
30
	файл loader из папки kord по адресу 1000:0000.
31
	Ðàçìåð ôàéëà loader íå ïðåâîñõîäèò 30000h = 192 Kb.
31
	Размер файла loader не превосходит 30000h = 192 Kb.
32
2. Ïðè ýòîì óñòàíàâëèâàòü ñëåäóþùèå ðåãèñòðû:
32
2. При этом устанавливать следующие регистры:
33
	ax èäåíòèôèöèðóåò óñòðîéñòâî:
33
	ax идентифицирует устройство:
34
	al = òèï:
34
	al = тип:
35
		'f' - ôëîïèê
35
		'f' - флопик
36
		'h' - HDD
36
		'h' - HDD
37
		'c' - CD/DVD
37
		'c' - CD/DVD
38
		'u' - USB ôëåøêà
38
		'u' - USB флешка
39
		'?' - íåèçâåñòíîå óñòðîéñòâî
39
		'?' - неизвестное устройство
40
	ah = íîìåð óñòðîéñòâà (ñðåäè âñåõ óñòðîéñòâ ôèêñèðîâàííîãî òèïà)
40
	ah = номер устройства (среди всех устройств фиксированного типа)
41
	bx = òèï ôàéëîâîé ñèñòåìû:
41
	bx = тип файловой системы:
42
		'12' = FAT12
42
		'12' = FAT12
43
		'16' = FAT16
43
		'16' = FAT16
44
		'32' = FAT32
44
		'32' = FAT32
45
		'nt' = NTFS
45
		'nt' = NTFS
46
		'is' = ISO-9660
46
		'is' = ISO-9660
47
	ds:si = far-óêàçàòåëü íà callback-ñåðâèñ
47
	ds:si = far-указатель на callback-сервис
48
3. Ïðåäîñòàâëÿòü callback-ñåðâèñ äëÿ âòîðè÷íîãî çàãðóç÷èêà - far-ïðîöåäóðó:
48
3. Предоставлять callback-сервис для вторичного загрузчика - far-процедуру:
49
	íà âõîäå: ax = çàïðàøèâàåìàÿ ôóíêöèÿ
49
	на входе: ax = запрашиваемая функция
50
	íà âûõîäå: CF=1, åñëè ôóíêöèÿ íå ïîääåðæèâàåòñÿ; CF=0 èíà÷å
50
	на выходе: CF=1, если функция не поддерживается; CF=0 иначе
51
	Çàãðóç÷èê ìîæåò ðàçðóøàòü âñå ðåãèñòðû, âêëþ÷àÿ ñåãìåíòíûå,
51
	Загрузчик может разрушать все регистры, включая сегментные,
52
	çà èñêëþ÷åíèåì ss è sp.
52
	за исключением ss и sp.
53
4. Âñåãäà äîëæíà ïîääåðæèâàòüñÿ callback-ôóíêöèÿ 1:
53
4. Всегда должна поддерживаться callback-функция 1:
54
	íàçíà÷åíèå: ïðî÷èòàòü ôàéë, ðàñïîëîæåííûé íà çàãðóçî÷íîì óñòðîéñòâå
54
	назначение: прочитать файл, расположенный на загрузочном устройстве
55
	íà âõîäå: ax = 1, ds:di = óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêòóðó:
55
	на входе: ax = 1, ds:di = указатель на информационную структуру:
56
		dw:dw	far-óêàçàòåëü íà áóôåð,
56
		dw:dw	far-указатель на буфер,
57
			ïåðâîå ñëîâî - ñìåùåíèå, âòîðîå - ñåãìåíò
57
			первое слово - смещение, второе - сегмент
58
		dw	ìàêñèìàëüíîå ÷èñëî 4Kb-áëîêîâ äëÿ ÷òåíèÿ (0x1000 áàéò)
58
		dw	максимальное число 4Kb-блоков для чтения (0x1000 байт)
59
			äîëæíî áûòü íåíóëåâûì è ñòðîãî ìåíüøå 0x100
59
			должно быть ненулевым и строго меньше 0x100
60
		ASCIIZ	èìÿ ôàéëà â ôîðìàòå "<ïàïêà1>/<ïàïêà2>/<ôàéë>"
60
		ASCIIZ	имя файла в формате "<папка1>/<папка2>/<файл>"
61
	Åñëè èìÿ ôàéëà ñîäåðæèò ñèìâîëû èç ñòàðøåé ïîëîâèíû
61
	Если имя файла содержит символы из старшей половины
62
	ASCIIZ-òàáëèöû èëè íå ÿâëÿåòñÿ 8.3-èìåíåì (â ñìûñëå, îäíà èç êîìïîíåíò
62
	ASCIIZ-таблицы или не является 8.3-именем (в смысле, одна из компонент
63
	èìåíè ôàéëà èìååò èìÿ äëèííåå 8 ñèìâîëîâ èëè ðàñøèðåíèå äëèííåå 3),
63
	имени файла имеет имя длиннее 8 символов или расширение длиннее 3),
64
	çàãðóç÷èê ìîæåò íå íàéòè òàêîé ôàéë, äàæå åñëè îí åñòü
64
	загрузчик может не найти такой файл, даже если он есть
65
	(à ìîæåò è íàéòè).
65
	(а может и найти).
66
	íà âûõîäå: bx = ñòàòóñ:
66
	на выходе: bx = статус:
67
		0 = óñïåøíî
67
		0 = успешно
68
		1 = ôàéë îêàçàëñÿ ñëèøêîì áîëüøèì, áóôåð çàïîëíåí öåëèêîì
68
		1 = файл оказался слишком большим, буфер заполнен целиком
69
			è åñòü åù¸ äàííûå ôàéëà
69
			и есть ещё данные файла
70
		2 = ôàéë íå íàéäåí
70
		2 = файл не найден
71
		3 = ïðîèçîøëà îøèáêà ÷òåíèÿ
71
		3 = произошла ошибка чтения
72
		dx:ax = ðàçìåð ôàéëà èëè FFFF:FFFF, åñëè ôàéë íå íàéäåí
72
		dx:ax = размер файла или FFFF:FFFF, если файл не найден
73
5. Âñåãäà äîëæíà ïîääåðæèâàòüñÿ callback-ôóíêöèÿ 2:
73
5. Всегда должна поддерживаться callback-функция 2:
74
	íàçíà÷åíèå: ïðîäîëæèòü ÷òåíèå ôàéëà, ÷àñòè÷íî çàãðóæåííîãî ôóíêöèåé 1
74
	назначение: продолжить чтение файла, частично загруженного функцией 1
75
	íà âõîäå: ax = 2, ds:di = óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêòóðó:
75
	на входе: ax = 2, ds:di = указатель на информационную структуру:
76
		dw:dw	far-óêàçàòåëü íà áóôåð,
76
		dw:dw	far-указатель на буфер,
77
			ïåðâîå ñëîâî - ñìåùåíèå, âòîðîå - ñåãìåíò
77
			первое слово - смещение, второе - сегмент
78
		dw	ìàêñèìàëüíîå ÷èñëî 4Kb-áëîêîâ äëÿ ÷òåíèÿ (0x1000 áàéò)
78
		dw	максимальное число 4Kb-блоков для чтения (0x1000 байт)
79
			äîëæíî áûòü íåíóëåâûì è ñòðîãî ìåíüøå 0x100
79
			должно быть ненулевым и строго меньше 0x100
80
	íà âûõîäå: bx = ñòàòóñ:
80
	на выходе: bx = статус:
81
		0 = óñïåøíî
81
		0 = успешно
82
		1 = ôàéë îêàçàëñÿ ñëèøêîì áîëüøèì, áóôåð çàïîëíåí öåëèêîì
82
		1 = файл оказался слишком большим, буфер заполнен целиком
83
			è åñòü åù¸ äàííûå ôàéëà
83
			и есть ещё данные файла
84
		3 = ïðîèçîøëà îøèáêà ÷òåíèÿ
84
		3 = произошла ошибка чтения
85
		dx:ax = ðàçìåð ôàéëà
85
		dx:ax = размер файла
86
	Ôóíêöèþ ìîæíî âûçûâàòü òîëüêî â ñëó÷àå, êîãäà ïîñëåäíèé âûçîâ ôóíêöèè
86
	Функцию можно вызывать только в случае, когда последний вызов функции
87
	1 è âñå ïîñëåäóþùèå âûçîâû ôóíêöèè 2 âåðíóëè bx=1 (èíûìè ñëîâàìè,
87
	1 и все последующие вызовы функции 2 вернули bx=1 (иными словами,
88
	òîëüêî äëÿ ïðîäîëæåíèÿ çàãðóçêè ôàéëà, êîòîðûé óæå áûë ÷àñòè÷íî
88
	только для продолжения загрузки файла, который уже был частично
89
	çàãðóæåí, íî åù¸ íå çàãðóæåí ïîëíîñòüþ).
89
	загружен, но ещё не загружен полностью).
90
Çàãðóç÷èê ìîæåò áûòü óâåðåí, ÷òî äàííûå â îáëàñòÿõ ïàìÿòè 0-9000 è
90
Загрузчик может быть уверен, что данные в областях памяти 0-9000 и