100 байт это не так много конечно, но наверное стандарты RT-11 этого требуют. Других объяснений почему могут не работать функции rt11_print() и puts() - у меня нет.
Итак, я беру Ваш pdp11-sav.ld и сырой бинарь после pdp11-aout-ld.exe (в скрипте же уже выбран формат OUTPUT_FORMAT("binary") вместо "a.out-pdp11" как было раньше). Попутно появилась мысль не вызывать pdp11-aout-objcopy.exe для конвертации a.out в bin вообще. Но не тут-то было. Бинарь pdp11-aout-ld.exe даёт, но настраивает его с нашим скриптом крайне криво - при заданном стартовом адресе 01000 (для БК-0010/0011М) адрес константного массива находится _ниже_ адреса кода. Вот сейчас отладчик показывает адрес константного массива 0424, т.е. константный массив размещён _после_ кода, а адрес настроен как будто бы он находится _до_ кода. Притом увеличение этого числа ничего не даёт:
.data : AT(phys + data + 1000)
Я вынужден опять откатиться до формата a.out и вызова objcopy - так хотя бы криво, но работало. А бинарь после aout-ld со съехавшими адресами массивов вообще нерабочий. Повторюсь, что в случае вызова lda2sav этой проблемы наверное нет.
Кстати, может быть, что константные массивы ложатся в секцию (или подсекцию? как это правильно?) .rodata, а не .bss?
- - - Добавлено - - -
Я воспроизвёл проблему на маленьком исходнике:
Test.zip
Как видим, здесь адрес массива равен 016, а должен быть больше 01000.
Я склоняюсь к тому, что проблема есть и в .sav, просто Вы не дошли до работы с конст. массивами.
- - - Добавлено - - -
Кстати, здесь и адрес данных получился странный, наложился на последнюю команду в коде. Видите? Хотя ALIGN(010) в скрипте есть.





Ответить с цитированием