пʼятниця, 3 травня 2013 р.

Аналіз SYS.COM з PC/MS-DOS --- вступ

Хто багато працював із DOS, повинен пам'ятати одну корисну програмку, SYS.COM. Вона -- наступна жертва, (після DATE.COM і TIME.COM). Програмка невелика, була доволі корисна, при тому присутня у всіх версіях, від 1.0 до 6.22, і навіть 7.00. 

Ще одним цікавим аспектом є  те, що її вихідні тексти можна знайти як у (краденому) OAK для DOS 3.30, так і (крадених) вихідних текстах DOS 6.xx. Потім, наголошую --- потім (інакше неспортивно, та й більш небезпечно! (згадуємо підхід "чистої кімнати")), завершивши дизасемблювання всіх цікавих версій, можна подивитися, порівняти власні висновки, інтерпретації, з офіційними. Можна також буде глянути на SYS з FreeDOS та DR-DOS.

Тим більше, що я вже дивувався її поведінці ("MS/PC DOS 1.XX "Ось ти який, північний олень!" "):

Виявив цікавий баг: якщо дискету сформатувати як системну ("FORMAT B: /S"), то "SYS.COM" казатиме "System transferred", хоча, здавалося б -- сенсу тепер ;-), однак якщо  взяти чисту дискету (навіть після "FORMAT B:"), заявить "No room for system on destination disk". Або не зовсім баг -- вимоги до розташування IBMIO.SYS/IBMDOS.COM дуже строгі, але для чистої дискети вони мали б виконуватися. Та й навіщо тоді SYS.COM, якщо він не може вирішити проблему, для вирішення якої призначений? З іншого боку, може то наслідок якихось проблем в емуляторі. Як би там не було, баг-репорт навряд чи приймуть...

Виявилося, що це не баг, а фіча.

Cпочатку подивимося, що каже документація.

"БИБЛИЯ MS-DOS" Стивена Симрина, яка знає про DOS, аж по версію 3.30 (В  книге  pассматриваются  все  версии  MS-DOS  и  PC-DOS,  включая и последние - MS-DOS 3.3 и PC-DOS 3.3.) виражається обтічно:   

SYS, Внешняя, MS-DOS 1.Х,2.Х,3.Х

ФУНКЦИЯ: Пеpеносит системные файлы на указанный диск
ФОРМАТ:  SYS d:
ПРИМЕР:  sys b:

Системные файлы - это два "скpытых" файла, составляющие ядpо  MS-DOS. Наличие этих файлов на диске нельзя пpовеpить командой DIR (поэтому  они и называются скpытыми). Файлы должны pасполагаться в опpеделенном  месте диска  в  стpого  установленном  поpядке.  Обычно  с  диска,  на котоpом находятся  эти  файлы,   пpоизводится  загpузка  опеpационной   системы. (Системные файлы pассмотpены в ч.2, гл.11).

Команда  SYS   пеpеписывает  системные   файлы  на   указанный  диск. Диск-получатель должен быть  либо пустой отфоpматиpованной  дискетой (по команде format d:/s), либо отфоpматиpованным жестким диском (по  команде format d:/b). Если пpи фоpматиpовании вводится ключевой паpаметp /s  или /b, то опеpационная  система pезеpвиpует память  для системных файлов  в стpого  опpеделенном   месте  диска.   Тогда  команда   SYS  выполняется ноpмально.  В  пpотивном  случае  системные  файлы  не  будут  пpавильно pасположены.

Пpи пеpезаписи файлов  следует пользоваться pабочей  копией системной дискеты. В следующем пpимеpе она находится на дисководе А. Набеpите  sys и шифp диска, на котоpый пеpеносятся файлы:
   A>sys c:
   System transferred  

Це натякає, що якщо системних файлів немає і місце під них не зарезервовано --- утиліта нічого не робитиме. Хоча, забігаючи наперед, SYS.COM PC-DOS 1.00 накладає ще строгіші вимоги. З часом подивимося, чи вони були пом'якшені в пізніх версіях, чи автор недоговорює.

Вікіпедія дає трішки більше інформації, хоча і не конкретизуючи по версіях (виділення --- моє):

SYS is an external command of DOS and Microsoft Windows 9x operating systems that is used to make an already formatted medium bootable. It will therefore install a boot sector capable of booting the operating system into the first logical sector of the volume. Further, it will copy the principal DOS system files, that is, the DOS-BIOS (IO.SYS or IBMBIO.COM) and the DOS kernel (MSDOS.SYS or IBMDOS.COM) into the root directory of the target. Due to restrictions in the implementation of the boot loaders in the boot sector and DOS' IO system, these two files must reside in the first two directory entries and be stored at the beginning of the data area under MS-DOS and PC DOS. Depending on version, the whole files or only a varying number of sectors of the DOS-BIOS (down to only three sectors in modern issues of DOS) will have to be stored in one consecutive part. SYS will try to physically rearrange other files on the medium in order to make room for these files in their required locations. This is why SYS needs to bypass the filesystem driver in the running operating system. Other DOS issues such as DR-DOS do not have any such restrictions imposed by the design of the boot loaders, therefore under these systems, SYS will install a DR-DOS boot sector, which is capable of mounting the filesystem, and can then simply copy the two system files into the root directory of the target. SYS will also copy the command line shell (COMMAND.COM) into the root directory.[1] The command can be applied to hard drives and floppy disks to repair or create a boot sector.

При цьому стаття посилається на сайт Мікрософт, "SYS.COM Requirements in MS-DOS versions 2.0-6.0". 

Там стверджується, що оригінальна (такою в цій статті називають SYS.COM з DOS 2.0) версія:
  • Копіювала системні файли (IO.SYS/IBMBIO.SYS i MSDOS.SYS/IBMDOS.SYS).
  • Виправляла бут-сектор.
  • Обтічно сказано, що так як ці файли мали бути першими в каталозі і першими та неперервними у фізичній області, якщо там не було місця, то система не переносилася. Якщо системні файли вже були і мали ті ж імена, то вони замінювалися. (Дизасемблювання дасть певні уточнення до цього твердження).
  • Вміла копіювати тільки системні файли із тим же іменем, що є правильним для вибраної версії SYS.COM (PC-DOS-івський чи MS-DOS-івський варіанти, відповідно).
  • Не копіювала COMMAND.COM.
Далі розповідається про нововведення наступних версій:
  • 3.3 --- дозволено, щоб системні файли не були неперервними. Однак вони все ще мусять бути першими в каталозі, і перших три сектори IO.SYS (IBMBIO.SYS) мають знаходитися в перших трьох секторах даних. (Саме секторах, не кластерах?)
  • 4.0 --- вміє перетасовувати файли, звільняючи необхідне місце (перші записи кореневого каталогу, перші сектори в області даних). Вміє запускатися на старіших версіях DOS. (Наскільки старіших?)
  • 5.0 --- знає про стандартні для PC-DOS i MS-DOS імена файлів одночасно. Більше не потрібно, щоб перші три сектори були на початку області даних, але вони все ще мають бути неперервними. Нарешті копіює COMMAND.COM. Можна вказувати, звідки брати системні файли.
  • 6.0 --- додатково копіює DBLSPACE.BIN.
Перевіримо з часом. :-)

Отож, наступного разу --- "Аналіз SYS.COM з MS-DOS 1.00".

UPDATE 30-05-2013:

Bitsavers нещодавно виклали скани ранніх "мануалів":
Подивимося, що там писало (тут скани, PDF також ще розпізнані --- можна шукати, копіювати і т.д.):

DOS 1.00 -- First Edition Revised  (January  1982), сторінка 3-46.


DOS 1.10 -- Second  Edition (May  1982), сторінка 3-61.


DOS 2.00 -- First Edition (January 1983), сторінка 6-135.

DOS 3.10 -- First edition (February 1985), сторінка 7-178.





Немає коментарів:

Дописати коментар