Subversion Repositories Kolibri OS

Rev

Rev 1635 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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 <organization> 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 <Lrz> ''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 <copyright holder> 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.  
  27. Спецификация на первичный загрузчик KordOS.
  28. Загрузчик должен предоставлять следующие сервисы:
  29. 1. При загрузке компьютера, получив управление от BIOS'а, загружать
  30.         файл loader из папки kord по адресу 1000:0000.
  31.         Размер файла loader не превосходит 30000h = 192 Kb.
  32. 2. При этом устанавливать следующие регистры:
  33.         ax идентифицирует устройство:
  34.         al = тип:
  35.                 'f' - флопик
  36.                 'h' - HDD
  37.                 'c' - CD/DVD
  38.                 'u' - USB флешка
  39.                 '?' - неизвестное устройство
  40.         ah = номер устройства (среди всех устройств фиксированного типа)
  41.         bx = тип файловой системы:
  42.                 '12' = FAT12
  43.                 '16' = FAT16
  44.                 '32' = FAT32
  45.                 'nt' = NTFS
  46.                 'is' = ISO-9660
  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.                 0 = успешно
  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.                 0 = успешно
  82.                 1 = файл оказался слишком большим, буфер заполнен целиком
  83.                         и есть ещё данные файла
  84.                 3 = произошла ошибка чтения
  85.                 dx:ax = размер файла
  86.         Функцию можно вызывать только в случае, когда последний вызов функции
  87.         1 и все последующие вызовы функции 2 вернули bx=1 (иными словами,
  88.         только для продолжения загрузки файла, который уже был частично
  89.         загружен, но ещё не загружен полностью).
  90. Загрузчик может быть уверен, что данные в областях памяти 0-9000 и
  91.         60000-A0000 не будут модифицированы ядром.
  92.