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 и |