Важная информация

User Tag List

Страница 1 из 5 12345 ПоследняяПоследняя
Показано с 1 по 10 из 41

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

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

    По умолчанию GCC 11.2.1 с поддержкой процессоров 1801вм1 и 1801вм2

    После продолжительных и многократных подходов в GCC была добавлена поддержка процессоров 1801вм1 и 1801вм2.
    Бинарники, собранные под Windows с помощью MING-W64, выложены Славе на сайт:

    http://www.1801bm1.com/files/pdp11/c...out-11.2.1.zip

    c4d55afc5150262f9ebbe3a9749a9d86 ming-w64-pdp11-aout-11.2.1.zip
    Дата сборки: 13.11.21 ~ 16:41

    Выбор модели "target" осуществляется опциями `-mbm1a`, `-mbm1g` или `-mbm2` в дополнение к оригинальным `-m10`, `-m40` и `-m45`.

    `-mbm1` есть алиасом для `-mbm1a` -- процессор 1801вм1а поддержки MUL, как в 1801вм1г.


    Нужно заметить, что данная сборка - это чистый кросс-компилятор без стандартной библиотеки C, без libgcc (нет софтверной реализации MUL, DIV операций). Дело наживное, можно "потянуть" из наработок DEC.
    Соотвественно, буду со временем допиливать libgcc и базовую libc для RT11 (работа с файлами для начала).

    Сборка поддерживает только компиляторы C и C++. Попытка добавить Ada и Fortran с наскока не получилось, возможно оно требует установки каких-то компонентов в систему при сборке, или какие-то специальные ключи конфигураци GCC.

    Известно, что для свежего GCC 11+ есть Modula-2 frontend. Возможно, попробую прикрутить его для любителей изделий Вирта (Паскаль).

    В сборку так же входят утилиты bin2load.exe и lda2sav.exe для облегчения получения выполняемых файлов в RT11.
    Есть репозиторий с примером использования кросс-компилятора для генерации файлов в формате Files11 (*.SAV), использование ASM вставок для вывода символов/строк с помощью EMT 0341, 0351

    https://github.com/yshestakov/pdp11-...ster/hello-gcc
    Последний раз редактировалось yu.zxpk; 13.11.2021 в 17:42. Причина: Обновлен архив со сборкой

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

    bigral (10.11.2021), BlaireCas (13.11.2021), mx (25.11.2021), Oleg N. Cher (10.11.2021), RCgoff (28.11.2021), svofski (10.11.2021), tnt23 (11.11.2021), troosh (24.11.2021), Vslav (10.11.2021), vva (24.03.2022)

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

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

    По умолчанию

    Поделитесь правильной последовательностью создания .sav-файлов при помощи утилиты lda2sav?

    Я делаю так:

    Код:
    @ECHO OFF
    :: http://ancientbits.blogspot.com/2012/07/programming-barebones-pdp11.html
    
    SET CodeAdr=01000
    SET Options=-Wno-write-strings -fverbose-asm -quiet -O2 -Os -fomit-frame-pointer
    SET Include=-I ..\Lib\C -I ..\Lib\Obj -I ..\Lib
    SET Libraries=%Libraries% -L ..\Lib ..\Lib\CGLIB.lib
    
    SET PATH=..\Bin\gcc\bin
    SET CC=..\Bin\gcc\libexec\gcc\pdp11-aout\10.0.1\cc1.exe
    SET AS=pdp11-aout-as.exe
    
    %CC% %Options% %Include% %1.c
    IF errorlevel 1 PAUSE
    %AS% %1.s -o %1.o
    IF errorlevel 1 PAUSE
    pdp11-aout-ld.exe --entry %CodeAdr% -T ldaout.cmd %1.o -o %1.out %Libraries%
    IF errorlevel 1 PAUSE
    bin2load.exe -a -f %1.out -o %1.lda -b %CodeAdr%
    IF errorlevel 1 PAUSE
    lda2sav.exe -o %1.sav %1.lda
    IF errorlevel 1 PAUSE
    Здесь всё делается при помощи скрипта ldaout.cmd, задающего структуру .sav-файла, как я понимаю. Сам ldaout.cmd взят с этой ссылки. Но я всё-таки в глубине души подозреваю, что можно как-то без него... тем более, что полученный мной .sav с точки зрения IDA какой-то подозрительный. Хотя реальщики проверили на живом УКНЦ, работает. Но какое-то смутное сомнение всё-таки осталось...

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

    P.S. Проверил насчёт выпиливания SETD/SETI. Не выпиливаются. Пока так.


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

    По умолчанию

    Последовательность команд сборки SAV включая crt0.s, конфиг линкера LD (pdp11-aout.ld):

    https://github.com/yshestakov/pdp11-...o-gcc/Makefile

    По поводу вставки setd/seti в начало функции main() -- нашел, что оно зависит от "TARGET_FPU" (CPU поддерживает аппаратные операции с float point numbers). У меня там еще есть косяки вокруг парсера опций, исправлю.
    Отключается SETI/SETD добавлением опции `-msoft-float`:

    pdp11-aout-gcc -mbm2 -msoft-float -c -o hello.o hello.c

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

    Oleg N. Cher (10.11.2021)

  7. #4
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,609
    Спасибо Благодарностей отдано 
    2,173
    Спасибо Благодарностей получено 
    133
    Поблагодарили
    99 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А что это за метка ___main и откуда она берётся? Компилирую пустой модуль, где в конце просто emt 0350 для выхода в RT-11.

    pdp11-aout-ld.exe: Empty.o:Empty.o.text+0x2): undefined reference to `__main'


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

    Цитата Сообщение от yu.zxpk Посмотреть сообщение
    Последовательность команд сборки SAV включая crt0.s, конфиг линкера LD (pdp11-aout.ld):

    https://github.com/yshestakov/pdp11-...o-gcc/Makefile
    Это точно рабочий мейкфайл? А то там опции вызова GCC странные: -m10 вместо -mbm2

    pdp11-aout-ld.exe: cannot open linker script file pdp11-aout.ld: No such file or directory
    Так ругается на строку:
    Код:
    pdp11-aout-ld -T pdp11-aout.ld -o $@ $(OBJS) -Map=hello.out.map
    Должен быть ещё скрипт pdp11-aout.ld, в этом и был вопрос.

    И что - работает без задания адреса?

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

    По умолчанию

    1. Функция ___main, возможно, есть частью стандартной libgcc или что-то вообще из новых стандартов C. В любом случае в crt0.s файле можно обьявить метку с инструкций "rts pc"

    2. Да, Makefile рабочий. Просто я этот проект отлаживал года полтора-два тому, когда еще не сделал поддержки -mbm1/-mbm2. Опция -m10 -- это PDP11/10 с процессором LSI-11, подходит для ВМ1. Да, легко поменять под свои нужды

    3. Файл pdp11-aout.ld лежит рядом с Makefile в репозитории. Сравните со своим LD скриптом. У меня там стартовый адрес 01000

    https://github.com/yshestakov/pdp11-.../pdp11-aout.ld

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

    По умолчанию

    Поборол обработку опций для процессоров BM1/BM2:
    * выключен FPU для этих процессоров
    * генерация инструкций `seti / setd` в начале функции main() отключена

    Из особенностей: для BM1 не разрешена MUL инструкция, потому `-mbm1` означает процессор 1801BM1a, а не BM1г. Исправлю в следующей сборке: добавлю `-mbm1g` или `-mbm1a` с соответствующей обработкой в генераторе инструкций

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

    Oleg N. Cher (11.11.2021), troosh (24.11.2021)

  11. #7
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,609
    Спасибо Благодарностей отдано 
    2,173
    Спасибо Благодарностей получено 
    133
    Поблагодарили
    99 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от yu.zxpk Посмотреть сообщение
    1. Функция ___main, возможно, есть частью стандартной libgcc
    Но ведь GCC должен сам подхватывать libgcc без доп. параметров типа -lgcc?

    Цитата Сообщение от yu.zxpk Посмотреть сообщение
    В любом случае в crt0.s файле можно обьявить метку с инструкций "rts pc"
    Даже не знаю, где находится этот crt0.s

    Цитата Сообщение от yu.zxpk Посмотреть сообщение
    Сравните со своим LD скриптом.
    Отличаются одной строкой (в Вашем есть, в моём нет):

    crt0lda.o(.text)

    Кстати, откуда всё-таки берутся эти crt0*? Они не в libgcc вшиты?

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

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Но ведь GCC должен сам подхватывать libgcc без доп. параметров типа -lgcc?

    Даже не знаю, где находится этот crt0.s

    Отличаются одной строкой (в Вашем есть, в моём нет):

    crt0lda.o(.text)

    Кстати, откуда всё-таки берутся эти crt0*? Они не в libgcc вшиты?
    Нет, crt0*.s файлы никогда не были частью libgcc. Это "переходник" между средой (RT-11 как OS, или LDA, как ROM) и функцией main(). Функция main() на вход принимает argc и argv (аргументы программы).
    Кстати, в далеком 88 году, когда мне в руки попал компилятор C для RT-11 на ДВК/УКНЦ, в комплекте не было crt0.s файла. Пришлось разбираться и писать его самому.

    В случае "демо" проекта на GCC, есть 2 вариант crt0 файла: для RT-11 и для LDA (ROM):

    https://github.com/yshestakov/pdp11-...o-gcc/crt0rt.s
    https://github.com/yshestakov/pdp11-...-gcc/crt0lda.s

    В том, что для RT11, используется EMT для корректного выхода обратно в OS. Там же нужно сделать обработку командной строки.

  13. #9
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,609
    Спасибо Благодарностей отдано 
    2,173
    Спасибо Благодарностей получено 
    133
    Поблагодарили
    99 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Код:
    #define main(argc, argv) main(void)
    Обязательно ли задавать своё значение SP=01000? Прога не может работать с тем SP, что ей достался на момент её вызова?

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

    По умолчанию

    В RT-11 есть возможность разобрать аргументы, переданные в программу. Просто я это не умею (забыл как делается).

    На предмет SP=01000 - это такая договоренность. Программа (TEXT сегмент) начинается с 01000, а стек растет вниз от 01000.

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

    Oleg N. Cher (11.11.2021)

Страница 1 из 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

Ваши права

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