Просмотр полной версии : Автозапуск программ ОС СР/М на Корвете
Давно интересовал вопрос автозапуска программ на Корвете, чтобы при загрузке ОС сразу стартовала пользовательская программа, к примеру Нортон.
В самой СР/М нет аналога MS-ДОСовского файла autoexe.bat, однако диски с автозапуском есть, к примеру многие школьные диски, психологические тесты...
Нашел пока одно решение - через редактор командной строки DED.COM.
Суть такова, что сначала программой DEDINST.COM "патчится" системная область и при загрузке с этого диска сразу стартует программа DED.COM.
Следовательно можно свою программу, к примеру Нортон переименовать в DED.COM и при загрузке стартанет она.
А есть еще какие-то способы сделать загрузочную дискету, такие образы есть в архивах, в них никакого ДЕДа нет, а автозапуск есть!
Во вложении комплект ДЕДа с описанием самой программы, её установки и удаления.
74621
В самой СР/М нет аналога MS-ДОСовского файла autoexe.bat
Неужели в корветовской CP/M не работает стандартный start.com ?
На R1715 работает.....
Еще более странно, но ни в одном Корветовском архиве не нашел файла start.com, в книге Уэйта и Ангермейера про него тоже не упоминается. Может на Роботроне операционку SCP немного "подправили"?
Вроде если ничего не путаю в Векторе) еще initial.sub был....
Error404
08.02.2021, 01:43
во многих реализациях CP/M это AUTOEXEC.SUB
Serebriakov
19.02.2021, 18:08
пользовательская программа, к примеру Нортон.
Аналог Norton Commander на Корвете называется The Proffer Commander (как правило PR.COM или PROF.COM в образах (https://zx-pk.ru/threads/29405-katalog-softa-korvet.html?p=979344&viewfull=1#post979344)):
http://zx-pk.ru/attachment.php?attachmentid=74754
стартует программа DED.COM.
Вот здесь есть (https://zx-pk.ru/threads/17915-moya-kollektsiya-obrazov-dlya-quot-pk-8020-korvet-quot.html?p=717474&viewfull=1#post717474) хорошее описание редактора командной строки DED.
во многих реализациях CP/M это AUTOEXEC.SUB
CP/M 3 запускает команды из PROFILE.SUB при загрузке. Все что нужно сделать - вставить необходимые команды в PROFILE.SUB.
А вот в CP/M 2.2 все сложнее. К сожалению, функция автостарта для CP/M 2.2 не очень хорошо документирована, постараюсь это исправить. Для включения автозапуска нужно пропатчить загрузочный сектор в образе любым hex-редактором. Ниже распишу формат образа диска и что патчить.
Первые 128 байт в образе содержат размеры всех областей на диске, подробное описание этой области есть в файле ниже в разделе CP/M:
https://github.com/alexanderk23/zxdn/blob/master/coding/ig7doses.txt
Если интересно покопаться более детально, вот еще пара ссылок на формат CP/M 2.2:
http://www.idealine.info/sharpmz/succpminfo06.htm
http://www.idealine.info/sharpmz/dpb.htm
http://www.seasip.info/Cpm/format22.html
После первых 128 байт в образе следующие байты как раз и отвечают за командный процессор.
Первые 6 байт - две точки входа (две jmp инструкции). Первая точка входа - это «холодный старт», которая будет выполнять любую команду в буфере команд. Вторая точка входа - «теплый старт» - она будет игнорировать любую команду, предварительно инициализированную в буфере. Такова логика работы автозапуска в CP/M, BIOS просто выбирает переход к первой или второй точке входа в зависимости от контекста.
При включении компьютера или полной перезагрузке происходит «холодный старт», с автозапуском по первому jmp.
По-поводу «теплого старта» - многие программы в типичном сеансе CP/M завершают работу с помощью «теплого старта» и автозапуск уже не срабатывает - вызывается второй jmp, который игнорирует командный буфер. Однако можно заставить CP/M выполнять автозапуск и при «теплом старте» (после выхода из программ) с помощью флагов BIOS (битов режима), об этом напишу ниже.
Следующий 7-ой байт обычно равный 7Fh - сообщает нам сколько всего байтов доступно в буфере (7Fh = 127 байт):
http://zx-pk.ru/attachment.php?attachmentid=74753
Следующий 8-ой байт - общая длина команды. По умолчанию этот байт равен 00h, что указывает на отсутствие команды в буфере. Чтобы включить автозапуск, нам нужно изменить этот 8-ой байт - указать длину команды. Можно указать длину команды с запасом, предположим 15 символов = 0Fh. Главное потом после ввода более короткой, чем 15 символов команды, записать пробел 00h.
Со следующего байта фактически начинается входной буфер для командного процессора, куда мы и записываем команду. По-умолчанию там записан копирайт CP/M: COPYRIGHT (C) 1979, DIGITAL RESEARCH - просто поверх него пишем нашу команду и в конце ставим пробел 00h.
В команде можно указать не только имя программы, например: KLAD1 , а еще и указать диск: A:KLAD1
Теперь всякий раз, когда CP/M будет загружаться в память, командный процессор будет запускать нашу команду.
Теперь по-поводу того, как заставить выполняться автозапуск еще и при «теплом старте» (после выхода из программ). Сделать это можно с помощью флагов BIOS (битов режима). Как я понял, в CP/M 8 флагов (8 бит), некоторые из них связаны с прерываниями, некоторые с дисководами, два последних относятся к «теплому старту». К сожалению, мне с ходу не удалось найти где в Корветном CP/M 2.2 биосе находится этот флаг.
Вот образ: 74751, где флаг для «теплого старта» точно установлен - после выхода из программ снова стартует автозапуск.
Будет у кого желание - помогите найти адрес этого байта в образе. Вот в этом видео (https://youtu.be/RxrPmbsmyBs) где-то на 7 минуте, показывается как патчится флаг «теплого старта» для Altair 8800, но там, конечно же другие адреса. Так же в конце этого видео есть хорошая идея ставить в автозапуск утилиту SUBMIT (в образах (https://zx-pk.ru/threads/29405-katalog-softa-korvet.html?p=979344&viewfull=1#post979344) SUBM.COM, SUBMIT.COM), которая позволяет запускать *.SUB сценарии с несколькими командами - таким образом можно получить аналог AUTOEXEC.BAT из DOS.
Error404
20.02.2021, 11:46
Аналог Norton Commander на Корвете называется The Proffer Commander (как правило PR.COM или PROF.COM в образах (https://zx-pk.ru/threads/29405-katalog-softa-korvet.html?p=979344&viewfull=1#post979344)):
http://zx-pk.ru/attachment.php?attachmentid=74754
"MkDir" - создать каталоги? Как реализованы подкаталоги в CPM (2.2? 3.0?) Корвета?
- - - Добавлено - - -
Еще не прозвучало про файл $$$.sub - автостарт штатно реализованый в CP/M 2.х для SUBMIT.COM, XSUB.COM и им подобным программ пакетной обработки.
Оно не очень удобно (т.к. СРМ при выполнении этот файл подрезает и в итоге уничтожает), но как вариант для защищенной от записи дискеты имеет место быть.
Многие классические "нортоны" CPM этот механизм используют чтобы штатно вернуть себе управление после запуска из них какого-то .COM
Serebriakov
20.02.2021, 19:03
"MkDir" - создать каталоги? Как реализованы подкаталоги в CPM (2.2? 3.0?) Корвета?
На Корвете нет CP/M 3.0 - я её упомянул только для объяснения механизма автозапуска. Две основные дискетные операционные системы: CP/M 2.2. и её советский клон МикроДОС. Есть еще не дискетный Бейсик, прошитый в ПЗУ и разные сетевые системы, но это отдельная тема.
Насчет каталогов - это физически не каталоги, а пользовательские области на дискете, чтобы понять как это работает проще будет показать картинку из SteinBlume (https://zx-pk.ru/threads/31154-utilita-dlya-raboty-s-obrazami-diskov-cp-m-(windows-gui)-steinblume.html):
http://zx-pk.ru/attachment.php?attachmentid=74772
Т.е. на дискете есть 16 пользовательских областей (по сути виртуальных каталогов), а так же область удаленных файлов. Данную возможность, насколько я помню, использовал в основном сетевой софт, чтобы сетевые ученики 8010 могли отправлять свои файлы на учительский 8020. А тот записывал файлы учеников в области-каталоги согласно сетевому номеру конкретной 8010.
Error404
21.02.2021, 11:22
Т.е. на дискете есть 16 пользовательских областей (по сути виртуальных каталогов), а так же область удаленных файлов.
Понятно, всё по классике.
Я почему спросил - с выходом MS-DOS с подкаталогами, энтузиастами предпринимались попытки сделать похожее в CP/M (обычно инфа по каталогам и датам файлов хранилась в служебном файле), но получалось или неудобно или в относительно удачных случаях получалось инородно вплоть до совершенно другой файловой системы (как в MSX DOS). Подумал что на Корвете могла быть одна из вариаций (первого типа например, она остается совместимой с CPM по формату файловой системы)
Proffer по F7 просто открывает ближайший свободный User и позволяет задать ему имя. Но это имя доступно только в Proffer'e. Оно записывается в файл на этом диске. В самой же СР/М никаких имён пользовательских областей не будет, они по-прежнему будут иметь только номера. Я бы сказал, не очень удобно реализовано. Если я хочу сразу попасть, например, в User 8, минуя 2 - 7, то никак. На ПК8000 в File Commander переключение между областями реализовано по Shift+F1 или +F2.
Теперь по-поводу того, как заставить выполняться автозапуск еще и при «теплом старте» (после выхода из программ). Сделать это можно с помощью флагов BIOS (битов режима). Как я понял, в CP/M 8 флагов (8 бит), некоторые из них связаны с прерываниями, некоторые с дисководами, два последних относятся к «теплому старту». К сожалению, мне с ходу не удалось найти где в Корветном CP/M 2.2 биосе находится этот флаг.
Вот образ: VADSOFT_GAMES11_COLD+WARM_AUTOSTART.zip, где флаг для «теплого старта» точно установлен - после выхода из программ снова стартует автозапуск. Так в этом образе механизм автозапуска менюшки идентичен автозапуску DED.COM (только прописан KTL5). Может утилита DEDINST как-то устанавливает этот флаг.. Хотя сомневаюсь. При восстановлении ею же исходного состояния диска, после сохранения изменений на диск и выхода из программы, естессно, происходит "теплый старт" и автозапуска уже нету. Сразу же в редакторе дисков (DE.COM) ручками прописываю "A:DED" (или A:PR, ну и длину в 8-ом байте), сохраняю изменения на диск, закрываю редактор и тут же срабатывает автозапуск. О.. заметил странность в упомянутом образе: прописано "A:KTL5", а в 8-ом байте указано 4
74928
есть хорошая идея ставить в автозапуск утилиту SUBMIT (в образах SUBM.COM, SUBMIT.COM), которая позволяет запускать *.SUB сценарии с несколькими командами - таким образом можно получить аналог AUTOEXEC.BAT из DOS. В МикроДОС автозапуск осуществляется если на диске присутствует файл INITIAL.SUB.
Аналог Norton Commander на Корвете называется The Proffer Commander Есть еще Spics Commander. В нем командная строка есть (в Проффере нету), но он жутко медленный..
Интересно, как в CP/M-80 из своей программы запустить другую? В МикроДОС есть функция БДОС №47 (Замена программы), в CP/M-80 такой нету :confused:.
Еще не прозвучало про файл $$$.sub - автостарт штатно реализованый в CP/M 2.х для SUBMIT.COM, XSUB.COM и им подобным программ пакетной обработки.
Оно не очень удобно (т.к. СРМ при выполнении этот файл подрезает и в итоге уничтожает), но как вариант для защищенной от записи дискеты имеет место быть. $$$.sub - временный (причем бинарный) файл, создается утилитой SUBMIT.COM и после выполнения каждой строки-команды модифицируется. После выполнения последней команды уничтожается. При прерывании выполнения текущей команды из скрипта файл $$$.sub уничтожается. Но если в процессе выполнения перезагрузить или выключить комп, то при загрузке скрипт продолжит выполнение команд.
Многие классические "нортоны" CPM этот механизм используют чтобы штатно вернуть себе управление после запуска из них какого-то .COM Proffer Commander и Spics Commander так не умеют. А какие еще "коммандеры" есть под СРМ и МикроДОС?
после выполнения каждой строки-команды модифицируется
Немного не так. SUBMIT.COM записывает команды в обратном порядке (1 команда на один 128-байтный блок) и файл не модифицируется. Изменяется только его длина, т.е. всего один доступ на запись к каталогу. Выполняется команда из последнего блока и длина уменьшается на 1 блок.
SUBMIT.COM записывает команды в обратном порядке (1 команда на один 128-байтный блок) и файл не модифицируется. Изменяется только его длина, т.е. всего один доступ на запись к каталогу. Выполняется команда из последнего блока и длина уменьшается на 1 блок. О как все просто... Сбил с толку "мусор" в файле (в каждом блоке).
Так же в конце этого видео есть хорошая идея ставить в автозапуск утилиту SUBMIT Пробовал (прописывал SUBMIT INITIAL), - не работает. Причина проста: при загрузке ОС грузится SUBMIT, обрабатывает INITIAL.SUB (в моем случае), создает $$$.SUB и завершет работу. Естессно, "теплый старт" и... повторный запуск SUBMIT... :(. НО.. ведь с прописанным в автозапуск DED скрипты работают. И с "голым" ССР тоже все пучком. А если прописать в автозапуск шо-то другое, Проффер, например, и даже если восстановим $$$.SUB (с DED или встроенным ССР, по хотстарту он и будет выполняться), скрипт выполнятся не будет. Т.е. при хотстарте ВСЕГДА загружается то, что прописано в буфере (или стандартный ССР) и только они умеют работать с $$$.SUB. Выходит, что для автозапуска SUB-файла (пусть INITIAL.SUB, как в МикроДОС) нужно писать свой "command.com".
Драси.. Подняли такую интересную тему и слились.. Совсем скисли.. Я в пред. посте не совсем верно описал процедуру хотстарта, там практически половина системы ребутится, включая ССР. ССР обрабатывает команду прописанную в буфере ПДП (DMA), выполняет ее. Если буфер пуст, то пытается выполнить $$$.SUB. Если $$$.SUB нету, то отдается в распоряжение юзера с выводом промта (A>). Возник вопросик: что же собой представляет DED.COM? Как он работает? Это аналог встроенного ССР или это всего-лишь продвинутый редактор командной строки, который просто передает сформированную командную строку встроенному ССР + умеет детектить наличие $$$.SUB (и "скармливает" его встроенному ССР)?
Serebriakov
28.05.2021, 03:42
К сожалению, мне с ходу не удалось найти где в Корветном CP/M 2.2 биосе находится этот флаг.
Вот образ: VADSOFT_GAMES11_COLD+WARM_AUTOSTART.zip, где флаг для «теплого старта» точно установлен - после выхода из программ снова стартует автозапуск.
Я ошибся, в образе от VadSoft флага «теплого старта» для меню запуска игр (KTL5.COM) нет. Сработает автозапуск после выхода из программы или не сработает зависит только от самой программы - видимо есть разные способы завершить свою работу. Например, при выходе из Proffer Commander (PROF.COM) - снова запускается строка из автозапуска (даже если это не сам командер, а что-то другое), т.е. срабатывает «холодный старт» с автозапуском. Тоже самое и с меню для игр от VadSoft (KTL5.COM) - после выхода снова выполняется строка из автозапуска. А вот Клад (KLAD1.COM) всегда выбрасывает строго в командную строку A> , как при «теплом старте» без флага в BIOS CP/M (бита режима).
Так же попробовал заставить Клад делать «холодный старт» принудительно вместо «теплого старта» - заменил в BIOS CP/M образа дискеты второй jmp на первый:
Первые 6 байт - две точки входа (две jmp инструкции). Первая точка входа - это «холодный старт», которая будет выполнять любую команду в буфере команд. Вторая точка входа - «теплый старт» - она будет игнорировать любую команду, предварительно инициализированную в буфере.
но не помогло. Все-равно вываливается в A>, как при «теплом старте» без флага в BIOS CP/M (бита режима).
Ну и на последок поэкспериментировал со стандартными файлами автозапуска в CP/M-80 ($$$.SUB) и в МикроДОС (INITIAL.SUB). А так же с утилитой SUBMIT (SUBMIT.COM, SUBM.COM). Оказалось все эти способы запуска командных файлов ведут себя по разному и требуют немного разный формат файлов. С форматом запуска утилиты-компаньона XSUB (XSUB.СOM) для SUBMIT с ходу разобраться не удалось - в образах не нашлось примера вызова XSUB, но нашлась небольшая дока - размещу в конце поста. Остальные форматы расписал ниже.
Итак, вот что удалось выяснить методом проб и ошибок:
В CP/M-80 автоматически запускается командный файл $$$.SUB, при его наличие на дискете.
После выполнения этот файл $$$.SUB автоматически удаляется.
В файл можно поместить только одну команду.
Формат файла:
1 байт - любой символ кроме NULL - 00h. Например, пробел - 20h. Утилиты SUBMIT при создании файла $$$.SUB в автоматическом режиме, на место этого пробела обычно ставят символ с кодом - 05h, но это не критично, символ может быть любой кроме NULL.
Далее со 2-го байта пишем нашу команду для автозапуска, например KLAD1.
Символ конца строки или конца файла не требуется.
ПРОБЕЛKLAD1
http://zx-pk.ru/attachment.php?attachmentid=75490
http://zx-pk.ru/attachment.php?attachmentid=75493
В МикроДОС автоматически запускается командный файл INITIAL.SUB, при его наличие на дискете.
После выполнения этот файл INITIAL.SUB НЕ удаляется.
В файл можно поместить несколько команд.
Для этого с самого первого байта пишем КОМАНДУ1.
Далее символ перехода на новую строку: либо только один возврат каретки (CR) с кодом 0Dh, либо возврат каретки+подача строки (CR+LF) с кодами 0Dh+0Ah.
Далее пишем КОМАНДУ2 и так же символ перехода на новую строку.
Символ конца файла не требуется.
KLAD1CR
KLAD2CR
http://zx-pk.ru/attachment.php?attachmentid=75491
http://zx-pk.ru/attachment.php?attachmentid=75494
Командный файл *.SUB запускается с помощью утилиты SUBMIT (SUBMIT.COM, SUBM.COM) командой: SUBMIT ИМЯ
Например: SUBMIT 123.SUB
После выполнения запускаемый SUB-файл НЕ удаляется.
В файл можно поместить несколько команд.
Для этого с самого первого байта пишем КОМАНДУ1.
Далее символ перехода на новую строку: либо только один возврат каретки (CR) с кодом 0Dh, либо возврат каретки+подача строки (CR+LF) с кодами 0Dh+0Ah.
Далее пишем КОМАНДУ2 и так же символ перехода на новую строку.
После крайнего символа перехода на новую строку ОБЯЗАТЕЛЬНО ставим символ конца текстовых файлов или конца вводимых с консоли данных в CP/M (SUBSTITUTE) с кодом 1Ah .
Без символа конца файла 1Ah командный файл *.SUB не выполнится, а SUBMIT.COM просто вернет управление в командную строку.
KLAD1CRCF
KLAD2CRCF
SUB
http://zx-pk.ru/attachment.php?attachmentid=75492
http://zx-pk.ru/attachment.php?attachmentid=75495
При запуске SUB-файла через SUBMIT.COM, его содержимое автоматически копируется в $$$.SUB, что позволяет выполнить до конца список команд, например после спонтанной перезагрузки.
А вот добавить SUBM.COM или SUBMIT.COM в автозапуск BIOSa CP/M через HEX (https://zx-pk.ru/threads/32831-avtozapusk-programm-os-sr-m-na-korvete.html?p=1105102&viewfull=1#post1105102), чтобы получить аналог AUTOEXEC.BAT из MS-DOS мне не удалось. Сама утилита SUBMIT запускается, но параметр с именем командного SUB-файла записанный дальше ни через пробел (20h) ни через NULL (00h) не опознает. Так же пробовал добавлять после имени SUB-файла в разных сочетаниях символы конца ввода SUBSTITUTE - 1Ah, символы каретки CR - 0Dh, подачи строки LF - 0Ah - все равно не стартует с разными сообщениями. Если у кого получится - пишите.
Образы с настроенными автозапусками для экспериментов: 75498
Ну и немного информации по SUBMIT.COM и её компаньону XSUB.COM из официальной доки:
2.3 SUBMIT - запуск на выполнение командного файла
---------------------------------------------------
Параметры запуска:
SUBMIT filename a b c ...
Запуск на выполнение командного файла "filename" (с
расширением ".SUB") с предварительной заменой в тексте
параметров:
"$1" - значением "a"
"$2" - значением "b"
"$3" - значением "c" и т.д.
2.4 XSUB - расширение программы "SUBMIT"
-----------------------------------------
Эта команда размещается в командных файлах (с расшире
нием ".SUB") для передачи команд и данных другим программам,
которые запущены на выполнение программой "SUBMIT".
Самостоятельно эта команда не используется.
Формат файла:
1 байт - любой символ кроме NULL - 00h. Например, пробел - 20h. Утилиты SUBMIT при создании файла $$$.SUB в автоматическом режиме, на место этого пробела обычно ставят символ с кодом - 05h, но это не критично, символ может быть любой кроме NULL.
Далее со 2-го байта пишем нашу команду для автозапуска, например KLAD1.
Символ конца строки или конца файла не требуется.
Вообще-то, первый байт это длина команды, именно поэтому символ конца строки и не требуется. Для KLAD1 как раз будет 05h.
Как я писал выше, можно и несколько команд, но они идут в обратном порядке и размещаются в блоках по 128 байт. Программа SUBMIT подставляет параметры $1,$2,... и генерирует такой файл.
В СР/М есть три функции "старта": ФУНКЦИИ BIOS: ФУНКЦИЯ 0: BOOT, ФУНКЦИЯ 1: WBOOT; ФУНКЦИИ BDOS: ФУНКЦИЯ 0: WBOOT - процедура "горячий старт"
ФУНКЦИИ BIOS:
ФУНКЦИЯ 0: BOOT
Входные параметры: НЕТ.
Выходные параметры: НЕТ.
Действие: - осущестляет инициализацию всех устройств;
- осущестляет инициализацию системной области;
- осущестляет инициализацию внутренних переменных;
- выводит на консоль начальное сообщение;
- устанавливает <user 0> и диск по умочанию "A:".
Эта функция вызывается обычно только один раз, при
холодном старте системы. Управление после этой функции
передается функции 1 (WBOOT).
ФУНКЦИЯ 1: WBOOT
Входные параметры: НЕТ.
Выходные параметры: НЕТ.
Действие: - реинициализация :
- контроллера прерываний;
- последовательного интерфейса;
- таймера;
- графического контроллера;
- алфавитно-цифрового контроллера;
- просмотровой таблицы;
- части системной области, связанной с прерываниями;
- сброс дисковой системы;
- очистка графического экрана;
- разрешение подтверждения нажатия клавиши звуком;
- перезагрузка CCP и BDOS;
- инициализация команд перехода функций
- теплого старта и BDOS;
- установка адреса буфера обмена по умолчанию;
- передает управление CCP.
Эта функция вызывается обычно при завершении работы
текущей программы, либо при вызове с клавиатуры "теплого
старта" (^C).
ФУНКЦИИ BDOS:
ФУНКЦИЯ 0: WBOOT - процедура "горячий старт"
входные параметры:
регистр С: 00Н
Процедура "горячий старт" загружает в ОЗУ CCP и BDOS и
передает управление операционной системе ОС на уровень CCP.
CCP активизирует диск А. Действие этой функции эквивалентно
безусловному переходу по адресу 0000H.
А по адресу 0000H у нас
0000 C3 JMP WBOOT ; горячий старт
0001 03
0002 DA
В Паскале опробовал все три функции (в автозапуске прописан Проффер), во всех случаях успешно стартонул Проффер.
Позже опробую тестовые программы (с завершением всеми способами) в пакетном файле.
Вот в описаниях процедур "теплого старта" и БСВВ и БДОС заметил некую странность: функция 0 БДОС - "Действие этой функции эквивалентно безусловному переходу по адресу 0000H", т.е. вызов функции БСВВ №1. В описании функции 1 БСВВ: "Эта функция вызывается обычно при завершении работы текущей программы, либо при вызове с клавиатуры "теплого старта" (^C)". Но ведь при ^C прерыватся выполнение текущей программы (если в ней эта возможность предусмотрена) или файла $$$.SUB (при этом он удаляется).
А вот добавить SUBM.COM или SUBMIT.COM в автозапуск BIOSa CP/M через HEX, чтобы получить аналог AUTOEXEC.BAT из MS-DOS мне не удалось. Сама утилита SUBMIT запускается, но параметр с именем командного SUB-файла записанный дальше ни через пробел (20h) ни через NULL (00h) не опознает. Опознает и успешно обрабатывает исходный файл, создает $$$.SUB; завершает свою работу вызывая "теплый старт". И тут же повторно запускается... Замкнутый круг..
Самая большая загадка в том, что $$$.SUB (При этом совсем не важно, как $$$.SUB появился на диске) не выполняется если в автозапуске что-то прописано (выполняется это "что-то"), а вот при прописанном DED.COM (или ничего не прописано) - выполняется.
В CP/M-80 работает аналогично
4.5.7. Утилита SUBMIT интерпретации командных файлов
Утилита SUBMIT обеспечивает выполнение в пакетном режиме последовательности команд МикроДОС.
Вызов утилиты SUBMIT производитсмя командой:
SUBMIT указатель парам1,...,парам№
где параметр "указатель" содержит указатель файла, в котором имя файла определяется явно;
параметры "парам1,...,парам№" - определяет фактические значения для соответствующих фиктивных
параметров в командном файле.
Указанный в команде файл должен иметь тип .SUB.
Файл .SUB содержит прототипы команд МикроДОС с фиктивными параметрами. Фактические параметры
"парам1,...,парам№" подставляются в прототипы команд, и, если не появляется ошибок, файл с
преобразованными командами обрабатывается последовательно МикроДОС. Причем параметры "$",
являющиеся фиктивными параметрами, представленные в виде "$1 ... $№" должны соответствовать
количеству фактических параметров, которые будут использоваться при подготовке файла .SUB к
выполнению. В процессе выполнения транзитной команды SUBMIT в прототипах команд фиктивные
параметры заменяются соответствующими фактическими параметрами. Если количество
фактических параметров не совпадает с количеством фиктивных параметров, то выполнение
команды SUBMIT прерыватся и на экран ВКУ выдается сообщение об ошибке.
Также при подготовке файла .SUB к выполнению последовательности символов "$$" преобразуется в
символ "$", а последовательности символов "^литера" - в соответствующий управляющий
символ "УПР+литера". Под "литерой" здесь подразумевается любой символ верхнего латинского регистра.
Информация .SUB-файла, подготовленная для выполнения, записывается в исполняемый командный файл
$$$.SUB на диск текущего дисковода.
Запуск исполняемого командного файла $$$.SUB осуществляется в процедуре "теплого старта", которая
выполняется по завершении работы утилиты SUBMIT.
Пользователь может прервать выполнение команд в пакетном режиме вводом символа УПР+С, когда
система вводит очередную команду из файла $$$.SUB. В этом случае файл $$$.SUB уничтожается, а
последующие команды вводятся с клавиатуры. Обработка команд также прекращается, если
обнаруживается ошибка в какой-то из этих команд. Прерывание обработки команд может быть вызвано
преждевременным удалением файла $$$.SUB.
Последняя команда в файле .SUB может инициировать другой файл .SUB, создавая таким образом
связанный поток команд.
Исходный командный файл для SUBMIT можно создать любым редактором текстов или с помощью
утилиты COPY.
Следует учесть следующее ограничение, накладываемое утилитой SUBMIT: длины командных строк
в создаваемом файле $$$.SUB не должны превышать 126 символов.
В случае обнаружения утилитой SUBMIT какой-либо ошибки на экран ВКУ выдается соответствующее
сообщение, утилита SUBMITпрекращает свою работу и возвращает управление МикроДОС без
создания исполняемого командного файла $$$.SUB.
Сообщения об ошибках могут быть следующими:
ОШИБКА В СТРОКЕ 'номер строки' НЕТ 'SUB'-ФАЙЛА
ОШИБКА В СТРОКЕ 'номер строки' СЛИШКОМ ДЛИННАЯ КОМАНДА
ОШИБКА В СТРОКЕ 'номер строки' ОШИБКА В СИМВОЛЕ УПРАВЛЕНИЯ
ОШИБКА В СТРОКЕ 'номер строки' ОШИБКА В ПАРАМЕТРЕ
ОШИБКА В СТРОКЕ 'номер строки' ОШИБКА ДИСКА
ОШИБКА В СТРОКЕ 'номер строки' ПЕРЕПОЛНЕНИЕ БУФЕРА
ОШИБКА В СТРОКЕ 'номер строки' ПЕРЕПОЛНЕНИЕ ОГЛАВЛЕНИЯ
ОШИБКА В СТРОКЕ 'номер строки' ОШИБКА ЗАКРЫТИЯ ФАЙЛА
где 'номер строки' - трехзначное десятичное число.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot