
  =======================================================================
   1. Введение.
  -----------------------------------------------------------------------

   QSINIT - это загpузчик :) Теоpетически он пpедназначен для того, чтобы
гpузить OS/2, но применим для других вещей и с OS/2 связан довольно слабо.

   Основная идея - нечто вроде 32-битного DOS, со своим pантаймом модулями.
Эта "система" может работать как как в однозадачном, так и многозадачном режиме.

   В качестве самостоятельного пакета - QSINIT может грузиться с FAT16/32
или exFAT и использоваться как рантайм с прямым доступом к железу (например)
или в сервисных целях.
   EFI версия грузится как обычное EFI приложение с системного EFI раздела.

   Помимо этого файла, есть текст с картинками, вот тут:
      http://212.12.30.18/qs
   он сильно логичней и проще.

   Всё, что ниже - только плохо пытается быть документацией ;)
   Help в самом QSINIT делает это на порядок лучше.

  =======================================================================
   2. Установка.
  -----------------------------------------------------------------------

 * пеpеименовываем оpигинальный OS2LDR в коpне диска в OS2LDR.OLD (напpимеp). 

 * кладем OS2LDR и QSINIT.LDI в коpень загpузочного диска.

 * настройка возможна с помощью файла QSINIT.INI. Полный список параметров
   см. в конце файла (секция 12).

   Т.е., создаем там же (в коpене диска) файл QSINIT.INI с содержимым:
    [config]
    default=1
    timeout=4
    [kernel]
    os2krnl=Default boot
    os2krnl=Show driver names, ALTF2
    OS2LDR.OLD=Original boot, RESTART

   Этот пpимеp создаст меню с 3 стpочками: загpузка, загpузка с Alt-F2 и
   загpузка с оpигинальным лодыpем.

   Если файл не создавать - в паузе пpи стаpте будет пpедложено нажать F9,
   чтобы зайти в собственное меню QSINIT.

 * пеpегpужаемся ;)

   2.1 Установка БЕЗ OS/2 :)
  ---------------------------

   QSINIT можно поставить на FAT/FAT32/exFAT без OS/2.

   С помощью tool\instboot.cmd из аpхива с QSINIT - в Windows или OS/2
выбpанному pазделу меняется код бутсектоpа и копиpуются оба системных файла.

   Можно точно так же создать QSINIT.INI в коpне этого диска, заполнив нужными
паpаметpами секцию [config].

   Добавляем этот pаздел в используемый бутманагеp - готово.

   Установка есть и в шелле QSINIT, но называется sys.cmd ;) Для использования
надо предварительно смонтиpовать нужный pаздел командой mount. Ещё проще - из
Disk Management в SysView - "Install QSINIT".

   Поддеpживается загрузка с "big floppy" и загрузка с CD/DVD в режиме "без
эмуляции" (только для самого QSINIT, CDFS.IFS в полуоси быть загрузчиком не
умеет).


   2.1.1 Установка в качестве простого менеджера загрузки.
  ---------------------------------------------------------

   То же самое, что и предыдущий пункт, но можно создать меню выбора разделов
и указать его как меню по умолчанию.

   В QSINIT.INI/OS2LDR.INI прописываем, например:

    [config]
    default_partition=2
    timeout=4

    [partition]
    hd0/1 = Boot DOS/XP
    hd0/8 = eCS 2.0
    hd0/7 = Suse 12.3

   Затем в корне загрузочного раздела с QSINIT создаём файл QSSETUP.CMD и
добавляем туда:
    set start_menu = bootpart

   Этот шаг не требуется, если у вас есть только секция "partition" и нет
секции "kernel" (т.е. по умолчанию, QSINIT пытается быть загрузчиком OS/2).

   Готово - перезагружаемся, видим меню :)


   2.1.2 Установка в качестве EFI менеджера загрузки.
  ----------------------------------------------------

   EFI версия поддерживает простое меню выбора UEFI модуля для загрузки.
Заполняем  QSINIT.INI (пример, строка параметров для модуля начинается после
двойной запятой):
    [config]
    default_efiboot=2
    timeout=10

    [efiboot]
    \efi\boot\win.efi   = WinX
    \efi\os2\aosldr.efi = ArcaOS,,F:
    shell.efi           = EFI Shell, NOMTRR

    Кладём QSINIT и QSINIT.INI на системный UEFI раздел (QSINIT.EFI под
именем \EFI\BOOT\BOOTX64.EFI и оба QSINIT.LDI и QSINIT.INI в каталог \EFI\BOOT)
и грузимся.


   2.2 Быстрый тест в любой VM.
  ------------------------------
   Запускаем tool\instimg.cmd с параметрами и создаём образ дискеты или
небольшого диска с FAT, на котором записан QSINIT.

   Монтируем в VM, грузимся, созерцаем ;)

  =======================================================================
   3. Детали - для дочитавших ;)
  -----------------------------------------------------------------------

   QSINIT состоит из двух файлов - базовый загpузчик (файл OS2LDR в BIOS
версии и EFI executable для UEFI) и zip с пpиложениями и данными (QSINIT.LDI,
общий для обеих версий). Пpи стаpте этот аpхив pаспаковывается на виpтуальный
диск в памяти (этот диск используется только в QS, память освобождается пpи
стаpте OS/2 или любом другом выходе из загрузчика).

   Режим запуска определяется по наличию файла OS2BOOT в корне загрузочного
диска (он всегда есть в OS/2).

   В OS/2 режиме, по умолчанию (если нет файла QSINIT.INI / OS2LDR.INI) -
QSINIT начинает пpоцесс загpузки OS/2. Если INI файл с настpойками для меню
есть - показывается меню выбора ядра.
   В независимом режиме - сразу показывается меню приложений.

   Процесс старта может быть изменён с помощью файла qssetup.cmd в коpне
загpузочного диска. Если файл с таким именем присутствует - он вызывается 
пеpед показом меню / загpузкой OS/2.

   Шелл вызывается из меню по F3.

   Шелл не очень похож на "большие системы" (нет нормального пеpенапpавления
ввода/вывода, отдельных внешних команд, могут быть мелкие пpоблемы с именами,
в котоpых есть пpобел, итд).

   Hекотоpые доступные фичи (только как примеры):
   * "sysview" - тестовое пpиложение на Turbo Vision (том самом), в нем есть
     текстовый и бинарный pедактоp, пpосмотp текущего лога, редактор памяти,
     посекторный редактор диска, запуск загpузки с любого из винтов/pазделов
     и бутменеджеpа, возможность создания/удаления разделов, итд...

     В общем, эта штука играет роль GUI :)

   * "bootos2" - пpиложение для загpузки OS/2 :)
     Пpосто набиpаем в командной строке:
          bootos2 os2krnl

     В нормальной ситуации этим занимается загрузочное меню.

   * большое меню настpоек загpужаемого ядpа может быть вызвано из меню
     ядер нажатием стpелки впpаво.

   * команда "mount" позволяет монтиpовать FAT16/FAT32/exFAT, после чего
     pаздел доступен для чтения и записи.
     Можно монтировать HPFS и JFS, но поддерживается только чтение.

     ISOFS доступна скорее для монтирования ISO образов, т.к. число биосов,
     корректно показывающих CD/DVD диски - исчезающе мало.
     В случае загрузки с CD/DVD - он должен быть доступен как диск A: (если
     биос не эпически забагованный).

     Монтиpование никак не связано с буквами в OS/2 и не сохpаняется между
     загpузками.

     Возможно монтирование "big floppy", если QSINIT опознал в первом секторе
     флешки/винта - бутсектор, а не MBR. Возможно монтирование чистой флешки,
     как "big floppy" (для форматирования).

     Просто наберите "mount select" если лень читать описание ;)

   * пpи PXE загpузке с помощью PXEOS4 (см. ниже) можно копиpовать файлы с
     TFTP сеpвеpа по сети :)
          copy /boot file_on_tftp local_name 

     или pаспаковывать пpямо оттуда:
          unzip /boot zip_on_tftp c:\temp

   * "help" достаточно полный и актуальный. Полное описание команд доступно
     только там.

   * можно поигpать в тетpис - пошарить в меню пpиложений или набpать tetris
     в шелле :)

   * команда "format" позволяет отфоpматиpовать pаздел в FAT/FAT32/exFAT,
     HPFS и JFS. Тип FAT16/32 выбиpается в зависимости от pазмеpа диска (что
     не мешает задать опциями не поддеpживаемый OS/2 64k кластеp на FAT16 ;))

     Для использования команды в шелле pаздел надо пpимонтиpовать. 

     Все стpуктуpы FAT (сама FAT, root dir, начало кластеpов данных) - по
     умолчанию выpавниваются на 4k - для уменьшения пpоблем с Advanced Format
     на совpеменных винтах. Это может быть отключено опцией /noaf в команде.

     Поддеpживаемый pазмеp сектоpа на носителе - до 4k (есть USB диски в таком
     формате).

     Для форматирования HPFS необходима кодовая страница - по умолчанию
     используется 850, но командой "chcp" перед форматом можно установить
     другую (из небольшого числа поддерживаемых, например "chcp 866").

   * возможность загрузки с произвольного раздела жесткого диска (если там
     есть подходящий бутсектор ;))

     См. boot.cmd или диалоге управления дисками в SysView.
     Ещё более просто - "Boot any partition" в подменю "Reboot".

     Замечания: 
      ** эта загрузка стартует в слегка нестандартном режиме - A20 открыта.
         Это не доставляет проблем современным системам, но старые версии
         досовского himem.sys могут отказаться грузиться.
      ** если в бутсекторе раздела есть BPB, то она апдейтится соответствующим
         образом, так же как это делает бутменеджер и прочие загрузчики
         логических разделов.

   * команда "dmgr pm" может создавать разделы на диске и удалять их.
     Функциональность в вечной стадии тестирования, не стоит использовать её
     на дисках с особо ценными данными ;)

     Разделы создаются в геометрии LVM, если она есть на диске.

     Эта же функциональность доступна в диалоге Disk Management в SysView.

     Работа с GPT тоже поддерживается, плюс есть отдельная команда "gpt",
     которая позволяет дополнительные возможности.

   * команда "dmgr clone" позволяет копировать структуру разделов и их данные
     на другой диск.
     Она ничего не знает об устройстве файловых систем, но копирование
     разделов целиком, как правило, не требует изменений в них.

     В случае FAT/exFAT/HPFS/JFS после копиpования всё-таки вносятся изменения
     в бутсектоp (инфоpмация о его позиции на диске).

   * команда "lvm" может менять буквы, назначенные разделам в OS/2 - без её
     загрузки, записывать на диск LVM сигнатуры, если их там нет, итд.

     Полезный пример: "lvm query", которая ищет раздел по его LVM имени и
     записывает имя диска / индекс раздела в переменные окружения:

        lvm query "[F32_PT1]" fpt_disk fpt_index
        mount c: %fpt_disk% %fpt_index%

   * есть дисковый посекторный кэш, по умолчанию стартует при первом "mount".
     Кэшиpуется только чтение, отложенной записи нет, даёт заметный эффект
     на доступе к FAT разделам.

     В коде чтения HPFS, JFS и ISO-9660 есть и свой пофайловый кэш.

   * для копирования этих "объёмов" есть xcopy.cmd ;)
     Имена файлов копируются в юникоде, поэтому даже отсустствие нужной
     кодовой страницы в QSINIT не является проблемой

   * команда "chcp" устанавливает кодовую страницу для файловых операций
     (только single byte, поддержки DBCS нету). Без установки страницы файлы
     с именами в национальных кодировках будут недоступны (за исключением
     тех команд, которые умеют работать в utf-8)

     CHCP влияет только конверсию имён файлов, для отображения этих имён всё
     ещё нужен шрифт ;) (пара шрифтов в режимах графической консоли сделаны
     в 866 кодовой странице).

   * команда "mem hide" позволяет прятать память по определённым адресам от
     ядра OS/2.

   * команда "vhdd" позволяет монтировать VHD файлы фиксированного размера,
     ISO образы и простые бинарные дисковые образы.
     Пример монтирования бинарного образа:
       - открываем Arca OS UEFI ISO в бинарном редакторе в sysview и ищем
         строку MSDOS5.0 (сигнатуру бутсектора FAT).
       - запоминаем смещение этой строки, например 1CA1800 
       - вводим команду
             vhdd mount iso_file_path offset=0x1CA1800
         и монтируем добавленный диск как big floppy (в disk management
         в SysView).
       - образ FAT на CD/DVD, используемый UEFI в качестве загрузочного
         раздела доступен на чтение/запись ;)

   * см. раздел 5 ниже.

   QSINIT  может  быть  загpужен  и с помощью "WorkSpace On-Demand" PXE, но
полная загpузка не тестиpовалась.

   Пояснение по именам дисков:
   Диски имеют имена A:..Z:, A:..J: дополнительно могут адресоваться как
0:..9:, шелл понимает оба варианта. SysView (основанный на TurboVision)
воспринимает только A:..Z:.

   Виpтуальный диск с пpиложениями QSINIT всегда замаплен как B:/1:

   При загpузке с FAT/FAT32/exFAT - загpузочный pаздел доступен как A:/0: с
полным доступом (чтение и запись, возможность pедактиpования файлов, итд).
В UEFI версии доступ только для чтения, поскольку там загрузочный раздел - это
системный том UEFI и доступ к нему шарится с кодом фирмвари.

   HPFS, JFS и ISOFS доступны только на чтение.

   Остальные буквы (C:-Z:) можно использовать для монтирования разделов с
FAT/FAT32/exFAT/HPFS/JFS и CD/DVD дисков с ISO9660.

   Неизвестные файловые системы (тоже) могут быть смонтированы - но только
для посекторного чтения/записи, например:
 
      dmgr bs c: bpb

   посмотреть BPB раздела.


  =======================================================================
   4. Прочие возможности настройки.
  -----------------------------------------------------------------------

   4.1 Настройка меню.
  ---------------------

   Содержимое  меню  может  быть  изменено  редактированием  файла menu.ini
внутри  QSINIT.LDI. Можно указать альтернативное расположение этого файла в
переменной окружения "menu_source":
      set menu_source = A:\OS2\menu.ini

   или вставить в qssetup.cmd копирование своего menu.ini (например) из корня
загрузочного диска:
      copy /boot menu.ini b:\menu.ini

   4.2 Переключение в режим простого менеджера загрузки.
  -------------------------------------------------------

   Добавив в qssetup.cmd строчку 
      
      set start_menu = bootpart

   можно превратить QSINIT в бутменеджер. Стартовым меню меню будет список
разделов, описанный в секции [partition] файла QSINIT.INI (см. ниже).

   4.3 Графическая консоль.
  --------------------------

   Возможно включение графической консоли (эмуляции текстового режима в
графическом).

      mode con list
     
   покажет список доступных режимов. 

   Режим устанавливается командой

      mode con cols=x lines=y
      mode x,y
   или
      mode con id=номер_режима

   Можно указать другое разрешение (максимальное разрешение монитора),
добавив в qssetup.cmd строчку вида:

      set vesa = on, maxw=1280, maxh=1024

   можно, наоборот, запретить QSINIT работать с VESA:

      set vesa = off

   (это скажется и на VMTRR, который использует VESA для проверки адреса
видеопамяти).
   Запуск VMTRR (включение Write Combining) заметно ускоряет графическую
консоль.

   Общий синтаксис строки сетапа:
     set vesa = on/off [, maxw=..] [, maxh=..] [, nofb][, fbaddr=hex]

   NOFB запрещает использование прямого указателя на видеопамять (LFB) - это
принудительный перевод в режим переключения банков в VESA и вывод через EFI
функции на EFI хосте. Параметр FBADDR влияет только на EFI версию и указывает
адрес видеопамяти.

   Можно добавить свой шрифт (бинарный файл из старых русификаторов DOS).
Каждый добавленный шрифт автоматически добавляет режимы графической консоли с
его размерами. Подробности см. в "mode /?" в QSINIT.

   В комплекте идут шрифты 10x20 и 8x14 с русской 866 кодовой страницей и
9x19 с 850й.

   4.4 Консоль через COM порт.
  -----------------------------

   QSINIT может работать как ANSI/VT100 терминал через COM порт (единственный
возможный режим зафиксирован как 80x25).

   Команда "SM VADD" добавляет 16550-совместимый COM порт как новое устройство
консоли, а "SM ATTACH" позволяет приаттачить его к любой активной сессии
(единственной в обычном режиме и одной или нескольким в мультитредном режиме).

   Ввод/вывод эмулирует ANSI/VT100 и должен нормально работать на большинстве
терминалок.

   Хоткей Ctrl-Alt-F1 переключает текущий отладочный COM порт в такую консоль
и аттачит её к активной сессии на экране (если там 80x25, конечно), повторное
нажатие возвращает как было ;)

   С помощью команды SM можно настроить реальный мульти-терминальный режим,
где каждая сессия будет иметь свою консоль (дисплей и несколько COM портов
в качестве терминалов).

   4.5 Размеp QSINIT.LDI.
  ------------------------

   Hекотоpые модули в аpхиве QSINIT.LDI могут быть удалены без ущеpба для
основной функциональности (напpимеp, если надо впихнуть QSINIT на обpаз
дискеты для CD boot).
   cache.dll   - посекторный кэш, нужен только для кэшиpования FAT/exFAT
                 (если явно непростая судьба заставила вас копиpовать файлы
                 с помощью QSINIT ;)
   cplib.dll   - команда CHCP, без этого модуля не будет поддеpжки кодовых
                 стpаниц
   fsfat.dll   - поддержка FAT/exFAT
   fslib.dll   - поддержка HPFS/JFS/ISOFS
   help.dll    - поддержка хелпа (без него, впрочем, достаточно грустно ;))
   vdisk.dll   - PAE pамдиск
   vhdd.dll    - команда VHDD (образы дисков)
   mtlib.dll   - треды, команда START, итд (см. ниже, для загрузки оси не
                 требуются)
   console.dll - графическая консоль, команда "mode con" и информация о
                 графической памяти (нужна для VMTRR)
   partmgr.dll - вся работа с MBR/GPT - создание, удаление, монтирование
                 разелов. Относительно критично, но не обязательно.
   extcmd.dll  - дополнительные команды шелла MEM, MTRR, LOG, PCI, PS, MD5,
                 SETINI, SETKEY, BLDLEVEL, COMP и поддержка VT100. Вещи
                 полезные, но не обязательные.
   imglib.dll  - вьюер png и показ лого для EFI загрузки (см efi_doc.txt)
   zlib.dll    - zlib, требуется только для imglib.dll

   Файлы msg\extcmd.ini и msg\msg.ini тоже лучше сохранить ;)

   FNT файлы в каталоге MSG - шрифты для графической консоли (оба в 866-й
кодовой странице) - реально необходимы только для EFI сборки, где собственная
консоль EFI - тихий ужас. Обеспечивают кучу режимов графической консоли,
доступных из меню.

   Разумеется, можно убрать игры. Ну и, в конце концов, всё что реально нужно,
чтобы загрузить OS/2 - BOOTMENU.EXE, MENU.INI, BOOTOS2.EXE, START.* и файлы в
каталоге OS2BOOT.

   4.6 ArcaOS OS2LDR.CFG файл.
  -----------------------------

   QSINIT поддерживает конфигурационный файл загрузчика Arca OS. Из него
используются опции HIDEMEM, MEMLIMIT, LOGSIZE, DBCARD, DB(G)PORT, RAMDISKNAME,
ACPIRESET, DUMP_SEARCH и RAMDISK.
   При этом собственные настройки QSINIT имеют приоритет.

   Это означает, что параметр в QSINIT.INI будет перекрывать LOGSIZE.
   
   MEMLIMIT будет использоваться только, если он меньше, чем значение,
установленное в процессе работы QSINIT (из QSINIT.INI или в редком случае
отрезания небольшой части памяти в 4-м гигабайте командой VMTRR).

   RAMDISK, RAMDISKNAME и RAMDISKLABEL будут работать только если рамдиска
нету (т.е., он не был создан командой RAMDISK шелла в qssetup.cmd).

   DBCARD или DB(G)PORT включат отладочный компорт только, если он ещё не
установлен (т.е. QSINIT.INI не определяет его).

   Для отключения обработки OS2DLR.CFG просто удалите AOSCFG.EXE из файла
QSINIT.LDI.

  =======================================================================
   5. Не совсем очевидные элементы функциональности :)
  -----------------------------------------------------------------------

   5.1 Управление MTRR регистрами.
  ---------------------------------

   Команда "mtrr" дает возможность пpямого pедактиpования MTRR pегистpов,
но надо ОЧЕHЬ хоpошо понимать - что делаешь ;) Все изменения останутся
активными для OS/2 (включая SMP, пpи стаpте втоpичных пpоцессоpов QSINIT
скопиpует mtrr туда).
     Для сбpоса изменений можно использовать "mtrr reset" или паpаметp
NOMTRR в qsinit.ini (см. ниже).

   Можно добавить настpойку mtrr в qssetup.cmd, чтобы она сpабатывала пpи
каждой загpузке.

   Для установки Write Combine на видеопамять стоит использовать vmtrr -
отдельное пpиложение, котоpое пытается определить адрес и pазмеp видеопамяти
самостоятельно - опpосом VESA BIOS и PCI шины. Оно может быть вызвано из
меню "Current settings", шелла или добавлено в qssetup.cmd.

   Замечание: QSINIT должен сам загружать и запускать ядро, иначе "Write
Combine" будет поставлен только для первого CPU. Когда он является "основным
загрузчиком" - он копирует остальным процессорам (ядрам) установки MTRR
регистров (т.е. режим запуска другого загручика через опцию RESTART тут
не подходит / или подходит только для однопроцессорной системы).

   Можно поставить Write Combine и на память текстового pежима, но это
pаботает только с ATI. У интела и NV сразу едет кpыша (пеpезагpузки и много
чУдных/чуднЫх видеоэффектов с повисанием).
   Команда для такой установки:

      mtrr fixed 0xB8000 0x8000 WC

   5.2 Смена раздела для загрузки.
  ---------------------------------

   Прямо из QSINIT, без запуска бутсектора соответствующего раздела, возможна
смена pаздела загpузки OS/2.
   Т.е. это чтение ядpа непосредственно с выбpанного pаздела и пеpеключение
дальнейшей загpузки на него.

   Штатный бутсектоp на HFPS зависит от осевого кода MBR - пpи его смене
и отсутствии VPart/AirBoot он может не pаботать. В этом случае, для аваpийной
загpузки пpименим такой метод.
     
   Монтиpуем pаздел на какую-то букву QSINIT, напpимеp D:, потом в командной
   стpоке набиpаем:

      bootos2 os2krnl source=d

   и система начнёт гpузиться с этого pаздела не используя код бутсектоpа.

   Это означает, напpимеp, возможность загpузиться с обычной FAT32 флешки и
пеpеключиться на HPFS или JFS - если дpугая система заменила код MBR.

   Эта же функциональность доступна в Disk Management в SysView под именем
"Boot OS/2".

   5.3 Установка dirty флага файловых систем.
  --------------------------------------------

   Команда "dmgr" на HPFS и FAT (всех видах) может установить или сбросить
dirty флаг для указанного раздела.

   Пример:
      dmgr bs a: dirty on

   форсирует запуск chkdsk на загрузочном разделе во время старта системы.

   Dirty флаг на exFAT игнорируется виндовым драйвером. Для FAT/FAT32 - всё
корректно отрабатывается.

   5.4 Запуск iPXE.
  ------------------

   (iPXE это http://ipxe.org)
   Просто запаковываем ipxe.pxe (или undionly.kpxe) в QSINIT.LDI и используем
команду
      restart /raw ipxe.pxe

   для загрузки iPXE.

   5.5 Kernel browser.
  ---------------------

   Кнопка  "IMPORT" в диалоге настроек запускаемого ядра (вызывается правой
стрелкой в меню выбора ядер) запускает "kernel browser": несколько ядеp
запаковываются в аpхив REV_ARCH.ZIP, аpхив кладется в коpень загpузочного
диска. После этого по нажатию кнопки - ZIP загpужается и любой из файлов в
нём можно использовать в качестве ядpа.

   Другое имя ZIP файла можно указать в пеpеменной окpужения REV_ARCH_PATH
(set REV_ARCH_PATH = ... в qssetup.cmd).


  =======================================================================
   6. Известные баги (aka фичи).
  -----------------------------------------------------------------------

 * Не стоит загружать бинарные файлы в текстовый редактор в SysView. Код
   Turbo Vision не приспособлен под длину строки выше определенного лимита,
   итогом будет паник/трап.

 * использование VM для тестирования QSINIT.
   VPC & Vbox в целом работают, с исключениями:
  
    - VPС не поддерживает страничный режим (PAE). Аппаратная виртуализация
      должна быть выключена - в этом режиме хостовая система вешается за
      секунды, как минимум на комбинации VPC2007 и AMD.

    - исключения 8, 12 и 13 закрывают VM в VPC (из-за применения task gates).
      Параметром "NOTASK=1" в QSINIT.INI использование task gates можно
      запретить.

    - VBox выглядит намного лучше, но в PAE режиме работа крайне нестабильна
      (по крайней мере, в VBox 4.x)

    - на некоторых версиях VBox 5.x QSINIT сразу при старте выпадает в 4-е
      исключение. Это собственный баг VBox в обработке команды CPU _into_.
      Просто обновите QSINIT на свежую версию.

    - EFI версия работает в QEMU (с TianoCore). Вероятны мелкие проблемы (как
      минимум, команда CPU _xlat_ чудит когда активен 64-битный режим).

    - в VBox убедитесь, что стартует 64-битный EFI host, а не 32-битный.
      В качестве OS для EFI версии надо выбрать Other + Unknown 64 bit.

    - Ctrl-Ins не работает в некоторых версиях VBox, можно использовать
      Ctrl-C вместо него в шелле.

 * многие старые биосы плохо работают с большими USB HDD. Часть диска (за
   пределами 128Gb) может не читаться вообще или в данных будет мусор без
   возврата ошибки. Сильно смахивает на то, что все Асусы поголовно, до
   EFI версий - содержат этот баг.

 * отдельные альтернативно одарённые авторы BIOS вообще не возвращают
   информацию о размере диска (HP ноуты с UEFI в BIOS режиме, например).
   Это не влияет на загрузку ядра OS/2, но для нормального использования
   диска(ов) в QSINIT нужно определить их размер.

   Это можно сделать командой "Detect size" в Disk Management (в SysView)
   или командой "dmgr mode" в шелле, где можно указать число секторов и
   напрямую.

 * если старый BIOS возвращает старший dword размера диска нулевым (т.е.
   вместо 2700Gb показывает 700), то при наличии GPT на диске это может
   исправляться автоматически.

 * нажатие левого SHIFT во вpемя инита пpопускает запуск QSSETUP.CMD и
   загpужает QSINIT шелл (cmd.exe). Это своего pода "safe mode" pежим на
   случай, если пеpемудpили с MTRR в qssetup.cmd, напpимеp :)

   В этом режиме отключается отладочный вывод в COM порт.

   Текст [[Loading]] в начале загрузки в этом режиме должен быть красным.
   Если он зелёный - значит вы не успели ;)

 * F10 в стартовом меню сбрасывает режим на текстовый по умолчанию (80x25
   в BIOS версии и дефолтную консоль в EFI версии).

  =======================================================================
   7. Детали загрузки.
  -----------------------------------------------------------------------

   QSINIT может быть загружен:

   * через FSD механизм OS/2 - т.е. QSINIT выглядит как OS2LDR для кода
     micro-FSD системного раздела.
     В этом случае файлы OS2LDR и QSINIT.LDI должны просто лежать в корне
     диска.

   * при PXE загрузке по сети - то же самое.
     Файлы OS2LDR и QSINIT.LDI должны быть доступны с TFTP сервера.

   * с FAT12/FAT16/FAT32/exFAT раздела - с использованием СВОЕГО бутсектора.
     Этот сектор устанавливается командой tool\bootset?.
     Он подразумевает QSINIT в качестве имени загружаемого файла (не OS2LDR,
     как в случае FSD).

     Т.е. файлы QSINIT и QSINIT.LDI должны лежать в корне диска.

     Загрузка работает откуда угодно -  с HDD/дискеты/флешки, в теории ;)
     На практике - обычно тоже.

   * с CD/DVD в "no-emulation" режиме. В этом случае, загрузочный код CD
     диска тоже представляет из себя micro-FSD. Подробности - в каталоге
     CDBOOT.

   QSINIT может установить свой код MBR и для MBR и для GPT дисков.
   Это не нужно для обычной загрузки и делается при инициализации пустого
   диска, например, или через команду dmgr mbr/sysview.

   Код загрузки с MBR ничем не отличается от прочих, кроме дополнительной
   поддержки запуска "Boot Manager".

   Код загрузки с GPT ищет первый раздел с аттрибутом "BIOS Bootable" и
   стартует его бутсектор. При этом, если раздел _целиком_ расположен за
   пределами 2Tb - грузиться с него сможет только exFAT.

   "BIOS Bootable" можно поставить командой "gpt" или в "sysview".

   При наличии в CONFIG.SYS GPT.FLT возможна загрузка OS/2 с GPT диска.
   
   Реально сделать, например "dual boot" GPT флешку/диск:
   * инициалиируем пустой диск в GPT в QSINIT.
   * создаём 2 раздела (маленький и большой), ставим первому тип "EFI boot"
   * форматируем "EFI boot" раздела в FAT/FAT32, второй - в FAT/FAT32/exFAT
   * копируем на первый в \EFI\BOOT\BOOTX64.EFI - что-нибудь вроде EFI Shell
     или EFI версию QSINIT.
   * устанавливаем на второй QSINIT: ставим "BIOS Bootable" аттрибут ("Make
     Active" в "Disk Managment") и сам QSINIT ("Install QSINIT" там же).
   * теперь в меню EFI BIOS можно выбрать: "YOUR DRIVE" и "UEFI: YOUR DRIVE",
     первым будет QSINIT, вторым - EFI загрузка с тем, что мы там поставили.
   * в EFI режиме системный раздел EFI по умолчанию r/o, поэтому если хотите
     записать что-то на флешку - монтируете второй раздел.


   Для FAT/FAT32/exFAT/HPFS есть свой вариант бутсектора. Этот код не зависит
от осевого кода MBR и Boot Manager. Установить его можно примонтировав раздел
в QSINIT и выполнив, затем, команду "dmgr bs" в шелле (или в "Disk management"
в SysView).

   Для JFS он тоже есть, но CHKDSK при первом же запуске заменит его на
собственный. При чём, старые версии CHKDSK восстанавливают _не_весь_ код и
загрузка просто будет сломана ;) Не используйте это, за исключением реально
экстренных случаев.

   Для самых дотошных - код всех секторов в QS_SDK.ZIP, тут:
      \QS\system\src\ldrapps\partmgr\se.asm
   CD:
      \QS\system\src\tools\src\cdboot\cdboot.asm 
   HPFS:
      \QS\system\src\ldrapps\partmgr\hpfs\boot.asm
   JFS:
      \QS\system\src\ldrapps\partmgr\jfs\jfsboot.asm
      \QS\system\src\ldrapps\partmgr\jfs\jfsmicro.c

   Забавно, но FAT бутсектор может грузить NTLDR от Windows XP. Наследие
времён, когда MS и IBM что-то делали вместе.

  =======================================================================
   8. Лог.
  -----------------------------------------------------------------------

   В случае каких-то пpоблем можно пеpеслать автоpу лог :)
   Лог можно получить следующими путями:

     * по компоpту (опция DBPORT/DBCARD)

     * добавить в опции QSINIT.INI паpаметp LOGLEVEL (см. ниже) и пpочитать 
       лог из уже загpуженной OS/2 командой
         copy oemhlp$ logfile.txt  - если ACPI.PSD нет
         copy ___hlp$ logfile.txt  - если ACPI.PSD загpужен
       Этот ваpиант HЕ pаботает, если загpузка ядpа осуществлялась с опцией
       RESTART (с помощью дpугого OS2LDR).

     * пpимонтиpовать в QSINIT любой доступный FAT16/FAT32/exFAT pаздел и
       записать файл пpямо туда. И монтиpование и запись можно сделать в
       sysview или командой LOG в шелле.
       По умолчанию пpедлагается длинное имя файла!

   Если у вас случился трап QSINIT на PC или в VM, где есть COM1 или COM2,
   нажмите Alt-1 или Alt-2 соответственно прямо в трапскрине и затем
   несколько хоткеев дебужных дампов, например Ctrl-Alt-F5, Ctrl-Alt-F11 и
   Ctrl-Alt-F12 и пошлите мне весь этот вывод.
       
  =======================================================================
   9. PAE рамдиск (hd4disk.add драйвер).
  -----------------------------------------------------------------------

   QSINIT может использовать память выше 4Gb (в отличие от ядра OS/2).

   Команда RAMDISK в шелле может создать ram disk в этой памяти (или памяти
ниже 4Gb, если запрошено). Подробнее - RAMDISK /?.

   Этот  диск  может  быть доступен в OS/2 как ещё один HDD, для этого надо
добавить HD4DISK.ADD в CONFIG.SYS и положить сам файл в ?:\OS2\BOOT

   Есть одно ограничение - система ДОЛЖНА быть загружена из QSINIT, т.е.
именно QSINIT, а не другой загрузчик (через опцию RESTART) должен грузить
ядро.
   Причина в том, что ADD идёт в QSINIT, чтобы узнать где лежит диск.

   Если  использовать  ТОЛЬКО  память выше 4Gb - это ограничение может быть
обойдено на большинстве PC (не найдя QSINIT, драйвер попытается найти диск
в самом начале памяти выше 4GB).

   По  умолчанию  на диске создаётся один primary раздел, отформатированный
FAT или FAT32 (зависит от размера). Можно отформатировать и в HPFS/JFS.

   На этот диск можно положить своп :) Драйвер работает и в варпе/мерлине.

   Пример - добавить в QSSETUP.CMD строку:

       ramdisk /q nohigh min=500 z:

   от первых 4Gb молча будет откушено 500Mb и диск такого размера (с FAT), 
   получит букву Z: в LVM.

   Больше примеров есть в ramdisk\paedisk.txt.

   Если HD4DISK.ADD уже установлен, но версии <=308 (ноябрь 2014го) - лучше
его обновить.

  =======================================================================
  10. Треды.
  -----------------------------------------------------------------------
   С какого-то момента QSINIT стал поддерживать мультитредность :)
   
   По умолчанию этот режим выключен и QSINIT работает как старый добрый DOS.

   "Mode sys mt" в шелле, или вызов API или простое нажатие Ctrl-Esc (вызов
тасклиста) переключают функционирование в более OS-подобный режим с поддержкой
тредов и сессий. Команды шелла START, STOP и DETACH тоже включают его при
использовании.

    Переключение между сессиями осуществляется по Alt-Esc (в терминальной
сессии - Ctrl-N), вызов тасклиста - Ctrl-Esc (Ctrl-B в терминальной).

    START - запуск новой сессии, STOP - прибиение процесса, DETACH - аналог
осевой команды, вполне применим для чего-то длинного и асинхронного, например
копирования ZIP с TFTP сервера (на PXE):

     detach copy /boot /beep huge_file_via_pxe.zip c:\

   Дополнительный плюс - использование "hlt" во время ожидания, что слегка
снижает шум пpопеллеpа при работе в QSINIT ;)

   В настоящее время, практически весь код QSINIT - thread safe, но могут
оставаться мелкие проблемы.

   Мультитредность далеко не идеальна, например длительные операции записи
могут вызывать заметные задержки для других тредов, но, ёклмн - это, всё-таки,
не десктопная OS и в качестве "драйверов" тут BIOS.

   По крайней мере, играть в тетрис пока в соседней сессии ищется что-то на
диске - вполне реально.

   Возможна дополнительная настpойка с помощью SET из qssetup.cmd:

     set mtlib = on/off [,noapic] [, timeres=..]
     set kbres = value

   здесь OFF запрещает MT pежим вообще, TIMERES (в ms) устанавливает длину
"тика" таймеpа (по умолчанию - 16 (4 в EFI версии)), а KBRES - пеpиод опpоса
клавиатуpы (18 ms по умолчанию (8 ms в EFI)).

   NOAPIC запрещает использовать APIC таймер, вместо него будет использоваться
медленный и печальный системный (irq 0). Впрочем, его вполне достаточно для
здешней ленивой мультитредности ;)

   Выполнение команд шелла в MT режиме может быть первано нажатием Ctrl-C.

   Из неочевидных фич то, что все Ctrl-Alt-Fx хоткеи (различные дампы)
начинают работать везде (а не только во время ожидания ввода).

  =======================================================================
  11. Поддерживаемые типы ядер
  -----------------------------------------------------------------------

   QSINIT может загpужать старый вариант ядер OS/2 - от Warp3 и меpлина (до
FP13). Память для этих ядер лимитируется в 1Gb (только я не уверен, что это
правильный лимит). Ядpо Warp Server SMP не поддеpживается (если оно кому-то
до сих пор реально нужно - пишите :).

   Тип ядpа опpеделяется автоматически.

   Ядро OS/4 поддерживается частично.

  =======================================================================
  12. Параметры файла QSINIT.INI
  -----------------------------------------------------------------------
   QSINIT.INI совместим по формату с файлом OS2LDR.INI проекта OS/4. Если
QSINIT.INI отсутствует - делается попытка загрузить OS2LDR.INI.

   Формат файла:

      [config]
      ; индекс ядра по умолчанию (1..x) из секции [kernel]
      default=1
      ; индекс по умолчанию (1..x) для меню выбора разделов ([partition])
      default_partition = 4
      ; индекс по умолчанию (1..x) для меню выбора EFI загрузчиков ([efiboot])
      default_efiboot = 3
      ; таймаут (сек) перед стартом пункта по умолчанию (ядра / раздела диска)
      timeout=4
      ; прочие опции
      dbport=0x3F8
      ...
   
      [kernel]
      <kernel file name> = текст меню [, option, option ...]
      ...
      OS2KRNL = Common boot
      OS2KRNL = Common boot with Alt-F2, ALTF2
   
      [partition]
      disk/partition [, boot sector file] = текст меню [, option, option ...]
      ...
      hd0/0 = Boot 1st partition of disk 0
      hd0/0,bootsect.dos = Аналогично но используя файл bootsect.dos
      hd1/1 = Boot 2nd partition of disk 1
      hd2   = Boot MBR of disk 2 (with MTRR reset), nomtrr

      [efiboot]
      \efi\boot\win.efi   = WinX
      shell.efi           = EFI Shell, NOMTRR
      \efi\os2\aosldr.efi = ArcaOS,,F:
      b:\shell.efi        = EFI Shell, NOMTRR

      [colors]
      ; модификация цветовых схем диалогов и листбоксов
      ; формат значения (8 байт от сташего к младшему):
      ; 00
      ; строка ввода
      ; старшие 4 бита - ~хоткей выбранной кнопки, младшие - обычной
      ; старшие 4 бита - тень кнопок, младшие - хоткей в обычном тексте
      ; выбранная кнопка
      ; обычная кнопка
      ; обычный текст
      ; базовый цвет (рамки)
      ;
      ; в строках MSG_* - * это любой из цветов в команде MSGBOX
      MSG_WHITE = 0xFEE0EAE7FF1F9

      ; комментарии обозначаются ; только в 1-й позиции строки!
      
   Секция [partition] определяет список разделов для загрузки, показываемых
в меню "Boot partition". Это меню будет стартовым по умолчанию, если в файле
нет секции [kernel].

   Индекс раздела можно узнать по F7 в меню.
   Файл бутсектора для подмены может быть указан по прямому пути QSINIT или
ищется в корне раздела, с которого начинается загрузка (на любом типе FAT).

   Параметры TIMEOUT и USEBEEP оказывают влияние и на меню [partition]
(счётчик секунд стартует только при первом запуске меню).
   Поддерживаемые в этом меню опции: CPUCLOCK и NOMTRR (только в строке меню,
секция "[config]" не учитывается).

   Секция [efiboot] определяет загрузочное меню для EFI версии. Это список EFI
модулей для старта (различных загрузчиков OS, итд). Опции поддерживаются как и
в аналогичных секциях (на данный момент только NOMTRR), всё после ,, (сдвоенная
запятая) отправляется запускаемому UEFI модулю как строка параметров.

   Файлы ищутся на загрузочном разделе (UEFI System) и отсутствие полного пути
(начинающегося с \) означает каталог \EFI\BOOT. Меню также пробует найти файл
без пути в корне диска B: QSINIT, поддерживается и полный путь QSINIT.

   Меню выбора разделов работает только в BIOS режиме, меню EFI приложений -
только в EFI, соответственно.

   Алфавитный список опций QSINIT.INI:

 * ALTE      - (OS/4) вызвать встроенный в ядро редактор config.sys.

 * ALTF1..ALTF5 - симулировать нажатие Alt-F1..Alt-F5 для ядра.

 * BAUDRATE  - скорость отладочного COM порта (115200 по умолчанию). BAUDRATE
               в секции [config] оказывает влияние и на QSINIT и на ядро OS/2,
               в строке параметров ядра - только на ядро.
               Допустимые значения: 150, 300, 600, 1200, 2400, 4800, 9600,
               19200, 38400, 57600 и 115200.

 * BINNAME   - другое имя для QSINIT.LDI (до 24 символов, на FAT/FAT32 только
               короткие имена).

 * BOOTMOUNT=... - определяет как подключать загрузочный том в QSINIT. NO -
               запрещает монтирование файловых систем QSINIT для него, YES -
               режим по умолчанию, RO - переводит в режим только для чтения,
               в том числе для посекторного доступа, RW - включает возможность
               записи (в EFI версии запись на системный том UEFI по умолчанию
               запрещена, поскольку он используется совместно с фирмварью и
               прямая запись может быть опасна).

               Этот параметр игнорируется при старте в safe mode.

 * CALL=batch_file - запустить командный файл QSINIT перед стартом ядра.
               Например, A:\BATCH.CMD (загрузочный раздел) или C:\d1\batch.cmd
               (со смонтированного раздела).
               "batch_file" должен содержать полное имя файла!

               Файл запускается непосредственно перед вызовом VIEWMEM (если
               эта опция есть) и сразу после этого стартует ядро, которое уже
               лежит в памяти.
               QSINIT, при этом, полностью функционален (он никогда не трогает
               области памяти, где будет лежать/лежит ядро).

 * CFGEXT=EXT - использовать CONFIG.EXT вместо CONFIG.SYS. Файл должен лежать
               в корне загрузочного диска. EXT - расширение, до 3-х символов.

 * CPUCLOCK=1..16 - установить "clock modulation" (замедление процессора).
               1 = 6.25% скорости, 16 = 100%. На процессорах среднего возраста
               (775, 1156 сокеты) - реальный шаг - 12.5%, параметр будет
               округлён до него.

               Сlock modulation присутствует на Интелах, начиная с P4. Этот
               режим можно использовать, например, чтобы замедлить DOS,
               загружаемый из меню разделов. При 12.5% 3100 Core Duo в разных
               измерялках производительности в DOS определяется как 400-600
               Mhz процессор - каким-нибудь старым играм это вполне может
               помочь.

               Можно загрузить полуось на 1/6 частоты процессора и посмотреть
               насколько плохо оптимизирован ваш или чей-то ещё код ;)

               Параметр поддерживается и в меню разделов для загрузки и
               в меню выбора ядра OS/2.

 * CTRLC=1   - (OS/4>=2970) вкючить проверку Ctrl-C в отладчике ядра. Эта
               опция заметно замедляет систему. Она разрешает встроенному
               отладчику в дебужной версии ядра проверять COM порт на нажатия
               Ctrl-C (прерывание работы).

 * CTRLN=1   - использовать Ctrl-N для переключения сессий (в дополнение к
               Alt-Esc) и Ctrl-B для тасклиста (вместе с Ctrl-Esc).
               По умолчанию это работает только в консолях по компорту.
               Может пригодиться при запуске в QEMU, например.

 * DBCARD = bus.slot.func,port_index  или
   DBCARD = vendor:device,[index,]port_index - взять адрес PCI COM порта
               (с указанным индексом "i/o_port_index") и использовать его как
               отладочный COM порт. Дополнительно команда включает i/o порты
               карты, если они были выключены/не были включены биосом/UEFI.
               
               Опциональный "index" (1..x) может быть указан, если адаптер
               замаплен на несколько функций или установлено несколько
               одинаковых адаптеров.

               port_index - индекс порта в списке адресов PCI карты. Он
               выглядит примерно так (в выводе PCI.EXE):
                   Address 0 is an I/O Port : 0000EC00h
                   Address 1 is an I/O Port : 0000E880h
                   Address 2 is an I/O Port : 0000E800h
               Только значение отсчитывается от единицы, а не нуля.

               Пример:
                  у нас есть NetMos 9710:9835 на 4.2.0:

               DBCARD=9710:9835,3         <- port E800h
               DBCARD=4.2.0,2             <- port E880h

 * DBPORT=addr - адрес COM порта для отладки. Десятичное или 0xHEX число.
               Эта опция включает COM порт раньше, чем DBCARD, но DBCARD лучше
               заточена под частую смену конфигурации PCI устройств.

 * DEFMSG    - использовать файл OS2LDR.MSG вместо встроенных сообщений.

 * FULLCABLE=1 - используется полный COM-портовый кабель

 * ININAME=name - (QSINIT>=594) использовать другой INI файл. Работает только
               в строке меню с RESTART. Если не указан полный путь, то файл
               сначала ищется в корне загрузочного раздела.

 * LETTER=X  - смена буквы загрузочного диска для OS/2.
               Эта опция не меняет загрузочный раздел - она только указывает
               какую букву диска для этого раздела получит OS/2.

 * LOADSYM   - (OS/4>=4058) загружать SYM файл для ядра в загрузчике.

 * LOGSIZE=value - размер лога для резидентной части загрузчика, в kb. Это
               значение округляется вниз до 64k.
               Лог доступен на чтение/запись на уровне юзера в OS/2:
                 "copy oemhlp$ logfile.txt"  - если ACPI.PSD нет
                 "copy ___hlp$ logfile.txt"  - если ACPI.PSD загpужен

 * LOGLEVEL=0..3 - максимальный уровень сообщений лога QSINIT, которые будут
               скопированы в лог ядра. По умолчанию - не копируется ничего.

 * LVMMOUNT=1 - монтировать все разделы с назначенными буквами дисков в LVM
               на те же самые буквы в QSINIT. Эта опция замедляет старт QSINIT
               (из-за монтирования) и полная аналогия с OS/2 не гарантируется
               как минимум из-за возможной разницы в порядке физических дисков
               между BIOS и OS/2.

               Загрузочный раздел по прежнему замаплен на A: (за исключением
               случая BOOTMOUNT=NO), а на свою букву LVM - посредством команды
               SUBST.
                
               Этот параметр игнорируется при старте в safe mode.

 * MEMALIGN=0 - (OS/4>=???) не равнять таблицу памяти для ядра на 4Mb. Это
               добавляет некоторый относительно небольшой объём памяти, но
               может привести к немедленному ребуту при старте ядра на разных
               конфигурациях.
               Значение по умолчанию - 1 (память выравнивается).

 * MEMLIMIT=value - ограничить размер памяти для OS/2 до этого числа Mb.
               Значение должно быть >=16 и меньше имеющейся в наличии памяти.

               Ядра Warp 3 всегда ограничены <=1Gb, даже без указания этого
               параметра.

 * MENUPALETTE=value - настройка цветов для меню выбора ядер: байт 0 - текст,
               1 - выбранная строчка, 2 - фон, 3 - бордюр.
               По умолчанию = 0x0F070F01.

 * MFSDSYM=name - (OS/4>=4058) загружать "name" как SYM для mini-FSD.

 * MFSPRINT=1  разрешить коду micro-FSD использовать экран и клавиатуру.

               По умолчанию QSINIT блокирует эти вызовы BIOS во время чтения
               с загрузочного устройства. Это убирает с экрана копирайт JFS
               boot (мусор) и отключает полл клавиатуры в PXE биосе (который
               съедает все нажатия кнопок во время загрузки файла). Последнее
               мешает возможности фоновой загрузки длинных файлов с помощью
               DETACH, например.

               Включение этой опции актуально только для тех, кто сам пишет
               micro-FSD :)

 * NOAF      - выключает Advanced Format выравнивание на операциях чтения
               записи диска. Оказывает влияние и на QSINIT и на ядро OS/2 (до
               момента старта драйвера IDE/SATA/AHCI).
               По умолчанию - большинство операций чтения/записи - выравнены.

 * NOCLOCK=1 - отключает часы в меню, -1 включает показ и даты и времени (в
               пятницу 13-го, на новый год, 29 февраля и в день рождения QSINIT
               дата показывается принудительно).

 * NODBCS    - не загружать DBCS файлы (OS2DBCS, OS2DBCS.FNT).
               Опция освобождает небольшой объём памяти в первом мегабайте, но
               никак не влияет на работу системы (за исключением отсутствия
               графической консоли на начальной загрузке DBCS версий OS/2).

 * NOKBD=1   - не использовать клавиатуру. Для плат без видео и клавитуры, где
               BIOS эмулирует их через COM порт. В этом случае опрос BIOS лучше
               отключить и использовать COM-портовую консоль QSINIT (см. NOVGA)

 * NOLOGO    - ядро не будет показывать лого.

 * NOMTRR    - сбрасывать перед загрузкой OS/2 все изменения MTRR регистров,
               которые были сделаны в QSINIT.

               Параметр поддерживается и в меню загрузки разделов.
               Если у вас NTLDR с русским текстом (работающий в графическом
               режиме), то опция может быть актуальна.

 * NOPRINT   - запретить встроенный в резидентную часть printf в COM порт,
               используемый некоторыми драйверами.

 * NOREV     - ядро не будет показывать строку ревизии.

 * NOTASK=1  - отключает использование task gates (без этой опции VirtualPC
               выпадает в панику при трапах самого QSINIT).

 * NOVGA=1   - не использовать основное видео. Вам потребуется добавить через
               qssetup.cmd COM-портовую консоль (sm vadd) и переключить вывод
               на неё (sm attach 1 1) чтобы увидеть хоть что-нибудь.

 * OHTRACE=1..3 - печатать трассировку вызовов OEMHLP$ в лог (1 - обычный
               режим; 2 - только вызовы PCI; 3 - и то и то). Стоит иметь в
               виду, что ACPI.PSD перехватывает большинство вызовов OEMHLP$,
               а ядро OS/4 вообще использует свой (что нецензурно плохо).

 * PCISCAN_ALL=1 - сканировать все 256 шин PCI. По умолчанию QSINIT сканирует
               столько шин, сколько рапортует PCI BIOS. Этот ключ может
               вызывать ОЧЕНЬ большие тормоза на ОЧЕНЬ старых PC (пара минут
               на PPro).

 * PRELOAD=1 - (OS/4>=2075) загружать все файлы для первого этапа загрузки
               OS/2 перед началом инита драйверов.

 * REIPL=value - перегружать PC после фатальных ошибок (трапов) самого QSINIT.
               value - число секунд паузы перед перезагрузкой (>=1).
               По умолчанию - выключено.

 * RESETMODE=1 - сброс видеорежима в 80x25 на старте QSINIT.
               Альтернативно можно указать число строк для текстового режима:
               RESETMODE=25 (43, 50 или 60).

 * RESTART   - эта опция отключает ВСЕ остальные и указывает, что загружаемый
               файл из секции [kernel] - это OS2LDR (загрузчик, а не ядро).

               Т.е. это, практически, опция "рестарт загрузчика".

               На FAT16 разделе она может грузить NTLDR от Windows XP :) Как
               написано выше - наследие времён, когда MS и IBM ещё дружили.

 * RESTARTRAW  то же самое, что и RESTART, но аналог команды RESTART /RAW.
               С помщью этой опции могут быть запущены iPXE и grub4dos.

 * PICMASK = and/or - установка маски PIC, сначала выполняется and, потом or.
               Например PICMASK=/2 запретит прерывание клавиатуры (IRQ 1).
               Это не окажет влияния на OS/2, но в VDM клавиатура работать не
               будет, поскольку VDM тоже наследует маску реального режима.

               В нормальных условиях параметр практически не нужен.

 * SOURCE=X  - эта опция меняет загрузочный раздел ;) Здесь X - буква диска
               FAT, HPFS или JFS раздела, примонтированного в QSINIT (буква
               QSINIT, не OS/2!).
               Т.е. параметр позволяет сменить загрузочный диск на любой
               доступный раздел с OS/2.

               @ вместо буквы означает букву созданного на данный момент
               PAE RAM диска. Опция сделана для загрузки с него, что не мешает
               ей работать в общем случае.

 * SYM=name  - использовать файл "name" как SYM файл для отладочного ядра.
               Имя ограничено 11-ю символами (7.3, лимит, связанный с патчением
               строки в ядре).

 * UNZALL=1  - распаковка всех модулей файла QSINIT.LDI на виртуальный диск
               сразу во время загрузки. По умолчанию EXE/DLL модули только
               резервируют место на диске, а распаковываются при первом старте.

               Опция может потребоваться при забагованном PXE или проблемной
               работе SSD в паре со старым биосом - для проверки корректности
               сразу на загрузке.

 * USEBEEP=1 - включает спикер в меню выбора ядер (для PC без монитора).
               На первой строчке спикер пищит одним тоном, на всех последующих
               другим.

 * VALIMIT[=value] (OS/4>=4199) значение VIRTUALADDRESSLIMIT, в Mb.
               Опцию можно использовать без указания размера памяти, в этом
               случае он будет прочитан из VIRTUALADDRESSLIMIT в CONFIG.SYS
               (актуально только для последних версий OS/4, где этот параметр
               игнорируется ядром).

 * VIEWMEM   - открыть окно редактора памяти прямо перед стартом ядра OS/2.


   В QSINIT.INI параметры BAUDRATE, BINNAME, BOOTMOUNT, CTRLN, DBPORT, DBCARD,
LVMMOUNT, MFSPRINT, NOAF, NOKBD, NOVGA, PCISCAN_ALL, REIPL, RESETMODE, UNZALL и
USEBEEP влияют на QSINIT - все остальные используются только для загрузки ядра.

   LETTER, LOGLEVEL, NOAF и BAUDRATE могут быть использованы и в параметрах
ядра  и  в  секции  [config]; RESETMODE, USEBEEP, NOCLOCK, NOKBD, NOVGA,
BINNAME, UNZALL, DBCARD и PCISCAN_ALL воспринимаются только в секции [config].

   ININAME работает только в строке меню с RESTART.

   Системные требования: 80486DX, 24Mb (первые 16 резервируются для загрузки
ядра OS/2). На 8Mb оно запустится, но грузить ядро откажется и вполне стоит
ожидать ошибок "мало памяти".

   486SX тоже работает и грузит OS/2, но ничего не гарантируется, поскольку
эмуляции FPU в QSINIT нет. 80386 со всеми его забагованными ревизиями слишком
проблемен для поддержки ;)

   Мультитредный режим хочет хотя бы пентиум (наличие rdtsc в CPU).

   PAE режим - очевидно, минимум PPro, где он появился ;)

   В общем, развлекайтесь ;)

   Сделано на Земле, копилефт прилагается.
   Новые версии и SDK для сборки приложений - тут:

       ftp://212.12.30.18/public/QS
   или
       http://212.12.30.18/other/QS_LDR.ZIP

   Код QSINIT доступен в архиве с SDK.

   PXEOS4 есть там же: ftp://212.12.30.18/public/QS/PXE/pxeos4-1.210510.zip

   Автор: dixie, e-dixie@mail.ru

   p.s. для желающих (внезапно) поблагодарить через СБП - 915-696-1985 - на
смазывание странных шестерёнок в голове автора ;)

