Вход

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



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

form
30.12.2012, 17:32
$RU CMD3

А кстати зачем тебе рубль не в батче и не в инде? :)

Patron
30.12.2012, 18:01
зачем рубльПонятия не имею. Хуже от этого точно быть не может.

form
30.12.2012, 18:02
Понятия не имею. Хуже от этого точно быть не может.

Хуже не будет - просто игнорится для совместимости.
В IND рубль явно обозначает DCL команду (то есть по сути тоже игнорируется). В BATCH это часть синтакса. В обычных командах "$@" гарантирует запуск простого командного файла (независимо от SET KMON [NO]IND).

hobot
30.12.2012, 21:16
IND
Вот мне что изучить бы давно пора ))) Мечта - но есть хороший пример - раскопал школьный диск, там длиннющий исполняемый файл по сути программа целая - обучалка, можно просто свои (нужные) параметры подставлять. Буду осваивать !



Вариант с .GTLIN ( файл CMD3.MAC )
Супер! Спасибо!

Я всегда ворчал на тему, что нет тупых учеников, есть не очень правильные учебники !!! Вот зачем мне знать кучу всяких вещей, мне нужно быстро на практике
применить ту или иную функцию, офигенно было бы такой справочник по МАКРО-11
иметь (штука в том что стандартное описание SYSMAC.SML - соглашусь сверх нужная книга, но некоторые примеры написаны явно для программистов уже понимающих всё, а для любителей оставляющая ещё больше вопросов чем было!)
Я помню справочник офи... очень хороший по скриптам для Винды ( там всё было как для меня http://savepic.ru/3703500.jpg )))

типа - заводим пользователя с правами администратора > бац скрипт готовый

функция РАНДОМ - бац скрипт готовый )))
командная строка - бац скрипт !!! )))
готовая игра ГАД - бац скрипт )))


Это я так - спасибо за приведённые примеры и готовые программы, я очень много полезного узнал ! Нашёл на одной из дискет такое вот творение:


компьютер греется 3 раза в своей жизни:
1-й - когда его забыли выключить на ночь;
2-й - когда на нем играют в DOOM-2;
3-й и последний - когда он слышит слово 'системный программист'.


Правильно ли я понимаю, что вызовом .CHAIN нет шансов передать управление COM файлы или проскочит ? (я конечно попробую, но спросить то можно да?)

form
30.12.2012, 21:25
Вот мне что изучить бы давно пора )))

Мне было проще, я RT-11 осваивал после RSX, а там в принципе IND без вариантов :)
Ну если не считать BATCH в M+.
RTшный вариант урезан в силу функционала системы, но основное примерно одинаково.
Есть очень хорошее описание (настоящий PDF, не скан) :)


применить ту или иную функцию, офигенно было бы такой справочник по МАКРО-11

До сих пор считаю, что лучше М. Сингера для изучения MACRO-11 c нуля не придумали. Книга есть на сайте у Арсения. Да и в описании макробиблиотеки как DECовском так и русских есть много примеров.
Я собственно изучал функционал по РАФОСовской еще доке, а RT-11 по сути стал читать уже в 2000ых годах :)


Правильно ли я понимаю, что вызовом .CHAIN нет шансов передать управление COM файлы или проскочит ? (я конечно попробую, но спросить то можно да?)

.CHAIN передает управление программе. COM файл программой не является. Управление в ком файл нужно передавать как описано выше, используя в качестве команды


$@file

или


IND file

в зависимости от типа COM файла.

hobot
31.12.2012, 15:21
form, спасибо за новодочку про книгу, кажется я её как минимум листал когда-то ))) Я вот к сожалению не помню автора - может это она и окажется - у меня в школе была книга (случайно взял в читальном зале),
МАКРОАСССЕМБЛЕР ДЛЯ PDP-11, с такой бело-голубенькой или бело-синей обложкой, если это она, то да - это великий учебник, пытался найти бумажный вариант недавно, в Зеленограде их уже нет, вся литература времён УК-НЦ - ДВК по сопровождению и языкам списана в макулатуру.

Вот зато откопал (и чуть дописал) шедевр (не мой, но автор сам "если захочет" свой исходник узнает, по кодовой фразе !). Свою версию UCL я уже тут выкладывал и в том числе на дискетах ))) А это почти как ELITE-UCL выдает фразы из списка.

Код :


.Title UCL
.ENABL LC, MCL

Num: .WORD 0
St: MOV Num, R1
MOV TX(R1), R0
EMT 351
ADD #2, Num
CMP Num, #12.
BLT 1$
CLR NUM
1$: NOP
.LOOKU #AR, #1, #DBLK
.WRITW #AR, #1, #NUM, #256., #1
.CLOSE #1
CLR R0
EMT 350

TX: .WORD S1,S2,S3,S4,S5,S6
DBLK: .RAD50 "SY UCL SAV"
AR: .BLKW 5
S1: .ASCIZ <16>\oPERATOR INWALID!\<17>
S2: .ASCIZ <16>\pREKRATITE LOMATX KLAWIATURU\<17>
S3: .ASCIZ <16>\bORMAN BYL LYS, TOLST I ZLOPAMQTEN.\<17>
S4: .ASCIZ <16>\uHODIM OGORODAMI...\<17>
S5: .ASCIZ <16>\nU-nU!\<17>
S6: .ASCIZ <16>\sEKRETAR[I BYLI WTOROJ STRASTX@ bORMANA.\<17>
.EVEN
.END St


http://savepic.ru/3694113.png

Ещё раз всех с наступающими праздниками!

:redface:

hobot
07.01.2013, 01:53
http://i.piccy_.info/i7/09d724e266a99bb824761c68f46c0a6e/4-55-421/14213085/ERR.png

Удачный скрин, в верхней части экрана видно тот самый участок программы
на одну из строчек получается "нечётность" ? Подозревая так случилось из за нечетного количества констант по метке OK - в набиваемом исходнике ребята забили на это, вот как бы красиво поправить?



OK: .ASCIZ <1><2><3><4><5>
OUTPOS: .WORD WYDEL,-1,POSLAT,-1,ZAPUSK,-1
WYDEL: .BYTE ,1,32,0,-1
POSLAT: .BYTE ,20,32,
STAPP: .WORD ,PROG,SIZE
ZAPUSK: .BYTE ,30,32,
STAPP1: 0


Или код ошибки B что то другое означает?
В любом случае набивать буду дальше и разбираться буду позже, но быстрая подсказка просто сэкономила бы время очевидно ! )


:redface:

Alex_K
07.01.2013, 02:01
OK: .ASCIZ <1><2><3><4><5>
OUTPOS: .WORD WYDEL,-1,POSLAT,-1,ZAPUSK,-1
WYDEL: .BYTE ,1,32,0,-1
POSLAT: .BYTE ,20,32,
.EVEN
STAPP: .WORD ,PROG,SIZE
ZAPUSK: .BYTE ,30,32,
STAPP1: 0

palsw
08.01.2013, 18:15
Уже как-то просил, но все забили...
Запустите кто-нибудь на чем есть: ДВК, УКНЦ...
Интересно все-таки сравнить :)

Запустил на УКНЦ

http://i.piccy_.info/i7/4f05d19e4a17ef41e94beedf314e3e7d/4-55-470/27471959/20130108_162520_687_240.jpg (http://piccy_.info/view3/3951416/9c6027884b2367d210fa8f1e38c80a44/)http://i.piccy_.info/a3/2013-01-08-14-15/i7-3951416/240x180-r/i.gif (http://i.piccy_.info/a3c/2013-01-08-14-15/i7-3951416/240x180-r)

Titus
07.02.2013, 01:44
Я понял, почему у УКНЦ байтовая запись в память работает только в цикле RMW (чтение-модификация-запись)!
Наверное это потому, что у ВМ2 вообще нет ни байтового чтения из памяти, ни байтовой записи (доки специально в этом смысле не смотрел, но чисто теоретически если подумать).
Поэтому при чтения байта все равно читается слово, но берется именно нужный байт.
А вот при записи байта, сперва читается слово, потом модифицируется нужный байт, и слово записывается заново. Тогда все логически сходится.

Отсюда мораль: по возможности не пользоваться байтовой записью в память, если не хочется лишних тормозов.

Alex_K
07.02.2013, 02:11
Я понял, почему у УКНЦ байтовая запись в память работает только в цикле RMW (чтение-модификация-запись)!
Наверное это потому, что у ВМ2 вообще нет ни байтового чтения из памяти, ни байтовой записи (доки специально в этом смысле не смотрел, но чисто теоретически если подумать).
Поэтому при чтения байта все равно читается слово, но берется именно нужный байт.
А вот при записи байта, сперва читается слово, потом модифицируется нужный байт, и слово записывается заново. Тогда все логически сходится.

Отсюда мораль: по возможности не пользоваться байтовой записью в память, если не хочется лишних тормозов.
На шине Q-BUS (наша МПИ) байтового чтения не существует, а вот байтовая запись есть. При байтовом чтении процессор всегда читает слово по заданному адресу, при этом адрес всегда выставляется в таком виде, как задан в команде, т.е. младший бит не очищается. Затем в зависимости от младшего бита процессор из считанного слова берет нужный байт. При байтовой записи процессор 1801ВМ2 в неиспользуемом байте выставляет ноль, электрически единицы, с учетом инверсной шины. А вот почему при байтовой записи 1801ВМ2 читает слово по этому адресу, это действительно большой вопрос, и в официальной документации это не отражено.

Patron
07.02.2013, 02:41
при байтовой записи 1801ВМ2 читает слово по этому адресуТ.е. команды



Mov R1, (R0)
MovB R1, (R0)

выполняются на 1801ВМ2 за разное время ?

У 1801ВМ1 только команда MovB использует цикл DATOB ( Запись Байта ) - все остальные команды записи байтов у процессора 1801ВМ1 используют DATIO ( Чтение-Модификация-Запись ).

Alex_K
07.02.2013, 02:46
Т.е. команды



Mov R1, (R0)
MovB R1, (R0)

выполняются на 1801ВМ2 за разное время ?

У 1801ВМ1 только команда MovB использует цикл DATOB ( Запись Байта ) - все остальные команды записи байтов у процессора 1801ВМ1 используют DATIO ( Чтение-Модификация-Запись ).
Да, за разное. Тут по этому поводу целое исследование как-то было. При команде MOV по адресу (R0) сразу произойдет запись, а вот при MOVB по адресу (R0) сначала прочитается слово, а потом запишется нужный байт. Аналогичная ситуация и с CLR/CLRB и MFPS.

Patron
07.02.2013, 02:55
Да, за разное. Тут по этому поводу целое исследование как-то было. При команде MOV по адресу (R0) сразу произойдет запись, а вот при MOVB по адресу (R0) сначала прочитается слово, а потом запишется нужный байт. Аналогичная ситуация и с CLR/CLRB и MFPS.Странно. Авторы 1801ВМ2 (если не ошибаюсь) утверждали, что расширили применение цикла DATO на команду CLR и DATOB на CLRB.

У 1801ВМ1 MOV и MOVB выполняют DATO и DATOB, а CLR и CLRB - DATIO.

Получается, что MOV у ВМ2 выполняется быстрее чем CLR, а MOVB - за то же время, что и CLRB, и INCB.

И это в обычной памяти ЦП ?
Может ещё разок проверить..

Titus
07.02.2013, 03:05
Может ещё разок проверить..
Все уже давно замерено, и было тут опубликовано:

Сравнение времени выполнения байтовых и словных команд на CPU и PPU:

Мнемоника-1 CPU PPU Циклы Мнемоника-2 CPU PPU Циклы
------------------------------------------------------------------------------

MOV Rn,(Rn) 33.13 36 W MOVB Rn,(Rn) 40.62 52 RMW

CMP Rn,(Rn) 27.90 40 R CMPB Rn,(Rn) 27.90 40 R
BIT Rn,(Rn) 27.90 40 R BITB Rn,(Rn) 27.90 40 R
BIC Rn,(Rn) 40.62 56 RMW BICB Rn,(Rn) 40.62 52 RMW
BIS Rn,(Rn) 40.62 56 RMW BISB Rn,(Rn) 40.62 52 RMW

XOR Rn,(Rn) 40.62 56 RMW
ADD Rn,(Rn) 40.62 56 RMW
SUB Rn,(Rn) 40.62 56 RMW

CLR (Rn) 33.13 36 W CLRB (Rn) 40.62 52 RMW
COM (Rn) 40.62 56 RMW COMB (Rn) 40.62 52 RMW
INC (Rn) 40.62 56 RMW INCB (Rn) 40.62 52 RMW
DEC (Rn) 40.62 56 RMW DECB (Rn) 40.62 52 RMW
NEG (Rn) 40.62 56 RMW NEGB (Rn) 40.62 52 RMW
TST (Rn) 27.90 40 R TSTB (Rn) 27.90 40 R
ROL (Rn) 40.62 56 RMW ROLB (Rn) 40.62 52 RMW
ROR (Rn) 40.62 56 RMW RORB (Rn) 40.62 52 RMW
ASR (Rn) 40.62 56 RMW ASRB (Rn) 40.62 52 RMW
ASL (Rn) 40.62 56 RMW ASLB (Rn) 40.62 52 RMW
ADC (Rn) 40.62 56 RMW ADCB (Rn) 40.62 52 RMW

MFPS (Rn) 40.62 52 RMW
SWAB (Rn) 40.62 56 RMW
SXT (Rn) 33.13 36 W

Alex_K
07.02.2013, 03:07
Странно. Авторы 1801ВМ2 (если не ошибаюсь) утверждали, что расширили применение цикла DATO на команду CLR и DATOB на CLRB.
Получилось только на CLR.

Получается, что MOV у ВМ2 выполняется быстрее чем CLR, а MOVB - за то же время, что и CLRB, и INCB.
А почему MOV быстрее CLR, вроде используется один цикл DATO.

И это в обычной памяти ЦП ?
Может ещё разок проверить..
А при чем тут память? Дело в процессоре. Да и чего перепроверять? Titus доказал своими тестами по измерению числа тактов команд. Я проверял на регистрах внешних устройств, которые реагируют на чтение. Если появилась готовность в регистре клавиатуры 177560, то по команде CLR @#177562 или MOV R0,@#177562 ничего не происходит, а по командам CLRB @#177562 или MOVB R0,@#177562 готовность сбрасывается. И это с учетом того, что БМК 1801ВП1-120 сигнал WTBT не обрабатывает (он туда не заводится). Аналогичная ситуация и с 1801ВП1-065 и с регистрами на шине ПП. Так что диагноз ясен.

form
07.02.2013, 13:42
у ВМ2 вообще нет ни байтового чтения из памяти

Точнее его вообще нигде нет - всегда читается слово.

---------- Post added at 16:42 ---------- Previous post was at 16:41 ----------

Что кстати следует из названия сигнала WTBT :)

Patron
08.02.2013, 15:22
нашел только ассемблер, а нужен ещё линкер...Проще всего компилить ассемблерные файлы в "эмуляторе ДВК" ( компоновка, линковка и запуск на выполнение осуществляется в RT-11 одной командой EX ).

Эмулятор ДВК не блокирует DSK-образ, поэтому можно одновременно редактировать исходник в любом редакоре Windows и тут же компилировать его в эмуляторе. Кроме того - эмулятор ДВК можно настроить на любую скорость процессора - тогда компиляция под эмулятором происходит почти мгновенно.

form
08.02.2013, 15:24
Проще всего компилить ассемблерные файлы в "эмуляторе ДВК" ( компоновка, линковка и запуск на выполнение осуществляется в RT-11 одной командой EX ).

Эмулятор ДВК не блокирует DSK-образ, поэтому можно одновременно редактировать исходник в любом редакоре Windows и тут же компилировать его в эмуляторе. Кроме того - эмулятор ДВК можно настроить на любую скорость процессора - тогда компиляция под эмулятором происходит почти мгновенно.

Поредактировать я могу и у себя на PDP-11 (причем редактор будет на порядок удобнее любого виндового) и также запустить командой EX. Просто так было бы быстрее, а код ни на байт не длиннее :)

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

Ну или на слово длиннее если именно в начале помещать.

Patron
08.02.2013, 15:32
Поредактировать я могу и у себя на PDP-11Вопрос был - как проще всего скомпилить ассемблерный исходник для RT-11 под Windows 7 х64.

form
08.02.2013, 15:34
Вопрос был - как проще всего скомпилить ассемблерный исходник под Windows 7 х64.

sorry, темы перепутал :)

---------- Post added at 18:34 ---------- Previous post was at 18:33 ----------

Кстати о виндовсе, есть такой редактор EDT-Plus - почти повторяет функционал EDT/KED/K52. Жаль только что как обычно, NumLock продолжает выполнять свою функцию параллельно GOLD и в отличие от EDT, нумерация строк меняется от вставки/удаления строк...

hobot
08.02.2013, 22:12
Эмулятор + блокнот ? )

Titus
10.02.2013, 02:11
Пара вопросиков по регистрам спрайтового механизма УКНЦ:

В инструкции написано так:


В фазе "модификация" производится аппаратная замена содержимого триад, соответствующих разрядам регистра октета, содержащих лог.1. Информация каждой триады заменяется значением регистра кода цвета точки. Формат регистра кода цвета точки приведен на рис.21.

В фазе "запись" производится загрузка планов ВОЗУ модифицированными данным значением регистра кода цвета фона. Таким образом, при использовании процедуры чтение-модификация-запись по адресу регистра октета точек проводится наложение "нового" изображение по "старому" фону. Механизм уменьшает программную обработку "старого" содержимого экранного ОЗУ до минимума. Если не требуется сохранить фон ("старое" изображение), то проводится процедура записи значения 377 по адресу регистра октета точек, предварительно регистр кода цвета фона загружается требуемым значением.

Вопрос 1:
Что значит в фазе "модификация"? Есть циклы чтения-модификация-запись. А наложение нового изображение на старое происходит именно в фазе "запись".

Вопрос 2:
Если произвести запись 377 по адресу регистра октета точек, как рекомендуется выше, то записан в планы будет как раз не регистр цвета фона, а регистр цвета точек.

Alex_K
10.02.2013, 11:11
Вопрос 1:
Что значит в фазе "модификация"? Есть циклы чтения-модификация-запись. А наложение нового изображение на старое происходит именно в фазе "запись".
Это да. Сама фаза "модификация" это чисто внутрипроцессорное явление, не имеющее никакого отношения к регистрам спрайтового механизма. Выше есть два абзаца, которые точно отражают суть регистра октета точек: "Каждому разряду этого регистра, содержащему лог.1, можно поставить в соответствие код цвета точки, а содержащему лог. 0 - код цвета фона записанных в соответствующих регистрах." и "В фазе "чтение" из регистра считывается лог.0, а регистр кода цвета фона загружается по адресу регистра адреса планов содержимым трех планов ОЗУ экранной памяти.". А под модификацией здесь понимают употребление команд типа MOVB, которая как раз за счет цикла чтения загрузит регистры кода цвета фона старым изображением, а уже в фазе "запись" произойдет накладка на старый фон.
Вопрос 2:

Если произвести запись 377 по адресу регистра октета точек, как рекомендуется выше, то записан в планы будет как раз не регистр цвета фона, а регистр цвета точек.
Да, при записи 0377 будут записаны все 1, а значит будут использован только регистр цвета точки.

Titus
10.02.2013, 13:02
Да, при записи 0377 будут записаны все 1, а значит будут использован только регистр цвета точки.
Ну вот я и говорю, значит в описании ошибка. Надо было написать 0, а не 0377.

Ал-р
12.02.2013, 09:11
На всякий случай - тупой дизассемблер: никаких анализов не делает, структуру
файла не проверяет, тупо дизассемблирует все подряд, считая, что есть только код, код, код и ничего больше :)
Иногда может пригодится для разборок с драйверами или еще чем. К слову, именно этим дизассемблером дизассемблировал MACRO.SAV и за пару минут нашел где ему не нравятся русские буквы :)
В архиве EXEшники для Win32 и OpenVMS/AXP.
Синтакс тупой: disasm [-b базовыйадрес] файл > листинг
для XP в строке Выполнить - что не так? (файл test.txt не появляется)
G:\DIZ\disasm-win32.exe 100000 G:\DIZ\test.rom > G:\DIZ\test.txt

NovaStorm
12.02.2013, 11:04
Пробую скомпилить hello world c http://ru.wikipedia.org/wiki/MACRO-11
Скопировал его в sysimage.dsk, после "macro hello" выдаёт


EQ .END HELLO
?MACRO-E-Errors detected: 1
DK:HELLO=DK:HELLO

Но после линковщика всё прекрасно выполняется. Что это за ошибка, и что такое DK:?
Линковка идёт с кодом для ".MCALL .TTYOUT,.EXIT"? Из SYSMAC.SML?

Patron
12.02.2013, 15:21
Что это за ошибка?Последняя строка кода должна завершаться кодом конца строки. Чтобы никогда не ошибаться с этим - лучше всегда после .END вставлять строку с символом ';' в первой позиции:


.END HELLO
;



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

Посмотреть назначения имён устройств можно командой SH.

Titus
12.02.2013, 15:46
Но после линковщика всё прекрасно выполняется.
Что, нашли линковщик под PC?

form
12.02.2013, 16:20
для XP в строке Выполнить - что не так? (файл test.txt не появляется)
G:\DIZ\disasm-win32.exe 100000 G:\DIZ\test.rom > G:\DIZ\test.txt

Значит прав записи нет в этот каталог или еще что. ">" действует независимо от программы которая запускается. Стоит также проверить без всякого ">" что прога вообще работает - здесь где-то одно время выложена была битая программа.

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


Что, нашли линковщик под PC?

Вообще есть исходники родного LINK, можно портировать :)

hobot
12.02.2013, 16:25
здесь где-то одно время выложена была битая программа.
anasana один раз твой disasm-win32 выкладывал, я скорее всего из его поста себе сливал, но ни разу не запускал, у меня в хламнике тут два архива нашлось.

Patron
12.02.2013, 16:29
Вообще есть исходники родного LINK, можно портироватьЕщё круче - вернуть в HD возможность монтирования каталогов Windows как образов DSK, сделать специальный вариант эмулятора, передающий командную строку запуска эмулятора в запускаемую из STARTS.COM программу и получить MACRO.exe, LINK.exe, BINCOM.exe и всё остальное "богатство" RT-11 работающим напрямую с каталогами Windows.

NovaStorm
12.02.2013, 16:29
Что, нашли линковщик под PC?
Не, под эмулем собирал. Поразительно долго компилируется...

form
12.02.2013, 16:30
Ещё круче - вернуть в HD возможность монтирования каталогов Windows как образов DSK, сделать специальный вариант эмулятора, передающий командную строку запуска эмулятора в запускаемую из STARTS.COM программу и получить MACRO.exe, LINK.exe, BINCOM.exe и всё остальное "богатство" RT-11 работающим напрямую с каталогами Windows.

Тогда проще что-нибудь вроде утилиты sav2exe которая бы добавляла к SAV файлу некий runtime эмулятора :)

hobot
12.02.2013, 16:32
Поразительно долго компилируется...
А скорость эмуляции выкрутить ? Какой-же там исходник (по размерам) или что-нибудь на Си?

form
12.02.2013, 16:32
anasana один раз твой disasm-win32 выкладывал, я скорее всего из его поста себе сливал, но ни разу не запускал, у меня в хламнике тут два архива нашлось.

Пересобрал из последних исходников на всякий случай.
Вообще тот, что под RT-11 более функционален.

Titus
12.02.2013, 16:34
Не, под эмулем собирал. Поразительно долго компилируется...
Долго. Именно это меня и смущает, когда постоянно после каждой правки приходится подолгу компилить.
А под ПЦ - раз, и мгновенно.
А еще мне не нравится, что метки имеют ограничение по длине 6 символов. Это ОЧЕНЬ мало.

---------- Post added at 16:34 ---------- Previous post was at 16:33 ----------


Ещё круче - вернуть в HD возможность монтирования каталогов Windows как образов DSK, сделать специальный вариант эмулятора, передающий командную строку запуска эмулятора в запускаемую из STARTS.COM программу и получить MACRO.exe, LINK.exe, BINCOM.exe и всё остальное "богатство" RT-11 работающим напрямую с каталогами Windows.
Не круче, т.к. компилить будет все равно эмулятор ДВК. Он не такой быстрый, как ПЦ - это раз, а во вторых мы все равно пишем под УКНЦ, и это все равно, что ехать в Киев через Магадан.

form
12.02.2013, 16:36
А еще мне не нравится, что метки имеют ограничение по длине 6 символов. Это ОЧЕНЬ мало.

В C тоже многое неудобно и убого, но таков синтакс языка. И вообще развивается фантазия - как вложить в название метки ее функционал :)

Опять же никто не запрещает писать длинные метки. Главное следить за однозначностью... В RT-11 вон в макрокомандах приняты длиннющие имена тогда как ограничение то же - 6 символов, включая ".".

form
12.02.2013, 16:38
Не круче, т.к. компилить будет все равно эмулятор ДВК.

Ась?
Кто сказал, что для этого надо использовать какой-то медленный эмулятор, а не быстрый runtime?

---------- Post added at 19:38 ---------- Previous post was at 19:37 ----------


Можно ссылку?

В RT-11 V5.7 source kit есть. Сейчас выдерну, выложу.

Titus
12.02.2013, 16:43
В C тоже многое неудобно и убого, но таков синтакс языка. И вообще развивается фантазия - как вложить в название метки ее функционал :)

Опять же никто не запрещает писать длинные метки. Главное следить за однозначностью... В RT-11 вон в макрокомандах приняты длиннющие имена тогда как ограничение то же - 6 символов, включая ".".
Я сравниваю не с Си, а с другими ассемблерами, где длина метки не ограничена таким огрызком.
Разумеется, что я их делаю длиннее, но слежу, чтобы не пересекались. Но все равно, это неудобно.

---------- Post added at 16:43 ---------- Previous post was at 16:42 ----------


Ась?
Кто сказал, что для этого надо использовать какой-то медленный эмулятор, а не быстрый runtime?
А кто такой быстрый рунтайм?

form
12.02.2013, 16:43
Я сравниваю не с Си, а с другими ассемблерами, где длина метки не ограничена таким огрызком.
Разумеется, что я их делаю длиннее, но слежу, чтобы не пересекались. Но все равно, это неудобно.

Да причем тут C?
Речь о том, что 6 символов - правила языка.
Ест желание - можно сделать свой вариант, но он будет несовместим с остальными языками тогда.

Titus
12.02.2013, 16:45
Если будет линкер под ПЦ, то можно сразу батничком скомпилить программу одним кликом.
Интересно, многое пришлось бы переписать для увеличения длины метки до 100 символов?

---------- Post added at 16:45 ---------- Previous post was at 16:44 ----------


Да причем тут C?
Речь о том, что 6 символов - правила языка.
Ест желание - можно сделать свой вариант, но он будет несовместим с остальными языками тогда.
Для меня МАКРО-11 - это не язык, а конкретный ассемблер.
А язык - это именно Ассемблер, и в нем длина метки не регламентирована.

form
12.02.2013, 16:45
А кто такой быстрый рунтайм?

Берется и пишется.
Причем он будет на порядок проще чем обычный эмулятор так как не требуется эмулировать например прерывания, железо итд.

form
12.02.2013, 16:48
Для меня МАКРО-11 - это не язык, а конкретный ассемблер. А язык - это именно Ассемблер, и в нем длина метки не регламентирована.

Ассемблер - это не язык, а семейство языков. То есть слово "ассемблер" ничем не отличается от слова "язык". А MACRO-11 - именно конкретный язык и длина метки в нем регламентирована.

---------- Post added at 19:48 ---------- Previous post was at 19:46 ----------


В том асме что я выкладывал можно установить длину до 64 символов

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

Titus
12.02.2013, 16:48
В том асме что я выкладывал можно установить длину до 64 символов
И линкер это поймет?

hobot
12.02.2013, 16:48
Берется и пишется.
а готовый под ДОС - чисто для компиляции не пойдёт ? Он ведь очень шустро со скоростью машинки на которой запущен ДОС буквально работает ?

Patron
12.02.2013, 16:48
Тогда проще что-нибудь вроде утилиты sav2exe которая бы добавляла к SAV файлу некий runtime эмулятораТочно!

Как раз на такой случай я уже написал утилиту dsk2exe, которая объединяла exe-файлы Windows с образами DSK, сохраняя у итогового файла и нормальный формат DSK ( точнее - формат RTD, т.к. к DSK добавлялся RTD-заголовок с кодами EXE-заголовка ) и нормальный формат EXE. В результате - эмулятор мог после запуска подключать сам себя в качестве системного образа и загружать оттуда RT-11.

Не удалось только встроить в EXE-файл нормальную внутреннюю файловую систему Windows на манер файлов DOC и XLS ( там, если не ошибаюсь - FAT12 ) с возможностью записи.

Без возможности записи в файлы конфигурации модульный API нормально работать не будет, поэтому ужать весь комплект модульного API до одного EXE-файла не получится, а если создавать внешние файлы конфигурации при кадом запуcке каждого порождённого EXE-файла - получится совершенно бессмысленная каша.

Во почему модульный API для такой задумки не годится и нужно делать специальную версию эмулятора на сильно изменённом движке.

form
12.02.2013, 16:50
И линкер это поймет?

Поймет если при этом метки внутренне кодируются в 6-символьные.
К примеру в какие-нибудь "LXXXXX".

Patron
12.02.2013, 16:51
Не круче, т.к. компилить будет все равно эмулятор ДВК. Он не такой быстрый, как ПЦЕсли установить максимальную скорость - компиляция любого исходника занимает около секунды.

И это с "академическим" эмулятором процессора.

Если написать быстрый эмулятор - скорость увеличится ещё примерно в 100 раз.

Patron
12.02.2013, 16:55
Вот пример обычного кода на MACRO11:


B.SkpChSum:

Call B.ChIn
Call B.ChIn ; CheckSumm

RtS PC ;

...............

B.GetRptBlock:

Call B.ChIn ;
Mov R5, R0 ; R0 == RPT Count
Call B.ChIn ; R5 == Byte to repeat.
1$:
MovB R5, (R2)+
DecB R0
BNE 1$

Чем длина меток не устраивает ?

Titus
12.02.2013, 16:58
Если установить максимальную скорость - компиляция любого исходника занимает около секунды.

И это с "академическим" эмулятором процессора.

Если написать быстрый эмулятор - скорость увеличится ещё примерно в 100 раз.

А вы шутник)
Сейчас компилирование моих не очень больших исходников занимает всего 1-2 минуты. Усредним это до 100 секунд. Это на УКНЦ с быстродействием 1мипс (условно говоря). Компиляця за секунду говорит о скорости процессора в 100мипсов. А за 1/100 секунды (с неакадемическим процессором) - 100 * 100 = 10000мипс. 10 гигамипсов PDP11 на моем Core2Duo с 1.5гигамипсами? Вы круты)

---------- Post added at 16:58 ---------- Previous post was at 16:55 ----------


Чем длина меток не устраивает ?
Тем, что первые 6 символов не должны повторяться)

NovaStorm
12.02.2013, 17:00
А скорость эмуляции выкрутить ?
В UKNCBTL не нашёл такого.

Какой-же там исходник (по размерам) или что-нибудь на Си?
Hello world же на асме под RT-11 =)

Titus
12.02.2013, 17:01
Ой, хотел написать не гигамимпсы, а киломипсы)

---------- Post added at 17:01 ---------- Previous post was at 17:01 ----------


В UKNCBTL не нашёл такого.
Отключи звук, будет на максимуме.

form
12.02.2013, 17:03
Исходники LINK от RT-11 V5.7...

NovaStorm
12.02.2013, 17:04
Titus, я думаю, может стоит вообще на гнутом as писать? Там-то проблем с метками не будет. Да и binutils с gcc тоже аргумент...

Patron
12.02.2013, 17:05
Вы круты)А то.

Только речь шла не об эмуляторе ВМ2, а об эмуляторе ВМ1.

Быстрый эмулятор ВМ1 должен тратить порядка 20 команд хост-процессора на эмуляцию одной команды ВМ1. Учитывая, что современные процессоры выполняют больше одной команды за такт - экстремально быстрая эмуляция PDP-11 вполне возможна.

hobot
12.02.2013, 17:05
Сейчас компилирование моих не очень больших исходников занимает всего 1-2 минуты
Откуда 1-2 минуты? В каком эмуляторе ,
только что для пробы выполнил команду ex tsspd - тот который 90 блоков почти
с момента ввода команды и вывода первого окна теста прошло 20 секунд.
Загружался с харда в UKNCBTL и конечно вырубал звук во время выполнения,
чтобы эмулятор разогнать !!! )

Titus
12.02.2013, 17:05
Исходники LINK от RT-11 V5.7...
Ой, так он написан на асме) Я думал, сишный есть)

hobot
12.02.2013, 17:06
Исходники LINK от RT-11 V5.7...
А почему бы весь kit не выложить например )))

form
12.02.2013, 17:06
Отключи звук, будет на максимуме.

Можно еще проще - компилить-собирать в нормальном эмуляторе, а уже потом переносить в UKNCBTL :)

Titus
12.02.2013, 17:07
Откуда 1-2 минуты? В каком эмуляторе ,
только что для пробы выполнил команду ex tsspd - тот который 90 блоков почти
с момента ввода команды и вывода первого окна теста прошло 20 секунд.
Загружался с харда в UKNCBTL и конечно вырубал звук во время выполнения,
чтобы эмулятор разогнать !!! )
В UKNCBTL с отключенным звуком.
Мои программы, типа теста таймера и т.д. компилятся в нем долго. 1-2 минуты вполне.

hobot
12.02.2013, 17:07
Ой, так он написан на асме) Я думал, сишный есть)
Ну вот ! ) Приехали )))

form
12.02.2013, 17:07
Titus, я думаю, может стоит вообще на гнутом as писать? Там-то проблем с метками не будет. Да и binutils с gcc тоже аргумент...

Только этот binutils не умеет собирать программы ни под одну из DECовских систем :)

Titus
12.02.2013, 17:08
Можно еще проще - компилить-собирать в нормальном эмуляторе, а уже потом переносить в UKNCBTL :)
Даешь архив с настроенным эмулятором ДВК, которому даешь образ диска .dsk с исходником, нажимаешь кнопочку, а он на выходе тебе на этом же диске дает скомпирированный файл и слинкованный!

hobot
12.02.2013, 17:08
Мои программы, типа теста таймера и т.д. компилятся в нем долго. 1-2 минуты вполне.
могут флопы тормозить работу - используй хард он шустрее, а с отключенным
звуком вообще летает !!!
Кто то кстати назвал эмулятор Patrona медленным, но там же так же регулировать
скорость эмуляции можно !!!

form
12.02.2013, 17:09
Ой, так он написан на асме) Я думал, сишный есть)

Гы :)
Я как-то портировал UNIXовую прогу "cal" из OpenBSD в RSX-11, писал на ассемблере. Результат весьма интересен и нагляден:

cal.c - 562 строки
CAL.MAC - 490 строк

писал не экономя место :)

hobot
12.02.2013, 17:11
которому даешь образ диска .dsk
монтируешь любой образ как DK
и выполняешь команду ex filename.mac на максимальной скорости эмуляции ! )
Какие проблемы то ? Уже всё есть - или я просто не понимаю что обсуждается и
каких скоростей хочется и вообще зачем ? )))

form
12.02.2013, 17:11
Даешь архив с настроенным эмулятором ДВК, которому даешь образ диска .dsk с исходником, нажимаешь кнопочку, а он на выходе тебе на этом же диске дает скомпирированный файл и слинкованный!

Я в E11 такие вещи делаю - его настроить на порядок проще :)
А чтобы сразу компилил не проблема - достаточно из стартового файла проверять например наличие DU3:BUILD.COM и запускать его если есть, а в нем как раз вписать команды для сборки :)

hobot
12.02.2013, 17:14
Даешь архив с настроенным эмулятором ДВК, которому даешь образ диска .dsk с исходником, нажимаешь кнопочку, а он на выходе тебе на этом же диске дает скомпирированный файл и слинкованный!

А если тебе же понадобится линковать с какими-то твоими же obj, так упростить
не выйдет, нужно иметь шанс для манёвра )

Patron
12.02.2013, 17:15
Даешь архив с настроенным эмулятором ДВК, которому даешь образ диска .dsk с исходником, нажимаешь кнопочку, а он на выходе тебе на этом же диске дает скомпирированный файл и слинкованный!Всё проще - можно подключить к эмулятору ДВК тот же самый образ DSK, что подключен и к эмулятору УКНЦ, а когда нужно скомпилировать исходник - просто переходить в окно уже запущенного эмулятора ДВК и вводить команду EX src, где src - имя MAC-файла.

Эмулятор ДВК не блокирует подключенные образы, поэтому на время запуска других эмуляторов - его можно не выгружать.

form
12.02.2013, 17:16
Кстати E11 кроме всего прочего позволяет копировать файлы из windows и наоборот прямо в RT-11 под ним :)

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


А если тебе же понадобится линковать с какими-то твоими же obj, так упростить
не выйдет, нужно иметь шанс для манёвра )

Как это не выйдет? Выйдет.
Помним - BUILD.COM в котором пишутся любые команды какие тебе хочется.

Titus
12.02.2013, 17:17
Всё проще - можно подключить к эмулятору ДВК тот же самый образ DSK, что подключен и к эмулятору УКНЦ, а когда нужно скомпилировать исходник - просто переходить в окно уже запущенного эмулятора ДВК и вводить команду EX src, где src - имя MAC-файла.

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

form
12.02.2013, 17:18
Я про то, что не хочу возиться с ини-файлами ваших эмуляторов, и нужна готовая сборка эмуля предназначенная без настройки для компиляции.

В E11 длина INI файла не больше 5-15 строчек - возиться с ним - секунд 40 :)

form
12.02.2013, 17:18
Если лень, могу сделать вариант описанный выше :)

hobot
12.02.2013, 17:18
Как это не выйдет? Выйдет.
Помним - BUILD.COM в котором пишутся любые команды какие тебе хочется.
Я это и имел в виду под манёвром ))) То есть команду всё равно так или иначе вводить с нужными параметрами под текущую задачу. )

form
12.02.2013, 17:19
Я это и имел в виду под манёвром ))) То есть команду всё равно так или иначе вводить с нужными параметрами под текущую задачу. )

Не нужно.
Ее нужно написать один раз и навсегда забыть про нее.

Titus
12.02.2013, 17:20
В E11 длина INI файла не больше 5-15 строчек - возиться с ним - секунд 40 :)
Возиться 40 секунд тому, кто в теме.
Я не в теме.
Мне нужен архив, в котором уже все готово. Запустил и все.

form
12.02.2013, 17:20
Возиться 40 секунд тому, кто в теме.
Я не в теме.
Мне нужен архив, в котором уже все готово. Запустил и все.

Уговорил, сейчас сделаю из своей живой системы :)

hobot
12.02.2013, 17:22
Я про то, что не хочу возиться с ини-файлами ваших эмуляторов
Так образы кнопочками монтируются, а команда из двух букв ты можешь в SL.SYS забить на Ctrl+X - к примеру написать так:
http://savepic.ru/4026601.png

Patron
12.02.2013, 17:23
Я про то, что не хочу возиться с ини-файлами ваших эмуляторов, и нужна готовая сборка эмуля предназначенная без настройки для компиляции.Возиться не придётся - всё делается парой кликов мыши.

1. Подключить целевой образ, кликнув на кнопке выбора образов.

2. Установить интересующую скорость процессора кнопкой CPU MIPS Лимит ( если установить максимальную скорость - эмулятор полностью загрузит одно ядро хост-машины, поэтому если держать эмулятор ДВК постоянно запущенным - лучше установить 5 МИПС ).

hobot
12.02.2013, 17:25
Не нужно.
Ее нужно написать один раз и навсегда забыть про нее.
До тех пор пока список obj не измениться - вот я о чём )

---------- Post added at 17:25 ---------- Previous post was at 17:25 ----------

Или там все *.obj слинкуются автоматом ? )

form
12.02.2013, 17:26
До тех пор пока список obj не измениться - вот я о чём )

Изменится список - отредактировать BUILD.COM и снова забыть.

---------- Post added at 20:26 ---------- Previous post was at 20:25 ----------


Или там все *.obj слинкуются автоматом ? )

Можно сделать и так, но правильнее .COM файл так как сборка может заключаться не просто в команде "LINK" а в команде с параметрами.

Titus
12.02.2013, 17:27
Кстати, как честно под системой загрузить какой-нибудь бинарный файл в свободную область памяти? Пример кода, пожалуйста.
Имя файла, например, BINARY.OVL

hobot
12.02.2013, 17:27
Возиться не придётся - всё делает парой кликов мыши.

1. Подключить целевой образ, кликнув на копке выбора образов.

2. Установить интересующую скорость процессора кнопкой CPU MIPS Лимит ( если установить максимальную скорость - эмулятор полностью загрузит одно ядро хост-машины, поэтому если держать эмулятор ДВК постоянно запущенным - лучше установить 5 МИПС ).

Мне кажется или Тitus развлекается - программист его уровня такую элементарную
схему работы (алгоритм действий) сам давно уже 200% понимает )

form
12.02.2013, 17:29
Кстати, как честно под системой загрузить какой-нибудь бинарный файл в свободную область памяти? Пример кода, пожалуйста.
Имя файла, например, BINARY.OVL

.SETTOP расширяет прогу и возвращает последний доступный адрес (он может оказаться меньше чем просилось; #-2 -- максимум памяти). Последний адрес программы лежит в @#50, к нему прибавить 2 и это будет начало свободной памяти.

hobot
12.02.2013, 17:29
BINARY.OVL
В случае игры про рыцаря писался свой загрузчик.

Titus
12.02.2013, 17:30
.SETTOP расширяет прогу и возвращает последний доступный адрес (он может оказаться меньше чем просилось; #-2 -- максимум памяти). Последний адрес программы лежит в @#50, к нему прибавить 2 и это будет начало свободной памяти.
А с примером кода?

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

form
12.02.2013, 17:32
А с примером кода?

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

Командой SH MEM.

Patron
12.02.2013, 17:36
Кстати, как честно под системой загрузить какой-нибудь бинарный файл в свободную область памяти?Так, чтобы он сидел там на манер драйвера независимо от того, выполняется какая-нибудь программа или нет ?

---------- Post added at 16:36 ---------- Previous post was at 16:32 ----------


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

form
12.02.2013, 17:36
А с примером кода?


MOV @#50,R1 ;R1 - ПОСЛЕДНИЙ АДРЕС ПРОГРАММЫ
.SETTOP #-2 ;R0 - ПОСЛЕДНИЙ ДОСТУПНЫЙ АДРЕС
SUB R1,R0 ;R0 - РАЗМЕР ДОСТУПНОЙ ПАМЯТИ
TST (R1)+ ;R1 - АДРЕС ДЛЯ ЗАГРУЗКИ

Titus
12.02.2013, 17:37
Так, чтобы он сидел там на манер драйвера независимо от того, выполняется какая-нибудь программа или нет ?
Нет, не резидентом, а только на время работы моей программы, которая его загрузила.
Т.е., допустим, программа моя это код. А на диске еще есть файл с данными, который моей программе тоже нужен. Я хочу его загрузить.

---------- Post added at 17:37 ---------- Previous post was at 17:36 ----------


Командой SH MEM.
Это из системы, а мне из кода надо.

form
12.02.2013, 17:37
Да, к примеру выше:


END:
.END


- неправильный способ определения адреса конца программы...

Patron
12.02.2013, 17:39
Нет, не резидентом, а только на время работы моей программы, которая его загрузила.
Т.е., допустим, программа моя это код. А на диске еще есть файл с данными, который моей программе тоже нужен. Я хочу его загрузить.Определяем верхний адрес свободной памяти при помощи команды .SETTOP и делаем там что хотим.

form
12.02.2013, 17:39
Это из системы, а мне из кода надо.

Аналогично - смотрим пример выше. То, что вернул .SETTOP #-2 в R0 и есть адрес начала системы (-2) (резидентной части). Если конкретно RMON, то его начало лежит в @#54.

Titus
12.02.2013, 17:40
Аналогично - смотрим пример выше. То, что вернул .SETTOP #-2 в R0 и есть адрес начала системы (-2) (резидентной части). Если конкретно RMON, то его начало лежит в @#54.
т.е. это все что в верху памяти.
А то, что внизу, сколько занимает? Это же тоже надо сохранить.

form
12.02.2013, 17:44
т.е. это все что в верху памяти.
А то, что внизу, сколько занимает? Это же тоже надо сохранить.

Внизу системное только вектора 0-466.

---------- Post added at 20:44 ---------- Previous post was at 20:42 ----------

Вопрос только в том что понимается под сохранением :)
Если сохранение системы, затирание, а потом восстановление, то это не так просто как кажется :)

Titus
12.02.2013, 17:46
Вопрос только в том что понимается под сохранением :)
Если сохранение системы, затирание, а потом восстановление, то это не так просто как кажется :)
Именно полное затирание.
Ведь в УКНЦ есть дополнительная память, память ПП, а так же память экрана, в которую кое-что можно на время сохранять.

form
12.02.2013, 17:48
Именно полное затирание.
Ведь в УКНЦ есть дополнительная память, память ПП, а так же память экрана, в которую кое-что можно на время сохранять.

Ну на УКНЦ - да, там проще.

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


Вектора занимают один блок.

В RT-11 меньше - RT-11 не поддерживает вектора больше 474.

Patron
12.02.2013, 17:51
Ну как, удалось найти в эмуляторе ДВК нужные кнопки ?
Какая скорость эмуляции в MIPS при выборе Max ?

form
12.02.2013, 18:33
Настроенный для сборки набор с примером.
Принцип: в каталог эмулятора кладутся все файлы, нужные для сборки и командный файл BUILD.COM который копирует файлы вовнутрь эмулятора, собирает все и копирует обратно SAV файл.

В примере используются файлы HELLO.MAC, HELTXT.MAC и собственно BUILD.COM. При загрузке система задает вопрос надо ли делать сборку и дает 5 секунд чтобы отказаться. По умолчанию (таймаут или нажать <Enter>) сборка будет выполнена.

Пример командного файла:
COP/NOLOG DO:(HELLO,HELTXT).MAC DK:
MAC HELLO
MAC HELTXT
LIN HELLO,HELTXT
COP/NOLOG HELLO.SAV DO:

Titus
12.02.2013, 19:58
Настроенный для сборки набор с примером.
Почему-то файл e11.exe остался висеть запущенным, даже после закрытия его окна, и занимал 99 процентов времени.

form
12.02.2013, 20:02
Почему-то файл e11.exe остался висеть запущенным, даже после закрытия его окна, и занимал 99 процентов времени.

Потому что такое закрытие не предусмотрено. Надо будет на досуге пнуть автора. Правильное закрытие - в консольном окне Shift+Enter, Q.

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

Кстати было бы полезно если бы его пинал не только я - пусть знает, что у нас PDP-11 жив! :)

Patron
12.02.2013, 20:04
А если скачать вот этот эмулятор ДВК: DVK_Emulator_17.01.13_15-39 (http://emulator.pdp-11.org.ru/DVK/distr/DVK_Emulator_17.01.13_15-39.rar), запустить файл pdp11.exe, нажать кнопку рядом с надписью СPU MIPS Лимит и выбрать Max, то какая получается скорость эмуляции в MIPS ( выводится в самой левой позиции строки статуса ) ?

Titus
12.02.2013, 20:06
Потому что такое закрытие не предусмотрено. Надо будет на досуге пнуть автора. Правильное закрытие - в консольном окне Shift+Enter, Q.
Да, так помогло.

form
12.02.2013, 20:06
А если скачать вот этот эмулятор ДВК: DVK_Emulator_17.01.13_15-39 (http://emulator.pdp-11.org.ru/DVK/distr/DVK_Emulator_17.01.13_15-39.rar), запустить файл pdp11.exe, нажать кнопку радом с надписью СPU MIPS Лимит и выбрать Max, то какая получается скорость эмуляции в MIPS ?

У меня плавает от 19 с чем-то до 20.700 с чем-то.

Titus
12.02.2013, 20:08
А если скачать вот этот эмулятор ДВК: DVK_Emulator_17.01.13_15-39 (http://emulator.pdp-11.org.ru/DVK/distr/DVK_Emulator_17.01.13_15-39.rar), запустить файл pdp11.exe, нажать кнопку рядом с надписью СPU MIPS Лимит и выбрать Max, то какая получается скорость эмуляции в MIPS ( выводится в самой левой позиции строки статуса ) ?
У меня 7мипс.

Patron
12.02.2013, 20:10
У меня 7мипс.form выиграл - у меня 14 MIPS.

form
12.02.2013, 20:11
form выиграл - у меня 14 MIPS.

Это я еще свой комп подарил. Сейчас на убогом нотебяке сижу :)

hobot
12.02.2013, 20:16
form выиграл - у меня 14 MIPS.
На ноуте у меня 9.304 - значения после запятой плавают, надо учитывать не слишком мощный мобильный вариант процессора ))) Но плавает ниже выше не поднимается.

---------- Post added at 20:16 ---------- Previous post was at 20:14 ----------


Потому что такое закрытие не предусмотрено. Надо будет на досуге пнуть автора. Правильное закрытие - в консольном окне Shift+Enter, Q.

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

Кстати было бы полезно если бы его пинал не только я - пусть знает, что у нас PDP-11 жив!
Надо его правильно пнуть - дать ему эмулятор БК с кучей игрушек графических,
ссылку на архив и объяснить, что он тормозит разработку новых игрушек !!! )
Он моментально мотивируется и всё всё доведёт в своей программе )

Titus
12.02.2013, 20:28
Настроенный для сборки набор с примером.
Чета не получилось скомпилить мой тест таймера.
Выдал кучу ошибок, которые даже остановить не знаю как.
Причем, даже попробовал скопировать на его диск те версии MACRO и LINK, которые у меня на УКНЦ работали и компилили, все равно ошибки.

http://s019.radikal.ru/i634/1302/c8/288b8e054028.png

form
12.02.2013, 20:30
Чета не получилось скомпилить мой тест таймера.
Выдал кучу ошибок, которые даже остановить не знаю как.
Причем, даже попробовал скопировать на его диск те версии MACRO и LINK, которые у меня на УКНЦ работали и компилили, все равно ошибки.
[

У меня там MACRO стандартный - он не понимает 8битных символов.
Замени на патченый.

Titus
12.02.2013, 20:42
У меня там MACRO стандартный - он не понимает 8битных символов.
Замени на патченый.
Говорю же, скопировал туда MACRO с диска, которым пользовался, на тот диск, что в архиве rd52_0.dsk, все равно ошбики.

form
12.02.2013, 20:44
Говорю же, скопировал туда MACRO с диска, которым пользовался (на тот диск, что в архиве rd52_0.dsk, все равно ошбики.

Ну значит не скопировался - ошибка однозначная.

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

Совет: для копирования использовать сам E11:


.UNP SY:MACRO.SAV

.COP/PRE/PRO DO:MACRO.SAV SY:

Titus
12.02.2013, 20:46
Ну значит не скопировался - ошибка однозначная.
Пользовал плагин под TC.

form
12.02.2013, 20:47
Пользовал плагин под TC.

Потому и даю совет воспользоваться самим E11. На всякий случай :)

Titus
12.02.2013, 20:48
Еще раз скопировал так:
Удалил сперва файлы MACRO, LINK и еще там один из них, чтобы наверняка. А потом скопировал свои. Все равно ошибка.

form
12.02.2013, 20:51
Еще раз скопировал так:
Удалил сперва файлы MACRO, LINK и еще там один из них, чтобы наверняка. А потом скопировал свои. Все равно ошибка.

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

---------- Post added at 23:51 ---------- Previous post was at 23:50 ----------

Можно бросить сюда правленый MACRO (я его не сохранил) - вставлю, проверю :)

Titus
12.02.2013, 20:56
LINK пофигу.
Остается вариант, что в файлах есть символы которые даже тот MACRO не берет. Ошибка выдается однозначная и других толкований не имеет.

---------- Post added at 23:51 ---------- Previous post was at 23:50 ----------

Можно бросить сюда правленый MACRO (я его не сохранил) - вставлю, проверю :)

Вот такой у меня на УКНЦ прекрасно компилит.

form
12.02.2013, 21:00
Еще пример файла который не компилится нужен.

form
12.02.2013, 21:02
А впрочем вот - нашел как проверить.
Русский текст + ^N/^O - не ругается.

form
12.02.2013, 21:07
Ну и еще вариант: извлекать файлы из dsk не плугином, а тем же E11, подключив .dsk командой "MOU DU1: imgfile" :)

Titus
12.02.2013, 21:13
А впрочем вот - нашел как проверить.
Русский текст + ^N/^O - не ругается.

А у меня все равно ругается http://zx.pk.ru/showpost.php?p=566155&postcount=319

Patron
12.02.2013, 21:14
А если нажать в эмуляторе ДВК кнопку выбора образов, подключить целевой образ с исходником к HD1: , ввести команду ASS HD1 DK, а потом MAC src, где src - имя ассемблерного файла, тогда тоже ошибки посыплются ?

form
12.02.2013, 21:16
А у меня все равно ругается http://zx.pk.ru/showpost.php?p=566155&postcount=319

Пробовал не плугином извлекать файлы?

---------- Post added at 00:16 ---------- Previous post was at 00:14 ----------

У меня этот файл тоже ругается.
Есть вариант прямо в DSK где не ругается?

Titus
12.02.2013, 21:21
А если нажать в эмуляторе ДВК кнопку выбора образов, подключить целевой образ с исходником к HD1: , ввести команду ASS HD1 DK, а потом MAC src, где src - имя ассемблерного файла, тогда тоже ошибки посыплются ?

Там все работает.

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


Пробовал не плугином извлекать файлы?

---------- Post added at 00:16 ---------- Previous post was at 00:14 ----------

У меня этот файл тоже ругается.
Есть вариант прямо в DSK где не ругается?

Да я просто плагином в .dsk копирую, и в эмуляторе УКНЦ и в эмуляторе ДВК не ругается.

form
12.02.2013, 21:22
Там все работает.

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



Да я просто плагином в .dsk копирую, и в эмуляторе УКНЦ и в эмуляторе ДВК не ругается.

Еще раз - есть образ DSK который работает?
Плугин конвертит символы и при копировании назад он их может снова сконвертить в нормальный вид. У меня плугина нет (так как нету и не будет TC) и проверить не могу.

Titus
12.02.2013, 21:22
Пожалуй, буду компилить в эмуляторе ДВК.

hobot
12.02.2013, 21:23
Есть вариант прямо в DSK где не ругается?

Titus, в целом конечно использование кириллицы не желательно по многим причинам )

form
12.02.2013, 21:23
Навсикдку вижу, что ругается конкретно на буквы "п" и "П" (с точки зрения KOI8).
То есть на лицо непофлаганые буковки в MACRO.

Patron
12.02.2013, 21:25
Там все работаетЯ только под ним и компилирую. Вряд ли E11 скомпилирует быстрее. А если исполнимый файл хочется иметь не каталоге Windows, а в целевом DSK-образе, то нет разницы к какому эмулятору этот образ подключать при компиляции.

form
12.02.2013, 21:27
Я только под ним и компилирую. Вряд ли E11 скомпилирует быстрее.

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

Можно собственно проверить.
В эмуляторе ДВК как я понимаю пока нет функционала чтобв все автоматизировать :)

Patron
12.02.2013, 21:32
В эмуляторе ДВК как я понимаю пока нет функционала чтобв все автоматизироватьПонятие "всё" - слишком широкое. Что конкретно хотелось бы иметь автоматизированным ?

hobot
12.02.2013, 21:32
В эмуляторе ДВК как я понимаю пока нет функционала чтобв все автоматизировать
А как-же ком файл ) Загрузка стартует по настройки в ini автоматом, остальное ручками один раз написал и забыл )

form
12.02.2013, 21:33
Понятие "всё" - слишком широкое. Что конкретно хотелось бы иметь автоматизированным ?

Ну вот в примере с E11 ничего не надо делать кроме как положить файлы в каталог с эмулятором. Остальное делается само.

hobot
12.02.2013, 21:33
Да конечно нужно всё нужное монтировать перед запуском )

Patron
12.02.2013, 21:35
В E11 меньше дергание диска получится (хоть он в эмуляторе и мгновенный). На реальной машине это выливается в охрененное ускорение. В эмуляторе эффект слабее. Можно собственно проверить.Тут эмулятор ДВК может слегка отстать.
Т.к. подключенный образ не блокируется - эмулятор ДВК очень тщательно заботится, чтобы содержимое образа непрерывно сохраняло актуальность.

form
12.02.2013, 21:36
Кстати, кто напомнит как в двк эмуляторе можно (и можно ли?) правильно заставить работать keypad? (конкретно клавишу "." - остальное работает).

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


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

Дело не в этом.
В E11 у меня используется ZM монитор и MACRO тупо имеет больше памяти для работы. Кроме того используется VM для хранения рабочих файлов, да и весь процесс использует VM.

Сейчас попробую тестики поделать разные...

Patron
12.02.2013, 21:37
Ну вот в примере с E11 ничего не надо делать кроме как положить файлы в каталог с эмулятором. Остальное делается само.Если взять командный файл из того примера и запустить под эмулятором ДВК - то разница будет только в том, что целевое устройство нельзя подключить к каталогу Windows.

form
12.02.2013, 21:38
Если взять командный файл из того примера и запустить под эмулятором ДВК - то разница будет только в том, что целевое устройство нельзя подключить к каталогу Windows.

Про то и говорю - полезно иметь такое устройство :)
Причем можно сделать более функциональным чем в E11.

Patron
12.02.2013, 21:41
Про то и говорю - полезно иметь такое устройство. Причем можно сделать более функциональным чем в E11.Я такое уже делал. Кромешный ужас наступает тогда, когда нужно на лету отображать тексты Windows с русскими буквами в КОИ-7. Один раз я с этим справился, но с тех пор больше не хочу - теперь только если в КОИ-8.

form
12.02.2013, 21:47
Провел тест: полная компиляция RT-11SB (без линковки).
E11 - 11 секунд
ДВК - 41 секунда

при этом в E11 диск - DU со стандартными задержками прерываний.

---------- Post added at 00:47 ---------- Previous post was at 00:46 ----------

В ДВК эмуляторе инструкции векторятся или ищутся?

Patron
12.02.2013, 21:50
Провел тест: полная компиляция RT-11SB (без линковки).
E11 - 11 секунд
ДВК - 41 секундаПри этом оба только с диском PC работали или на E11 ещё и VM использовался ?

form
12.02.2013, 21:52
При этом оба только с диском PC работали или на E11 ещё и VM использовался ?

VM используется только в виде ASS VM0 CF ASS VM0 WF.

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

Без VM - 12 секунд.

Patron
12.02.2013, 21:54
В ДВК эмуляторе инструкции векторятся или ищутся?В смысле, насколько быстр данный эмулятор процессора ВМ1 ?
Он написан с академическими целями в качестве обучающего пособия для авторов эмуляторов.
Когда я его исходник опубликую, можно будет посоревноваться, кто насколько его ускорит.
Я надеюсь, что смогу ускорить его в 100 раз.

form
12.02.2013, 21:58
В смысле, насколько быстр данный эмулятор процессора ВМ1 ?
Он написан с академическими целями в качестве обучающего пособия для авторов эмуляторов.
Когда я его исходник опубликую, можно будет посоревноваться, кто насколько его ускорит.
Я надеюсь, что смогу ускорить его в 100 раз.

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

---------- Post added at 00:58 ---------- Previous post was at 00:55 ----------


Когда я его исходник опубликую

Так может проще раз у тебя в теории есть страница на моем сервере, загнать исходники в CVS который там тоже есть и дать возможность народу доделывать? :)

Patron
12.02.2013, 22:03
Я имею в виду способ исполнения эмулируемой инструкции - поиск инструкции, затем выполнение или сразу выполнение где код инструкции - индекс массива для перехода.Академические реализации - не место для сложного кода. Медленнее, чем написан разборщик команд в эмуляторе ВМ1 - написать разбрщик команд вообще вряд ли возможно.

form
12.02.2013, 22:04
Академические реализации - не место для сложного кода. Медленнее, чем написан разборщик команд в эмуляторе ВМ1 - написать разбрщик команд вообще вряд ли возможно.

Ну, положим векторизация как раз проще :)

hobot
12.02.2013, 22:06
Так может проще раз у тебя в теории есть страница на моем сервере, загнать исходники в CVS который там тоже есть и дать возможность народу доделывать?
offtop > триллер? Мне сегодня не надо кино, я форум читаю ) Тут такое )

Patron
12.02.2013, 22:07
Так может проще раз у тебя в теории есть страница на моем сервере, загнать исходники в CVS который там тоже есть и дать возможность народу доделывать?Там всё завязано на модульный API моей разработки.
Когда дозреет модульный API - тогда всё и будет.

hobot
12.02.2013, 22:08
все жанры в разных темах ! ) Спасибо, вам ребята! )

Patron
12.02.2013, 22:08
Ну, положим векторизация как раз проще :)Значит, мне просто хочется, чтобы у будущих участников соревнования по ускорению ядра эмуляции PDP-11 были выгодные условия для старта :)

form
12.02.2013, 22:32
Переконфигурял себе VM - теперь можно работать не выгружая TCP/IP :)

.ME

------- Extended Memory --------
Address Module Words Type
------- ------ ----- ----
17760000 IOPAGE 4096. PRM HDW BYP
10000000 MEMTOP
04000000 VM 524288. SHR
00510400 ...... 440192.
00310400 TCPIP 32768. LOC
00270600 SD 4032. SHR
00256200 SL 2688. PVT
00250200 MU 1536. PVT
00225000 NQ 4928. PVT
00216400 SP 1664. SHR
00174000 DU 4736. PVT
00160000 MCA 3072. PRM
00000000 KERNEL 28672. PRM HDW

------ Low Memory -------
Address Module Words
------- ------ -----
156700 DU 288.
104442 RMON 10831.
102176 SL 594.
073610 NQ 1659.
067106 TCPIP 1185.
055042 USR 2578.
001000 ..BG.. 11281.


.

Titus
12.02.2013, 22:41
Остановился на варианте компилирования по эмулятором ДВК. Весьма удобно и быстро.
Единственное, не очень понравилось, что при выборе диска в окошке дисков, эмулятор подвис, т.к. скорость была MAX, и чего-то в этот момент у него заклинило. Когда в диспетчере задач понизил приоритет со среднего до ниже среднего, все отвисло.

Patron
12.02.2013, 22:48
Остановился на варианте компилирования по эмулятором ДВК. Весьма удобно и быстро.
Единственное, не очень понравилось, что при выборе диска в окошке дисков, эмулятор подвис, т.к. скорость была MAX, и чего-то в этот момент у него заклинило. Когда в диспетчере задач понизил приоритет со среднего до ниже среднего, все отвисло.Появились у эмулятора новые пользователи - появились и новые багрепорты.
На одноядерном процессоре я его мало гонял. Особенно при максимальном быстродействии. Если в меню выбрать быстродействие 5.000, то процессор, дающий на максимуме 7.000 - не будет загружаться на 100% и это должно помочь.

...

Я компилю при быстродействии 2.000 - мне хватает.

...

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

form
12.02.2013, 22:48
Я в E11 замедляю примерно до 2x/3x скорости 11/93 - в виндовсе получается 0% CPU :)

Titus
12.02.2013, 23:06
Надо будет сделать снижение приоритета потока эмуляции при вызове окна выбора образа.
А зачем вообще его оставляеть активным при выборе нового образа?

Кроме того, можно вообще приоритет эмулятора в режиме MAX сделать ниже среднего, т.к. он будет гарантированно забирать много быстродействия, и при приоритете по умолчанию (средем) система станет тормозить.

Patron
12.02.2013, 23:14
А зачем вообще его оставляеть активным при выборе нового образа?Модульный API запускает по одному потоку эмуляции на каждый конфиг, имеющий хотя бы одну шину и хотя бы один процессор - эти потоки и знать не знают, что происходит в потоке интерфейса.


можно вообще приоритет эмулятора в режиме MAX сделать ниже среднего, т.к. он будет гарантированно забирать много быстродействия, и при приоритете по умолчанию (средем) система станет тормозить.Мы это одновременно придумали.

В следующем релизе эмулятора ДВК будут использоваться сразу три варианта приоритета потока эмуляции:

THREAD_PRIORITY_NORMAL - для всех фиксированных значений скорости.
THREAD_PRIORITY_BELOW_NORMAL - для скорости Max
THREAD_PRIORITY_ABOVE_NORMAL - для скорости True ( там быстродействие 0.180 MIPS - пусть порезвится ).

NovaStorm
13.02.2013, 11:43
Только этот binutils не умеет собирать программы ни под одну из DECовских систем :)
А разве a.out за .LDA не сойдёт? Есть же конвертилка.
И как загрузить этот lda? Что за absolute binary loader? Запуск наверное через START 1000, а вот с загрузкой что-то не разобрался.

form
13.02.2013, 12:08
А разве a.out за .LDA не сойдёт? Есть же конвертилка.
И как загрузить этот lda? Что за absolute binary loader? Запуск наверное через START 1000, а вот с загрузкой что-то не разобрался.

LDA не используется в системах.
Он предназначен для прошивки на перфоленту и загрузки без системы.

---------- Post added at 15:08 ---------- Previous post was at 15:03 ----------

Ну и ни о каком START 1000 разумеется речь не идет так как в силу формата не получится сделать GET :)

NovaStorm
13.02.2013, 12:12
>Он предназначен для прошивки на перфоленту
Я ещё вроде видел, что его ещё можно и с других устройств грузить через пульт, но тк это доки от PDP были, мало понятно.
>в силу формата не получится сделать GET
Это-то я методом тыка уже понял =)
Но можно ли чем-то загрузить lda в память? Если нету готового, можно и свой загрузчик для a.out написать, а start уже есть.

form
13.02.2013, 12:16
>Он предназначен для прошивки на перфоленту
Я ещё вроде видел, что его ещё можно и с других устройств грузить через пульт, но тк это доки от PDP были, мало понятно.
>в силу формата не получится сделать GET
Это-то я методом тыка уже понял =)
Но можно ли чем-то загрузить lda в память? Если нету готового, можно и свой загрузчик для a.out написать, а start уже есть.

Я делал загрузчик перфолент для RT-11, им можно грузить.
Только неудобно очень.

Далее, gcc автоматом означает отсутствие системных директив.
Далее, базовый функционал (все функции C которые используют систему, даже такие как printf) работать не будут.
Далее, получить совместимый OBJ который можно собрать с любым другим и переносить из систему в систему не получится.

Итог - получаем совершенно непригодную ни для чего вещь :)

Patron
13.02.2013, 12:42
Есть смысл написать оптимизирующий кросс-компилятор для специального диалекта 'C', чтобы он генерил выходные файлы на MACRO-11. В таком подходе есть несколько преимуществ:

1. Можно ввести псевдофункции типа SeC() и BCS() для проверки битов признаков и управления ими.

2. Можно в определённый момент прозрачно для пользователя интегрировать систему виртуальной памяти (есть на этот счёт задумки).

3. Можно прозрачно для пользователя интегрировать систему сжатого хранения сообщений ( есть мощный рекурсивный распаковщик сообщений для PDP-11, но упаковать сообщения можно только на PC ).

form
13.02.2013, 12:48
А где можно почитать о форматах OBJ и SAV?

RT-11 V5.6: RT-11 Volume and File Formats Manual (http://pdp-11.org.ru/files/docs/rt-11/rtv56-formats.zip)

OBJ переносим - можно скомпилять в одной системе, собрать в другой и работать.

---------- Post added at 15:48 ---------- Previous post was at 15:45 ----------


Есть смысл написать оптимизирующий кросс-компилятор для специального диалекта 'C', чтобы он генерил выходные файлы на MACRO-11.

Есть такой язык PL-11, это ни что иное как MACRO-11, реализованный в паскале-подобных конструкциях. Только вот компиляторы последний раз видел году в 83м ;(

Кстати про MACRO-11, вспомнилось, что в 2.11BSD есть M11 и L11. Если они там на C написаны, моджо портировать...

NovaStorm
13.02.2013, 13:50
Далее, gcc автоматом означает отсутствие системных директив.
Далее, базовый функционал (все функции C которые используют систему, даже такие как printf) работать не будут.

Да собственно и плевать. Мне свой код гонять надо. И Си конечно приятен, но писать придётся всё равно на gas'е.

Далее, получить совместимый OBJ который можно собрать с любым другим и переносить из систему в систему не получится.
А что у нас за библиотеки есть к RT-11, ради которых захотелось бы делать этот самый obj?
/me смотрит на это с колокольни демо- и гейм- дева. То есть загрузились, а там и трава не расти - вся память теперь твоя. В самом крайнем случае ещё может потребоваться файлики читать/писать, так что плюсую к интересам Титуса о минимальной ОС с файлами, которую можно было бы временно выкидывать например в конец видео памяти УКНЦ.

---------- Post added at 13:50 ---------- Previous post was at 13:43 ----------


Кстати про MACRO-11, вспомнилось, что в 2.11BSD есть M11 и L11. Если они там на C написаны, моджо портировать...
Ага, щазз.
ftp://ftp.mrynet.com/operatingsystems/UNIX/2.11BSD/new/m11/macro.m11

form
13.02.2013, 13:51
Да собственно и плевать. Мне свой код гонять надо. И Си конечно приятен, но писать придётся всё равно на gas'е.

...который рядом с удобным MACRO-11 смотрится как набор вручную с пульта. Клавишного... ;)



А что у нас за библиотеки есть к RT-11, ради которых захотелось бы делать этот самый obj?

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

Кроме того речь еще шла о директивах независимо от OBJ. Писать под RT-11 на gas просто замучаешься: макробиблиотеки нет, все вручную - бр-р-р-р...


В самом крайнем случае ещё может потребоваться файлики читать/писать

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

Titus
13.02.2013, 13:52
Да собственно и плевать. Мне свой код гонять надо. И Си конечно приятен, но писать придётся всё равно на gas'е.
А почему не выберешь MACRO-11?

form
13.02.2013, 13:53
А почему не выберешь MACRO-11?

Видимо из тех же соображений из каких выбирают vi -- смотрите как я могу - за 5 минут сделаю то, что другие делают за 10 секунд :)

Titus
13.02.2013, 14:04
Видимо из тех же соображений из каких выбирают vi -- смотрите как я могу - за 5 минут сделаю то, что другие делают за 10 секунд :)
А кто такой vi? )

form
13.02.2013, 14:06
А кто такой vi? )

UNIXоиды поймут :)

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

Редактор такой. Экранный, но с управлением страшным.
Первые версии EDT работали примерно в таком же стиле. Если есть интерес, в эмуляторе можно посмотреть - в RSX-11M V3.2 вроде такого типа был :)

NovaStorm
13.02.2013, 14:09
А почему не выберешь MACRO-11?
Я пробую найти полноценный мощный кросс-тулчейн.

Titus
13.02.2013, 14:10
Не знаю, я в PDP новичок, писал так как по долгу службы (эмупятор УКНЦ) кое-что приходится писать под RT-11.
Macro-11 вполне устроил (кроме меток, ограниченных 6 символами). А теперь, с компиляцией почти мгновенной под эмулятором ДВК и вообще комфортно. Пишу в Aditor'e (у меня подсветка там есть для PDP), копирую в образ, компилю и скармливаю эмулятору или записываю на диск для реала. Написал уже с десяток разных программ.

NovaStorm
13.02.2013, 14:10
А кто такой vi? )
Редактор с двумя режимами - может бибикать и всё портить.

form
13.02.2013, 14:10
Я пробую найти полноценный мощный кросс-тулчейн.

Так был вроде именно полноценный (в отличие от gcc + binutils который заточен под 2BSD).

NovaStorm
13.02.2013, 14:15
form, для PDP-11 я знаю ещё только pcc и ack. Оба скорее мертвы. А m11 на асме.
Есть конечно мысли, завернуть асм для gas в m4, но даже по сравнению с macro-11 в эмуле это наверное то ещё садо-мазо.

form
13.02.2013, 14:32
form, для PDP-11 я знаю ещё только pcc и ack. Оба скорее мертвы. А m11 на асме.
Есть конечно мысли, завернуть асм для gas в m4, но даже по сравнению с macro-11 в эмуле это наверное то ещё садо-мазо.

В искалке находился какой-то cross ide.
Сам не пробовал ибо родное+E11 заведомо на порядок удобнее, не говоря уже о том, что все советские софтины такого типа ориентированы ны RT-11, а он для меня нечто вроде MS-DOS в наше время :)

---------- Post added at 17:32 ---------- Previous post was at 17:31 ----------

А что m11 на асме - так было бы желание - на C перевести можно всегда :)
Плюс уже предлагал простой вариант - сделать утилитку sav2exe которая бы прицепляла некий pdp-11 runtime к файлу и позволяла бы его запускать...

Patron
13.02.2013, 15:21
простой вариант - сделать утилитку sav2exe которая бы прицепляла некий pdp-11 runtime к файлу и позволяла бы его запускать...Это не простой вариант, но вполне возможный. В планах у меня это есть. Но сначала появится:

1. монтирование каталогов Windows в эмуляторе ДВК в качестве образов DSK.
2. монтирование EXE-файла эмулятора в качестве образа DSK системного диска с игнорированием записи в такой образ.
3. перенастройка всех файловых операций Windows в модульном API так, чтобы при отсутствии пути в запросах чтения/записи - сначала проверялась запрещённая для записи встроенная файловая система EXE-файла эмулятора.
4. передача командной строки запуска эмулятора первой программе, запускаемой в стартовом командном файле подключенного системного образа.

form
13.02.2013, 15:23
Это не простой вариант

Это более простой вариант чем напиать эмулятор процессора без поддержки железа :)

Patron
13.02.2013, 15:35
Проблема в том, что я не умею монтировать на лету файловые системы Windows, а без этого перенаправление функций работы Windows с INI-файлами на встроенную файловую систему невозможно. Придётся писать для модульного API полный аналог процедур Windows для работы с INI-файлами ( что, правда, повысит переносимость модульного API, снизив его привязку к Win32 API ).

form
13.02.2013, 15:42
Проблема в том, что я не умею монтировать на лету файловые системы Windows, а без этого перенаправление функций работы Windows с INI-файлами на встроенную файловую систему невозможно. Придётся писать для модульного API полный аналог процедур Windows для работы с INI-файлами ( что, правда, повысит переносимость модульного API, снизив его привязку к Win32 API ).

А их и не надо монтировать.
И вообще ничего монтировать не надо.
И поддерживать железо ни в каком виде не надо.
И INI файлов - абсолютно точно не надо.

Все, что нужно - это эмулировать голый процессор без I/O page и векторов. Ну или из векторов поддерживать только TRAP. Инструкция EMT не должна никаких прерываний вызывать, а сразу должна отрабатываться как функция RT-11. Ну и виртуальный RMON сделать и ссылку на него из @#54.

---------- Post added at 18:42 ---------- Previous post was at 18:41 ----------

И, к слову, где-то мне уже попадалась виртуальная RT-11 машина без всяких загрузок настоящих систем.

Patron
13.02.2013, 16:06
Модульный API без INI-файлов не работает, а без модульного API нормальный sav2exe не сделать. Мы ведь хотим, чтобы K52.exe тоже нормально работал, а прилепить к эмулятору процессора эмулятор терминала без модульного API - мне на порядок сложнее, чем переделать в модульном API работу с INI-файлами.

Эти INI-файлы снаружи видны не будут. Единственный EXE-файл будет содержать программу эмулятора, системный образ DSK и встроенную файловую систему с таким же API как в Windows.

form
13.02.2013, 16:09
а без модульного API нормальный sav2exe

Отлично сделать и очень просто.


Мы ведь хотим, чтобы K52.exe тоже нормально работал

Зачем? Редакторов у нас полно (в том числе с управлением 1:1 как в K52), нам важно утилитки вроде LINK, LIBR,CREF, MACRO. А если мы начнем делать эмуляторы терминала, да тогда уж и K52 выкинуть как убогий и сделать поддержку VT100 для KED итд итп - зачем тогда вообще огород городить - проще эмулятором пользоваться будет.

Patron
13.02.2013, 16:09
В принципе - можно даже не морочиться с объединением EXE и DSK, а просто положить системный образ в качестве одного из файлов встроенной файловой системы EXE-файла эмулятора.

form
13.02.2013, 16:10
В принципе - можно даже не морочиться с объединением EXE и DSK, а просто положить системный образ в качестве одного из файлов встроенной файловой системы EXE-файла эмулятора.

Да ни надо никаких образов. Просто эмулятор функционала RT-11. Причем половина функционала должна работать как NOP.

Patron
13.02.2013, 16:12
Зачем? Редакторов у нас полноЯ сделаю вариант sav2exe, который будет максимально качественно превращать в exe любой sav-файл. Не думаю, что кто-то сделает любой другой вариант быстрее.

form
13.02.2013, 16:16
Я сделаю вариант sav2exe, который будет максимально качественно превращать в exe любой sav-файл. Не думаю, что кто-то сделает любой другой вариант быстрее.

А зачем любой файл превращать.
Это выльется в создание еще одного варианта эмулятора который не даст никаких плюсов против уже существующих.

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

Кроме того вариант который я описал системнонезависим.

Patron
13.02.2013, 16:33
Это выльется в создание еще одного варианта эмулятора который не даст никаких плюсов против уже существующих.Эмулятор всегда один - модульный API, просто у него появится ещё одна возможность.


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

Vamos
13.02.2013, 17:50
но писать придётся всё равно на gas'е.
Это который в РТК Микро должен был быть "транслятор графического ассемблера"?

shattered
13.02.2013, 21:04
Есть же порт macro11 под linux/win32?

http://www.dbit.com/pub/linux/macro11/README

http://retrocmp.com/tools/macro-11-on-windows

form
14.02.2013, 01:04
Есть же порт macro11 под linux/win32?

http://www.dbit.com/pub/linux/macro11/README

http://retrocmp.com/tools/macro-11-on-windows

И там же написан большой список чего он не умеет насколько я помню :)

hobot
14.02.2013, 01:14
И там же написан большой список чего он не умеет насколько я помню
Сам факт существования означает - что кто то очень хотел что бы было )
А не умеет - может ещё научиться ? ) Только мне вот сложно вообразить как
это работать должно - без эмулятора процессора PDP-совместимого и чего-нибудь ещё? Без системной библиотеки и если там используются стандартные вызовы то какая версия SYSMAC ??? ) Не представляю как это работает под WIn )))

form
14.02.2013, 01:25
Сам факт существования означает - что кто то очень хотел что бы было )
А не умеет - может ещё научиться ? ) Только мне вот сложно вообразить как
это работать должно - без эмулятора процессора PDP-совместимого и чего-нибудь ещё? Без системной библиотеки и если там используются стандартные вызовы то какая версия SYSMAC ??? ) Не представляю как это работает под WIn )))

Так это вроде не секрет, что d-bit пытается сделать/собрать freeware заменители для DECовских утилит :)

---------- Post added at 04:23 ---------- Previous post was at 04:20 ----------

Версия SYSMAC определяется файлом.

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

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

shattered
14.02.2013, 01:26
как
это работать должно - без эмулятора процессора PDP-совместимого и чего-нибудь ещё?

Так это же только кросс-ассемблер. Зачем ему эмулировать что-то?

hobot
14.02.2013, 01:34
Так это вроде не секрет, что d-bit пытается сделать/собрать freeware заменители для DECовских утилит
Я ничего не знаю об этом, но тем интереснее )


кросс-ассемблер
Я не программист - поэтому наверное такой термин для меня не слишком явный )

---------- Post added at 01:34 ---------- Previous post was at 01:30 ----------


Версия SYSMAC определяется файлом.
Ну а этот кросс-ассемблер использует Макро-команды (ENABL LC,MCL ?) или только команды вроде BEQ MOV TST ? И если он использует скажем .CHAIN то что тогда
означает - определяется файлом? Ему надо какой-то из родных (на выбор) библиотек
подпихивать что ли? (я честно не представляю просто механизм такой). Не может же
МАКРО-11 висеть в воздухе без PDP-процессора, без системной библиотеки ?

form
14.02.2013, 01:35
Ну а этот кросс-ассемблер использует Макро-команды (ENABL LC,MCL ?)

Это не макро команды.

shattered
14.02.2013, 01:35
И надо, пожалуй, затолкать эти исходники в github, для удобства разглядывания

hobot
14.02.2013, 01:36
Это не макро команды.
Горе мне. - как написал однажды Patron )

shattered
15.02.2013, 23:53
https://github.com/shattered/macro11

NovaStorm
16.02.2013, 15:06
shattered, я чайник, конечно, но makefile?
Да и в нём что-то маловато описано, СС не ставится, а потом у меня вылазит куча "makefile:№№: *** missing separator. Stop."

shattered
16.02.2013, 15:14
а) Автор под win32 писал и б) это тоже допустимо

'missing separator' -- видимо, нужен GNU Make

---------- Post added at 15:14 ---------- Previous post was at 15:12 ----------

(я еще не пробовал собирать сам)

NovaStorm
16.02.2013, 15:35
-f то я задал, пытался собрать под mingw, и make гнутый там должен быть...

shattered
16.02.2013, 15:52
А надо бы проверить, какой там make

NovaStorm
16.02.2013, 16:20
Неужели nmake настолько криво совместим?

shattered
16.02.2013, 16:33
С небольшой правкой (stricmp -> strcasecmp) собирается и не под visual studio :-)

hobot
23.03.2014, 18:48
Почитал эту тему, столько всего полезного
шпоргалки\вопросы\ответы
а самое главное программы и исправления
(патчи). Поднимаю тему ! ) Очень информативная
и интересная! )

form
21.06.2014, 14:49
столько всего полезного

До кучи - может кому пригодится. Пример как делать поиск файлов в каталоге диска, используя только те средтва которые уже есть в системе. Используются функции IGTDIR и IGTENTиз системной библиотеки. Их описание можно найти на bitsavers или у меня в документации по системной библиотеке RT-11. Никаких наворотов-красивостей - только пример, рабочий :)


MOV #ARGS1,R5
CALL IGTDIR
TST R0
BNE 20$
Вызов функции IGTDIR из системмной библиотеки. Аналогичен форановскму IERR = IGTDIR(64,AREA,0,SEG,,DBLK,FILSPC). Если IERR (R0) не равен нулю - была ошибка.
10$: MOV #ARGS2,R5
CALL IGTENT
TST R0
BLT 30$
Аналогично фортрановскому IERR = IGTENT(AREA,ENTRY,,BLOCK). Если результат меньше 0, больше искать нечего. В противном случае в 7-словыный массив ENTRY получаем запись каталога о файле в стандартном RT-11 формате.
MOV #ENTRY+2,R0
MOV #FMTARG,R1
CLR (R1)+
MOV (R0)+,(R1)+
MOV (R0)+,(R1)+
MOV (R0)+,(R1)+
CLR (R1)+
MOV (R0)+,(R1)+
MOV #BUFF,R0
MOV #FORMAT,R1
MOV #FMTARG,R2
CALL $EDMSG
CLRB @R0
.PRINT #BUFF
BR 10$Копируем данные в блок аргументов $EDMSG, печатаем, идем дальше...
20$: .PRINT #ERROR
30$: CLR R0
.EXITОбработка ошибок, выход.
ARGS1: .WORD 7,SIZE,AREA,CHAN,SEG,-1,DBLK,FILSPC
SIZE: .WORD 64.
AREA: .BLKW 64.
CHAN: .WORD 0
SEG: .BLKW 512.
DBLK: .RAD50 /SY /

ARGS2: .WORD 5,AREA,ENTRY,-1,BLOCK
ENTRY: .BLKW 7
BLOCK: .BLKW

FMTARG: .BLKW 6
FORMAT: .ASCIZ /%11<%X%11>%M./

ERROR: .ASCIZ /IGTDIR FAILED/

FILSPC: .ASCIZ /.TXT,%%.SYS,UCL.*/

BUFF: .BLKB 40.

.END STARTСобственно все. FILSPC содержит список файлов которые нужно искать, со всякими *, % (ну и как обычно, опущенное поле считается за *), не более 8 спецификаций через запятую. Другие подробности в RT-11 System Subroutine Library Manual (http://pdp-11.org.ru/files/docs/rt-11/rtv56-syslib.zip). Программа для простоты использует RSXLIB (http://pdp-11.org.ru/files/rt-11/rsxlib.zip), описание его здесь (http://zx-pk.ru/showpost.php?p=583948&postcount=305).

.RU GTDIR
DD.SYS 5.
DU.SYS 11.
EQ.SYS 10.
LD.SYS 11.
LP.SYS 2.
LS.SYS 5.
MU.SYS 14.
NL.SYS 2.
SD.SYS 24.
SL.SYS 17.
SP.SYS 7.
VM.SYS 3.
XL.SYS 4.
UCL.SAV 16.
UCL.DAT 9.
CUSTOM.TXT 14.
V5NOTE.TXT 36.

.

form
08.07.2014, 19:43
Решил рассмотреть некоторые моменты для ясности. В качестве первого примера - разборки с командами SET которые прерывают обработку команды (например выполняют .CHAIN или .EXIT). На форуме уже есть несколько таких драйверов.

К примеру, драйвер поддерживает несколько команд SET (скажем [NO]OPT и VALUE) которые просто меняют какие-либо параметры драйвера и ON которая завершается по .EXIT (например для запуска системных команд). В этом случае, понятно, что команда вроде "SET XX ON,OPT" не дойдет до конца и звершится на разборе ON. Чтобы не вводить в заблуждение пользователя, будет полезно если драйвер предупредит об этом...

.DRSET ON,1,O.ON

;+
;ЗДЕСЬ R5 УКАЗЫВАЕТ НА СИМВОЛ КОМАНДНОЙ СТРОКИ, СЛЕДУЮЩИЙ ЗА ТЕКУЩЕЙ ОПЦИЕЙ.
;НАПРИМЕР ЕСЛИ ДЛЯ "SET XX ON,OPT" R5 УКАЗЫВАЕТ НА СИМВОЛ ",".
;СТРОКА ЗАПИСАНА В ОБРАТНОМ ПОРЯДКЕ.
;+
O.ON: TSTB -(R5) ;ПРОВЕРЯЕМ СЛЕДУЮЩИЙ СИМВОЛ
BEQ O.EXEC ;НУЛЕВОЙ БАЙТ - КОНЕЦ СТРОКИ
JSR R0,10$ ;ПЕЧАТАЕМ СООБЩЕНИЕ

.ASCII /?XX-W-ON must be last option in set command/<15><12>
.ASCIZ /?XX-W-Options ignored - /
.EVEN

;+
;В СТЕКЕ ЛЕЖИТ СОХРАНЕННОЕ СОДЕРЖИМОЕ R0. ДЛЯ ПРИЛИЧИЯ ЕГО МОЖНО
;ДОСТАТЬ, НО МОЖНО И ЗАБИТЬ - ВЕДЬ МЫ БУДЕМ ДЕЛАТЬ .EXIT
;
;ВО ВРЕМЯ ВЫПОЛНЕНИЯ КОМАНЛЫ SET В ПАМЯТЬ СЧИТЫВАЮТСЯ ДВА ПЕРВЫХ
;БЛОКА ДРАЙВЕРА. ПРИ УСПЕШНОМ ЗАВЕРШЕНИИ, МОНИТОР ЗАПИСЫВАЕТ ЭТИ ДВА
;БЛОКА ОБРАТНО В ФАЙЛ ДРАЙВЕРА. В НАШЕМ СЛУЧАЕ МЫ ЗАВЕРШАЕМ ОБРАБОТКУ
;МАКРОВЫЗОВОМ .EXIT, СООТВЕТСТВЕННО ДРАЙВЕР НЕ БУДЕТ ЗАПИСАН ОБРАТНО
;НА ДИСК И НИКТО НАМ НЕ МЕШАЕТ ИСПОЛЬЗОВАТЬ ОБЛАСТЬ ВТОРОГО БЛОКА
;В КАЧЕСТВЕ БУФЕРА.
;-
10$: .ADDR #1000,R1 ;ПОЛУЧАЕМ АДРЕС БУФЕРА
MOV R1,R3 ;СОХРАНЯЕМ ЕГО - ПРИГОДИТСЯ
20$: MOVB (R0)+,(R1)+ ;КОПИРУЕМ СООБЩЕНИЕ
BNE 20$ ;
DEC R1 ;УБИРАЕМ НУЛЕВОЙ БАЙТ
30$: MOVB -(R5),(R1)+ ;КОПИРУЕМ ОСТАТОК КОМАНДЫ SET
BNE 30$ ;
.PRINT R3 ;ПЕЧАТАЕМ СООБЩЕНИЕ

O.EXEC: ;ДЕЛАЕМ ЧТО НУЖНО
.EXIT ;ВЫХОД

Данный пример при выполнении команды SET XX ON,NOOPT,VALUE=1 будет выводить предупреждение
?XX-W-ON must be last option in set command
?XX-I-Options ignored - NOOPT,VALUE=1

---------- Post added at 22:05 ---------- Previous post was at 20:42 ----------

При написании драйвера следует помнить, что типы процессоров не ограничиваются одними ВМ1 и ВМ2. Особенно это актуально для ДВК.

Данный драйвер перехватывает прерывание 10, отлавливает команды с кодом 77 и печатает хашик.


.DRDEF XX,333,0,0,0,0
.DRPTR FETCH=*NO*,LOAD=XXLOA,UNLOAD=XXUNL

.DRBEG XX
XXINT:: MOV @SP,-(SP) ;ПОЛУЧАЕМ ПРЕДПОЛОЖИТЕЛЬНЫЙ АДРЕС
SUB #2,@SP ;КОМАНДЫ
CMP #77,@(SP)+ ;ЕСЛИ КОД КОМАНДЫ НЕ 77
BNE 10$ ;ОТДАЕМ ПРЕРЫВАНИЕ
TSTB @#177564 ;ПЕЧАТАЕМ СИМВОЛ #
BPL .-4 ;
MOVB #'#,@#177566 ;
10$: SEC ;ВОССТАНАВЛИВАЕМ БИТ C
JMP @(PC)+ ;ОТДАЕМ В СИСТЕМУ
XXISR:: .BLKW

.DREND XX

.PSECT SETOVR
XXLOA:: MOV @R5,R5 ;ПОЛУЧАЕМ АДРЕС XXLQE
MOV @#10,XXISR-XXLQE(R5) ;СОХРАНЯЕМ СИСТЕМНЫЙ ОБРАБОТЧИК
ADD #XXINT-XXLQE,R5 ;УСТАНАВЛИВАЕМ НАШ
MOV R5,@#10 ;
RETURN ;ВОЗВРАТ

XXUNL:: MOV @R5,R5 ;ПОЛУЧАЕМ АДРЕС XXLQE
MOV XXISR-XXLQE(R5),@#10 ;ВОССТАНАВЛИВАЕМ ОБРАБОТЧИК
RETURN ;ВОЗВРАТ

.END


Здесь сразу три ошибки. Для XM/ZM мониторов драйвер получит неизвестно что вместо кода команды для виртуальной программы (бит 10 в JSW установлен) или для программы, запущенной через VBGEXE. Код должен быть поправлен:
XXINT:: MOV @SP,-(SP)
SUB #2,@SP
.IF EQ MMG$T
CMP #77,@(SP)+
.IFF
MFPI @(SP)+
CMP #77,(SP)+
.ENDC
Вторая ошибка - тупое восстановление вектора при выгрузке драйвера. Если после нашего драйвера кто-то еще перехватил вектр 10, выгрузка может дать непредсказуемый эффект. Поэтому стоит проверить сначала можно ли делать выгрузку:
XXUNL:: CLR R0 ;ПРИ ОШИБКЕ В R0 МОЖНО
;ПОМЕСТИТЬ АДРЕС СООБЩЕНИЯ
;0-НЕТ СПЕЦИАЛЬНОГО СООБЩЕНИЯ
MOV @R5,R5 ;ПОЛУЧАЕМ АДРЕС XXLQE
MOV R5,R4 ;ПОЛУЧАЕМ АДРЕС XXINT
ADD #XXINT-XXLQE,R4 ;
CMP R4,@#10 ;ПРОВЕРЯЕМ ISR
BNE 10$ ;
MOV XXISR-XXLQE(R5),@#10 ;ВОССТАНАВЛИВАЕМ
TST (PC)+ ;КУ
10$: SEC ;КЮ
RETURN ;

Третья ошибка относится к маловероятному (но вполне возможному) случаю когда между сохранением старого значения вектора и установкой нового кто-то успеет перехватить вектор. В FB/XM/ZM мониторах сиуация вполне возможная. Так что такие вещи стоит выполнять на приоритете 7 процессора.

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

Еще пара слов про XB/XM/ZB/ZM мониторы (а заодно и про TSX). В случае с драйвером, мы заранее знаем будет он работать в системе с MMU или без. Соответственно многое можно упростить. Например наличие MMU автоматически означает наличие EIS (можно не писать универсальные заменители MUL/DIV/SOB итд). Также наличие MMU гарантирует наличие PSW по адресу 1(77)77776. Команд же MFPS/MTPS вполне может не быть (11/34, Электроника 100/25)...

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

Пара слов про драйверы, перехватывающие вектора 4 или 10. Если в момент входа в прерывание значение INTLVL >=0 в RMON, нет смысла что-то делать дальше - при отдаче такого прерывания в систему последовал бы ?MON-F-System halt (однако если драйвер используется чтобы сэмулировать команды процессора которые использует другой драйвер из под .DRAST...). Можно воспользоваться недокументированной фичей для такого случая (на примере прошлого драйвера):
...
XXINT:: TST @(PC)+
INTLVL: .BLKW
BPL 10$
...
XXLOA:: MOV @R5,R5 ;ПОЛУЧАЕМ АДРЕС XXLQE
MOV $INPTR-XXLQE(R5),R0 ;ПОЛУЧАЕМ АДРЕС $INTEN
CMP (R0)+,(R0)+ ;ПОЛУЧАЕМ АДРЕС INTLVL
MOV R0,INTLVL-XXLQE(R5) ;СОХРАНЯЕМ В ДРАЙВЕРЕ
...Примечание: в RT-11SJ без поддержки таймера нет INTLVL.

form
08.07.2014, 21:54
Пара слов о поддержке расширенных номеров устройств в RT-11 V5.5 и новее - вытаскивать эту инфу из документации непросто, а посему напишу здесь как все делается.
...
;+
;В ЭТОМ ПРИМЕРЕ ЕСЛИ В .CND ФАЙЛЕ ПРОПИСАНА ПОДДЕРЖКА РАСШИРЕННЫХ
;НОМЕРОВ УСТРОЙСТВ (0-77), МЫ ВКЛЮЧАЕМ ТАКУЮ ПОДДЕРЖКУ ДЛЯ ДРАЙВЕРА.
;ТАКАЯ ЗАВИСИМОСТЬ НЕ ЯВЛЯЕТСЯ ОБЯЗАТЕЛЬНОЙ - ДРАЙВЕР БЕЗ ПОДДЕРЖКИ
;РАСШИРЕННЫХ НОМЕРОВ МОЖЕТ РАБТАТЬ В СИСТЕМЕ С ПОДДЕРЖКОЙ И НАОБОРОТ.
;-
.IIF NDF UNI$64 UNI$64=0

;+
;ДЛЯ ПОДДЕРЖКИ РАСШИРЕННЫХ НОМЕРОВ УСТРОЙСТВ, В ДРАЙВЕРЕ ДОЛЖНО БЫТЬ
;ОПРЕДЕЛЕНО XX$N64=1 (ГДЕ XX - ИМЯ ДРАЙВЕРА).
;-
.IF NE UNI$64
XX$N64 = 1 ;ЕСТЬ ПОДДЕРЖКА
.IFF
XX$N64 = 0 ;НЕТ ПОДДЕРЖКИ
.ENDC
...
.IF NE XX$N64
;+
;В .DRDEF ДОЛЖНО БЫТЬ УКАЗАНО UNIT64=YES ДЛЯ ПОДДЕРЖКИ РАСШИРЕННЫХ
;НОМЕРОВ УСТРОЙСТВ. ПО УМОЛЧАНИЮ ОДНОБУКВЕННОЕ ИМЯ УСТРОЙСТВА СОВПАДАЕТ
;С ПЕРВОЙ БУКВОЙ ИМЕНИ. ЕСЛИ ТРЕБУЕТСЯ ДРУГАЯ БУКВА, НУЖНО
;ОПРЕДЕЛИТЬ XX$PN2=^RY (ГДЕ Y - НУЖНАЯ БУКВА).
;-
.DRDEF XX,367,FILST$!VARSZ$!SPFUN$,0,0,0,UNIT64=YES
.DRPTR FETCH=XXLOA,LOAD=XXLOA,RELEASE=XXUNL,UNLOAD=XXUNL
.IFF
.DRDEF XX,367,FILST$!VARSZ$!SPFUN$,0,0,0
.ENDC
...
MOVB Q$UNIT(R4),R1 ;ПОЛУЧАЕМ НОМЕР УСТРОЙСТВА
BIC #^C7,R1 ;УБИРАЕМ ЛИШНИЕ БИТЫ
.IF NE XX$N64
;+
;ДОПОЛНИТЕЛЬНЫЕ БИТЫ РАСШИРЕННОГО НОМЕРА УСТРОЙСТВ БЕРУТСЯ ИЗ
;Q.FUNC ЭЛЕМЕНА ОЧЕРЕДИ И ОПРЕДЕЛЯЮТСЯ ТАК:
; БИТ: 876543210
; TNNNFFFFF
;
;ЕСЛИ T=0, ЭТО READ, WRITE ИЛИ ФУНКЦИИ РАБОТЫ С ФАЙЛАМИ ДЛЯ SPECL$ УСТРОЙСТВ.
;В ЭТОМ СЛУЧАЕ NNN - СТАРШИЕ БИТЫ НОМЕРА УСТРОЙСТВА, FFFF - ФУНКЦИЯ (000-017)
;
;ЕСЛИ T=1, ЭТО SPFUN, В ЭТОМ СЛУЧАЕ NNN - НУЖНО ИНВЕРТИРОВАТЬ,
;FFFF - ФУНКЦИЯ (360-377)
;-
MOVB Q$FUNC(R4),R2 ;ПОЛУЧАЕМ СТАРШИЕ БИТЫ
BPL 10$ ;PL - OK
COM R2 ;ИНВЕРТИРУЕМ ДЛЯ SPFUN
10$: BIC #^C160,R2 ;УБИРАЕМ ЛИШНЕЕ
ASR R2 ;ДОБАВЛЯЕМ
BIS R2,R1 ;
.ENDC
...
;+
;ДЛЯ МОНИТОРА С ПОДДЕРЖКОЙ РАСШИРЕННЫХ УСТРОЙСТВ И ПРИВЯЗКИ
;УСТРОЙСТВА ТРЕБУЕТСЯ ЗАПОЛНИТЬ/ОЧИСТИТЬ НЕКОТОРЫЕ ТАБЛИЦЫ.
;-
.IF NE XX$N64
.PSECT SETOVR
$SYPTR = 54 ;УКАЗАТЕЛЬ НА RMON
$PNPTR = 404 ;АДРЕС ТАБЛИЦЫ $PNAME

$CNFG3 = 466 ;ТРЕТЬЕ СЛОВО КОНФИГУРАЦИИ СИСТЕМЫ
CF3.OW = 2000 ;В СИСТЕМЕ ЕСТЬ ТАБЛИЦА $OWNER
CF3.64 = 400 ;СИСТЕМА ПОДДЕРЖИВАЕТ РАСШИРЕННЫЕ
;НОМЕРА УСТРОЙСТВ

;+
;НА ВХОДЕ В ПОДПРОГРАММЫ ЗАГРУЗКИ/ВЫГРУЗКИ
;R2 = КОЛИЧЕСТВО СЛОТОВ ДЛЯ УСТРОЙСТВ (*2)
;R5 = УКАЗАТЕЛЬ НА $ENTRY ДРАЙВЕРА
;-
XXLOA:: CALL FIXOWN
BEQ 10$
ADD #XX$X64-XXLQE,@R1
10$: RETURN

XXUNL: CALL FIXOWN
BEQ 10$
CLR @R1
10$: RETURN

;+
;НА ВХОДЕ
;R2 = КОЛИЧЕСТВО СЛОТОВ ДЛЯ УСТРОЙСТВ (*2)
;R5 = УКАЗАТЕЛЬ НА $ENTRY ДРАЙВЕРА
;
;НА ВЫХОДЕ
;Z=1 - НИЧЕГО НЕ ТРЕБУЕТСЯ ДЕЛАТЬ
;-
FIXOWN: MOV @#$SYPTR,R1 ;ПОЛУЧАЕМ АДРЕС RMON
BIT #CF3.64,$CNFG3(R1) ;ЕСТЬ ПОДДЕРЖКА РАСШИРЕННЫХ НОМЕРОВ?
BEQ 10$ ;НЕТ
BIT #CF3.OW,$CNFG3(R1) ;ЕСТЬ ТАБЛИЦА $OWNER
BEQ 10$ ;НЕТ
MOV R2,R3
ASL R3
ASL R3
ADD R2,R3
MOV $PNPTR(R1),-(SP)
ADD R1,@SP
ADD R2,@SP
MOV R5,R1
SUB (SP)+,R1
ADD R5,R1
SUB R3,R1
CMP -(R1),-(R1)
MOV @R5,-(R1)
10$: RETURN
.ENDC

hobot
08.07.2014, 23:58
form, а какие есть варианты запуска COM файла из приложения?
через .CHAIN я понимаю - ничего не получится, надо наверное CSI команду
формировать-передавать в MON ? (возможно уже обсуждали, но я что то не нашёл, нашлась только шпора Patrona по обработке приложением входящего CSI в теме pascal/macro-11). Простой пример такой надобности -
к примеру в рамках сборника игр для эмулятора перед стартом игры - поднастроить УК-НЦ палитру или загрузить шрифт, а затем уже стартануть игру. В общем когда нужно цепочку команд выполнить, и есть ли шанс в процессе (наверное опять таки нету) избежать возможности прервать исполнение COM файла пользователем?

form
09.07.2014, 05:26
form, а какие есть варианты запуска COM файла из приложения?

Запускается командой .EXIT в особом режиме. Пример есть в описании макробиблиотеки.

form
15.07.2014, 11:58
Еще пара слов про драйверы... Фича: в инсталяционной процедуре допускается обращение к несуществующей памяти/несуществующему регистру, при этом бит C взводится в случае ошибки. Соответственно можно использовать TST для проверки наличия регистра.

form
05.11.2014, 21:01
Пример выполнения определенного кода при любом выходе из программы (.EXIT, CTRL/C, ?MON-F-Ошибка):
$E16LS ==: 316 ;СМЕЩЕНИЕ ДО ТАБЛИЦЫ EMT 340-357
$JOBNU ==: 322 ;ТЕКУЩИЙ НОМЕР ЗАДАНИЯ

E6.EXI =: 20 ;ХУК ДЛЯ .EXIT

.MCALL .PRINT ;СИСТЕМНЫЕ МАКРОСЫ

START:: MOV @#$SYPTR,R5 ;ПОЛУЧАЕМ АДРЕС RMON
ADD R5,JOBNU ;СОХРАНЯЕМ АДРЕС JOBNUM
ADD $E16LS(R5),R5 ;ПОЛУЧАЕМ АДРЕС ТАБЛИЦЫ EMT
MOV E6.EXI(R5),R0 ;ПОЛУЧАЕМ АДРЕС ПОДПРОГРАММЫ
ADD R5,R0 ;...ОБРАБОТКИ .EXIT
MOV R0,E6EXI ;СОХРАНЯЕМ
MOV #EHOOK,R0 ;УСТАНАВЛИВАЕМ ХУК
SUB R5,R0 ;...
MOV R0,E6.EXI(R5) ;...ДЛЯ .EXIT

JMP R0 ;КОМАНДА, ВЫЗЫВАЮЩАЯ ПАДЕНИЕ

EHOOK:: TST @(PC)+ ;ФОНОВОЕ ЗАДАНИЕ АКТИВНО?
JOBNU:: .WORD $JOBNU ;
BNE 10$ ;НЕТ
;+
;ЗДЕСЬ ПОМЕЩАЕМ ЛЮБОЙ КОД КОТОРЫЙ ДОЛЖЕН ВЫПОЛНЯТЬСЯ ПРИ ЛЮБОМ ВЫХОДЕ
;ИЗ ФОНОВОГО ЗАДАНИЯ. ДЛЯ .EXIT ИМЕЕТ ЗНАЧЕНИЕ РАВЕН R0 НУЛЮ ИЛИ НЕТ.
;ПОСКОЛЬКУ МЫ ЛОВИМ ТОЛЬКО СВОЙ ОСТАНОВ, ПРОСТО СЧИТАЕМ, ЧТО ЕМУ НЕ НУЖНО
;БЫТЬ РАВНЫМ НУЛЮ (НЕ ВЫПОЛНЯТЬ .HRESET ПО ВЫХОДУ).
;-
.PRINT #EXMSG ;ПЕЧАТАЕМ СООБЩЕНИЕ
MOV @#$SYPTR,R0 ;ПОЛУЧАЕМ АДРЕС RMON
ADD $E16LS(R0),R0 ;ПОЛУЧАЕМ АДРЕС ТАБЛИЦЫ EMT
MOV E6EXI,-(SP) ;УБИРАЕМ
SUB R0,@SP ;...ХУК
MOV (SP)+,E6.EXI(R0) ;...ДЛЯ .EXIT
10$: JMP @(PC)+ ;ВЫПОЛНЯЕМ .EXIT
E6EXI:: .BLKW ;

EXMSG: .ASCIZ <15><12>/*** BYE BYE ***/<15><12>

.END START

.EX ATEXIT

?MON-F-Trap to 10 001042

*** BYE BYE ***


.

nzeemin
23.01.2015, 01:47
С небольшой правкой (stricmp -> strcasecmp) собирается и не под visual studio :-)

Мне по-другому пришлось заменить для VS2008:

#define stricmp _stricmp

А так вообще MACRO11.exe собралось и работает, и походу тот же объектный файл даёт.

Ещё бы LINK под современную систему получить.

DJs3000
23.01.2015, 02:04
А можно глупый вопрос? Новые игры для УКНЦ кто-то делает сейчас или все что есть из игр это то что написано было во времена УКНЦ?

Titus
23.01.2015, 02:18
А можно глупый вопрос? Новые игры для УКНЦ кто-то делает сейчас или все что есть из игр это то что написано было во времена УКНЦ?

Похоже, что пока никто.

Хотя, некоторые грозились, вплоть до SuperMario (благо, палитра позволяет).

Patron
23.01.2015, 13:30
Интересный способ применяется в ранних версиях Unix для получения указателя на структуру ( заголовок буфера ) из любого указателя на любой член структуры ( на текущую позицию в буфере ).

Для этого нужно, чтобы размер буфера и его выравнивание в памяти были кратны степени 2 ( например: буфера по 8 байтов, выровненные в памяти по границе 010 ) - тогда простое стирание соответствующего количества младших битов ( 07 ) у любого указателя на содержимое буфера даёт указатель на заголовок буфера.

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

bigral
23.01.2015, 19:01
Интересный способ применяется в ранних версиях Unix для получения указателя на структуру ( заголовок буфера ) из любого указателя на любой член структуры ( на текущую позицию в буфере ).

Для этого нужно, чтобы размер буфера и его выравнивание в памяти были кратны степени 2 ( например: буфера по 8 байтов, выровненные в памяти по границе 010 ) - тогда простое стирание соответствующего количества младших битов ( 07 ) у любого указателя на содержимое буфера даёт указатель на заголовок буфера.

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

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

Если я правильно понял то суть вопроса в том, что обычно для вычисления адресса элемента массива нужно умножить длинну элемента массива на индекс элемента и прибавить к адресу начала массива. Эта задача может быть ускоренна если сами массивы распологать начиная с адрессов кратным степеням 2 и использовать длинну элемента массива тоже кратную степеням 2-ки, так как в этом случае операция умножения превращается "в сдвиг в лево". Кроме того из любого указателя на адрес внутри любого элемента можно будет легко вычислить адрес начала елемента наложив на него маску (соответствующую длинне 1 элемента массива) операцией AND.

hobot
23.01.2015, 19:12
bigral, а мне вот интересно 010 и 07 - в сообщении Patrona, это восьмиричные
числа?

Patron
23.01.2015, 19:48
как может быть связный список без связейСписок со связями, но нигде в программе нет ни одного отдельного указателя ни на один из заголовков элементов списка ( только указатели на хранимое в списке содержимое ). Когда надо добавить или исключить элемент списка - у любого из указателей на содержимое нужного элемента обнуляются младшие биты и он превращается в указатель на заголовок этого элемента списка.

nzeemin
23.01.2015, 21:35
Исходники LINK от RT-11 V5.7...

Чтиво очень интересное, но с виду тут нехватает модулей LNKEM и LNKLB1 для полноты картины. Можете посмотреть, есть ли они там поблизости? возможно это не исходники а просто объектные модули.

form
23.01.2015, 21:40
нехватает модулей LNKEM и LNKLB1 для полноты картины. Можете посмотреть, есть ли они там поблизости?

В архиве.

Patron
08.02.2015, 23:05
В позиционно-независимом коде доступ к абсолютным адресам затруднён, поэтому записать в R0 адрес нулевого байта можно так:


CRLF: MOV PC,R0 ;GET A NULL BYTE POINTER IN R0
MOV R0,R0 ;NO-OP WHOSE BOTTOM BYTE IS 0!!!!!
.PRINT ;PRINTING NULLSTRING IS A CRLF
RETURN

form
09.02.2015, 08:10
Кое-что уже раньше писал, на всякий случай обновлюсь с учетом накопившегося... Пока есть время побездельничать ;)

Сохранение регистра без изменения признаков в слове состояния процессора:
JSR R0,@PC ;СОХРАНИТЬ R0 В СТЕКЕ

Очистка памяти и чистый останов после очистки (при выключенном/отсутствующем MMU):
MOV #160000,SP ;ВЕРХ ПАМЯТИ (+2)
MOV (PC)+,@#0 ;ИНСТРУКЦИЯ
CALL -(PC) ; ВЫЗОВА САМОГО СЕБЯ
CLR PC ;ПЕРЕХОД НА ИНСТРУКЦИЮ

Данный способ не будет работать на J11 процессорах в виду возникновения прерывания по 4 как только SP опустится ниже 400.

В MACRO-11 названия инструкций кроме всего прочего - константы, равные коду инструкции с обнуленными битами аргумент(а,ов):
<CLV>!<CLC> ;ОЧИСТИТЬ БИТЫ V и C
MOV #BR,R0 ;ЗАНЕСТИ 400 В R0

Немного о совместимости. Директивы .PSECT могут кардинально изменить картину. Например
MOV #NOP,SUBR

SUBR: BR XXX ;ЗАМЕНЯЕМАЯ ИНСТРУКЦИЯ
не сработает если программа собрана с разделением I/D пространств (LINK/ID в RT-11, TKB /ID в RSX-11, RSTS/E итд). Кроме того следует помнить, что в многопользовательских задачах (TKB /MU) в RSX-11, секции, объявленные как RO аппаратно защищаются от записи. Также не следует полагаться на то, что порядок секций будет совпадать с указанным в исходниках - он может быть измененн опциями линковщика.

Еще о совместимости: OBJ файлы во всех DECовских системах (RT-11, RSX-11, RSTS/E итд) абсолютно совместимы. Это значит, что скомпилированный в одной системе код может быть перенесен в другую систему прямо в виде OBJ файла (разумеется, в файле должен быть чистый код - без использования системно-зависимого функционала). Также следует помнить об особенностях работы с файлами в разных системах: перенос OBJ файлов RSX-11 в RT-11/DOS-11 или обратно требует правильного преобразования файлов (FLX /FB например). Это однако относится только к обычным или "склеенным" (допускается использование таковых) OBJ файлам. Библиотечные файлы RT-11 (также имеющие расширение OBJ) несовместимы с другими системами (а также в случае копирования в RSX-11 должны бысть скопированы 1:1 [FLX /IM]).

Пара слов о глобальных переменных. В RSX-11 и в RT-11 V5+ неопределенные ссылки автоматически считаются глобальными. В RT-11 V4 и ранних неопределенные ссылки по умолчанию вызывают ошибку. Если требуется совместимость, есть смысл перечислить все внешние ссылки в директиве .GLOBL или разрешить по умолчанию считать глобальными директивой .ENABL GBL.

Верхний адрес программы:
MOV #END,R0 ;НЕПРАВИЛЬНОЕ ПОЛУЧЕНИЕ ВЕРХНЕГО АДРЕСА

END:
.END START
пример выше может быть некорректным например если используются библиотечные вызовы. Во избежание несовместимостей, стоит воспользоваться директивой .LIMIT которая записывает два слова (начальный и конечный адрес программы) или содержимым ячейки @#50 (или результатом вызова .SETTOP) в RT-11.

Ну и еще немного о совместимости:
MOV R0,-(R0)
MOV R1,(R1)+
JMP (R0)+
MOV PC,LABEL
результат выполнения вышеперечисленных инструкций зависит от процессора и потому не предсказуем заранее. Впрочем компилятор выдаст ошибку Z на подобные команды.

Ну и напоследок (а то уже работать пора) мое любимое - немного о фортране.
CALL SUBR(1,2)
вышенаписанный оператор отнюдь не вызывает подпрограмму SUBR с аргументами 1 и 2 как многие даже изучавшие фортран могут подумать. Аргументы 1 и 2 гарантируются только при первом вызове подпрограммы (во многих программах можно видеть вызовы вроде RAN(0,0) для получения случайного числа - это как раз такой случай). В дальнейшем сама подпрограмма может изменить их значения (все аргументы в фортране - ссылки). Кстати именно поэтому все аргументы внешних фортрановских подпрограмм для паскаля обязаны быть объявлены как VAR.

Подпрограмма для фортрана (если она написана на MACRO-11) точно знает сколько аргументов передано и какие из них пропущены. Выглядит это так: на входе в подпрограмму R5 содержит адрес блока аргументов. Первое слово содержит количество аргументов (включая пропущенные), далее следуют ссылки на аргументы. Если в ссылке прописано -1, это означает пропущенный аргумент. Сохранять регистры в подпрограмме, написанной на MACRO-11 для фортрана, не требуется.

А еще фраза "God is real, unless declared integer" полностью соответствует правилам фортрана где без явного объявления все переменные начинающиеся с букв от I до N считаюся целыми, а все остальные - вещественными ;)

Пока все, пора работать, позже может еще чего-нибудь напишу.

nzeemin
11.03.2015, 01:28
Где-то так <033>%!0<033>LI@@7@@0@@0<033>%!3.
Алексей, а есть где-то подробное описание команд графического режима? В коде я вижу кроме LI есть ещё MV, MP, MM, ML, RU, RR, в общем всего полтора десятка.
В частности, интересует возможность переключить режим основной части экрана на 40 символов в строке и обратно.

hobot
11.03.2015, 03:21
nzeemin, Никита. я не программист и не совсем понимаю что есть графический режим, но вот я
пользуюсь древней шпаргалкой (http://zx-pk.ru/showpost.php?p=418694&postcount=107)для УК-НЦ )



PROCEDURE TTYOUT(N:INTEGER);
CONST R=200B;
VAR A ORIGIN 177564B, D ORIGIN 177566B:INTEGER;
BEGIN
WHILE (A AND R)=0 DO;
D:=N;
END;


PROCEDURE CURSOR(CC:INTEGER); /* цВЕТ КУРСОРА 60-ЧЁРНЫЙ. 67-БЕЛЫЙ */
BEGIN
TTYOUT(33B);TTYOUT(247B);TTYOUT(CC);
END;

PROCEDURE SCRFRM(SS:INTEGER);
BEGIN
TTYOUT(33B);TTYOUT(246B);TTYOUT(SS); /* 62 - 40Х80 */
END;

PROCEDURE SETCOLOR(CT,CZ,CS:INTEGER);
BEGIN
TTYOUT(33B);TTYOUT(240B);TTYOUT(CT); /* СИМВОЛ */
TTYOUT(33B);TTYOUT(241B);TTYOUT(CZ); /* ЗНАКОМЕСТ */
TTYOUT(33B);TTYOUT(242B);TTYOUT(CS); /* ЭКРАН */
END;

PROCEDURE TEXTCOLOR(CT:INTEGER); /* ЦВЕТ ТЕКСТА 60-ЧЕРНЫЙ 67-БЕЛЫЙ */
BEGIN
TTYOUT(33B);TTYOUT(240B);TTYOUT(CT);
END;


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


---------- Post added at 03:21 ---------- Previous post was at 02:39 ----------

Esc ГРАФ-F (033 246) - установка формата экрана:
Esc ГРАФ-F 1 (033 246 061) - 80x24;
Esc ГРАФ-F 2 (033 246 062) - 40x24;
Esc ГРАФ-F 3 (033 246 063) - 20x24;
Esc ГРАФ-F 4 (033 246 064) - 10x24.

http://www.felixl.com/Uknc_RAM_description_app

hobot
11.03.2015, 17:20
nzeemin, ещё после вашего запроса, такое родилось предложение
http://zx-pk.ru/showpost.php?p=782076&postcount=150

Я не знаю будет ли у вас время покопаться в исзодниках,
они доступны на самом первом (и других) образах от Сергея в архиве.

Почему именно на этот исходник даю ссылку, там некая процедура
присутствует "инициализация графического режима".

nzeemin
14.03.2015, 02:26
hobot, спасибо за подсказки.
Подразню тебя иллюстрацией прогресса работы над портом (геймплея пока ещё нету конечно):
https://img-fotki.yandex.ru/get/16116/7448436.8/0_95fc7_1d803465_orig

hobot
14.03.2015, 14:01
hobot, спасибо за подсказки.
Подразню тебя иллюстрацией прогресса работы над портом (геймплея пока ещё нету конечно):
https://img-fotki.yandex.ru/get/16116/7448436.8/0_95fc7_1d803465_orig

:smile:

Вот это да! ) Даже прослезился! )
Это шикарнейший анонс, Никита, я записываюсь в тестеры !
И в целом любая поддержка с моей стороны для этого проекта! )

Если могу помочь какой-то рутиной пособить - без сложного низкоуровневого, пишите мне ТЗ в ЛС )

Ура!

nzeemin
15.03.2015, 14:54
Это шикарнейший анонс, Никита, я записываюсь в тестеры !
И в целом любая поддержка с моей стороны для этого проекта! )

Чтобы не засорять эту ветку, вынес в отдельную тему:
http://zx-pk.ru/showthread.php?p=788784#post788784

form
25.03.2015, 15:42
Решил ради интереса попробовать как работают ALR в BASIC-11. Подробно расписывать не буду, все описано в Installation Guide, User Guide и Language Reference. На пробу собрал BASIC, понимающий две подпрограммы PEEK и POKE для работы с памятью.

Простенькая программка, печатающая строку на экран через регистры терминала:
LIST


TTREG 25-MAR-15 18:18:23

10 C%=OCT('177564') \ B%=OCT('177566')
20 S$=CHR$(13)&CHR$(10)&'*** HELLO, WORLD! ***'&CHR$(13)&CHR$(10)
30 FOR I%=1% TO LEN(S$)
40 O%=ASC(SEG$(S$,I%,I%))
50 CALL 'PEEK'(C%,V%) \ IF V%<>128 THEN 50 \ CALL 'POKE'(B%,O%)
60 NEXT I%

READY
RUN


TTREG 25-MAR-15 18:22:16


*** HELLO, WORLD! ***

READY
Принцип такой: берется дистрибутив BASIC-11 (в архиве должен быть, я выкладывал), копируется файл BSCLI.MAC в MYCLI.MAC, по метке FTBL добавляются ссылки на функции:
FTBL: .WORD PEEKNM,POKENM ;АДРЕСА ДЕСКРИПТОРОВ ПОДПРОГРАММ
.WORD 0 ;КОНЕЦ СПИСКА
Ниже перед строчкой ".GLOBL UACTST" добавляем дескрипторы и сами подпрограммы:
PEEKNM: .ASCII <4>/PEEK/ ;<ДЛИНА>/ИМЯ/
.EVEN ;ВЫРАВНИВАНИЕ
.WORD PEEKST ;АДРЕС ПОДПРОГРАММЫ
POKENM: .ASCII <4>/POKE/
.EVEN
.WORD POKEST

;+
;ПОДПРОГРАММА ПОЛУЧЕНИЯ ДВУХ АРГУМЕНТОВ С ПРОВЕРКОЙ
;ТИПА (ПОДДЕРЖИВАЕТСЯ ТОЛЬКО INTEGER).
;-
GETARG: MOV -2(R5),R4 ;СОХРАНЯЕМ ССЫЛКУ НА
;ДЕСКРИПТОРЫ АРГУМЕНТОВ
CMP #101002,(R5)+ ;ПРОВЕРЯЕМ ЧТО ДВА АРГУМЕНТА
BNE ARGERR ;НЕТ
MOV (R5)+,R1 ;ПОЛУЧАЕМ ССЫЛКУ НА АРГ 1
MOV (R5)+,R2 ;ПОЛУЧАЕМ ССЫЛКУ НА АРГ 2
.TRPSET #AREA,#BUSTMO ;ПЕРЕХВАТЫВАЕМ ПРЕРЫВАНИЯ 4/10
CALL @PC ;ВЫПОЛНЯЕМ ДВАЖДЫ
MOV @R4,R0 ;ОПИСАНИЕ АРГУМЕНТА
BIC #^C177,R0 ;УБИРАЕМ ЛИШНЕЕ
CMP #23,R0 ;ТИП INTEGER?
BNE ARGERR ;НЕТ
BIT #200,(R4)+ ;ПРОВЕРЯЕМ ПЕРЕМЕННАЯ/ВЫРАЖЕНИЕ
RETURN ;ВОЗВРАТ

ARGERR: JMP $ARGER ;ОШИБКА: НЕВЕРНЫЕ АРГУМЕНТЫ

BUSTMO: MOV #BUSERR,@SP ;ПЕРЕДАЕМ АПРАВЛЕНИЕ НА BUSERR
RTI ;

BUSERR: JSR R1,$BOMB ;ПЕЧАТЬ СООБЩЕНИЯ ОБ ОШИБКЕ
.ASCIZ /INVALID ADDRESS/
.EVEN
RETURN ;ВОЗВРАТ

PEEKST: CALL GETARG ;ПОЛУЧАЕМ АРГУМЕНТЫ
BNE ARGERR ;ВТОРОЯ АРГУМЕНТ - КОНСТАНТА - КЮ!
MOV @(R1)+,@R2 ;ЧИТАЕМ СОДЕРЖИМОЕ ПАМЯТИ
RETURN: .TRPSET #AREA,#0 ;ОТКЛЮЧАЕМ ПЕРЕХВАТ ПРЕРЫВАНИЯ
RETURN ;ВОЗВРАТ

POKEST: CALL GETARG ;ПОЛУЧАЕМ АРГУМЕНТЫ
MOV @R2,@(R1)+ ;ПИШЕМ В ПАМЯТЬ
BR RETURN ;ВОЗВРАТ

AREA: .BLKW 2 ;БЛОК EMT

Компилируем модуль командой "MAC BSASM+BSMAC+MYCLI/OB" и выполняем генерацию BASIC-11:
.RU BASIC
BASIC-11/RT-11 V02-03S
OPTIONAL FUNCTIONS (ALL, NONE, OR INDIVIDUAL)? A

READY
RUN SUCNFG
BASIC-11/RT-11 V02 Configuration Program

Type "?<ret>" after any prompt for HELP.

.SAV and .COM file name (default is BASIC):

Do you want a map? (Y or N; default is N):

Background or Foreground ? (B or F; default is B):

Do you want PRINT USING? (Y or N; default is Y):

Do you want CALL support? (Y or N; default is N): Y

Enter module names (one per line): MYCLI
Module name: BSCLLB
Module name:

Single or Double precision math? (S or D; default is S):

Arithmetic hardware (NONE, EAE, EIS, FIS, or FPU; default is NONE): FPU

Do you want the transcendental functions? (Y or N; default is Y):

Do you want the SUB command? (Y or N, default is Y):

Do you want the RESEQ command? (Y or N, default is Y):

Do you want long error messages? (Y or N; default is Y):

Overlay structure type (1, 2, 3, 4, or 5; default is 1):

To create the BASIC that you have just defined,
type "BYE<ret>" after BASIC prints "READY". When the system
prompts for input, type "@BASIC<ret>" to link the new BASIC.
You may type "R BASIC<ret>" to run it.
run it by typing only "BASIC<ret>".

READY
BYE

.@BASIC
Собственно все :)

AFZ
27.03.2015, 17:43
MOV 12(SP),-(SP) ;ПЕРЕНОСИМ АДРЕС ВОЗВРАТА
MOV R5,14(SP) ;СОХРАНЯЕМ R5
JSR PC,@(SP)+ ;СОПРОГРАМИМ ВЫЗВАВШЕГО Кстати, вот это самое "сопрограммим" - весьма плодотворный прием. Мне он понравился еще с того момента, как я заглянул внутрь .INTEN, после чего я его начал применять, в том числе и в некоторых, скажем так, нетрадиционных местах. Напимер, при программировании драйверов. Загляни, допустим, в исходник LP. О, ужас!Как там воюют с той же эмуляцией Таба, да и с другими вещами... А используя "сопрограммы" - сплошной комфорт, пишешь программу линейно, а там, где нужно ждать прерывания пишешь:
CALL InWait
в которой достаешь из стека и сохраняешь в статической памяти адрес возврата, нужные регистры и пр. и выходишь. Получив же прерывание, сделаешь .INTEN (вернее, его сделает .DRAST), достаешь из той самой статической памяти всё сохраненное, после чего переходишь по сохраненному адресу возврата. И программа сразу же становится линейной и понятной. Правда, никакой реентерабельности, но она от драйверов RT-11 требуется только в случае, когда один драйвер обслуживает несколько однотипных устройств, но и тогда цена вопроса - таблица обслуживаемых устройств, в которой, кроме всего прочего, предусмотрено место и для сохранения адресов и регистров - для каждого устройства индивидуально. Я так однажды склепал XM-ный драйвер (для TSX, конечно) для какого-то не совсем стандартного сдвоенного компорта, штатное не подошло, да и заказчику нужно было подключать не терминал, а нечто построчно-ориентированное. Так пришлось разобраться и с ХМ-драйверами, и с ведением собственной очереди ввода-вывода для этих устройств (система извещалась о том, что очередь к устройству пуста и можно обращаться, а драйвер продолжал прием или передачу. Естесвенно, повторное обращение к занятому устройству возвращало ошибку, а вот обращение ко второму, свободному, проходило. Програмка была "веселая", сказать, что я облысел именно из-за нее, будет, конечно, преувеличением, но площади лысины она мне добавила наверняка. :)

form
27.03.2015, 17:59
Пятничное баловство :)
.TY HELLO.MAC
.TITLE HELLO
.MCALL .EXIT,.PRINT

START: .PRINT #TEXT
MOV #4000,-(SP)
MOV #10$,-(SP)
RTI
10$: CLR R0 ;ПОРТИМ R0
.PRINT
MOV #1,R0 ;ЕЩЕ РАЗ ПОРТИМ
.PRINT
.EXIT

TEXT: .ASCIZ /HELLO, WORLD!/

.END START


.EX HELLO
HELLO, WORLD!
HELLO, WORLD!
HELLO, WORLD!

.
Эх, жаль мой любимый способ очистить всю память (нижнюю) и чисто остановиться у меня не сработает :)

hobot
27.03.2015, 18:51
MOV #4000,-(SP) MOV #10$,-(SP)
то есть получается приглашение два раза выводится уже не из регистра?
Или я что то не понял? ) А вот что я не понял, что должен делать .PRINT без аргументов по сути?
И вот эти две строки (команды в цитате) имеют смысл, только после первично .PRINT #TEXT? Доп. комментарий - не все так понимают чётко ассемблер - в том числе я,
а тут явно тонкость на знание предмета.

form
27.03.2015, 18:53
то есть получается приглашение два раза выводится уже не из регистра?
Или я что то не понял? ) А вот что я не понял, что должен делать .PRINT без аргументов по сути?

Без аргументов считает, что адрес строки уже в R0 лежит (с аргументом - он сначала туда этот адрес записывает). В данном случае первый .PRINT записал этот адрес в R0, а далее мы переключились на второй набор регистров (фича проца), система же использует всегда первый набор.

hobot
27.03.2015, 19:06
а далее мы переключились на второй набор регистров
Я только мельком в описании читал об этом. На самом деле в плане "безопасной" антисбойной работы очень круто! То есть
MOV #4000,-(SP) MOV #10$,-(SP) - вот это и есть этап переключения?

form
27.03.2015, 19:09
вот это и есть этап переключения?

Установка 11 бита в PSW включает второй набор регистров. Но это фича не на всех процессорах есть. Также вернуть обратно первый набор может оказаться не таким простым делом если программа работает в пользовательском режиме :)

hobot
27.03.2015, 19:16
Но это фича не на всех процессорах есть
судя по теме на ВМ2 есть?
завтра кстати планирую прогреть живую УК-НЦшеньку )))
Лоде Руннер погонять main 4 (http://zx-pk.ru/showpost.php?p=791665&postcount=27)версию от Никиты и кое что из последнего софта перенести на живую машинку.

form
27.03.2015, 19:17
судя по теме на ВМ2 есть?

Нету. В начале темы где-то уже говорилось, что она по сути никогда не была темой про УКНЦ, а больше про RT-11 :)

hobot
27.03.2015, 19:21
а больше про RT-11
Даёшь какие нибудь тонкости именно УК-НЦшные! )))
Может быть очередной привет ПП УК-НЦ от forma?

form
27.03.2015, 19:22
Даёшь какие нибудь тонкости именно УК-НЦшные! )))
Может быть очередной привет ПП УК-НЦ от forma?

Будут силы, попробуй наконец-то завести снова УКНЦа :)
Я вон в IOSCAN добавлял поддержку PPU :)

hobot
27.03.2015, 19:23
Жизненно Нужна утилита изменяющая системное приглашение!!!
Неужели это немыслимо трудный код? )
Особенно тем у кого три символа слева скушал их телевизёр )))

(это строго пригодилось бы всем владельцам УК-НЦ и пользователям RT-11 одновременно!!!)

form
27.03.2015, 19:24
Жизненно Нужна утилита изменяющая системное приглашение!!!
Неужели это немыслимо трудный код? )

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

hobot
27.03.2015, 19:32
Так вроде был драйвер от Alex_K для этого.
Там избыточный функционал выкусывать который мне навыка не хватает,
а использовать как есть - неправильно и не удобно (без уточнений!).


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


Ну могу конечно написать новый.

гарантирую 100 просмотров и 12 спасиб.

form
27.03.2015, 19:52
Еще немного отвлекся от темы, но стало интересно проверить :)
А вообще пора заводить тему по особенностям систем и как их обходить... Возвращаясь к вопросу поставленному мной выше вскользь - легко ли спрыгнуть со второго набора регистров при выполнении программы в пользовательском режиме. Ну разумеется вариант прямой очистки PSW к которому доступ есть в XB/XM/ZB/ZM (в сущности даже из виртуальной задачи) не рассматриваем. Простая программка показала, что спрыгнуть можно легко через SST (например trap to 10):
.TITLE REGS
.IDENT /V01.00/

.MCALL .PRINT,.EXIT,.TRPSET

.ASECT
.=34
.WORD TRSST
.PSECT

START:: .TRPSET #AREA,#ILSST
TRAP 0
MOV #4000,-(SP)
MOV #10$,-(SP)
RTI
10$: TRAP 0
77

ILSST: TRAP 0
.EXIT

TRSST: MOV #PVAL,R0
MOV 2(SP),R1
MOV PC,R2
CALL $CBOMG
.PRINT #PTEXT
RTI

AREA: .BLKW 2

PTEXT: .ASCII /PSW=/
PVAL: .ASCIZ /XXXXXX/

.END START
RT-11ZM:
.RU REGS
PSW=140000
PSW=144000
PSW=170001
TSX-Plus:
.RU REGS
PSW=170000
PSW=174000
PSW=170001

.

Ну и как видим, TRAP сам по себе выводит из второго набора регистров (ну вобщем-то и логично - даже если он передается из системы [если напрямую - то это и так очевидно] - ей нет резона следить за 11 битом PSW) :)

form
27.03.2015, 23:10
утилита изменяющая системное приглашение

Пример драйвера, меняющего системное приглашение. Поскольку тема посвящена программированию, это скорее именно пример ;)
Хотя рабочий. Драйвер требует RT-11 V5.2 или новее (проверку не вставлял - лень было), кому интересно - может доделать. В общем случае, драйвер вешается на стандартный обработчик .PRINT (никаких векторов не перехватывается). Обработчик проверяет номер задания (0) и что задание 0 является KMON'ом (при этом не выполняется никаких сложных вычислений по адресу PC до прерывания). Если да, то проверяются два слова после вызова .PRINT - они уникальны для KMON и во всех RT-11 V5 такие:
SLHOOK: MOV R5,R5
30$: MOV (SP)+,R0
И если все совпало - подставляет свою подсказку. Для SJ монитора (в котором нет слова с номером задания в RMON) код загрузки убирает проверку номера.

form
27.03.2015, 23:23
Ну и на закуску пример как можно наступить на грабли, получив не тот результат который ожидался:
.MAIN. MACRO V05.06 Saturday 28-Mar-15 02:19 Page 1


1 000000 012760 000002 MOV (PC)+,2(R0)
2 000004 000004 .WORD 4
3
4 000001 .END

hobot
28.03.2015, 01:47
И если все совпало - подставляет свою подсказку. Для SJ монитора (в котором нет слова с номером задания в RMON) код загрузки убирает проверку номера.
запустил именно в SJ 5.4G - есть работает, интересный пример, спасибо! )

AFZ
28.03.2015, 05:23
Ну и как видим, TRAP сам по себе выводит из второго набора регистров (ну вобщем-то и логично - даже если он передается из системы [если напрямую - то это и так очевидно] - ей нет резона следить за 11 битом PSW) Так что, в нашей любимой PDP-11 ТАКАЯ дырень в системе безопасности? Команда RTI в юзермоде вообще выполняться не должна, как и любая другая, изменяющая что-либо в PSW кроме NZVC. Банальный срыв стека в недоотлаженной программе и может рухнуть вся многозадачка. Это же неправильно!..

form
28.03.2015, 05:33
Так что, в нашей любимой PDP-11 ТАКАЯ дырень в системе безопасности? Команда RTI в юзермоде вообще выполняться не должна, как и любая другая, изменяющая что-либо в PSW кроме NZVC. Банальный срыв стека в недоотлаженной программе и может рухнуть вся многозадачка. Это же неправильно!..

Никакой дырени в PDP-11. Команда RTI может и должна выполняться в user mode, и она не позволяет ни спрыгнуть с режима ни со второго набора регистров (включить его позволяет - такое поведение документировано). За вторым набором регистров вообще ни одна система не следит, но это не столько дыра, сколько недокументированная фича - через этот набор регистров программы могут общаться друг с другом.

Дыра есть в RT-11XM/XB/ZM/ZB - там виртуальная программа выполняется с битами режима 140000, что по сути дает полный доступ к памяти режима ядра. В TSX+ режим правильно выставляется в 170000 и потому обойти не получится.

---------- Post added at 08:33 ---------- Previous post was at 08:29 ----------

Кстати дыра с битами режима только в чистой виртуальной программе. В VBGEXE тоже устанавливается 170000.

hobot
28.03.2015, 06:19
включить его позволяет - такое поведение документировано
Я понял эту возможность так - пользовательская программа на одном из терминалов спокойно обрабатывает данные на компе, в то время как система работает со стандартными регистрами и обслуживает другой терминал. То есть ,form, ты вроде писал, что KMON всегда использует стандартные регистры.

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

Это же песочница ! ))) Регистровая )))

form
28.03.2015, 06:20
Я понял эту возможность так - пользовательская программа на одном из терминалов спокойно обрабатывает данные на компе, в то время как система работает со стандартными регистрами и обслуживает другой терминал. То есть ,form, ты вроде писал, что KMON всегда использует стандартные регистры.

Это возможность процессора - второй набор регистров R0-R5. При установке бита 11 в PSW выбирается набор R0'-R5', при сбросе R0-R5. При этом в пользовательском или супервизорском режиме программа может только установить этот бит (командой RTI), а сбросить обратно не может. Ни одна система на PDP-11 не использует второй набор регистров, соответственно программа может с ними развлекаться, но следует помнить, что другая программа тоже может с ними поразвлекаться :)