User Tag List

Страница 2 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 11 по 20 из 41

Тема: GCC 11.2.1 с поддержкой процессоров 1801вм1 и 1801вм2

  1. #11
    Moderator
    Регистрация
    25.08.2012
    Адрес
    г. Красноярск
    Сообщений
    1,181
    Спасибо Благодарностей отдано 
    313
    Спасибо Благодарностей получено 
    353
    Поблагодарили
    248 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Спасибо.
    Правильно ли я понимаю, что в RT-11 нет возможности передать в программу командную строку?
    И Вы её эмулируете путём передачи argc=1 argv[]="hello.rom" ?
    Может проще выпилить? Я вот так делаю:
    нее
    если CИ делать то разбор командной строки очень нужен!

    касаемо как это сделано в RT11 можно прочитать тут
    https://forum.maxiol.com/index.php?showtopic=5004
    ПО ДВК [TIFF] Книга 6 - Системные библиотеки и сообщения системы (Научный центр-1990)
    запрос .CSISPC страница 54ая
    Все о БК ДВК УКНЦ VAX Alpha

    Архив ПО для ретрокомпьютеров

    предоставляю бесплатный хостинг на PDP-11.RU для проектов о ретрокомпьютерах

  2. Эти 2 пользователя(ей) поблагодарили SuperMax за это полезное сообщение:

    Oleg N. Cher (13.11.2021), yu.zxpk (12.11.2021)

  3. #12
    Veteran
    Регистрация
    22.11.2009
    Адрес
    Москва
    Сообщений
    1,593
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    158
    Поблагодарили
    104 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    или поискать исходники c runtime от decus c

  4. #13
    Member
    Регистрация
    26.03.2019
    Адрес
    г. Киев, Украина
    Сообщений
    98
    Спасибо Благодарностей отдано 
    133
    Спасибо Благодарностей получено 
    51
    Поблагодарили
    26 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, нашел runtime decus. Посмотрел бегло. Пока прикручу функции EIS для BM1 для начала. Это функции, которые должны быть в libgcc, по идее. Далее можно, собственно, портировать базу libc: IO (rt11), выделение памяти, printf, strings и т.д.
    Цель: получить минимальный, но рабочий комплект для написания программ на C/C++ под RT-11 используя кросс-компилятор GCC.

  5. #14
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,643
    Спасибо Благодарностей отдано 
    2,241
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    112 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну, мне сишные библиотеки нужны постольку поскольку, хотя юзать их из Оберона тоже можно.

    Традиционно в библиотеке XDev есть модуль CmdLine. Если он будет реализован для RT-11, то вовсе не обязательно тем же способом, что сишный механизм argc/argv.

    Я смотрю, много чего на асме для RT-11 делается через макросы. Так вот. Из GCC у нас нет возможности подключить файл этих макросов, взятый, например, из MACRO-11 - придётся всё делать на уровне асма, вызовами EMT и прочим, предусмотренным в RT-11. Пока я не понял как развернуть запрос .CSISPC в команды GNU ассемблера. Но понял, что .EXIT разворачивается в emt 0350 и т.д.

  6. #15
    Activist Аватар для BlaireCas
    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    439
    Спасибо Благодарностей отдано 
    111
    Спасибо Благодарностей получено 
    322
    Поблагодарили
    125 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    как развернуть запрос .CSISPC в команды GNU ассемблера. Но понял, что .EXIT разворачивается в emt 0350
    В самом macro-11 можно глянуть как это делается использовав директиву .list MEB. И тогда в листинге он "развернет" макросы. Например .csispc будет:
    Код:
          1						.mcall .csispc
          2						.list MEB
          3	000000				START:	.csispc
    	000000	005046 				CLR	-(SP)
    	000002	005046 				CLR	-(SP)
    	000004	005046 				CLR	-(SP)
    	000006	104345 				EMT	^o<345>
          4		000000'				.end START
    .MAIN.	MACRO V05.06R Saturday 13-Nov-21 08:34  Page 1-1
    А чтобы вытащить самому системные макросы из SYSMAC.SML - можно "расковырять" код портированного на винду macro-11. (вот этого http://retrocmp.com/tools/macro-11-on-windows). Он тоже умеет развернуть макросы в листинг, правда более много "не лишнего" в листинг выводит.
    Если макрос простой - то можно туповатую утилиту препроцессора написать которая regexp-ами позаменяет всякие .ttyin например. Предварительно набив библиотеку этих макросов запуская настоящий macro-11 на временных файлах. Системных макровызовов не слишком много ведь.

    - - - Добавлено - - -

    Цитата Сообщение от yu.zxpk Посмотреть сообщение
    Бинарники, собранные под Windows с помощью MING-W64, выложены Славе на сайт
    Заметил такую штуку что в сборке недостает msys-2.0.dll (тот-же lda2sav без нее не запустить). Оно естественно быстро нагугливается где скачать отдельно данную .dll, но все-же может стоит ее добавить? (не у всех будет mingw наверняка).
    Последний раз редактировалось BlaireCas; 13.11.2021 в 09:08.

  7. Этот пользователь поблагодарил BlaireCas за это полезное сообщение:

    Oleg N. Cher (13.11.2021)

  8. #16
    Guru
    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    2,321
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    225
    Поблагодарили
    177 сообщений
    Mentioned
    17 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вообще-то, с командной строкой у RT-11 все плохо. Она принимает только командные строки формата CSI, то есть список выходных файлов от одного до трех, далее, знак "=" и список до шести входных файлов. При каждом из файлов могут быть один или несколько однобуквенных ключиков типа /A, /B=177 (oct), /C=88. (dec), /D=ABC (rad50). И все.

    Начиная с RT-11 v05.00 допускается записать эти списки в несколько измененном виде в одну строку с вызовом программы, а именно,
    RU DEV:PROG <список входных файлов> <список выходных файлов>, через пробел (внутри списков пробелы не допускаются). Да, для вызова программы с SY: RU DEV: набирать не надо, достаточно имени программы.

    Начиная, кажется, с 05.03 или с 05.04 в RT-11, наконец-то, добавили передачу остатка командной строки в неизменном виде через поле памяти, начиная с адреса 510 (вроде бы, точно не помню), но рассчитывать, что RT-11 будет 5.4 или новее нельзя - есть, допустим, такая интересная система, как АДОС (зеленоградская), которая была сделана из 5.1 и ничего про это не знает...

    Так вот, KMON системы RT-11 берет этот остаток командной строки и преобразует его к формату CSI, то есть переставляет в начало список выходных файлов, затем ставит знак равенства и список входных файлов, пробел, естественно, выбрасывает. То есть, если мы наберем

    PROG IFIL1,IFIL2 OFIL1,OFIL2

    то программа PROG будет вызвана с SY: и получит команду CSI

    OFIL1,OFIL2=IFIL1,IFIL2

    Типы каждого из выходных файлов, а также тип всех входных файлов указывается в запросе .CSIGEN или .CSISPC и, если не указать типы файлов явно (например, IFIL1.DAT,IFIL2.NUM), то типы файлов будут взяты из запроса CSIGEN/CSISPC.

    Все Си PDP-11, которые я пробовал, запрашивают командную строку отдельным запросом GTLIN и разбирают ее по пробелам (выделяют отдельные слова из строки), что получается из остатка командной строки после преобразования ее в формат CSI, увы, не помню.
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

  9. Этот пользователь поблагодарил AFZ за это полезное сообщение:

    yu.zxpk (13.11.2021)

  10. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  11. #17
    Member
    Регистрация
    26.03.2019
    Адрес
    г. Киев, Украина
    Сообщений
    98
    Спасибо Благодарностей отдано 
    133
    Спасибо Благодарностей получено 
    51
    Поблагодарили
    26 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    - - - Добавлено - - -
    Заметил такую штуку что в сборке недостает msys-2.0.dll (тот-же lda2sav без нее не запустить). Оно естественно быстро нагугливается где скачать отдельно данную .dll, но все-же может стоит ее добавить? (не у всех будет mingw наверняка).
    Спасибо!
    Сам по себе GCC (его компоненты) собраны как "static" и не требуют msys-2.0.dll.
    А вот lda2sav.exe надо поправить, пересобрать из исходников.

    Пересобрал lda2sav.exe и bin2load.exe, проверьте пожалуйста свежий архив

    /usr/bin/i686-w64-mingw32-gcc-9.3-win32 -o lda2sav.exe -static lda2sav.c

    Возможно, нужно использовать i686-w64-mingw32-gcc-9.3-posix вместо i686-w64-mingw32-gcc-9.3-win32
    В обоих случая бинарник получается с зависимосью только на KERNEL32.dll и msvcrt.dll

    Нашел винду, проверил: bin2load и lda2sav.exe запускаются норм без msys-2.0dll
    Последний раз редактировалось yu.zxpk; 13.11.2021 в 20:46. Причина: пересобраны утилиты

  12. #18
    Activist Аватар для BlaireCas
    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    439
    Спасибо Благодарностей отдано 
    111
    Спасибо Благодарностей получено 
    322
    Поблагодарили
    125 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Удалось скомпилять простую программку, работает вроде, печатает что надо.
    Заглянув дебагером эмулятора обнаружил DIV и использование остатка деления, все верно скомпиляло.

    test.c

    Код:
    extern int rt11_print(int i, const char* ptr);
    int inline rt11_print(int i, const char* ptr)
    {
        asm ("mov 4(sp), r0");
        asm ("add $48, r0");
        asm ("emt 0341");
        asm ("bcs .-2");
        asm ("mov 6(sp), r0");
        asm ("emt 0351");
    }
    
    const char* txt_msg1 = " - Hello, world!";
    
    void main()
    {
    	for (int i=20; i<30; i++)
    	{
    		int j = i%10;
    		rt11_print(j, txt_msg1);
    	}
    }
    [свернуть]
    Но однако! Пока допетрил как все собрать ... жжуть.
    Хорошо в стартовом посте ссылка на hello где есть pdp11-aout.ld и crt0lda.s из которого надо crt0lda.o ассемблировать.
    Кстати упростил его, пашет

    crt0lda.s

    Код:
    ; 
            .text
            .GLOBAL _main
    	.GLOBAL start
    start:
            mov     $01000, sp
    	jsr	pc, _main
    	emt	0350
    
            .GLOBAL ___main
    ___main:
    	rts	pc
    	
            .end
    [свернуть]
    Иначе вот ни в жизнь бы не догадался как скомпилить хоть что-нибудь

    Вдруг кто тоже будет долго допетривать как под виндой собрать хеллоуворлд, а make берет вот под виндой и.. не пашет пушто его нету
    1) путь на \bin в PATH
    2) взять c гитхаба в стартовом посте файлы: pdp11-aout.ld, crt0lda.s, crt0lda.o (можно и упрощенный crt0lda.s выше привел)
    2) если модифицировали crt0lda.s, то его скомпилять надо pdp11-aout-as crt0lda.s -o crt0lda.o (один раз достаточно сделать)
    3) батником ниже компиляется тестовый файл: build.bat test

    build.bat

    Код:
    set PATH=.\bin
    pdp11-aout-gcc -mbm2 -msoft-float -c -o %1.o %1.c 
    pdp11-aout-ld --entry 01000 -T pdp11-aout.ld %1.o -o %1.out
    bin2load -a -f %1.out -o %1.lda -b 01000
    del /f %1.sav
    lda2sav.exe -o %1.sav %1.lda
    [свернуть]

    Вообщем хорошо что есть рабочий GCC. (а то я пробовал DECUS C для УКНЦ - вот там адъ и погибель, там настоящий Керниган и Ричи стайл, про анси не слышали, только самый трушный С, только хардкор)

  13. Эти 2 пользователя(ей) поблагодарили BlaireCas за это полезное сообщение:

    Oleg N. Cher (14.11.2021), yu.zxpk (14.11.2021)

  14. #19
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,643
    Спасибо Благодарностей отдано 
    2,241
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    112 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тогда раз обращение к параметрам идёт через 4(sp) и 6(sp), то значит атрибут inline игнорится?

    Скрытый текст

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Код:
    int inline rt11_print(int i, const char* ptr)
    {
        asm ("mov 4(sp), r0");
        ...
    }
    [свернуть]

    Кстати, если добавить опцию -fomit-frame-pointer, то указатель фрейма не будет сохраняться на стеке и секции enter/leave будут покомпактнее, а 4(sp) превратится в 2(sp).

  15. Этот пользователь поблагодарил Oleg N. Cher за это полезное сообщение:

    BlaireCas (14.11.2021)

  16. #20
    Activist Аватар для BlaireCas
    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    439
    Спасибо Благодарностей отдано 
    111
    Спасибо Благодарностей получено 
    322
    Поблагодарили
    125 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    если добавить опцию -fomit-frame-pointer, то указатель фрейма не будет сохраняться на стеке
    О, да. Так стало намного лучше.

    А насчет inline - я вообще сомневаюсь что в GCC это работает без включения опций оптимизации. Но с включенной оптимизацией навроде -О1 - скомпиленное "ломается" и у меня не заработало в итоге. "Тонкие" настройки не пробовал. Можно как вариант атрибут на функцию попробовать повесить что-то типа always_inline.. Не изучал такой момент.

    Насчет регистров - самому казалось что тут будет как для ARM, то-есть первые четыре параметра вне зависимости от опций компилятора всегда идут через R0-R3. Но нет, идет через стек. Даже если по стечению обстоятельств один из параметров идет через R0 - в стек он все-равно будет засунут.
    Последний раз редактировалось BlaireCas; 14.11.2021 в 13:29.

  17. Этот пользователь поблагодарил BlaireCas за это полезное сообщение:

    Oleg N. Cher (15.11.2021)

Страница 2 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Вопрос по 1801ВМ1
    от svinka в разделе БК-0010/0011
    Ответов: 35
    Последнее: 27.02.2022, 21:22
  2. Оберон/GCC для УКНЦ/БК
    от Oleg N. Cher в разделе ДВК, УКНЦ
    Ответов: 22
    Последнее: 10.11.2021, 11:15
  3. отладочный модуль на 1801ВМ1
    от Случайность в разделе ДВК, УКНЦ
    Ответов: 16
    Последнее: 21.04.2020, 14:55
  4. 1801ВМ2 А и Б
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 03.05.2010, 11:51

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •