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

Поиск, обмен ссылками, вопросы по устаревшему программному обеспечению.
Гость

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

Сообщение Гость » 25.10.2018,02:07

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

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

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

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

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

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

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

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

[hr]

Гость

Сообщение Гость » 25.10.2018,02:51

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

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

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

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

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

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

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

В общем, с условного разрешения Администрации Сайта (http://www.phantom.sannata.ru/forum/ind ... 9#pp474289) публикую ссылки для скачивания.

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

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

Аватара пользователя
svinka
Advanced Member
Сообщения: 2856
Зарегистрирован: 25.06.2016,04:12
Откуда: Чертаново

Сообщение svinka » 25.10.2018,15:42

xoiss писал(а):и её советских форков (ФОДОС, РАФОС)
Ни один из переводов слова fork не предполагает кражу.
На время бана связь по email: helen povetkina @ gmail. com - без пробелов

Гость

Сообщение Гость » 25.10.2018,18:14

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

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

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

[hr]
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 показывает вот что:
.show
TT
HD (Resident)
HD0 = SY
HD1 = DK
SL (Loaded)
LD
NL
17 free slots
// здесь и далее "точку" перед командой печатать не нужно :) -- она уже напечатана системой -- т.е. это приглашение к вводу -- печатаем только саму команду 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 (что значит "диск по умолчанию"):
.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
Можно заметить, что среди файлов есть и сам эмулятор 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:
Microsoft Windows [Version 10.0.14393]
(c) Корпорация Майкрософт (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
Теперь видно содержимое каталога c:\rt11\rt11cc, а не c:\rt11

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

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

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

Вот как выглядит сеанс в RT-11:
.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
У нас в системе теперь появился ещё один "физический" диск -- LD -- и в него смонтировано содержимое файла rt11cc.raw
Обратите внимание, что на этом диске очень мало свободного места. То есть компилировать свои великие проекты Вам придётся на другом диске.

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

[hr]
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

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

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

Очень толковое и детальное описание системы команд и всяких аспектов работы с дисками в RT-11 (на английском):
http://ftpmirror.your.org/pub/misc/bits ... _Aug91.pdf
http://www.bitsavers.org/pdf/dec/pdp11/ ... _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/questions/866 ... tal-builds)
- компилятор не умеет вызывать линковщик -- т.е. LINK.SAV придётся запускать вручную (и на данной дискетке линковщика вообще нет, т.е. он должен быть в составе RT-11)
- компилятор не умеет компилировать сразу несколько c-файлов -- только по-одному -- это несколько утомительно, если файлов действительно много

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

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

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

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

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

На хост-системе создаём текстовый файл hello.c со следующим содержимым:
#include <stdio.h>
main()
{
printf("Hello, world!\n");
}
Важно: в системе 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:
Microsoft Windows [Version 10.0.14393]
(c) Корпорация Майкрософт (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
Вот, файлик присутствует.

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

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

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

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

Результат можно поискать на диске dk:
.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
Отлично, файлик hello.obj имеется.

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

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

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

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

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

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

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

Убедимся, что файлик создан:
.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
Да, действительно появился файл HELLO.SAV

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

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

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

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

Содержимое файла HELLO.SAV можно посмотреть в виде восьмеричного дампа:
.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.*
... ... ...
Команда dump по умолчанию печатает на принтер, поэтому её надо вызывать именно с опцией /terminal, чтобы получить вывод в консоль.

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

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

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

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

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

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

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

Нет "пустого" типа 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
Сообщения: 3625
Зарегистрирован: 15.01.2008,11:00
Откуда: Москва

Вклад в сообщество

Сообщение Tronix » 25.10.2018,18:24

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

Аватара пользователя
Tronix
Advanced Member
Сообщения: 3625
Зарегистрирован: 15.01.2008,11:00
Откуда: Москва

Вклад в сообщество

Сообщение Tronix » 25.10.2018,18:55

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

MM
Advanced Member
Сообщения: 5896
Зарегистрирован: 02.08.2013,22:13
Откуда: Павловский Посад Мск.обл.
Контактная информация:

Вклад в сообщество

Сообщение MM » 25.10.2018,18:55

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

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

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

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

Коллекционирование радиодеталей : http://collectingrd.kxk.ru/

Гость

Сообщение Гость » 25.10.2018,19:44

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

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

в примере там такое месево кода, скорее всего, из-за того, что я сделал вызов printf, который за собой столько всего и тянет -- форматирование всех возможных типов данных, включая float point и пр.
в документации к компилятору есть советы, как оптимизировать бинарь, если Вы в проекте, скажем, используете printf, но точно не используете печать вещественных чисел (без явного указания от программиста через опции компилятор об этом сам не догадается -- вот и тянет всё, что потенциально может потребоваться)
там надо компилятор с какими-то опциями запускать -- тогда он как-то это сообщит линковщику, и тот не станет подтягивать лишние функции из системной библиотеки
в общем, там на самом деле всё достаточно толково продумано, даже с позиций современной науки и техники
кроме того, можно скомпилировать код и для процессора 1801вм1 (в котором нет ни EIS, ни FIS инструкций), и для вм2 (где есть EIS), и для процессоров с полной аппаратной поддержкой EIS/FIS
MM писал(а):Для отладки текста посоветую указать, что команды умножения и деления отсуствуют вовсе, иначе придется цеплять железо калькулятора не к БК11М, а к МС1201.02 или УКНЦ, которые в данный момент у меня отсуствуют ( рабочие ).
да :)

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

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

спасибо!

Аватара пользователя
Technomancer
Advanced Member
Сообщения: 937
Зарегистрирован: 12.06.2016,19:56
Откуда: Рига

Конкурсы

Вклад в сообщество

Сообщение Technomancer » 25.10.2018,22:36

Спасибо, очень интересно, обязательно попробую на живой машине.

Гость

Сообщение Гость » 26.10.2018,01:02

Technomancer писал(а):Спасибо, очень интересно, обязательно попробую на живой машине.
Ну, тогда -- обязательно фотоотчёт!! :)

Гость

Сообщение Гость » 30.10.2018,02:19

Всем привет!

Продолжая соседнюю тему, портировал симулятор Б3-23 на RT-11.
// симулятор обсуждается здесь: http://www.phantom.sannata.ru/forum/index.php?t=30830

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

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

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

Успехов!

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

Ответить