Может кто может помочь с этим вопросом?
Кое какие книги скачал, но пока ни чего не понятно. Где взять образы дисков с тем же ассемблером или с "С".
Как вообще чего делать??
В общем прошу помощи...!
Вид для печати
Может кто может помочь с этим вопросом?
Кое какие книги скачал, но пока ни чего не понятно. Где взять образы дисков с тем же ассемблером или с "С".
Как вообще чего делать??
В общем прошу помощи...!
На uknc.narod.ru смотрел у Арсения?
Там есть асм, но под винду, под УКНЦ вроде не нашел. И "С" не нашел...
Макроассемблер фирмы DEC для PDP-11 называется MACRO-11.
Синтаксис одинаков для всех операционных систем, поэтому годится любое описание языка MACRO-11 ( для любой операционки ). От системы к системе меняются только системные вызовы ( макробиблиотека ).
Под RT-11 язык MACRO-11 компилируется программой MACRO.SAV, макробиблиотека называется SYSMAC.SML
Patron, Спасибо. А ты не мог бы по подробней рассказать, как это все делать? Что бы в итоге получить исполняемый модуль для УКНЦ. Если есть возможность с примером простой программы.
Про УКНЦ я знаю мало (больше про ДВК), но если речь идёт о программировании на Macro-11 для RT-11 - то всё довольно просто.
1. Создаём текстовый файл с именем той программы, которую пишем, и с расширением .MAC
Например - HELLO.MAC :
Если этот файл расположен на устройстве с логическим именем "DK:", а на системном диске присутствуют программы MACRO.SAV, SYSMAC.SML и LINK.SAV, то компиляция, компоновка и запуск на выполнение осуществляются командой RT-11 "EX":Код:;
.MCall .Print, .Exit
.CSect
Start:
.Print #Hello
.Exit
;=====================================
Hello: .ASCIZ /Hello !!!/<15><12><16>/pRIWET !!!/<17>
.Even
.End Start
;
ex hello
У меня результат такой:
Код:
.EX HELLO
Hello !!!
Привет !!!
.
Результатом компиляции стали файлы:
1. HELLO.OBJ ( объектный файл - он уже не нужен )
2. HELLO.SAV - исполнимый файл программы.
Теперь в любой момент можно запустить созданную нами программу HELLO.SAV и насладиться её работой.
Еще раз спасибо.
А "С" у тебя случайно под RT-11 не найдется... ?
В приложении - два комплекта Macro-11 ( из RT-11 v5.4 и v5.7 ) с описанием.
Систем программирования "C" для RT-11 существует много, но я ни одну из них пока не запускал.
Arseny, Спасибо. Блин... я почту не проверял.. от того и не видел... Опс... Прошу пращения...
Patron, Спасибо.
На УКНЦ, как понимаю, в основногм использовали Паскаль, а не СИ.
Насчет компилеров, MACRO-11 входит в систему, здесь есть C (пусть название - TCP/IP for RT-11 не пугает - там один или два образа дискет содержат C). Если покопаться, могу найти FORTRAN IV, FROTRAN 77 и PASCAL. Ну и BASIC наверное есть, но только интерпретатор - компиляторов для RT-11 не видел.
В RT-11 системным языком высокого уровня был FORTRAN (я не прикалываюсь, это правда). В описании местного фортрана была отдельная глава про использование системных вызовов.
Кстати, компилился он очень хорошо и код порождал весьма оптимальный.
form, Спасибо. Если поищешь буду тебе очень признателен.
Подскажите, как правильно по системному запретить передачу кодов клавиш от клавиатуры на терминал, но при этом самому эти коды получать?
Приведу пример: я вывожу какую-то информацию на экран, после чего спрашиваю "Continue?". Тут человек должен нажать любую клавишу, и программа продолжится. Если делать опрос клавиш через EMT 340, то коды клавиш отображаются на экране, а мне этого не надо. Если же делать через чтение данных напрямую из канала 0 (канал клавиатуры), то символы все равно отправляются в монитор и потом печатаются. Т.е. какая-то должна быть системная функция, запрещающая выводить на терминал коды приходящих клавиш, но я ее не знаю.
Для этого надо установить бит TTSPC$ (12й) в $JSW (44).
к примеру:
печатает подсказку, ждет нажатия клавиши, выходитКод:.MCALL .TTYIN,.PRINT,.EXIT
$JSW = 44
TTSPC$ = 10000
TEST: BIS #TTSPC$,@#$JSW
.PRINT #PROMPT
.TTYIN
.EXIT
PROMPT: .ASCII /--->/<200>
---------- Post added at 17:46 ---------- Previous post was at 17:44 ----------
Другой вариант - запретить прерывания от клавиатуры и работать напрямую с регистрами, но этот вариант несовместим с виртуальными программами и не будет работать в системах с поддержкой многотерминальности.
---------- Post added at 17:57 ---------- Previous post was at 17:46 ----------
Еще дополнение - иногда полезен бит TCBIT$ (6й) - при его установке .TTINR (EMT 340) не останавливается в ожидании символа, а проходит дальше с установленным битом C если ничего не нажато.
Спасибо! Буду сейчас пробовать.
А есть документация по этим битам?
---------- Post added at 15:49 ---------- Previous post was at 15:20 ----------
Сделал вот так:
Отключение клавиатуры ESCAPE-последовательностью делаю для того, чтобы во время работы основной программы не пришло прерывание от канала клавиатуры и не сбило мне измерения.Код:
.Print #NextPage ;Печатаем сообщение "Next page?"
.Print #KeyON ;Включить клавиатуру
BIS #TTSPC$,@#$JSW ;Запрет отображения символов на экране
.TTYIN ;Ожидание нажатия клавиши
CMP R0,#13 ;Если код = 13 (Возврат каретки),
BNE 6$ ;то ожидаем еще один код = 10 (перевод строки)
.TTYIN ;
6$:
.Print #KeyOFF ;Отключить клавиатуру
.Print #NextLine ;Переходим на следующую строку
...
NextPage: .ASCII "Next page?"<128>
NextLine: .ASCII <13><10><128>
KeyOFF: .ASCII <27><91><50><104><128>
KeyON: .ASCII <27><91><50><108><128>
Документация есть на pdp-11.nsk.ru кажется System Internals называется для RT-11 V5.6 PDFы настоящие - не сканы.
Замечу, что 27 это не ESC (равно как и 13 - не CR), а 128 - вообще ошибка - по умолчанию циферки восьмеричные если в конце нет точки. Если хочется по умолчанию десятичные сделать - нужно добавить в начале директиву .RADIX 10, но лучше все-таки исходить из стандартных умолчаний :)
Также код клавиши лучше сравнивать байтово - на всякий случай :)
form, Спасибо)
Всегда пожалуйста :)
Собраться бы с силами да рассортировать все, что есть и каталогизировать...
Вот Си если еще нужен, диск загрузочный.
Может кто знает. Решил познакомится с Фортраном. Пролистал книгу по нему (именно по 77 версии). В общем то оказался тот же Бейсик, ни чего в нем сложного нет.
Возникли такие вопросы:
1. Толи я пропустил, то ли не уловил. Я так понимаю Фортран транслируемый язык. То есть готовую программу нельзя откомпилировать в запускаемый файл?
2. Не нашел в книге, возможно это не реализовано. Может ли Фортран работать с портами и памятью? Можно ли делать вставки на ассемблере?
Слово "транслируемый" чаще всего означает то же самое, что и "компилируемый". Компилятор фортрана производит объектный код ( файл .OBJ ), который затем компонуется с библиотекой и даёт в результате исполнимый файл ( .SAV ).
Насчёт ассемблерных вставок - это вряд ли, а вот использование каких-то подпрограмм для доступа к ячейкам, типа PUT(adr,val) и GET(adr) - то почему бы и нет. Нужно только найти правильные имена в описании системной библиотеки фортрана ( SYSLIB ).Цитата:
Не нашел в книге, возможно это не реализовано. Может ли Фортран работать с портами и памятью? Можно ли делать вставки на ассемблере?
На счет программирования на асме под MACRO11.
Есть ли в нем обозначение для представления шестнадцатиричных чисел? Для восмиричных нашел ^O перед числом, а для шестнадцатиричных не нашел. Radix не предлагать.
Можно использовать подпрограммы/функции на ассемблере. Принцип такой: создается файл .MAC с нужными подпрограммами, имя подпрограммы совпадает с меткой ассемблера (должна быть объявлена глобальной). На входе R5 указывает на вектор в котором первое слово - количество переданных аргументов, а следующие слова - адреса передаваемых параметров или -1 (177777 восьм.) если параметр пропущен. Если это функция, возвращать параметры можно через R0 (R0:R1 для двухсловных значений). Все регистры можно менять. Дополнительно остановлюсь на том, что в фортране параметры подпрограмм всегда передаются ссылкой в отличие от C или паскаля, если делается скажем CALL XXX(1), а внутри подпрограммы SUBROUTINE XXX(I) делается присвоение вида I = 3, то при следующем попадании на этот же вызов, в качестве аргумента будет передано 3.
Пример:
Фортран:
Ассемблер:Код:J = IFUFL(1, 2, , 'TEXT', , I)
Живой пример:Код:IFUFL::
;
; В ЭТОМ МЕСТЕ:
; (R5) - 6 (ЧИСЛО АРГУМЕНТОВ)
; 2(R5) - ССЫЛКА НА АРГУМЕНТ "1"
; 4(R5) - ССЫЛКА НА АРГУМЕНТ "2"
; 6(R5) - -1 (АРГУМЕНТ ПРОПУЩЕН)
; 10(R5) - ССЫЛКА НА ASCIZ СТРОКУ 'TEXT'
; 12(R5) - -1 (АРГУМЕНТ ПРОПУЩЕН)
; 14(R5) - ССЫЛКА НА АРГУМЕНТ "I"
;
...
MOV #123456,R0 ;ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
RETURN ;ВОЗВРАТ ПО RTS PC
Код:PROGRAM TEST
CALL TXT('LALALA','XAXAXA',,'BUBUBU')
CALL EXIT
END
.TITLE TXT -- ПЕЧАТЬ ТЕКСТОВЫХ СТРОК
.MCALL .PRINT
TXT:: MOV (R5)+,R1 ;ЧИСЛО АРГУМЕНТОВ
BEQ 30$ ;EQ - НЕТ АРГУМЕНТОВ
10$: MOV (R5)+,R0 ;АДРЕС ОЧЕРЕДНОГО АРГУМЕНТА
CMP #-1,R0 ;ЕСЛИ -1 - АРГУМЕНТ ПРОПУЩЕН
BEQ 20$ ;...ПРОПУСКАЕМ
.PRINT ;ПЕЧАТАЕМ СТРОКУ
20$: SOB R1,10$ ;ЦИКЛИМСЯ ПОКА ЕСТЬ АРГУМЕНТЫ
30$: RETURN ;ВОЗВРАЩАЕМ УПРАВЛЕНИЕ
.END
.SET FOR F77
.FORT F
.MAC A
.LIN F,A,SY:FORLIB/LIB
.RUN F
LALALA
XAXAXA
BUBUBU
.
Еще пример - использование прерываний в фортрановской программе.
Коментарии в ассемблерном коде.
В данном примере прога тупо крутится в цикле, печатая всякую фигню, при нажатии CTRL/C выходит.
^X
---------- Post added at 11:36 ---------- Previous post was at 11:07 ----------
Фортран только транслятор (или компилятор - в данном случае это одно и то же). Бейсики есть и трансляторы (для RT-11 не видел) и интерпретаторы.
Процедура работы с фортрановской программой от исходника до готовой програмы такая (на примере того же RT-11): компиляция (команда FORTRAN), сборка (команда LINK). К примеру:
Здесь мы при сборке указываем библиотеку фортрановских подпрограмм.Код:.FORT FORPRG !КОМПИЛЯЦИЯ ПРОГРАММЫ
.LIN FORPRG/LINK:SY:FORLIB !СБОРКА ПРОГРАММЫ
.!ИЛИ ОДНОЙ КОМАНДОЙ:
.EXE FORPRG/LINK:SY:FORLIB !КОМПИЛЯЦИЯ, СБОРКА, ЗАПУСК
.EXE FORPRG/NORU.... !АНАЛОГИЧНО НО БЕЗ ЗАПУСКА
Библиотека обычно называется FORLIB, но для F77 может называться F77OTS (обычно используется если в системе одновмеренно есть и F77 и FIV).
В RT-11 версий 5.6 и 5.7 компилятор фортрана для команды FORTRAN выбирается командой SET FORTRA F77 или SET FORTRA FORTRA.
Сложного в фортране действительно ничего нет, но надо помнить о некоторых особенностях языка (некоторые из них описаны в прошлых письмах). Типичные ошибки тех, кто привык к C или паскалю:
CALL SUBR(1) - Многие думают, что это вызов подпрограммы SUBR с аргументом 1. Для фортрана это верно только если подпрограмма SUBR не меняет переменную, используемую для передачи параметра. Если меняет - изменение будет действовать при следующем вызове из этого же места.
2. FORMAT('TEXT') - данный формат не напечатает строчку "TEXT" - первый символ в строке используется для форматирования, к примеру:
0 или пробел - печать с новой строки
1 - печать с новой страницы (на терминале отрабатывает 8 переносов строки, на принтере пробрасывает бумагу до следующей страницы)
+ - печать с той же строки на которой стоим
Также для программирования на фортране полнзно изучить описание подпрограмм системной библиотеки - там много нужного. В том числе есть подпрограммы для работы с памятью (насчет портов, на PDP-11 такого понятия отдельно нету).
Документация на английском:
RT-11 V5.6: System Subroutine Library Manual
RT-11 V5.6: System Macro Library Manual
RT-11 V5.6: System Internals Manual
PDP-11 MACRO-11 Language Reference Manual (MACRO-11 Version 5)
PDP-11 FORTRAN IV Language Reference Manual (FORTRAN IV Version 2.6)
PDP-11 FORTRAN 77 Language Reference Manual (FORTRAN 77 Version 5.0)
на русском:
РАФОС-ПЛЮС: Системные таблицы и библиотеки. Руководство программиста.
ФОДОС-2: Программирование периферийных устройств.
ФОДОС-2: Ассемблер. Руководство программиста.
ФОДОС-2: Системная макробиблиотека. Руководство программиста.
ФОДОС-2:Монитор системы. Руководство программиста.
---------- Post added at 11:47 ---------- Previous post was at 11:42 ----------
Бр-р-р! Тяжко в форуме редактировать написанное - еле управился ;)
Есть книжка на тему:
http://www.kodges.ru/97371-oshibki-l...-fortrane.html
После прочтения открываются БЕЗДНЫ ЗНАНИЯ. Начинаешь понимать, насколько глубокий и мощный язык Фортран. :) Но в книжке больше ориентация на ЕС-овский фортран, DEC-овская реализация может отличаться.
Да, отличная книжка.
Я изучал по какой-то старой толстой книге и когда пришел на DEC, оказалось, что там все также, причем в книге упоминались даже TYPE/PRINT/PUNCH :)
Вот GNU F77 как-то посмотрел - там ни тебе с аргументами разобраться ни фортрановский (!) format character не поддерживается :)
Про TYPE/PRINT/PUNCH говорить даже не стану - и так ясно :)
Хорошо хоть WRITE(*) работает :)
--
GOD is REAL, unless declared INTEGER (правило фортрана)
---------- Post added at 15:08 ---------- Previous post was at 14:37 ----------
И раз пошла такая пьянка - пример для современного gcc на обычных i386 машинах :)
Как можно догадаться, программа напечатаетКод:#include <stdio.h>
int
main(void)
{
char c = 128;
if (c != 128)
printf("Shit happens!\n");
return (0);
}
"Shit happens!" :)
По какому принципу происходит прерывание программы по Ctrl-C?
Есть ли возможность при этом выполнить какую-то собственную процедурку, допустим, восстановление векторов прерываний или еще что-то, а уже потом выйти?
И еще, в MACRO-11 очень короткая длина меток, всего 6 символов. Есть ли возможность ее увеличить?
Там же все описано в коментариях.
Из фортрана делается
EXTERNAL SUB
CALL ATTACH(SUB)
...
SUBROUTINE SUB(KEY)
...
END
когда нажимается клавиша, вызывается SUB
и получает параметром код нажатой клавиши
Это собственно просто пример который показывает как передать адрес подпрограммы для последующего использования в ассемблер.
В этом примере подпрограмма просто проверяет код клавиши и если CTRL/C устанавливает переменную которую проверяет основная программа, но в принципе можно было бы прямо из нее вызывать CALL DETACH и CALL EXIT.
Увеличить больше 6 нельзя. Равно как и в фортране имена переменных/подпрограмм/общих блоков итд сделать больше 6 символов.
То есть написать можно и больше 6, но при обработке будут использоваться только 6 из них.
Причем символы годятся не всякие...