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 |
||
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 |
||
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 |
||
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 не будут модифицированы ядром.файл>папка2>папка1> |