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

Полигон-2

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

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

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

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

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

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

<<Назад  Вперед>> Страницы: 1 * 2 3 4
Печать
 
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-килограмовым, и металлисту в мешок.

Да и Тики разные бывают...
<<Назад  Вперед>> Страницы: 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