1. Клуб PDPшков весьма элитарен и закрыт.
2. Когда ПЦшники поднялись, PDP уже вымерли.
Вид для печати
Не, ну эмулятор то вон запилили. А если запилили эмулятор, то значит точно знают все опкоды. Но сорцы конечно закрыты, как всегда?
добавлено: сейчас не каждый креативный менеджер знает, что такое последовательный
порт - я бы даже так сказал )))
http://progopedia.ru/version/assembler-pdp-11/
:tongue:Код:.TITLE HELLO WORLD ; Название
.MCALL .TTYOUT,.EXIT
HELLO:: MOV #MSG,R1 ; Начальный адрес строки
1$: MOVB (R1)+,R0 ; Получаем следующий символ
BEQ DONE ; Если ноль, выходим из цикла
.TTYOUT ; Иначе печатаем символ
BR 1$ ; Повтор цикла
DONE: .EXIT
MSG: .ASCIZ /Hello, world!/ ; Строка Hello, world!
.END HELLO ; Конец программы HELLO
Это только ММ (у него такой уникальный ретро-стеб, ну и беспредельное восхищение прогой DESS.SAV), правильное DEC название SLU (serial line unit).
Первоначальный софт для pdp11 писали еще тогда когда самого железного pdp11/20 небыло, по идее использовали симулятор и ассемблер писанные на фортране для pdp10 (?)...
Я же скинул Вам сцылу на пакет http://retrocmp.com/tools/pdp11gui там и оболочка (предпологающая общение через ПУЛЬТъ), и эмуль, и ассемблер и дизассемблер...
Софт Patron-a это вообще "отдельная вселенная", тут тебе и эмуляторы ДВК, и протокол виртуального диска HX который позволяет легко грузить RT11 и использовать ее софт просто при наличии СPU (c ПУЛЬТъ-ом) + RAM + SLU (системный 177560), и драйвер упрощенного HD, и RT11 прямо работающий из cmd.exe (winnt) таким образом позволяющий пускать тот же macro11 прямо из виндового cmd, и плагины к total commander, и плагины к IDA, и схемы CL<->RS232c... может еще чего забыл.
UPDATE!
Есть такой вариант: влепить на плату К1801ВП1-030 (16шт КР565РУ6), К1801ВП1-035, К1801ВМ1 и КР1801РЕ2-000. На этой штуке пойдет rt11sj и весь ее софт.
Судя по кардиограмме, 1801ВМ1 - завелся.
И похоже, что пытается прочитать порт по SEL1 :)
http://savepic.net/9930839m.png
http://savepic.net/9953367m.jpg
Генератор генерирует генеруру на 3,68МГц, оно будет полезно для последовательного порта.
Старт процессору обеспечивает мелкая восьминогая Тини13, она формирует последовательность сигналов ACLO и DCLO, ибо у этого процессора сигнал сброса в привычном понимании отсутствует напрочь.
- - - Добавлено - - -
Блин, заказ на 580ИР83 накрылся тазом... Придется еще где-то искать. Они - инвертирующие защелки адреса по задумке.
Вон, если пересылки не боишься, то у свинки есть - КР580ИР83 4р/шт
http://zx-pk.com/forum/viewtopic.php?f=14&t=5917#p59538
Там же и буферы с инверсией - КР580ВА87 4р/шт
Или тебе в золоте подавай. :)
Mick, спасиб! Но почту ждать - долго. Нашел в центре по три шесят, три штуки в наличии. Хватит как раз. Придется ехать...
http://savepic.net/9938867.jpg
- - - Добавлено - - -
Сразу видно страну происхождения, летящая звезда из МГТФ :)
Вопрос к людям из Элитного Клуба :)
На схеме БК-0010 есть один непонятный для Потомственного Интеловода момент.
Точнее, не один, но этот - круче всех.
Микросхемы ПЗУ, DS17 и DS19. Выводы CEn сидят на земле. Как так? Каким образом ПЗУшки знают, когда им следует откликаться? Включено же постоянное подключение к шине?
Alex_K, спасибо!
Я так и подозревал, что они или с завода жестко настроены на свой адресный интервал, или при прошивании туда заносятся биты для дешифратора.
Все это какая-то параллельная реальность мира МП:)
Второй вопрос - даже не вопрос, а размышление вслух. Может кто ткнет носом, если я где ошибаюсь.
Поскольку я впервые работаю с шестнадцатибитной шиной адреса, то... Адрес А0 в ней по сути не используется, только как вспомогательный сигнал при байтовой записи? В остальных случаях там идет ноль (ибо адреса слов всегда четные), или гоняется нулевой разряд данных в случае мультиплекса.
Имея ПЗУ с 16-битной организацией памяти (27С1024), которая имеет разряд А0 на шине адреса, подразумеваем. что он должен быть подключен фактически к АD1 шины МПИ в данном случае. Разделения на БАЙТОВЫЙ доступ, как это бывает в ОЗУ, в данной ПЗУ нет, разумеется.
Ну и далее, со смещением - A1 -> AD2, A2 -> AD3, итд.
Что касается разрядов данных, то там все делается без смещений, ибо D0 имеет свой сакральный смысл в слове данных.
Разряд AD0 имеет так же функцию указывать СОВМЕСТНО с сигналом WTBT на шине МПИ ту ОЗУшку (восьмибитную), в которую пойдет запись при БАЙТОВОМ доступе.
- - - Добавлено - - -
Согласен :)
Но это реально какой-то мир Людей в Белых Халатах у ПУЛЬТОВЪ, в помещении, наполненном гудящими машинами и моргающими лампочками :)
Окунуться в это очень интересно.
На всякий случай доп. литература
http://archive.pdp-11.org.ru/BIBLIOT...rog_PDP11_org/
Используются все 16 разрядов адреса при его выставлении на шину. Да, обычно при чтении и записи целого слова разряд AD0 равен нулю (точнее единица, т.к. шина инверсная). Но если читается байт из нечетного адреса или слово по нечетному адресу (и такое возможно), то тогда на AD0 выставляется единица.
Сами устройства на шине обычно при чтении/записи полного слова разряд AD0 при выставлении адреса игнорируют, а так он нужен обычно при записи байта, если устройство поддерживает байтовую запись.
Тем временем, в далекой. далекой Галактике...(С) Гнусавый Голос
http://savepic.net/9937677m.jpg http://savepic.net/9942797m.jpg
- - - Добавлено - - -
Alex_K, Просто я обратил внимание, что ПЗУ при подключении игнорируют А0, а ОЗУ - используют. Подразумеваю доступные схемы на МПИ, имею ввиду. Оно и логично, если носитель информации только читается, то зачем мудрить с байтовым доступом? Проще прочитать слово и выбрать нужное, чем усложнять устройство железа.
- - - Добавлено - - -
Вот тут уже хотелось бы понять, как действуют ассемблеры, если в исходниках программ встречается список байтов? Они размещают байты побайтно в дампе, или суют этот байт данных в младший байт слова, то есть чередуют данные с нулем?
Спасибо, учту при разборах косяков :)
- - - Добавлено - - -
Прикошачил к схеме GALку, сделал пробную прошивку для преобразования МПИ->интел с селектором устройств.
Теперь перерыв до момента покупки 580ИР83.
- - - Добавлено - - -
Да, еще порт надо какой-нить прилепить, на SEL2, поморгать светиком...
- - - Добавлено - - -
Чуть не забыл врезать резистор в разрыв GAL -> RPLY. Оно же бывает и выходным сигналом, не только входным.
Очень надеюсь, что проц останется рабочим после кучи припаек.
1801ВМ1, 1801ВМ2, 1806ВМ2 поддерживают адресацию нечетных слов.
1801ВМ3, 1806ВМ3, 1806ВМ5, 1836ВМ3 ( и некотрые др. процы с ДП ) трапуют по 4 вектору, при обращении к нечетному слову.
*
В рекомендация от DEC есть упоминание, настоятельно не рекомендующее организацию байтовой записи в сегменте адресов BS7 (для 1801ВМ1 - адреса 160000 ... 177776 ( порты )).
Лично я это регулярно нарушаю :eek:
*
Реально на А. сектор кодеров выглядел примерно как школьный класс, только письменные столы с выдвижными тумбами расставлены довольно хаотично, на каждом столе - 1 шт. ДВК-3, или ДВК-4 с прицепленными внешними мониками МС6105.
Так же на каждом столе принтер Роб 6329 ( широкий А3 ) или Д-100, и стопочка листочков А4, и несколько больших толстеньких папок и тетрадок на 96 листов. Разведена сеть на основе КНГМД ( МХ ) ДВК, или даже макетки - полуплаты с сетью. Сервер - 386 с самодельной ISA-16 платой. Винтами на ДВКашках для серьезных проектов предпочитали не пользоваться, ввиду их смехотворной надежности. "Болгарию" сразу старались уронить, но так, что бы не было заметно явных следов насилия, т.к. она страшно гудела/звенела с завываниями от самолета, и надежность болгарских винтов была в области 000000 ( за 1 год эксплуатации ). Дисководики - для кодеров - строго-при-строго МС5311 "5" приемка, почтенные гуру кода ставили Роб ( Тик-55 ) , а в период с 1989 года - и 3.5" Сони с 5.25 мордашкой ( абсолютная безупречность работы на дискетах Басф 720 кбайт ).
Контроллеры дисков - МУ ( полуплаты КМД ДВК ), или кастрированные МУ ( 531АП2 с 1801ВП1-128 и ПЗУ 1801РЕ2-326 ).
Насчет белых халатиков - да, на А. это был стиль работы.
- - - Добавлено - - -
Вообще я бы посоветовал прицепить на 1801ВМ1 КР1801ВП1-065 - телеграфный порт . Для него нужна частота 4608 кгц, и МАХ232 для организации высоковольтного интерфейса с ИБМ ЭВМ. Вход BS7 имеет формулу "( АД15=0в + АД14=0в. + АД13=0в ) ----> BS7=0в." . Необходим только в момент перепада сигнала SYNC с +5в. до 0в. Адрес порта выбрать как 177560 .
Примерная Э3 телеграфа :
http://storage6.static.itmages.ru/i/...adc730bedd.jpg
- - - Добавлено - - -
Более подробно о подключении ВП1-065 можно посмотреть в моей поделке "УТК" - в любой версии.
Делать ВП1-065 ручками в плюшке - потеря времени, если нет жестких требований к габариту конструкции.
Очень кратко ВП1-035 ( первобытная урезка ВП1-065 ) описана в МПСС в серии статей о БМК 1801ВП1.
Отличия 035 и 065 :
065 умеет только 7 или 8 бит, а 035 - еще и 5 бит.
065 имеет полноценный аппаратный сигнал о занятости приемника и передатчика.
Еще мелкие непринципиальные отличия, не используемые в простых конструкциях.
Ewgeny7, вот ИМХО интересная тема : http://forum.pk-fpga.ru/viewtopic.ph...3&p=6183#p6183
там всего 4 или 5 сообщений (рекорд информативности + игра которую и на этом форуме несколько лет назад уже публиковал автор).
Просто от себя очень рекомендую в плане знакомства с ОС RT-11 поставить у себя эмулятор ДВК Patrona, в котором достаточно точно эмулируются процессоры 1801ВМ1-2-3 и есть готовые файлы конфигурации эмулятора
По поводу отличий - главное и принципиальное отличие PDP - это совсем другая идея (философия) и ориентация на промышленно-военный комплекс как основных клиентов. Вот в СССР сделали персональные и даже бытовые (PDP) БКашки и УК-НЦ, а игрушки под них вообще только у нас в таком количестве (!). У классических PDP только символьные (текстовые) игры.
MM, спасибо за схему, но это будет нарушением концепта. Предполагается только сам 1801ВМ1 и окружение из "интеловских" микросхем, как всем понятных и ширпотребных. Я буду прицеплять 580ВВ51А в качестве серийника.
- - - Добавлено - - -
Компилятор от Алексея vinxru, я уже бывал на этой страничке. А компилятор как раз предполагал использовать хотя бы для первого ознакомления.
- - - Добавлено - - -
Продолжу размышления вслух.
Сигнал WTBT - "ЗАПИСЬ байта", в совокупности с А0 определяет, какой байт будет записываться в ОЗУ, старший или младший.
Что примечательно, о ЧТЕНИИ одного байта я не нашел упоминания, может плохо искал? Ищу дальше. Но пока вижу, что чтение идет с четных адресов и сразу словами.
А вот есть и выдержка из Технического Описания 1801ВМ1, которое я нашел в теме про реверс процессора, дай Бог памяти, вроде vslav его пишет, поправьте если я неправ:
"Микропроцессор К1801ВМ1 чтение данных всегда выполняет 16-битными словами. Если требуется
только один из байтов, то ненужные разряды игнорируются. Также микропроцессор выставляет адрес "как
есть", и чтение слов по нечетному адресу может приводить к некорректно прочитанным данным, поскольку
внешняя память и устройства обычно не поддерживают такой режим."
Вот отсюда и резонный вопрос - если размещать слова по нечетным адресам, то это должно вызвать много геморроя для контроллера памяти, ведь он вынужден будет считывать байт из "следующего" слова, чтобы подпихнуть его процессору. При этом не забыть "сдвинуть" байты на магистрали из старшего в младший, и наоборот. Это как-то реализовано в наших PDP-машинах? ДВК, БК и иже с ними?
Мне такой подход в корне не нравится, и проще следить за четностью адресов слов.
И последнее. Есть ли в наборе команд ВМ1 однобайтовые команды? Упоминали, что вроде как есть (?). Так ли это? Я сейчас сам ковыряюсь с ассемблером, пытаюсь найти подобное.
Пока же даже команда HALT вижу представленной 00 00. То есть, два байта, слово.
Сдвиг не осуществляется, всегда читается/пишется "как есть" - т.е. "по-проще".
*
Однобайтовых команд нет - "для простоты". Но есть команды для работы с отдельным байтом ( например, в памяти ). С отдельным байтом не рекомендуется работать в регистрах проца - там куча ограничений.
- - - Добавлено - - -
Это сразу делает невозможным применение стандартных ПЗУ , как БИОСа , так Бейсика / Фокала.
Целесообразней осуществить эмуляцию ВП1-065 в плюшке.
Как есть - это я понимаю так, что поскольку "чтение всегда читает слова", то непроизвольного сдвига на нечетные адреса не произойдет, процессор такого не сделает.И если программист в дампе программы невзначай напихал нечетное количество байт в каком-либо байтовом списке, и адреса "поплыли", то такая программа просто будет неработоспособна. Что касается чтения, то я почему-то не могу нигде найти упоминания, что может прочитаться один отдельный байт, произвольный. Есть только упоминание, что чтение идет только словами, а всё лишнее - откидывается. То есть 1, чтение всегда будет работать с четными адресами, поскольку читает ТОЛЬКО слова. То есть 2, для ПЗУ не требуется произвольный доступ к байтам.Работа в ОЗУ с отдельными байтами на чтение - получается аналогична. Запись - возможна запись отдельного байта. Это логично, иначе пришлось бы где-то хранить содержимое второго байта в слове, пока модифицируется первый. Но эти операции опять-таки не нарушают четность адресации последующего кода.Если все перечисленное верно - то вопрос закрыт и можно идти дальше :)
А у меня такой абстрактный вопрос - сабж тормоз или нет? Ну, в сравнении скажем с 8086 с 16-битной ШД на 5MHz? Проворно колет и множит целочилсенные 16-битные?
Примерная аналогия по производительности при 0 тактов ожидания ОЗУ :
1801ВМ1-5 мгц = 580ВМ80А-2.5 мгц, в основном на логических командах. На копировании массивов данных ВМ1 быстрее в пару раз.
1801ВМ2-10 мгц = Z80 - 4 мгц.
1801ВМ3-6 мгц = 1810ВМ86-5 мгц.
Оценка очень приблизительная.
На шине МПИ байтовое чтение отсутствует, всегда читается полное слово, а затем, если команда байтовая, процессор берет нужный байт - младший при A0=0 и старший при A0=1. Устройства при чтении и словной записи обычно игнорируют младший бит адреса A0, поэтому при чтении адреса 0 и адреса 1 всегда будет прочтено слово с адресов 0 и 1, соответственно в младшем байте значение адреса 0, в старшем - адреса 1. Поэтому никаких сдвигов байтов нет, дали команду записи слова по адресу 1 - запишется слово в адреса 0 и 1, а не в 1 и 2.
- - - Добавлено - - -
Да, такое может быть только с устройствами на странице ввода-вывода, если у них дешифрация сделана коряво. Но обычно при чтении такого не бывает. А вот многие устройства не обрабатывают сигнал WTBT, потому и запись байта может пройти криво.
- - - Добавлено - - -
Нет, все команды занимают целое слово, может занимать от одного до трех слов, в зависимости от используемых методов адресации. Есть команды, работающие с байтами. Большинство команд работают как со словами, так и с байтами. Ограничение есть при работе с регистрами, можно работать только с младшим байтом, к тому же команды MFPS и MOVB при записи в регистр старший байт расширяют знаковым разрядом младшего байта. Ну и автоинкрементый (код 2) и автодекрементный (код 4) методы адресации при работе с байтами у регистров R6 (указатель стека) и R7 (счетчик команд) изменяют значение на 2, а не на 1, как при работе со словами.
Alex_K, спасибо за развернутый ответ, наконец-то он появился, а то всё вокруг да около...
- - - Добавлено - - -
Запуск. Какие-то чтения/запись в SEL1, и - останов.
http://savepic.net/9916933m.png
- - - Добавлено - - -
Шина AD подтянута к +5, ПЗУ проецируется на первую половину памяти.
При чтении по адресу порта SEL1 должна читаться просто подтянутая шина 0xFF.
То есть, процессор прочитает 0000h.
И должен перейти на исполнение программы с нулевого адреса, где сидит ПЗУ.
Но что-то пошло не так :)
- - - Добавлено - - -
Есть очучение, что сигнал RPLY какой-то не такой.
- - - Добавлено - - -
Ага, самдурак(С). Исправил.
http://savepic.net/9950749m.png
- - - Добавлено - - -
Сигнал SYNC остается в активном состоянии. Что же ждет процессор?
MM, уже разместил:
Но до этого кода дело пока не доходит, после манипуляций с SEL1 проц оставляет SYNC в активном состоянии, но запросов чтения/записи почему-то не предъявляет, висим.Код:ORG 0x0000
EntryPoint: MOV #0xAA,R0
Cyc: MOV R0,@#177714
COMB R0
JMP Cyc
- - - Добавлено - - -
Упс... Таки адрес порта для SEL2 177716 или 177714?
Хоспаде,просто рвет мне мозг. Ну как можно понять, что здесь пишется в порт значение из R0, а не в R0 заносится значение? Это еще хуже, чем индусскоеКод:MOV R0,@#177714
Код:if (1 == accept_flag) {
Это не индусское, это элемент стиля, помогает избежать ошибочного присваивания вместо сравнения. Много у кого попадается, сам иногда пользуюсь.
А по теме - я составляю такой документ. Он там далеко не полный, и уже видно что для начинающих разбираться в PDP он сложноват, содержит лишние подробности, но я готов дорабатывать его, вносить изменения и разъяснения. Так же был бы благодарен за замеченные опечатки и ошибки.
Хексы на этапе отладки мне в разы удобнее птичьего восьмиричного.
Можно я буду пользоваться тем инструментом, который лично мне удобен?
А не гадать, куда мне засунуть МАКРО.САВ, чтобы оно мне код дало.
Я пока пользуюсь ассемблером от Алексея Морозова, что удобно и быстро и понятно и шестнадцатирично. Хоть и не канонично. Если затронул самое святое - простите засранца :)
- - - Добавлено - - -
Ага, я про него и упоминал, и ссылался чуть выше. Замечательный даташит получается.
- - - Добавлено - - -
Старые осцилограммы уже недействительны, нашел кучку ошибок, исправляю.
Vslav, два вопроса)по ссылке на документ
по документу
- что означает 08 в названии PDF-файла ?
- при размещении у себя в библиотеки, как мне гарантировать правки и исправления (обновления),
то есть актуальную версию?
Огромная благодарность за проделанную работу, я признаюсь боялся что вам надоест и вы всё забросите
и переключитесь.
Да и совсем совсем 3-й вопрос : как там со ВТОРЫМ камушком? Я просто обязан спросить, поскольку видел вашу
плату только с ВМ1, не пробовали пока в сторону УК-НЦ думать?[свернуть]