Да, там вложенные процедуры и функции. Главной является 035532, в неё вложены 033406, 033720 и 035326. Доступ к локальным переменным главной процедуры осуществляется через регистр R4. В зависимости от уровня вложенности во вложенных процедурах/функциях в самом начале стоит целая куча команд MOV (R4),R4. Обычно они пропускаются при запуске, но если вызов происходит из другой вложенной процедуры/функции, то смотря от уровня вложенности, точка запуска смещается вверх и исполняются команды MOV (R4),R4. А команда SUB #106,SP реально выделяет место для локальных переменных главной процедуры. Уже разобрался, все числа восьмеричные:
LOC00: array [1..74] of char;
LOC74,LOC76: integer;
LOC100: boolean;
LOC101: char;
LOC102,LOC104: integer;
Последний раз редактировалось Alex_K; 14.11.2022 в 12:55.
nzeemin(14.11.2022), Oleg N. Cher(15.11.2022)
Добил диапазон 33366-37002. Логическое выражение в процедуре L35532 дало повод помучиться. Сначала разбирал на ассемблере, что, где и от чего. Вроде бы понял всё, написал на Паскале. В итоге транслятор Паскаля падал, а эмулятор RT-11 закрывался. Закомментировал его и получил ошибку, что строка слишком длинная (188 символов). Пришлось разнести на три строки, трансляция прошла успешно.
nzeemin(15.11.2022), Oleg N. Cher(15.11.2022)
Добавил процедуру 37004. Остался главный модуль.
Заметил, что при сравнении строк, они меняются местами. Уже подзабыл про это. Но эти ошибки подправятся потом при двоичном сравнении с оригиналом.
nzeemin(15.11.2022), Oleg N. Cher(16.11.2022)
Главный модуль - в состоянии "почти готово", но ошибок ещё много.
Табы заменил на два пробела. Локально я табы любой длины могу делать, а на гитхабе неудобно смотреть когда много их.
- - - Updated - - -
Залил всё вместе на гитхаб.
- - - Updated - - -
Ещё нашёл правильный PASCAL.OBJ для этой программы, вот отсюда: https://archive.pdp-11.org.ru/ukdwk_...omplekt/MY.DSK
Alex_K(15.11.2022), Oleg N. Cher(16.11.2022)
Я займусь доделкой основной процедуры и исправлением ошибок в ней.
Пока показывает ~140 различающихся байт - на всём файле.
Последний раз редактировалось nzeemin; 15.11.2022 в 19:53.
Насколько я понимаю это версия PASFIS, для процессоров с поддержкой EIS и FIS. В ней подпрограммы умножения и деления используют команды EIS. Также отсутствует эмулятор FIS.
- - - Добавлено - - -
Кстати для сравнения лучше использовать BINCON из RT-11. В эмуляторе RT-11 можно дать команду DIFF/BIN/OUT:файл файл1,файл2. Там все числа восьмеричные, всё прекрасно видно.
У меня свои способы 8-)
Собираю и линкую под эмулятором RT-11, сравниваю через WinMerge - очень наглядно всё видно за счёт подсветки, но числа 16-ричные.
Сейчас уже осталось 123 байта различий.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)