PDA

Просмотр полной версии : Ассемблер PDP-11, попытки что то сделать по статье "Рессурсы УКНЦ/Глава1" Помогите !



electroscat
02.07.2022, 01:38
Доброго времени дорогие коллеги !
Сегодня решил разобраться в ассемблере PDP-11, в целом, это не главная цель, ибо принципы работы ассемблера я в целом понимаю, и что то писал под 8080. С букварем в целом сам принцип кода ясен, и образование комманд тоже.
Не понятно другое. ТАк как в целом, я хочу поработать с графикой УКНЦ, сразу решил изучить как работает видеоадаптер, и полез вот сюда (http://emuverse.ru/wiki/%D0%A0%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B_%D0%A3% D0%9A%D0%9D%D0%A6/%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_1#.C2.A70._.D0.9D.D 0.B5.D0.BC.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BE.D0.B1_.D 1.8D.D0.BA.D1.80.D0.B0.D0.BD.D0.B0.D1.85.):

Ресурсы УКНЦ/Глава 1 (http://emuverse.ru/wiki/%D0%A0%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B_%D0%A3% D0%9A%D0%9D%D0%A6/%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_1#.C2.A70._.D0.9D.D 0.B5.D0.BC.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BE.D0.B1_.D 1.8D.D0.BA.D1.80.D0.B0.D0.BD.D0.B0.D1.85.)
... это статья, которая в целом должна привести меня к пониманию принципов формирования изображения на дисплее УКНЦ. Но... То ли автор статьи - изрядный троль, то ли человек оставил кучу ошибок, с целью сподвигнуть читающих разбираться в коде глубже, то ли опечатки при наборе... Допускаю даже вариант, при котором один из моих УКНЦ что то не так делает, позже буду пробовать на другой машине... В общем, доподлинно наверняка установить причину не реально, но...

Сразу же в примере 1 я наткрулся на некоторое несоответствие поведения машины описанию в статье. Причем, автор время от времени отпускает "веселые" шутки, но совсем не отвечает на возникающие вопросы, не обьясняет как в целом должно быть, ощущение такое, как будто он описывает для тех, кто ну может на уровне чуть ниже чем он, и очень долго сидел за УКНЦ как минимум...
Ну да ладно, в целом, пример 1 я понял, в частности так, что из монитора ПП можно получить доступ к памяти ЦП, а если поправить обеспечение, то так же и из отладчика ЦП можно попасть в память ПП а главное, можно получить доступ к памяти ЦП, которая пользователю не доступна в режиме USER - а доступна в режиме HALT.

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

Тем не менее у меня еще осталась некоторая вера в то что автор реально заинтересован в том, чтобы я понял как это работает, и я приступил к третьему примеру...

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

40040: 012702 MOV #60000, R2
060000
012703 MOV #60100, R3
060100
012701 MOV #37, R1
000037
M: 012223 MOV (R2)+, (R3)+
077103 SOB M, R1

стало:

40040: 012702 MOV #60000, R2
060000
012703 MOV #60100, R3
060100
012701 MOV #37, R1
000037
M: 012223 MOV (R2)+, (R3)+
077102 SOB M, R1

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

После этого я провел эксперимент в отладчике ЦП, Действительно код заработал, и скопировал подпрограмму с адреса 60000 по адресу 60100 - именно в исправленном варианте. Но почему это не заработало в отладчике ПП - я понять не могу.

Даже набрав подпрограмму вручную с адреса 60100 и поменяв местами то что отмечено звездочками - в общем, проделав все что описано - я не получил никакого копирования.

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

Заранее благодарен !!!

- - - Добавлено - - -

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

AFZ
02.07.2022, 05:34
В общем, прошу помочь разобраться в этом всемВообще-то это две отдельные и сильно разные задачи. Одна - освоить систему команд и ассемблер машинки, и вторая - освоить работу с видеосистемой. Первую, естественно, лучше осваивать на ЦП и, если есть возможность (в смысле, диски, не важно, реальные или виртуальные) загрузить RT-11, то, естественно, надо учиться программировать именно под ней.Сочинить несколько программок на простенькие вычисления, консольный ввод-вывод, еще что-нибудь - классические учебные программы. Освоить макро, линкер, научиться запускать и отлаживать задачки.

А управление экраном (разбирательство с видеоадаптером) - это отдельная и довольно сложная задача, тем более, что на УКНЦ это управление сделано на ПП, а это свои сложности. Так, что советую начать с первой задачи. Из учебников для нее могу порекомендовать книгу

М.Сингер

МИНИ-ЭВМ PDP-11:
ПРОГРАММИРОВАНИЕ
НА ЯЗЫКЕ АССЕМБЛЕРА
И ОРГАНИЗАЦИЯ МАШИНЫ


(есть в Сети). Ну, или что-нибудь из УКНЦового - тоже есть несколько книжек.

SuperMax
02.07.2022, 17:48
а скачать можно тут

https://mirrors.pdp-11.ru/search.php?text=%D0%9F%D0%A0%D0%9E%D0%93%D0%A0%D0% 90%D0%9C%D0%9C%D0%98%D0%A0%D0%9E%D0%92%D0%90%D0%9D %D0%98%D0%95+%D0%9D%D0%90+%D0%AF%D0%97%D0%AB%D0%9A %D0%95+%D0%90%D0%A1%D0%A1%D0%95%D0%9C%D0%91%D0%9B% D0%95%D0%A0%D0%90+PDP&page=1

причем там еще есть отличная книжка
Гилл -- Программирование на языке ассемблера для PDP-11 - тоже рекомендую

electroscat
02.07.2022, 21:04
БЛАГОДАРЮ !!!
Литературу скачал, буду изучать, весьма подезная !!!
Сегодня добился исполнения подпрограмм. Действительно, последний код программы копирования - 077102 а не 077103. В остальном, мое знание клавиш управления и небольшие ошибки в коде подвели. Сейчас все работает, часть экрана копируется, и потом другой подпрограммой восстанавливается. Единственное, что я не понял, это то что в статье автор называет "местная хитрость"..
И как следствие - чтобы скопировать экран в память - мне нужно набрать в монирое ПП - 60100<ИСП> а чтобы загрузить в память дисплея сохраненный участок - нужно набрать 60000<ИСП>. Имено так, автор говорит в статье наоборот.. Но это не так важно. Самое интересное сейчас - это как раз местная хитрость, процитирую автора:


А для вызова этих подпрограмм используем местную хитрость — эти подпрограммы сделаем спецфункциями:

13144: 60000
13146: 60100

Теперь при посылке в терминал (то есть на экран) кода <001> (соответствует комбинации клавиш <УПР>+A) будет выполняться сохранение, а при посылке кода <002> (<УПР>+B) — восстановление левой верхней четверти рабочего экрана.

Я пробовал в эти ячейки вписать адреса и в памяти ПП и в памяти ЦП - и результата ровным счетом никакого, то есть, <УПР>+<A> и <УПР>+<B> не работают ни в мониторах ЦП и ПП ни в РТ-11, ни в каком другом месте...

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

- - - Добавлено - - -

И кстати, пробовал, на всякий случай, код на другой машине, в целом, работает 1 в 1 ... Машины исправны обе три )))

- - - Добавлено - - -

Ну и хотел бы таки немного уточнить свою позицию в плане изучения ассемблера. В целом, я писал на ассемблере, причем достаточно недавно и достаточно плодотворно, только на ассемблере 8080. Есть ряд графических программ, так же я написал, или переписал и усовершенствовал ПЗУ загрузчик для Вектора 06Ц, множество программ подверг реверс инжинирингу и усовершенствовал. В следствии того, что работа ассемблера в целом похожа на разных процессорах, а разница в основном в типах адресации и еще в нескольких мелочах - то в целом, изучать отдельно ассемблер огромной необходимости нет. Разница понимается как раз в режиме отладки кода, когда какие то непонятные участки начинаешь разбирать, и тогда уже всплывают особенности конкретных команд. На мой взгляд, разбирая готовый код в "боевом режиме" можно гораздо быстрее разобраться в отличиях, причем при этом непосредственно уже занимаясь решением поставленной задачи. Я могу ошибаться, но на мой взгляд так конкретная задача выполнится быстрее.

- - - Добавлено - - -

И еще, хотелось бы ваших рекомендацй, какая среда для разработки на ассемблере наиболее проста в установке и использовании для УКНЦ ? Есть ли какие то среды на PC в которых можно компилить ассемблерный код и получать .SAV и запускать на реальной машине ?

Alex_K
02.07.2022, 21:21
Я пробовал в эти ячейки вписать адреса и в памяти ПП и в памяти ЦП - и результата ровным счетом никакого, то есть, <УПР>+<A> и <УПР>+<B> не работают ни в мониторах ЦП и ПП ни в РТ-11, ни в каком другом месте...
Автор правильно пишет, что это будет работать при обработке этих кодов подпрограммой терминала. Например эти коды со стороны ЦП можно записать в регистр 0177564. А лучше перейти в режим АВТОНОМ нажатием <D> в пультовом отладчике. В этом режиме всё что вы нажимаете будет сразу отрабатываться, так что нажимать <УПР+A> и <УПР+B> надо там. Выход обратно в пульт - <УПР+Ц>.

- - - Добавлено - - -


И еще, хотелось бы ваших рекомендацй, какая среда для разработки на ассемблере наиболее проста в установке и использовании для УКНЦ ? Есть ли какие то среды на PC в которых можно компилить ассемблерный код и получать .SAV и запускать на реальной машине ?
Лучше это делать в нативной среде. А так тектовый редактор удобнее всего в FAR-е, то есть эмулятор RT-11 (https://zx-pk.ru/threads/24755-emulyator-rt-11.html). Удобная вещь!

electroscat
02.07.2022, 21:50
Нативная среда это круто, но это вызывает еще вопрос, а есть ли описание хорошее, как работать с нативной средой, и что она должна в себя включать ?

reddie
02.07.2022, 22:12
работа ассемблера в целом похожа на разных процессорах, а разница в основном в типах адресации и еще в нескольких мелочах
Вот как раз восьмеричная система PDP (УКНЦ) и куча способов адресации, а также их запись крышу по первости сносит капитально.
После Спектрума как-то трудно привыкать, что вместо JP ADDR (у Z80) нужно вписывать шифрограммы типа JMP @#ADDR (когда нужна абсолютная адресация).

Alex_K
02.07.2022, 22:41
Нативная среда это круто, но это вызывает еще вопрос, а есть ли описание хорошее, как работать с нативной средой, и что она должна в себя включать ?
Как пользоваться этой средой, описано в самой теме. Главное каталог файла rt11.exe поместить в переменную PATH. А далее можно создать каталог, в котором будете работать. В этом каталоге создаёте нужный вам MAC-файл на ассемблере. Потом вы его можете транслировать и линковать. Можно запустить rt11 и получить приглашение системы, уже вводить там команды. А можно в FAR-е дать команду rt11 MAC ваш_файл, запустится эмулятор, выполнить команду и выйдет обратно в Windows.

- - - Добавлено - - -


Вот как раз восьмеричная система PDP (УКНЦ) и куча способов адресации, а также их запись крышу по первости сносит капитально.
После Спектрума как-то трудно привыкать, что вместо JP ADDR (у Z80) нужно вписывать шифрограммы типа JMP @#ADDR (когда нужна абсолютная адресация).
Восьмеричная система потому, что восемь регистров и восемь способов адресации. В итоге, если глядишь на дамп программы в восьмеричных кодах, то всё видно и всё понятно, в отличии от i8080/x86.
Система команд ортогональная, все способы адресации можно применить ко всем регистрам, исключений почти нет. Если есть исключения, то их немного, легко запоминаются.
Кроме абсолютного способа адресации JMP @#ADDR можно применить и относительный JMP ADDR, с которым программа становится перемещаемой.

electroscat
03.07.2022, 14:01
В этом каталоге создаёте нужный вам MAC-файл на ассемблере. Потом вы его можете транслировать и линковать.

Вот я как раз про это и говорю. Есть ли описание конкретно этих процессов на УКНЦ ?

Hunta
03.07.2022, 14:02
Есть ли описание конкретно этих процессов на УКНЦ ?
Искать описание этих процессов под RT-11.
Ссылки могу дать только на оригинальную документацию по RT-11.

electroscat
03.07.2022, 14:29
И программного обеспечения, которое для этого необходимо...
А лучше все в одном образе сразу, более эффективно будет )))

- - - Добавлено - - -


Искать описание этих процессов под RT-11.
Ссылки могу дать только на оригинальную документацию по RT-11.

Да, уже изучаю, но пока конкретно по некоторым вопросам не нашел.
Оригинальная - это англоязычная ?

- - - Добавлено - - -

Разобрался, там в батнике в вин эмуляторе все прописано, и из MAC файла сразу полчается SAV. Пока по компиляции ассемблера вопросов нет, благодарю !!!

Hunta
03.07.2022, 14:33
Оригинальная - это англоязычная ?
Да

electroscat
03.07.2022, 14:36
И теперь вопрос следующий, как и предполагал, MACRO-11 - есть ли описание этого языка, на сколько я онимаю, это не просто ассемблер, а ассемблер серьезно расширенными возможностями, есть ли его подробное описание, желательно на русском языке ?

SuperMax
03.07.2022, 14:45
И теперь вопрос следующий, как и предполагал, MACRO-11 - есть ли описание этого языка, на сколько я онимаю, это не просто ассемблер, а ассемблер серьезно расширенными возможностями, есть ли его подробное описание, желательно на русском языке ?

Средства кросс-разработки для PC
https://forum.maxiol.com/index.php?s=&showtopic=5567&view=findpost&p=55590
там же и документация на русском и родная от DEC-а

Hunta
03.07.2022, 14:50
на сколько я онимаю, это не просто ассемблер, а ассемблер серьезно расширенными возможностями
У DEC два варианта ассемблера - PAL-11 (ОЧЕНЬ старые системы) и MACRO-11. Основное отличие - ассемблер MACRO-11 поддерживает макросы.

А теперь нюанс. По крайне мере в оригинальной документации. Если искать описание именно на MACRO-11, можно налететь с хорошей вероятностью на книжку, где будет описание именно MACRO-11, а не системы команд PDP-11. То есть или вообще не будет описания системы команд или описание базового набора, причём не факт, что с нюансами.

Более того, ВМ2 поддерживает несколько команд, которые специфичны для него - то есть MACRO-11 про них ни сном ни духом. Пусть они и работают в HALT режиме, но тем не менее.

- - - Добавлено - - -

И ещё тонкость. Ассемблер - это программа. Она принимает на вход файл, написанный на ЯЗЫКЕ ассемблера и выдаёт на выходе НЕЧТО. Так вот - ЯЗЫК ассемблера - не эквивалентен системе команд. Даже в PAL-11 есть ДИРЕКТИВЫ компиляции - они тоже входя в ЯЗЫК, но не порождают машинных действия. А уж в MACRO-11 с его макросами - одна ТИПА КОМАНДА языка ассемблера может привести к сколь угодному количеству команды процессора. Или не привести. И вообще, за счёт макросов можно сделать подобие языка высокого уровня, типа:


;
; Calculate memory size
;
PROCEDURE CMEMSZ
BEGIN
LET PRGSIZ := PRGTOP - PRGBOT
LET @#V.4 := #20$

LET R0 := #-^D<2048>
LET R1 := #0

REPEAT
LET R0 := R0 + #^D<2048>
ADD #0, (R0)
LET R1 := R1 + #1
UNTIL MEM28K EQ R1

LET R0 := R0 + #^D<2048>

10$:

M00612 =: .+2
LET @#V.4 := #V.4+2

GOTO 30$

20$:
LET TOP := #10$
RTI

30$:

IF R1 LO #10 GOTO MEMERR ; Insufficient core

LET PRGBOT := PRGTOP
LET PRGTOP := R0

LET RELCNT := R0 - PRGSIZ

LET R1 := #$LITTB
WHILE #-1 NE (R1) DO
LET (R1)+ := (R1)+ + RELCNT
END

LET R1 := PRGBOT
LET R2 := PRGSIZ

REPEAT
LET -(R0) :B= -(R1)
LET R2 := R2 - #1
UNTIL RESULT IS EQ

RETURN
END CMEMSZ

Alex_K
03.07.2022, 14:51
есть ли его подробное описание, желательно на русском языке ?
На сайте emuverse.ru есть комплект книг от ДВК (http://emuverse.ru/wiki/ДВК).

electroscat
03.07.2022, 17:22
Особо ценные 5 и 6 книга от ДВК !!! Огонь, там все практически от создания системной дискеты, и заканчивая высшим пилотажем...

Вот все таки отличие Советского владельца ПК от среднестатистического западного (имею в виду саму концепцию), именно вот в этой книге, изучил, разобрался, и уже для тебя нет ничего невозможного в плоскости данной машины.... Очень круто !

Как бы это вернуть, то, что пользователем ПК считается не тот кто умеет кликнуть по ярлыку игры на рабочем столе, а тот, для кого нет ничего невозможного в рамках конкретной платформы.... Как бы вернуть эти истинные ценности и устранить ту подмену, которую посеили в головах людей западные производители и маркетологи ?!? )))))

electroscat
03.07.2022, 22:06
Автор правильно пишет, что это будет работать при обработке этих кодов подпрограммой терминала. Например эти коды со стороны ЦП можно записать в регистр 0177564. А лучше перейти в режим АВТОНОМ нажатием <D> в пультовом отладчике. В этом режиме всё что вы нажимаете будет сразу отрабатываться, так что нажимать <УПР+A> и <УПР+B> надо там. Выход обратно в пульт - <УПР+Ц>.

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

Вопрос такой возник, правильно ли я понимаю, чтобы запустить код для ПП мне нужно написать программу, которая сначала получит доступ к памяти ПП, перенесет туда код и там как то его запустит ? Или есть какие либо другие способы ? Вот этот алгоритм мне пока не понятен, на сколько я понимаю, из монитора ПП я никак не могу запустить код ЦП и наоборот.. Как это делается в програме ? Прерыванием, привязкой к какому либо событию ? Намекните пожалуйста ...

И правильно ли я понимаю, что запуская SAV из RT-11 я размещаю его в памяти ЦП - и именно ЦП передаю управление на первый адресс программы ? А уже если мне нужно что то ПП передать на выполнение - там начинается жесткий секс с регистровой передачей и какими то способами передать управление ПП ?!?

Hunta
03.07.2022, 22:17
И правильно ли я понимаю, что запуская SAV из RT-11 я размещаю его в памяти ЦП
Да

и именно ЦП передаю управление на первый адресс программы ?
Если правильней, то - на СТАРТОВЫЙ адрес программы - тот, который указан в одном (и только одном) исходнике в директиве .END
Он не обязательно первый


А уже если мне нужно что то ПП передать на выполнение - там начинается жесткий секс с регистровой передачей и какими то способами передать управление ПП ?!?
Не сказал бы, что жёсткий секс, скорей - определённые телодвижения с регистрами и API ПП

electroscat
04.07.2022, 00:39
Чутка поразбирался со средой и кодом, который она компилит. Наткнулся вот на такой момент.

https://i.ibb.co/Pw67DB9/sob.jpg (https://ibb.co/Pw67DB9)

На картинке на синем экране кусок кода (сразу говорю, код условный, и в целом ни о чем, я пытался понять какой код получается при компиляции, с кодом в целом разобрался, соответствие между OCT и HEX получил, не получил только одно.)
Не понимаю что это, в коде есть мнемоника SOB - и вот она не компилится как должна. В самом низу из букваря, что должно быть. В итоге, там 077RXX, и когда я разные строки комментирую кода, получается регистр меняется, 4, 6, 0.... но в коде я его не меняю, команда остается неизменной, как на синей части картинки, а смещение везде 01, хотя я пытался метку выше и ниже отодвигать. Что это может быть, особенности MACRO-11 или какие то глюки, или я балбес, что то в коде напортачил ? Или в букваре ошибка, и регистр последняя цифра .... Что вряд ли, потому что если набирать этот код в отладчике, то там 077102 - регистр R1 и смеещение 2. И так работает.

Hunta
04.07.2022, 07:41
SOB R1, D1

electroscat
04.07.2022, 11:17
77527

В этой строке в статье пара ошибок сразу, пока не понятно, это такая задумка автора, или просто ошибка ))

Hunta
04.07.2022, 11:34
На мой взгляд - явная ошибка

electroscat
04.07.2022, 12:05
На мой взгляд - явная ошибка

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

electroscat
05.07.2022, 08:04
Доброго времени !
Возник еще такой вопрос, а можно ли каким то образом перенаправить вывод программы DISASM в файл, ведь без этого программа бесполезна... Наверняка есть способ ?

Hunta
05.07.2022, 08:13
Те программы DISASM, которые я знаю, только в файл и умеют выводить. Так что уточнение - что за программа имеется ввиду?

electroscat
05.07.2022, 13:14
Те программы DISASM, которые я знаю, только в файл и умеют выводить. Так что уточнение - что за программа имеется ввиду?

В бинарнике нашел DISASM V02.00 - похоже это версия. Я вполне могу предположить, что для того чтобы вывести в файл то что я получаю на экран - нада еще какие то атрибуты указать. Еще о файле? size - 8, block 448, 7:766 последний адресс в OCT редакторе.

Называется, соответственно DISASM.SAV

Если не сложно, просто пришлите версию этой программы, отправляющюю в файл листинг программы.

- - - Добавлено - - -



Вообще, поражаюсь с простоты, гибкости и изящества PDP-11 ассемблера. Разнообразие адресации, а еще такие простые конструкции, типа например MOV (R1)+, (R2)+ - завораживают. На 8080 это прямо таки несколько (как минимум три) строчек кода, а тут одна )))
Думаю, что если на базе этого ассемблера разработать синтаксис для 64 разрядного процессора - это будет просто пушка. Понятно, что сейчас все да языками высокого уровня, но процессор с красивым, продуманным ассемблером вполне может переломить ситуацию в мире )))

- - - Добавлено - - -

Причем этот восторг меня посещает в самом начале изучения, могy себе представить, какой этот восторг будет когда я чуть по ближе узнаю PDP-11....

Hunta
05.07.2022, 13:54
run disasm demo.lst=demo.sav
Вполне возможно, что расширения можно не вводить - я взял пример из своего командника


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


Думаю, что если на базе этого ассемблера разработать синтаксис для 64 разрядного процессора
Был 32-ух разрядный с похожим подходом - VAX - от самой DEC. И было несколько (например, Motorola выпускала) процов на этой же идее набора команд и ортонональности. Не скажу наверняка, но вроде как у чужих процов всё же не было изящества PDP-11,а VAX использовал шестнадцатиричную запись - и тут мне сложней оценить.

Чего не хватает PDP-11 для идеала - разрядности. 16 бит всё таки мало.

И да, когда разработывали систему команд и кода PDP-11 - приследовалась цель легкости программирования на языка ассемблера. После тогоа, как я наткнулся на пакет макросов DSMAC (структурные операторы, пример я приводил выше) - я (когда активно программировал по работе на ака PDP-11 машинах) вообще перестал использовать ЯВУ (до этого писал на ФОРТРАНе, Паскале). Основное, что доставало до этого в MACRO-11 - необходимость в обилии меток. А с DSMAC и количество меток снизилось - даже не на порядок, и скорость написания увеличилась минимум на порядок.

- - - Добавлено - - -

А, да, где ещё ЖУТКО помогает DSMAC - при анализе программы после дизасма :) Куча меток исчезает, а за счёт структуированных операторов становится видна логика. Просто видна :)

Sandro
05.07.2022, 14:40
Был 32-ух разрядный с похожим подходом - VAX - от самой DEC.


В каком же это месте VAX похож? В нём же всё наоборот! Побайтовое кодирование опкода с опкодами переменной длины, как у x86!

Собственно, тупиковая архитектура. По сути, она попала в серию только по причине внитрифирменного переворота в DEC и захвата власти эффективными менеджерами, увы. Вся эта история прекрасно документирована её участниками.



И да, когда разработывали систему команд и кода PDP-11 - приследовалась цель легкости программирования на языка ассемблера.


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

Hunta
05.07.2022, 14:40
Вообще, поражаюсь с простоты, гибкости и изящества PDP-11 ассемблера
Кстати, если строго, то не с ассемблера (ассемблер - это программа), а с языка ассемблера, а если точнее - то с системы команд и адресации PDP-11 :)

reddie
05.07.2022, 14:49
На 8080 это прямо таки несколько (как минимум три) строчек кода, а тут одна )))
Зато тот же Спектрум на Z80 (и компы с 8080, думаю, не особо хуже) выполняет кучу этих инструкций порой быстрее, чем БК и, полагаю, УКНЦ. За все надо платить =)
Начиная изучать БКашный асм, сперва тоже был в восторге, но когда глянул, сколько тактов жрут самые "вкусные" команды с косвенной двойной адресацией...
Да, частично проблема зарыта в корявом видеоконтроллере БК, но нельзя сваливать все только на него.

Hunta
05.07.2022, 14:58
Побайтовое кодирование опкода с опкодами переменной длины
Побайтовое или не побайтовое - а то опкод у PDP-11 не переменной длины, да? Да, не по границе байта, но учитывая 16-ти битность, время и стоимость памяти - попытка сделать по границе байта - и программы бы распухли

Что бы понятно было, о чем я говорю - например, команда MOV - длина опкода - 3 бита, команда CLR - 9 бит, JMP - 10 бит, HALT - 16 бит.

А если вспомнить PDP-11/60 - то есть у него инструкиця MED, которая, по сути - префикс, так как сама команда идёт за ней.



преследовалась цель наиболе компактного и эффективного представления типовых программ, а так же упрощение компиляторов ЯВУ
В первую очередь - легкость и удобство программирования на языке ассемблера в случае с PDP-11, на VAX они попытались провернуть ту же фишку, но.. Не смогли.

- - - Добавлено - - -


сколько тактов жрут самые "вкусные" команды с косвенной двойной адресацией...
Ну да, и то, что там надо три раза обратиться к памяти - это как бы во внимание не принимается. Плюс - скорость работы памяти. Плюс - эффективность реализации в железе. Я на PDP-2011 и BRAM памяти получил такт на выборку, такт на декодирование. И если это команды типа MOV Rx, Ry или там скажем - BR - всё. А если обращение к памяти - ещё по такту. Ну и понятно, для проца без ДП

electroscat
05.07.2022, 16:41
run disasm demo.lst=demo.sav

Чет не получается у меня такой фокус, пишет DISASM-F-Output file write error
Я пытался создавать файл на который ссылаюсь, и без файла, все равно пишет такую вот ерунду.

Когда запускаю как run disasm demo.sav - выводит все на терминал,..

Hunta
05.07.2022, 16:43
Не может записать выходный файл. На каком устройстве находится входной .SAV файл?

electroscat
05.07.2022, 16:48
НА MZ1:

- - - Добавлено - - -

Там же и DISASM.SAV.

- - - Добавлено - - -

И на MZ0: та же песня... Обезвреженный какой то DISASM )))))

Hunta
05.07.2022, 17:28
А сколько там свободного места? Может, просто не хватает?
Можно попробовать последовательно выдать

squeeze mz1:/noquery
run disasm mz1:demo.lst[-1]=m1:demo.sav

AFZ
05.07.2022, 17:51
Собственно, тупиковая архитектура. По сути, она попала в серию только по причине внитрифирменного переворота в DEC и захвата власти эффективными менеджерами, увы. Вся эта история прекрасно документирована её участниками.Встречал утверждение, что лучшую 32-разрядную CISC-архитектуру имел Мотороллер 68000. Я на нем ни разу не программировал, но книжку по нему в своё время пролистал. Помню, что понравилось. Было сильно похоже на PDP-11 и всё это в 32-х разрядах. Прикидывал, как будет программировать под этот процессор на асме, тогда показалось, что всё замечательно. Сейчас, конечно, ничего уже не помню.

electroscat
05.07.2022, 19:33
А сколько там свободного места? Может, просто не хватает?

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



Можно попробовать последовательно выдать

squeeze mz1:/noquery
run disasm mz1:demo.lst[-1]=m1:demo.sav

И это тоже интересно. Попробую.

Hunta
05.07.2022, 19:48
squeeze mz1:/noquery имеет смысл делать, только если места достаточно много. Потому как если места в принципе не хватает - сама по себе команда squeeze не поможет

electroscat
05.07.2022, 22:09
Попробовал на другой диск перенести и дизассемблер и дизассемблированный файл, в итоге все отлично, код в файле, все норм. Благодарю !!!

electroscat
11.07.2022, 14:32
Доброго времени дорогие коллеги !
Дизассемблировал оидн интересный код, и не могу понять до конца, как он работает. Хотелось бы посмотреть как работает код в отладчике. ПОдскажите, есть и качественный отладчик, может быть на базе какого либо эмулятора УКНЦ, желательно с хорошей документацией? Пытался воспользоваться UCNCBTL - но не очень понял как пользоваться этим отладчиком, он как то статичен, картинка которую получаю при включении отладчика - остается далее на экране, динамики не нашел. Понимаю, что пользоваться не умею просто. Подскажите или доки для этого отладчика, или отладчик более понятный. Заранее благодарю !

Radon17
11.07.2022, 23:25
Как раз UKNCBTL неплохо документирован

https://github.com/nzeemin/ukncbtl-doc/wiki/Debugger-ru

ra3qdp
12.07.2022, 11:19
я когда-то делал самодельные "компьютеры" на разных доступных в то время отечественных микропроцессорах. Всегда, естественно, возникала задача отдать в руки пользователей комплект для практического использования - вместе с самой машинкой кросс-средства (ассемблер и, возможно, кросс-компиляторы) и в ПЗУ самой машинки записать "монитор" - программу позволяющую что-то делать с машиной (читать-писать в память, в регистры, закачивать программы, запускать на выполнение).
Без нее дать с машиной абсолютно нечего - АБСОЛЮТНО мертвая бесполезная железяка [конечно, сначала все начинается с пробных маленьких программок в ПЗУ типа "холло ворд", а я сначала делал бесконечный вывод какого-нибудь символа на терминал, а потом "эхо" (что нажал на клаве - то и увидел на экране - это полезнее.]

Всегда хотелось иметь в мониторе функции отладчика. Если для 580/1821_8080/8085(и ограничено 1858_Z-80) - удалось найти интеловский исходник родного монитора, то для 1810_8086/8088 тогда не удалось (был какой-то "глючный" чей-то самодельный). Для 1816/1830_80(C)51 писал мой коллега, цель была сделать в идеале как дебагер от МСДОС (почти получилось), кстати полное описание этого стандартного дебагера от МСДОС найти очень не просто.

Когда делал на 1807_DEC T11, то сделали мне (я СОВСЕМ не программист) сначала простенький (A, D, Е, S, L - переделанный из исходников UNI-bus машин - маленький, простенький, помещается даже в 512к - 556РТ5), потом переделанный из реассемблированного содержимого ПЗУ ДВК - как в Электронике-60_LSI-11. Но возможности по отладке программ в этих мониторах - "никакие" по сравнению с тем, что у интела или тем более что было сделано для 51-х процессоров.

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

Много есть и наверное еще будет проектов самодельных PDP 11-совместимых компьютеров на разных микропроцессорах - а что в ПЗУ записать ?

Может кто-то, кто владеет программированием, напишет достойный монитор с функциями отладки ? (да и применительно к самим ДВК и прочим Зеленоградским будет полезно, а для Электроник и DEC можно будет записать в ПЗУ на платах АПЗ или других (где загрузчики-диагностика).

Ну и заодно из него же можно будет сделать загружаемый вариант по проводам (да и про магнитофонный ввод почему-то забыли или по-современней - звуковые файлы с PC) и утилиту для операционки.

Hunta
12.07.2022, 11:34
Способов решения данной проблемы (и других, похожих) ровно два.
- Кому-то ОЧЕНЬ нужна данная приблуда и он пишет её сам (пример - FullODT в PDP-2011)
- Кому-то ОЧЕНЬ нужна данная приблуда и он оплачивает работу кому-то.
Под "кому-то" подразумевается как один человек, так и группа людей.

ra3qdp
12.07.2022, 12:10
Способов решения
не удивили ответом.
Давно заметил, что понимание целей и смыслов форумов (не этого конкретно, а вообще) у меня и Hunta (и подобных участников) - противоположные.

Кому из форумцев какой подход ближе ? Для чего, вообще, форумы ?
С какой целью вообще ходите, что-то пишите, что-то (что именно) с интересом читаете ? Какая цель и смысл ?

Hunta
12.07.2022, 12:12
Для чего, вообще, форумы ?
Если цель форума - что бы за тебя сделал твою хотелку - то да, совсем разные.

ra3qdp
12.07.2022, 12:23
Почему же ТОЛЬКО для меня ? Да мне и не надо - у меня и так кое-что необходимое есть, что предстоит другим сделать или где-то взять.

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

Само слово "форум" - что означает, подразумевает ?

Уж, во всяком случае не форма "Я и ..." в виде блога. Кто мешает именно блог и завести (но найдутся ли читатели).

Hunta
12.07.2022, 12:34
С какой целью вообще ходите, что-то пишите, что-то (что именно) с интересом читаете ? Какая цель и смысл ?
Just for fun от PDP-11 и некоторых других процов.

- - - Добавлено - - -


Да мне и не надо
Тогда бы и не писали простыню.


в основном больше никому не интересное
И какое мне до этого дело?


хвастаетесь постоянно об этом
Аха. Хвастаюсь. И не ною - дайте то, сделайте это.

- - - Добавлено - - -

А, да, ещё тут занялся J-11, если со временем получится - через полгода-года ещё одна тема для хвастовства появится.

- - - Добавлено - - -


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

ra3qdp
12.07.2022, 12:55
препираться с людьми противоположного мировозрения - не благодарное и бесполезное занятие.

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

Hunta
12.07.2022, 13:08
препираться с людьми противоположного мировозрения - не благодарное и бесполезное занятие.
Точно, уже заметил. Просто в игнор.


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

ra3qdp
12.07.2022, 13:11
ну, раз обвиняете, скажите - что я Вам лично не дал ?

"Просто в игнор" - а я "в колдцы" - не плюю, терплю.

Hunta
12.07.2022, 13:12
"Не надо смешивать «долг» с тем, что от тебя ожидают люди; это совершенно разные понятия. Долг — это обязанность, которую ты сам взвалил на себя, обязанность перед самим собой. Выплатить долг ты можешь как угодно: годами терпеливого труда или же готовностью мгновенно умереть. Быть может, выполнить его тяжело, но наградой является самоуважение. А вот награды за то, что ожидают от тебя люди, не будет, и сделать это не просто трудно, а невозможно. Легче иметь дело с татем, чем с занудой, который просит «лишь несколько минуточек вашего времени, ну пожалуйста… на это много времени не потребуется». Время — весь твой капитал; минуты твоей жизни прискорбно немногочисленны. Если ты позволишь себе выполнять подобные просьбы, они быстро превратятся в снежный ком и паразиты будут пользоваться всем твоим временем и требовать еще больше! Поэтому научись говорить «нет» — и не бойся казаться грубым. Иначе у тебя не будет времени, чтобы выполнить свои обязанности, сделать свою работу, и, уж конечно, не останется времени для любви и счастья. Термиты сгрызут твою жизнь и тебе ничего не оставят.
Правило сие не означает, что нельзя сделать из него исключение в пользу друга и даже незнакомца. Но выбирать должен ты сам. Не делай ничего только потому, что «этого от тебя ожидают»"

- - - Добавлено - - -


ну, раз обвиняете, скажите - что я Вам лично не дал ?
Не помню, что бы я что то просил.

ra3qdp
12.07.2022, 13:16
раз "не помните", тогда извинитесь. Ну, а если, вдруг "вспомните", тогда я извинюсь и дам, если смогу.

Hunta
12.07.2022, 13:18
тогда извинитесь
Нет

ra3qdp
12.07.2022, 13:25
ожидаемо. Вы показали свое лицо.

Hunta
12.07.2022, 13:26
Вы показали свое лицо.
Ах, беда беда, разорение

ra3qdp
12.07.2022, 13:29
Беда - не беда, а люди же видят - кто есть кто.

Hunta
12.07.2022, 13:39
Беда - не беда, а люди же видят - кто есть кто.
Точно



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



интересно, а машина Unibus PDP-11/24 сколько разрядов шины адреса имеет ?
Вы меня извините, за 8 лет на форуме у меня в списке игнорирования всего один человек - но подобные вопросы, задаваемые в заметном количестве, меня сильно искушают список пополнить.
И это только то, что помню, а искать лень

ra3qdp
12.07.2022, 14:02
и я прекрасно - помню.

Вы тогда утверждали, что есть много PDP-11 без микропрограмм. Я утверждал, что лишь только PDP-11/20 и ее разновидности.
Ну и кто был прав ? (Вы тогда выкрутились - типа - вертикальное микропронраммирование - не считается за микропрограммирование и именно - выкрутились, ведь никогда не признаете свою неправоту).

А про PDP-11/24 - Вы, ведь, в тот момент именно ей и занимались и неужели трудно было просто написать две цифры, а не много укоризненных букв ?

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

Radon17
12.07.2022, 14:03
ra3qdp, ну вот мне вы не дали ПРОС 3.1. И знаете, немного обидно было слышать "тебе он не нужен, ты про ПРОСу ни одного умного вопроса не задал".

Hunta
12.07.2022, 14:06
А про PDP-11/24
У меня нет и не может быть PDP-11/24


Но Вы ведь обвиняли, что я кому-то что-то не дал.

ну вот мне вы не дали ПРОС 3.1
Опаньки.

shattered
12.07.2022, 14:32
Может кто-то, кто владеет программированием, напишет достойный монитор с функциями отладки ?

для начала можно изучить архивы decus, поди кто-то и написал такое за 50 лет

https://www.ibiblio.org/pub/academic/computer-science/history/pdp-11/decus/index.html

Hunta
12.07.2022, 14:39
для начала можно изучить архивы decus, поди кто-то и написал такое за 50 лет
DDT и был ещё визуальный отладчик (не помню название) - но он был заточен под RSX и им можно отлаживать уже слинкованные проги

- - - Добавлено - - -

Кстати, по ссылке - это вовсе не все ленты DECUS

ra3qdp
12.07.2022, 14:41
я же не отказал ? так ? сказал что нужно сделать, что бы дал.
ПРОС 3.1 на русском сделали люди в инициативном порядке, хотели на этом заработать. К Электроникам-85 он никогда и никак не придавался. Получить можно было только у них на их условиях. Причем каждая копия была защищена так, как потом делал Microsoft - CD-Key на каждую копию из пула ключей, привязанную к аппаратному номеру конкретной машины.
Я лично знаю тех, кто это сделал (ведь не я же), и мне стыдно без их согласия отпускать в общий доступ.
Да и зачем именно русская версия ? Оригинальная (в более полном составе и чуть более новая) - доступна.
Я, наоборот, вижу, что русская только создает определенные проблемы и английская только более удобна на самом деле. Жалею, что некоторые самодельные программы и утилиты мне в свое время (по моему заказу) сделали на русском, а теперь, оказалось, что надо бы на английском... Есть некоторые в исходниках, надеюсь что кто-нибудь когда-нибудь поможет переделать.

Hunta
12.07.2022, 14:43
я же не отказал ?

и мне стыдно без их согласия отпускать в общий доступ

русская только создает определенные проблемы
Отмазки в студии


надеюсь что кто-нибудь когда-нибудь поможет переделать
Деньги на бочку

ra3qdp
12.07.2022, 14:53
и мне стыдно без их согласия отпускать в общий доступ

Предположите, сбудется Ваша мечта - заработать денег на собственном софте для PDP-11, сделаете кому-то что-то за деньги, защитив ее от свободного распространения, что бы продать кому-то еще. А тот кто купил - "сломал" защиту и выложил в свободный доступ. Как отнесетесь ?

Hunta
12.07.2022, 15:11
Ваша мечта - заработать денег на собственном софте для PDP-11
У меня нет такой мечты.
И если нет понимания того, что сейчас на этом софте в принципе крайне сложно заработать, а на операционных системах просто нельзя.. ну что ж - отмазка засчитана.

- - - Добавлено - - -

И вот интересный вопрос. А вообще у автора этой отмазки

мне стыдно без их согласия отпускать в общий доступ
была попытка связаться с разработчиками? И если да (в чём я сильно сомневаюсь) - что они сказали? Вот только голословные заявления - да, была; сказали - не выкладывать - не прокатят - только с доказательствами. Чем будут являться предъявление контактов, что любой желающий мог проверить

electroscat
12.07.2022, 16:16
Дорогие коллеги, я в этом чатике планировал вопросы по ассемблеру PDP-11 прояснять, тема ведь может и не такая актуальная но очень интересная... ))) а вы тут решаете кто сильнее виноват ))) Давайте с этим заканчивать пожалуйста ))

Hunta
12.07.2022, 16:20
вопросы по ассемблеру PDP-11 прояснять
Скорей - вопросы по командам процессора, так как ассеблер - это программа - и по ней мало что можно спросить, а язык ассемблера - это не только система команд процессора, но и команды самого ассемблера. И на начальном этапе они не сильно интересны (и в основном - при описании данных) :)

electroscat
12.07.2022, 16:27
Лично я не хочу заработать денег на софте PDP-11 (да и возможно ли это?), мне больше хочется привлечь внимание к ретро машинам, таким, незаслуженно почти забытым, как УКНЦ, ведь в свете последних событий, будет не плохо не просто освоить на территории СССР производство клонов IBM совместимых машин, а создать нечто более серьезное, а для этого нужно чтобы как можно больше талантливых инженеров изучало историю, изучало принципы построения ЭВМ, различные системы комманд которые по тем или иным причинам не используются сейчас. И на этой базе чтобы эти молодые талантливые инженеры строили новые архитектуры, учитываюжие ошибки и принимающие плюсы предидущих архитектур. ВОт такая в кратце моя идея. И изучаю Ассемблер я не только для чебя, но и с надеждой, что кто то еще заинтересуется и начнет его изучать. Вот как то так. ))

- - - Добавлено - - -


Скорей - вопросы по командам процессора, так как ассеблер - это программа - и по ней мало что можно спросить, а язык ассемблера - это не только система команд процессора, но и команды самого ассемблера. И на начальном этапе они не сильно интересны (и в основном - при описании данных) :)

Согласен, да, так и есть.

У меня тут еще серия вопросов готовится по взаимодействию между ПП и ЦП, пытаюсь понять, как через порт 176674-176676 передаются байты. В целом процесс передачи понятен, а вот процесс приема не очень, куда кладет ПП получнные байты я пока не понял, от куда берется адресс их расположения, ну и там еще вопросы есть. Пока формиркю...

Hunta
12.07.2022, 16:35
У меня тут еще серия вопросов готовится по взаимодействию между ПП и ЦП
Ну, тут пока точно ничего не подскажу. Когда то у меня была УК-НЦ, на которой я много порезвился и даже начал дизассемблить-восстанавливать логику содержимого ПЗУ, но.. потом появился Квант-4М, УК-НЦ была отставлена несколько в сторону, а потом папаня её (случайно) спалил - блок питания был заменён на самодельный, но конструкция была ТяпЛямМаляры - и УК-НЦ в один прекрасый момент не свезло. Сейчас снова есть, но - руки не доходят.. Надо будет как нибудь сесть и восстановить исходник ПЗУ до привычного для меня теперь вида :) Тогда и появится возможность хоть что то сказать на вопросы типа верхнего :)

electroscat
12.07.2022, 16:42
Я нарыл на форуме дизасемблированный код ПЗУ УКНЦ с комментами, вот (http://emuverse.ru/wiki/%D0%A3%D0%9A%D0%9D%D0%A6_ROM_disasm). Огромная благодарность автору! Настоящий клад !!!

Hunta
12.07.2022, 16:43
Я нарыл на форуме дизасемблированный код ПЗУ УКНЦ с комментами, вот
Да, я знаю :) Но предпочитаю свой вариант, где меньше меток и более прозрачна логика :)

electroscat
12.07.2022, 16:48
Да, я знаю :) Но предпочитаю свой вариант, где меньше меток и более прозрачна логика :)

А можно полписаться на ваш вариант ?!? ;)

Hunta
12.07.2022, 16:57
А можно полписаться на ваш вариант ?!?
Пуркуа бы и не па, вот только.... Для начала посмотрите вот на это (http://www.kpxx.ru/dnepr/Soft/CF/134/134.MAC)
Это не от УК-НЦ, это от 1201.04 (с моими доработками) - но даст представление - как оно будет выглядеть.
И ещё - я не знаю, когда я займусь доведением своего варианта до логического конца - свободного времени - мало, а своих интересов - много :) Хотя один из них - доделать свои старые дизасмы :)

ra3qdp
12.07.2022, 17:00
чтобы эти молодые талантливые инженеры строили новые архитектуры, учитываюжие ошибки и принимающие плюсы предидущих архитектур
именно в этом свете - пример с УКНЦ - не то что неудачный, а показывающий, что так, как раз, не нужно поступать.

electroscat
12.07.2022, 17:37
именно в этом свете - пример с УКНЦ - не то что неудачный, а показывающий, что так, как раз, не нужно поступать.

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

Alex
12.07.2022, 18:09
По поводу многозадачности... Многозадачность вполне реализуется и на одном ядре процессора.
Примеры?
Ну хотя бы в той же RT-11 есть вполне себе работающий на УКНЦ FB монитор, в классике две задачи легко, если две мало - можно сделать поддержку системных заданий(ещё 6 штук ;) ). Для программ написанных на MACRO-11 вполне ;) Даже из дистрибутива есть сладкая парочка - QUEUE.REL/QUEMAN.SAV, возможно в последних версиях есть ещё что интересное.
Не помню точно, VTCOM он REL бывает???
Есть псевдодрайвер межзадачных сообщений MQ :)

Можно запустить специально сгенерённую RSX-11. (но там работать тяжко)
Тут на форуме если воспользоваться поиском, на УКНЦ UNIX-подобное что-то запускал.
Возможно, что возможно ещё что-то запустить :)

Однако если на RT-11 всё вертится, то на "тяжёлых" системах работать тяжко. Памяти мало :(
Это всё касательно ЦП.
С ПП - история совсем другая ...

Из прикола, я не слышал, чтобы кто-то на УКНЦ запускал DOS-11, хотя если написать драйвера, и немного попатчить систему, то вполне можно и запустить ;) Хотя эта система однозадачная :(

Hunta
12.07.2022, 19:32
запускал DOS-11
У меня в планах стоит повосстанавливать исходники, так что можно будет попробовать, но это just for fun, так как преимуществ перед RT-11 в ней я не вижу :)

reddie
12.07.2022, 19:41
вполне реально задействовать оба процессора под некоторые задачи
Если они не связаны с масштабной работой с экраном - то да. Иначе придется учитывать нюансы архитектуры УКНЦ...
А так вполне можно загрузить один из процов чем-нибудь и "забыть" про него. Например, играть мелодии одним, а основной код выполнять другим.


Ощущение такое, что машина сильно опередила свое время
Скорее, толком не успели разобраться, как полноценно загружать оба "ядра" по максимуму, как время УКНЦ вышло.

shattered
12.07.2022, 20:49
пытаюсь понять, как через порт 176674-176676 передаются байты. В целом процесс передачи понятен, а вот процесс приема не очень, куда кладет ПП получнные байты я пока не понял, от куда берется адресс их расположения

данные оказываются в регистрах ВП1-120 на стороне ПП (177060-77), и в память ПП их нужно перекладывать вручную

electroscat
12.07.2022, 22:45
По поводу многозадачности... Многозадачность вполне реализуется и на одном ядре процессора.

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

- - - Добавлено - - -


данные оказываются в регистрах ВП1-120 на стороне ПП (177060-77), и в память ПП их нужно перекладывать вручную
Я предполагал что их таки куда то закидывает подпрограмма, на которую указывает вектор в ячейке 340 (2 канал использую).
Я пытаюсь дизасембдлировать программу virus-4, и даже дизассемблировать у меня ее получилось, она компилится, а вот понять как работает пока не получается, все таки в случае с УКНЦ нужно строить в голове сразу две независимые машины, чтобы понять как работает программа под сразу два МП. Пока с этим туго, и даже отладчик пока что не сильно прояснил некоторые моменты.

В целом вот код программы:



.LIST ME
.TITLE V6



START: MOV #D1, R1
CALL T2
CMP D2, #65
BNE T0
MOV D3, R1
MOV R1, D5
MOV #D4, R1
CALL T2
MOVB #30, D6
MOV #D1, R1
CALL T2
MOV #D7, R0
BR T1
T0: MOV #D0, R0
T1: EMT 351
EMT 350

;------------------------------------------
T2: TSTB @#176674
BPL T2
MOVB R1, @#176676
SWAB R1
COM #0
BNE T2
COM R1
COM #0
BNE T2
T3: TSTB @#176674
BPL T3
RETURN
;------------------------------------------


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


D1: .BYTE 00 ;\
; } 400 (WORD)
D6: .BYTE 01 ;/


T4: .WORD 32
D3: .WORD 0
D2: .WORD 65
D4: .WORD 10000
.WORD 32
D5: .WORD 0


.BYTE 252
.BYTE 02

.WORD 65


D0: .BYTE 16
.BYTE 156 ;n ;1162
.BYTE 105 ;E ;1163
.BYTE 124 ;T ;1164
.BYTE 40 ;_ ;1165
.BYTE 123 ;S ;1166
.BYTE 127 ;W ;1167
.BYTE 117 ;O ;1170
.BYTE 102 ;B ;1171
.BYTE 117 ;O ;1172
.BYTE 104 ;D ;1173
.BYTE 116 ;N ;1174
.BYTE 117 ;O ;1175
.BYTE 112 ;J ;1176
.BYTE 40 ;_ ;1177
.BYTE 120 ;P ;1200
.BYTE 101 ;A ;1201
.BYTE 115 ;M ;1202
.BYTE 121 ;Q ;1203
.BYTE 124 ;T ;1204
.BYTE 111 ;I ;1205
.BYTE 40 ;_ ;1206
.BYTE 127 ;W ;1207
.BYTE 40 ;_ ;1210
.BYTE 160 ;p ;1211
.BYTE 160 ;p ;1212
.BYTE 17 ; ;1213
.BYTE 0 ; ;1214
D7: .BYTE 11 ; ;1215
.BYTE 50 ; ( ;1216
.BYTE 103 ; C ;1217
.BYTE 51 ; ( ;1220
.BYTE 40 ;_ ;1221
.BYTE 105 ;E ;1222
.BYTE 154 ;l ;1223
.BYTE 151 ;i ;1224
.BYTE 164 ;t ;1225
.BYTE 145 ;e ;1226
.BYTE 40 ;_ ;1227
.BYTE 117 ;O ;1231
.BYTE 103 ;C ;1232
.BYTE 124 ;T ;1233
.BYTE 55 ;- ;1234
.BYTE 71 ;9 ;1235
.BYTE 64 ;4 ;1236
.BYTE 54 ;, ;1237
.BYTE 11 ; ;1240
.BYTE 16 ; ;1241
.BYTE 167 ; w ;1242
.BYTE 111 ; I ;1243
.BYTE 122 ; R ;1244
.BYTE 125 ; U ;1245
.BYTE 123 ; S ;1246
.BYTE 55 ;- ;1247
.BYTE 64 ;4 ;1250
.BYTE 17 ; 0F ;1251

.WORD 0

D8: MOV @#100, 1422 ;1252,1254, 1256
MOV PC, -(SP) ;1260
ADD #12, @SP ;1262,1264
MOV (SP)+, @#100
RETURN
DEC #144
BPL T5
MOV R0, -(SP)
MOV R2, -(SP)
CMP #10534, @#7214
BNE T6
MOV #1750, 1276
BR T7
T6: MOV #0, 1276
MOV #2500, R0
CMP @R0, #100117
BGE T7
T8: INC (R0)+
TST (R0)+
DEC (R0)+
TST (R0)+
CMP R0, #4664
BLE T8
BR T9
T7: MOV #2500, R0
MOV #100000, R2
T10: MOV R2, (R0)+
ADD #120, R2
TST (R0)+
CMP R0, #4664
BLE T10
T9: MOV (SP)+, R2
MOV (SP)+, R0
T5: JMP @#174612


.END 1000







Код до RETERN - работает в ЦП, по большому счету он должен скопировать все что нудно в ПП, выдать сообщение, или о программе, ии о нехватке памяти ПП - в случае неудачной передачи, и завершить программу. Далее работает кусок в ПП, по идее. Программа завершается, и ее место занимает код файлового менеджера PC который я использую. Далее - работает походу нижний кусок кода, но как и главное куда он попадает в ПП - я понять не могу. Прокручивал всю программу несколько раз в отладчике, передается несколько байт в ПП,... Возможно конечно, это я думаю что несколько байт, а ПП - просто по каким то алгоритмам сам переносит весь код независимо от ЦП,.. Или что то еще. В общем, пока этот момент не понятен. Программа меняет "строчность" таблицы строк видеоадаптера,....
Может кто то уже разбирался с этим кодом, и подскажет как это работает..

- - - Добавлено - - -

В последней строчке нижней части кода ссыль на подпрограмму обработки прерываний от сетевого таймера в ПЗУ....

- - - Добавлено - - -

В обшем, вопросов пока три:
1.как нижняя часть кода попадает в ПП,.
2.По каким адресам она туда попадает, и кто ответственный за ее попадание по определенным адресам,.
3. Кто и как передает управление этому куску кода на стороне ПП...

- - - Добавлено - - -

Кстати, да будут благословленны создатели UKNCBTL !!! И да прибудет с ними сила !!! Низкие поклоны им и плюсы к карме !!!

Alex_K
12.07.2022, 22:45
У меня тут еще серия вопросов готовится по взаимодействию между ПП и ЦП, пытаюсь понять, как через порт 176674-176676 передаются байты. В целом процесс передачи понятен, а вот процесс приема не очень, куда кладет ПП получнные байты я пока не понял, от куда берется адресс их расположения, ну и там еще вопросы есть. Пока формиркю...
На сайте emuverse.ru в разделе УКНЦ есть ссылка на сайт с отсканированной документацией (http://retropc.org/index.html?action=w_razdela&id_razdel=31#c15). Там есть документ Книга 2 Часть 2. Программное обеспечение комплекса вычислительного учебного Электроника МС 0202 (Электроника МС 0511 УКНЦ) (http://retropc.org/biblioteka/0112.djvu). И вот в этом документе есть раздел Работа с внешними устройствами. Там и описано как работать с каналом К2.

electroscat
13.07.2022, 00:31
Вроде начинаю понимать, кажется ЦП передает ПП массив параметров в программу обработки прерывания, и далее, ПП сам вычитывает по массиву параметров все что нужно, и запускаеит. Ну или типа того ))) Теперь нужно с параметрами разобраться )

Alex
13.07.2022, 10:16
И ещё, чтобы программа работала - надо либо знать адреса, куда попадает , либо писать в позиционно-независимым кодом.
Нечто подобное происходит при программировании КЦГД. Только у УКНЦ каналов связи между процессорами несколько и они шире, а у КЦГД - один последовательный порт.

S_V_B
13.07.2022, 19:26
И ещё, чтобы программа работала - надо либо знать адреса, куда попадает , либо писать в позиционно-независимым кодом.
Нечто подобное происходит при программировании КЦГД. Только у УКНЦ каналов связи между процессорами несколько и они шире, а у КЦГД - один последовательный порт.

В ПП есть диспетчер в который можно встроить свою пп. Либо выполнить одноразово и освободить память. Адреса ты не знаешь поэтому код должен быть перемещаемый. В доках все написано вплоть до ячеек где, что лежит.. В ПП.. Если сам захочешь памятью рулить. Из ЦП по каналу передаешь блок в ПП и все.. Можешь зациклить в диспетчере выполнение соей пп.

- - - Добавлено - - -

Почитай журналы пк укнц.. ЕМНИП...В каком-то очень четко расписано как работать с диспетчером пп.

Alex_K
13.07.2022, 19:29
Вроде начинаю понимать, кажется ЦП передает ПП массив параметров в программу обработки прерывания, и далее, ПП сам вычитывает по массиву параметров все что нужно, и запускаеит. Ну или типа того ))) Теперь нужно с параметрами разобраться )
Правильно понимаете. Массив параметров расположен в памяти ЦП, а через канал 2 передаётся адрес этого массива и два байта запуска. А для запуска своей подпрограммы в ПП сначала надо запросить память нужного объёма (устройство 32, код 1). Если запрос памяти прошёл успешно, то переписать подпрограмму из памяти ЦП в память ПП(устройство 32, код 20). Ну и потом её естественно запустить(устройство 32, код 30). Если после исполнения подпрограммы она больше не нужна, то надо освободить память в ПП (устройство 32, код 2).

electroscat
13.07.2022, 21:19
Да, благодарю, доки помогли. В вышеуказанном листинге есть область начиная с D1: и заканчивая .WORD 65 - вот это как раз и есть Массив Параметров. К нему три раза обращается код, первый раз для освобождения памяти - ПП передает сюда же начальный адресс и количество байт, если оно меньше запрошенного. Второй раз следующая часть массива работает, уже с запросом 20 - копирование, там же указывается адресс, который дает ПП на начальный адресс освобожденного места, начальный адресс места размещения переносимого фрагмента в памяти ЦП, и количество слов. Ну и последннее обращение происходит после того как код в ЦП правит массив, вписывая команду запуска вместо команды выделить память, и послеэтого программа в ЦП закрывается, а в ПП ... далее буду разбираться..



Вот в целом три МП адресс на которые передается в порт 2:

001136 000400 .WORD 400 ; команда 01 (byte: 01 byte: 00) - выделить память
001140 000032 .WORD 32 ; устройство 32 ПП
001142 000000 .WORD 00 ; сюда ПП вернет адресс начала освобожденной памяти
001144 000065 .WORD 65 ; Необходимое количество слов. Сюда пп вернет количество слов освобожденной памяти, если она меньшще заданной.

после первого запроса код ЦП переносит адресс который вернул ПП в 001152...

001146 010000 .WORD 10000 ; команда 20 (byte: 20 byte: 00) - запись
001150 000032 .WORD 32 ; устройство 32 ПП
001152 000000 .WORD 00 ; сюда после первой операции переносится 001142, то есть начальный адресс в ПП
001154 001252 .WORD 1252 ; Адресс начала в ЦП
001156 000065 .WORD 65 ; 65 слов перенести

перед тем как сделать третий запрос, код в ЦП меняет в 1136 старший байт 1 на байт 30

001136 014000 .WORD 14000 ; (byte: 30 byte: 00) команда - выполнить код
001140 000032 .WORD 32 ; устройство 32 ПП
001142 000000 .WORD 00 ; сюда ПП вернул адресс начала освобожденной памяти, то есть запустить с этого адреса
001144 000065 .WORD 65 ; ...