Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Старый софт »   Программы под RT-11
RSS

Программы под RT-11

компиляторы, редакторы, игры, документация и пр. для УК-НЦ, ДВК и др.

<<Назад  Вперед>> Страницы: 1 2 3 4
Печать
 
xoiss
Гость

Ссылка

В этой теме буду публиковать публикуем ссылки на архивы и образы дисков с программами для PDP-11-совместимых машин (преимущественно УК-НЦ и ДВК) под управлением операционной системы RT-11 и её советских форков (ФОДОС, РАФОС).

Также приветствуются программы для других компьютеров (например, IBM PC совместимых), но только если они предназначены или как-то могут быть с пользой применены для работы с RT-11. Например, эмуляторы RT-11 или ДВК, коммуникационные программы, редакторы образов дисков RT-11 и т.п.

Очень приветствуются размещаемые здесь комментарии-статьи с описанием, как этими программами пользоваться. (и, пока я наделён правами модератора "Призраков", обещаю, будут поощряться)
Отмечу, что в Интернетах, конечно же, предостаточно и тем, и целых сайтов, где публикуются архивы программ, образы каких-то дисков, сканы документации, в общем, Гига-, Тера- и Пета-байты чего-то... Но мало, крайне мало, хотя бы даже элементарных каталогов того, что же там внутри, не говоря уже о step-by-step / quick-start инструкциях. В итоге, увы, 90+% этого богатства лежит либо неподъёмным, либо и вовсе неопознанным и, как следствие, потерянным для нашего Занятия. Вот. Если Вы согласны с тем, что это неправильно, что так не должно быть, и если Вы можете это хоть как-то исправить — приходите! Вы нужны здесь!



Опубликовано:
- [new] обмен информацией с ОС RT-11 (на примере ДВК) через последовательный порт, используя протокол Kermit
- компилятор Си для RT-11 ДВК + пошаговая инструкция + приложение - симулятор Б3-23



Разыскивается:
... присылайте мне запросы в личку — буду их впечатывать в этот прикреплённый пост, чтоб всегда видно было
... или оставляйте их в комментариях к Теме — тогда кто-нибудь (я или Модератор Раздела) перенесёт их сюда в список

Прежде чем попросить что-то разыскать, попробуйте поискать "это" вот на этом сайте: http://pdp-11.ru
Там реально очень много чего есть!

Если поискали и убедились, что там "этого" нет, то тогда есть смысл написать запрос на поиск.
Но желательно запрос сделать максимально конкретным. То есть не надо делать запросы вроде "ищу софт для RT-11".
Примеры запросов:
- ищу игры пакета "Роботландия" — это уже в достаточной мере конкретный запрос, хотя речь идёт и не о конкретной программе
- ищу "Бейсик Вильнюс УК-НЦ" версия именно 1987 года (но не 1988 года) и именно для преподавательской машины (т.е. LOAD/SAVE направлены на дисковод, а не в сеть)


Сейчас на форуме
xoiss
Гость

Ссылка

Система программирования на языке "C" от НПК ДИАЛОГ.

... — образ диска в структурированном формате dsk — создан программой SAMdisk, годится для нарезки дискеток
... — простой линейный образ диска — годится для эмулятора RT-11
... — директория с файлами, извлечёнными из образа диска — содержимое можно смотреть/читать непосредственно с персоналки
[upd] по просьбе Модератора ссылки временно убрал. Страждущим предлагаю писать мне на e-mail

Система поставлялась на одной дискете ёмкостью 800 кб.

Мне она досталась, в общем, случайно — переписал у школьного приятеля где-то в начале 90-х.
Так вот и лежала 25 лет, пока пару месяцев назад мы её не сдампили с ребятами из Яндекс-музея.
http://www.phantom.sannata.ru/...0#pp459960

Моя копия содержит все файлы, заявленные в описи диска, и не содержит привнесённого мусора.
В общем, выглядит как точная копия оригинального дистрибутива.

На диске содержится файл README.1ST, в котором:
- заявлен "распространитель" данной Системы — 103460, г. Москва, научно-производственный кооператив "ДИАЛОГ", тел. 536-83-83
- а также содержится его (почти дословно) просьба не тиражировать данную Систему "подпольно"

Мои не очень настойчивые попытки найти эту организацию и как-то связаться с ними не увенчались успехом.
Индекса такого больше нет, но, вроде бы, он ранее принадлежал отделению Почты РФ № 460 в г. Зеленоград (Москва).
Телефон, похоже, как-то сменился, т.к. попытка набрать этот номер с кодом города 495 или 499 переводит на авто-ответ "неправильно набран номер".
Да и самой такой организации поисковики Яндекс и Гугл в Москве не обнаруживают (если не считать одноимённой компании в г. Пермь, закрывшейся в 2001 году).

В общем, с условного разрешения Администрации Сайта (http://www.phantom.sannata.ru/forum/index.php?t=31089&p=474289#pp474289) публикую ссылки для скачивания.

Если отыщется автор этой Системы или правообладатель — прошу поставить меня или Администрацию Сайта в известность, дабы стало возможным урегулировать правовые вопросы.
// ... очень надеюсь, что среди посетителей этого Сайта не очень много прозорливых-юмористов-якобы-правообладателей, желающих получить антиплюс(ы) за нелепую попытку потроллить окружающих в отношении данного вопроса

Чуть позже добавлю материалы, как это хозяйство запустить, и как им воспользоваться по прямому назначению.
Сейчас на форуме
svinka
Advanced Member
Сеньор

Откуда: Совчина
Всего сообщений: 1585
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
25 июня 2016
xoiss написал:
[q]
и её советских форков (ФОДОС, РАФОС)
[/q]
Ни один из переводов слова fork не предполагает кражу.
xoiss
Гость

Ссылка

Компилятор Си для RT-11 — как запустить.

Нам потребуется:
1. Эмулятор RT-11
2. Скаченный raw-образ дискеты или архив с файлами
3. Немножко знаний по RT-11, языку Си и процессу компиляции в целом

С этим мы сделаем:
4. Программа Hello, world! — ну а как же без неё то?!
5. Познакомимся с особенностями диалекта K&R



1. Эмулятор RT-11

Для первого запуска я рекомендую взять именно эмулятор, причём именно эмулятор RT-11, но не конкретного компьютера (ДВК или УК-НЦ) под управлением RT-11.
Конечно, можно взять и настоящий компьютер, нарезать дискетку из dsk-образа и т.д. — но я здесь не буду рассматривать этот путь как сильно выходящий за рамки "программы минимум".
Можно попробовать эмулятор не RT-11, а ДВК или УК-НЦ — но я сам этот путь не проверял, и потенциально Вы можете столкнуться с какими-то искусственными дополнительными ограничениями эмулируемого компьютера. Например, с нехваткой места на диске...

В общем, если я Вас убедил, что нужно воспользоваться эмулятором RT-11 — то Вы можете взять его отсюда:
http://zx-pk.ru/threads/24755-emulyator-rt-11.html

Если у Вас не Windows, а Linux или macOS, или Solaris, или FreeBSD, или... — ну, поставьте себе какой-нибудь виртуальный бокс и смонтируйте в него Windows. Как вариант.
Либо воспользуйтесь эмулятором SIMH — он есть под все платформы. Либо сами попробуйте поискать онлайновый симулятор RT-11... может, где есть такой (я не искал).

Эмулятор RT-11 по указанной мною ссылке распакуйте, скажем, в директорию c:\rt11
В этом каталоге Вы найдёте исполняемый файл rt11.exe — попробуйте его запустить.
Откроется консольное окно, и в нём будет приглашение от ОС RT-11 к вводу команды (символ "точка").

Команды системы, которые Вам наверняка понадобятся:
- сочетание клавиш Ctrl+C — отменяет набранную команду или останавливает программу
- exit — завершить работу (можно просто окно консоли закрыть)
- help — справка по командам системы
- dir — посмотреть каталог диска
- type — вывести текстовый файл на экран
- show — показать смонтированные диски и назначение логических дисков
- mount — смонтировать "физический" диск
- assign — назначить "логический" диск
- run — запустить программу
- del — удалить файл
// на самом деле команд очень много, и у них есть масса опций — так что наличие справочной документации к RT-11 совсем не помешает (см. далее п.3)

Текстовые редакторы K52 или KED я здесь рассматривать не буду — это за пределами данной подТемы.

У меня команда show показывает вот что:
[q]
.show
TT
HD (Resident)
HD0 = SY
HD1 = DK
SL (Loaded)
LD
NL
17 free slots
[/q]
// здесь и далее "точку" перед командой печатать не нужно :) — она уже напечатана системой — т.е. это приглашение к вводу — печатаем только саму команду show

То есть, в системе есть два "физических" диска hd0 и hd1, и им назначены логические имена sy и dk.
У Вас, скорее всего, будет так же.

В диск hd0 смонтирован образ загрузочного диска RT-11 с массой полезных программ. Из них нам понадобится линковщик LINK.SAV
Обращаться к содержимому этого диска можно с указанием имени физического диска hd0: или назначенного ему логического имени sy:

В диск hd1 смонтирован каталог хост-системы (windows), который является текущим (working directory) для запущенной программы (rt11.exe).
Если Вы запустили rt11.exe двойным кликом мышки из директории c:\rt11, то в hd1 будет смонтирована директория c:\rt11

Посмотреть содержимое диска hd1 можно командой dir. Имя диска здесь указывать не обязательно, т.к. этому диску назначено логическое имя dk (что значит "диск по умолчанию"):
[q]
.dir
25-Oct-2018
README.RUS 5 28-Nov-2017 README.TXT 4 28-Nov-2017
RT11 .EXE 2736 28-Nov-2017
3 Files, 2745 Blocks
62722 Free blocks
[/q]
Можно заметить, что среди файлов есть и сам эмулятор RT11.EXE — ну, вполне ожидаемо — для RT-11 это просто "какой-то файл".
И обратите внимание, как много свободных блоков на этом диске — аж 62722 (это 30 Мб!) — вот почему, в том числе, я рекомендую для начала именно эмулятор RT-11, а не конкретной ЭВМ, и уж тем более не всамделишную ДВК или УК-НЦ.

Если Вы хотите, чтобы в диск hd1 был смонтирован другой каталог хост-системы (Windows), то нужно сделать следующее:
- закройте сессию эмулятора, вернитесь в Windows
- откройте сеанс MS-DOS — т.е. запустите cmd.exe
- перейдите в нём в желаемый каталог, например, в c:\rt11\rt11cc
- и запустите эмулятор с указанием пути к rt11.exe — например, так: ..\rt11.exe
- теперь текущим каталогом для rt11.exe будет выбранная Вами директория — и она будет смонтирована в диск hd1 (он же - диск dk)

Вот пример сеанса с запуском через cmd.exe:
[q]
Microsoft Windows [Version 10.0.14393]
© Корпорация Майкрософт (Microsoft Corporation), 2016. Все права защищены.

C:\rt11\rt11cc> ..\rt11.exe

.dir
25-Oct-2018
ANTIO .MAC 1 03-Jul-1989 ANTIO .OBJ 1 03-Jul-1989
AS .SAV 65 03-Jul-1989 ASPEIS.OBJ 3 03-Jul-1989
... ... ...
TRAPS .MAC 6 03-Jul-1989 TS41 .H 5 03-Jul-1989
70 Files, 1564 Blocks
63903 Free blocks
[/q]
Теперь видно содержимое каталога c:\rt11\rt11cc, а не c:\rt11

Я использую именно этот способ работы, т.к. он требует вводить чуть меньше команд в эмуляторе (не надо монтировать образ диска — он сам монтируется).
Содержимое каталога rt11cc Вы можете взять из архива rt11cc.zip

Но есть и другой путь — использовать образ оригинальной дискетки и монтировать его в ещё один диск в эмуляторе.

Для этого поместите файл rt11cc.raw, например, в каталог c:\rt11 и запустите эмулятор.
Посмотрите содержимое диска hd1 — Вы должны увидеть там файл rt11cc.raw
Если такого файла нет — просто перезапустите эмулятор (запустите его именно из каталога c:\rt11), чтобы он заново считал содержимое каталога хост-системы.
Важно: если Вы надумаете переименовать файл, то его имя должно иметь не более 6 символов, а расширение - не более 3 символов. Иначе RT-11 его не увидит!
Смонтируйте образ в диск LD — и наслаждайтесь.

Вот как выглядит сеанс в RT-11:
[q]
.dir
25-Oct-2018
README.RUS 5 28-Nov-2017 README.TXT 4 28-Nov-2017
RT11 .EXE 2736 28-Nov-2017 RT11CC.RAW 1600 25-Oct-2018
4 Files, 4345 Blocks
61122 Free blocks

.mount ld: rt11cc.raw

.dir ld:
25-Oct-2018
README.1ST 7P 05-Mar-1993 COPY .COM 3P 05-Mar-1993
CC .SAV 226P 03-Jul-1989 AS .SAV 65P 03-Jul-1989
... ... ...
SBREAK.MAC 6P 03-Jul-1989 ATIO .MAC 15P 03-Jul-1989
54 Files, 1554 Blocks
32 Free blocks
[/q]
У нас в системе теперь появился ещё один "физический" диск — LD — и в него смонтировано содержимое файла rt11cc.raw
Обратите внимание, что на этом диске очень мало свободного места. То есть компилировать свои великие проекты Вам придётся на другом диске.

Теперь мы готовы что-нибудь покомпилировать.



2. Скаченный raw-образ дискеты или архив с файлами

Всего есть три файла-zip-архива.
Все они так или иначе в конечном итоге содержат абсолютно одинаковое содержимое.
Различаются они лишь тем, как Вы будете их использовать.
// в общем-то достаточно было бы опубликовать только один архив, но я немного позаботился о Вашем удобстве и сделал часть рутинной работы

Файл rt11cc.dsk — это образ дискетки в специальном структурированном формате DSK.
Важно: эмулятор RT-11 не воспринимает этот формат для команды mount. // точнее, он его воспримет, конечно, но не сможет найти в таком "диске" каталог файловой системы
Этот файл предназначен для нарезания дискеток, если Вы захотите это сделать.
Для нарезки дискеток можно (рекомендую) воспользоваться программой SAMdisk: https://simonowen.com/samdisk/
// собственно, этой же программой данный файл и был изначально создан из оригинальной дискетки.

Файл rt11cc.raw — это простой линейный (посекторный) образ дискетки. Его размер равен в точности 800 кб.
Этот файл можно смонтировать как диск в эмуляторе RT-11.
// что касается других эмуляторов — не знаю, не проверял — но, скорее всего, подойдёт.

Архив rt11cc.zip с каталогом rt11cc — это просто содержимое "как есть", вынутое из файла rt11cc.raw.
Его можно поместить в рабочий каталог эмулятора (см. п.1 выше) и на этом же диске держать файлы своего маленького проектика.
И, кроме того, этим каталогом удобно пользоваться для чтения документации к компилятору (там аж 9 книг!), а также изучения заголовочных (.H) и исходных (.MAC) файлов системных библиотек.
Поверьте, читать эти файлы и искать что-то по ним гораздо проще и приятнее средствами хост-системы (Windows), нежели средствами RT-11.

Если файлы почему-то как-то не так открываются в Вашем текстовом редакторе, то очень рекомендую Notepad++: https://notepad-plus-plus.org



3. Немножко знаний по RT-11, языку Си и процессу компиляции в целом

Справка по командам RT-11 (на русском):
http://www.emuverse.ru/downloa...foshlp.htm
http://pdp-11.ru/mybk/doc/RTMON.TXT

Очень толковое и детальное описание системы команд и всяких аспектов работы с дисками в RT-11 (на английском):
http://ftpmirror.your.org/pub/..._Aug91.pdf
http://www.bitsavers.org/pdf/d..._Aug91.pdf

Справка по языку Си — ... ну, надеюсь, общие знания у Вас есть — если совсем нет, то начните вот с этого: статья про язык Си на Википедии

Ну, могу ещё порекомендовать книжку: самая главная книжка по языку Си
// где забесплатно скачать её перевод на русский — это Вы уже сами ищите

Процесс компиляции в средние века выглядел примерно так:
1. Берём файл с исходным кодом (расширение .c) и запускаем препроцессор (программа CPP, как ни странно) — он, в частности, подтягивает все заголовочные файлы (.h) и на выходе производит монолитный файл чисто на Си — т.н. "единица трансляции" (расширение .i)
2. Берём единицу трансляции (.i) на языке Си и компилируем (программа CC) — на выходе получаем файл на ассемблере (.s)
3. Далее ассемблерный файл (.s) компилируем ассемблером (программа AS) — на выходе получаем т.н. "объектный файл" (расширение .o в UNIX или .obj если это RT-11) — это уже почти бинарь, но в котором пока не назначены адреса функций и переменных, нет библиотечных функций и ещё много чего
4. Повторяем пункты 1-4 для всех исходных файлов проекта, если их несколько — в итоге получаем соответствующее количество объектных файлов
5. Если какая-то часть проекта написана на других языках (Паскаль, Фортран или прямо на ассемблере, в т.ч. MACRO-11), то компилируем их и тоже получаем на выходе объектные файлы
6. И наконец, весь комплект объектных файлов (.obj), с добавлением библиотек передаём линковщику (программа LINK) — здесь мы хотим получить именно исполняемое приложение (файл с расширением .sav в RT-11)
// я здесь не буду рассматривать случаи разработки системных библиотек или драйверов — только "обычные" пользовательские приложения
// ... и ещё, прошу профессоров палеонтологии принять во внимание, что я пытаюсь доступным (упрощённым) языком рассказать довольно сложные и не совсем легко систематизируемые вещи — поэтому могут быть весьма сильные "обобщения"

В случае же конкретно с Этой системой для RT-11 разработчики сделали следующее:
- препроцессор интегрирован в компилятор и таким образом отдельной программы CPP в поставке нет — используется программа CC.SAV
- ... соответственно нет такой вот выделенной ручной стадии, как запуск препроцессора — хотя всё же возможность получить отпостпроцессированный i-файл сохранена
- ассемблер выполнен отдельной программой AS.SAV и его действительно можно запускать отдельно на входном s-файле (который можно получить компилятором) — но, таки, по умолчанию компилятор сам запускает ассемблер, чтобы максимально автоматизировать этот рутинный процесс
- в общем, если запустить компилятор без специальных опций, то на входе он принимает один c-файл, препроцессит его, компилирует, и на выходе выдаёт один объектный файл

Чем процесс всё же отличается от современного привычного нам процесса:
- из коробки нет никакой автоматизации типа make — равно как и нет никакой поддержки со стороны компилятора по формированию "списка зависимостей", так необходимого в современном мире в больших проектах (см. "инкрементальная сборка" ... ну, хотя бы вот тут: https://stackoverflow.com/ques...al-builds)
- компилятор не умеет вызывать линковщик — т.е. LINK.SAV придётся запускать вручную (и на данной дискетке линковщика вообще нет, т.е. он должен быть в составе RT-11)
- компилятор не умеет компилировать сразу несколько c-файлов — только по-одному — это несколько утомительно, если файлов действительно много

Немного об особенностях этого компилятора я расскажу ниже (см. п.5).

Внимательный специалист, наверное, заметил, что компилятор использует некий ассемблер AS.
Да, это не MACRO-11, и, более того, это AT&T ассемблер. То есть, у него слегка другой диалект, нежели у MACRO-11 (хотя и не до такой степени "другой", как, скажем, у родного Интеловского ассемблера).

Ну, и, конечно, же ... читайте прилагаемую документацию! (файлики .lst на диске) — в ней ВСЁ написано русским по белому.
Советую начать, как ни странно, с первой книги — CCPROG.LST
// можете её даже распечатать, как рекомендуют разработчики Системы :)



4. Программа Hello, world! — ну а как же без неё то?!

Здесь я буду исходить из того, что в диск hd1 (он же dk) смонтирован каталог c:\rt11\rt11cc со всеми файлами Системы Си.
Если же Вы таки примонтировали файл-образ rt11cc.raw, и смонтировали его в диск ld, то я сделаю на эту тему пару комментариев по тексту ниже.

На хост-системе создаём текстовый файл hello.c со следующим содержимым:
[q]
#include >stdio.h>
main()
{
printf("Hello, world!\n");
}
[/q]
Важно: в системе RT-11 символ конца строки — как в Windows — это комбинация двух символов CR LF.
Убедитесь, что Ваш текстовый редактор вставляет именно такие концы строк (особенно если у Вас хост-система не Windows).

Важно: помним, что имя файла должно быть не более 6 символов. Обязательно расширение, не более 3 символов. Набор символов ограничен алфавитом RADIX-50: https://en.wikipedia.org/wiki/DEC_Radix-50

Файлик нужно положить в тот каталог на хост-системе, который будет смонтирован в диск hd1 (об этом см. п.1).
- если систему положили в каталог c:\rt11\rt11cc и его монтируем в hd1, то и файлик hello.c положите туда же
- если систему смонтировали из файла rt11cc.raw, который положили, например, в каталог c:\rt11, то и файлик hello.c тоже положите в c:\rt11

Запускаем эмулятор RT-11 — см. п.1.
Если он уже был запущен, то обязательно перезапустите его, чтобы он обновил содержимое каталогов хост-системы (иначе он не увидит Ваш файлик hello.c).

Если необходимо, подключаем образ rt11cc.raw командой mount ld: rt11cc.raw (см. п.1 выше).

Теперь проверяем, что на диске dk: есть файлик hello.c:
[q]
Microsoft Windows [Version 10.0.14393]
© Корпорация Майкрософт (Microsoft Corporation), 2016. Все права защищены.

c:\rt11\rt11cc> ..\rt11.exe

.dir h*
25-Oct-2018
HEAD .MAC 1 03-Jul-1989 HELLO .C 1 25-Oct-2018
2 Files, 2 Blocks
63902 Free blocks
[/q]
Вот, файлик присутствует.

Можно его даже посмотреть:
[q]
.type hello.c
#include >stdio.h>
main()
{
printf("Hello, world!\n");
}
[/q]
Вроде, совпадает.

Теперь очень важный момент!
Необходимо в RT-11 создать логический диск c: , который будет связан с тем диском, на котором находится Система Си.
// название диска "c:" здесь не имеет абсолютно ничего общего с диском "c:" в Windows/MS-DOS. В DOS это был "третий диск" (после a: и b:). Здесь же это просто логический диск, который вот так называется. А называется он "c", скорее всего, от названия системы "Си".
Если это не сделать, то ничего не получится!
Компилятор рассчитывает на то, что такой диск в системе есть, и он будет обращаться к нему в поисках, например, заголовочного файла stdio.h

Если система примонтирована в диск hd1 (он же dk), то команда такая: assign hd1: c:
Если система примонтирована в диск ld, то команда такая: assign ld: c:
Вот:
[q]
.assign hd1: c:
[/q]
Теперь запускаем компилятор — в простейшем варианте, т.е. без опций.

В общем случае компилятор находится на логическом диске c: , а файлик hello.c находится на диске dk: (который является диском по умолчанию, и его можно не указывать)
Поэтому команда в общем случае выглядит так:
[q]
.run c:cc hello.c
[/q]
Если компилятор на самом деле находится на диске dk: (т.е. если Вы последовали моему совету и примонтировали Систему из каталога, а не из raw-файла), то c: можно не указывать, конечно же:
[q]
.run cc hello.c
[/q]
У меня всё скомпилировалось.
Если бы были ошибки, то компилятор ругнулся бы.

Результат можно поискать на диске dk:
[q]
.dir h*
25-Oct-2018
HEAD .MAC 1 03-Jul-1989 HELLO .C 1 25-Oct-2018
HELLO .OBJ 1 25-Oct-2018
3 Files, 3 Blocks
63901 Free blocks
[/q]
Отлично, файлик hello.obj имеется.

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

Линковщик в эмуляторе RT-11 (см. п.1) находится на системном (загрузочном) диске hd0 (он же sy).
Поэтому вызываем его с указанием диска — вот такой командой:
[q]
.run sy:link
*
[/q]
Приглашение сменилось с точки на звёздочку — это субконсоль линковщика.
То есть, в неё нужно вводить команды линковщику, а не системе RT-11.

Вводим задание на линковку:
[q]
*hello=c:speis,c:cxlib,dk:hello
[/q]
// разумеется "звёздочку", как и "точку" в консоли RT-11, здесь впечатывать не нужно — это просто приглашение к вводу от линковщика

Обратите внимание, что файлики справа от = необходимо указывать с указанием дисков, на которых они лежат!
Иначе линковщик их не найдёт.

И вот именно поэтому я ещё раз рекомендую монтировать Систему Си из каталога (а не из файла-образа), и в этом же каталоге работать со своими плохенькими c-файлами — тогда не надо будет постоянно указывать названия дисков — ибо диск c: будет совпадать с диском dk: — а команда линковщику тогда будет существенно короче:
[q]
*hello=speis,cxlib,hello
[/q]
У меня всё слинковалось.
Если что-то не так, то линковщик ругнётся.

Что здесь к чему:
- первое hello — это имя будущей программы — файл HELLO.SAV, который должен быть создан на диске dk:
- знак = — это что-то типа разделителя
- speis — это системная библиотека (файл SPEIS.OBJ) — он на диске Си — диск c: — что-то там для поддержки набора инструкций EIS — в жизни это годится для УК-НЦ (км1801вм2) и старших ДВК
- cxlib — это самая главная системная библиотека (файл CXLIB.OBJ) — он тоже на диске Си — диск c:
- hello в конце — это ранее скомпилированный Вами объектный файл HELLO.OBJ — он находится на диске dk:

Чтобы вернуться из субконсоли линковщика в консоль RT-11, нажмите Ctrl+C.
Приглашение сменится на точку.

Убедимся, что файлик создан:
[q]
.dir h*
25-Oct-2018
HEAD .MAC 1 03-Jul-1989 HELLO .C 1 25-Oct-2018
HELLO .OBJ 1 25-Oct-2018 HELLO .SAV 9 25-Oct-2018
4 Files, 12 Blocks
63892 Free blocks
[/q]
Да, действительно появился файл HELLO.SAV

Ну, и наконец, запустим его:
[q]
.run hello
#
Hello, world!
[/q]
У меня при запуске программа сначала открывает свою субконсоль запрашивает ввод аргументов командной строки (символ # и приглашение к вводу), в которой приходится нажать клавишу ENTER, чтобы она удовлетворилась.
После чего уже программа печатает столь долгожданное Hello, world!

Честно, я пока не разобрался, как сделать так, чтоб эта простая программка не открывала субконсоль. :)

Можно воспользоваться хаком:
[q]
.run hello .
Hello, world!
[/q]
Но это какой-то некрасивый путь.

В общем, если кто знает КАК сделать правильно — напишите, пожалуйста.
Я, если честно, вообще не умею работать в RT-11.

Содержимое файла HELLO.SAV можно посмотреть в виде восьмеричного дампа:
[q]
.dump/terminal hello.sav
DK:HELLO.SAV
BLOCK NUMBER 000000
000/ 000000 000000 000000 000000 000000 000000 000000 000000 *................*
020/ 000000 000000 000000 000000 000000 000000 000000 000000 *................*
040/ 001522 001000 000000 000000 010024 000000 000000 000000 *R...............*
... ... ...
BLOCK NUMBER 000002
000/ 012702 001444 020227 001504 103005 012216 001773 004767 *B.$.. D.....{.w.*
020/ 002010 000770 000167 000530 004567 000510 013701 000050 *..x.w.X.w.H.A.(.*
040/ 042701 000001 010167 176760 042767 000001 176754 005767 *AE..w.p}wE..l}w.*
... ... ...
[/q]
Команда dump по умолчанию печатает на принтер, поэтому её надо вызывать именно с опцией /terminal, чтобы получить вывод в консоль.



5. Познакомимся с особенностями диалекта K&R для RT-11

Ну, я уже немного подустал, поэтому озвучу только действительно важные моменты.

Эта Система даёт нам компилятор с диалекта K&R. То есть, это - нечто, что было до стандарта ANSI (он же C89)... и уж тем более это не C99 или C11.

Наиболее, наверное, заметное отличие этого диалекта от "привычного нам Си" — это то, как объявляются и определяются функции.

Например, определение функции с параметрами будет выглядеть вот так:
[q]
int myfunc(x, y)
int x;
int y;
{
return x + y;
}
[/q]
Обратите внимание, что:
- в списке параметров (в круглых скобках) параметры указаны БЕЗ спецификации типа
- но зато потом МЕЖДУ спецификацией параметров и блоком кода они перечислены с указанием типов

Сейчас так никто не пишет, конечно же, но, что забавно, современные Си компиляторы до сих пор поддерживают эту нотацию!

Объявление функции тоже выглядит нестандартно — здесь параметров вообще не должно быть никаких (даже если потом они таки появятся) — просто пара скобок и всё.

Нет "пустого" типа void. (в некоторых реализациях K&R он всё же есть, но конкретно в Этой его нет).
Тип данных int является типом по умолчанию. Если где-то тип не указан, то это значит — тип int.
Как следствие, функция ВСЕГДА что-нибудь возвращает. Если она ничего не возвращает, то на самом деле она возвращает int-значение, просто оно не определено и использовать его не следует.
Вообще K&R позволяет много вольностей в использовании оператора return. Например, Вы можете забыть его написать (или написать без указания возвращаемого значения) — и тогда словите багу, т.к. функция вернёт наружу (если внешний код ожидает, что она что-то вернёт) просто мусор, который как-то нарисовался в регистре R0.
Компиляторы, начиная с ANSI, накладывают существенно более строгие ограничения на соответствие спецификации функции её де-факто содержимому.

Поля типов-структур принадлежат глобальному пространству имён. Другими словами две разные структуры (в пределах одной единицы трансляции) не могут иметь поля с одинаковыми именами.
Нет типа unsigned char... есть только просто char (тип со знаком). Вот это довольно странно для Си на PDP-11, т.к. сама машина такой тип вообще-то предоставляет.
Зато есть типы float и double (которых в обычном K&R нету). Есть также enum и union.
Нет модификатора const. Константами являются только строковые литералы.

Если хотите в итоге получать эффективный бинарный код, начните использовать модификатор register.
Данный компилятор будет размещать локальные автоматические переменные в регистрах ЦПУ, только ЕСЛИ они объявлены как register. Иначе он их поместит в стек (как если их объявить с модификатором auto).

Диалект K&R ограничивает длину идентификатора 8 символами. Он может быть и длиннее, но два идентификатора, имеющие одинаковые первые 8 символов, будут считаться совпадающими.
В случае с Системой для RT-11 к этому добавляются ещё два ограничения:
- названия функций и переменных должны быть уникальны в первых 6 символах
- а названия глобальных функций и переменных дополнительно должны быть уникальны без учёта регистра — это уже особенность линковщика в RT-11, который не различает регистр
Почему именно 6 символов — ну, всё просто, опять этот вездесущий RADIX-50 — 6 символов идентификатора кодируются в 4 байта, которые потом и используются суть как "числовой идентификатор".
По той же причине и регистр не различается, т.к. в RADIX-50 есть только 26 букв.

Ну, как-то так.

Успехов, коллеги!
Сейчас на форуме
Tronix
Advanced Member


Откуда: Москва
Всего сообщений: 1749
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 янв. 2008
У меня Диалог в мозгу почему-то прочно ассоциируется с DrWeb. И вот с ними: https://www.dialognauka.ru/
По крайней мере вроде помню 5"25 дискеты Диалог - логотип похож на логтип ДиалогНаука, тлько без Науки. Быгыг.
А воще, правильно, что выложили. Достали эти копирасты, везде свой нос суют. На Бетховина копирайты накладывают. И ладно бы там если речь шла о допустим каком-нибудь солид ворксе за мульены баксов, так нет, за какой-то там древний компилятор си для какой-то древней архитектуры, интересный 1,5 человекам от силы максимум. И тут влезли - аааа, пиратство, копирайты!!! Тьфу.
Tronix
Advanced Member


Откуда: Москва
Всего сообщений: 1749
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 янв. 2008
Попутал, не с DrWeb, а с aidstest и Лозинским, но вообщем одна фигня походу. И прошлое у этих всех антивирусов и Диалогов тоже мягко говоря покрытое мраком.
MM
Advanced Member


Откуда: Павловский Посад Мск.обл.
Всего сообщений: 3418
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
2 авг. 2013
xoiss написал:
[q]
Команда dump по умолчанию печатает на принтер, поэтому её надо вызывать именно с опцией /terminal, чтобы получить вывод в консоль.
[/q]
Удалите этот DUMP.SAV - это анахронизьм времен Консула начала 1980-х.
Обычно делается скриншот из окна DESS.SAV

Судя по адресу верха программы 010024 - библиотеки таки имеют место быть, без какой-либо оптимизации ( например, оптимизированный компилятор приделывает только те вызовы, которые упоминаются в тексте пользователя ).

( Неплохо бы привести скриншот библиотеки, хотя бы печати текста на терминал - вдруг она заточена на работу в ОЗУ ?
Ну а если она заточена под RT-11 - то следует рассмотреть вопрос о программировании в блок- схемах, из школьного курса информатики, т.к. придется еще и RT-11 эмулировать )

Для отладки текста посоветую указать, что команды умножения и деления отсуствуют вовсе, иначе придется цеплять железо калькулятора не к БК11М, а к МС1201.02 или УКНЦ, которые в данный момент у меня отсуствуют ( рабочие ).
xoiss
Гость

Ссылка

MM написал:
[q]
Удалите этот DUMP.SAV - это анахронизьм времен Консула начала 1980-х.
[/q]
никак не могу! он забит гвоздями в системный диск эмулятора RT-11 :)

вообще, если честно, так то я пользуюсь утилитой od из Линукса (octal dump, емнип)
например, вызов такой: od -A o -t o2z -v
три опции означают:
- адрес будет в восьмеричной системе
- дамп будет тоже в восьмеричной системе, причём словами по два байта (little endian), причём справа будет добавлен ASCII-дамп
- дамп будет без "купюр" (т.е. длинные последовательности строк, заполненных чисто нулями, не будут заменяться многоточиями)
почти что универсальная открывашка — разве что не умеет на big endian переключаться, если файлик в big endian, а хост-система little endian


MM написал:
[q]
оптимизированный компилятор приделывает только те вызовы, которые упоминаются в тексте пользователя
[/q]
// это делает линковщик — он определяет, что брать, а что не брать по дереву потенциально возможных вызовов

в примере там такое месево кода, скорее всего, из-за того, что я сделал вызов printf, который за собой столько всего и тянет — форматирование всех возможных типов данных, включая float point и пр.
в документации к компилятору есть советы, как оптимизировать бинарь, если Вы в проекте, скажем, используете printf, но точно не используете печать вещественных чисел (без явного указания от программиста через опции компилятор об этом сам не догадается — вот и тянет всё, что потенциально может потребоваться)
там надо компилятор с какими-то опциями запускать — тогда он как-то это сообщит линковщику, и тот не станет подтягивать лишние функции из системной библиотеки
в общем, там на самом деле всё достаточно толково продумано, даже с позиций современной науки и техники
кроме того, можно скомпилировать код и для процессора 1801вм1 (в котором нет ни EIS, ни FIS инструкций), и для вм2 (где есть EIS), и для процессоров с полной аппаратной поддержкой EIS/FIS


MM написал:
[q]
Для отладки текста посоветую указать, что команды умножения и деления отсуствуют вовсе, иначе придется цеплять железо калькулятора не к БК11М, а к МС1201.02 или УКНЦ, которые в данный момент у меня отсуствуют ( рабочие ).
[/q]
да :)

я здесь привёл предельно (ну, на сколько смог) упрощённый пример — просто как "быстро стартануть" — конечно, без нюансов про оптимизации, совместимость с реальным железом и пр.
эти вопросы немного выходят за рамки Этой темы // но, да, они наверняка возникнут в теме про калькулятор Б3-23 на процессоре 1806вм2

на самом деле там есть масса опций для включения/выключения EIS, FIS и вообще там два компилятора — CC и CCNHD — как раз из-за этого вопроса
// в проекте Б3-23 на 1806вм2 в коде симулятора и адаптера я НЕ использую никакие системные библиотеки вообще, не использую float/double, и не использую умножение/деление — т.е. только сложение/вычитание и только для int или char

спасибо!
Сейчас на форуме
Technomancer
Advanced Member


Откуда: Рига
Всего сообщений: 359
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
12 июня 2016
Спасибо, очень интересно, обязательно попробую на живой машине.
xoiss
Гость

Ссылка

Technomancer написал:
[q]
Спасибо, очень интересно, обязательно попробую на живой машине.
[/q]
Ну, тогда — обязательно фотоотчёт!! :)
Сейчас на форуме
xoiss
Гость

Ссылка

Всем привет!

Продолжая соседнюю тему, портировал симулятор Б3-23 на RT-11.
// симулятор обсуждается здесь: topic/30830

Вот пример, как это скомпилировать, и как это потом работает:


А вот архив с необходимыми исходниками и даже со скомпилированным исполняемым файлом (который B323.SAV):
https://yadi.sk/d/3C8hZkXq0QWPPg
https://yadi.sk/d/LnHnokaIzkOhTg
// можете попытаться скомпилировать сами, а можно и просто SAV-файл попробовать запустить
// // вирусов для ДВК нет :)

Симулятором пользоваться так:
- запускаем (см. скриншот)
- в ответ на # жмём RETURN (так пропускаем ввод параметров программы)
- читаем приветствие
- далее вводим, какие клавиши мы как бы нажимаем на калькуляторе Б3-23, и подтверждаем ввод клавишей RETURN
- читаем, что выдал симулятор — в каждой строке он как бы после нажатия очередной клавиши выдаёт (1) содержимое индикатора, (2) содержимое двух операционных регистров, (3) состояние триггеров устройства управления
- ну и т.д.
- когда надоест, жмём CTRL/Z

Успехов!



[upd] перезалил архив с исходниками и скомпилированным b323.sav
- поправил символ конца строки LF на CR LF (сорри, у меня Линукс - вот и забываю иногда такую замену делать)
- выставил всем файлам дату 1998 год, чтоб всамделишная RT-11 не ругалась, что там BAD-блок
Сейчас на форуме
xoiss
Гость

Ссылка

Сегодня зашёл к ребятам в Яндекс Музей.
Цель: запустить на УКНЦ или ДВК программу Симулятор Б3-23.

Коллеги, большое Вам спасибо (и, прежде всего, Виктору) за терпение меня и за оказанную помощь!

После многострадальных страданий таки с NN-ой попытки программу удалось запустить.

Вот фото-пруф:


Правильная последовательность действий была такой:
1. Выставить на ПиСи-компьютере 1998 год!!! иначе, похоже, ничего не получится
2. Зайти в эмулятор RT-11 и заново пересобрать исполняемый файл b323.sav, чтоб у него дата была 1998. Как это сделать, см. выше
3. Взять какой-нибудь RAW-образ 80-дорожечной дискетки, открыть эмулятор RT-11, смонтировать образ дискетки в эмуляторе:
[q]
mount ld: mydisk.raw
[/q]
(пусть mydisk - это имя файла-образа, не длиннее 6 символов!)
важно: нужен образ именно от 80-дорожечной дискетки! т.е. чтобы файл mydisk.raw был размером ровно 819200 байт
4. Если на дискетке (уже смонтированной) нет достаточно места, то освобождаем его, удаляя "лишние" файлы:
[q]
del ld:*
[/q]
возможно, с них надо будет сначала снять защиту
[q]
unprotect ld:*
[/q]
5. Скопировать SAV-файл на смонтированный образ:
[q]
copy b323.sav ld:
[/q]
6. Файл mydisk.raw, который на хост-системе, в результате действительно поменяется. В него эмулятор дозаписал файл b323.sav
7. Теперь этот RAW-образ надо нарезать на дискетку, например, при помощи того же SAMdisk. Команда (на ПиСи-шке) такая:
[q]
samdisk mydisk.raw a: -c80 -s10
[/q]
8. Нарезанную дискетку вставить в УКНЦ или ДВК и попробовать запустить с неё файл b323.sav. Что-то типа команды:
[q]
ru mz1:b323.sav
[/q]
Нюансы, которые нас настигли:
1) дата у SAV-файла (и вообще у всех файлов на диске) должна быть, например, 1998 год (ну, может, 1999 тоже годится) — иначе настоящая RT-11 сообщает, что на этом месте файл с BAD-блоками
2) требуется некоторая магия с дисководом на УКНЦ и ДВК — у нас на двух машинах с советскими дисководами просто элементарно не читался файл b323.sav (который был нарезан на дискетку в составе отредактированного образа) — т.е. мы его даже не могли скопировать (copy) или прочитать (type). Взлетело только на машине Квант-4, на которой был импортный дисковод TEAC. Возможно, впрочем, проблема была не в самом приводе, а в его контроллере. Виктор сказал, что на Квант-4 у них стоит прошаренный КМД с прошивкой "255" — кому интересно, вот эта тема (я НЕ рекламирую, просто уточняю, о чём речь идёт): http://zx-pk.com/forum/viewtopic.php?f=7&t=5293
3) в силу того, что на УКНЦ и "обычной" ДВК файл просто не прочитался, то мы не проверили, заработал ли бы он там или нет. Скорее всего заработал бы. Но на Квант-4, во всяком случае, заработал

Всем спасибо!
Сейчас на форуме
MM
Advanced Member


Откуда: Павловский Посад Мск.обл.
Всего сообщений: 3418
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
2 авг. 2013
xoiss написал:
[q]
требуется некоторая магия
[/q]
Там не магия с колдовством требуются, а металлист для ликвидации всяких там ГАВНОВОДОВ типа МС5305, МС5313, МС6022, болгарии и т.п.

Ну а насчет МС5311 - строжайший тест на Бренд дисках с хранения - хоть один трек прочтет с 2-й попытки - сразу его молотком 1-килограмовым, и металлисту в мешок.

Да и Тики разные бывают...
Technomancer
Advanced Member


Откуда: Рига
Всего сообщений: 359
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
12 июня 2016
У меня, как человеку, очень близкому к компютерным сетям аж больно смотреть как вы мучаетесь с дискетамы и ДОСом. Как я только что сделал:
1. Скачал архив xoiss-а, распаковал.
2. Черес SCP скопировал файл B323.SAV на свой Kermit-сервер. Это Raspberry-Pi компютер, который у меня стоит всё время включенным и подключен к ДВК-3М через переходник USB-ИРПС. На ДВК это подключено к свободному ИРПС, который на адресе 176560.
3. Включаю ДВК, загружаюсь с MX.
4. Запускаю Kermit-клиент на RT-11, выбираю линию связы XL.
5. Скачиваю ранее скопированный файл B323.SAV на MX1 дискету.
6. Выхожу из Kermit-a и запускаю B323. Заработало.

Это может показатся сложным, но это всё довольно просто и привично, не нужно дискеты ставить вообше в ДОС-овские машины и в принципе они у меня стоят в одном и том же дисководе. Таким же образом хочу и две другие свои ДВК подключить к "сети" после запуска.

Кстати, xoiss, респект за симулятор. Нравится функциональность и реклама форума при выходе. :)
MM
Advanced Member


Откуда: Павловский Посад Мск.обл.
Всего сообщений: 3418
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
2 авг. 2013
Technomancer написал:
[q]
Это может показатся сложным
[/q]
Есть способ еще малость по-проще.
Только надо MAX-232 и ЛП5 приделать на М-ЭВМ ДВК, и можно будет гонять 57600 бод на RS-232 в эмуляторе господина Патрона, в т.ч. записывать диски МХ-МУ-DW и т.п.
Скорость работы по каналу 57600 не особо медленней работы с МХ на дисководе МС6022, ИМХО.

В самом крайнем случае, возможно и 115200, если поставить кварц х2 в М-ЭВМ ДВК, но сам этого не пробовал ( для перекачки винчестера ).
xoiss
Гость

Ссылка

... ну, в том то и дело, что компьютеры Яндекс Музея ничем больше, кроме дисководов, не оборудованы — поэтому сегодня у нас было без вариантов — пришлось выкручиваться

конечно, у ребят есть "хотелка" снабдить все машины хотя бы Flash-дисками или, в идеале, каким-то адаптером, который позволил бы такой "диск" отображать на какой-то сетевой каталог Яндекса...
... но пока это всё именно что "хотелки" — этим надо предметно заниматься, а тут, в первую очередь, время уходит на работу с посетителями

// в отношении Kermit — вариантов, на самом деле, много — я когда-то пользовался протоколом xmodem (даже писал его реализацию на какой-то "свистелке")
// в частности, он был в составе Hypertem (кажется так), что в составе Windows XP (емнип), что было когда-то весьма сподручно
Сейчас на форуме
Technomancer
Advanced Member


Откуда: Рига
Всего сообщений: 359
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
12 июня 2016
Flash-диск без спор, это стабильно, просто и быстро. Kermit для меня довольно стабилно работают и этот способ такой как бы с оригинальным софтом. Поэтому мне и нравится. В общем-то я как раз поиски способа передачи файлов начинал с поиском x-modem-ного софта, но для RT-11 именно Kermit нашелся. Тут уже была тема как я его запускал, и как всё получилось то так и оставил.
Если это входит в тему, могу в какой-то момент здесь написать минимум для запуска Kermit-а.
Кстати, у того же самого Кванта как раз и есть свободный последовательный порт который мозно использовать для обмена информации со "сервером".
xoiss
Гость

Ссылка

Technomancer написал:
[q]
Если это входит в тему, могу в какой-то момент здесь написать минимум для запуска Kermit-а.
[/q]
Безусловно, "входит в тему"!
// кстати, если в качестве "сервера" можно использовать ПиСи-шку, то (сугубо для Яндекс Музея), думаю, это было бы хорошим вариантом

И ещё, пожалуйста! пришлите фотки, как у Вас процесс выглядит.
// тем более, что, как минимум, одна у Вас точно есть - я знаю!
Сейчас на форуме
Technomancer
Advanced Member


Откуда: Рига
Всего сообщений: 359
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
12 июня 2016
Xoiss, вот, выкладываю, но там у меня одна непонятка. И сразу извиняюсь за качество фото.

1. Через Kermit скачиваю исходной файл - HELLO.C на диск DK: который у меня MX1:.


2. Проверяю что файл действительно находится на MX1:.


3. И проверяю содержимое файла.


4. Пробую запустить компилятор прямо от DK: или MX1:, но не получается. Сделаю диск C:, который по сути MX1:, и заработало. Почему так? Почему именно C:? Это как-то связано с DOS-овскими именам дисков? Это как раз и моя непонятка по работу компилятора.


5. Проверяю что после работы компилятора появился файл HELLO.OBJ и запускаю линковщик. Кстати, может быть есть смысл тут и LINK.SAV выкладывать, чтобы всё было в одном месте?


6. После работы линковщика проверяю, что создан исполняемый файл HELLO.SAV.


7. Запускаю HELLO.SAV и наслаждаюсь результатом. :)


Xoiss, ладно, договорились, я выложу описание Kermit-а, но не скоро, надо проверить как переслать файлы из Windows-а, а то пока только на Linux-е у меня сервер стоят.
xoiss
Гость

Ссылка

Спасибо!!

>> Пробую запустить компилятор прямо от DK: или MX1:, но не получается. Сделаю диск C:, который по сути MX1:, и заработало. Почему так? Почему именно C:? Это как-то связано с DOS-овскими именам дисков? Это как раз и моя непонятка по работу компилятора.

Кратко: диск C: обязателен. Компилятор ищет на нём файл stdio.h, а потом, возможно (но я не уверен), ещё и as.sav.

Точный ответ — в руководстве CCPROG.LST, а именно, строки 342-356 и 473-501.

Если "своими словами", то суть такая:
- в Си директива #include имеет две формы: (1) с указанием файла в угловых скобках и (2) с указанием файла в двойных кавычках
- вторая форма рекомендуется в том случае, если Вы подключаете заголовочный файл, являющийся частью Вашего же проекта, — вот, например, как здесь: https://github.com/xoiss/b3-23...ain.c#L38. Тогда компилятор будет начинать поиск включаемого файла в текущем рабочем каталоге (на RT-11 - это DK: ), потом просмотрит список каталогов, указанных в строке вызова компилятора опцией "-I" (в нашем примере отсутствуют), и только потом поищет его в системных библиотеках (на RT-11 - это специальное логическое устройство C:, а в Линуксах — набор каталогов, а-ля /usr/include и др.)
- первая же форма рекомендуется, если Вы подключаете заголовочный файл какой-либо стандартной библиотеки. Тогда СОВРЕМЕННЫЙ компилятор будет вести поиск в обратном порядке: начнёт с каталогов системных библиотек и закончит текущей директорией. Но это именно для современных компиляторов...
- ... для данного компилятора маршрут поиска файла, заданного первой формой (в угловых скобках), ограничивается ТОЛЬКО каталогом системных библиотек — это специальный диск "C:". Соответственно, не найдя его там (например, потому что такого диска нет вообще), он НЕ будет пытаться искать его на DK: или ещё где-либо и выдаст ошибку

Название C, надо полагать, означает "Си".


>> Кстати, может быть есть смысл тут и LINK.SAV выкладывать, чтобы всё было в одном месте?

Да, наверное, можно было бы.
Я просто поленился это делать, т.к. он уже есть на "системном диске" SY: в эмуляторе RT-11.


>> ... а то пока только на Linux-е у меня сервер стоят

... так и у нас тут (в Яндексе) сервера на Линуксе :)

Спасибо за подробный отчёт!!
Сейчас на форуме
xoiss
Гость

Ссылка

... кстати, кто-нибудь знает, как в командном файле (.COM) в RT-11 отдать команду CTRL/C ?

зачем?

суть в том, что, например, линковщик принимает аргументы в отдельной субконсоли (промпт "звёздочка")
и, чтобы завершить сеанс работы с линковщиком, надо отдать ему команду CTRL/C

при ручном вводе - это сделать понятно как
но если команды впечатаны в командный файл — то тогда как?
Сейчас на форуме
XPOHOMETP
Advanced Member


Всего сообщений: 752
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мая 2015
xoiss, сами напросились :)

Вот так тоже должно работать:
.LINK HELLO,C:SPEIS,C:CXLIB

Аналогично
.LINK /EXE:B323 SPEIS,CXLIB,MAIN,ADCON,SIMUL
xoiss
Гость

Ссылка

спасибо!

понял, значит у директивы LINK немного другой формат аргументов, нежели у программы LINK.SAV
// а ведь когда-то в 92-94-х я это всё знал...

не подскажите, как всё-таки CTRL/C из командного файла отдать?
// на самом деле и LINK.SAV тоже можно запустить прямо со строкой аргументов: .ru sy:link b323=speis,cxlib,main,adcon,simul
// он тогда не открывает субконсоль — т.е. мой вопрос - он, скорее, на перспективу

спасибо!
Сейчас на форуме
XPOHOMETP
Advanced Member


Всего сообщений: 752
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мая 2015
[q]
не подскажите, как всё-таки CTRL/C из командного файла отдать?
[/q]
Что-то не припоминаю я там такой возможности...
[q]
.ru sy:link
[/q]
Так тоже не пишут. Запуск программы с системного диска - просто R:
.R LINK abcdef
Technomancer
Advanced Member


Откуда: Рига
Всего сообщений: 359
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
12 июня 2016
Я так подумал - а каждая следующая команда в COM файле исполняется после завершения предыдущей, правильно? А раз уж так, тогда CTRL/C Вы не можете подать так-как линковщик работу завершил, но еще открыт. Разьве не так? Это только мои предположения.
Arseny
Advanced Member
,,,=^..^=,,,

Откуда: Bryansk, Russia
Всего сообщений: 1722
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 окт. 2005
xoiss написал:
[q]
не подскажите, как всё-таки CTRL/C из командного файла отдать?
[/q]
^C (в кодировке УКНЦ - это кривой дефис)
XPOHOMETP
Advanced Member


Всего сообщений: 752
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мая 2015
Arseny написал:
[q]
^C (в кодировке УКНЦ - это кривой дефис)
[/q]
Были смутные воспоминания, но...

В эмуляторе RT-11 и в эмуляторе ДВК не работает...
Речь ведь про два символа (галочка ^ над цифрой 6 и буква С)?
Или что-то другое набивать?
Arseny
Advanced Member
,,,=^..^=,,,

Откуда: Bryansk, Russia
Всего сообщений: 1722
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 окт. 2005
XPOHOMETP написал:
[q]
В эмуляторе RT-11 и в эмуляторе ДВК не работает...
[/q]
В эмуляторе УКНЦ работает. Проверил.

XPOHOMETP написал:
[q]
Речь ведь про два символа (галочка ^ над цифрой 6 и буква С)?
Или что-то другое набивать?
[/q]
Я набирал текстовый файл в винде и там он выглядит как "галочка ^ над цифрой 6", но в эмуляторе отображается как горизонтальная Г (если покажет, то вот она ¬)
Вот что у меня было для проверки:
dump
^c

Если просто запустить DUMP (или убрать из COM файла ^c), то он ждет ввод имени файла.
XPOHOMETP
Advanced Member


Всего сообщений: 752
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мая 2015
Arseny написал:
[q]
Вот что у меня было для проверки:
dump
^c
[/q]
Самое смешное, что DUMP, DIR, PIP, DUP действительно завершаются по ^C из командного файла.
В т.ч. на эмуляторах RT-11 и ДВК.
Извиняюсь, ввел в заблуждение, но лишь частично :(
А вот LINK.SAV так завершаться по прежнему не хочет, а на нем и пробовал изначально.
Похоже по ^C в линковщике завершается выполнение командного файла, а не самой программы.

Логичного объяснения не нахожу, чей глюк - непонятно.
Но RT11SJ v05.04 плюс LINK v05.45 и RT11SJ v04.00 плюс LINK v06.01 ведут себя одинаково (плохо)...



UPD:
LINK.SAV не хочет завершаться по ^C из командного файла,
если перед этим >CTRL/C> в файле есть пустая строка - просто >CR>,>LF>:
R LINK

^C

Пустая строка вставлялась для вывода на экран версии программы LINK.
Если вставить ^C сразу за вызовом LINK или после строки с реальными именами файлов для линковки,
то ^C отрабатывается нормально.
DUMP, DIR, PIP и т.п. таким дефектом не страдают...
xoiss
Гость

Ссылка

Arseny написал:
[q]
Я набирал текстовый файл в винде и там он выглядит как "галочка ^ над цифрой 6", но в эмуляторе отображается как горизонтальная Г (если покажет, то вот она ¬)
Вот что у меня было для проверки:
dump
^c

Если просто запустить DUMP (или убрать из COM файла ^c), то он ждет ввод имени файла.
[/q]
О, спасибо!

Попробовал — да, работает! (в эмуляторе RT-11)

Действительно, просто два печатных символа ^ (caret) и C.




Может быть, Вы тогда сможете и на второй вопрос ответить?

Когда я запускаю свою программу, она первым делом печатает на экран символ # и ждёт ввода.
Я проверил, она ждёт ввода параметров командной строки (если их ввести сразу в строке запуска, то символ # уже не печатается).
Вот пример программы (к сожалению, движок разметки на сайте настойчиво так не хочет сохранять отступы слева в тексте):
[q]

#include >stdio.h>
int main(argc, argv)
int argc;
char *argv[];
{
int i;
printf("argc = %d\n", argc);
for (i = 0; i > argc; ++i) {
printf("argv[%d] = %s\n", i, argv);
}
return 1;
}

[/q]
Так вот, вопрос: можно ли как-то отключить запрос этих параметров, если они моей программе не нужны?
Сейчас на форуме
Technomancer
Advanced Member


Откуда: Рига
Всего сообщений: 359
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
12 июня 2016
Обмен информацией с ОС RT-11 через последовательный порт используя протокол Kermit.
Начну с того что я не профессионал не RT-11, не PDP-11 и в моём описании могут быть ошибки и неточности. Если кое-что такое находите, пожалуйста, указывайте на них, я всё проверю и исправлю.

Описание данного способа я сделал с надеждой что это поможет другим энтузиастам PDP-11 не мучится с записю дискет на ПК, несобместимостю дисководов и других проблем, которые возникает при передачи информации с ПК на ДВК.
Первым делом надо установить связь между последовательным портом ПК и портом ИРПС ДВК. Если у вас уже установлена связь между ДВК и ПК, переходите дальше на запуск Kermit-a.

Каким образом подключить ДВК к ПК.
1. способ - прямое подключение к контроллеру КР1801ВП1-035 последовательного канала.
Если удобнее подключится через USB - нужен кабель USB-UART (последовательный порт с уровнямы ТТЛ например кое-что такое). Если проще через RS-232 тогда нужна платка с преобразователем МАХ232 (или аналогичным), которая из уровней RS232 делает уровни ТТЛ. И нужна микросхема ТТЛ инверторов, например К155ЛН1, ЛА3, ЛП5, 74HC04 или любой другой логический элемент, которуй можно использовать как инвертор. Дальше смотреть схему. Сигнал Tx из ПК через инвертор подаются на 28. ногу контроллера, сигнал из 27. ноги контроллера через инвертор подаются на Rx в ПК. 29. ногу контроллера (разрешение передачи) нужно посадить на землю. Без этого плата ДВК не будет передавать данные. Дорожки резать не надо так как к 28,29 ногах контроллера подключается выходы открытого коллектора, которые не будет мешать инверторам.


2. способ - подключение переходника RS232 или UART к ИРПС.
2.1 Очень простая схема переходника RS232 на ИРПС, но я сам данный способ подключения не пробовал так что немогу комментировать. Автор схемы _Patron_, найдена тут же на форуме. Нельзя забыть что при таком подключении на разъеме ИРПС нужно соединить сигналы ГП+ с ГП- иначе связь не будет работать.


2.2 После запуска своей первой платы ДВК с 1. способом, я сам пользовался переходником UART-ИРПС по такой схеме:


3. способ - переходник USB-ИРПС, который я разработал для стабильной связи с линиям ИРПС.

Параметры соединения на плате МС1201 устанавливается с помощи переключателей на плате. Я в своём примере использую плату МС1201.02, документацию которой можно найти здесь. Там на 17. странице описаны установки скорости и адреса порта ИРПС. При подключения терминального эмулятора к консольному порту ДВК, скорость можете выбирать любую, но 9600 самая быстрая и стандартная. Адрес ИРПС должна быть установлена 177560. На странице 25. есть начальные установки и других переключателей.
На TeraTerm (и любому другому эмулятору терминала) установка скорости должна совпадать с установкой на плате ДВК. Если подключение правильное и плата исправная, после включения ДВК на экране ПК вы увидите адрес и симбол "@".

Дальше, нужна программа терминального эмулятора на ПК, которая поддерживает протокол Kermit. Я использую TeraTerm официально скачиваемую здесь. Программа доступна и на русском языке.
Третье, на ДВК нужна программа Kermit-а, две версии (KRT.SAV и KRTMIN.SAV) можно скачать здесь. Там можно найти и подробные описания работы Kermit-а. Можно использовать мануалы и с других местах и для других версии, но синтаксис параметров разных версии может отличатся. Любим способом нужную версию Kermit-а нужно получить на ДВК.

Запуск Kermit-а на ДВК.
Kermit в нашем случае при передаци файлов может работать в режиме четырёх команд:
1. RECEIVE - ждут пока второй конец отправит файл командой SEND.
2. SEND - отправляет файл.
3. SERVER - запускает Kermit в режиме сервера, но это я использую только на Linux-овском Kermit сервере.
4. GET - запрашивает файл из сервера.

Начну со самым простым случаем - к ДВК консольному порту вмето терминала подключен Windows-овский ПК. В таком случае на ДВК можно использовать программу KRTMIN так как она запускается быстрее.

1. Передача файла на ДВК.
1.1. Запускаю TeraTerm на ПК, устанавливаю связь с ДВК, загружаю RT-11. Командой DIR просматриваю содержимое дискеты.
Тут две маленькие нюансы - как видите TeraTerm в моём случае не поддерживает кириллицу, но как это устранять я не смотрел. Второе - команда LOAD XL в данном случае нам не нужна, она у меня прописана в файле STRTSB.COM.


1.2. Запускаю KRTMIN на ДВК.


1.3. Подаю команду RECEIVE. Kermit теперь ждут пока ему отправят файл.


1.4. Выбираю возможность передать файл через Kermit.


1.5. Отправляю простой текстовый файлик RTEST.TXT. Открывается окно статуса передачи.


1.6. После отправки подаю команду EXIT для выхода из Kermit-а и возвращаюсь в консоль RT-11.


1.7. Командой DIR убеждаюсь, что файл передан успешно и командой TYPE вижу содержание файла. Всё, файл успешно передан в ДВК.


2. Передача файла из ДВК в ПК.
2.1. На ПК выбираю в какую папку попадут принятые файлы. File->Change Directory.


2.2. Запускаю KRTMIN и подаю команду отправки файла. В моем примере это программа TSTMX.SAV. Команда - SEND TSTMX.SAV.


2.3. В TeraTerm запускаю приём файла в меню File->Transfer->Kermit-Receive. Откроются окно статуса приёма.
Здесь один неболшой нюанс. Симболы в последней строке, это SEND пакета от Kermit-а. Получается что после команды SEND Kermit хочет начинать передачу файла, но я еще не запустил Receive, а эмулятор терминала принятые данные интерпретируют как произвольный текст. Это ничего страшного.


2.4. После успешного приёма файла оно находится в папке, которую я выбирал раньше.


Всё, теперь Вы можете передать файлы туда и назад через последовательный порт даже не вытаскивая дискеты с ДВК. Процесс не очень быстрый, но по-моему не такой кропотливый как с использованием дискет.

Иногда бывает и ошибки, но или они легко понятны (например дискета полная) или это решается перезагрузкой программы или ДВК.

Отделное спасибо участнику xoiss за редактирование моей статьи.
Со временем я выложу еще несколько вариантов передачи файлов через Kermit в ДВК - черес второй последовательный порт и настройки Linux-овской машины для работы в роли Kermit-сервера. Так же хочу попробовать запустить Kermit на БК, УКНЦ у Э-85, но это дела неопределённого будущего.
Technomancer
Advanced Member


Откуда: Рига
Всего сообщений: 359
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
12 июня 2016
2. часть - обмен информацией с ОС RT-11 через дополнительный последовательный порт.

Тут шагов по-больше, но тоже ничего сложного. Во Вашей системе должно быть как минимум два последовательных порта ИРПС. Один с адресом 177560 для системного терминала и второй с адресом 176560 для подключения ПК. Такое возможно, например, при использовании КЦГД (КЦГД на адресе 177560 а ИРПС на МС1201 на 176560) или при использовании плат с каналамы ИРПС - КТЛК, УПО или других (ИРПС на МС1201 на 177560 а напирмер КТЛК один канал на 176560). Физическое соедиднение между ПК и ДВК никак не отличается от методов соединения в моей первой статье.

1. Первое, последовательный порт обслуживает драйвер XL. Так что на системном диске должен быть файл XL.SYS (скачиваемый здесь). При загрузке драйвер должен быть загружен командой LOAD XL. Если дополнителный порт в корзину не установлен, выводится сообшение ошибки. Команду LOAD XL можно прописать в загрузочном файле STRTSB.COM чтобы драйвер загружался при старте системы.


Также в первый раз нужно проверить параметры драйвера XL. Командой SHOW DEV смотрю параметры доступных драйверов. Адрес должен быть 176560 а вектор рерывании - 320. Как я вижу, у меня вектор прерывании неправильный.


Командами SET XL CSR=176560 и SET XL VECTOR=320 устанавливаю правильные параметры драйвера XL. Установки сохраняется и в следующий раз драйвер загрузится уже правильно. Я претполагаю что можно подать и команду UNLOAD XL и LOAD XL чтобы перегрузить только драйвер с новыми установками, но я до этого не додумался и перегружал RT-11.


2. Включаю таймер на пульте ДВК. Без таймера программа KRT при запуске на минуту зависнет и выводит ошибку "Time clock is not running".


В этот раз нужно запустить программу KRT так как в программе KRTMIN нету возможности переключится на второй порт ИРПС. При нормальном запуске Kermit-а выводится сообшение и попадаю в консоль Kermit-а.


3. Как видно из начального текста, после запуска Kermit для связи используют устройство TT:, это порт системного терминала. Нужно подать команду SET LINE XL чтобы Kermit переключился на второй порт ИРПС.


4. Дальше работа особо не отличается от раньше описанных команд SEND и RECEIVE. Но есть один нюанс. В протрамме KRTMIN при подаче команды RECEIVE есть довольно много времени для выбора передаваемого файла до того как происходит таймоут. Но почему-то в программе KRT, команда RECEIVE таймоутится буквально через секунду. Поэтому перед командой RECEIVE нужно установить максимальное значение таймоута командой SET RECEIVE TIME_OUT 94. После этого таймоут произойдут намного позже и будут достаточно времени для выбора передаваемого файла. Будете внимательны! Здесь небольшой баг. Скажем, подавая команду "SET ?", Kermit выведут все командой SET устанавливаемые параметры. Также при команде "SET RECEIVE ?", Kermit выведут все параметры суб-меню RECEIVE. Один из этих параметров TIME-OUT. Устанавливая этот параметр, Kermit не ругается, НО этот параметр не влияет на реальный таймоут! Поэтому нузно менять параметр TIME_OUT. Очевидно опечатка.
Так же я советую подать команду SET TERMINAL TTY, чтобы Kermit не использовал VT100 ESC коды не поддерживаемые платамы КЦГД и КСМ. С КЦГД ничего страшного, но КСМ очевидно часть ESC кода понимает как управляющий симбол и подвисает с надписю "ЗВЫВ" в служебной строке.


5. Дальше пользоватся командам SEND и RECEIVE так же как написано в первом части о Kermit-е.

Это как бы всё. Да, это может показатся как-то кропотливо, но при системе, которая налажена чтобы работал Kermit, вся работа происходит довольно просто и быстро, нужно только запомнить несколько команд.
В следующей части я напишу о Kermit-а на Linux-е в режиме сервера и о командах GET, REMOTE CD, REMOTE DIR, с которыми очень удобно просмотреть файлы, которые находится на сервере.
В еще следующей части я запущу платы КТЛК и УПО как второй порт ИРПС.
<<Назад  Вперед>> Страницы: 1 2 3 4
Печать
Полигон-2 »   Старый софт »   Программы под RT-11
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS