PDA

Просмотр полной версии : Программирование на УКНЦ как?



Страницы : [1] 2 3 4 5 6 7

Voxel
09.04.2011, 15:07
Может кто может помочь с этим вопросом?

Кое какие книги скачал, но пока ни чего не понятно. Где взять образы дисков с тем же ассемблером или с "С".
Как вообще чего делать??

В общем прошу помощи...!

dk_spb
09.04.2011, 15:23
На uknc.narod.ru смотрел у Арсения?

Voxel
09.04.2011, 16:03
Там есть асм, но под винду, под УКНЦ вроде не нашел. И "С" не нашел...

Patron
09.04.2011, 16:20
Макроассемблер фирмы DEC для PDP-11 называется MACRO-11.

Синтаксис одинаков для всех операционных систем, поэтому годится любое описание языка MACRO-11 ( для любой операционки ). От системы к системе меняются только системные вызовы ( макробиблиотека ).

Под RT-11 язык MACRO-11 компилируется программой MACRO.SAV, макробиблиотека называется SYSMAC.SML

Voxel
09.04.2011, 16:36
Patron, Спасибо. А ты не мог бы по подробней рассказать, как это все делать? Что бы в итоге получить исполняемый модуль для УКНЦ. Если есть возможность с примером простой программы.

Patron
09.04.2011, 17:21
Про УКНЦ я знаю мало (больше про ДВК), но если речь идёт о программировании на Macro-11 для RT-11 - то всё довольно просто.

1. Создаём текстовый файл с именем той программы, которую пишем, и с расширением .MAC

Например - HELLO.MAC :


;
.MCall .Print, .Exit

.CSect
Start:
.Print #Hello
.Exit

;=====================================

Hello: .ASCIZ /Hello !!!/<15><12><16>/pRIWET !!!/<17>
.Even

.End Start
;


Если этот файл расположен на устройстве с логическим именем "DK:", а на системном диске присутствуют программы MACRO.SAV, SYSMAC.SML и LINK.SAV, то компиляция, компоновка и запуск на выполнение осуществляются командой RT-11 "EX":

ex hello

У меня результат такой:



.EX HELLO
Hello !!!
Привет !!!

.



Результатом компиляции стали файлы:

1. HELLO.OBJ ( объектный файл - он уже не нужен )
2. HELLO.SAV - исполнимый файл программы.

Теперь в любой момент можно запустить созданную нами программу HELLO.SAV и насладиться её работой.

Voxel
09.04.2011, 18:38
Еще раз спасибо.

А "С" у тебя случайно под RT-11 не найдется... ?

Arseny
09.04.2011, 18:48
Осталось найти MACRO-11 потому как кроме самого macro.sav у меня больше, ни чего не нашлось.

А "С" у тебя случайно под RT-11 не найдется... ?

А то, что я тебе на почту вчера скинул - не подходит?
На дисках с эмулятором есть Macro-11 - только что проверил (sysimage.dsk).

Patron
09.04.2011, 19:03
В приложении - два комплекта Macro-11 ( из RT-11 v5.4 и v5.7 ) с описанием.

Систем программирования "C" для RT-11 существует много, но я ни одну из них пока не запускал.

Voxel
09.04.2011, 19:12
Arseny, Спасибо. Блин... я почту не проверял.. от того и не видел... Опс... Прошу пращения...


Patron, Спасибо.

Жека:)
09.04.2011, 21:28
На УКНЦ, как понимаю, в основногм использовали Паскаль, а не СИ.

SKcorp.
09.04.2011, 22:11
На УКНЦ, как понимаю, в основногм использовали Паскаль, а не СИ.

Бейсик ;-)

form
11.04.2011, 07:50
Синтаксис одинаков для всех операционных систем

Более того, OBJ файлы одинаковы для всех систем (при правильном переносе файла) :)
Компилить можно в одной системе, собирать в другой.

form
11.04.2011, 10:36
Насчет компилеров, MACRO-11 входит в систему, здесь (http://shop-pdp.kent.edu/rthtml/tcpip.htm) есть C (пусть название - TCP/IP for RT-11 не пугает - там один или два образа дискет содержат C). Если покопаться, могу найти FORTRAN IV, FROTRAN 77 и PASCAL. Ну и BASIC наверное есть, но только интерпретатор - компиляторов для RT-11 не видел.

AlecV
11.04.2011, 18:34
В RT-11 системным языком высокого уровня был FORTRAN (я не прикалываюсь, это правда). В описании местного фортрана была отдельная глава про использование системных вызовов.

Кстати, компилился он очень хорошо и код порождал весьма оптимальный.

form
11.04.2011, 19:05
В RT-11 системным языком высокого уровня был FORTRAN (я не прикалываюсь, это правда). В описании местного фортрана была отдельная глава про использование системных вызовов.

Кстати, компилился он очень хорошо и код порождал весьма оптимальный.

Это вообще в DECовских PDP-11 системах. В RSX к примеру в executive reference manual вызовы сразу пишутся в macro-11 и fortran виде. Некоторых разумеется в фортрановском виде нету, но большинство - доступны.

Voxel
11.04.2011, 19:18
form, Спасибо. Если поищешь буду тебе очень признателен.

form
11.04.2011, 20:08
form, Спасибо. Если поищешь буду тебе очень признателен.

ok, разгребу немного мусор - найду.

Titus
13.04.2011, 14:35
Подскажите, как правильно по системному запретить передачу кодов клавиш от клавиатуры на терминал, но при этом самому эти коды получать?
Приведу пример: я вывожу какую-то информацию на экран, после чего спрашиваю "Continue?". Тут человек должен нажать любую клавишу, и программа продолжится. Если делать опрос клавиш через EMT 340, то коды клавиш отображаются на экране, а мне этого не надо. Если же делать через чтение данных напрямую из канала 0 (канал клавиатуры), то символы все равно отправляются в монитор и потом печатаются. Т.е. какая-то должна быть системная функция, запрещающая выводить на терминал коды приходящих клавиш, но я ее не знаю.

form
13.04.2011, 14:57
Подскажите, как правильно по системному запретить передачу кодов клавиш от клавиатуры на терминал, но при этом самому эти коды получать?
Приведу пример: я вывожу какую-то информацию на экран, после чего спрашиваю "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 если ничего не нажато.

Titus
13.04.2011, 15:49
Для этого надо установить бит TTSPC$ (12й) в $JSW (44).
Спасибо! Буду сейчас пробовать.
А есть документация по этим битам?

---------- Post added at 15:49 ---------- Previous post was at 15:20 ----------

Сделал вот так:




.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>



Отключение клавиатуры ESCAPE-последовательностью делаю для того, чтобы во время работы основной программы не пришло прерывание от канала клавиатуры и не сбило мне измерения.

form
13.04.2011, 16:26
Спасибо! Буду сейчас пробовать.
А есть документация по этим битам?

---------- Post added at 15:49 ---------- Previous post was at 15:20 ----------

Сделал вот так:




.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>



Отключение клавиатуры ESCAPE-последовательностью делаю для того, чтобы во время работы основной программы не пришло прерывание от канала клавиатуры и не сбило мне измерения.

Документация есть на pdp-11.nsk.ru кажется System Internals называется для RT-11 V5.6 PDFы настоящие - не сканы.

Замечу, что 27 это не ESC (равно как и 13 - не CR), а 128 - вообще ошибка - по умолчанию циферки восьмеричные если в конце нет точки. Если хочется по умолчанию десятичные сделать - нужно добавить в начале директиву .RADIX 10, но лучше все-таки исходить из стандартных умолчаний :)

Также код клавиши лучше сравнивать байтово - на всякий случай :)

Titus
13.04.2011, 16:44
Замечу, что 27 это не ESC (равно как и 13 - не CR), а 128 - вообще ошибка - по умолчанию циферки восьмеричные если в конце нет точки. Если хочется по умолчанию десятичные сделать - нужно добавить в начале директиву .RADIX 10, но лучше все-таки исходить из стандартных умолчаний :)

Также код клавиши лучше сравнивать байтово - на всякий случай :)
У меня в начале исходника стоит .RADIX 10, т.к. восмеричная система - это не для меня. Она ближе PDP-шникам. А я привык к десятичной и шестнадцатиричной.
А на счет байтов - согласен.

form
13.04.2011, 16:57
У меня в начале исходника стоит .RADIX 10, т.к. восмеричная система - это не для меня. Она ближе PDP-шникам. А я привык к десятичной и шестнадцатиричной.
А на счет байтов - согласен.

Ну можно циферки с точками писать - так будет всем понятно :)

К слову коды клавиш/символов вообще удобнее выносить в начало - к примеру так:



ESC = ^O33
CR = ^O15
LF = ^O12

...

.ASCIZ <ESC>/H/<ESC>/J/<CR><LF>/TEXT/


по-моему будет удобнее :)

form
13.04.2011, 18:20
form, Спасибо. Если поищешь буду тебе очень признателен.

Собрался с силами и нашел...

forpas.dsk - FORTRAN IV и PASCAL (SAVы с либами)
f77.dsk - дистрибутив FORTRAN 77
dir.txt - каталог этих дисков
insf77.txt - пример инсталяции FORTRAN-77

Voxel
13.04.2011, 19:36
form, Спасибо)

form
13.04.2011, 19:38
Всегда пожалуйста :)
Собраться бы с силами да рассортировать все, что есть и каталогизировать...

Vamos
16.04.2011, 20:21
Вот Си если еще нужен, диск загрузочный.

Voxel
20.04.2011, 22:08
Может кто знает. Решил познакомится с Фортраном. Пролистал книгу по нему (именно по 77 версии). В общем то оказался тот же Бейсик, ни чего в нем сложного нет.
Возникли такие вопросы:
1. Толи я пропустил, то ли не уловил. Я так понимаю Фортран транслируемый язык. То есть готовую программу нельзя откомпилировать в запускаемый файл?

2. Не нашел в книге, возможно это не реализовано. Может ли Фортран работать с портами и памятью? Можно ли делать вставки на ассемблере?

Patron
20.04.2011, 22:22
Я так понимаю Фортран транслируемый язык. То есть готовую программу нельзя откомпилировать в запускаемый файл?Слово "транслируемый" чаще всего означает то же самое, что и "компилируемый". Компилятор фортрана производит объектный код ( файл .OBJ ), который затем компонуется с библиотекой и даёт в результате исполнимый файл ( .SAV ).


Не нашел в книге, возможно это не реализовано. Может ли Фортран работать с портами и памятью? Можно ли делать вставки на ассемблере?Насчёт ассемблерных вставок - это вряд ли, а вот использование каких-то подпрограмм для доступа к ячейкам, типа PUT(adr,val) и GET(adr) - то почему бы и нет. Нужно только найти правильные имена в описании системной библиотеки фортрана ( SYSLIB ).

Titus
20.04.2011, 23:19
На счет программирования на асме под MACRO11.
Есть ли в нем обозначение для представления шестнадцатиричных чисел? Для восмиричных нашел ^O перед числом, а для шестнадцатиричных не нашел. Radix не предлагать.

Patron
20.04.2011, 23:29
На счет программирования на асме под MACRO11.
Есть ли в нем обозначение для представления шестнадцатиричных чисел? Для восмиричных нашел ^O перед числом, а для шестнадцатиричных не нашел. Radix не предлагать.
^B - Binary
^C - Complement
^D - Decimal
^F - Floating
^O - Octal
^R - Radix50

form
21.04.2011, 03:40
Насчёт ассемблерных вставок - это вряд ли, а вот использование каких-то подпрограмм для доступа к ячейкам, типа PUT(adr,val) и GET(adr) - то почему бы и нет. Нужно только найти правильные имена в описании системной библиотеки фортрана ( SYSLIB ).

Можно использовать подпрограммы/функции на ассемблере. Принцип такой: создается файл .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

.

form
21.04.2011, 07:24
Еще пример - использование прерываний в фортрановской программе.
Коментарии в ассемблерном коде.

В данном примере прога тупо крутится в цикле, печатая всякую фигню, при нажатии CTRL/C выходит.

form
21.04.2011, 08:47
На счет программирования на асме под MACRO11.
Есть ли в нем обозначение для представления шестнадцатиричных чисел? Для восмиричных нашел ^O перед числом, а для шестнадцатиричных не нашел. Radix не предлагать.

^X

---------- Post added at 11:36 ---------- Previous post was at 11:07 ----------


Может кто знает. Решил познакомится с Фортраном. Пролистал книгу по нему (именно по 77 версии). В общем то оказался тот же Бейсик, ни чего в нем сложного нет.
Возникли такие вопросы:
1. Толи я пропустил, то ли не уловил. Я так понимаю Фортран транслируемый язык. То есть готовую программу нельзя откомпилировать в запускаемый файл?

2. Не нашел в книге, возможно это не реализовано. Может ли Фортран работать с портами и памятью? Можно ли делать вставки на ассемблере?

Фортран только транслятор (или компилятор - в данном случае это одно и то же). Бейсики есть и трансляторы (для 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 (http://pdp-11.org.ru/files/docs/rt-11/rtv56-syslib.zip)
RT-11 V5.6: System Macro Library Manual (http://pdp-11.org.ru/files/docs/rt-11/rtv56-sysmac.zip)
RT-11 V5.6: System Internals Manual (http://pdp-11.org.ru/files/docs/rt-11/rtv56-sysint.zip)
PDP-11 MACRO-11 Language Reference Manual (MACRO-11 Version 5) (http://pdp-11.org.ru/files/docs/rsx-11/rsxm41-macro11.zip)
PDP-11 FORTRAN IV Language Reference Manual (FORTRAN IV Version 2.6) (http://pdp-11.org.ru/files/docs/rsx-11/rsxm41-f4.zip)
PDP-11 FORTRAN 77 Language Reference Manual (FORTRAN 77 Version 5.0) (http://pdp-11.org.ru/files/docs/rsx-11/rsxm41-f77.zip)

на русском:

РАФОС-ПЛЮС: Системные таблицы и библиотеки. Руководство программиста. (http://pdp-11.org.ru/files/docs/rt-11/r23310.txt)
ФОДОС-2: Программирование периферийных устройств. (http://pdp-11.org.ru/files/docs/rt-11/fodos-dev.txt)
ФОДОС-2: Ассемблер. Руководство программиста. (http://pdp-11.org.ru/files/docs/rt-11/fodos-macro.txt)
ФОДОС-2: Системная макробиблиотека. Руководство программиста. (http://pdp-11.org.ru/files/docs/rt-11/fodos-sysmac.txt)
ФОДОС-2:Монитор системы. Руководство программиста. (http://pdp-11.org.ru/files/docs/rt-11/fodos-rt11mon.txt)


---------- Post added at 11:47 ---------- Previous post was at 11:42 ----------

Бр-р-р! Тяжко в форуме редактировать написанное - еле управился ;)

AlecV
21.04.2011, 11:30
CALL SUBR(1) - Многие думают, что это вызов подпрограммы SUBR с аргументом 1. Для фортрана это верно только если подпрограмма SUBR не меняет переменную, используемую для передачи параметра. Если меняет - изменение будет действовать при следующем вызове из этого же места. Есть книжка на тему:

http://www.kodges.ru/97371-oshibki-lovushki-pri-programmirovanii-na-fortrane.html

После прочтения открываются БЕЗДНЫ ЗНАНИЯ. Начинаешь понимать, насколько глубокий и мощный язык Фортран. :) Но в книжке больше ориентация на ЕС-овский фортран, DEC-овская реализация может отличаться.

form
21.04.2011, 12:08
Есть книжка на тему:

http://www.kodges.ru/97371-oshibki-lovushki-pri-programmirovanii-na-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!" :)

Titus
21.04.2011, 14:48
По какому принципу происходит прерывание программы по Ctrl-C?
Есть ли возможность при этом выполнить какую-то собственную процедурку, допустим, восстановление векторов прерываний или еще что-то, а уже потом выйти?
И еще, в MACRO-11 очень короткая длина меток, всего 6 символов. Есть ли возможность ее увеличить?

form
21.04.2011, 14:53
По какому принципу происходит прерывание программы по 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 из них.
Причем символы годятся не всякие...

Titus
21.04.2011, 15:00
Вообще-то я про асм) Я на фортране не программирую)

---------- Post added at 15:00 ---------- Previous post was at 14:56 ----------


^X
К сожалению не прокатило. MACRO на нее ругается.

form
21.04.2011, 15:05
Вообще-то я про асм) Я на фортране не программирую)

Ну а в асме еще проще - убирается фортран, остальное используется локально. Только в принципе стоит сначала решить стоит ли вообще связываться с железом напрямую :)
Иногда это оправдано, иногда просто делает программу менее универсальной.

В общем случае, работать напрямую с клавиатурой полезно если хочется получить полный контроль над клавиатурой (в RT-11 стандартными вызовами например нельзя получить с клавиатуры коды CTRL/S, CTRL/O (в советский переделках CTRL/D) - они всегда обрабатываются системой. Если нужен контроль над ними - тогда надо самостоятельно работать с регистрами клавиатуры. При этом надо или запретить прерывания от клавиатуры (иначе система будет параллельно ловить клавиши и получится хрень) или установить свой обработчик прерываний (что делается в данном примере). Следует помнить, что запрет прерываний не будет работать в RT-11 с многотерминальной поддержкой - там система периодически восстанавливает их. Также не будет работать вообще доступ к железу в XB/XM/ZB/ZM мониторах если программа запущена командой VRUN.

Что касается вывода на экран, то тут особых хитростей нету, но надо использовать или системные вызовы или работать с регистрами, но не смешивать или смешивать, но аккуратно: следует помнить, что между вызовом .TTYOUT или .PRINT и реальным появлением символов на экране есть существенная разница :)

---------- Post added at 18:05 ---------- Previous post was at 18:05 ----------


Вообще-то я про асм) Я на фортране не программирую)

---------- Post added at 15:00 ---------- Previous post was at 14:56 ----------


К сожалению не прокатило. MACRO на нее ругается.

Как конкретно писалось? Какая версия системы?

Titus
21.04.2011, 15:09
Ну а в асме еще проще - убирается фортран, остальное используется локально. Только в принципе стоит сначала решить стоит ли вообще связываться с железом напрямую :)
Иногда это оправдано, иногда просто делает программу менее универсальной.
Мне обязательно надо с железом)
Я думал, что без перехватчика клавиатуры можно установить какую-либо функцию, которая запускается по Ctrl-C перед прерыванием пользовательской программы.
Суть проста, я в программе временно меняю вектора прерываний 4 и 10 на свои собственные. Но пользователь может нажать в середине программы Ctrl-C, и произойдет выход в систему. При этом надо восстановить обратно системные вектора 4 и 10.

form
21.04.2011, 15:12
Собственно посмотрел насчет ^X - действительно, в RT-11 V4 и старее не работает, но возникает вопрос, а зачем вообще использовать RT-11 V4? :)

---------- Post added at 18:12 ---------- Previous post was at 18:11 ----------


Я думал, что без перехватчика клавиатуры можно установить какую-либо функцию, которая запускается по Ctrl-C перед прерыванием пользовательской программы.

Да, можно.
Только не перед прерыванием, а в принципе, а уж программа сама решает что с этим делать.
.SCCA называется - в описании макробиблиотеки есть.

Titus
21.04.2011, 15:13
Как конкретно писалось? Какая версия системы?
Обычный MACRO, который кто-то тут на форуме размещал. Да он, впрочем, на каждой системной дискетке УКНЦ есть.

form
21.04.2011, 15:19
Обычный MACRO, который кто-то тут на форуме размещал. Да он, впрочем, на каждой системной дискетке УКНЦ есть.

На УКНЦ обычно всякие фодосы, они от версии 5 происходят, так, что даже если там старый компилятор - легко подкладываться должен новый :)

Версия проверяется так:



.R MACRO
* (нажимается CR [ВК по русски])
MACRO V05.06
*^C


---------- Post added at 18:19 ---------- Previous post was at 18:18 ----------

Ну или можно просто взять RT-11 V5.7 и запользовать на УК-НЦ - я где-то тут даже выкладывал образ.

form
21.04.2011, 15:21
MACRO V5.6
LINK V5.45
CREF V5.05
LIBR V5.12

из RT-11V5.7

Patron
21.04.2011, 15:22
Собственно посмотрел насчет ^X - действительно, в RT-11 V4 и старее не работает, но возникает вопрос, а зачем вообще использовать RT-11 V4? Старый вариант компилятора MACRO.SAV не ругается на русские буквы.

Но у меня он уже начал вылетать, если при запуске установлена актуальная системная дата.

Поэтому, похоже - проще "вылечить русскобоязнь" у компилятора из RT-11 v5.7, нежели доводить до ума старую версию.

Titus
21.04.2011, 15:22
.R MACRO
* (нажимается CR [ВК по русски])
MACRO V05.06
*^C


---------- Post added at 18:19 ---------- Previous post was at 18:18 ----------

Ну или можно просто взять RT-11 V5.7 и запользовать на УК-НЦ - я где-то тут даже выкладывал образ.

У меня MACRO при запуске без аргументов выводит надпись Files? и если нажимать ввод, просто повторяет ее. Словом, версию не показывает.

form
21.04.2011, 15:25
У меня MACRO при запуске без аргументов выводит надпись Files? и если нажимать ввод, просто повторяет ее. Словом, версию не показывает.

Не при запуске без аргументов, а при наборе команды "MACRO" - это разные вещи. Нужно запускать командой "R MACRO".

---------- Post added at 18:25 ---------- Previous post was at 18:23 ----------


Старый вариант компилятора MACRO.SAV не ругается на русские буквы.

Но у меня он уже начал вылетать, если при запуске установлена актуальная системная дата.

Поэтому, похоже - проще "вылечить русскобоязнь" у компилятора из RT-11 v5.7, нежели доводить до ума старую версию.

Это скорее всего не старый, а адаптированный. А вылечить - нет проблем - у меня есть исходники последнего - могу выложить если не лень покопаться :)

Titus
21.04.2011, 15:27
MACRO V5.6
LINK V5.45
CREF V5.05
LIBR V5.12

из RT-11V5.7

Он у меня наругался на все строчки исходника с ошибкой I.
Может потому что я только файл MACRO записал на диск, а другие из данного пака не писал.

form
21.04.2011, 15:28
Не, ошибся, MACO нету. LINK есть.

---------- Post added at 18:28 ---------- Previous post was at 18:28 ----------


Он у меня наругался на все строчки исходника с ошибкой I.
Может потому что я только файл MACRO записал на диск, а другие из данного пака не писал.

Так сами строчки-то где? Я их не вижу и гадать не могу.

Titus
21.04.2011, 15:31
Не, ошибся, MACO нету. LINK есть.

---------- Post added at 18:28 ---------- Previous post was at 18:28 ----------



Так сами строчки-то где? Я их не вижу и гадать не могу.
Вообще на все строчки в программе. А их там 700 штук. Предыдущая версия MACRO компилировала. Попробую посмотреть, что за версия.

---------- Post added at 15:31 ---------- Previous post was at 15:30 ----------

Предыдущая, которая работает, но не понимает ^X, версия V05.03b

form
21.04.2011, 15:39
Вообще на все строчки в программе. А их там 700 штук. Предыдущая версия MACRO компилировала. Попробую посмотреть, что за версия.

Так достаточно сделать тестовый файл с парой строчек и посмотреть :)

Вот к примеру:



.MAIN. MACRO V05.06 Thursday 21-Apr-11 18:31 Page 1


1 000000 012700 052652 MOV #^X55AA,R0
2 000001 .END
.MAIN. MACRO V05.06 Thursday 21-Apr-11 18:31 Page 1-1
Symbol table



. ABS. 000000 000 (RW,I,GBL,ABS,OVR)
000004 001 (RW,I,LCL,REL,CON)
Errors detected: 0

*** Assembler statistics


Work file reads: 0
Work file writes: 0
Size of work file: 28 Words ( 1 Pages)
Size of core pool: 22016 Words ( 86 Pages)
Operating system: RT-11

Elapsed time: 00:00:00.15
DK:TEST,DK:TEST=DK:TEST


---------- Post added at 18:38 ---------- Previous post was at 18:32 ----------

Ну собственно понятно, ошибка I это как раз левые символы. Классический компилер 8 бит не понимает.

---------- Post added at 18:39 ---------- Previous post was at 18:38 ----------

А про ругань на ^X - я так примера и не увидел - просто для интереса :)

Titus
21.04.2011, 15:40
Так достаточно сделать тестовый файл с парой строчек и посмотреть :)

Исходник из 2-х строчек:

MOV #^X55AA,R0
.END


Результат работы MACRO:


EQ .END#^X55AA,R0
?MACRO-E-Errors detected: 1

form
21.04.2011, 15:41
Э-э...
Ошибка E - нету .END, и на листинге в ошибке именно это и наблюдается. Чем редактировалось?

Patron
21.04.2011, 15:45
А вылечить - нет проблем - у меня есть исходники последнего - могу выложить если не лень покопаться :)Отлично !

Меняю на исходники редактора Edik (http://zx.pk.ru/attachment.php?attachmentid=31581) ( их уже нет даже у автора :)

form
21.04.2011, 15:46
Отлично !

Меняю на исходники редактора Edik ( их уж нет даже у автора :)

Ну я ужен посмотрел - MACRO там все-таки нету. Есть LINK, KED, K52, а MACRO где-то зажилен :)

Titus
21.04.2011, 15:47
Э-э...
Ошибка E - нету .END, и на листинге в ошибке именно это и наблюдается. Чем редактировалось?
Редактировалось обычным Aditor'ом на PC. Посмотрел, после .END не стоит 0D/0A. Добавил.

Теперь твоя версия MACRO компилирует.
Однако ругается на мой большой исходник. Возможно это из-за русских буковков в комментариях.
А моя версия MACRO 05.03b вот что пишет:


AQ 2 000000 012767 000000 000000G MOV #^X55AA,R0

Получается, если выбирать из двух зол - отсутствие комментов на русском, или непонимание шестнадцатиричных цифр - выберу второе)

Patron
21.04.2011, 15:49
Ну я ужен посмотрел - MACRO там все-таки нету.Об том и речь.

Придётся дизассемблировать, а с оверлейными программами это довольно проблематично.

form
21.04.2011, 15:53
Об том и речь.

Придётся дизассемблировать, а с оверлейными программами это довольно проблематично.

Дизассемблировать не проблематично, разбирать муторно :)

Вот, приложил исходники какие на src kit есть.
Была идея как-то SL переделать для поддержки VT52 (в нем в теории даже строчки для этого есть) - он много мощнее советского (не путать с DECовским однострочным SL), но уж больно уродливый исходник - сразу видно Mentecовский :)

Patron
21.04.2011, 16:02
Вот, приложил исходники какие на src kit есть.Прошлым летом весь этот CD был выложен на тот же FTP, где до этого был только его обрезанный вариант.

Это связано с прекращением дековской лицензии.

Похоже, что теперь любое дековское ПО стало freeware.

form
21.04.2011, 16:09
Прошлым летом весь этот CD выложили на тот же FTP, где до этого был только его обрезанный вариант.

Это связано с прекращением дековской лицензии.

Похоже, что теперь любое дековское ПО стало freeware.

DECовская лицензия прекратилась весьма давно ибо владельцем почти всего что касается PDP-11 давно является Mentec. С текущим статусом не все ясно - я внятной информации не получил. Некоторые продукты вообще повисли в воздухе - к примеру DECmail-11 - они ни в Mentec не ушли ни в Compaq. Известно только, что Mentec свернул работы по PDP-11. Что касается урезанного CD, если имеется в виду RT11DV исошник, то это - не оно. В RT11DV никакими исходниками не пахнет - это подборка инсталяционных китов. Здесь же именно source kit, такой валяется (явно не светясь) на trailing-edge.com :)

---------- Post added at 19:09 ---------- Previous post was at 19:07 ----------

Так или иначе, но все давно забили на все и стали понемногу выкладывать DEC/Mentecовское :)

Вот S&Hное бы еще... Натыкался на ссылку что кто-то договорился с ними о разрешении выложить hobbyist kitы, обещал выложить и... На этом дело и кончилось. Что удалось достать по теме TSX - это дистрибы в которых уже покопались советские ручонки :)

Patron
21.04.2011, 16:48
Здесь же именно source kit, такой валяется (явно не светясь) на trailing-edge.comДействительно, исходники RT-11 v5.7 - лучше качать с trailing-edge.com: v57bld.dsk (ftp://ftp.trailing-edge.com/pub/rt_dists/rt11_57_sources/v57bld.dsk) ( 29M ).

Однако, подлинным фанатам RT-11 - в качестве дополнения можно также рекомендовать набор всех официальных дистрибутивов RT-11 ( от v1.0 до v5.7 ):

RT11DV50.ISO.zip (http://www.classiccmp.org/PDP-11/RT-11/dists/RT11DV50.ISO.zip) ( 24M ).

Там тоже есть v57bld.dsk ( под именем RTV5RL.07S ), но с обнулённым содержанием. Кроме того, затёрты таже диски RTV5RL.06S и RTV5RL.03S с более полными комплектами исходников v5.6 и v5.3

А ведь у кого-то наверняка есть рабочие версии образов RTV5RL.06S и RTV5RL.03S - для полноты картины было бы весьма интересно их раздобыть.

form
21.04.2011, 16:51
Действительно, исходники RT-11 v5.7 - лучше качать с trailing-edge.com: v57bld.dsk (ftp://ftp.trailing-edge.com/pub/rt_dists/rt11_57_sources/v57bld.dsk) ( 29M ).

Однако, подлинным фанатам RT-11 - в качестве дополнения можно также рекомендовать набор всех официальных дистрибутивов RT-11 ( от v1.0 до v5.7 ):

RT11DV50.ISO.zip (http://www.classiccmp.org/PDP-11/RT-11/dists/RT11DV50.ISO.zip) ( 24M ).

Там тоже есть v57bld.dsk ( под именем RTV5RL.07S ), но с обнулённым содержанием. Кроме того, затёрты таже диски RTV5RL.06S и RTV5RL.03S с более полными комплектами исходников v5.6 и v5.3

А ведь у кого-то наверняка есть рабочие версии образов RTV5RL.06S и RTV5RL.03S - для полноты картины было бы весьма интересно их раздобыть.

Ну этот набор китов у меня тоже есть. Есть и другие сторонние некоторые. Образы .xxS рабочими быть не могут - это заполнители пустые - чтобы совместимость с ISO9660 была, о чем там в README написано :)

Patron
21.04.2011, 17:15
Ну этот набор китов у меня тоже есть. Есть и другие сторонние некоторые. Образы .xxS рабочими быть не могут - это заполнители пустые - чтобы совместимость с ISO9660 была, о чем там в README написано :)Я не против, чтобы образы были совместимы с ISO9660 и даже были при этом заполнены нулями.

Но дело в том, что имея пустой образ RTV5RL.07S - мы одновременно (хотя и в другом месте) имеем такого же размера образ v57bld.dsk, содержащий интересующие нас файлы исходников.

Поэтому, видя пустые образы RTV5RL.06S и RTV5RL.03S - мы можем обоснованно предположить, что где-то в природе должны быть и соответствующие образы v56bld.dsk и v53bld.dsk с файлами исходников.

Но существуют ли где-то на самом деле образы с файлами исходников v5.6 и v5.3 ?

form
21.04.2011, 17:21
Я не против, чтобы образы были совместимы с ISO9660 и даже были при этом заполнены нулями.

Но дело в том, что имея пустой образ RTV5RL.07S - мы одновременно (хотя и в другом месте) имеем такого же размера образ v57bld.dsk, содержащий интересующие нас файлы исходников.

Поэтому, видя пустые образы RTV5RL.06S и RTV5RL.03S - мы можем обоснованно предположить, что где-то в природе должны быть и соответствующие образы v56bld.dsk и v53bld.dsk с файлами исходников.

Но существуют ли где-то на самом деле образы с файлами исходников v5.6 и v5.3 ?

Что касается размеров, то с учетом того, что округляются они до блока - совпасть размером не так уж трудно. Однако внутри - пустота, а когда они выкладывали обрезанный ISO - внутри порезаных DSK была отнюдь не пустота, а каталог и только данные были забиты нулями. А насчет исходников - я только 5.7 видел, причем там валяются и куски еще времен 5.01.

---------- Post added at 20:21 ---------- Previous post was at 20:18 ----------

Методом научного тыка обнаружил, что родные MACRO до версии 05.01b включительно (RT-11 V05.01) нормально воспринимают русские буквы. Более новые - ругаются, а советские программеры тут непричем :)

Patron
21.04.2011, 17:24
А насчет исходников - я только 5.7 видел, причем там валяются и куски еще времен 5.01.Было бы интересно иметь полностью комментированные исходники SJ монитора.

И уж конечно - все хотели бы посмотреть на исходники MACRO.SAV, BASIC.SAV и FORTRA.SAV

Ведь проблемы не только с MACRO. При установке в системе современной даты - любой BASIC.SAV для RT-11 ( а у меня их куча разных ) вылетает по команде LIST.

form
21.04.2011, 17:31
Было бы интересно иметь полностью комментированные исходники SJ монитора.

И уж конечно - все хотели бы посмотреть на исходники MACRO.SAV, BASIC.SAV и FORTRA.SAV

Ведь проблемы не только с MACRO. При установке в системе современной даты - любой BASIC.SAV для RT-11 ( а у меня их куча разных ) вылетает по команде LIST.

SJ монитор собственно умер еще в версии 5.6, с тех пор SB :)
Насчет документирования - надо просто взять и навалиться толпой постепенно коментируя. В частности там есть кусок кода в загрузчике который относится к RTEM - если его разобрать, можно будет написать грузилку RT-11 в RSX/POS :)

Насчет дат - такие вещи как правило фиксятся куда проще чем 8битности ибо DEC любил использовать типовые подпрограммы TWODEC (симптомы - даты с двоеточиями, точкозапятыми итд в 2000ых годах) - это можно попробовать пропатчить. Я не так давно BASIC-PLUS-2 для RSX пропатчил на эту тему - в дистрибе RSX есть патчи, но они расчитаны на полный кит BP2, а у меня только MicroRSXный где сам BASIC идет уже собраным.

Кстати о BASIC, мне тут попадалась этакая штука - MU/BASIC - это многопользовательский многотерминальный BASIC, работающий в RT-11 с многотерминальной поддержкой. Вот только я уже про него не помню ничего :)

Patron
21.04.2011, 17:47
SJ монитор собственно умер еще в версии 5.6, с тех пор SBДля настольных компьютеров типа ДВК - даже SJ монитор довольно избыточен.

Я давно собираюсь сделать минимальную версию SJ монитора с поддержкой расширенной даты.


Кстати о BASIC, мне тут попадалась этакая штука - MU/BASIC - это многопользовательский многотерминальный BASIC, работающий в RT-11 с многотерминальной поддержкой.Да, весьма похоже, что полный дистрибутив MU/BASIC есть в интернете (т.к. я недавно его скачал). Особенность всех дековских дистрибутивов BASIC - компоновка из файлов .OBJ

У меня, похоже, где-то лежит ленточка с дистрибутивом BASIC-RAFOS, но читал я её последний раз лет 25 назад на СМ-1420 (тогда же и сгенерил кучу этих бэйсиков на все случаи жизни ).

form
21.04.2011, 17:55
Для настольных компьютеров типа ДВК - даже SJ монитор довольно избыточен.

Я давно собираюсь сделать минимальную версию SJ монитора с поддержкой расширенной даты.

Да, весьма похоже, что полный дистрибутив MU/BASIC есть в интернете (т.к. я недавно его скачал). Особенность всех дековских дистрибутивов BASIC - компоновка из файлов .OBJ

У меня, похоже, где-то лежит ленточка с дистрибутивом BASIC-RAFOS, но читал я её последний раз лет 25 назад на СМ-1420 (тогда же и сгенерил кучу этих бэйсиков на все случаи жизни ).

Ну SB это и есть бывший SJ. Даже вопросы про него при SYSGENе за все время начиная с 5.0 так и не изменились :)

Я впрочем на простых машинах и FB успешно использовал с пользой.

Если хочется сделать минимальный - так почему бы не сделать его из SB? - с датами там уже все в порядке, а остальное при желании порезать можно :)

Titus
21.04.2011, 17:55
Методом научного тыка обнаружил, что родные MACRO до версии 05.01b включительно (RT-11 V05.01) нормально воспринимают русские буквы. Более новые - ругаются, а советские программеры тут непричем :)
А как же быть с 05.03b, которая у меня не ругается?

form
21.04.2011, 18:10
А BASIC меня сейчас для RSX интересует: у меня только BASIC-PLUS-2 остался, а это компилер. Оболочка у него есть, но это не интерпретатор, а нечто вроде среды разработки и каждая интерактивная команда - это неявная отдельная программа:



PDP-11 BASIC-PLUS-2 V2.7-00

BASIC2

A = 10

BASIC2

PRINT A

0

BASIC2

A = 10 \ PRINT A

10

BASIC2


Полноценный интерпретатор остался в OpenVMS/VAX и в RSTS/E. В OpenVMS/Alpha уже голый компилятор :)

---------- Post added at 21:00 ---------- Previous post was at 20:58 ----------


А как же быть с 05.03b, которая у меня не ругается?

Мне не попалась 5.03 версия в дистрибах которые смотрел. Если закинуть сюда файл, на досуге покопаю разные дистрибы и если найду похожий который ругается - просто сравню их бинарно :)

---------- Post added at 21:01 ---------- Previous post was at 21:00 ----------

Это может быть запросто переделкой советской где и версию поменяли. Я в свое время помню уже встречал такое - прога отличается двумя байтами и это - номер версии :)

---------- Post added at 21:10 ---------- Previous post was at 21:01 ----------

Нашел 05.03b настоящий. Ругается.
Где тот что не ругается? - сравним :)



.ru du1:macro
*
MACRO V05.03b
*TEST=TEST
AQ 7 000010 012767 000000 000000G MOV #^X55AA,R0
I 9 000016 374 324 317 TEXT: .ASCIZ /|TO ?ROSTO TEKST DLQ ?/
000021 040 322 317
000024 323 324 317
000027 040 324 305
000032 313 323 324
000035 040 304 314
000040 321 040 322
000043 317 327 305
000046 322 313 311
000051 000
?MACRO-E-Errors detected: 2
TEST=TEST
*^C

Patron
21.04.2011, 18:11
Ну SB это и есть бывший SJ. Даже вопросы про него при SYSGENе за все время начиная с 5.0 так и не изменились :)

Я впрочем на простых машинах и FB успешно использовал с пользой.

Если хочется сделать минимальный - так почему бы не сделать его из SB? - с датами там уже все в порядке, а остальное при желании порезать можно :)Судя по сравнению объёмов занимаемой памяти - резать придётся очень много :)

form
21.04.2011, 18:13
Судя по сравнению объёмов занимаемой памяти - резать придётся очень много :)

При желании можно много чего порезать :)

---------- Post added at 21:13 ---------- Previous post was at 21:12 ----------

Навскидку - выкинуть воддержку DEC PRO которая по умолчанию включена :)
Вроде это даже можно через conditionals на этапе сисгена сделать.

Patron
21.04.2011, 18:15
Кстати, в описании монитора SB сказано, что это однозадачный вариант монитора FB, не имеющий никакого отношения к старому монитору SJ.

Voxel
21.04.2011, 18:17
И мне помогите вот еще с чем.

Есть такой вот АСМ: 26661

Но он не поддерживает макро комманды? Или там как то можно их включить?

И есть ли какой нибудь АСМ под УКНЦ(PDP-11) в котором можно на ПЦ писать и компелировать.

И еще. Может кто поведать как происходит загрузка с диска или с контроллера винта?

form
21.04.2011, 18:18
Кстати, в описании монитора SB сказано, что это однозадачный вариант монитора FB, не имеющий никакого отношения к старому монитору SJ.

А это так и было во времена SJ. Просто теперь все мониторы имеют однозадачный и многозадачный вариант. Более того, в доке прямо сказано, что SB заменил SJ.

Patron
21.04.2011, 18:22
А это так и было во времена SJ.У SJ и FB совершенно разные ядра, тогда как SB и FB - это одно и то же ядро.

form
21.04.2011, 18:24
У SJ и FB совершенно разные ядра, тогда как SB и FB - это одно и то же ядро.

И об этом говорится прямо: рмоны слиты в один файл.

---------- Post added at 21:24 ---------- Previous post was at 21:23 ----------

Вот собственно строчка из релнотесов:

Common Monitor Sources: RT–11 monitors are now built from one set of common
sources. The traditional Single Job Monitor (SJ) has been replaced with a "Single
Background" (SB) monitor that is conditionally assembled from these common
sources. This will provide a more reliable monitor, that is more consistent as
well as more maintainable with the others.

Patron
21.04.2011, 18:26
есть ли какой нибудь АСМ под УКНЦ(PDP-11) в котором можно на ПЦ писать и компелировать.На мой взгляд - проще всего использовать эмулятор.

Я пишу ассемблерные тексты в блокноте Windows, копирую их в образ диска и компилирую в эмуляторе - получается просто и быстро.

form
21.04.2011, 18:29
На мой взгляд - проще всего использовать эмулятор.

Я пишу ассемблерные тексты в блокноте Windows, копирую их в образ диска и компилирую в эмуляторе - получается просто и быстро.

Я предпочитаю родной EDT или KED которые отлично работают в эмуляторе (с полноценным keypad) :)

К слову KED/KEX и K52 (если его собрать) в 5.7 поддерживают журналы как EDT :)

Patron
21.04.2011, 18:37
Я предпочитаю родной EDT или KED которые отлично работают в эмуляторе (с полноценным keypad) :)

К слову KED/KEX и K52 (если его собрать) в 5.7 поддерживают журналы как EDT :)Мне нравится возможность видеть больше 80 символов в строке и больше 24 строк в окне текста, не говоря уже обо всех возможностях, предоставляемых использованием мыши при редактировании.

По-хорошему надо бы написать для Windows универсальный текстовый редактор с возможностью колапса синтаксических блоков, определяемых по маскам, задаваемым в файле описания редактируемого синтаксиса ( MAC, BAS, FOR, C, PAS и т.п. ).

form
21.04.2011, 18:39
Мне нравится возможность видеть больше 80 символов в строке и больше 24 строк в окне текста, не говоря уже обо всех возможностях, предоставляемых использованием мыши при редактировании.

По-хорошему надо бы написать для Windows универсальный текстовый редактор с возможностью колапса синтаксических блоков, определяемых по маскам, задаваемым в файле описания редактируемого синтаксиса ( MAC, BAS, FOR, C, PAS и т.п. ).

Насчет количества строк и колонок - EDT не противоречит.
Насчет мыши - есть EDT-Plus for windows который и совместим с EDT и с мышью :)

Вот только нумерация строк не как у EDT: в настоящем EDT номера строк (старых) не меняются от того, что в процессе редактирования что-то удалено или добавлено :)

Patron
21.04.2011, 18:45
Без возможности свернуть/развернуть произвольные блоки текста - работа с большими исходниками затруднена.

Я не знаю ни одного текстового редактора для Windows, который бы давал такую возможность.

form
21.04.2011, 19:04
Однако мы отклонились от темы... Где тот MACRO 05.03b который не ругается? У меня в укнцшных образах нашелся только 05.00 который хотя и незначительно отличается от родного 05.00, но изменения не касаются восьмибитности - родной не ругается...

---------- Post added at 22:04 ---------- Previous post was at 21:55 ----------

Кстати об RT11DV... Там интересная фраза есть в README:

Future CDs for the current versions (V1-0 and V5-0) will be produced as
significant improvements become available. In addition, a second set of
CDs, V2-0 and V6-0 have been started which will contain layered products
such as FORTRAN IV, FORTRAN 77, Multi-User Basic and C. Source files
for all distributions are also a goal for inclusion.

Правда F77 и в этом есть - лежит в виде DSK в дистрибе 5.7...

Titus
21.04.2011, 19:08
Однако мы отклонились от темы... Где тот MACRO 05.03b который не ругается? У меня в укнцшных образах нашелся только 05.00 который хотя и незначительно отличается от родного 05.00, но изменения не касаются восьмибитности - родной не ругается...

Вот этот.

form
21.04.2011, 19:12
Вот этот.

Ругается точно также...


.RU MAC503
*TEST=TEST
I 7 000010 322 317 323 TEXT: .ASCIZ /?ROSTO TEKST DLQ ?ROWE/
000013 324 317 040
000016 324 305 313
000021 323 324 040
000024 304 314 321
000027 040 322 317
000032 327 305 322
000035 313 311 056
000040 056 056 000
?MACRO-E-Errors detected: 1
TEST=TEST
*

Patron
21.04.2011, 19:14
Ругается точно также...А на коды 016 и 017 ругается ?

form
21.04.2011, 19:17
А на коды 016 и 017 ругается ?

Нет, не ругается.

Patron
21.04.2011, 19:18
Нет, не ругается.А более поздние - ругаются.

form
21.04.2011, 19:32
А более поздние - ругаются.

Да, 05.04 ругается. А приложенный 05.03b к слову 1:1 оригинал.

---------- Post added at 22:32 ---------- Previous post was at 22:20 ----------

Кстати из koi-8 ему не нравятся всего 5 букв:

П, Ч, Ъ, п и ч

Проверил в RT-11 05.07 и RSX-11M-PLUS 4.6 -- одинаково.

Titus
21.04.2011, 21:49
У меня 05.03b не ругается на русские комментарии (кодировка Windows),
а более поздние ругаются, на сколько я понимаю.

Patron
21.04.2011, 21:52
У меня 05.03b не ругается на русские комментарии (кодировка Windows),
а более поздние ругаются, на сколько я понимаю.А кодировка Windows по дороге от редактора до компилятора случайно не превращается в КОИ-7 ?

form
21.04.2011, 21:59
У меня 05.03b не ругается на русские комментарии (кодировка Windows),
а более поздние ругаются, на сколько я понимаю.

В виндовсной кодировке тоже ругаться будет только на 5 букв: р, ю, я, Р, Ю. К остальным претензий не будет.
И ругаются не поздние, а включая этот самый 05.03b.

form
21.04.2011, 23:38
Вобщем держите.
MACRO V05.06 не ругающийся на KOI8.
В архиве SIPP патч и поправленный бинарь.
Все оказалось тупо до безобразия.

На предмет <SI>/<SO> не правил, если очень хочется - нужно SIPPом или еще чем по оффсету 31622 записать 401.

Titus
22.04.2011, 00:03
А кодировка Windows по дороге от редактора до компилятора случайно не превращается в КОИ-7 ?
А это надо спросить у автора плагина для TotalCommander'а)

form
22.04.2011, 07:19
Патчик который позволяет сделать ODT, работающий без участия операционной системы (для ODT V05.08 из RT-11 V05.07). Переименоввываем в ODTPAT.MAC и выполняем команды:



.MAC ODTPAT

.R PAT
*ODTHWD=ODT,ODTPAT
*^C


Получаем ODTHWD с которым можно собирать бессистемные программы.

Для других версий RT-11 нужно смотреть родной файл CUSTOM.TXT на предмет
корректного значения символа ..GVAL и подставить его в ODTPAT.MAC.

form
22.04.2011, 09:09
На всякий случай - тупой дизассемблер: никаких анализов не делает, структуру
файла не проверяет, тупо дизассемблирует все подряд, считая, что есть только код, код, код и ничего больше :)
Иногда может пригодится для разборок с драйверами или еще чем. К слову, именно этим дизассемблером дизассемблировал MACRO.SAV и за пару минут нашел где ему не нравятся русские буквы :)

В архиве EXEшники для Win32 и OpenVMS/AXP.
Синтакс тупой: disasm [-b базовыйадрес] файл > листинг

Patron
22.04.2011, 13:42
MACRO V05.06 не ругающийся на KOI8.Строго говоря - на полный набор КОИ-8 и этот вариант ругается:



1 ;
2 ; Тест
3 ;
I 4 .ASCII /?/ ; 200
I 5 .ASCII /?/ ; 201
I 6 .ASCII /?/ ; 202
I 7 .ASCII /?/ ; 203
I 8 .ASCII /?/ ; 204
I 9 .ASCII /?/ ; 205
I 10 .ASCII /?/ ; 206
I 11 .ASCII /?/ ; 207
I 12 .ASCII /?/ ; 210
13 000000 211 .ASCII / / ; 211
I 14 .ASCII /?/ ; 212
I 15 .ASCII /?/ ; 213
I 16 .ASCII /?/ ; 214
I 17 .ASCII /?/ ; 215
I 18 .ASCII /?/ ; 216
I 19 .ASCII /?/ ; 217
20 000001 016 144 141 .ASCII /ДА/ ; ################
000004 017
I 21 .ASCII /?/ ; 220
I 22 .ASCII /?/ ; 221
I 23 .ASCII /?/ ; 222
I 24 .ASCII /?/ ; 223
I 25 .ASCII /?/ ; 224
I 26 .ASCII /?/ ; 225
I 27 .ASCII /?/ ; 226
I 28 .ASCII /?/ ; 227
I 29 .ASCII /?/ ; 230
I 30 .ASCII /?/ ; 231
I 31 .ASCII /?/ ; 232
I 32 .ASCII /?/ ; 233
I 33 .ASCII /?/ ; 234
I 34 .ASCII /?/ ; 235
I 35 .ASCII /?/ ; 236
I 36 .ASCII /?/ ; 237
37 ; ###############################
I 38 .ASCII /?/ ; 240
39 000005 241 .ASCII /!/ ; 241
40 000006 242 .ASCII /"/ ; 242
41 000007 243 .ASCII /#/ ; 243
I 42 .ASCII /?/ ; 244
43 000010 245 .ASCII /%/ ; 245
I 44 .ASCII /?/ ; 246
45 000011 247 .ASCII /'/ ; 247
46 000012 250 .ASCII /(/ ; 250
47 000013 251 .ASCII /)/ ; 251
48 000014 252 .ASCII /*/ ; 252
49 000015 253 .ASCII /+/ ; 253
I 50 .ASCII /?/ ; 254
I 51 .ASCII /?/ ; 255
I 52 .ASCII /?/ ; 256
I 53 .ASCII /?/ ; 257
54 ; ###############################
55 000016 260 .ASCII /0/ ; 260
56 000017 261 .ASCII /1/ ; 261
57 000020 262 .ASCII /2/ ; 262
58 000021 263 .ASCII /3/ ; 263
I 59 .ASCII /?/ ; 264
60 000022 265 .ASCII /5/ ; 265
61 000023 266 .ASCII /6/ ; 266
62 000024 267 .ASCII /7/ ; 267
I 63 .ASCII /?/ ; 270
64 000025 271 .ASCII /9/ ; 271
65 000026 272 .ASCII /:/ ; 272
66 000027 273 .ASCII /;/ ; 273
67 000030 274 .ASCII /</ ; 274
68 000031 275 .ASCII /=/ ; 275
I 69 .ASCII /?/ ; 276
70 000032 277 .ASCII /?/ ; 277


На коды старше 0277 не ругается, на коды младше - ругается.

В приложении - использовавшийся тест.

form
22.04.2011, 14:20
Строго говоря - на полный набор КОИ-8 и этот вариант ругается:



1 ;
2 ; Тест
3 ;
I 4 .ASCII /?/ ; 200
I 5 .ASCII /?/ ; 201
I 6 .ASCII /?/ ; 202
I 7 .ASCII /?/ ; 203
I 8 .ASCII /?/ ; 204
I 9 .ASCII /?/ ; 205
I 10 .ASCII /?/ ; 206
I 11 .ASCII /?/ ; 207
I 12 .ASCII /?/ ; 210
13 000000 211 .ASCII / / ; 211
I 14 .ASCII /?/ ; 212
I 15 .ASCII /?/ ; 213
I 16 .ASCII /?/ ; 214
I 17 .ASCII /?/ ; 215
I 18 .ASCII /?/ ; 216
I 19 .ASCII /?/ ; 217
20 000001 016 144 141 .ASCII /ДА/ ; ################
000004 017
I 21 .ASCII /?/ ; 220
I 22 .ASCII /?/ ; 221
I 23 .ASCII /?/ ; 222
I 24 .ASCII /?/ ; 223
I 25 .ASCII /?/ ; 224
I 26 .ASCII /?/ ; 225
I 27 .ASCII /?/ ; 226
I 28 .ASCII /?/ ; 227
I 29 .ASCII /?/ ; 230
I 30 .ASCII /?/ ; 231
I 31 .ASCII /?/ ; 232
I 32 .ASCII /?/ ; 233
I 33 .ASCII /?/ ; 234
I 34 .ASCII /?/ ; 235
I 35 .ASCII /?/ ; 236
I 36 .ASCII /?/ ; 237
37 ; ###############################
I 38 .ASCII /?/ ; 240
39 000005 241 .ASCII /!/ ; 241
40 000006 242 .ASCII /"/ ; 242
41 000007 243 .ASCII /#/ ; 243
I 42 .ASCII /?/ ; 244
43 000010 245 .ASCII /%/ ; 245
I 44 .ASCII /?/ ; 246
45 000011 247 .ASCII /'/ ; 247
46 000012 250 .ASCII /(/ ; 250
47 000013 251 .ASCII /)/ ; 251
48 000014 252 .ASCII /*/ ; 252
49 000015 253 .ASCII /+/ ; 253
I 50 .ASCII /?/ ; 254
I 51 .ASCII /?/ ; 255
I 52 .ASCII /?/ ; 256
I 53 .ASCII /?/ ; 257
54 ; ###############################
55 000016 260 .ASCII /0/ ; 260
56 000017 261 .ASCII /1/ ; 261
57 000020 262 .ASCII /2/ ; 262
58 000021 263 .ASCII /3/ ; 263
I 59 .ASCII /?/ ; 264
60 000022 265 .ASCII /5/ ; 265
61 000023 266 .ASCII /6/ ; 266
62 000024 267 .ASCII /7/ ; 267
I 63 .ASCII /?/ ; 270
64 000025 271 .ASCII /9/ ; 271
65 000026 272 .ASCII /:/ ; 272
66 000027 273 .ASCII /;/ ; 273
67 000030 274 .ASCII /</ ; 274
68 000031 275 .ASCII /=/ ; 275
I 69 .ASCII /?/ ; 276
70 000032 277 .ASCII /?/ ; 277


На коды старше 0277 не ругается, на коды младше - ругается.

В приложении - использовавшийся тест.

Я разрешал только буквы.
Коды же 200-277 неоднозначны и везде дают разный результат. Код 233 вообще служебный у VT100-совместимых терминалов - заменяет в 8битном режиме <ESC>/[/. Поэтому и не стал добавлять. Если есть желание - по оффсетам 32004-32102 прописать что-нибудь вроде 401.

Вообще все выглядит так: по оффсету 31604 начинается таблица CTLTBL. Каждый байт соответствует коду символа начиная с 0 и до самого 377. Флаги такие:



CT.ALP 000040
CT.COM 000001
CT.EOL 000000
CT.LC 000100
CT.NUM 000020
CT.PC 000271
CT.PCX 000010
CT.SMC 000200
CT.SP 000004
CT.SPT 000006
CT.TAB 000002


Что они означают можно догадаться по названию или методом научного тыка в таблицу (названия такие как они в исходниках).

Patron
22.04.2011, 15:55
Попробовал снять все ограничения на использование символов КОИ-7 и КОИ-8 в комментариях и текстовых константах.

В приложении - последняя версия программного комплекта MACRO-11 ( включая компилятор MACRO V05.06r со снятыми ограничениями ).

form
22.04.2011, 16:02
SIPP патч для простоты :)

form
25.04.2011, 07:20
Поддержка 8бит в RT-11 V5.7 (SLP патчи для RMON.MAC и EDTG.MAC).
Поддержка включается определением conditional EIGH$T = 1 на этапе SYSGEN.

Патч тупо разрешает 8бит, хотя может правильнее запользовать PASAL$ бит в JSW, который правда отмечен как undocumented и используется для VENU$C=1.

В перспективе - добавка вопроса в SYSGEN на эту тему и правка KED/K52.
К слову в сорцах KED/K52 в коментариях отмечены места "change for 8bit", но там придется подумать - 8бит у них выполняет какую-то функцию. Тупо поправленный KED работает, но русский текст показывает в инверсном цвете :)

form
18.05.2011, 10:52
Раз уж есть тема по программированию, предлагаю сюда же свалить всякие хитрости какие кто пользует :)

Например такие:



JSR Rx,@PC ;СОХРАНИТЬ Rx В СТЕКЕ, НЕ ТРОГАЯ PSW

MOV #160000,SP ;ПОЛНАЯ ОЧИСТКА ПАМЯТИ (56Kb)
MOV #4747,@#0 ;И ЧИСТЫЙ ОСТАНОВ БЕЗ ОШИБОК
CLR PC ;В КОНЦЕ

CALL @(SP)+ ;ВЫЗОВ СОПРОГРАММЫ

olegh
30.06.2011, 07:28
И я тоже добавлю - простой способ разворачивания цикла 2x:

1. Пусть есть цикл, выполняющийся N раз, типа:
mov N,r0
1$: cmd ! некая команда, например, clr(r1)+
sob r0,1$

2. Простой способ разворачивания того ж цикла в линейку:
mov N,r0
inc r0
asr r0
bcc 2$
1$: cmd
2$: cmd
sob r0,1$
Идея состоит в том, чтоб позаботиться о нечётном числе итераций до начала
цикла, и войти внутрь цикла в обход стандартного начала.

form
22.09.2011, 09:37
Задавали тут вопросы, решил сюда занести на всякий случай - вдруг кто не в курсе ;)

Что слово .WORD можно опускать и писать



123,456,LABEL


вместо



.WORD 123,456,LABEL


знают наверное все.
Но есть еще одна фича. Можно писать <имяинструкции> чтобы вписать
код [первой] инструкции в программу:



010000 <MOV>
005000 <CLR>


Ну а полезное практическое применение этому на мой взгляд одно - использование
понятных команд для очистки/установки нескольких признаков процессора одновременно (например <SEC>!<SEZ>, <CLV>!<CLZ>!<CLN>)...

Хотя еще пожалуй для создания таблиц дизассемблера может пригодится :)

hobot
27.09.2011, 06:29
Настройка экрана и запуск приложений
+ процедура gotoXY(x,y : integer); - для паскаля
+ процедура waitKEY; ожидания нажатия кнопочки - для паскаля




Устанавливает цвет курсора
8 цветов от 60 до 67 (третий параметр)
.TTYOUT #33
.TTYOUT #247
.TTYOUT #67

Цвет экрана
.TTYOUT #33
.TTYOUT #242
.TTYOUT #60

Цвет символов
.TTYOUT #33
.TTYOUT #241
.TTYOUT #67

Цвет знакоместа
.TTYOUT #33
.TTYOUT #240
.TTYOUT #60

Установка формата экрана
(61 - 80х24, 62 - 40х24, 63 - 20х24, 64 - 10х24)
.TTYOUT #33
.TTYOUT #246
.TTYOUT #61

Запускаем нужное приложение (на примере 'МЗ1:ДИГГЕР.САЖ')
.MCALL .CHAIN
MOV #^RMZ1,@#500
MOV #^RDIG,@#502
MOV #^RGER,@#504
MOV #^RSAV,@#506
.CHAIN



PASCAL



PROCEDURE WAITKEY;
VAR KEY ORIGIN 177560B: INTEGER;
BEGIN
REPEAT KEY:=0 UNTIL KEY>0
END;

Если завести глобальную переменную
INKEY ORIGIN 177562B: INTEGER;
там будет код последней нажатой клавиши

PROCEDURE gotoXY(X,Y: INTEGER);
BEGIN
WRITE(CHR(27),'Y',CHR(32+Y),CHR(32+X));
END;



Вот вопрос такой родился - почему никто не пишет игры для УКНЦ?
Платформа жива - пока для неё делают игры :redface:

Titus
01.10.2011, 20:01
При использовании на УК-НЦ печати через EMТ ^O341, возникла ситуация, когда видимо буфер где-то там переполняется и при интенсивной печати часть символов не выводится. Наверное где-то есть флажок, переполнен буфер или нет. Где он?

Alex_K
01.10.2011, 22:26
При использовании на УК-НЦ печати через EMТ ^O341, возникла ситуация, когда видимо буфер где-то там переполняется и при интенсивной печати часть символов не выводится. Наверное где-то есть флажок, переполнен буфер или нет. Где он?
Ну да, если буфер переполнен, то устанавливается бит C в PSW. Поэтому код должен быть таким:


EMT ^O341
BCS .-2

Titus, а зачем такие сложности, можно же подцепить макробиблиотеку SYSMAC.SML (она вообще-то автоматом цепляется, если есть) и объявить макрос с помощью .MCALL .TTYOUT, а затем уже использовать этот макрос.



.TTYOUT #'A

Titus
01.10.2011, 22:37
.TTYOUT #'A

А чего он делает в точности?

Alex_K
01.10.2011, 22:45
А чего он делает в точности?
Если есть аргумент, то заносит его в R0, т.е. выполняется команда MOV R0,ARG. Затем выполняется этот код:


EMT ^O341
BCS .-2
, т.е. заносит выводимый символ в очередь вывода, а если не удалось занести, то тупо ждет.

Titus
01.10.2011, 22:46
Если есть аргумент, то заносит его в R0, т.е. выполняется команда MOV R0,ARG. Затем выполняется этот код:


EMT ^O341
BSC .-2
, т.е. заносит выводимый символ в очередь вывода, а если не удалось занести, то тупо ждет.
А как мне сделать макрос с той же функцией, но без занесения аргумента в регистр R0? Потому что у меня уже в R0 значение.

Alex_K
01.10.2011, 22:53
А как мне сделать макрос с той же функцией, но без занесения аргумента в регистр R0? Потому что у меня уже в R0 значение.
Просто вызвать без аргумента: .TTYOUT. Если аргумент отсутствует, то команда MOV R0,ARG не выполняется.

Titus
01.10.2011, 23:00
Просто вызвать без аргумента: .TTYOUT. Если аргумент отсутствует, то команда MOV R0,ARG не выполняется.

Спасибо. Нет ли краткого описания подобных макросов, чтобы все понятно и доступно начинающим?

Alex_K
01.10.2011, 23:07
Спасибо. Нет ли краткого описания подобных макросов, чтобы все понятно и доступно начинающим?
Это макросы RT-11, так что может подойти документация по RT-11 или по ФОДОС. Есть здесь (http://pdp-11.org.ru/info.pl). Конкретно по системной макробиблиотеке - здесь (http://pdp-11.org.ru/files/docs/rt-11/fodos-sysmac.txt).

Titus
01.10.2011, 23:39
Еще дополнительный вопрос - есть ли всякие тесты, позволяющие протестировать правильность выполнения команд процессора?

hobot
02.10.2011, 07:51
Titus, а зачем такие сложности, можно же подцепить макробиблиотеку SYSMAC.SML (она вообще-то автоматом цепляется, если есть) и объявить макрос с помощью .MCALL .TTYOUT, а затем уже использовать этот макрос.

Либо добавить в заголовок файла,

.ENABL LC, MCL
для принудительного подключения библиотеки, или вообще свой макрос соорудить.

Макрос-PIPEC выкидывает в стоп и 1000+исп или 0+исп - не продолжат выполнения программы (вопрос (без шуток), что такое хранится по адресу, который чистим?
я не программер - просьба не издеваться :rolleyes_std:)



.MACRO .PIPEC
CLR @#54
HALT
.ENDM




pascal - честная очистка экрана



PROCEDURE CLS;
VAR
RA ORIGIN 176640B: INTEGER;
RD ORIGIN 176642B: INTEGER;
BEGIN
WRITE(CHR(12));
FOR RA:=100000B TO 151177B DO RD:=0;
END;



+ прилепил документацию по макро-11 из архива

form
02.10.2011, 10:51
+ прилепил документацию по макро-11 из архива

Лучшая документация на ассемблер (если не считать родного описания) наверное книга Сингера (есть на сайте UKNC & PDP11). Вообще полезное чтиво - книга для начинающих программистов, только вот с заданиями из нее частенько современные опытные программисты бы не справились :)

---------- Post added at 13:42 ---------- Previous post was at 13:39 ----------


что такое хранится по адресу, который чистим?
я не программер - просьба не издеваться :rolleyes_std:)



.MACRO .PIPEC
CLR @#54
HALT
.ENDM


Чистится указатель на данные RMON ;)
HALT кстати не сработает в mapped мониторах и прога выпадет по трапу :)
Впрочем для УКНЦ это не существенно :)

---------- Post added at 13:47 ---------- Previous post was at 13:42 ----------


Еще дополнительный вопрос - есть ли всякие тесты, позволяющие протестировать правильность выполнения команд процессора?

Для честных PDP-11 есть XXDP - там куча всяких тестов. Для УКНЦ можно попробовать тест 11/03, только придется драйвер писать с которого грузитья :)

К солву, на УКНЦ находил неверно работающую команду из эмулируемых - не то MUL не то DIV...

---------- Post added at 13:49 ---------- Previous post was at 13:47 ----------


Если есть аргумент, то заносит его в R0, т.е. выполняется команда MOV R0,ARG.

MOV R0,ARG это с точностью до наоборот ;)
Это на интеле порядок аргументов обратный :)

---------- Post added at 13:51 ---------- Previous post was at 13:49 ----------




.TTYOUT #33
.TTYOUT #247
.TTYOUT #67


Вместо кучи .TTYOUT наверное проще один .PRINT использовать :)

hobot
02.10.2011, 11:19
Чистится указатель на данные RMON
мощно! =) спасибо =)


Вместо кучи .TTYOUT наверное проще один .PRINT использовать
(.PRINT >>> EMT 351) можно конкретно пример как заменить? То есть каждый аргумент всё равно отдельной командой в R0 класть или как? А стоп .PRINT вроде "последовательность" отправляет на устройство?

form
02.10.2011, 11:23
(.PRINT >>> EMT 351) можно конкретно пример как заменить? То есть каждый аргумент всё равно отдельной командой в R0 класть или как? А стоп .PRINT вроде "последовательность" отправляет на устройство?



.PRINT #TEXT1 ;БЕЗ <CR><LF>
.PRINT #TEXT2 ;<CR><LF> В КОНЦЕ

TEXT1: .ASCII /TEXT/<200>
TEXT2: .ASCIZ /TEXT/

Собственно есть такая замечательная дока: RT-11 System Macro Library Manual (http://pdp-11.nsk.ru/files/docs/rt-11/rtv56-sysmac.zip) :)

Alex_K
02.10.2011, 12:34
Еще дополнительный вопрос - есть ли всякие тесты, позволяющие протестировать правильность выполнения команд процессора?
Тесты ВМ2 зашиты в самом УКНЦ, исходники тестов можно посмотреть в листингах ПЗУ.
Для ДВК существовала ТМОС - тест-мониторная система, которая позволяла протестировать процессор, память и внешние устройства. Загрузочная дискета для УКНЦ есть в теме Тесты ВМ1 (http://zx.pk.ru/showthread.php?t=11557). Описание ТМОС можно скачать отсюда (http://www.phantom.sannata.ru/forum/index.php?t=5509&amp;a=stdforum_view&amp;o=&st=0), это книга 7. Но в этом описании могут отличаться имена запускаемых модулей, поэтому лучше почитать описание на дискете - файл INSTR.TXT.
Были еще где-то исходники тестов процессора (791401), но сейчас найти мне их довольно сложно.

hobot
02.10.2011, 12:48
form, тут вот ещё насущный вопрос, что посоветуешь? Есть генератор псевдослучайного числа (на макро-11 написанный - не мной и давно ), но один и очень существенный недостаток, первый входящий аргумент для последовательности - константа:frown:, в связи с этим при первом использовании всегда одно и то же число генерируется - как победить? откуда взять (псевдо)непредсказуемое содержимое для 1-го запуска.

цитата из занимательной книги:
"И тут Вы обнаруживаете, что компьютер - штука куда более сложная, чем та, за которую он себя выдает. Особенно это относится опять-таки к УКНЦ. Чтобы работать на ней в Ассемблере (на что не каждый способен), мало знать сам язык. Даже мало им владеть. Надо знать саму машину."

Alex_K
02.10.2011, 13:19
Для честных PDP-11 есть XXDP - там куча всяких тестов. Для УКНЦ можно попробовать тест 11/03, только придется драйвер писать с которого грузитья :)
К солву, на УКНЦ находил неверно работающую команду из эмулируемых - не то MUL не то DIV...

Ну MUL, DIV, ASH и ASHC не эмулируемые, а честно выполняются на микропрограммном уровне. Хотелось бы знать, какое отличие нашел XXDP. А вот команды FIS на ВМ2 действительно эмулируются на программном уровне в режиме HALT. Тем более различие в эмуляции у МС1201.02 и УКНЦ есть. На МС1201.02 выполнение команд FIS может быть вложенным, уровень вложенности, если не ошибаюсь - 32. Поэтому выполнение команды можно прервать прерыванием, и уже в прерывании использовать также команды FIS. На УКНЦ вложенность не поддерживается. Плюс к тому же на МС1201.02 корректно обрабатывается, если параметры находятся в несуществующей памяти (Trap to 4). На УКНЦ в этом случае просто вылетает в пультовый отладчик. Из-за этого УКНЦ не проходит тест 791403 из пакета ТМОС.



MOV R0,ARG это с точностью до наоборот ;)
Это на интеле порядок аргументов обратный :)[COLOR="Silver"]

Да точно. Как раз на днях занимался с 580ВМ80 и 1816ВЕ48.

---------- Post added at 13:19 ---------- Previous post was at 12:49 ----------

Нашел исходники тестов 791401 и 791404. В этом посте (http://zx.pk.ru/showpost.php?p=176816&postcount=7) можно скачать книгу 4, хоть тесты и для Электроники-60, но они без изменений подходят и для ДВК/УКНЦ.

Titus
02.10.2011, 13:43
Нашел исходники тестов 791401 и 791404. В этом посте (http://zx.pk.ru/showpost.php?p=176816&postcount=7) можно скачать книгу 4, хоть тесты и для Электроники-60, но они без изменений подходят и для ДВК/УКНЦ.
Нельзя скачать:
Закончился срок хранения файла. Файл удален с сервиса.

Alex_K
02.10.2011, 13:55
Нельзя скачать:
Закончился срок хранения файла. Файл удален с сервиса.
Закачал к себе - ссылка (http://kisly-alexey.pisem.net/%dd60%20-%20%ea%ed%e8%e3%e04.djvu).

form
02.10.2011, 14:04
откуда взять (псевдо)непредсказуемое содержимое для 1-го запуска.

Запользовать время :)
Или более извратно - посчитать контрольную сумму RMONа :)

---------- Post added at 17:04 ---------- Previous post was at 17:03 ----------


Ну MUL, DIV, ASH и ASHC не эмулируемые, а честно выполняются на микропрограммном уровне.

Да, действительно.
Значит честный микрокод кривой :)

Alex_K
02.10.2011, 14:07
Да, действительно.
Значит честный микрокод кривой :)
А в чем кривизна конкретно, на каком тесте не проходит.

form
02.10.2011, 14:09
А в чем кривизна конкретно, на каком тесте не проходит.

Точно не помню, кажется поведение при использовании нечетного регистра было кривое. Будут силы - включу, посмотрю.

Alex_K
02.10.2011, 14:14
Точно не помню, кажется поведение при использовании нечетного регистра было кривое. Будут силы - включу, посмотрю.
Буду весьма благодарен. А на E11 эти тесты идут без проблем?

form
02.10.2011, 14:18
Буду весьма благодарен. А на E11 эти тесты идут без проблем?

На E11 пока не находил проблем в инструкциях. Там кстати есть отдельные настройки на поведение при определенных командах.
Вот с железом E11 не всегда точен. Иногда это лучше, иногда мешает немного :)

---------- Post added at 17:18 ---------- Previous post was at 17:15 ----------

Не смог найти ошибки. Наверное не на УКНЦ было.

form
03.10.2011, 20:40
На E11 пока не находил проблем в инструкциях

Нашел расхождение между E11 в режиме эмуляции 11/83 и реальным 11/83 на KDJ11-BF. E11 по умолчанию в этом режиме откатывает автоинкремент при обращении к несуществующему адресу, живой 11/83 не откатывает.

Хотя надо почитать описание KDJ11B - может поведение настраивается.

form
03.10.2011, 20:57
Прогоните на УКНЦ кому не лень - мне муторно туда заливать пока С2 не починил :)

Прога тестит поведение некоторых команд:


проверяет ASH на ошибку сдвига влево на 31. (был такой буг в J11)
проверяет порядок обработки при использовании регистра в источнике и автоинкремента того же регистра в приемнике
проверяет трапается JMP Rx по 4 или по 10
проверяет отрабатывается ли автоинкремент раньше перехода в JMP (Rx)+
трапается ли команда при словном обращении к нечетному адресу
сохраняет ли команда SWAB бит V
откатывает ли трап в 4 назад автоинкремент


У меня на 11/83 результат такой:


.RU FEAT
NOASH31
DESTFIRST
NOJMP4
NOJMPPLUS2
ODD
NOSWABV
NOUNDOAUTO

.

Навскидку предположу, что на УКНЦ нет ошибки ASH и обращение к нечетному адресу не трапает :)

form
03.10.2011, 23:30
Не совсем в тему, но раз уж затронули тему E11...
Еще различие нашел: E11 не отрабатывает Red Stack Abort, вместо этого просто выпадает в командный режим :)

Vamos
03.10.2011, 23:53
form, решил Вам напомнить:



form, пока Вы ждете микросхему, можно Вас озадачить вопросом:

вот здесь http://zx.pk.ru/showpost.php?p=302625&postcount=188
во вложении пара дискет для исследования. Задача такая дизасемблировать драйвер GD.SYS и выяснить как он работает, что бы nzeemin в эмуляторе подправил.

Ну дизассемблировать недолго, а там посмотрим.

Что нибудь выяснилось?

form
03.10.2011, 23:54
Да честно говоря просто лень даже включать УКНЦу ;)

Vamos
04.10.2011, 00:16
Да честно говоря просто лень даже включать УКНЦу ;)

Ну да PDP круче и приятнее :)

form
04.10.2011, 07:20
Собственно дизассемблированный вариант могу выложить - кому не лень может покопаться :)

Vamos
04.10.2011, 10:30
Собственно дизассемблированный вариант могу выложить
Выкладывайте, или в личку.

hobot
05.10.2011, 14:56
Прога тестит поведение некоторых команд:

* проверяет ASH на ошибку сдвига влево на 31. (был такой буг в J11)
* проверяет порядок обработки при использовании регистра в источнике и автоинкремента того же регистра в приемнике
* проверяет трапается JMP Rx по 4 или по 10
* проверяет отрабатывается ли автоинкремент раньше перехода в JMP (Rx)+
* трапается ли команда при словном обращении к нечетному адресу
* сохраняет ли команда SWAB бит V
* откатывает ли трап в 4 назад автоинкремент

Вот такую картинку выдал эмулятор, сборка я так понимаю самая последняя =)

form
08.10.2011, 18:47
Выкладывайте, или в личку.

Сильно не ковырял, текст не переводил в ASCII кроме одного места, где автор применил суперзащиту от подсматривания ;)

С точками входа векторов вроде расставил что вспомнил. Никогда не пользовал таблицы векторов :)

Alex_K
08.10.2011, 18:57
Сильно не ковырял, текст не переводил в ASCII кроме одного места, где автор применил суперзащиту от подсматривания ;)

С точками входа векторов вроде расставил что вспомнил. Никогда не пользовал таблицы векторов :)
Эх, чуть-чуть опередил. Я тоже дизассемблировал, только вручную. Сейчас пишу комментарии. Выложу позже.

form
08.10.2011, 19:01
Эх, чуть-чуть опередил. Я тоже дизассемблировал, только вручную. Сейчас пишу комментарии. Выложу позже.

У меня тупая утилитка здесь (http://pdp-11.nsk.ru/~form/pdp-11/) валяется для таких целей. При желании можно допинать, мне просто лень было :)

Там есть готовые бинари для win32 и OpenVMS/Alpha и /VAX.

Alex_K
09.10.2011, 00:11
Драйвер GD.SYS дизассемблирован вручную, поэтому небольшие ошибки не исключаются, хотя не должно быть. Использованы локальные метки, равные адресам, так что транслировать не стоит, ничего не получится. Зашифрованную строку с именем драйвера поместил через макрос .CRYPT, сам макрос не писал.
Ну а теперь в двух словах что делает драйвер (хотя в двух словах не получится). Программы TST1 и TST2 были написаны для ДВК с КГД, поэтому естественно на УКНЦ они не пойдут. В чем различие КГД и видеопамяти УКНЦ.
1. КГД может выводить картинку одновременно с КСМ, т.е. совмещать текстовый и графический экран. То есть выводится текст и он не портит графику, и наоборот.
2. У КГД регистр адреса равен 176642, а регистр данных - 176644. У УКНЦ регистр адреса 176640, регистр данных 176642.
3. Длина видеостроки у КГД - 50, у УКНЦ - 80. Видеопамять в КГД начинается с адреса 0, у УКНЦ - со 100000.
Проблема № 1 решена блокировкой планов 1 и 2 через регистр 177716. В итоге текстовый терминал, работающий через спрайтовый механизм, использует только план 0. Естественно подправлены все регистры цвета. Также запрещен рулон и экран пользователя расширен с 264 видеострок до 286 (как в КГД). Учтено и то, что в регистре данных в КГД используются только младшие восемь битов. С помощью регистров цвета сделано, что если точка находится в плане 0, то она имеет желтый цвет (текстовый терминал), в плане 1 - белый, совмещено - красный. План 2 не учитывается.
Для решения проблем №2 и №3 пропатчены TST1 и TST2 и в драйвере использован регистр-ловушка. Т.к. структура байта данных совпадает у КГД и УКНЦ, то все обращения в 176644 заменены на 176642. А вот с адресом посложнее. Нельзя просто заменить 176642 на 176640, надо еще подправить механизм вычисления адреса, а это сложно. Поэтому разработчиками было принято кардинальное решение - обращения к 176642 заменены на 304, а на обращения к 304 поставлена ловушка. Соответственно п/п обработки прерывания ловушки читает значение из ячейки 304, преобразует ее значение в формат адреса УКНЦ и заносит в регистр 176640.

Titus
09.10.2011, 00:19
Так драйвер на реальной УКНЦ работает без органичений? А вывод графики с преобразованием адресов не тормозит?
Где посмотреть TST1 и TST2?

Alex_K
09.10.2011, 00:26
Так драйвер на реальной УКНЦ работает без органичений? А вывод графики с преобразованием адресов не тормозит?
Где посмотреть TST1 и TST2?
Vamos выкладывал образы дисков в этом топике (http://zx.pk.ru/showpost.php?p=302625&postcount=188). Драйвер предназначен только для патченных TST1 и TST2. То есть, чтобы запустить другую программу для КГД, ее придется соответствующим образом пропатчить. Драйвер еще кстати обрабатывает команду RESET на магистрали ЦП.

Titus
09.10.2011, 00:38
Vamos выкладывал образы дисков в этом топике (http://zx.pk.ru/showpost.php?p=302625&postcount=188). Драйвер предназначен только для патченных TST1 и TST2. То есть, чтобы запустить другую программу для КГД, ее придется соответствующим образом пропатчить. Драйвер еще кстати обрабатывает команду RESET на магистрали ЦП.
Что, патчить каждую ДВК'шную игру рабодающую с КГД?

Alex_K
09.10.2011, 00:40
Что, патчить каждую ДВК'шную игру рабодающую с КГД?
Естественно, а как же иначе. Еще не факт, что заработает.

Titus
09.10.2011, 01:12
Естественно, а как же иначе. Еще не факт, что заработает.
Затратно. И, боюсь, что подтормаживать будет.

Alex_K
09.10.2011, 09:05
Затратно. И, боюсь, что подтормаживать будет.
Попробуйте, узнаете. Знаю только, что многие графические игры с ДВК не переписывались для УКНЦ, а патчились. Находился алгоритм вычисления адреса и вставлялся свой. Часто размер SAV-файла немного увеличивался, в конце были алгоритмы вычисления адреса и заноса в регистр данных (там данные заносились сразу в младший и старший байт регистра данных). В качестве примера - DIGGER, Кот-рыболов, первые LAND-ы.
Эмулятор БК также не использует оригинальные файлы, а только специальным образом пропатченные.

Titus
09.10.2011, 14:55
Попробуйте, узнаете. Знаю только, что многие графические игры с ДВК не переписывались для УКНЦ, а патчились. Находился алгоритм вычисления адреса и вставлялся свой. Часто размер SAV-файла немного увеличивался, в конце были алгоритмы вычисления адреса и заноса в регистр данных (там данные заносились сразу в младший и старший байт регистра данных). В качестве примера - DIGGER, Кот-рыболов, первые LAND-ы.
Эмулятор БК также не использует оригинальные файлы, а только специальным образом пропатченные.
Да, но одно дело - поменять процедуру вывода графики в игре, другое, когда драйвер должен перехватить байт посланный на КГД, преобразовать адрес, и уже потом записать. Тут будет хорошее замедление.

Alex_K
09.10.2011, 14:57
Да, но одно дело - поменять процедуру вывода графики в игре, другое, когда драйвер должен перехватить байт посланный на КГД, преобразовать адрес, и уже потом записать. Тут будет хорошее замедление.
Ну для пакета научной графики это несущественно, там главное чтобы правильно нарисовало на экране.

Titus
17.10.2011, 19:01
Где можно почитать про то, какие каналы в системе используются по умолчанию в каких целях?
Какие запросы можно посылать PPU через канал 2? (типа запрос памяти, копированив данных, запуск программы в PPU)
Как в программе PPU запрашивать у системы экранную память в планах 1 и 2, например?

form
17.10.2011, 19:16
Где можно почитать про то, какие каналы в системе используются по умолчанию в каких целях?
Какие запросы можно посылать PPU через канал 2? (типа запрос памяти, копированив данных, запуск программы в PPU)
Как в программе PPU запрашивать у системы экранную память в планах 1 и 2, например?

Вот какая-то книга, там вроде было что-то.
Еще на сайте у Арсения была статья про программирование ПП, но там были ошибки. Хотя я по ней изучал как в ПП пихать код :)
Прилагаю в аттаче также исходники PRUN для запуска REL файлов на ПП. Коментарии было лень писать, но думаю можно разобраться :)

Alex_K
17.10.2011, 19:40
Где можно почитать про то, какие каналы в системе используются по умолчанию в каких целях?
Какие запросы можно посылать PPU через канал 2? (типа запрос памяти, копированив данных, запуск программы в PPU)
Как в программе PPU запрашивать у системы экранную память в планах 1 и 2, например?
У1.00031-01 90 01. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ КОМПЛЕКСА ВЫЧИСЛИТЕЛЬНОГО УЧЕБНОГО "ЭЛЕКТРОНИКА МС 0202". РАБОТА С ВНЕШНИМИ УСТРОЙСТВАМИ.
Но иногда страдает неточностями, как и вся наша советская документация. Примеры можно взять на диске sysimage.dsk, там есть резиденты, грузящиеся в память ПП.
Распределение памяти в ОЗУ ПП (http://felixl.com/Uknc_RAM_description), описание управляющих и Esc-последовательностей, команд EMT (http://felixl.com/Uknc_RAM_description_app), ну и листинги ПЗУ (http://felixl.com/Uknc_ROM_disasm).
Много можно почерпнуть из журналов "Персональный компьютер УКНЦ", есть на сайте Arseny.

Alex_K
17.10.2011, 19:42
Как в программе PPU запрашивать у системы экранную память в планах 1 и 2, например?
Titus, а что Вы имели ввиду в данном конкретном случае?

Titus
17.10.2011, 20:00
Titus, а что Вы имели ввиду в данном конкретном случае?
Даже не в планах 1 и 2, а в плане 0.
Допустим, я хочу что-то записать в память плана 0, но не в ту часть, которая видимая на экране, а в какую-то свою. Для этого я должен честно ее попросить у системы, чтобы случайно не попасть в занятую уже экраном.

Alex_K
17.10.2011, 20:16
Даже не в планах 1 и 2, а в плане 0.
Допустим, я хочу что-то записать в память плана 0, но не в ту часть, которая видимая на экране, а в какую-то свою. Для этого я должен честно ее попросить у системы, чтобы случайно не попасть в занятую уже экраном.
Ничего просить не надо, если это экранная память (адрес 100000 и выше). Но она почти вся занята. От 100000 до 154537 - экран пользователя, от 154540 до 175677 - экран установки, от 175700 до 176567 - верхняя служебная строка, от 176570 до 177457 - нижняя служебная строка, от 177460 до 177577 - разделительная видеострока. Остается 128 байт начиная с адреса 177600. Можно задействовать экран установки, но тогда его вызов придется блокировать (памяти там на 8800 байт).
Если же это обычное ОЗУ ПП, то из ЦП есть запросы через канал 2, а программа в ПП может использовать подпрограммы 176132 (запрос блока) и 176300 (освобождение блока).

Titus
17.10.2011, 23:06
Остается 128 байт начиная с адреса 177600.
Значит эти 128 байт я могу использовать по своему усмотрению, не боясь конфликта с системой?

Alex_K
17.10.2011, 23:26
Значит эти 128 байт я могу использовать по своему усмотрению, не боясь конфликта с системой?
Можно. Конфликта не будет. Не туда запишите - отобразится на экране.

А еще можно заблокировать план 0 для спрайтового механизма установкой бита 0 в регистре 177026. Затем изменить регистры цвета так, что бы использовать цветовую гамму только с планов 1 и 2 (палитра при этом сокращается до 4 цветов). И все 32 Кбайта в вашем распоряжении.
Установкой битов 7-4 регистра 177054 можно сделать так, что возможна будет прямая запись в план 0 по адресам 100000-176777, читать уже правда придется через регистры адреса/данных.

А зачем Вам план 0, в ОЗУ ПП остается свободно около 22К, неужели не хватает?

Titus
17.10.2011, 23:48
А еще можно заблокировать план 0 для спрайтового механизма
Что за спрайтовый механизм такой?

---------- Post added at 23:47 ---------- Previous post was at 23:44 ----------


Установкой битов 7-4 регистра 177054 можно сделать так, что возможна будет прямая запись в план 0 по адресам 100000-176777, читать уже правда придется через регистры адреса/данных.
Кстати, в каком-нить софте используются банки ОЗУ плана 0 вместо ПЗУ. И почему в них при этом нельзя писать?
И еще, из документации не совсем понятен механизм работы этого регистра. Бит 0 отключает системное ПЗУ в окне. При отключении что в этом окне оказывается? И зачем этот бит, если окон 4, и битами 4-7 можно ими выборочно управлять?

---------- Post added at 23:48 ---------- Previous post was at 23:47 ----------


А зачем Вам план 0, в ОЗУ ПП остается свободно около 22К, неужели не хватает?
Для экспериментов.

Alex_K
17.10.2011, 23:51
Что за спрайтовый механизм такой?
Спрайтовый механизм - это регистры с 177016 по 177026. Заносить в ОЗУ (во всё, т.к. практически всё ОЗУ можно сделать видеопамятью) можно либо через регистры адреса/данных (177010, 177012, 177014), либо через спрайтовый механизм. В случае спрайтового механизма в регистр адреса грузится адрес, программируются два регистра кода цвета фона, регистр кода цвета точки, а запись информации делается через регистр октета. Пишется сразу во все три плана. Всё описано в техописании.

Titus
18.10.2011, 00:00
Спрайтовый механизм - это регистры с 177016 по 177026.
Да, это я читал. Просто не называл это спрайтовым механизмом)

---------- Post added 18.10.2011 at 00:00 ---------- Previous post was 17.10.2011 at 23:53 ----------

Если что, то там еще были вопросы выше)

Alex_K
18.10.2011, 00:10
Кстати, в каком-нить софте используются банки ОЗУ плана 0 вместо ПЗУ. И почему в них при этом нельзя писать?
И еще, из документации не совсем понятен механизм работы этого регистра. Бит 0 отключает системное ПЗУ в окне. При отключении что в этом окне оказывается? И зачем этот бит, если окон 4, и битами 4-7 можно ими выборочно управлять?
Используются. В ТурбоБейсике Олега Герасимова.

Что исчезает и что оказывается, тут надо понимать архитектуру машины. Во-первых ПЗУ обрабатывает только чтение (сигнал DIN), на запись оно не реагирует. Вот благодаря этой особенности с помощью битов 7-4 можно подставлять ОЗУ по соответствующим адресам, ПЗУ при этом не отключается. В этом случае ОЗУ и ПЗУ живут одновременно в одном пространстве. Но т.к. ПЗУ на запись не реагирует, то в ОЗУ можно писать спокойно. Естественно здесь имеют смысл только команды без чтения, такие как CLR и MOV. А вот с чтением сложнее, отвечать будут оба. ПЗУ пошустрее, и быстрее выставит свои данные на шину, контроллер ОЗУ не успеет окончательно прочесть ячейку, но по сигналу DIN выставит на шину свой буферный регистр, в котором будет результат предыдущего чтения. В итоге прочтется (с учетом инверсной шины) логическое ИЛИ между содержимым ПЗУ и предыдущем результатом чтения памяти (здесь правда может успеть затесаться младший байт считываемого адреса). Поэтому команды с циклом DATIO бесполезны (INC, BIC, BIS, ...).

Посложнее с "окном". Тут ещё всё зависит от того, что воткнуто в слоты. Если ничего, то сбросом бита 0 177054 и установкой бита 4 этого же регистра можно сделать так, что в "окне" ОЗУ будет нормально доступно и по записи и по чтению.
А вот если в слот воткнуто устройство, использующее "окно" (контроллер винчестера, ЭД от ЭР), то обычно эти устройства активируются при отключении системного ПЗУ в "окне". Тут уже трюк с полным доступом на чтение/запись не пройдет. В этом случае на команды чтения/записи будут реагировать и ОЗУ и устройство.

---------- Post added at 00:10 ---------- Previous post was at 00:08 ----------


Для экспериментов.
Флаг Вам в руки. Я тоже любитель извращенно покопаться в чём-нибудь.

Titus
18.10.2011, 00:50
А вот если в слот воткнуто устройство, использующее "окно" (контроллер винчестера, ЭД от ЭР), то обычно эти устройства активируются при отключении системного ПЗУ в "окне". Тут уже трюк с полным доступом на чтение/запись не пройдет. В этом случае на команды чтения/записи будут реагировать и ОЗУ и устройство.
Как система определяет, воткнуто ли в слот что-то, что надо подставить в окно или нет?
Можно еще описать биты 1-3 своими словами?

Alex_K
18.10.2011, 09:47
Как система определяет, воткнуто ли в слот что-то, что надо подставить в окно или нет?
Можно еще описать биты 1-3 своими словами?
Определить может только драйвер какого-то устройства. Например теоретически можно определить, что воткнута кассета ПЗУ, контроллер винча или ЭД от ЭР. При этом даже можно определить к каком слоте. А окно подставляет сам драйвер. Система умеет работать только с кассетой ПЗУ (соответственно контроллер винча тоже делает так, чтобы его ПЗУ подставлялась в окно).
Про биты 1-3, а лучше 0-3. Они соответствуют сигналам на шине с CE0 по CE3. А уж аппаратура использует их по своему усмотрению. Единственно в УКНЦ используется сигнал CE0, по нему можно включать и отключать системное ПЗУ в "окне" 100000-117777. Сигнал CE3 поступает на один слот прямо, на другой через инвертор, благодаря этому устройство имеет свой адрес слота, а так бы пришлось вводить джампер на самом устройстве. Обычно CE3 используется для выбора устройства в слоте. А с помощью CE1 и CE2 в кассете ПЗУ (классической) выбирается какой банк подставлять в окно, комбинация 00 запрещает подстановку, а с помощью 01, 10 и 11 можно выбрать нужный банк.

Titus
14.11.2011, 14:02
Обьясните коротенечко, как из своей программы загрузить файл в память, и как для этого зарезервировать у системы память?

form
14.11.2011, 14:05
Обьясните коротенечко, как из своей программы загрузить файл в память, и как для этого зарезервировать у системы память?

Загрузить - всмысле открыть файл и считать его?
Если так, я тут давал исходники PRUN - там открывается файл и читается в память :)

Память в RT-11 резервируется макросом .SETTOP которому указывается верхний желаемый адрес (-2 - мксимум возможного), а он отвечает в R0 реальным максимальным адресом.

Есть еще управление расширенной памятью, но это только в XB/XM/ZB/ZM.

Titus
14.11.2011, 14:09
Загрузить - всмысле открыть файл и считать его?
Если так, я тут давал исходники PRUN - там открывается файл и читается в память :)
Там надо разбираться в исходнике, а я просил коротенечко.)

form
14.11.2011, 14:43
Там надо разбираться в исходнике, а я просил коротенечко.)

Сейчас набросаю кратко :)

---------- Post added at 17:43 ---------- Previous post was at 17:10 ----------

Примерно так:


Все макросы при успехе очищают бит C, при ошибке устанавливают.
В последнем случае в байте @#52 может вернуться код ошибки.


Открытие существующего файла
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.LOOKUP AREA,CHAN,DBLK

AREA - 3-словный блок для хранения параметров EMT
CHAN - номер канала
DBLK - четырехсловный блок имени файла:

DBLK: .RAD50 /DK / ;ИМЯ УСТРОЙСТВА
.RAD50 /FILNAM/ ;ИМЯ ФАЙЛА
.RAD50 /EXT/ ;РАСШИРЕНИЕ

При успехе R0 вернется длина файла в блоках.
Таким способом можно открыть и устройство, в этом случае при успехе в R0
будет не длина, а 0. У макроса есть еще аргумент, но он интересен только
для лент.


Создание файла
~~~~~~~~~~~~~~
.ENTER AREA,CHAN,DBLK,LEN

AREA - 4-словный блок
LEN - запрашиваемая длина в блоках или
0 - половина максимального пустого места
-1 - максимальное пустое место

В R0 возвращается максимальный размер файла. Реальный размер определяется
или последним записанным блоком или через .CLOSZ.


Закрытие файла
~~~~~~~~~~~~~~
.PURGE CHAN

Закрывает файл. Если был открыт по .ENTER, файл не сохраняется.

.CLOSE CHAN

Закрывает файл, размер определяется последним записанным блоком (для .ENTER).

.CLOSZ AREA,CHAN,SIZE

Закрывает и устанавливает размер (для .ENTER) или работает
как .CLOSE (.LOOKUP).

AREA - 2-словный блок
SIZE - требуемый размер файла (в пределах выделенного через .ENTER)


Чтение файла
~~~~~~~~~~~~

.READ AREA,CHAN,BUF,WCNT,BLK
.READC AREA,CHAN,BUF,WCNT,CRTN,BLK
.READW AREA,CHAN,BUF,WCNT,BLK

AREA - 5-словный блок
BUF - адрес буфера в программе
WCNT - количество слов
BLK - номер блока

.READ запускает операцию чтения и продолжает выполнение. Дождаться завершения
можно далее в любом месте макросом .WAIT.

.READC аналогично .READ, по завершению вызывается подпрограмма CRTN. При входе
в нее R0 содержит слово состояния канала (CSW), R1 содержит номер канала.
Эти регистры можно портить в подпрограмме, другие нужно сохранять.

Биты CSW: 000001 - ошибка, 020000 - конейц файла.

.READW аналогично .READ, только ждет окончания операции.

Особое внимание на буфер - I/O выполняется прямо с ним, портить его пока
операция не завершилась нельзя.


Запись в файл
~~~~~~~~~~~~~
.WRITE AREA,CHAN,BUF,WCNT,BLK
.WRITC AREA,CHAN,BUF,WCNT,CRTN,BLK
.WRITW AREA,CHAN,BUF,WCNT,BLK

Записывает в файл. Остальное аналогично .READ/.READC/.READW.
При записи некратного 256 количества слов на блочное устройство, остаток последнего блока зануляется.


Ожидание завершения операции
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.WAIT CHAN

Ждет завершения операции на канале.

Titus
14.11.2011, 14:53
Дополнительный вопрос - что такое канал?

Еще вопрос - какое надо указывать устройство, чтобы файл загрузился с того же диска, с какого запущена была программа, отркрывающая его?

form
14.11.2011, 14:54
Дополнительный вопрос - что такое канал?

Некий хандель с которым связывается файл. По умолчанию определены каналы 0-15. (последний нельзя трогать в оверлейных программах).
Можно определить больше, но обычно не нужно :)

Грубо говоря - какую циферку указал в LOOKUP/ENTER, такую и используешь в остальных операциях до самого CLOS*/PURGE.

Есть еще разные хитрые операции с каналами, но обычно хватает и этого.

AlecV
15.11.2011, 01:29
Titus, рекомендую книжку, офигенная

http://www.alib.ru/bs.php4?uid=3714e9676509466ff3e201dc2b7541c8cef

http://vova1001.narod.ru/00000050.htm

В PDF не нашел

Titus
15.11.2011, 01:36
Titus, рекомендую книжку, офигенная

http://www.alib.ru/bs.php4?uid=3714e9676509466ff3e201dc2b7541c8cef

http://vova1001.narod.ru/00000050.htm

В PDF не нашел
Много буковков. А иногда не хочется вникать сильно в систему, а просто использовать несколько ее функций, и этого достаточно для конкретной задачи. А люди-специалисты могут подсказать, как это сделать.

---------- Post added at 00:36 ---------- Previous post was at 00:34 ----------

К тому же, ее нет тут в электронном виде.

form
15.11.2011, 01:43
На самом деле берется RT-11 V5.6: RT-11 System Macro Library Manual (http://pdp-11.nsk.ru/files/docs/rt-11/rtv56-sysmac.zip) и быстро пролистывается. Там целая куча примеров.

hobot
19.11.2011, 19:58
Хочется переделать UST.sav так, что-бы он устанавливал дискретный рулон,режим ЛАТ, черный цвет знакоместа\экрана и белый цвет знаков - цвета и ЛАТ легко и понятно, сложнее с рулоном - есть ESC последовательность или где это регулировать?
И ещё, помню был вариант стартового UST где курсор делался горизонтальной полоской (нижней), вот как это делалось интересно?
Спасибо.
+ прилепил свой первый шедевр на UKNCBTL )))) Супер версия UCL.SAV от [hobot]
:redface:

Alex_K
20.11.2011, 15:40
прилепил свой первый шедевр на UKNCBTL )))) Супер версия UCL.SAV от [hobot]
:redface:
Шедевр действительно замечательный :v2_dizzy_roll:. Но лучше воспользоваться макробиблиотекой и тогда:


.MCALL .PRINT,.EXIT
START: .PRINT #PRIGL
.EXIT
PRIGL: .ASCII "!UCL-E-Bad command or file name"<200>
.END START

и тогда вообще ни одной команды PDP-11.

form
20.11.2011, 15:59
!UCL-E-Bad command or file name

А главное - по смыслу верно. -E- традиционно обозначает ошибку которая не мешает выполнению программы :)

---------- Post added at 18:59 ---------- Previous post was at 18:44 ----------

Кстати о программировании (хотя и не для УКНЦ). Ни у кого нет желания помучить запуск RT-11 внутри RSX-11 или P/OS? Разобрался как это делается, осталось собраться с силами :)

Alex_K
20.11.2011, 16:16
Хочется переделать UST.sav так, что-бы он устанавливал дискретный рулон,режим ЛАТ, черный цвет знакоместа\экрана и белый цвет знаков - цвета и ЛАТ легко и понятно, сложнее с рулоном - есть ESC последовательность или где это регулировать?
И ещё, помню был вариант стартового UST где курсор делался горизонтальной полоской (нижней), вот как это делалось интересно?

Насчет ЛАТ всё понятно - управляющий код <017>. Можно также в ПП вызвать подпрограмму по адресу 105306.
Цвета. Тут существуют разные Esc-последовательности. Все дело в том, что номера используемых цветов и номера цветов в пунктах УСТ хранятся в разных ячейках. Esc-последовательности <033><240>, <033><241>, <033><242> устанавливают цвет символов, знакоместа и экрана, но они не устанавливают пункты в меню УСТ, зато с помощью <033><277><240>, <033><277><241> можно возвратить старый цвет. В режиме графики есть Esc-последовательность, которая скопом устанавливает цвет символа, знакоместа и экрана, она же правильно настраивает пункты меню УСТ, но возвратиться к предыдущему цвету нельзя. Эта последовательность <033>LI. Сначала надо переключиться в режим графики, переключить номера цветов и возвратиться в текстовый режим. Где-то так <033>%!0<033>LI@@7@@0@@0<033>%!3.
Если же номера цветов менять прямо программой в ПП, то пункты УСТ: 7160 - цвет символа, 7162 - цвет знакоместа, 7164 - цвет экрана. Реальные цвета содержаться в таблице видеопараметров, для экрана пользователя ее адрес - 22656. Цвет символов - ячейка 22712, цвет знакоместа - 22716 и цвет экрана - 22722. Если цвет символа указывается прямо (от 0 до 7), то цвета знакоместа и экрана должны указываться в формате загрузки в регистр кода цвета фона, сама таблица содержится по адресу 113512, она содержит восемь слов, соответственно по номерам цветов.
Рулон. Никаких Esc-последовательностей не существует, только изменять ячейки в ПП. Пункт УСТ - ячейка 7170, соответственно 0-плавный, 1-дискретный, 2-отсутствует. Для реальной работы: 7136 - тип рулона (0-плавный, 2-дискретный), 22752 - присутствие рулона (0-отсутствует, 2-присутствует).
Про курсор чуть попозже. Там ситуация более сложная, надо оставлять резидент в ОЗУ ПП.

form
20.11.2011, 16:30
Там ситуация более сложная, надо оставлять резидент в ОЗУ ПП.

А кто мешает? PRUN для того и делал чтобы такие вещи упростить. Даже позиционнонезависимый код не нужен :)

Alex_K
20.11.2011, 20:53
Про курсор. Естественно никаких Esc-последовательностей для изменения его формы нет. Нет также и ячеек памяти, где хранится информация в какой строке начинается курсор, и в какой оканчивается. Его форма зашита жестко в подпрограммах ПЗУ. Но все не так плохо. Для переключения курсора существует ячейка с адресом 7134. При значении её равное нулю, курсор выключается в старой позиции и включается в новой. Обрабатывается эта ячейка в подпрограмме обслуживания прерываний сетевого таймера по адресам 175072-175304. Значение ячейки равное нулю обрабатывается в диапазоне 175150-175276. Но значение ячейки 7134, равное нулю, присваивается только в одном месте - в подпрограмме переключения координат курсора, расположенной по адресу 176056. Эта подпрограмма вызывается только из диспетчера процессов по флагу из ячейки 7066. Так что в данном случае нужно перехватить вызов п/п в диспетчере процессов и ложить в ячейку 7134 значение равное разнице между адресом новой п/п переключения и адресом 175076, т.к. переход делается командой ADD @#7134,PC.
Само переключение делается просто - в таблице видеопараметров есть два слова со смещениями 032 и 060, в которых расположены соответственно адреса списка видеострок новой позиции курсора и предыдущей позиции. Список видеострок для экрана пользователя и установки двухсловный, во втором слове младший бит указывает изменять состояние курсора или нет. Поэтому для выключения курсора там есть две команды BIC #1,6(R1) и BIC #1,52(R1). Для включения соответственно BIS #1,6(R1) и BIS #1,52(R1). В соответствии с этими командами курсор расположен со 2-й по 10-ю строки знакоместа (нумерация с единицы), включение происходит в списке 2-й видеостроки, а выключение в 11-й. Этим примером, расположенным в системном ПЗУ можно спокойно воспользоваться, если курсор не будет расположен в самой последней 11-й видеостроке, т.к. выключать его придется уже в следующей символьной строке. Если же курсор будет находится и в последней 11-й видеостроке, то здесь возможно два варианта. Сразу замечу, что это не относится к экрану установки (когда он активен, то ячейка 23150 равна 22754), т.к. там нет скроллинга и описание строк расположено последовательно, то и сработает правило 56(R1).
Вариант 1 относится к тому случаю, когда курсор расположен не на последней символьной строке, это можно узнать из таблицы видеопараметров, если по смещению 020 записано 1, то строка последняя, в этом случае вариант 2.
Вариант 1. Список видеострок для экрана пользователя является закольцованным, он описывает 26 текстовых строк (286 видеострок), при этом на экране отображаются только 24, две невидимы. Сама таблица занимает адреса с 2500 по 4666. При скроллинге само изображение в видеопамяти не прокручивается, меняются только адреса следующих видеострок в таблице. Соответственно при таком раскладе значение ячейки 4666 обычно указывает на следующий адрес 2500 для закольцовки. Поэтому, если адрес равен или больше 4670, то надо вычесть 02170 (286*4 в десятичном).
Вариант 2. В этом случае просто, выключать курсор надо уже в нижней разделительной видеостроке, адрес ячейки - 6746.
Ещё надо перехватывать обработку Esc-последовательности <033>%, т.к. при переходе в режим графики по <033>%!0 вызывается подпрограмма по адресу 111632, которая выключает курсор командами BIC #1,6(R0) и BIC #1,52(R0).
Еще кстати в дополнение при включении курсора надо запомнить ячейки списка видеострок, где он включен и выключать уже по этим адресам. Это необходимо, т.к. узнать в какой символьной строке расположен курсор (смещение 020 в таблице видеопараметров) можно узнать только для новой позиции.

Естественно программа обработки должна висеть резидентом в ОЗУ ПП.

---------- Post added at 20:53 ---------- Previous post was at 20:47 ----------


А кто мешает? PRUN для того и делал чтобы такие вещи упростить. Даже позиционнонезависимый код не нужен :)
Про более сложную ситуацию я имел ввиду не загрузку резидента, а алгоритм изменения формы курсора, для этого надо знать как устроен список видеострок в УКНЦ, и как он обрабатывается подпрограммами в системном ПЗУ. Соответственно как переключается курсор, ну т.д. и т.п.

А PRUN хорош только для загрузки резидента, который ничего на экран не выводит, т.к. обычно RT-11 свой промптер иногда успевает вывести вперед. Если же нужно взаимодействие программ между собой в ОЗУ ЦП и ОЗУ ПП, то только свой загрузчик в программе. Да и не столь сложно сделать MOV PC,R0 ADD #LABEL-.,R0, не столь часто это встречается.

form
20.11.2011, 20:55
Про более сложную ситуацию я имел ввиду не загрузку резидента, а алгоритм изменения формы курсора, для этого надо знать как устроен список видеострок в УКНЦ, и как он обрабатывается подпрограммами в системном ПЗУ. Соответственно как переключается курсор, ну т.д. и т.п.

А PRUN хорош только для загрузки резидента, который ничего на экран не выводит, т.к. обычно RT-11 свой промптер иногда успевает вывести вперед. Если же нужно взаимодействие программ между собой в ОЗУ ЦП и ОЗУ ПП, то только свой загрузчик в программе. Да и не столь сложно сделать MOV PC,R0 ADD #LABEL-.,R0, не столь часто это встречается.

Про то как устроено есть тех описание, а насчет вывода из загруженного в ПП, так никто не мешает подождать с выводом. Но вообще лезть в ПП ради того, чтобы что-то выводить на экран бессмысленно если только это не нужно программе какой-нибудь, а тогда это дело самой программы :)

Alex_K
20.11.2011, 21:01
Про то как устроено есть тех описание ....
Техописание поможет только на 10%, не более. Здесь надо смотреть и анализировать листинги ПЗУ, т.к. надо не только знать, как это устроено на аппаратном уровне, но и как используется на программном уровне. Т.к. в данном случае надо вклиниваться в обработку диспетчера процессов, в документации к УКНЦ про это ничего нет, надо знать распределение памяти, чтобы с толком применить (где узнать текущие параметры, где их изменить).

form
20.11.2011, 21:03
Техописание поможет только на 10%, не более. Здесь надо смотреть и анализировать листинги ПЗУ, т.к. надо не только знать, как это устроено на аппаратном уровне, но и как используется на программном уровне. Т.к. в данном случае надо вклиниваться в обработку диспетчера процессов, в документации к УКНЦ про это ничего нет, надо знать распределение памяти, чтобы с толком применить (где узнать текущие параметры, где их изменить).

Ну это да, но для этого есть и листинги с коментариями :)

Alex_K
20.11.2011, 21:07
Ну это да, но для этого есть и листинги с коментариями :)
Я про это и говорил, без этого не обойдешься.

form
20.11.2011, 21:08
Я про это и говорил, без этого не обойдешься.

Ну не то, чтобы не обойдешься, просто раз есть смысла нет обходиться :)

hobot
20.11.2011, 21:22
и тогда вообще ни одной команды PDP-11.
Ну а разве транслятор не в EMT'ы это всё перепишет в итоге то ?


А главное - по смыслу верно. -E- традиционно обозначает ошибку которая не мешает выполнению программы
Спасибо за внимание к UCl ))) Я же в шутку накатал ))) , на самом деле с целью
проверки готовности UKNCBTL делать хотя-бы не сложные программы прямо в нём,
и вот беда подводит дисковод! То есть редактор пишет ДА! Все изменения сохранены и даже bak файл создаёт, но исходник без изменений, со второй попытки
как правило всё проходит, но вот хорошо если это дурашливый UCl в три строчки,
а более менее длинный код при таких проблемах с сохранением изменений, разработка игры под RGB чисто на UKNCBTL откладывается до решения проблем с дисководами )))


зато с помощью <033><277><240>, <033><277><241> можно возвратить старый цвет
супер! не знал это круто ))) А можно ссылку где это почитать (на страничке felix-а нашёл (сохранил как справочник) по ESC последовательностям, а где
ещё это описано?


Где-то так <033>%!0<033>LI@@7@@0@@0<033>%!3.
я правильно понял, что это последовательность кодов и символов для 177566 так? Или их надо одной строкой выводить?



Естественно программа обработки должна висеть резидентом в ОЗУ ПП.
Ух! Как завёрнуто, с курсором пока сложно, мне надо вспомнить вникнуть во всю эту математику (переспать с этой информацией), но часть про курсор можно и на потом отложить, сначало сделать рулон и цвета и допустим перезапуск программы
с каким-то ключом что-бы возвращала цвета или организовать анализ командной
строки что-бы пользователь не лазил в УСТ, а при загрузке в пятом блоке монитора
или в стартовом файле один раз прописал желаемые цвета.

form
20.11.2011, 21:24
Ну а разве транслятор не в EMT'ы это всё перепишет в итоге то ?

Перепишет, зато переносимость лучше да и понятность :)

Кстати для справки, RT-11 программы на ассемблере можно без переделки собрать в RSTS/E :)

Alex_K
20.11.2011, 21:37
... и вот беда подводит дисковод! То есть редактор пишет ДА! Все изменения сохранены и даже bak файл создаёт, но исходник без изменений, со второй попытки
как правило всё проходит, но вот хорошо если это дурашливый UCl в три строчки,
а более менее длинный код при таких проблемах с сохранением изменений, разработка игры под RGB чисто на UKNCBTL откладывается до решения проблем с дисководами ))) ...

Да, помню про это, извиняюсь пока времени нет. Можно еще воспользоваться винчестером, сделать свой, там вроде нет таких проблем, а также виртуальный диск подойдет, хоть и маленький. Для RGB конечно придется VM отключать.

---------- Post added at 21:31 ---------- Previous post was at 21:28 ----------



супер! не знал это круто ))) А можно ссылку где это почитать (на страничке felix-а нашёл (сохранил как справочник) по ESC последовательностям, а где
ещё это описано?

Сами Esc-последовательности еще описаны в "У1.00031-01 90 01.РАБОТА С ВНЕШНИМИ УСТРОЙСТВАМИ", но не все и некоторые неправильно. А на страничке felix-а они описаны все и верно.

---------- Post added at 21:33 ---------- Previous post was at 21:31 ----------



я правильно понял, что это последовательность кодов и символов для 177566 так? Или их надо одной строкой выводить?


В угловых скобках коды, а остальное - символы.

---------- Post added at 21:37 ---------- Previous post was at 21:33 ----------


Ух! Как завёрнуто, с курсором пока сложно, мне надо вспомнить вникнуть во всю эту математику (переспать с этой информацией), но часть про курсор можно и на потом отложить, сначало сделать рулон и цвета и допустим перезапуск программы
с каким-то ключом что-бы возвращала цвета или организовать анализ командной
строки что-бы пользователь не лазил в УСТ, а при загрузке в пятом блоке монитора
или в стартовом файле один раз прописал желаемые цвета.

Ну программа UST делает всё что надо, кроме курсора. А для курсора можно написать отдельную программу, которая будет висеть резидентом, с помощью неё можно переключать форму курсора через командную строку, а также через Esc-последовательность, скажем <Esc>y (игрек маленькое). Следующие два символа определят первую и последнюю строки.

hobot
20.11.2011, 21:54
Ну программа UST делает всё что надо, кроме курсора
Тот уст который на половине дискет не делает РУЛОН, приходится или в УСТ лезть или отдельный файлик РУЛОН запускать, я вот не могу вспомнить как наши ребята
в своё время это сделали (я про курсор) - помню только что однажды появилась супер крутая дискета (системная) с Айбиэмовским шрифтиком и курсором горизонтальным _ :smile:
Вот такой вопрос (по поводу резидента) чисто ламерский-теоретический:
нельзя ли использовать один из стандартных драйверов (который по определению в памяти сидит) + довесив туда режим курсора _ такого вида.
tt.sys какой-нибудь пересобрать например ))) (планочку пониже для [hobota] пожалуйста) ну как идея просто, может такое прокатить?
Просто я не помню, что-бы что-то дополнительно надо было для курсора
подгружать, как-то это по другому вроде было :confused_std:

form
20.11.2011, 21:56
TT в памяти по определению сидит только в последних версиях системы где собственно TT.SYS вообще нету :)

Alex_K
20.11.2011, 23:08
... я вот не могу вспомнить как наши ребята
в своё время это сделали (я про курсор) - помню только что однажды появилась супер крутая дискета (системная) с Айбиэмовским шрифтиком и курсором горизонтальным _ :smile:
.................................................. ....
Просто я не помню, что-бы что-то дополнительно надо было для курсора
подгружать, как-то это по другому вроде было :confused_std:
Ну раз шрифт был Айбиэмовский, то значит была программа, которая его подгружала, а заодно она могла и с курсором побаловаться.

form
22.11.2011, 19:17
Решил немного поворчать на тему программ, работающих с терминалом напрямую через регистры (надо же чем-то заняться пока пиво пьется). Неработающие подобные проги доставали еще в начале 80ых, а сейчас и подавно. Речь идет о том, что многие программеры считали, что достаточно сделать в программе


CLR @#177560

как наступает чудо: программа может работать с терминалом на уровне регистров, а система при этом под ногами не путается. К сожалению это далеко не всегда верно. А посему немного расскажу о том как писать программы, чтобы они работали вообще в любом случае - вдруг современные программеры RT-11 (гы) будут писать правильно ;)

Для начала перечислю случаи когда вышеописанная методика не работает (экзотические случаи вроде DEC Pro не рассматриваем):


Первый случай очевиден: когда консольный регистр не 177560. Случай не частый, но тем не менее ничего невозможного в нем нет.
Система многотерминальная. Тут целых две проблемы: во-первых консольный терминал может быть любым из сконфигуренных в системе; во-вторых при поддержке таймаута терминалов система постоянно приводит терминалы в порядок (в том числе заботится, чтобы прерывания от клавиатуры были разрешены)


Небольшой кусок кода в программе легко справляется со всем этим и делает программу рабочей в любой системе (здесь не рассматриваются хитрости которые зависят от конкретной версии или сборки монитора - только универсальный способ).

Для начала определения используемых смещений и битов.


$JSX = 4 ;РАСШИРЕНОЕ СЛОВО СОСТОЯНИЯ ЗАДАНИЯ
NOVBG$ = 100 ;БИТ ЗАПРЕТА VBGEXE

$SYPTR = 54 ;УКАЗАТЕЛЬ НА ДАНЫЕ RMON
$SYSGE = 372 ;ПАРАМЕТРЫ ГЕНЕРАЦИИ СИСТЕМЫ (RMON)
MTTY$ = 20000 ;БИТ ПОДДЕРЖКИ МНОГОТЕРМИНАЛЬНОСТИ
TSXP$ = 100000 ;БИТ TSX-PLUS
$TTKS = 304 ;АДРЕС CSR КЛАВИАТУРЫ
$CNTXT = 320 ;АДРЕС БЛОКА ОПИСАНИЯ ТЕКУЩЕГО ЗАДАНИЯ

I.CNSL = 16 ;УКАЗАТЕЛЬ НА TCB ТЕРМИНАЛА ЗАДАНИЯ
T.STAT = 14 ;СЛОВО СОСТОЯНИЯ ТЕРМИНАЛА
T.CSR = 16 ;CSR ТЕРМИНАЛА

DH11$ = 20000 ;ТЕРМИНАЛ НА DH-11 МУЛЬТИПЛЕКСОРЕ
DZ11$ = 10000 ;ТЕРМИНАЛ НА DZ-11 МУЛЬТИПЛЕКСОРЕ


Не касается терминалов напрямую, но... Совсем не помешает в начале программы следующий кусок (который к тому же места не занимает):


.ASECT
.=$JSX
.WORD NOVBG$
.PSECT


Этим мы добиваемся того, что в RT-11 V5.x программа не будет запускаться через VBGEXE. Потому как если запускать ее через VBGEXE, программа просто не увидит страницу ввода/вывода (на самом деле можно установить другой битик чтобы программа видела страницу ввода-вывода из под VBGEXE, но лучше таким баловством не заниматься).


START: MOV @#$SYPTR,R0 ;ПОЛУЧАЕМ АДРЕС СЕКЦИИ ДАННЫХ RMON
TST $SYSGE(R0) ;ЭТО TSX-PLUS (ПОМНИМ: TSXP$ = 100000)?
BMI TSX ;MI -> ДА. ВСЕ СОБСТВЕННО...
BIT #MTTY$,$SYSGE(R0) ;МНОГОТЕРМИНАЛЬНАЯ СИСТЕМА?
BEQ 10$ ;EQ -> НЕТ

;ЕСЛИ СИСТЕМА МНОГОТЕРМИНАЛЬНАЯ, СМЕЩЕНИЯ $TTKS, $TTKB, $TTPS И $TTPB
;НЕ ИСПОЛЬЗУЮТСЯ В ПРИНЦИПЕ, ДА И САМ ТЕРМИНАЛ МОЖЕТ БЫТЬ ВЫБРАН ЛЮБОЙ.
;НАША ЗАДАЧА - ПРОВЕРИТЬ, ЧТО ТЕКУЩИЙ ТЕРМИНАЛ - DL11 (ИНАЧЕ МЕТОД
;РАБОТЫ С РЕГИСТРАМИ СОВЕРШЕННО ДРУГОЙ), УЗНАТЬ CSR АДРЕС ТЕРМИНАЛА
;И СКАЗАТЬ СИСТЕМЕ, ЧТОБЫ НЕ МЕШАЛАСЬ.

MOV $CNTXT(R0),R0 ;ПОЛУЧАЕМ АДРЕС БЛОКА ОПИСАНИЯ ЗАДАНИЯ
MOV I.CNSL(R0),R0 ;ПОЛУЧАЕМ АДРЕС TCB ТЕРМИНАЛА
BIT #DH11$!DZ11$,T.STAT(R0) ;ПРОВЕРЯЕМ НЕ МУЛЬТИПЛЕКСОР ЛИ ЭТО
BNE MUX ;NE -> ДА, ПРИПЛЫЛИ.

;СЧАСТЬЕ ЕСТЬ И У НАС ОБЫЧНЫЙ DL11. В ПОЛЕ T.CSR БЛОКА УПРАВЛЕНИЯ ТЕРМИНАЛОМ
;(TCB) ХРАНИТСЯ АДРЕС CSR КЛАВИАТУРЫ.

ADD #T.CSR,R0 ;ПОЛУЧАЕМ УКАЗАТЕЛЬ НА CSR
MOV @R0,R5 ;СОХРАНЯЕМ ЕГО В R5
MOV #FAKE,@R0 ;ПОДСТАВЛЯЕМ ЛЕВЫЙ АДРЕС ВМЕСТО НЕГО
;И ПУСТЬ СИСТЕМА ПОДАВИТСЯ ;)
BR 20$ ;ДАЛЬШЕ ОБЩИЙ КОД

;У НАС ОДНОТЕРМИНАЛЬНАЯ СИСТЕМА. ТУТ ВСЕ ПРОСТО: АДРЕС РЕГИСТРА КЛАВИАТУРЫ
;ХРАНИТСЯ ПО СМЕЩЕНИЮ $TTKS В RMON.

10$: MOV $TTKS(R0),R5 ;СОХРАНЯЕМ CSR В R5

;СОБСТВЕННО ВСЕ. С ЭТОГО МЕСТА ИМЕЕМ ОБЩИЙ КОД, CSR В R5, ВСЕ ОБРАЩЕНИЯ
;К ТЕРМИНАЛУ ЧЕРЕЗ НЕГО И ДЕЛАЕМ.

20$: CLR @R5 ;ЗАПРЕЩАЕМ ПРЕРЫВАНИЯ ОТ КЛАВИАТУРЫ
...

;ПО ВЫХОДУ ИЗ ПРОГРАММЫ НЕ ЗЫБЫВАЕМ РАЗРЕШИТЬ ПРЕРЫВАНИ ОТ КЛАВИАТУРЫ
;И ВОССТАНОВИТЬ АДРЕС CSR ЕСЛИ СИСТЕМА МНОГОТЕРМИНАЛЬНАЯ.

FAKE:: .BLKW 4 ;ФАЛЬШИВЫЙ НАБОР CSR ЧТОБ МОНИТОР
;ИМИ ПОДАВИЛСЯ


Вот собственно и все. Мы получили прогу которая работает при нестандартном CSR, а также работает с правильным терминалом независимо от SET TT CONSOL=n, и система-вредитель нам не мешает!

Можно было бы конечно разобрать случай использования напрямую регистров в TSX, но это отдельная тема и без особого смысла: в TSX любой функционал ради которого в RT-11 используют регистры можно включить и без этого, не говоря уже о последствиях прямого тыкания в железо в многопользовательской системе ;)

hobot
22.11.2011, 19:59
form, это как шпоргалка великая информация - но поворчи ещё пожалуйста:
1. Нужны ли такие ухищрения если мне просто в цикле надо постоянно клавиатуру
опрашивать ???
2. Как победить проскоки ? то есть у меня два цикла 1 ждет нажатия кнопки и когда
дожидается запускается второй из которого еxit так-же по нажатию, но exit срабатывает сразу ??? И это реальная проблема для меня ))) Я же игру собрался делать )))

form
22.11.2011, 20:12
form, это как шпоргалка великая информация - но поворчи ещё пожалуйста:
1. Нужны ли такие ухищрения если мне просто в цикле надо постоянно клавиатуру
опрашивать ???
2. Как победить проскоки ? то есть у меня два цикла 1 ждет нажатия кнопки и когда
дожидается запускается второй из которого еxit так-же по нажатию, но exit срабатывает сразу ??? И это реальная проблема для меня ))) Я же игру собрался делать )))

1. Нужны если требуется гарантированная совместимость с любыми системами. Наиболее частая проблема которая встречается - многотерминальная система разрешает прерывания автоматом и половина ввода попадает в систему вместо программы, а также система генерит эхо для этого ввода. Получается каша.

2. Проскоков быть не должно если прерывания от клавиатуры запрещены. Если они разрешены, см проблему в п. 1 :)

Как минимум нужно сделать CLR @#177560 - в однотерминальной системе этого достаточно.
Насчет выскакивания сразу: а ты собственно код клавиши нажатой извлекаешь из регистра данных? :)

---------- Post added at 23:12 ---------- Previous post was at 23:02 ----------

Вот для примера подпрограмма POLL которая либо возвращает код нажатой клавиши в R0 либо устанавливает бит C если ничего нажато не было


POLL: TSTB @#177560 ;ЧТО-НИБУДЬ НАЖАТО?
BMI 10$ ;MI -> ДА
SEC ;УСТАНАВЛИВАЕМ ПРИЗНАК ОТСУТСТВИЯ НАЖАТИЯ
RETURN ;ВОЗВРАТ
10$: MOVB @#177562,R0 ;ДА, ПОЛУЧАЕМ КОД
RETURN ;ВОЗВРАТ


По метке 10$ о бите C не заботимся - он уже очищен командой TST выше.

hobot
22.11.2011, 20:12
а ты собственно код клавиши нажатой извлекаешь из регистра данных?
НУ дя ! И эта скотина второй цикл игнорирует и как-будто и небыло повторного
обнуления реагистра адреса !!!
да но у меня конкретная кнопка для выхода из 1 цикла и из 2 второго, допустим это "пробел" или "ентер"
я сравниваю 177562 с кодом нужной кнопки если это не ентер идут другие подпрограммы, а если "ентер"
выход и запуск цикла 2 который сразу кушает ентер из первого цикла и хлоп проскакивает, что за гадство такое?
ну вот смотри примерно такой тупой тупой листинг:


...
var
inkey origin 177560B: integer;
key origin 177562B: integer;
...
repeat inkey:=0;
...
case key of
тра - та та та
end;
...
until key=13;

дальше такая же примерно бодяга но условие until срабатывает сразу!!!

form
22.11.2011, 20:19
НУ дя ! И эта скотина второй цикл игнорирует и как-будто и небыло повторного
обнуления реагистра адреса !!!

Покажи пример.
Что такое обнуление регистра адреса?

---------- Post added at 23:19 ---------- Previous post was at 23:13 ----------

Кстати о совместимостях. Теоретически можно представить себе, что если прога сделана для УКНЦ, то уж там-то не на что натыкаться. Ан нет: и на УКНЦ можно поставить многотерминальную систему и успешно запользовать С2 как второй терминал :)

hobot
22.11.2011, 20:22
Покажи пример.
Что такое обнуление регистра адреса?

см. вставил пример в пост выше )))

form
22.11.2011, 20:31
см. вставил пример в пост выше )))

Не вижу второго цикла.

"case key of" может вообще не работать - зависит от реализации компиляторы. Если он каждый из case'в проверяет напрямую из key, то первая же проверка разрешает нажатие следующей клавиши, которая может быть нажата до конца всех проверок.

вообще когда такие вещи делаются на языках высокого уровня нужно представлять себе во что это выльется после компиляции :)

кроме того у тебя вообще не видно опроса клавиатуры, зато прерывание в цикле запрещается постоянно ;)

---------- Post added at 23:31 ---------- Previous post was at 23:25 ----------

Вот для понимания. Синтакс языка могу напутать - давно не паскалил, а дос запускать чтобы быстро в трубо-паскале проверить лень :)


inkey := 0;

repeat
while (inkey and 128) = 0 do; (* ждем нажатия *)

ch := key;
case ch of
...


хотя вобщем-то есть DEC паскаль, но думаю и так понятно что я имел в виду :)

hobot
22.11.2011, 20:40
while (inkey and 128) = 0 do;
не совсем понимаю почему такая конструкция ???
на УКНЦ паскаль отличается, досовский не так утроен
синтаксис всё фигня
на голом ассемблере я игру ваять буду лет 100, поэтому буду делать
на паскале с макро-вставками в ЭМУЛЯТОРЕ УКНЦ, то есть считай на УКНЦ !!! )))

а второй цикл такой-же как и первый
обнуляет регистр адреса
смотрим регистр данных
если ентер выходим - form я тебе клянусь он проскакивает !!!

form
22.11.2011, 20:42
не совсем понимаю почему такая конструкция ???
на УКНЦ паскаль отличается, досовский не так утроен
синтаксис всё фигня
на голом ассемблере я игру ваять буду лет 100, поэтому буду делать
на паскале с макро-вставками в ЭМУЛЯТОРЕ УКНЦ, то есть считай на УКНЦ !!! )))

а второй цикл такой-же как и первый
обнуляет регистр адреса
смотрим регистр данных
если ентер выходим - form я тебе клянусь он проскакивает !!!

Обнуление всего лишь запрещает прерывания. Все. В цикле это делать бесполезно. Далее у тебя в цикле тупо читается код нажатой клавиши, но при этом не проверяется нажали ее сейчас или это осталось на память с прошлого раза - еще когда ты набирал команду запуска программы.

Для того и конструкция - надо проверять 7 бит в 177560 и когда он установлен (клавиша нажата) - только тогда и читать ее.

hobot
22.11.2011, 20:50
Для того и конструкция - надо проверять 7 бит в 177560 и когда он установлен (клавиша нажата) - только тогда и читать ее.
Погоди, тут понимаешь какая вещь, мне не надо ждать нажатия клавиши,
мне надо в каждом тике цикла заного опрашивать и сравнивать какая именно нажата, то есть там какие-то объектики ползают себе, а где-то
между всем этим ( в самом начале цикла как правило ) я обнуляю RA
потом происходят вычисления положений объектов, отрисовка фона например, потом идет case где я смотрю какие именно кнопки лежат в RD
соответственно внутри case у меня реакция на эти кнопки
и условие until rd=13 (код ентера)

form
22.11.2011, 21:02
Погоди, тут понимаешь какая вещь, мне не надо ждать нажатия клавиши,
мне надо в каждом тике цикла заного опрашивать и сравнивать какая именно нажата, то есть там какие-то объектики ползают себе, а где-то
между всем этим ( в самом начале цикла как правило ) я обнуляю RA
потом происходят вычисления положений объектов, отрисовка фона например, потом идет case где я смотрю какие именно кнопки лежат в RD
соответственно внутри case у меня реакция на эти кнопки
и условие until rd=13 (код ентера)

Не надо ждать - не жди, но будь добр проверить - а ее вообще нажали?
У тебя же тупо без проверки проверяется код _последней нажатой клавиши_ и пофигу, что ты ее уже посмотрел когда-то, нажата-то она была и код ее по прежнему торчит в регистре дынных. Ты же не проверяешь нажал ли кто-то что-то вообще :)

---------- Post added at 23:56 ---------- Previous post was at 23:53 ----------

Примерно так.


inkey := 0;

repeat
if ((inkey and 128) <> 0) then begin
ch := key;
case ch of
...
end;

...

Все что в ифе выполняется когда нажата клавиша. Если не нажата то идет дальше.
Ну и ниже ифа не забываем, что в регистре данных код последней нажатой клавиши есть независимо от того нажал ты ее только что или неделю назад - надо делать признак того, что клавиша именно сейчас нажата.

Самое простое перед ифом pressed := (inkey and 128) <> 0; (var pressed boolean). И уже этот pressed проверять и в ифе и ниже - к примеру until pressed and key = 13;

---------- Post added 23.11.2011 at 00:02 ---------- Previous post was 22.11.2011 at 23:56 ----------

Ну и еще раз напоминаю: не проверяй регистры напрямую больше раза подряд - поскольку они обращаются к железу, они могут поменяться между проверками. Копируй в отдельную переменную, а потом уже проверяй ее.

hobot
22.11.2011, 21:09
form, ага! )))

Ну и еще раз напоминаю: не проверяй регистры напрямую больше раза подряд - поскольку они обращаются к железу, они могут поменяться между проверками. Копируй в отдельную переменную, а потом уже проверяй ее.
да у меня так и будет я просто для краткости написал, конечно из регистровой переменной значение будет присвоено глобальной переменной типа integer к примеру.

form
22.11.2011, 21:10
form, ага! )))

да у меня так и будет я просто для краткости написал, конечно из регистровой переменной значение будет присвоено глобальной переменной типа integer к примеру.

Ну главную ошибку свою ты надеюсь понял? :)
Клавиша нажата не тогда когда есть код в 177562, а когда в 177560 установлен 7й бит -- вот тогда и читаем 177562 :)

hobot
22.11.2011, 21:49
Ну главную ошибку свою ты надеюсь понял?
Клавиша нажата не тогда когда есть код в 177562, а когда в 177560 установлен 7й бит -- вот тогда и читаем 177562
Да с клавиатурой ситуация стала гораздо более явной )))
И конечно мне хочется верить что главную свою ошибку я ещё не совершил )))
В любом случае - замечательно что есть у кого спросить!

Для меня некоторые моменты просто не такие явные как для профи, поэтому я считал (не понимаю до сих пор на 100%
значение термина ПРЕРЫВАНИЕ - по моему это неудачная русификация какая-то) что обнуление 177560 это и есть опрос
клавиатуры с автоматическим занесением кода кнопки в 177562, но я ничего не знал про признак нажатия кнопки ( не углублялся поскольку и так всё работало "как-бы"), я конечно догадывался ))) Ладно...главное ты меня во время
вернул к МАТ.ЧАСТИ )))

form
22.11.2011, 21:51
Да с клавиатурой ситуация стала гораздо более явной )))
И конечно мне хочется верить что главную свою ошибку я ещё не совершил )))
В любом случае - замечательно что есть у кого спросить!

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

Alex_K
22.11.2011, 23:08
Кстати о совместимостях. Теоретически можно представить себе, что если прога сделана для УКНЦ, то уж там-то не на что натыкаться. Ан нет: и на УКНЦ можно поставить многотерминальную систему и успешно запользовать С2 как второй терминал :)
А если есть стандартный сетевой адаптер, то можно соединить две УКНЦ. На подсоединенной должна быть запущена программа терминала, что получили - вывели на экран, что нажали на ней - передали в сеть. Вот и трехтерминальная машина. ;)

form
22.11.2011, 23:12
А если есть стандартный сетевой адаптер, то можно соединить две УКНЦ. На подсоединенной должна быть запущена программа терминала, что получили - вывели на экран, что нажали на ней - передали в сеть. Вот и трехтерминальная машина. ;)

Ну я сетевого адаптера в глаза не видел для УКНЦы, потому и не знаю что с ним можно делать :)
Если он совместим с DL11 то вполне можно :)

А так - цепляем к С2 какой-нибудь VT52, собираем GADа как REL, делаем ему FR/TE:1 и получаем на одном терминале игрушку, а на втором нормальную работу которой вышеупомянутый гад не мешает несмотря на свою форегроундность :)

Alex_K
22.11.2011, 23:19
Ну я сетевого адаптера в глаза не видел для УКНЦы, потому и не знаю что с ним можно делать :)

Ну собран он также на 1801ВП1-065, как С2, так что различий почти нет. Единственно, что надо прямо соединить, не через реле, а то тогда по сигналу таймера надо все время писать в регистр состояния приемника, чтобы линию не разорвало.

form
22.11.2011, 23:21
Ну собран он также на 1801ВП1-065, как С2, так что различий почти нет. Единственно, что надо прямо соединить, не через реле, а то тогда по сигналу таймера надо все время писать в регистр состояния приемника, чтобы линию не разорвало.

Ну это уже с довесками, а С2 стардартным способом подключается как доп терминал, XL:, LS: или DD: :)

Последнее кстати можно взять на заметку как способ связи с PC для которого ничего не нужно изобретать :)

Alex_K
22.11.2011, 23:23
Ну это уже с довесками, а С2 стардартным способом подключается как доп терминал, XL:, LS: или DD: :)
Если прямо соединить, то никаких довесков не надо, работает как стандартный последовательный порт. Единственно, что присоединять надо такую же УКНЦ, т.к. на выходе не RS-232 или токовая петля, а трансформаторная развязка.

form
22.11.2011, 23:25
Если прямо соединить, то никаких довесков не надо, работает как стандартный последовательный порт. Единственно, что присоединять надо такую же УКНЦ, т.к. на выходе не RS-232 или токовая петля, а трансформаторная развязка.

Ну тогда еще терминал :)
Хотя два RELа пожалуй жирно будет.
Впрочем есть еще MU/BASIC :)
У нас помню на Э60 было 8 терминалов и на этом MU/BASICе свежепоявившуюся информатику преподавали :)

Alex_K
22.11.2011, 23:33
...
Впрочем есть еще MU/BASIC :)
У нас помню на Э60 было 8 терминалов и на этом MU/BASICе свежепоявившуюся информатику преподавали :)
У нас в институте тоже на многопользовательском Бейсике на "Электронике-60" преподавали работу с внешними устройствами. Программировали работу с ГМД-7022. Этот Бейсик мог обращаться к ячейкам памяти, правда как, уже не помню.

А MU/Basic это умеет ?

form
22.11.2011, 23:35
У нас в институте тоже на многопользовательском Бейсике на "Электронике-60" преподавали работу с внешними устройствами. Программировали работу с ГМД-7022. Этот Бейсик мог обращаться к ячейкам памяти, правда как, уже не помню.

А MU/Basic это умеет ?

Сам по себе вроде нет. Но при его сборке можно подцепить ассемблерные подпрограммы которые можно вызывать. У нас правда дистриба не было - был уже собранный. Да и результат такой возможности в многопользовательской среде предсказуем - пришлось бы только и делать что перегружать систему и запускать басиц :)

MU/BASIC кстати валяется на bitsavers какой-то, но все руки не дойдут посмотреть.

Alex_K
22.11.2011, 23:42
... Да и результат такой возможности в многопользовательской среде предсказуем - пришлось бы только и делать что перегружать систему и запускать басиц :)

Ну не перезапускали. Работали помню точно с дисководом ГМД-7022, который DX:, через регистры на уровне секторов. Работали с перфоратором, читали и писали перфоленты.
В этом Бейсике был доступ к ячейкам памяти и проверка отдельных битов через логические выражения, что-то типа IF (TPS AND 128) THEN GOTO ...

Естественно, что запускать свою программу могли только на одной машине. Хочешь попробовать - вставай в очередь.

form
23.11.2011, 01:00
Естественно, что запускать свою программу могли только на одной машине. Хочешь попробовать - вставай в очередь.

Ну так-то конечно можно.
А у нас на всех терминалах разом сидел народ.
На одном кто-нибудь зажмет до упора ВК, подержит с пол минуты, потом все колом стоит пока он свое не отREADYт :)

---------- Post added at 04:00 ---------- Previous post was at 02:43 ----------

Экие иной раз под пиво идеи приходят в голову ;)


pdp-11:~/rt11/ethtimed% sudo obj/ethtimed -i re0


tcpdump: listening on re0, link-type EN10MB
03:59:18.365081 08:00:2b:31:47:b4 ff:ff:ff:ff:ff:ff 757e 60:
0001 0203 0405 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000
03:59:18.365153 70:71:bc:50:eb:d0 08:00:2b:31:47:b4 757e 20:
e76e 0a00 4cf4


.DA 1-JAN-72

.TI 0:0

.RU NQTST

.DA
23-Nov-2011

.TI
03:59:33

.

На без93и и DEQNA - TOY ;)

form
24.11.2011, 00:33
Не столько сильно нужная вещь, сколько для изучения ;)

УКНЦа собственно не касается, но тема уже давно переросла рамки УКНЦ :)

Комплект состоящий из сервера времени для унихов (проверялся в опенбсд и центосе, для остальных - напильник) и клиента для RT-11 который по етхернету получает время и устанавливает его в системе.

Поделка наколенная, правильность данных не проверяется. Цель была просто посмотреть как етхернет програмится в RT-11 :)

Никаких тцпов/ипов - используется етхернетный протокол ^RTIM...

hobot
28.11.2011, 03:17
Вот на скриншоте видно, что последовательность генератора всегда
начинается одинаково. Я уже коротко этот вопрос задавал и краткий
ответ от form'a получил "смайл", беда в том, что начальное
значение для Генератора - это константа, что-бы такое переменное
ему закидывать туда? Если время, как form посоветовал, где оно хранится
у УКНЦ ? MOV <откуда и что>, в генератор для старта ?
(вопрос в рамках разработки игры :smile:)

form
28.11.2011, 03:23
Вот на скриншоте видно, что последовательность генератора всегда
начинается одинаково. Я уже коротко этот вопрос задавал и краткий
ответ от form'a получил "смайл", беда в том, что начальное
значение для Генератора - это константа, что-бы такое переменное
ему закидывать туда? Если время, как form посоветовал, где оно хранится
у УКНЦ ? MOV <откуда и что>, в генератор для старта ?
(вопрос в рамках разработки игры :smile:)

Самое простое - инициализировать допустим значением таймера (или посмотреть в RT-11 System Internals смещение или получить макрокомандой .GTIM) и (или) далее тупо в цикле например дергать этот самый генератор пока не будет получена какая-нибудь реакция - например ответ от клавиатуры.

Что-нибудь в этом роде. Да мало ли еще что можно добавить как источник случайностей :)

hobot
28.11.2011, 03:36
Да мало ли еще что можно добавить как источник случайностей
в СТАЛКЕРЕ, например, игроку предлагается число в самом начале ввести, наверняка
для инициализации генератора )) А можно подробней о .GTIM - ведь если сам буду
читать застряну надолго с этим ?

form
28.11.2011, 03:38
в СТАЛКЕРЕ, например, игроку предлагается число в самом начале ввести, наверняка
для инициализации генератора )) А можно подробней о .GTIM - ведь если сам буду
читать застряну надолго с этим ?

.GTIM #AREA,#TIME

AREA: .BLKW 2
TIME: .BLKW 2

возвращает число тиков (50 в секунду) набежавших с начала суток (со времени включения если время не выставляли).

Можно и вообще без таймера обойтись - постоянно просить у генератора новое число, а использовать реально его только в нужные моменты которые и так получатся достаточно случайными :)
Можно загрузить в ПП отдельную прогу генератора случайных чисел и пусть она живет там своей жизнью...
Вобщем вариантов море.

Я когда свой тетрис делал - вполне хватало постоянного дергания генератора с реальным использованием только когда нужно.

hobot
28.11.2011, 03:53
Я когда свой тетрис делал - вполне хватало постоянного дергания генератора с реальным использованием только когда нужно.
У меня тут видишь ли какая штука - все объекты при первом запуске всегда на одних и тех же местах тогда получаются.
.GTIM #AREA,#TIME

AREA: .BLKW 2
TIME: .BLKW 2

возвращает в какую переменную из этих двух?
Я бы сразу сделал тогда нужную строчку и всё забыл бы пока об этом ! )))

form
28.11.2011, 03:56
У меня тут видишь ли какая штука - все объекты при первом запуске всегда на одних и тех же местах тогда получаются.
.GTIM #AREA,#TIME

AREA: .BLKW 2
TIME: .BLKW 2

возвращает в какую переменную из этих двух?
Я бы сразу сделал тогда нужную строчку и всё забыл бы пока об этом ! )))

В TIME. Не помню только порядок: 32bit значение пишется сначала старшее слово, потом младшее, но в каком-то месте было исключение кажется как раз со временем - вобщем проверь :)

hobot
28.11.2011, 04:00
В TIME
Ok! Попробую, попутно конечно почитаю все эти макрокоманды, просто пока
время на другую часть хотелось-бы потратить )))


________________
первый скриншот:
так ещё хуже ))) И даже если бы не трапилось всё равно
на старте одно и то же число - засада однако для меня !

второй скриншот:
насочинял ещё один "не вариант" на второй картинке )))

третий скриншот:
вернул пока к первоначальному (что-бы запуск не терять)
надо что-то для инициализации в R1 случайное кидать (((
http://i.smiles2k.net/computer_smiles/433.gif (http://smiles2k.net/computer_smiles/index.html)

Titus
28.11.2011, 19:12
Как в макроассемблере сделать макросы для команд сохранения регистров в стеке?

Хочу, чтобы PUSH Rx транслировалось, как MOV Rx,-(SP). И т.д.

form
28.11.2011, 19:27
Как в макроассемблере сделать макросы для команд сохранения регистров в стеке?

Хочу, чтобы PUSH Rx транслировалось, как MOV Rx,-(SP). И т.д.

Например так - если без наворотов:


.MACRO PUSH ARG
.IRP X,<ARG>
MOV X,-(SP)
.ENDR
.ENDM

PUSH R1
PUSH <R2,R3>


---------- Post added at 22:19 ---------- Previous post was at 22:15 ----------

Кстати о сохранении регистров...
Поскольку эта процедура обычно выполняется в подпрограммах, можно кое-что упростить. К примеру так:


$SAVAL::
MOV R4,-(SP) ;СОХРАНЯЕМ R4
MOV R3,-(SP) ;R3
MOV R2,-(SP) ;R2
MOV R1,-(SP) ;R1
MOV R0,-(SP) ;R0
MOV 12(SP),-(SP) ;ПЕРЕНОСИМ АДРЕС ВОЗВРАТА
MOV R5,14(SP) ;СОХРАНЯЕМ R5
JSR PC,@(SP)+ ;СОПРОГРАМИМ ВЫЗВАВШЕГО
MOV (SP)+,R0 ;ВОССТАНАВЛИВАЕМ R0
MOV (SP)+,R1 ;R1
MOV (SP)+,R2 ;R2
MOV (SP)+,R3 ;R3
MOV (SP)+,R4 ;R4
MOV (SP)+,R5 ;R5
RETURN


Тогда в подпрограмме делаем CALL $SAVAL, у нас сохраняются все регистры, когда делается RETURN, они сами восстановятся и будет возврат куда надо. Кстати родная DECовская подпрограмма :)

---------- Post added at 22:27 ---------- Previous post was at 22:19 ----------

Вообще, рекомендую обратить внимание на библиотеку ULBLIB которая лежит в RT-11 V5.7 сорцовом ките (с исходниками и описанием в них что подпрограммы делают). Весьма удобная вещь - многие RSXовские подпрограммы (увы, не все) в ней есть. Особенно полезны- сохранения регистров в разных сочетаниях, конвертация чисел/radix-50 <> ascii, арифметика без EIS итд.

Titus
29.11.2011, 17:47
Немножко потестил скорость работы процессоров на УКНЦ - ужаснулся, какой тормоз периферийный процессор. Команды типа MOV Rx,Rx он выполняет за 16 тактов, вместо 8, как если бы время памяти было 1Т. Сначала показалось странным, но потом разобрался. Во-первых, как это я раньше не заметил, шина данных ОЗУ ПП - 8-битная! И все 16-битные транзакции выполняются в 2 раза медленнее. Во-вторых, доступ к ОЗУ возможен только во время временного слота 'Ц.П.', который наступает раз в 4 такта. Т.е. 2 такта на слот 'Ц.Э.' (цикл экрана), и 2 такта на 'Ц.П.' (цикл процессора). В общем, имеем около 390тыс. операций типа регистр/регистр на ПП, что более, чем в два раза медленнее, чем на том же Спектруме, не смотря на то, что тактовая частота ПП 6.25МГц.

form
29.11.2011, 17:48
Немножко потестил скорость работы процессоров на УКНЦ - ужаснулся, какой тормоз периферийный процессор. Команды типа MOV Rx,Rx он выполняет за 16 тактов, вместо 8

А приоритет процессору подымал перед тестом?

Titus
29.11.2011, 17:52
А приоритет процессору подымал перед тестом?
Приоритет относительно чего? Видеоконтроллера? Это невозможно. А доступ в ОЗУ со стороны ЦП и ПП происходят в параллель, и друг-другу не мешают.

form
29.11.2011, 17:54
Приоритет относительно чего? Видеоконтроллера? Это невозможно. А доступ в ОЗУ со стороны ЦП и ПП происходят в параллель, и друг-другу не мешают.

Приоритет процессора - его параметр. Это не только возможно, но и необходимо.

Нужно делать MTPS #200 перед началом теста. Иначе все, что генерит прерывания будет прерывать твой тест.

Если же используется таймер (прерывания) для отсчета, тогда надо позаботиться, чтобы все остальное не мешалось - на всякий случай :)

Titus
29.11.2011, 18:10
Приоритет процессора - его параметр. Это не только возможно, но и необходимо.

Нужно делать MTPS #200 перед началом теста. Иначе все, что генерит прерывания будет прерывать твой тест.

Если же используется таймер (прерывания) для отсчета, тогда надо позаботиться, чтобы все остальное не мешалось - на всякий случай :)
У меня измерения происходят между двумя прерываниями сетвеого таймера. А остальные прерывания в это время хоть и разрешены, но фактически они не вызываются. Хотя, для чистоты эксперимента, надо бы отключать. Хотя, опять же повторюсь, видно, что они не влияют.

form
29.11.2011, 18:13
У меня измерения происходят между двумя прерываниями сетвеого таймера. А остальные прерывания в это время хоть и разрешены, но фактически они не вызываются. Хотя, для чистоты эксперимента, надо бы отключать. Хотя, опять же повторюсь, видно, что они не влияют.

Между двумя срабатываниями ненадежно.
Лучше бы за больший интервал.
И сам тест - он-то запускается из прерывания от таймера? - иначе стартовая точка неопределена.
Ну и хандлер прерывания таймера - он надеюсь свой и в момент учета единственный? :)

Titus
29.11.2011, 18:16
Между двумя срабатываниями ненадежно.
Лучше бы за больший интервал.
И сам тест - он-то запускается из прерывания от таймера? - иначе стартовая точка неопределена.
Чем же не надежно? Все надежно. С точностью до команды. Конечно от таймера)

form
29.11.2011, 18:18
Чем же не надежно? Все надежно. С точностью до команды. Конечно от таймера)

А те кто проги тестовые пишут дураки зачем-то заполняют большой кусок памяти командой и натравливают счет на него :)

Нет, конечно можно попробовать опереться и на одно прерывания таймера, но ответа на вопрос как организовано я не получил. Как минимум хандлер таймера должен быть свой и единственный и сам тест запускать должен именно он.

Titus
29.11.2011, 18:20
А на счет прерываний, могущих помещать измерениям. Каналы 0..2 не помешают, т.к. в это время ЦП сидит в ожидании окончания теста, и ничего не далает. Единственное, может помешать нажатие клавиши на клавиатуре и программируемый таймер.

---------- Post added at 17:20 ---------- Previous post was at 17:19 ----------


А те кто проги тестовые пишут дураки зачем-то заполняют большой кусок памяти командой и натравливают счет на него :)

Нет, конечно можно попробовать опереться и на одно прерывания таймера, но ответа на вопрос как организовано я не получил. Как минимум хандлер таймера должен быть свой и единственный и сам тест запускать должен именно он.
То, что пишут другие - это их личное дело)
Конечно тест запускает собственный обработчик прерывания от таймера. А после теста восстанавливает его.

form
29.11.2011, 18:23
А на счет прерываний, могущих помещать измерениям. Каналы 0..2 не помешают, т.к. в это время ЦП сидит в ожидании окончания теста, и ничего не далает. Единственное, может помешать нажатие клавиши на клавиатуре и программируемый таймер.

---------- Post added at 17:20 ---------- Previous post was at 17:19 ----------


То, что пишут другие - это их личное дело)
Конечно тест запускает собственный обработчик прерывания от таймера. А после теста восстанавливает его.

А сам тест (где команды побежали которые считаются) запускается хандлером таймера (например по команде RTI)?
Или как вариант - WAIT и после сразу тест, а хандлер отлавливает конец.

Titus
29.11.2011, 18:27
А сам тест (где команды побежали которые считаются) запускается хандлером таймера (например по команде RTI)?
Или как вариант - WAIT и после сразу тест, а хандлер отлавливает конец.
Чтобы не было вопросов, вот как он запускается, и выходится. Все числа в десятичной арифметике, если не указано иное.


MTPS #0 ;Разрешить прерывания

3$: BR 3$ ;Остановка программы и ожидание прерываний

;=============================================== Первая итерация прерывания от сетевого таймера
;Необходима для избежания случая, когда запрос на прерывания
;от таймера уже установлен, а прерывания запрещены, в связи с чем
;прерывание наступает с запозданием.
TMInit:
MOV R0,-(SP) ;
MOV PC,R0 ;
ADD #TMHandler-.,R0 ;
MOV R0,@#^O100 ;Адрес вектора = TMHandler
MOV (SP)+,R0 ;
RTI ;

;=============================================== Главный цикл тестирования команд
TMHandler:
MOV #TMExit,@#^O100 ;Адрес вектора = TMHandler

OpBufLoop:
.WORD 0 ;Комада подготовки данных для каждого цикла
OpBuf:
.BLKW 2048 ;Буфер для тестируемых команд
OpBufEnd:
INC R4 ;Увеличиваем счетчик циклов
JMP (R5) ;Бесконечный цикл --> OpBufLoop


;=============================================== Буфер данных

DBuf:
.BLKW 2048 ;Буфер для данных и стека тестируемых команд
DBufEnd:

;===============================================
TMExit: ;Обработчик прерывания для выхода из цикла измерений
MOV (SP)+,R5 ;R5 - адрес прерывания цикла
MOV PC,R2 ;
ADD #CPUTCnt-.,R2 ;
MOV R2,-(SP) ;Взамен на стек положить адрес продолжения программы CPUTCnt

MOV TMPSW,@#^O102 ;Восстановить PSW вектора
MOV TMPC,@#^O100 ;Восстановить адрес обработки прерывания

RTI ;Выход из прерывания

;-----------------------------------------------
CPUTCnt:
ADD #4,SP ;Восстановить стек после одного вложенного прерывания

form
29.11.2011, 18:31
Чтобы не было вопросов, вот как он запускается, и выходится.

А-а, ну все-таки значит куча команд в буфере :)
Попробуй вместо BR . дождаться прерывания командой WAIT - ради интереса :)

Titus
29.11.2011, 18:32
А-а, ну все-таки значит куча команд в буфере :)
Попробуй вместо BR . дождаться прерывания командой WAIT - ради интереса :)
Не хочу) У меня уже все отлажено, и меряет с точностью до сотых долей такта)

form
29.11.2011, 18:37
Не хочу) У меня уже все отлажено, и меяет с точностью до сотых долей такта)

Лучше сделай тест нормальный вместо кривого SPEED.SAV. В том числе можно универсально - чтобы и грузить в ПП :)

Titus
29.11.2011, 18:38
Лучше сделай тест нормальный вместо кривого SPEED.SAV. В том числе можно универсально - чтобы и грузить в ПП :)
Я сделал, только он сырой пока что. Как раз универсальный, работает, как в ЦП, так и в ПП. Сначала тестирует скорость команд в ПП, потом в ЦП.

form
29.11.2011, 18:40
Я сделал, только он сырой пока что. Как раз универсальный, работает, как в ЦП, так и в ПП. Сначала тестирует скорость команд в ПП, потом в ЦП.

Я имею в виду не тест который тестирует и то и то на УКНЦ, а тест который можно было бы запустить вообще где хочешь, в том числе и загрузить в ПП УКНЦ. Мне например трудновато будет скорость ПП у себя померять прежде чем до ЦП доберется ;)

Titus
29.11.2011, 18:41
Мне например трудновато будет скорость ПП у себя померять прежде чем до ЦП доберется ;)
У себя - это где?

form
29.11.2011, 18:43
У себя - это где?

На 11/83.
Просто SPEED.SAV кривой до безобразия - искренне считает, что .SETTOP выделяет память программе и думает, что раз он его выдал, то уж никак не наткнется вверх по памяти на систему. Танцы с включите-выключите таймер - вообще жуть :)
А так - был бы тест который можно было бы запустить в RT-11 и командой PRUN загрузить в PPU без изменений :)

Titus
29.11.2011, 18:45
На 11/83.
А я даже не знаю, что за переферийный процессор на 11/83.:v2_blush:

form
29.11.2011, 18:47
А я даже не знаю, что за переферийный процессор на 11/83.:v2_blush:

Там его нет в виду того, что это полноценная таки машина :)
Суть в другом. Можно сделать тест который просто тестирует то, где запущен. Запустил командой RUN - тестирует ЦП. Загрузил командой PRUN на УКНЦ - тестирует ПП. Сделать универсальный RELо-SAV нетрудно. Различить из программы где она запущена тоже :)

Titus
29.11.2011, 18:50
Там его нет в виду того, что это полноценная таки машина :)
Суть в другом. Можно сделать тест который просто тестирует то, где запущен. Запустил командой RUN - тестирует ЦП. Загрузил командой PRUN на УКНЦ - тестирует ПП. Сделать универсальный RELо-SAV нетрудно. Различить из программы где она запущена тоже :)
Только вывод информации сделать сложно. Как я выведу на терминал системными методами, если запустился в ПП?

form
29.11.2011, 18:52
Только вывод информации сделать сложно. Как я выведу на терминал системными методами, если запустился в ПП?

Там есть для этого EMTы.

---------- Post added at 21:52 ---------- Previous post was at 21:51 ----------

Сейчас набросаю краткий пример универсальной хрени.

Titus
29.11.2011, 18:54
Там есть для этого EMTы.

---------- Post added at 21:52 ---------- Previous post was at 21:51 ----------

Сейчас набросаю краткий пример универсальной хрени.
Нет, лучше, если тест доделаю, сами его встраивайте в свои универсальности)

Patron
29.11.2011, 19:27
В приложении - тест скорости вывода символов в порт терминала - CPS.SAV (http://zx.pk.ru/attachment.php?attachmentid=31263) с исходником.

Есть два варианта теста:

1. CPS.SAV - без ожидания прерывания по WAIT.
2. CPS2.SAV - с ожиданием прерывания по WAIT.

Интересно, какие результаты получаются на реальном оборудовании..