User Tag List

Показано с 1 по 10 из 1564

Тема: Программирование на УКНЦ как?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    07.01.2016
    Адрес
    г. Москва
    Сообщений
    27
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    4 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А покажите, пожалуйста, пример как писать оверлейные программы с помощью macro/link?

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

  3. #2

    Регистрация
    20.04.2013
    Адрес
    г. Павловский Посад
    Сообщений
    4,246
    Спасибо Благодарностей отдано 
    498
    Спасибо Благодарностей получено 
    557
    Поблагодарили
    436 сообщений
    Mentioned
    42 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ilynxy Посмотреть сообщение
    А покажите, пожалуйста, пример как писать оверлейные программы с помощью macro/link?
    Это довольно подробно описано в руководстве по вышеуказанным программам. Если нет возможности достать родные книги от ДВК - можно воспользоваться их "Достаточно Точными" копиями из комплекта БК0011/М.
    Если речь идет о написании софта, заведомо не помещающегося в отведенные RT-11 ~40 кбайт пространства пользователя, тогда этот вопрос должен решаться силами пользователя - т.е. "ручками" подгружаются участки кода, что, соответственно, не прибавляет быстродействия софту, если, конечно, не используется ЭД.
    Если речь идет о использовании чрезмерно длинной программы, странслированной с языка высокого уровня - к сожалению, придется так же "ручками" всё подгружать, или даже разбивать прогу на фрагменты - что, соответственно, не фонтан. Это фундаментальные ограничения 16-бит машинок, даже с ДП.
    Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения MMTEMA@MAIL.RU

  4. #3

    Регистрация
    07.01.2016
    Адрес
    г. Москва
    Сообщений
    27
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    4 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MM Посмотреть сообщение
    Это довольно подробно описано в руководстве по вышеуказанным программам. Если нет возможности достать родные книги от ДВК - можно воспользоваться их "Достаточно Точными" копиями из комплекта БК0011/М.
    Если речь идет о написании софта, заведомо не помещающегося в отведенные RT-11 ~40 кбайт пространства пользователя, тогда этот вопрос должен решаться силами пользователя - т.е. "ручками" подгружаются участки кода, что, соответственно, не прибавляет быстродействия софту, если, конечно, не используется ЭД.
    Если речь идет о использовании чрезмерно длинной программы, странслированной с языка высокого уровня - к сожалению, придется так же "ручками" всё подгружать, или даже разбивать прогу на фрагменты - что, соответственно, не фонтан. Это фундаментальные ограничения 16-бит машинок, даже с ДП.
    Да, в мануалах описаны ключи ассемблера (параметры секций) и линкера (указываются какие секции оверлейные). Но живого примера я не нашёл. Ткните пожалуйста прям в ссылку и номер страницы. Или прямо вот скажем экзампл с одним main.mac, двумя ovl1.mac, ovl2.mac и скрипт для сборки мне бы очень помог.

    Поскольку я не копенгаген в RT-11 и macro-11, вопросы:
    1. Хэндлер оверлеев (то есть подгрузка нужных данных с диска в ОЗУ) пишется ручками? Тогда ключи компилятора и всякие поля "оверлейности" в заголовке файла -- чтобы я руками их парсил? Печаль. Мне мечталось, что этим занимается ОС. То есть я её, максимум, вежливо прошу вытеснить один оверлей другим и это всё, что я делаю руками. А скорее, создаётся некая таблица thunk'ов, где чекается в какой оверлей идёт вызов и он подгружается автоматом. И руками вообще ничего делать не надо.

    2. Можно ли сделать в macro-11 такой финт, который в других ассемблерах делается директивой .org. Т.е. бинарные данные размещаются последовательно по месту (скажем по адресу "."), а всякие смещения считаются с .org addr.
    то есть, например:

    Код:
            .psect .code, abs
            . = 1000 ; это для линкера
            .org 2000 ; это для ассемблера
    label:  mov #label, r0
    Должен сгенерировать объектник, который при линковке будет расположен с абсолютного адреса 1000 (или там, куда попадёт, если не было ". = nnnn"), но содержать инструкцию mov #2000, r0 (ассемблер должен думать, что он генерировал код для адреса 2000).
    Как такое делается в macro-11?

    3. Почему некоторые LINK.SAV для RT-11 поддерживают опцию /REL, а некоторые нет? Это задаётся на этапе генерации системы? Очень удобная штука для генерации программ для периферийного процессора УКНЦ, поскольку таблица reloc'ов пристёгивается автоматически к выходному файлу. Нет, есть, конечно, способы писать position independent code руками или, там, макросы нагородить для генерации reloc секции. Но зачем, если есть готовый инструмент.

  5. #4

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

    По умолчанию

    Цитата Сообщение от ilynxy Посмотреть сообщение
    Но живого примера я не нашёл. Ткните пожалуйста прям в ссылку и номер страницы.
    Что первым приходит в голову - сама RT-11, виднее всего это на примере KMON'а. А так - ничего не помню. Когда-то, когда я только изучал RT-11, я на пробу написал оверлейную программку, но увы, ничего не помню, кроме того, что особо сложного ничего не было.

    Помню только, что пользовался "зеленой" книжкой (РАФОС).
    Последний раз редактировалось AFZ; 26.07.2016 в 12:58.
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

  6. #5

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ilynxy Посмотреть сообщение
    А покажите, пожалуйста, пример как писать оверлейные программы с помощью macro/link?
    В RT-11 все довольно примитивно. В линкере перечисляются модули с ключом /O:n (/V:n для XM оверлеев), где n указывает номер сегмента в который отображается код (номера писать в порядке возрастания). Вот вобщем-то и все.
    Для примера есть R.MAC - вызывает подпрограммы из оверлеев и печатает данные, переданные ими; и S(1,2,3,4).MAC которые эти данные передают...

    R:
    Код:
            .TITLE  ROOT - ROOT SEGMENT
            .MCALL  .EXIT,.PRINT            ;СИСТЕМНЫЕ ВЫЗОВЫ
    
    START:: CALL    SEG1                    ;ВЫЗОВ СЕГМЕНТА 1
            CALL    SEG2                    ;ВЫЗОВ СЕГМЕНТА 2
            CALL    SEG3                    ;ВЫЗОВ СЕГМЕНТА 3
            CALL    SEG4                    ;ВЫЗОВ СЕГМЕНТА 4
            .EXIT                           ;ВЫХОД
    
    PSTAT:: MOV     #BUFF,R0                ;АДРЕС БУФЕРА
            MOV     #FMTS,R1                ;СТРОКА ФОРМАТА
            MOV     #ARGS,R2                ;БЛОК АРГУМЕНТОВ
            MOV     (R5)+,@R2               ;СОХРАНЯЕМ НОМЕР СЕГМЕНТА
            MOV     (R5)+,2(R2)             ;СОХРАНЯЕМ СТАРТОВЫЙ АДРЕС СЕГМЕНТА
            CALL    $EDMSG                  ;ФОРМАТИРУЕМ
            CLRB    @R0                     ;ПРЕВРАЩАЕМ В ASCIZ
            .PRINT  #BUFF                   ;ПЕЧАТАЕМ
            RTS     R5                      ;ВОЗВРАЩАЕМСЯ
    
    BUFF:   .BLKB   80.                     ;БУФЕР
    ARGS:   .BLKW   2                       ;БЛОК АРГУМЕНТОВ
    
    FMTS:   .ASCIZ  /SEG %D, PC %P/
    
            .END    START
    S1-S4 (содержимое одинаковое, меняем только циферки):
    Код:
            .TITLE  SEG1
    
    SEG1::  JSR     R5,PSTAT                ;ПОДПРОГРАММА ПЕЧАТИ
            .WORD   1,SEG1                  ;НОМЕР СЕГМЕНТА, СТАРТОВЫЙ АДРЕС
            RETURN                          ;ВОЗВРАТ
    
            .END
    Компиляция:
    Код:
    .MAC R
    
    .MAC S1
    
    .MAC S2
    
    .MAC S3
    
    .MAC S4
    
    .
    Простая сборка:
    Код:
    .LIN/LINK:RSXLIB R,S1,S2,S3,S4
    
    .RU R
    SEG 1, PC 001224
    SEG 2, PC 001236
    SEG 3, PC 001250
    SEG 4, PC 001262
    
    .
    Оверлейная сборка (делаем два сегмента [кроме корневого]):
    Код:
    .LIN/LINK:RSXLIB R/PRO
    *S1/O:1
    *S2/O:1
    *S3/O:2
    *S4/O:2
    *//
    
    .RU R
    SEG 1, PC 003774
    SEG 2, PC 003774
    SEG 3, PC 004010
    SEG 4, PC 004010
    
    .
    Как-то так. Остальное легко понимается

    В первом случае в памяти будет примерно такая картина:
    Код:
    +--------+
    |   R    |
    +--------+
    |   S1   |
    +--------+
    |   S2   |
    +--------+
    |   S3   |
    +--------+
    |   S4   |
    +--------+
    | RSXLIB |
    +--------+
    Во втором - такая:
    Код:
    +--------+
    |   R    |
    +--------+
    | RSXLIB |
    +--------+
    |  S1/S2 |
    +--------+
    |  S3/S4 |
    +--------+
    Последний раз редактировалось form; 26.07.2016 в 16:34.
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  7. #6

    Регистрация
    07.01.2016
    Адрес
    г. Москва
    Сообщений
    27
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    4 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    В RT-11 все довольно примитивно. В линкере перечисляются модули с ключом /O:n (/V:n для XM оверлеев), где n указывает номер сегмента в который отображается код (номера писать в порядке возрастания). Вот вобщем-то и все.
    Моя принципиальная ошибка в том, что я считал, что оверлей распространяется на именованную секцию. А это оказывается модуль. То есть, если я правильно понимаю, один оверлейный сегмент не может быть разбит на несколько объектных модулей? Или может? Это, конечно, не принципиально, просто интересно.

  8. #7

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ilynxy Посмотреть сообщение
    оверлей распространяется на именованную секцию
    В других системах так и есть. В RSX-11 к примеру у сборщика задач целый язык описания оверлеев есть и оперирует он секциями в том числе.

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

    Цитата Сообщение от ilynxy Посмотреть сообщение
    Или может?
    Может. Для этого нужно /O писать последнему модулю в цепочке.
    На примере выше:
    Код:
    .LIN/LINK:RSXLIB R/PRO
    *S1,S2/O:1
    *S3,S4/O:2
    *//
    
    .RU R
    SEG 1, PC 003760
    SEG 2, PC 003772
    SEG 3, PC 004006
    SEG 4, PC 004020
    
    .
    Получили два сегмента, каждый из двух модулей. В данном случае правда смысл потерялся в виду того, что ничего не перекрывается, но как пример сойдет
    Вот более интересный пример - в один сегмент два оверлея по два модуля:
    Код:
    .LIN/LINK:RSXLIB R/PRO
    *S1,S2/O:1
    *S3,S4/O:1
    *//
    
    .RU R
    SEG 1, PC 003760
    SEG 2, PC 003772
    SEG 3, PC 003760
    SEG 4, PC 003772
    
    .
    Последний раз редактировалось form; 26.07.2016 в 23:12.
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

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

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

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

Похожие темы

  1. Программирование на Эмуляторе. Возможно ли это?
    от Toxic в разделе Программирование
    Ответов: 10
    Последнее: 20.01.2008, 19:20
  2. Программирование Altera и JTAG
    от Mikka_A в разделе Несортированное железо
    Ответов: 7
    Последнее: 18.01.2008, 09:07
  3. Программирование и софтмейк на NES
    от Splinter в разделе Nintendo
    Ответов: 7
    Последнее: 30.06.2006, 04:31

Ваши права

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