Подробно описывать не буду, будет очень много букв.
Когда выбирается пункт "загрузка с диска", то с адреса 1000 копируется программа для чтения 1-го сектора нулевого трека нижней стороны, это блок 0 в формате RT-11. В RT-11 устройства прямого доступа называются блочными и делятся на блоки по 512 байт. В качестве условия - нулевой блок должен начинаться командой NOP (код 240). После чтения нулевого блока ему передается управление. Сам процесс загрузки RT-11 состоит в чтении первичного загрузчика (он как раз расположен в нулевом блоке), далее первичный загрузчик читает вторичный загрузчик (блоки 2-5) и передает ему параметры и управление. Вторичный загрузчик уже ищет драйвера на диске, загружает драйвер системного устройства, саму операционную систему и передает ей управление.
В первичный загрузчик также входит драйвер системного устройства, работающий только на чтение, им пользуется вторичный загрузчик для загрузки системы на начальном этапе.
Зачем нужны два загрузчика. Первичный - это часть драйвера системного устройства, а вторичный - часть монитора. Благодаря этому в монитор не надо встраивать на этапе сборки драйвер системного устройства (это было вплоть до третьей версии), и система становится переносимой на любые носители, с которых можно грузится.
Драйвер MZ, к примеру, состоит из блока описания и установки SET-параметров (это нулевой блок в драйвере), затем следует тело основного драйвера, и в конце - первичный загрузчик. Вторичный загрузчик расположен в теле монитора в блоках 1-4. По команде COPY/BOOT первичный и вторичный загрузчики копируются из драйвера и монитора на диск в блоки 0 и 2-5.
А насчет передачи управления в MZ. Сначала вторичный загрузчик читает каталог, ищет там драйвер системного устройства (в данном случае MZ), загружает его в память в самый конец (обычно адреса 157000), после этого читается RMON, настраивается. В принципе уже можно использовать основной MZ. Вот сейчас не помню, USR читается уже через MZ, или через первичный загрузчик. Но есть исходники - посмотрите.
А я у себя обнаружил штук пять таких программ - обычно это небольшие утилиты, для которых экономия одного блока может составлять до 50% выигрыша в размере :)
Наиболее интересная утилита HAND.SAV - выводит информацию о любом драйвере.
Чтобы эта утилита могла запускаться на УКНЦ - потребовалось изменить адрес начала кода в исходнике и перекомпилировать.Код:.HAND SY:WD.SYS Имя драйвера WD.SYS Код устройства 53 (винчестерский диск МС5402, RD50/51/52) В устройстве блоков 1. Регистр CSR=176670 Вектор 144 Обработка прерываний .+22 Приоритет 340 Размер драйвера 64 байт, 26. слов Начальный загрузчик 555 байт, 182. слов Контроль установки Есть Параметры генерации TIM$IT=1 (поддерживает тайм-аут) MMG$T =0 (не поддерживает диспетчер памяти) ERL$G =0 (не поддерживает регистратор ошибок) Слово состояния FILST$=1 (прямой доступ) RONLY$=0 (не только для чтения) WONLY$=0 (не только для записи) SPECL$=0 (стандартная файловая структура) HNDLR$=0 (не выполняет простые завершающие операции) SPFUN$=1 (выполняет специальные функции) ABTIO$=0 (не выполняет завершающие операции) VARSZ$=1 (поддерживает тома переменного размера) SET WD SYSGEN SET WD [NO]ROLL
Исходник и перекомпилированный .SAV - в приложении.
Последний раз редактировалось hobot; 08.11.2011 в 17:10.
У меня есть три оригинальных HANDLE.SAV ( V01, V4.1 и V05.03 с исходником).
HAND.SAV - полностью отечественная разработка на ту же тему. Она отличатеся более развёрнутыми сообщениями на русском языке, меньшим размером файла и возможностью вывода информации не только на экран, но и в выходной файл.
Кстати, там была использована ранняя версия моей макробиблиотеки для RT-11, поэтому при изменении адреса начала кода - я не удержался и заменил макрос .Var на самый последний вариант, не создающий кода при объявлении переменных и массивов. Иначе размер программы при компиляции увеличивался на суммарный размер всех объявленных переменных и эти заполненные нулями блоки приходилось удалять у откомпилированного файла .SAV вручную.
Последний раз редактировалось Patron; 08.11.2011 в 17:30.
К сожалению моя эпохальная макробиблиотека для RT-11 не существует в законченном виде с руководством по использованию :)
Однако, основных идей там немного и они достаточно просты:
1. Переменные и массивы типов Byte и Word можно объявлять при помощи макрокоманды .Var в любом порядке и в любом месте программы, но они все будут описаны, как последовательные смещения относительно метки BegVar.
2. Если в начале подпрограммы вместо метки использовать макрокоманду .Procedure NAME, то будет объявлена метка NAME: и макрокоманда .NAME, генерящая однословный вызов данной подпрограммы через специальный диспетчер, обеспечивающий сохранение содержимого регистров перед передачей управления на метку NAME и восстановление регистров после возврата из подпрограммы по Return. Для возврата результатов работы подпрограммы в интересующих регистрах служат макрокоманды .RetR0 - .RetR5
3. Текстовые сообщения КОИ-7 можно хранить в виде "рекурсивных" строк, когда отрицательный байт означает номер подстроки в таблице подстановок. Строки в таблице подстановок также могут содержать отрицательные байты с аналогичным смыслом.
4. Программа может содержать менеджер памяти с автоматической сборкой мусора и "умными" указателями.
Все эти подсистемы, кроме последней - содержатся в исходнике HAND.MAC, который можно рассматривать, как наглядное пособие по их использованию.
Добавил в архив такую системную дискетку,
интересной показалась программа TAPE, для записи
программ на магнитофон, на дискете есть её исходник,
и редактор (загрузчик) шрифтов FNT.SAV и кучка шрифтов
к нему. Там возможно что-то ещё интересное, например
что за программа BUG.SAV ? Драйвер MH.SYS ?
Исходник VM.MAC.
В архиве образ (с дублем!) лежит в папке TAPE-FNT.
Благодарность участнику old-school за присланные
материалы !
Код:31-Dec-99 Volume ID: FODOS Owner : SWAP .SYS 26 12-Sep-94 14 MZ .SYS 3 12-Sep-94 40 RT11SJ.SYS 72 12-Sep-94 43 TT .SYS 2 12-Sep-94 115 LD .SYS 8 12-Sep-94 117 VM .SYS 3 24-Dec-94 125 AC .SYS 5 12-Sep-94 128 PM .SYS 2 12-Sep-94 133 NL .SYS 2 12-Sep-94 135 TY .SYS 2 12-Sep-94 137 LP .SYS 3 12-Sep-94 139 BP .SYS 15 10-Nov-92 142 MH .SYS 3 12-Sep-94 157 SL .SYS 10 12-Sep-94 160 BG .SYS 19 12-Sep-94 170 BUG .SAV 5 12-Sep-94 189 DUP .SAV 45 12-Sep-94 194 DIR .SAV 19 12-Sep-94 239 PIP .SAV 29 12-Sep-94 258 DUMP .SAV 9 12-Sep-94 287 EDIK .SAV 22 12-Sep-94 296 LINK .SAV 49 12-Sep-94 318 KEY .SAV 3 12-Sep-94 367 KEY .COM 1 12-Sep-94 370 IBMCHR.SAV 8 12-Sep-94 371 KBS .SAV 2 12-Sep-94 379 RBTRON.SAV 2 12-Sep-94 381 DESS .SAV 19 12-Sep-94 383 DAY .SAV 5 12-Sep-94 402 MACRO .SAV 60 12-Sep-94 407 SYSMAC.SML 45 12-Sep-94 467 IND .SAV 51 02-Feb-90 512 LIBR .SAV 24 12-Sep-94 563 SRCCOM.SAV 26 12-Sep-94 587 BINCOM.SAV 24 12-Sep-94 613 RESORC.SAV 22 12-Sep-94 637 SYSLIB.OBJ 47 12-Sep-94 659 TESTMZ.SAV 15 12-Sep-94 706 HANDLE.SAV 7 12-Sep-94 721 UCL .SAV 5 22-Oct-94 728 STARTS.COM 1 12-Sep-94 733 UKFONT.MAC 1 12-Sep-94 734 ITALIC.FNT 6 12-Sep-94 735 CREF .SAV 6 12-Sep-94 741 ALTNUM.SAV 3 12-Sep-94 747 PMEM .SAV 2 12-Sep-94 750 ALTNUM.MAC 6 12-Sep-94 752 CLS .SAV 2 12-Sep-94 758 HIGH .FNT 6 12-Sep-94 760 ESCFG .MAC 6 13-Nov-93 766 TI .SYS 3 12-Sep-94 772 ESCFG .SAV 3 13-May-99 775 PMEM .MAC 4 12-Sep-94 778 PRF .MAC 13 12-Sep-94 782 PRF .SAV 6 12-Sep-94 795 TAPE .SAV 4 12-Sep-94 801 SCAN .MAC 3 12-Sep-94 805 BOLDL .FNT 6 12-Sep-94 808 ROMAN .FNT 6 12-Sep-94 814 KOI8 .MAC 2 12-Sep-94 820 IBMCHR.FNT 6 12-Sep-94 822 UKNC .FNT 6 12-Sep-94 828 FP .SYS 2 12-Sep-94 834 FP .MAC 2 12-Sep-94 836 UKFONT.SAV 2 12-Sep-94 838 FNT .SAV 11 12-Sep-94 840 ROUND .FNT 6 12-Sep-94 851 AC .MAC 15 12-Sep-94 857 BUP .SAV 37 12-Sep-94 872 SCAN .SAV 2 12-Sep-94 909 SYSMON.BIN 16 13-May-99 911 PRF1 .MAC 13 12-Sep-94 927 BB .MAC 14 29-Sep-94 940 TEST .SAV 27 12-Sep-94 954 MONIT .MAC 2 13-May-99 981 KBS .MAC 5 13-Nov-93 983 KEYPAS.MAC 7 13-Nov-93 988 VM .MAC 9 13-Nov-93 995 TAPE .MAC 8 12-Sep-94 1004 GC .FNT 6 12-Sep-94 1012 RBTRON.MAC 4 13-Nov-93 1018 SCRIPT.FNT 6 12-Sep-94 1022 ORATOR.FNT 6 12-Sep-94 1028 VMON .UCL 1 28-May-99 1034 VMOFF .UCL 1 28-May-99 1035 ACM .MAC 9 02-Jan-93 1036 SETKA .MAC 7 09-Jul-91 1045 SETKA .SAV 3 -BAD- 1052 SPEED .SAV 3 28-Nov-92 1055 RDRMC .SAV 2 31-Dec-99 1058 RDRMC .MAC 3 31-Dec-99 1060 < UNUSED > 268 1063 < UNUSED > 269 1331 91 Files, 1049 Blocks 537 Free blocks
Вообще-то это мой образ, он в эмуляторе с именем sysimage.dsk.
---------- Post added at 16:17 ---------- Previous post was at 16:09 ----------
VM - одна из многих самоделок, ну выбрал оригинальное имя. В то время я не знал толком как работает UCL, собственно писал для себя, умеет разбирать параметры в командной строке, и в зависимости от параметров и UCL-файла формирует командный файл. Использовал главным образом с языками программирования (C и Pascal). На этом диске нет примеров (VMON и VMOFF не в счет), а так имеется условная трансляция в зависимости от наличия параметров, и даже значения параметров. IND для этой цели слишком медленный, а данный UCL меня выручал.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)