Просмотр полной версии : ДВК (и всё, что с ними связано)
Страницы :
1
2
3
4
5
6
[
7]
8
9
10
11
12
13
14
15
16
17
18
19
Andrey_Ak
16.02.2012, 12:39
Интересно было-бы найти следующее:
NOTES.MX Краткий перечень основных отличительных свойств
HELP.MX справочник по управлению драйвером
README.MX общее описание свойств драйвера
MANUAL.MX руководство по использованию драйвера
TRICKS.MX руководство по особым случаям применения
Интересно было-бы найти следующее:
NOTES.MX Краткий перечень основных отличительных свойств
HELP.MX справочник по управлению драйвером
README.MX общее описание свойств драйвера
MANUAL.MX руководство по использованию драйвера
TRICKS.MX руководство по особым случаям примененияHELP.MX последней версии - см. выше.
Нормальный README.MX последней версии - у кого-нибудь вполне может быть.
NOTES.MX, MANUAL.MX и TRICKS.MX получали (судя по всему) только коммерческие пользователи и найти эти файлы будет нелегко.
Andrey_Ak
16.02.2012, 13:21
Получается вот последние, нормальные версии файлов
HELP.MX и README.MX
см. вложение
33069
Получается вот последние, нормальные версии файлов HELP.MX и README.MXHELP.MX - самый новый ( 25 января 1988 ), а вот README.MX - промежуточный ( 20 июля 1987 ).
Мои битые версии: README.MX1 ( 7 июля 1987 ) ; README.MX2 ( 25 января 1988 )
Andrey_Ak
16.02.2012, 13:42
HELP.MX - самый новый ( 25 января 1988 ), а вот README.MX - промежуточный ( 20 июля 1987 ).
Мои битые версии: README.MX1 ( 7 июля 1987 ) ; README.MX2 ( 25 января 1988 )
- А где в моем README.MX написано что он 20 июля 1987?
Я вижу там только 7 июля 1987
- А где в моем README.MX написано что он 20 июля 1987? Я вижу там только 7 июля 1987Я их перепутал.
Получается, что он самый старый. Это мой README.MX1 ( 20 июля 1987 ).
Повторный поиск принёс ещё несколько файлов (http://zx.pk.ru/attachment.php?attachmentid=33076):
Image : MX+.DSK
Format : DSK
Size : 62 Kb
Volume ID: RT11A
Owner :
File Blocks Date Bytes
---------- ------ ----------- ----------
EDIK .MX 13 13-Apr-1990 6'656
NOTE .LST 2 03-Mar-1988 1'024
TESTMX.SAV 39 01-Oct-2011 19'968
TESMX2.SAV 13 30-Aug-2011 6'656
TSTMX .SAV 13 26-Sep-1989 6'656
MXOLD .SYS 10 10-Jun-2009 5'120
MX .SYS 10 17-Feb-1991 5'120
MX .MAC 17 17-Feb-1991 8'704
---------- ------ ----------- ----------
8 Files, 117 Blocks
0 Free blocks
Andrey_Ak
16.02.2012, 17:17
Будем разбираться...
Давайте все вместе подумаем, как сделать на ПиСи загрузочную дискету МХ?
Читать дискеты МХ на ПиСи умеем, форматировать и писать на них тоже умеем,
а вот как записанную дискету на ПиСи сделать загрузочной?
Читать дискеты МХ на ПиСи умеем, форматировать и писать на них тоже умеем,
Так, я что-то пропустил? С этого места по-подробней пожалуйста - где/у кого есть подробное и универсальное средство для чтения MX дискет на ПЦ?
DZ - это драйвер контроллера НГМД Электроники МС-0585.
Формат тоже МФМ, аналогичный MY, секторов на дорожку, насколько помню, тоже 10, но есть интерливинг (физический порядок секторов на дорожке отличается от логического, при чтении на MY или на IBM PC требовалось переставлять их в считанном образе).
Почему тогда, раз отличается только физический порядок секторов, диски от МС-0515, которые, как я понял, формата MY, имеют в образа перепутанные местами сектора, ткогда как образы MZ дисков с УКНЦ линейные?
формата MY, имеют в образа перепутанные местами сектора
Делал образы MY, никаких перепутанных секторов, их прекрасно писали на дискеты и работали.
Делал образы MY, никаких перепутанных секторов, их прекрасно писали на дискеты и работали.
Посмотри образы дисков от МС-0515, у которых сектора перепутанные. Там даже в теме об МС-0515 об этом писали. А плагин для WC их видит, значит в нем заложена возможность такого перепутывания. Значит это какой-то определенный формат. Какой, если не MY?
Посмотри образы дисков от МС-0515, у которых сектора перепутанные. Там даже в теме об МС-0515 об этом писали.
Ну про 0515 ничего не скажу - может местная особенность.
На RX50 обычно тоже сектора не перепутанные, а на DEC PRo между тем тот же RX50, только контроллер другой.
Почему тогда, раз отличается только физический порядок секторов, диски от МС-0515, которые, как я понял, формата MY, имеют в образа перепутанные местами сектора, ткогда как образы MZ дисков с УКНЦ линейные?У DZ "перепутаны" логические номера секторов. Про физическое положение секторов на дорожке знают (в большинстве случаев) только контроллеры дисководов. Но если драйвер DZ пишет логическую 0-ю дорожку на физическую первую, а на физическую 0-ю дорожку пишет логическую 79-ю (да ещё и сектора перемешивает), то вот это и называется "как следует всё перепутать" :)
У DZ "перепутаны" логические номера секторов. Про физическое положение секторов на дорожке знают (в большинстве случаев) только контроллеры дисководов. Но если драйвер DZ пишет логическую 0-ю дорожку на физическую первую, а на физическую 0-ю дорожку пишет логическую 79-ю (да ещё и сектора перемешивает), то вот это и называется "как следует всё перепутать" :)
Это называется издевательство - взять то, что сидело в оригинале на одном контроллере и было легко переносимым и пересадить на два разных контроллера и сделать по возможности несовместимым :)
У DZ "перепутаны" логические номера секторов. Про физическое положение секторов на дорожке знают (в большинстве случаев) только контроллеры дисководов. Но если драйвер DZ пишет логическую 0-ю дорожку на физическую первую, а на физическую 0-ю дорожку пишет логическую 79-ю (да ещё и сектора перемешивает), то вот это и называется "как следует всё перепутать" :)
Бррр! Как все запутано.
Зачем он все это делает? Зачем перемешивает сектора, и зачем ДОРОЖКИ?
И как это распознает плагин под WC?
Значит у МС-515 DZ?
Бррр! Как все запутано.
Зачем он все это делает? Зачем перемешивает сектора, и зачем ДОРОЖКИ?
И как это распознает плагин под WC?
Значит у МС-515 DZ?Да. У МС-0515 точно такой же DZ, как и у Э-85 ( и Dec Pro-350/380 ).
Поскольку физические сектора у контроллера DZ идут подряд и на всех дорожках начинаются с номера 1, а заканчиваются номером 10, то авторы драйвера DZ посчитали, что процессор не успеет обработать прочитанный сектор до прихода следующего. Поэтому драйвер DZ пишет сектора через один (и ещё сдвигает их номера от дорожки к дорожке).
Но зачем он 0-ю дорожку пишет на 1-ю - это великая тайна.. Возможно, чтобы жалкие юзеры трепетали перед мощью великих и ужасных авторов драйвера DZ :)
Возможно, чтобы жалкие юзеры трепетали перед мощью великих и ужасных авторов драйвера DZ :)
Затем же зачем в P/OS не стали включать самые интересные возможности из RSX-11M-PLUS/Micro - чтобы не дай бог усеры не смогли превратить свой прошник в полноценную машинку :)
Товарищи, может быть я немного не в тему, но меня давно мучают пара вопросов, связанных с тематикой чтения и записи дисков разных форматов.
1). Попробовать сваять девайс, с помощью которого подключать стандартные контроллеры PDP-11-совместимых машин. Своеобразный мост. Естественно, необходим будет софт для этого железа. Может быть, что-то подобное уже и есть, просто, я не в курсе.
2). Другой вариант, в чём-то более сложный. Должен в себе содержать несколько версий контроллеров (по железу, возможно, частично переконфигурируемых джамперами), подключаться к ISA либо PCI (в первых версиях, в дальнейшем к USB).
Прекрасно понимаю, что подводных камней при реализации подобных "идей" будет более чем достаточно, но решение будет "раз и на века". :)
матов.
1). Попробовать сваять девайс, с помощью которого подключать стандартные контроллеры PDP-11-совместимых машин. Своеобразный мост. Естественно, необходим будет софт для этого железа. Может быть, что-то подобное уже и есть, просто, я не в курсе.
E11 и CHARON умеют работать с родными железяками, подключенными через QBUS/UNIBUS адаптер. Только адаптеры эти стоят недешево и функционал доступен только в коммерческих версиях эмуляторов. CHARON впрочем коммерческий сейчас найти не проблема :)
Читать дискеты МХ на ПиСи умеем, форматировать и писать на них тоже умеем,
а вот как записанную дискету на ПиСи сделать загрузочной?
Записать систему на младшие дорожки. Раз "писать умеем".
Я вот только читать умею, да и то через шнурок с fdd на lpt
Еще умею форматировать.
А писалка из комплекта DVK.arj у меня виснет. Если форматилку я еще "лечу" замедлялкой в голом досе, то писалка, видимо, гасит прерывания и тормозилка отпадает.
Записать систему на младшие дорожки. Раз "писать умеем".
Я вот только читать умею, да и то через шнурок с fdd на lpt
Еще умею форматировать.
А писалка из комплекта DVK.arj у меня виснет. Если форматилку я еще "лечу" замедлялкой в голом досе, то писалка, видимо, гасит прерывания и тормозилка отпадает.
Там у него проблема в том, что писалка - драйвер файловой системы для доса. Умеет ли оно отрабатывать досовские прерывания прямого доступа - фиг знает. Быстро заглянул вовнутрь драйвера - вектор досовский перехватывает...
Хотя прямой доступ обычно делается отдельными интами - их вроде оно не трогает.
Насчет повисания - скорее всего она не работает на быстрых машинах.
Могу попробовать на 386 запустить у себя.
E11 и CHARON умеют работать с родными железяками, подключенными через QBUS/UNIBUS адаптер. Только адаптеры эти стоят недешево и функционал доступен только в коммерческих версиях эмуляторов. CHARON впрочем коммерческий сейчас найти не проблема :)
СПАСИБО, за наводку! :) Бегло погуглил... О самих адаптерах, особо ничего не нашёл, наверное плохо искал... Может есть толковые ссылки об этом? А про "коммерческий CARON" - имелась в виду таблЭтка? :)
СПАСИБО, за наводку! :) Бегло погуглил... О самих адаптерах, особо ничего не нашёл, наверное плохо искал... Может есть толковые ссылки об этом? А про "коммерческий CARON" - имелась в виду таблЭтка? :)
В сети валяются все варианты charonов для виндовса. Для нас интересны CHARON-TB и CHARON-11.
Andrey_Ak
16.02.2012, 21:09
Так, я что-то пропустил? С этого места по-подробней пожалуйста - где/у кого есть подробное и универсальное средство для чтения MX дискет на ПЦ?
DVK.RAR - Драйвер для чтения и записи дисков в формате совместимом с форматом MX-MY (Реально умеет только MX)
В голом досе, на 286 машине получается форматировать дискеты в формате MX, и писать на них файлы под DOS, командами типа:
COPY C:\DST\MX\*.* A:\
MXONPC.RAR - Программа чтения дисков формата MX на PC от Владимира Полетаева (Работает, читает любые MX дискеты, но надо подобрать мамку для нее)
В принципе в обоих программах есть описание на русском...
33087
Andrey_Ak
16.02.2012, 21:12
Записать систему на младшие дорожки. Раз "писать умеем".
Я вот только читать умею, да и то через шнурок с fdd на lpt
Еще умею форматировать.
А писалка из комплекта DVK.arj у меня виснет. Если форматилку я еще "лечу" замедлялкой в голом досе, то писалка, видимо, гасит прерывания и тормозилка отпадает.
- Писалка и форматилка у меня работают на "Русской" 286, 12MHz,
4MB памяти, под DOS...
Требуется помощь!
В документации MXONPC указаны м/с с которыми программа точно работает и точно не работает. А как понять - будет ли работать с каким-либо иным контроллером, но кроме практических экспериментов? Например, в документации указан как подходящий SMC FDC37C666GT, а у меня есть SMC FDC37C669 - он подойдет?
но надо подобрать мамку для нее)
То есть биос?
Все выложенные в теме "вещи" обязательно прилеплю к архиву !!! Ух сколько всего сразу интересного, Titus поднял бурю )))
Да и на всякий случай напомню, про дискету от Patrona в архиве, там бут прописан
похоже для MY, но и другие sys присутствуют >>> my.dsk (http://pdp-11.org.ru/~hobot_lmb/ukdwk_archive/dwkwebcomplekt/MY.DSK)<<<
Ещё есть дискета sysol её я выкладывал в теме по Э-85 ( у меня уже с этой аббревиатурой что-то зловещее тормозное и страшно неудобное в виде образа
сложилось). Дискеты от 0515 у меня лежат, если нужно я их выложу (в общем хламнике их вроде нет).
Ещё момент (по архиву!!!), то что описания попали и находятся в папке DVKGAMES, конечно (!)ОЧЕНЬ(!) не правильно, в самое ближайшее время все описания и хелпы от туда по двк переедут в папку библиотеки.
И если удастся считать старинные МХ - очень пожалуйста делитесь образами - наверняка там интересный старинный софт от(для) ДВКашек !!!
Andrey_Ak
16.02.2012, 21:30
Требуется помощь!
В документации MXONPC указаны м/с с которыми программа точно работает и точно не работает. А как понять - будет ли работать с каким-либо иным контроллером, но кроме практических экспериментов? Например, в документации указан как подходящий SMC FDC37C666GT, а у меня есть SMC FDC37C669 - он подойдет?
- Только методом тыка... У меня на одной мамке микросхема указанная
как подходящая, но пришлось помучатся, чтоб запустить на ней прогу...
И в тоже время, есть 286, микросхема которой вообще не указана в доке,
но на ней МХ читаются без проблем...
Можно сделать дискету МХ программой форматирования из второго архива, и пробовать ее прочитать.. :)
То есть биос?
Нет, речь про контроллер флоппи.
Нашел у себя PVI-486SP3 (на ней SMC FDC37C665GT) - надеюсь она живая ...
Andrey_Ak
16.02.2012, 21:35
Все выложенные в теме "вещи" обязательно прилеплю к архиву !!! Ух сколько всего сразу интересного
Дискеты от 0515 у меня лежат, если нужно я их выложу (в общем хламнике их вроде нет).
Ещё момент (по архиву!!!), то что описания попали и находятся в папке DVKGAMES, конечно (!)ОЧЕНЬ(!) не правильно, в самое ближайшее время все описания и хелпы от туда по двк переедут в папку библиотеки.
И если удастся считать старинные МХ - очень пожалуйста делитесь образами - наверняка там интересный старинный софт от(для) ДВКашек !!!
Я тоже сейчас занимаюсь приводом в порядок всех доков и ПО для клонов PDP-11, все выкладываю у себя на сайте и на форуме...
Вот что уже сделано по документации:
http://www.tis.kz/forum/topic.php?forum=1&topic=8
http://www.tis.kz/forum/topic.php?forum=1&topic=7
Примерно так-же будет, даже более подробно по Софту,Драйверам к ДВК/Эл.60/Эл.100-25
Так-же веду полезные записи по интересным вещам:
http://www.tis.kz/forum/topic.php?forum=1&topic=4
Так-же веду полезные записи по интересным вещам:
Вот не плохо бы (по возможности) на том форуме то же озвучить запрос на дискеты и образы дискет для УКНЦ\ДВК, можно дать вот такую ссылку на Dimouse.ru (http://dimouse.ru/norka/computers/ukncdwk.html) там в приветственной статье, есть мыло моё (например). С целью круг поиска расширять по возможности, поиск новых
участников(доноров) дискет и софта, ну понятно - я думаю ))))))
РУКОВОДСТВО ПО ИСПОЛЬЗОВАНИЮ
ТЕКСТОВОГО ЭКРАННОГО РЕДАКТОРА "EDIK" ДЛЯ
ПЕЧАТИ ДОКУМЕНТАЦИИ ПО ДРАЙВЕРУ "MX V02.2"
-------------------------------------------------
ТЕКСТОВЫЙ ЭКРАННЫЙ РЕДАКТОР ОБЩЕГО НАЗНАЧЕНИЯ "EDIK"
(ИЛИ "EDK") РАЗРАБОТАН И.Д. НЫСОМ, ЛЮБЕЗНО ПРЕДОСТАВИВШИМ
ЕГО ДЛЯ ВКЛЮЧЕНИЯ В КОМПЛЕКТ ПОСТАВКИ ДРАЙВЕРА "MX V02.2".
http://i.smiles2k.net/hello_byby_smiles/wavey.gif (http://smiles2k.net/hello_byby_smiles/index.html)
Arseny, Я запарился мамку подбирать, сделал для mxonpc кабель FDD->lpt как в доке написано на MXONPC
Но это только чтение :-(
а вот это опечатка или верно написано ???
SET MX: NTRK=40. <ВК> -КОЛЛИЧЕСТВО ДОРОЖЕК
SET MX: STER=25. <ВК> -ВРЕМЯ ПЕРЕХОДА С ДОРОЖКИ
НА ДОРОЖКУ(ms)
Б) ДЛЯ РАБОТЫ С НАКОПИТЕЛЕМ "ЭЛЕКТРОНИКА 6121":
SET MX: NTRT=80. <ВК>
SET MX: STER=3 <ВК>
может параметр всё же STEP ???
---------- Post added at 23:22 ---------- Previous post was at 23:20 ----------
Но это только чтение :-(
Чтение = возможность создание образа диска ? Если да - то это уже победа !!!
По крайней мере "оцифровать" с загибающихся носителей всё что только можно !!! )))
Andrey_Ak
16.02.2012, 23:28
Чтение = возможность создание образа диска ? Если да - то это уже победа !!!
По крайней мере "оцифровать" с загибающихся носителей всё что только можно !!! )))
- Да, чтение в образ DSK... Это получается...
---------- Post added at 01:27 ---------- Previous post was at 01:25 ----------
Arseny, Я запарился мамку подбирать, сделал для mxonpc кабель FDD->lpt как в доке написано на MXONPC
Но это только чтение :-(
- Помимо мамки, еще надо с параметрами играться... Там их много..
---------- Post added at 01:28 ---------- Previous post was at 01:27 ----------
И не только мамку, но и камень... У меня на камне P75 одни параметры, а на P120 вообще никак не удалось прочитать дискеты MX..
Все вложения свежие перекинул в архив в итоге получилось примерно вот что :
DWKTXT (http://pdp-11.org.ru/~hobot_lmb/BIBLIOTEKA/DVKTXT/)
DWKFiles (http://pdp-11.org.ru/~hobot_lmb/ukdwk_archive/dwkwebcomplekt/DWKFiles/)
Ну и в папке DWKGames - вроде теперь только непосредственно Games )))
И вот тот самый по видимому Nys ))) Хотя у меня он появился вместе с УКНЦ, в начале 90х - я так им и пользовался всю дорогу, по умолчанию у него родное расширение файлов .MAC )))
а вот это опечатка или верно написано ???
может параметр всё же STEP ???Там опечатка. Параметр STEP.
...
И вот тот самый по видимому Nys )))NYS.SAV и EDIK.SAV - это одно и то же.
И ещё с того же форума по ссылке от anasana (за что ему отдельно ++++) я скопировал пост местного активиста )))
И получился вот такой "справочный" (http://pdp-11.org.ru/~hobot_lmb/BIBLIOTEKA/DVKTXT/vtinfo.txt) файлик. )))
И ещё с того же форума по ссылке от anasana (за что ему отдельно ++++) я скопировал пост местного активиста )))
И получился вот такой "справочный" (http://pdp-11.org.ru/~hobot_lmb/BIBLIOTEKA/DVKTXT/vtinfo.txt) файлик. )))
Про VT52 не упоминаются переход в графику и обратно.
Про VT50 (особенно актуально для СССР) не упоминается, что 016 (CTRL/N) - код позиционирования курсора.
- Помимо мамки, еще надо с параметрами играться... Там их много..
...
У меня на камне P75 одни параметры, а на P120 вообще никак не удалось прочитать дискеты MX..
Параметр для игры там один. Еще только настройками ISA играться, но у меня их нет. И пришлось дисковод принудительно на 300 rpm перемычками
Про VT52 не упоминаются переход в графику и обратно.
Про VT50 (особенно актуально для СССР) не упоминается, что 016 (CTRL/N) - код позиционирования курсора.
все поправки внесём - там только "два" этих параметра упущены?
можно эту шпаргалку сделать, отредактировать, не проблема. )))
все поправки внесём - там только "два" этих параметра упущены?
можно эту шпаргалку сделать, отредактировать, не проблема. )))
Там много странностей, но детально не ковырялся - лень.
Там много странностей, но детально не ковырялся - лень.
вот оригинальный пост (http://forum.maxiol.com/index.php?showtopic=993), я просто копи-паст операцию произвёл )))
По основным терминалам есть документация из которой можно самостоятельно выдержку сделать и дополнить особенностями советских вариантов и их отличиями от оригинала если таковой вообще есть :)
---------- Post added at 12:20 ---------- Previous post was at 12:19 ----------
Частично последнее даже делалось где-то поблизости :)
Andrey_Ak
17.02.2012, 15:54
Продолжаю собирать ПО и складировать в одном надежном месте:
Программное обеспечение ПЭВМ Электроника МС0585, МС0515:
http://www.tis.kz/forum/topic.php?forum=1&topic=10
Программное обеспечение ПЭВМ Электроника 60, 100-25, ДВК:
http://www.tis.kz/forum/topic.php?forum=1&topic=12
И вот по ДВК, есть вопросы, кто успел скачать со следующих ресурсов ПО: ???
http://zx.pk.ru/showpost.php?p=219073&postcount=20 - Отсюда, потом обновление от нижнего поста:
http://zx.pk.ru/showpost.php?p=279118&postcount=21 - И тут тоже все ссылки дохлые...
http://zx.pk.ru/showpost.php?p=279405&postcount=25
И самое важное, отсюда:
http://zx.pk.ru/showpost.php?p=321473&postcount=26
Копия сайта retro.dyndns-home.com от 07.10.2010 у меня есть.
http://www.emuverse.ru/downloads/computers/DVK/sites/ (200 Мб)
Отсканил и подчистил доку от терминала MERA-ELZAB CM 7222.01, тома I - IV:
http://narod.ru/disk/41027177001/Terminal%20-%20CM%207222.01.zip.html (6 Мб, сканы не жал, .png)
Могу снять дампы ПЗУ, но вроде их эмуляция не в моде, и куда потом выкладывать непонятно.
E11 и CHARON умеют работать с родными железяками, подключенными через QBUS/UNIBUS адаптер.
CHARON`ы нашёл. А вот с толковым описанием адаптера(ов), кроме того, что есть на оф. сайте и в документации идущей с дистрибутивами засада.
form, оно где-нибудь вообще существует, описание на "BCI-2x0x bus adapter"? Интересуют не общие сведения, а схемотехника и т.д.
CHARON`ы нашёл. А вот с толковым описанием адаптера(ов), кроме того, что есть на оф. сайте и в документации идущей с дистрибутивами засада.
form, оно где-нибудь вообще существует, описание на "BCI-2x0x bus adapter"? Интересуют не общие сведения, а схемотехника и т.д.
А фиг его знает.
Попробуй на www.dbit.com покопаться.
---------- Post added at 21:09 ---------- Previous post was at 21:08 ----------
Насчет схемотехники сомнительно так как вещь продается и надо полагать не за 50-100 деревянных :)
А фиг его знает.
Попробуй на www.dbit.com покопаться.
---------- Post added at 21:09 ---------- Previous post was at 21:08 ----------
Насчет схемотехники сомнительно так как вещь продается и надо полагать не за 50-100 деревянных :)
На dbit кроме этого:
http://www.dbit.com/adapters.html - ничего нет. :(
Кое что удалось найти в архивах сети.
BCI-2003 - PCI bus to Unibus for PDP-11 emulators.
BCI-2103 - PCI bus to Q-bus for PDP-11 emulators.
BCI-2004 - PCI bus to Unibus for PDP-11 emulators.
BCI-2104 - PCI bus to Q-bus for PDP-11 and VAX emulators.
Описания в аттаче.
На данный момент Logical их не выпускает.
http://www.logical-co.com/Pci/genpci.htm
Посмотрел в архивах - цены были ооочень весЁлые. :)
Ну для справки, простой сопроцессор PDP-11, втыкающийся в PCI слот сейчас стоит $14000 - это без адаптеров qbus/unibus :)
Ну для справки, простой сопроцессор PDP-11, втыкающийся в PCI слот сейчас стоит $14000 - это без адаптеров qbus/unibus :)
А это цены по которым раньше продавались адаптеры.
BCI-2003-AA(AB) - $2,675
BCI-2103-AA - $2,675
BCI-2004-AA(AB) - $2,875
BCI-2104-AA - $2,875
А это цены по которым раньше продавались адаптеры.
BCI-2003-AA(AB) - $2,675
BCI-2103-AA $2,675
BCI-2004-AA(AB) - $2,875
BCI-2104-AA - $2,875
Вполне нормальные цены в то время когда PDP-11 еще выспускался официальный.
Вполне нормальные цены в то время когда PDP-11 еще выспускался официальный.
Причём это цены на адаптеры со всеми причиндалами: PCI-адаптер, кабели, панели, UNIBUS(QBUS)-адаптер.
Причём это цены на адаптеры со всеми причиндалами: PCI-адаптер, кабели, панели, UNIBUS(QBUS)-адаптер.
Ну да - когда оригинал еще выпускается трудно задирать сильно :)
Ну для справки, простой сопроцессор PDP-11, втыкающийся в PCI слот сейчас стоит $14000 - это без адаптеров qbus/unibus :)
А че так дорого, из-за спроса 1-2 штука в год?
Можно и самим такой сделать.
А че так дорого, из-за спроса 1-2 штука в год?
Можно и самим такой сделать.
Подозреваю, что это стало когда PDP-11 свернули официальный.
До этого слышал про 1.5k$ что-то. Про 14к не слышал, а получил ответ от strobedata :)
Вот и поле для деятельности: процессоры, адаптеры. ;)
Специалистов, как я понял, здесь хватает. :)
Andrey_Ak
19.02.2012, 00:16
Создал у себя на форуме тему, посвященную Эмуляции ДВК, Записи дискет, Загрузки ОС по ИРПС, Передачи файлов и т.д.:
http://www.tis.kz/forum/topic.php?forum=1&topic=16
Там-же последним постом, рассказывается как создавать загрузочные дискеты MX,
не имея ни одной живой дискеты МХ, с помощью ПиСи и ДВК... Без участия контроллера MY и другого...
Если у Вас есть только контроллер MX и ни одной дискеты, Вы можете их сделать...
Там-же последним постом, рассказывается как создавать загрузочные дискеты MX,
не имея ни одной живой дискеты МХ, с помощью ПиСи и ДВК... Без участия контроллера MY и другого...
Если у Вас есть только контроллер MX и ни одной дискеты, Вы можете их сделать...
Работает на всех ИБМ или тоже с ограничениями?
Работает на всех ИБМ или тоже с ограничениями?
Ограничение одно - требуется второй терминальный порт на ДВК (С2 или подобное) :)
Andrey_Ak
19.02.2012, 15:11
Работает на всех ИБМ или тоже с ограничениями?
- Форматирование дискет MX и запись на них файлов под DOS,
работает на старых 286 машинах... Но не на всех...
Ограничение одно - требуется второй терминальный порт на ДВК (С2 или подобное) Даже если соединить ДВК и PC через порт терминала ДВК (хоть напрямую, хоть через telnet-адаптер), то в принципе - можно написать для PC "абсолютный загрузчик" программ ДВК через порт терминала (ведь эмулятор пульта ДВК даёт для этого самые широкие возможности).
Даже если соединить ДВК и PC через порт терминала ДВК (хоть напрямую, хоть через telnet-адаптер), то в принципе - можно написать для PC "абсолютный загрузчик" программ ДВК через порт терминала (ведь эмулятор пульта ДВК даёт для этого самые широкие возможности).
Зачем писать абсолютный загрузчик когда есть стандартное устройство Dectape II (TU51), есть стандартный драйвер для него в RT-11 и есть эмулятор TU81? :)
Зачем писать абсолютный загрузчик когда есть стандартное устройство Dectape II (TU51), есть стандартный драйвер для него в RT-11 и есть эмулятор TU81?Затем, что когда включаешь ДВК с контроллером МХ и у тебя нет ни одной системной дискеты - грузить программы в память ДВК через порт терминала приходится при помощи команд эмулятора пульта ДВК.
Руками, конечно, слишком долго вбивать в память ДВК восьмеричные коды программ, но при помощи PC-шной программы, подключенной к порту терминала ДВК - это довольно легко автоматизировать.
Затем, что когда включаешь ДВК с контроллером МХ и у тебя нет ни одной системной дискеты - грузить программы в память ДВК через порт терминала приходится при помощи команд эмулятора пульта ДВК.
Не приходится.
Все что тебе нужно - набить короткий загрузчик TU58 и о чудо - у тебя RT-11, загруженная с диска :)
Не приходится.
Все что тебе нужно - набить короткий загрузчик TU58 и о чудо - у тебя RT-11, загруженная с диска Т.е. со стороны ДВК достаточно иметь (например) telnet-адаптер на порту терминала (как у Andrey_Ak).
А что нужно иметь со стороны PC, чтобы (открыв через telnet терминальный порт этой ДВК) - загрузить на ДВК c PC RT-11 и отформатировать диск MX ?
Т.е. со стороны ДВК достаточно иметь (например) telnet-адаптер на порту терминала (как у Andrey_Ak).
А что нужно иметь со стороны PC, чтобы (открыв через telnet терминальный порт этой ДВК) - загрузить на ДВК c PC RT-11 и отформатировать диск MX ?
Через телнет ничего - телнет непригоден для полноценной работы с serial портом. Телнет проще подцеплять к консоли и тогда со стороны клиента ставится простой E11 с RT-11 внутри и - у тебя есть все, чтобы автоматом, а не вручную например набирать что угодно в пульте.
Но это бессмысленные сложности. Достаточно просто подцепить PC по COM порту и запустить на нем TU58 эмулятор. Все. У тебя есть RT-11 на диске которую ты легко грузишь на ДВК простым загрузчиком. Который к слову можешь набрать автоматом как выше написанно :)
---------- Post added at 19:13 ---------- Previous post was at 19:09 ----------
Перефразируя, все придумано до нас :)
Достаточно просто подцепить PC по COM порту и запустить на нем TU58 эмулятор.Типа, командный файл написать, который сначала сам посылает через COM-порт команды ввода кода загрузчика в пульте ДВК, а потом цепляет на этот порт эмулятор TU58 и отправляет на ДВК команду запуска (введённого ранее) загрузчика.
Типа, командный файл написать, который сначала сам посылает через COM-порт команды ввода кода загрузчика в пульте ДВК, а потом цепляет на этот порт эмулятор TU58 и отправляет на ДВК команду запуска (введённого ранее) загрузчика.
Зачем командный файл? VTCOM прекрасно шлет заготовленный текст.
Мы собственно с Andrey_Ak уже давно пользуемся этим - я от себя к нему цепляюсь и шлю пультовые программы.
TU58 требует отдельного порта, о чем изначально говорилось.
Можно и не через отдельный - видел такой вариант, но не пробовал. С отдельным просто получается полноценное стандартное устройство.
Зачем командный файл? VTCOM прекрасно шлет заготовленный текст.
Мы собственно с Andrey_Ak уже давно пользуемся этим - я от себя к нему цепляюсь и шлю пультовые программы.
TU58 требует отдельного порта, о чем изначально говорилось.
Можно и не через отдельный - видел такой вариант, но не пробовал. С отдельным просто получается полноценное стандартное устройство.
А можно практический пример? Так сказать по полочкам разложить... :)
TU58 требует отдельного порта, о чем изначально говорилось.Тогда это не удовлетворяет начальному условию.
Вопрос же изначально ставился, как через единственный терминальный порт загрузить программу форматирования MX и скопировать на этот MX образ системной дискеты.
Похоже, что в такой ситуации - эмулятор TU58 ничем помочь не может.
А можно практический пример? Так сказать по полочкам разложить... :)
http://pdp-11.org.ru/~form/pdp11-83/#boot
Для ДВК требует некоторого допинывания - другой CSR и вектор нужно настроить в драйвере и программа загрузчика набивается - у меня она встроенная. Программа загрузчика и ДВКшный образ у Andrey_Ak в ссылке.
---------- Post added at 19:28 ---------- Previous post was at 19:27 ----------
Тогда это не удовлетворяет начальному условию.
Вопрос же изначально ставился, как через единственный терминальный порт загрузить программу форматирования MX и скопировать на этот MX образ системной дискеты.
Похоже, что в такой ситуации - эмулятор TU58 ничем помочь не может.
Невнимательно читаешь - исходный вариант как раз про отдельный терминальный порт был (и полноценную систему).
С одним терминальным портом как раз все ясно :)
С одним терминальным портом как раз все ясноПока ясно не всем :)
Так что именно нужно делать обладателям комплекта МС1201+MX, чтобы создать системную дискету MX, управляя контроллером MX при помощи программ, загруженных через единственный терминальный порт?
Пока ясно не всем :)
Так что именно нужно делать обладателям комплекта МС1201+MX, чтобы создать системную дискету MX, управляя контроллером MX при помощи программ, загруженных через единственный терминальный порт?
Через единственный - пожалуйста: делаешь программку для пульта, состояющую из подпрограмм чтения MX (берется из драйвера), записи на MX (переделывается из нее же), далее думаю не нужно объяснять что делать :)
---------- Post added at 19:36 ---------- Previous post was at 19:36 ----------
Разумеется программку для пульта набираешь не вручную, а посылаешь через VTCOM :)
form, О - СПАСИБО! :)
Через единственный - пожалуйста: делаешь программку для пульта, состояющую из подпрограмм чтения MX (берется из драйвера), записи на MX (переделывается из нее же), далее думаю не нужно объяснять что делать :)
Мне - надо. :)
form, О - СПАСИБО! :)
Мне - надо. :)
Выбираешь из монитора блоки 1-4, из драйвера загрузчик, из всего этого делаешь прграмму которая пропишет загрузчик в блок 0, кусок монитора в блоки 2-5. Все. Даже подпрограмма чтения не понадобится :)
Саму программку писать не стану. Описывать как через VTCOM посылать проги в пульт тоже не буду - описание VTCOM валяется на сайте :)
Через единственный - пожалуйста: делаешь программку для пульта, состояющую из подпрограмм чтения MX (берется из драйвера), записи на MX (переделывается из нее же), далее думаю не нужно объяснять что делать.Об этом речь и шла изначально - для PC можно написать некую программу "абсолютного загрузчика через пульт ДВК", которая сможет грузить в ДВК сначала форматер MX, а потом "писалку MX" с интерфейсом приёма образа дорожки через порт терминала.
Об этом речь и шла изначально - для PC можно написать некую программу "абсолютного загрузчика через пульт ДВК", которая сможет грузить в ДВК сначала форматер MX, а потом "писалку MX" с интерфейсом приёма образа дорожки через порт терминала.
Речь изначально шла как раз не об этом. Andrey_Ak дал ссылку на то, как он вчера сделал - именно с помощью TU58 :)
Хотя (насколько я понимаю) для контроллера MX понятия "форматирование дорожки" и "запись дорожки" тождественны, поэтому никакого форматирования дорожки перед её записью не требуется :)
Хотя (насколько я понимаю) для контроллера MX понятия "форматирование дорожки" и "запись дорожки" тождественны, поэтому никакого форматирования дорожки перед её записью не требуется :)
Я в нем не силен, но когда я попробовал как-то почитать доку по нему, у меня возникло впечатление, что собственно никакого контроллера и нет, а ты напрямую заставляешь мотор крутиться, а головку двигаться :)
Я в нем не силен, но когда я попробовал как-то почитать доку по нему, у меня возникло впечатление, что собственно никакого контроллера и нет, а ты напрямую заставляешь мотор крутиться, а головку двигатьсяНу да..
Т.е. нужна просто небольшая программка, которая принимает через порт терминала байтовый образ дорожки, преобразует его в формат MX и пишет на диск.
Так можно будет автоматически создавать через порт терминала копии дисков MX из их образов на PC.
---------- Post added at 15:52 ---------- Previous post was at 15:50 ----------
Если кто-то хочет заняться - вот исходник драйвера MX:
.TITLE MX
.IDENT /V5.03/
.NLIST
MMG$T=1
DEBUG$ = 1
.ENABLE LC
.MCALL .DRDEF,.PRINT
.IIF DF DEBUG$, TIM$IT=1
KOEFF = 1
KPAR1=172342
MXDSIZE=880.
CSGO = 40000
CSWRT = 20000
CSSIDE= 10000
JSW = 44
.ASECT
. = 200
BR 1$
BR 2$
1$: MOV PC,R0
ADD #<LEN$-.>,R0
.PRINT
2$: CLC
RTS PC
LEN$: .ASCIi <007>/?MX-I-5.25" Single Density Floppy Disk Handler./
.asciz / Un_Soft 1991. V5.03/
.EVEN
.RAD50 /KUZMIN/
.DRDEF MX,376,FILST$,MXDSIZ,MX$CSR,MX$VEC
.DRSET NTRK,35.,NBLOK,NUM
.IIF NDF TIM$IT, TIM$IT=0
.IIF NDF MMG$T,MMG$T=0
.IIF NDF ERL$G,ERL$G=0
.IIF NDF MXT$O,MXT$O=0
.IIF NDF MX$VEC,MX$VEC=0
.IIF NDF MX$CSR,MX$CSR=177130
;****************** SET Mx NTRK=N ********************
NBLOK: MOV #385.,MXTRK ;мин. к-во блоков
SUB R3,R0 ;R0<--N, R3<--35.
BLE NBLOK2
NBLOK1: ADD #11.,MXTRK
SOB R0,NBLOK1
NBLOK2: MOV MXTRK,54-6-.(PC);кол.блоков->54(загол.)
RTS PC
MXTRK: .WORD 80.
.DRBEG MX
MOV (PC)+,(PC)+
.WORD 3. ;RETRY
NRETR: .WORD 0
MOV MXCQE,R3
MOV (R3)+,R0
ASL R0 ;#блока*2
MOV R0,BLKN2
TSTB (R3)+ ;пропуск Q.FUNC, Q.JNUM
BITB #4,@R3
BNE ERROR ;ошибка
MOVB (R3)+,R0
BIC #-4,R0
ASL R0
ASL R0
MOV CSRMX,R4
BIC #14,@R4 ;MX0
BIS R0,@R4 ;MXn
BIC #177663,@R4
BIT #100,@R4 ;двиг. включен ?
BNE .1124 ;-да, исп. R0,R3
BIS #100,@R4 ;включить
MOV #<800./KOEFF>,R1 ;задержка по вн.
JSR PC,DELAY ;таймеру
.1124: ASR R0 ;MX.UNIT*2
ADD PC,R0
ADD #<TRKTAB-.>,R0
MOV R0,TRKCR
TST @R0
BPL .1150
JSR PC,INIT
.1150: MOV (R3)+,USBUFF ;Q.BUFF
MOV (R3)+,WCNTI ;Q.WCNT
BPL READ
BIT #2000,@R4 ;запрет записи
BNE ERROR
BIS #20000,WRFLG
NEG WCNTI
BR PHYTRK
READ: CLR WRFLG
PHYTRK: MOV (PC)+,R3 ;вычисление
BLKN2: .WORD 0 ;дорожки, сектора,
MOV #8.,R2 ;стороны
.1222: CMP #5400,R3
BHI .1234
ADD #-5400,R3
.1234: ROL R3
DEC R2
BGT .1222
MOVB R3,R2
CLRB R3
SWAB R3
INC R3
BIC #10000,@R4
CMP #11.,R3
BGE .1274
BIS #10000,@R4
SUB #11.,R3
.1274:
.1302: MOV R2,TRACK
MOV R3,NSECT
BR INOUT
.1376:
ERROR: MOV MXCQE,R3
.1320: BIS #1,@-(R3)
ENDMX: MOV MXCQE,R5
cmp mxlqe,R5
BNE 1$
BIS #2,@R4
BIC #100,@R4
1$: .DRFIN MX
;.1376 MOV CNT,WCNTI
.1404: DEC NRETR
BLE ERROR
JSR PC,INIT
INOUT:
MOV (PC)+,R4
CSRMX: .WORD 177130
MOV TRACK,R0
SUB @TRKCR,R0
BPL 1$
NEG R0
BIC #40,@R4 ;от центра
MOV #5377,.1512 ;DEC
BR 2$
1$: BIS #40,@R4
MOV #5277,.1512 ;INC
2$: TST R0 ;число дорожек для перехода
BEQ .1520
.1506: JSR PC,STEP ;должен быть готов мотор
.1512: INC @TRKCR
SOB R0,.1506
.1520: MOV #11520,OPER ;MOV @R5,(R0)+
BIC #20000,@R4 ;чтение
JSR PC,REAWRT
MOV PC,R0
ADD #<BUFTR+2-.>,R0
CMP TRACK,(R0)+ ;проверка номера дорожки
BNE .1404
MOV NSECT,R3
.1556: DEC R3
BEQ .1570
ADD #402,R0 ;смещение в буфере дорожки
BR .1556
.1570: TST WRFLG
BNE .1606
MOV #12023,OPER1 ;BUFTRK-->@USBUFF
BR .1626
.1606: MOV #12015,OPER ;MOV (R0)+,@R5
MOV #12320,OPER1 ;BUFTRK<--@USBUFF
BIS #20000,@R4
.1626:
.IF NE MMG$T
MOV MXCQE,R3
MOV Q$PAR(R3),PARVAL
.ENDC
MOV USBUFF,R3
.1632: MOV #200,R2
MOV R3,USBUFF
MOV WCNTI,CNT ;запомнить на сл. сбоя
BNE 1$
JMP .2136
1$:
.IF NE MMG$T
;d MFPS PRIOR
;d MTPS #340
MOV @#KPAR1,-(SP)
MOV PARVAL,@#KPAR1
.ENDC
OPER1: MOV (R0)+,(R3)+
DEC WCNTI
BEQ ERW
SOB R2,OPER1
ERW:
.IF NE MMG$T
MOV (SP)+,@#KPAR1
;d MTPS PRIOR
.ENDC
TST R2
BNE ENDRW
.IF NE MMG$T
ADD #4,PARVAL
.ENDC
JSR PC,CTRSUM ;подсчет контрольной суммы
.IF NE MMG$T
ADD #-400,R3
MOV R3,-(SP)
MOV MXCQE,R3
MOV PARVAL,Q$PAR(R3)
MOV (SP)+,R3
.ENDC
TST WRFLG
BEQ .1702
MOV R2,(R0)+ ;запись контр. суммы
BR .1714
.IF NE MMG$T
PARVAL: .WORD 0
.ENDC
.1702: CMP R2,(R0)+
.1704: BEQ 1$
JMP .1376 ;несовпадение контр. суммы
1$: MOV #3.,NRETR
.1714: CMP #11.,NSECT
BEQ .1732
INC NSECT
BR .1632
.1732:
MOV R3,USBUFF
TST WRFLG
BEQ .1750
.1744: JSR PC,REAWRT
.1750: MOV #1,NSECT
BIT #10000,@R4
BEQ .1776
INC TRACK
BIC #10000,@R4
BR .2000
.1776: BIS #10000,@R4
.2000: JMP INOUT
ENDRW: TST WRFLG
BEQ .2112
DEC R2
BEQ .2024
.2020: CLR (R0)+ ;дозапись нулей
SOB R2,.2020
.2024: JSR PC,CTRSUM
MOV R2,(R0)+
BIT #1,NSECT
BEQ .2052
BIT #10000,@R4 ;верх
BNE .2102
BR .2060
.2052: BIT #10000,@R4
BEQ .2102
.2060: CMP #11.,NSECT
BEQ .1744
MOV #200,R2
INC NSECT
BR .2020
.2102: JSR PC,REAWRT
JMP ENDMX
.2112: DEC R2
BEQ .2122
.2116: TST (R0)+
SOB R2,.2116
.2122:
.IF NE MMG$T
ADD #4,PARVAL
.ENDC
JSR PC,CTRSUM
CMP R2,(R0)+
BNE .1704
JMP ENDMX
.2136: TST WRFLG
BEQ .2112
BR .2020
REAWRT: BIC #2,@R4 ;выбор накопителя
MOV #<20./KOEFF>,R1
JSR PC,DELAY
MOV PC,R0
ADD #<BUFTR-.>,R0
MOV #3.,R5
3$: MOV #77777,R3
2$: BIT #1000,@R4
BNE 1$
SOB R3,2$
SOB R5,3$
TST (SP)+
BR ERJ01
1$: MOV #2617,R3
MOV R4,R5
TST (R5)+ ;подстройка
MFPS PRIOR
MTPS #340
BIT #20000,@R4
BEQ .2242 ;чтение
MOV #36,R1
BIS #40000,@R4 ;пуск
.2230: TST @R4 ;запись синхрозоны(?)
BPL .2230
CLR @R5
SOB R1,.2230
.2240: BR RWTRK
.2242: BIS #40000,@R4
RWTRK: mov r1,-(sp)
mov #77777,r1
rw.tr: TST @R4
Bmi op.er
sob r1,rw.tr
mov mxcqe,r1
bis #hderr$,@-(r1)
mov (sp)+,r1
br .2256
op.er: mov (sp)+,r1
OPER: MOV @R5,(R0)+
SOB R3,RWTRK
.2256: BIC #40000,@R4
MTPS PRIOR
MXINT == .+2 ;точка аннулирования
RTS PC
STEP: BIS #20,@R4 ;шаг
MOV #<5./KOEFF>,R1
JSR PC,DELAY
RTS PC
INIT: BIT #4000,@R4 ;бит "00"
BNE .2352
BIC #40,@R4 ;от центра
MOV #81.,R2 ;MAX кол-во дорожек (?)
.2326: JSR PC,STEP
BIT #4000,@R4
BNE .2352
SOB R2,.2326
.2344: TST (SP)+ ;для JSR PC
ERJ01: JMP ERROR
.2352: CLR @TRKCR
RTS PC
CTRSUM: SUB #400,R0
MOV #200,R1
CLR R2
.2372: ADD (R0)+,R2
SOB R1,.2372
.2376: RTS PC
DELAY:
BIS #200,@R4 ;бит таймера
.2406: TSTB @R4
BPL .2406
SOB R1,.2406
.2420: BIC #200,@R4
RTS PC
PRIOR: .WORD 0
USBUFF: .WORD 0
WCNTI: .WORD 0
CNT: .WORD 0
TRACK: .WORD 0
TRKCR: .WORD 0
NSECT: .WORD 0
WRFLG: .WORD 0
TRKTAB: .WORD 100000,100000,100000,100000
BUFTR: .BLKW 2617
.LIST
.DRBOT MX,BOOT1,BREAD
. = MXBOOT+40
BOOT1: NOP
JMP BOOT
TRSIZ:: .WORD 0
BTRKCR: .WORD 100000
MXUNIT: .BYTE 100,104,110,114
. = MXBOOT+104
BREAD:: CLR @#JSW ;вход по BOOT MXn:
MOV #MX$CSR,R4
BIC #-400,@R4
MOV @#B$DEVU,R3
MOVB <MXUNIT-MXBOOT>(R3),@R4
JSR PC,BDELAY
JSR PC,BINIT
MOV #<READ1-MXBOOT>,@#B$READ
READ1: MOV #MX$CSR,R4 ;вход втор. загрузчика
ASL R0 ;R0 # блока
BIC #10002,@R4 ;R1 кол. слов
JSR PC,BDELAY ;R2 адр. буфера
MOV R0,R5
MOV #8.,R3
.10314: CMP #5400,R5
BHI .10326
ADD #-5400,R5
.10326: ROL R5
DEC R3
BGT .10314
MOVB R5,R3
CLRB R5
SWAB R5
INC R5
CMP #11.,R5
BGE .10364
BIS #10000,@R4
SUB #11.,R5
.10364:
.10370: MOV R5,R0
SUB BTRKCR,R3
BPL .10416
NEG R3
BIC #40,@R4
MOV #5367,DEINC ;DEC
BR .10430
.10416: BIS #40,@R4
MOV #5267,DEINC ;INC
.10430: TST R3
BEQ .10446
.10434: JSR PC,BSTEP
DEINC: INC BTRKCR
SOB R3,.10434
.10446: DEC R0
BEQ .10460
ADD #201,R3
BR .10446
.10460: JSR PC,BDELAY
MOV #2613,R0
CLR -(SP)
MOV R4,R5
TST (R5)+
BIS #40000,@R4
.10502: TST @R4
BPL .10502
TST @R5
.10510: TST @R4
BPL .10510
CMP @R5,BTRKCR
BNE BIOERR
TST R3
BEQ .10540
.10526: TST @R4
BPL .10526
TST @R5
DEC R0
SOB R3,.10526
.10540: MOV #200,R3
CLR @SP
.10546: TST @R4
BPL .10546
DEC R0
MOV @R5,@R2
ADD (R2)+,@SP
DEC R1
BEQ .10614
SOB R3,.10546
.10566: TST @R4
BPL .10566
CMP @R5,@SP
BNE BIOERR
TST R1
BEQ .10630
SOB R0,.10540
.10604: TST (SP)+
BIC #40000,@R4
BR .10640
.10614: TST @R4
BPL .10614
DEC R3
BEQ .10566
ADD @R5,@SP
BR .10614
.10630: TST (SP)+
BIC #40000,@R4
RTS PC
.10640: BIT #10000,@R4
BNE .10654
BIS #10000,@R4
BR .10460
.10654: BIC #10000,@R4
BIS #40,@R4
JSR PC,BSTEP
INC BTRKCR
BR .10460
BDELAY: MOV #100,R5
BIS #200,@R4
.10706: TSTB @R4
BPL .10706
SOB R5,.10706
.10714: BIC #200,@R4
RTS PC
BSTEP: BIS #20,@R4
JSR PC,BDELAY
RTS PC
BINIT: JSR PC,BSTEP
BIT #4000,@R4
BEQ BINIT
CLR BTRKCR
RTS PC
;. = MXBOOT+664
BOOT: CLR BTRKCR
MOV #<READ1-MXBOOT>,@#B$READ
MOV #B$DNAME,@#B$DEVN
.10770: MOV (SP)+,@#B$DEVU
MOV #10000,SP
JMP @#B$BOOT
.DREND MX
.END
.IIF DF DEBUG$, TIM$IT=1
Остроумно :)
То есть если сказал DEBUG - в системе появилась поддержка device timeout и не... :)
Загрузился с помощью TU58 на УКНЦ через кабель COM-С2. В архива образ диска dd-uknc.dsk, аналогичный, как у Andrey_Ak(dd-dvk.dsk). Там DD.SYS, настроенный под С2 УКНЦ, но никаких MZ, WD там нет. Диск просто для того, чтобы загрузиться. Все остальное на Ваше усмотрение и фантазию.
Загрузился с помощью TU58 на УКНЦ через кабель COM-С2. В архива образ диска dd-uknc.dsk, аналогичный, как у Andrey_Ak(dd-dvk.dsk). Там DD.SYS, настроенный под С2 УКНЦ, но никаких MZ, WD там нет. Диск просто для того, чтобы загрузиться. Все остальное на Ваше усмотрение и фантазию.
Ну делался он под ДВК. Никто не мешает заточить под УКНЦ.
На самом деле я даже делал такой для УКНЦ и просил попробовать, но как обычно никто не обратил внимания на это :)
---------- Post added at 21:32 ---------- Previous post was at 21:28 ----------
RT-11 V5.7c который вариант я делал содержит полный набор стандартных драйверов для С2: DD, XL, LS :)
Ну делался он под ДВК. Никто не мешает заточить под УКНЦ.
На самом деле я даже делал такой для УКНЦ и просил попробовать, но как обычно никто не обратил внимания на это :)
Видно кто-то не смог, а кто и мог, для него было это неактуально, вот и пропустил это. Для меня неактуально, т.к. есть дисководы, но ради интереса решил попробовать.
RT-11 V5.7c который вариант я делал содержит полный набор стандартных драйверов для С2: DD, XL, LS :)
Ну и где его сейчас искать?
Видно кто-то не смог, а кто и мог, для него было это неактуально, вот и пропустил это. Для меня неактуально, т.к. есть дисководы, но ради интереса решил попробовать.
Ну и где его сейчас искать?
тут (http://zx.pk.ru/showpost.php?p=447936&postcount=209) образ винта для ukncbtl.
Даже проще: тут (http://pdp-11.org.ru/~form/files/uknc/rt57c_wd.zip) - я его у себя только выкладывал :)
тут (http://zx.pk.ru/showpost.php?p=447936&postcount=209) образ винта для ukncbtl.
60 метров однако, для моего канала долго качать.
И еще вопрос: как я понял TU58 работает с образом только в режиме чтения (read-only) ?
60 метров однако, для моего канала долго качать.
И еще вопрос: как я понял TU58 работает с образом только в режиме чтения (read-only) ?
Эмулятор дает или читать или создает с нуля и дает писать.
Причем писать на него можно только цельный образ из RT-11 через COP/DEV - видимо это связано с тем, что в оригинале это все-таки лента хотя и с организацией как у диска. Сейчас думаю над своим эмулятором так как для виндовса к примеру ни одного рабочего не нашел.
---------- Post added at 21:44 ---------- Previous post was at 21:42 ----------
RT-11 V5.7c (http://zx.pk.ru/showpost.php?p=444175&postcount=199) на флопе.
Загрузил командой TU58 dd-uknc.dsk, т.е. без ключика -r. Все нормально, дает и записывать. Создал файл командой CREATE, появился.
Загрузил командой TU58 dd-uknc.dsk, т.е. без ключика -r. Все нормально, дает и записывать. Создал файл командой CREATE, появился.
С DUPом проблем не будет. С USRскими запросами будет наверное.
К примеру покопировать туда файлы.
---------- Post added at 22:01 ---------- Previous post was at 22:00 ----------
А может и не будет - кто его знает :)
Мне думается, что есть смысл создать стандарт мультиплексированного байтового потока, который будет предусматривать "спецвставки" в обычный терминальный обмен. Тогда обычное программное обеспечение RT-11 (включая операционную систему) сможет использовать порт терминала в обычном режиме, при том, что через этот же порт будут мультиплексироваться параллельные байтовые потоки (например - перенаправленный дисковый обмен).
Мне думается, что есть смысл создать стандарт мультиплексированного байтового потока, который будет предусматривать "спецвставки" в обычный терминальный обмен. Тогда обычное программное обеспечение RT-11 (включая операционную систему) сможет использовать порт терминала в обычном режиме, при том, что через этот же порт будут мультиплексироваться параллельные байтовые потоки (например - перенаправленный дисковый обмен).
Только если программа одновременно читает диск и выводит на терминал по сериалу наверное тяжко будет :)
А так - вобщем-то можно.
Только если программа одновременно читает диск и выводит на терминал по сериалу наверное тяжко будет :)
А так - вобщем-то можно.Если терминальный обмен никак не оформлять - он не может мультиплексироваться, а значит будет прерываться до окончания приёма/передачи мультиплексируемых пакетов.
Чтобы терминальный обмен мог идти параллельно с любым другим - он тоже должен оформляться заголовками и упаковываться в пакеты, но тогда нельзя будет использовать родное ПО, работающее с портом терминала.
С DUPом проблем не будет. С USRскими запросами будет наверное.
К примеру покопировать туда файлы.А может и не будет - кто его знает :)
Запросы обычно идут через драйвер (в данном случае DD). Как я понял, команда 2 - это чтение, а 3 - запись.
Сжал диск командой SQUEEZE, после сжатия произошла перезагрузка системы, все нормально.
Запросы обычно идут через драйвер (в данном случае DD). Как я понял, команда 2 - это чтение, а 3 - запись.
Сжал диск командой SQUEEZE, после сжатия произошла перезагрузка системы, все нормально.
Ну и отлично - значит можно как полноценный диск использовать.
Вернее как два диска.
Есть еще модифицированный вариант протокола который дает с большими дисками работать (драйвер тоже нужно править), но не пробовал - обычно хватает и такого для начала, а дальше он просто не нужен :)
Чтобы терминальный обмен мог идти параллельно с любым другим - он тоже должен оформляться заголовками и упаковываться в пакеты, но тогда нельзя будет использовать родное ПО, работающее с портом терминала.
Ну ПО обычно использует семибитный код в большинстве случаев, так что можно воспользоваться принципом, как в UTF-8, байт 255(0377) - начало команды. Просто этот байт вряд-ли будут использовать терминальные программы.
---------- Post added at 19:24 ---------- Previous post was at 19:22 ----------
Есть еще модифицированный вариант протокола который дает с большими дисками работать (драйвер тоже нужно править), но не пробовал - обычно хватает и такого для начала, а дальше он просто не нужен :)
А у этого размер ограничен 512 блоками?
Ну ПО обычно использует семибитный код в большинстве случаев, так что можно воспользоваться принципом, как в UTF-8, байт 255(0377) - начало команды. Просто этот байт вряд-ли будут использовать терминальные программы.
Или как в телнете сделать - чтобы код <377> означал начало команды, а среди команд была также команда передачи кода <377> :)
---------- Post added at 22:25 ---------- Previous post was at 22:24 ----------
А у этого размер ограничен 512 блоками?
Да, это стандартный TU58 - два реможабле устройства по 512 блоков.
Ну ПО обычно использует семибитный код в большинстве случаев, так что можно воспользоваться принципом, как в UTF-8, байт 255(0377) - начало команды. Просто этот байт вряд-ли будут использовать терминальные программы.Речь слегка про другое - пакет всегда должен передаваться целиком, поэтому если пакет большой - терминальный обмен "умрёт" надолго.
Но по большому счёту - это не слишком важно. Ведь речь идёт о временной мере, позволяющей загрузить простейшую однозадачную операционку через порт её системного терминала.
Ведь речь идёт о временной мере, позволяющей загрузить простейшую однозадачную операционку через порт её системного терминала.
Так может проще сделать временной мерой загрузку простой программки без операционки которая все сделает? :)
Или как вариант - загрузка RAFOS/RM который весь находится в памяти и может быть вообще без терминала.
---------- Post added at 22:35 ---------- Previous post was at 22:30 ----------
Или такой вариант - заливаем @мониторскими командами врапер для MX или еще чего, а потом выходим из VTCOM и пользуем с этой стороны тот MX как устройство.
---------- Post added at 22:37 ---------- Previous post was at 22:35 ----------
При этом можно даже не затачивать конкретно под MX, а просто сэмулировать наличие системы в достаточном для драйвера виде, что не так уж много, и пользовать обычный драйвер.
Так может проще сделать временной мерой загрузку простой программки без операционки которая все сделает?
Или как вариант - загрузка RAFOS/RM который весь находится в памяти и может быть вообще без терминала.Без стандарта мультиплексирования пакетного и неоформленного обменов через порт терминала - это всё равно не сделать. А имея стандарт - можно делать что угодно.
Принцип такой: Когда происходит вызов мультиплексора (например, драйвер псевдодиска хочет записать блок и через аргумент вызова передаёт мультиплексору адрес блока памяти с пакетом для передачи) - мультиплексор перестаёт транслировать прерывания порта в RMON, производит отправку/получение пакетов, после чего восстанавливает то состояние терминального обмена, которое имелось на начальный момент.
Без стандарта мультиплексирования пакетного и неоформленного обменов через порт терминала - это всё равно не сделать. А имея стандарт - можно делать что угодно.
Зачем мультиплексирование если обмен ведется только для одной функции, а терминала нет? :)
заливаем @мониторскими командами врапер для MX или еще чегоВ этом случае мультиплексирование не требуется.
В этом случае мультиплексирование не требуется.
Мне кажется это будет самый незатратный вариант - залить на ту сторону прогу с драйвером, драйверу создать видимость системы и далее передавать ему запросы удаленно.
Написать абсолютно-загружаемые драйверы с терминальными врапперами для всех устройств ДВК - это очень круто и не очень сложно :)
Написать абсолютно-загружаемые драйверы с терминальными врапперами для всех устройств ДВК - это очень круто и не очень сложно :)
Да чего мелочиться - сразу qbus over serial ;)
Да чего мелочиться - сразу qbus over serial Но есть одна сложность - нужно переписывать драйверы (а в случае конкретно с MX - исходник довольно кривой).
Тогда как написав простейший терминальный мультиплексор и встроив его в простейший псевдо-дисковый драйвер - можно грузить на целевой ДВК родную операционку и использовать родные программы и драйверы.
Так что я всё же счтитаю, что мультиплексор - более простое, универсальное и выгодное решение.
Но есть одна сложность - нужно переписывать драйверы (а в случае конкретно с MX - исходник довольно кривой).
Тогда как написав простейший терминальный мультиплексор и встроив его в простейший псевдо-дисковый драйвер - можно грузить на целевой ДВК родную операционку и использовать родные программы и драйверы.
Так что я всё же счтитаю, что мультиплексор - более простое, универсальное и выгодное решение.
Потому я и предложил простой вариант где ни переписывать драйвер не надо ни мультиплескирования :)
Просто грузим на ту сотрону прогу которая делает ноповсский форк процессор для драйвера и эмулит подпрограмму завершения. Для полного счастья ноповский EMT чтобы инсталяционные проги советских драйверов счастливы были. А потом просто удаленно подсоввываем родному драйверу запросы :)
Потому я и предложил простой вариант где ни переписывать драйвер не надо ни мультиплескирования :)
Просто грузим на ту сотрону прогу которая делает ноповсский форк процессор для драйвера и эмулит подпрограмму завершения. Для полного счастья ноповский EMT чтобы инсталяционные проги советских драйверов счастливы были. А потом просто удаленно подсоввываем родному драйверу запросы Т.е. создаём для ДВК "вынесенный филиал RMON" с терминальным враппером, позволяющий грузить родные драйвера. А на стороне PC запускаем эмулятор ДВК с "ответными частями" драйверов, которые по сути - один и тот же "фронт-энд" ( только в файлах с разными именами ) настроенный на передачу запросов I/O через COM-порт в "вынесенный филиал RMON".
Т.е. создаём для ДВК "вынесенный филиал RMON" с терминальным враппером, позволяющий грузить родные драйвера. А на стороне PC запускаем эмулятор ДВК с "ответными частями" драйверов, которые по сути - один и тот же "фронт-энд" ( только в файлах с разными именами ) настроенный на передачу запросов I/O через COM-порт в "вынесенный филиал RMON".
Именно так.
При желании можно даже полный рмон послать на ту сторону, но не думаю, что это нужно :)
---------- Post added at 23:20 ---------- Previous post was at 23:14 ----------
Причем вместо байта с кодом 100 передавать его заменитель двухбайтный, а появление такого байта со стороны ДВК будет означать, что все пропало :)
Идея мультиплексора привлекает меня тем, что не нужно хорошо знать устройство RMON и принципы загрузки и работы драйверов. Написать для RT-11 драйвер системного псевдо-диска со встроенным мультиплексором, который позволит загружать RT-11 через порт её системного терминала - я могу довольно легко. А вот написать "вынесенный филиал RMON" - мне не по силам.
Идея мультиплексора привлекает меня тем, что не нужно хорошо знать устройство RMON и принципы загрузки и работы драйверов. Написать для RT-11 драйвер системного псевдо-диска со встроенным мультиплексором, который позволит загружать RT-11 через порт её системного терминала - я могу довольно легко. А вот написать "вынесенный филиал RMON" - мне не по силам.
Так и здесь не нужно. Нужно из рмона отработать только одно смещение которое вызывается из .DRFIN :)
Ну а принципы загрузки легко в SYSMAC посмотреть.
Причем у нас нет цели поддерживать вообще все - к примеру драйвера с кучей векторов нам не особо нужны.
---------- Post added at 23:27 ---------- Previous post was at 23:25 ----------
Но вобщем любой вариант какой бы он не был не повредит :)
---------- Post added at 23:28 ---------- Previous post was at 23:27 ----------
А насчет одновременной работы терминала - предусмотреть в пакете через каждые х байт, байт для терминального обмена который в случае NUL считается неиспользуемым :)
насчет одновременной работы терминала - предусмотреть в пакете через каждые х байт, байт для терминального обмена который в случай NUL считается неиспользуемым Смысла нет.
Порт передаёт 960 байтов в секунду. Пакет имеет максимальную длину 512+заголовок.
Мультиплексор "встревает" в терминальный обмен ( переставая транслировать прерывания порта в RMON ) только когда псевдодрайвер хочет прочитать или записать блок.
---------- Post added at 19:42 ---------- Previous post was at 19:39 ----------
Причём, когда мультиплексор принимает пакет из TTKB - он не мешает монитору выводить символы в TTPB.
Кстати попутно о пройденом уже - насчет всех устройств ДВК - это по сути любые устройства :)
Я себе заказал 5 макеток для QBUS и если понадобится, из одной сделаю втыкалку для советских плат. Можно по идее сделать обратную процедуру :)
Общий контур стандарта мультиплексирования форматного и неформатного обменов через порт терминала может выглядеть так:
1. По умолчанию осуществляется неформатный ввод-вывод. На стороне ДВК мультиплексор транслирует все прерывания TTO в RMON, а перед трансляцией в RMON прерываний TTI - проверяет, нет ли в порту TTKB признака начала пакета - байта 0377. На стороне PC мультиплексор отправляет нажатия клавиш в порт и проверяет поступающие из порта байты на признак начала пакета ( байт 0377 ) выводя все "честные байты" на экран консоли.
2. При получении во входном порту признака начала пакета - мультиплексор принимает пакет ( байты 0377 в пакете не нужно дублировать, поскольку структура пакета жёстко задана стандартом и байт 0377 имеет особый смысл только в одном месте пакета - в самом начале ).
3. Если принятый пакет требует посылки ответного пакета, либо если мультиплексор получает API-вызов с требованием передачи пакета - мультиплексор блокирует внешний вывод ( со стороны ДВК перестаёт транслировать в RMON прерывания TTO, а со стороны PC отправляет нажатые клавиши в свой временный буфер ввода ) и передаёт пакет.
Вот и всё. Этот несложный подход позволяет совместить в одном последовательном порту любое количество форматированных каналов с одним неформатированным.
Andrey_Ak
20.02.2012, 00:10
Нашел интересный драйвер MY, который позволяет читать и писать так-же
дискеты от Электроника-85 и МС0515 на ДВК.
Так-же написал две статьи по MY и MX контроллерам, обновил версии DW, MX, MY
Подробнее тут:
http://www.tis.kz/forum/topic.php?forum=1&topic=4
Под утро идейки разные в голову иной раз приходят...
Никакого DD, никакого мультиплексирования, никаких филиалов рмона.
Имеем незагрузочный MX с файлами, грузим его. Все. :)
Кто нам в сущности мешает послать VTCOMом код загрузчика MX и мини программку которая пользуясь его подпрограммой чтения найдет на диске файл монитора и прочитает блоки 1-4 :)
---------- Post added at 04:07 ---------- Previous post was at 04:06 ----------
этакий мини-DUP
Имеем незагрузочный MX с файлами, грузим его. Все.Но это годится только для тех, кто научился писать MX на PC.
Сделать такое (насколько я понимаю) на порядок сложнее, чем просто подключить порт терминала ДВК к порту COM или telnet.
Но это годится только для тех, кто научился писать MX на PC.
Сделать такое (насколько я понимаю) на порядок сложнее, чем просто подключить порт терминала ДВК к порту COM или telnet.
Да, но это и была исходная задача.
Все остальное - развитие темы :)
К MX к слову не привязано - любой диск годится.
Опробовал на примере DM, попутно обнаружив ошибку в E11 которая проявится если пытаться грузиться своим загрузчиком, а не родной e11 командой с DM.
---------- Post added at 14:47 ---------- Previous post was at 14:46 ----------
А сложности вообще никакой.
---------- Post added at 14:47 ---------- Previous post was at 14:47 ----------
Особенно в сравнении с соданием протокола для связи по сериал :)
---------- Post added at 15:02 ---------- Previous post was at 14:47 ----------
Собственно... :)
.SH
TT (Resident)
DM (Resident)
DM1 = DK
DM2 = SY
MQ (Resident)
LD
ZY
SD
SL (Loaded)
VM
SP
NL
DO
7 free slots
.BO SY:/FO
?BOOT-U-No boot on volume
─
К MX к слову не привязано - любой диск годится.Если есть любой другой рабочий привод, кроме MX - просто грузимся с него и форматируем MX.
Для того и нужен Bytestream/DSK Multiplexer, чтобы без лишних усилий превратить PC в рабочий дисковый привод ДВК.
А сложности вообще никакой. Особенно в сравнении с соданием протокола для связи по сериал Мне протокол написать проще, чем как-то иначе создать системный диск MX на связке МС1201+MX при наличии только одного порта терминала.
Мне протокол написать проще, чем как-то иначе создать системный диск MX на связке МС1201+MX при наличии только одного порта терминала.
А я не создаю системного диска. Я просто гружу несистемный без долгих проблем и делается это тупо отправкой небольшого кода в @ монитор VTCOMом :)
---------- Post added at 15:39 ---------- Previous post was at 15:37 ----------
Без всякого второго терминала разумеется.
Я просто гружу несистемный без долгих проблем и делается это тупо отправкой небольшого кода в @ монитор VTCOMом Но этот диск должен быть. И весьма желательно, чтобы этот диск был записан на том же приводе, на котором он будет читаться. Если так - то да.
Иначе - просто грузимся через терминальный порт и форматируем MX.
Но этот диск должен быть. И весьма желательно, чтобы этот диск был записан на том же приводе, на котором он будет читаться. Если так - то да.
Иначе - просто грузимся через терминальный порт и форматируем MX.
Это уже детали.
Я ставил задачу для решения исходного вопроса, а на развитие - у тебя есть достаточно хорошие идеи к которым могу только добавить, что в случае потери протокола его легко восстановить с любой точки если соединение прямое (а не через телнет) :)
Это уже детали.Вряд ли так думают те, кто хоть раз пробовал записать MX на PC.
в случае потери протокола его легко восстановить с любой точки если соединение прямое (а не через телнет)Длина каждого пакета известна в момент получения заголовка. Если идентификатор заголовка был испорчен - пакет целиком пойдёт в терминальный обмен, ответа не будет и дисковый обмен зависнет. Увидев это на экране - оператор захочет выйти в пульт и повторить загрузку. Выход в пульт осуществляется мультиплексором при приёме двух байтов 0377 подряд. Если контрольная сумма пакета данных не совпала - пакет будет перезапрошен ( если это чтение ) или послан повторно ( если это запись ). Пакеты команд и подтверждений передаются без контрольной суммы.
Вряд ли так думают те, кто хоть раз пробовал записать MX на PC.
А ты спроси не тех, а того, что тему открыл ;)
Длина каждого пакета известна в момент получения заголовка. Если идентификатор заголовка был испорчен - пакет целиком пойдёт в терминальный обмен, ответа не будет и дисковый обмен зависнет. Увидев это на экране - оператор захочет выйти в пульт и повторить загрузку. Выход в пульт осуществляется мультиплексором при приёме двух байтов 0377 подряд. Если контрольная сумма пакета данных не совпала - пакет будет перезапрошен ( если это чтение ) или послан повторно ( если это запись ). Пакеты команд и подтверждений передаются без контрольной суммы.
При прямом коннекте восстановление протокола делается автоматически без всякого участия оператора. У TU81 так - в каком бы состоянии он не оказался, его можно мгновенно вернуть в начальное :)
При прямом коннекте восстановление протокола делается автоматически без всякого участия оператора. У TU81 так - в каком бы состоянии он не оказался, его можно мгновенно вернуть в начальное Мы пойдём другим путём :)
Асинхронный протокол без таймаутов восcтановить невозможно. Если ввести таймауты - подключение по telnet станет затруднительным.
Пре-RC пре-альфы ;)
Загрузчик для незагрузочного MX и вообще любого устройства - например носителя одинакового формата вставленного в другой тип дисковода.
Формат команды:
*DD[X][.SYS],MONNAM[.SYS][/N][/U:N]
Перед выполнением команды локально включается лог терминала. После выполнения лог отключается, последнее сообщение убирается из лога и получается готовый скрипт для отправки VTCOMом на загрузку в память. Более навороченный вариант лень делать - прога делалась просто для общего развития ;)
Драйвер не обязан быть тем же самым который на диске, не обязан соответствовать параметрам SYSGEN и/или MMUшности системы.
Опции:
/N - не писать команды для записи нулей
/U:N - использовать устойство N вместо 0 для загрузки
.RU RBOOT SY:DMX,RT11XM/U:2/N
0/240
2/415
32/41420
34/116020
...
5324/72157
5326/63040
5330/72557
5332/62156
?RBOOT-I-Use "005020G" command to boot DM2:RT11XM.SYS
Мы пойдём другим путём :)
Асинхронный протокол без таймаутов восcтановить невозможно.
Никаких таймаутов не нужно.
Стандартные serial порты как на PC так и на PDP-11, ДВК, УКНЦ (С2) кроме передачи символов еще и BREAK умеют слать. Ну за исключением УКНЦшной консоли которая нам и не пригодится :)
Никаких таймаутов не нужно.Для автоматической работы - нужно. Никакой сигнал не поможет, если стандарт полагает нормальный промежуток времени ожидания ответа бесконечным.
Для автоматической работы - нужно. Никакой сигнал не поможет, если стандарт полагает нормальный промежуток времени ожидания ответа бесконечным.
В каком смысле не поможет?
Закладываешь стандартом, что BREAK - признак сброса в начальное состоение. BREAK однозначно идентифицируется в любое время и мгновенно. Проблема решена. Нет?
Проблема решена. Нет?Решение о посылке сигнала должен принимать оператор. Таймаутов ведь нет.
Решение о посылке сигнала должен принимать оператор. Таймаутов ведь нет.
А ты не собираешься закладывать в протокол контрольные суммы и тому подобное?
А ты не собираешься закладывать в протокол контрольные суммы и тому подобное?Контрольные суммы - пространственные сущности. Время им неподвластно. Если мультиплексор отправил пакет и ждёт ответа - без таймаутов он будет ждать вечно ( пока не придёт ответ или пока не вмешается оператор ).
Контрольные суммы - пространственные сущности. Время им неподвластно. Если мультиплексор отправил пакет и ждёт ответа - без таймаутов он будет ждать вечно ( пока не придёт ответ или пока не вмешается оператор ).
А причем тут время? Если ты отправил пакет и он не битый, ответ будет. Если пакет битый - мы слетели с протокола. Шлем BREAK и другая сторона мгновенно знает, что проблема есть.
Конечно это не решит всех вопросов - вроде падения программы на обратной стороне, но "штатные" нештатные ситуации поможет решить.
Если ты отправил пакет и он не битый, ответ будет.Не факт. Потеря любого пакета равновероятна. Досточно исказиться любому биту в байте-идентификаторе заголовка пакета 0377 - и весь пакет не будет распознан как пакет, а отправится в терминальный обмен.
Не факт. Потеря любого пакета равновероятна. Досточно исказиться любому биту в байте-идентификаторе заголовка пакета 0377 - и весь пакет не будет распознан как пакет, а отправится в терминальный обмен.
Ну на подтверждение можно заложить определенное число циклов готовности опять таки без таймаута. Вобщем на любой вкус.
В том числе и по решению оператора можно опять таки послать BREAK который гарантированно дойдет на ту сторону как BREAK, а не потеряется/исказится как символ :)
Вобщем на любой вкус. В том числе и по решению оператораПоскольку все потерянные пакеты попадают в терминальный обмен (и выводятся на экран), то именно оператору проще всего или принудительно отправить команду "пакет потерян" ( которую отправляет приёмник при несовпадении контрольной суммы ), или команду "выход в пульт" ( для последующей перезагрузки системы ).
Загрузчик для отправки через VTCOM.
Грузит RT11SJ.SYS с MX0.
Можно править:
5000-5002 время суток в тиках
5004 дата в формате RT-11
5006-5010 имя файла монитора в RADIX-50 (без SYS)
5014 название драйвера в RADIX-50 (на случай если MX но не MX) ;)
5016 номер дисковода 0-3
Запускается командой:
@5020G
UPD: добавлен сокращенный вариант MXBNZ.TXT - то же самое, но не передает нули. Слегка сокращает время передачи. Перед тем как передавать для надежности стоит зачистить память:
@R6/XXXXXX 160000
@0/XXXXXX 4747
@0G
000002
@
Написал для байтового потока эмуляторную утилиту ODT_Loader для загрузки любых кодов в память компьютера через терминальный интерфейс ODT.
Утилита начинает загрузку скрипта при совпадении двух условий:
1. Всё готово для загрузки скрипта и на экране приглашение ODT: @
2. Состояние утилиты "Load" активировано.
Скрипты - это наборы обычных текстовых команд ODT с одним дополнением: конец строки преобразуется в <CR>, символ "¬" - в <LF>.
В результате такой скрипт:
R0/¬
¬
¬
¬
¬
¬
¬
RS/
Даёт такой результат:
@R0/000113
R1/130422
R2/000000
R3/146772
R4/000000
R5/000036
R6/130402
R7/150214
@RS/000004
@
А такой скрипт:
10000/5000¬
12701¬
177720¬
12702¬
177722¬
10012¬
12711¬
1¬
5012¬
12711¬
2¬
5012¬
12711¬
3¬
12712¬
400¬
12711¬
4¬
12711¬
5¬
106427¬
340¬
137¬
0
10000G
Даёт такой результат:
@10000/177777 5000
010002/000000 12701
010004/177777 177720
010006/000000 12702
010010/177777 177722
010012/000000 10012
010014/177777 12711
010016/000000 1
010020/177777 5012
010022/000000 12711
010024/177777 2
010026/000000 5012
010030/177777 12711
010032/000000 3
010034/177777 12712
010036/000000 400
010040/177777 12711
010042/000000 4
010044/177777 12711
010046/000000 5
010050/177777 106427
010052/000000 340
010054/177777 137
010056/000000 0
@10000GHD Boot-I-Cold boot..
HD (177720) disk driver v1.0b 2011
SL V08.00 [SW] Сторожевых С.В. 1988
RT-11SJ (S) V05.04
Andrey_Ak
22.02.2012, 13:59
Но это годится только для тех, кто научился писать MX на PC.
Сделать такое (насколько я понимаю) на порядок сложнее, чем просто подключить порт терминала ДВК к порту COM или telnet.
- Ничего сложно... Практически любой 286 может это... И не надо определенных контроллеров...
Это читать оригинальные дискеты MX сложно, а форматировать и писать спец дискеты просто... Это не совсем дискеты MX, они отличаются от обычных MX, отформатированных на ДВК... Но ДВК понимает эти дискеты без проблем...
Текущая сборка "эмулятора ДВК" - DVK_Emulator_26.02.12_12-55 (http://emulator.pdp-11.org.ru/DVK/distr/DVK_Emulator_26.02.12_12-55.rar)
Исправлена пара ошибок, затаившихся в коде с самых первых дней :)
Изменения:
1. Обновлена версия драйвера HD ( теперь 1.0c ). Предыдущие версии могут вызвать зависание при загрузке, если загрузка осуществляется не с устройства HD.
2. В разделе всех конфигов предыдущих релизов удалить строчку [b]BooterTemporalDisable = 1 - она больше не используется.
3. В файле STRTSB.COM предыдущих релизов добавить строчку SET TT FORM, чтобы можно было нормально смотреть дампы.
4. Файл LD.SYS в предыдущих релизах был смонтирован на несуществующие диски - выполнить команды DISM LD0, DISM LD1
3. В файле STARTSB.COM предыдущих релизов добавить строчку SET TT FORM, чтобы можно было нормально смотреть дампы.
STARTSB это сильно :)
Насчет SET TT FORM все зависит от эмуляции терминала и привычек. Сам считаю более удобным вариант NOFORM (несколько пустых строк вместо FF на экране). На УКНЦ же выбора просто нет - только NOFORM и никак иначе :)
STARTSB это сильноИсправил :)
Насчет SET TT FORM все зависит от эмуляции терминала и привычек. Сам считаю более удобным вариант NOFORM (несколько пустых строк вместо FF на экране). На УКНЦ же выбора просто нет - только NOFORM и никак иначе :)Когда при просмотре дампа командой типа DU/TE SY: в конце дампа каждого блока вылетает сразу 6 переводов строки - это не только напрягает, но и иногда даже заставляет "мотать экран обратно"..
Когда при просмотре дампа командой типа DU/TE SY: в конце дампа каждого блока вылетает сразу 6 переводов строки - это не только напрягает, но и иногда даже заставляет "мотать экран обратно"..
Это дело привычки. Зато в УКНЦшном варианте вместо переводов строки будет реальное стирание экрана :)
Это дело привычки.Когда есть реальная альтернатива - привыкать к 6-строчным "судорогам" в конце дампа каждого блока как-то не хочется..
Зато в УКНЦшном варианте вместо переводов строки будет реальное стирание экранаКак и во многих Telnet-клиентах.
Когда есть реальная альтернатива - привыкать к 6-строчным "судорогам" в конце дампа каждого блока как-то не хочется..
Как и во многих Telnet-клиентах.
Я и говорю - дело привычки. Для меня было бы мерзостью привыкать к убогому отсутствию реакции на <FF> ибо изначально привык к стандартной для терминала реакции :)
Мне везло - настолько кривых (а это именно кривость) телнетов не видел :)
Насчет большинства же очень сильно сомневаюсь.
---------- Post added at 16:42 ---------- Previous post was at 16:35 ----------
Patron, Кстати, вопрос на засыпку - ты точно знаешь ответ :)
Опиши pls механизм как управляешься с NumLock чтобы он не переключался при нажатии на него. Автор E11 просит, а у меня в виндовсе из гуевого только авторизатор для биллинга был и тот не столько написан был сколько "натыкан" в delphi :)
Обновлена версия драйвера HD ( теперь 1.0c ). Предыдущие версии могут вызвать зависание при загрузке, если загрузка осуществляется не с устройства HD.
Можно подробнее этот момент? И новая версия в плане "дружбы" с версиями
монитора SJ - изменилось что нибудь ???
http://savepic.net/2433974.png
Я и говорю - дело привычки. Для меня было бы мерзостью привыкать к убогому отсутствию реакции на <FF> ибо изначально привык к стандартной для терминала реакцииПоскольку в эмуляторе уже есть универсальный Telnet-адаптер для потока байтов (который можно настроить или как Telnet-сервер, или как Telnet-клиент), то похоже, что в настройки эмулятора терминала придётся добавить строки, отображаемые на экране при получении FF и VT. Сейчас эти коды отрабатываются терминалом, как LF.
настолько кривых (а это именно кривость) телнетов не видел Насчет большинства же очень сильно сомневаюсь.Значит всё не так плохо, как мне казалось.
Значит всё не так плохо, как мне казалось
Зато с другим в плане VT52 все плохо :)
Из виндовсных не нашел ни одного хотя бы просто правильно эмулирующего ESC последовательности. Про полноценный уж не говорю :)
Опиши pls механизм как управляешься с NumLock чтобы он не переключался при нажатии на него.Общая идея проста - если статический глобальный хук клавиатуры, установленный либо в exe, либо в dll вот так:
ghKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL, KeyboardHook, ghInstance, 0);
возвращает (int)1, то Windows никак не реагирует на нажатую клавишу.
Чтобы программа, установившая глобальный хук, могла тем не менее на нажатую клавишу отреагировать - статическая функция глобального хука должна симитировать отправку соответствующих сообщений в окно программы.
У меня всё гораздо сложнее - один хук обслуживает все запущенные экземпляры программы, которые обмениваются ссылками на текущее окно-получатель через разделяемую память процессов Windows.
В итоге мой вариант глобального хука выглядит так:
LRESULT CALLBACK ConfigClass::KeyboardHook( int nCode, WPARAM wp, LPARAM lp )
{
KBDLLHOOKSTRUCT *pkh = (KBDLLHOOKSTRUCT *) lp;
dword wParam = pkh->vkCode;
dword lParam = 1;
dword lParamHi = pkh->scanCode;
signed char cFlags = pkh->flags;
if( cFlags & 1 )
{
lParamHi |= BIT_8;
}
if( cFlags < 0 )
{
lParamHi |= BIT_14;
lParamHi |= BIT_15;
}
if( nCode==HC_ACTION )
{
if( wParam == VK_NUMLOCK )
{
if( pSharedData2->gbNumLockDisabled )
{
if( cFlags < 0 )
{
pSharedData2->bVK_NUMLOCK_pressed = false;
lParamHi <<= 16;
lParam |= lParamHi;
if( pSharedData2->ghWndFocus ) { PostMessage( pSharedData2->ghWndFocus, WM_KEYUP, wParam, lParam ); }
}
else
{
if( pSharedData2->bVK_NUMLOCK_pressed ) { lParamHi |= BIT_14; }
pSharedData2->bVK_NUMLOCK_pressed = true;
lParamHi <<= 16;
lParam |= lParamHi;
if( pSharedData2->ghWndFocus ) { PostMessage( pSharedData2->ghWndFocus, WM_KEYDOWN, wParam, lParam ); }
}
if( pSharedData2->ghWndFocus ) { return 1; }
}
else
{
if( cFlags < 0 ){ pSharedData2->bVK_NUMLOCK_pressed = false; }
else
{
if( !pSharedData2->bVK_NUMLOCK_pressed )
{
pSharedData2->bVK_NUMLOCK_pressed = true;
pSharedData2->bNumLockState = !pSharedData2->bNumLockState;
pSharedData2->bNewNumLock = pSharedData2->bNumLockState;
}
}
}
}
else
if( wParam == VK_CAPITAL )
---------- Post added at 13:15 ---------- Previous post was at 13:07 ----------
Можно подробнее этот момент? И новая версия в плане "дружбы" с версиями монитора SJ - изменилось что нибудь ???В дайвере не изменилось вообще ничего, кроме кода, выводящего строчку "HD (177720) disk driver v1.0c 2012" при загрузке.
Вот исходник новой версии драйвера:
.Title HD
;
; HD.MAC - HD device driver.
;
; Revision history:
; 19-Mar-2003 : Created
; 02-Feb-2011 : HDCSR changed from 177660 to 177720
.Macro ......
.EndM
.Enabl LC
; Default SYSGEN options.
TIM$IT = 0
MMG$T = 0
ERL$G = 0
HDCSR = 177720 ; Command and state reg addr for HD device.
HDSIZ = 1600. ; Default HD device size in 512 byte blocks.
;
; HD command codes (for HD command reg: 177720 )
;
SetUni = 1 ; Set HD unit number
SetBlk = 2 ; Set HD block number
SetBuf = 3 ; Set memory buffer address
SetWCn = 4 ; Set operation word count
CmdRea = 5 ; Execute READ on HD
CmdWri = 6 ; Execute WRITE on HD
GetSiz = 7 ; Get HD size in blocks.
;
; Fixed locations.
;
.ASECT
. = 60
HD.GEN:
;;;;;;;
.MCall .DrDef
.DrDef HD, 362, FILST$!SPFUN$!VARSZ$, HDSIZ, HDCSR, 0
.DrPtr
.DrSpF <373>
.SbTtl Installation check
;
; Initial check (prints HD message).
;
.ASect
. = 116
HDMES:
.ASCIZ <CR><LF>/HD (177720) disk driver v1.0c 2012/<CR><LF>
. = 200
Nop
Tst @#64
BNE 1$
Mov PC, R0
Add #HDMES-., R0
Br 2$
3$:
MovB (R0)+, @#TPB
TstB @#TPS
BPl .-4.
2$: TstB (R0)
BNe 3$
1$:
ClC
Return
.............
;
; SET HD subroutines.
;
.DrSet ERLG, 1, O.GEN, NUM
.DrSet MMGT, 2, O.GEN, NUM
.DrSet TIMIT, 4, O.GEN, NUM
.Dsabl LSB
.Enabl LSB
;
; Use 'SET HD ERLG=1' or 'SET HD ERLG=0' to change ERL$G bit on the fly.
; Use 'SET HD MMGT=1' or 'SET HD MMGT=0' to change MMG$T bit on the fly.
; Use 'SET HD TIMIT=1' or 'SET HD TIMIT=0' to change TIM$IT bit on the fly.
;
O.GEN:
Tst R0 ; Arg = 0 ?
BEq 30$
BiS R3, HD.GEN ; Set SYSGEN bit.
Br 31$
30$:
BiC R3, HD.GEN ; Clear SYSGEN bit.
31$:
ClC
Return
.IIF GT .-1000 .ERROR
;
; I/O request entry point.
;
.DrBeg HD
Mov HDCQE, R4 ; R4 -> Queue element
Mov (R4)+, R2 ; R2 = Block number
MovB (R4)+, R1 ; R1 = SpFun code
BNe SPFUN ; Is it SpFun call?
MovB (R4)+, R1 ; R1 = Unit number
BiC #^c7, R1 ; Force it to be 1..7
Mov R1, @#HD$CSR+2 ;
Mov #SetUni,@#HD$CSR ; Select unit for operations.
Tst @#HD$CSR ; Valid unit number?
BMi HDERR ; No - Error!
Mov R2, @#HD$CSR+2 ;
Mov #SetBlk,@#HD$CSR ; Set block number.
Tst @#HD$CSR ; Valid?
BPl 3$ ; Yes - OK
Mov HDCQE, R4 ;
BiS #EOF$, @-(R4) ; Else - return EOF
Br DONE ;
3$:
Mov (R4)+, @#HD$CSR+2 ;
Mov #SetBuf, @#HD$CSR ; Set buf addr
Mov (R4), R1 ; R1 = word count
BEq DONE ; R1 = 0 - Nothing to do
BPl HDREAD ; > 0 - Read
; < 0 - Write
Neg R1 ; Get true word count
Mov R1, @#HD$CSR+2 ; ...
Mov #SetWCn,@#HD$CSR ; and set it.
Tst @#HD$CSR ; Valid?
BPl 4$ ; Yes - OK
Mov HDCQE, R4 ;
BiS #EOF$, @-(R4) ; Else - set EOF bit
4$:
Mov #CmdWri,@#HD$CSR ; Make Write to HD
Br CHECK ; OK?
HDREAD:
Mov R1, @#HD$CSR+2 ;
Mov #SetWCn,@#HD$CSR ; Set word count
Tst @#HD$CSR ; Valid?
BPl 5$ ; Yes - OK
Mov HDCQE, R4 ;
BiS #EOF$, @-(R4) ; Else - set EOF bit
5$:
Mov #CmdRea,@#HD$CSR ; Make Read from HD
CHECK:
Tst @#HD$CSR ; Error?
BPl DONE ; No - OK
; Else - abort
HDINT:
HDERR:
Mov HDCQE, R4 ;
BiS #HDERR$, @-(R4) ; Set ERROR bit in CSW.
DONE:
.DRFIN HD
;
; .SpFun 373 - Get HD unit size.
;
SPFUN:
CmpB R1, #373 ; GET SIZE?
BNe HDERR
MovB (R4)+, R1 ; Q$UNIT
BiC #^c7, R1 ;
Mov R1, @#HD$CSR+2
Mov #SetUni, @#HD$CSR ; Select unit for operations.
Mov #GetSiz, @#HD$CSR ; Get unit size
Mov @#HD$CSR+2, R1
BEq HDERR
Mov R1, @(R4)+ ; Report unit size
Br DONE
.IIF GT .-HDSTRT-1000 .ERROR
.Dsabl LSB
.Enabl LSB
;
; Primary bootstrap.
;
.DrBot HD, START, READ
. = HDBOOT + 40
START:
Jmp BOOT
;
; Boottime media read. R0 = Block; R1 = Word Count; R2 = Buf Addr
;
. = HDBOOT + 210
READ:
Mov #HD$CSR+2, R4 ; R4 -> HD data reg
Mov R4, R5 ; R5 -> HD data reg
Mov @#B$DEVU, (R4) ; Unit Num
Mov #SetUni, -(R4) ; R4 -> HD command reg
Mov R0, (R5) ; R0 - Block number
Mov #SetBlk, (R4) ; Set it
Mov R1, (R5) ; R1 - Word count
Mov #SetWCn, (R4) ; Set it
Mov R2, (R5) ; R2 - Buf addr
Mov #SetBuf, (R4) ; Set it
Mov #CmdRea, (R4) ; READ from HD device
RtS PC ;
;
; Primary boot
;
. = HDBOOT + 500
HDMESC:
.ASCIZ <CR><LF>"HD Boot-I-Cold boot.."<CR><LF>
.Even
BOOT: ; Cold boot
Mov #10000, SP ; Boottime SP value
Mov R0, -(SP) ; Get cold boot unit num
......
Mov PC, R0
Add #HDMESC-., R0
Br 2$
3$:
MovB (R0)+, @#TPB
1$: TstB @#TPS
BPl 1$
2$: TstB (R0)
BNe 3$
......
Mov #2, R0 ; Block number of BSTRAP
Mov #2000, R1 ; Word count of BSTRAP
Mov #1000, R2 ; Loading addr for BSTRAP
Mov (SP), @#B$DEVU ; Unit number
Call READ ; READ Secondary Bootstrap
; Set data in Secondary Bootstrap
Mov #^RHD , @#B$DEVN ; Device name in RADIX50
Mov (SP)+, @#B$DEVU ; Boot device unit number
Mov #READ-HDBOOT,@#B$READ ; Hook for BSTRAP
Jmp @#B$BOOT ; Jmp to Secondary Bootstrap
.DrEnd HD
.End
TIM$IT = 0
MMG$T = 0
ERL$G = 0
За такое надо руки отрывать :)
За такое надо руки отрывать Так написано же:
;
; Use 'SET HD ERLG=1' or 'SET HD ERLG=0' to change ERL$G bit on the fly.
; Use 'SET HD MMGT=1' or 'SET HD MMGT=0' to change MMG$T bit on the fly.
; Use 'SET HD TIMIT=1' or 'SET HD TIMIT=0' to change TIM$IT bit on the fly.
;
:)
Так написано же:
;
; Use 'SET HD ERLG=1' or 'SET HD ERLG=0' to change ERL$G bit on the fly.
; Use 'SET HD MMGT=1' or 'SET HD MMGT=0' to change MMG$T bit on the fly.
; Use 'SET HD TIMIT=1' or 'SET HD TIMIT=0' to change TIM$IT bit on the fly.
;
:)
А структуры данных и точки вызова он тоже меняет на лету? :)
А также правильный мапинг в MMU системах. Ну про ERL$G вообще молчу - кому драйвер будет слать пакет?
Но это собственно второстепенно. Зачем вообще писать то, что по умолчанию и так делается (кстати как это автор недоглядел, что есть еще четвертый значимый параметр SYSGEN - RTE$M), тем самым мешая стандартому процессу генерации (через который можно сказать: хочу драйвер HD).
А структуры данных и точки вызова он тоже меняет на лету? А также правильный мапинг в MMU системах. Ну про ERL$G вообще молчу - кому драйвер будет слать пакет?Понятно, что использовать драйвер HD можно только на компьютере, поддерживающем устройство HD, т.е. на моём "эмуляторе ДВК". Если нужно создать системный диск с монитором, имеющим другие параметры генерации, нежели установленные у имеющегося драйвера HD.SYS, то если процедуры осуществляются в системе, загруженной с HD - нужно сначала скопировать драйвер системного устройства под другим именем (я использую имя HH), потом выполнить команды SET HH ..., настроив параметры генерации, затем скопировать НН.SYS на целевой диск, выполнить команду COPY/BOOT:HH HDx:RT11SJ HDx: и под конец - переименовать скопированный драйвер в HD.SYS.
Но это собственно второстепенно. Зачем вообще писать то, что по умолчанию и так делается (кстати как это автор недоглядел, что есть еще четвертый значимый параметр SYSGEN - RTE$M), тем самым мешая стандартому SYSGEN (через который можно сказать: хочу драйвер HD).Мои познания в области "драйверостроения" для RT-11 околонулевые - это обычная копипаста какого-то старого драйвера для RT-11 в котором я изменил только "содержательную часть". Скорее всего в те давние времена никто ещё не слышал про параметр RTE$M.
В любом случае - никто не мешает привести исходник в идеальный вид, сделав всё как положено.
Мои познания в области "драйверостроения" для RT-11 околонулевые - это обычная копипаста какого-то старого драйвера для RT-11 в которм я изменил только "содержательную часть". Скорее всего в те давние времена никто ещё не слышал про параметр RTE$M.
В любом случае - никто не мешает привести исходник в идеальный вид, сделав всё как положено.
Параметр RTE$M появился в RT-11 V5.0. Точнее появился он раньше, но раньше это не было отражено в исходниках системы и SYSMAC (была по сути просто отдельная совместимая система).
Что касается приведения к нормальному виду, то это всегда полезно.
А относительно всяких SETов для подгонки под систему - тут во-первых если подгонять, то подгонять все параметры сразу, при этом учитывая, что если эти параметры как-то используются, то нужна разборка с точками входа (коих далеко не два варианта на каждый бит получается). Если такая разборка включается в драйвер который выполняет реальный ввод-вывод, размер кода разборок может просто сравняться (если не превысить) код самого драйвера. Поэтому никто обычно не делает этого для драйверов ввода-вывода, а если делает, то драйвер обычно сам не поддерживает этих фич и соответственно нет смысла включать их по отдельности. Ну и перестройка простого драйвера в MMUшный и наоборот выглядит сомнительно с точки зрения целесообразности :)
драйвер обычно сам не поддерживает этих фич и соответственно нет смысла включать их по отдельности.Драйвер HD (как мы знаем) вообще ничего не поддерживает (даже ввод-вывод по прерываниям). Установка же параметров по-отдельности сделана для того, чтобы пользователю не надо было думать. Ведь выполнить команду SET HD SYSGEN (без параметра, содержащего желаемое слово генерации) можно было бы только загрузившись в целевой системе, а "эмулятор ДВК" пока что поддерживает лишь загрузку с HD. Получается порочный круг: чтобы настроить параметры генерации - нужно загрузиться с HD, а чтобы загрузиться с HD - нужно настроить параметры генерации.
Ведь выполнить команду SET HD SYSGEN (без параметра, содержащего желаемое слово генерации) можно было бы только загрузившись в целевой системе, а "эмулятор ДВК" пока что поддерживает лишь загрузку с HD. Получается порочный круг: чтобы настроить параметры генерации - нужно загрузиться с HD, а чтобы загрузиться с HD - нужно настроить параметры генерации.
Я думаю если человек сумеет узнать эти параметры у еще незагруженной системы (для справки, лежат по оффсету 4776 в файле монитора), а также умеет этим параметрам сопоставить эти самые биты, еще проще будет научить человека с помощью SIPP делать настройку драйвера (причем ему даже в этом случае не придется знать соответствия битов настройкам).
Ну а если совсем прижало, можно сделать сам SET в виде SET XX SYSGEN=n :)
А то и вовсе вариант для ленивых:
.RUN HD.SYS
Monitior file? RT11SB.SYS
:)
Пока же практика показывает, что многие просто не понимают значения этих битов, и что если появляется ошибка Conflicting SYSGEN options, то драйвер просто с системой несовместим :)
Получается порочный круг: чтобы настроить параметры генерации - нужно загрузиться с HD, а чтобы загрузиться с HD - нужно настроить параметры генерации.
вот с чем я и сталкиваюсь на каждом шагу при попытке использовать старенький добрый монитор или ещё при всяких разных обстоятельствах ))) Приходится тупо
искать монитор которые не будет ругаться при копи-бут на колфликт сисген установок (((
---------- Post added at 15:32 ---------- Previous post was at 15:29 ----------
form, не нужен SB !!! Нужен SJ !!! ))))))))))
вот с чем я и сталкиваюсь на каждом шагу при попытке использовать старенький добрый монитор или ещё при всяких разных обстоятельствах ))) Приходится тупо
искать монитор которые не будет ругаться при копи-бут на колфликт сисген установок (((
Уже многократно говорилось и как подстроить драйвер под систему и как сделать вообще все что нужно, используя E11 итд. Но как правило все разбивается о нежелание попробовать :)
Тем более, что в советских реалиях и варианта подстройки обычно всего два: есть поддержка таймера для драйвера (60/ 4) и нет поддержки (60/ 0) - даже методом перебора легко делается :)
Я думаю если человек сумеет узнать эти параметры у еще незагруженной системы (для справки, лежат по оффсету 4776 в файле монитора), а также умеет этим параметрам сопоставить эти самые биты, еще проще будет научить человека с помощью SIPP делать настройку драйвера (причем ему даже в этом случае не придется знать соответствия битов настройкам).Я обычно пользуюсь тем, что целевая система уже как правило имеет какие-то драйверы и просто копирую у любого из них слово по адресу 060 в модифицируемый драйвер.
form, не нужен SB !!! Нужен SJ !!! ))))))))))
Да раз 100 здесь говорилось как все сделать и название монитора тут совершенно непричем. Просто проще здесь написать "а-а-а! драйвер не подходит" чем самому один раз попробовать :)
А уж когда исходник драйвера есть и вовсе не ясны проблемы :)
вот с чем я и сталкиваюсь на каждом шагу при попытке использовать старенький добрый монитор или ещё при всяких разных обстоятельствах ))) Приходится тупо искать монитор которые не будет ругаться при копи-бут на колфликт сисген установокА оказывается - нужно просто посмотреть содержимое слова 060 у любого драйвера той системы - и прописать такое же значение в свой.
Уже многократно говорилось и как подстроить драйвер под систему и как сделать вообще все что нужно, используя E11 итд. Но как правило все разбивается о нежелание попробовать
Тем более, что в советских реалиях и варианта подстройки обычно всего два: есть поддержка таймера для драйвера (60/ 4) и нет поддержки (60/ 0) - даже методом перебора легко делается
Насчёт E11 - у меня с ним пока дружба не налаживается (((
Зато EM(SOS) досовский - просто необходимая вещь при наличии живого УКНЦ!!!)))
http://savepic.net/2513057.jpg
Насчёт E11 - у меня с ним пока дружба не налаживается (((
Зато EM(SOS) досовский - просто необходимая вещь при наличии живого УКНЦ!!!)))
А уживаться и не надо, надо им пользоваться как инструментом :)
Я в принципе все дискеты для УКНЦ (или если правильнее, вообще все дискеты и все диски кроме HDD для УКНЦ) готовил в E11.
---------- Post added at 18:46 ---------- Previous post was at 18:43 ----------
На картинке видна распечатка драйвера для системы без поддержки device timeout. Проблема отсутствует по определению.
[IMG]В образе HDSYS.DSK из базового комплекта "эмулятора ДВК" находится DESS.SAV самой последней версии ( если не ошибаюсь v07.00 ).
В образе HDSYS.DSK из базового комплекта "эмулятора ДВК" находится DESS.SAV самой последней версии ( если не ошибаюсь v07.00 ).
А я к нему так никогда и не смог привыкнуть несмотря на то, что он пытается сделать вид, что работает в RSX :)
Возможно по той причине, что сначала всегда был PUD под рукой (который почти 1:1 RSXовский DUP), а в армии было проще написать свой редактор с нуля чем найти что-то еще :)
---------- Post added at 19:03 ---------- Previous post was at 18:57 ----------
пытается сделать вид, что работает в RSX :)
А этот из образа даже этого не пробует - фи ;)
в армии было проще написать свой редактор с нуля чем найти что-то ещеКогда я делал первый вариант RT-11 для первого варианта БК-0011 (когда у БК-0011 ещё не было вообще ни одной операционки) - то впервые загрузив на БК созданный для неё системный диск - обнаружил, что там нет экранного редактора, но зато есть BASIC.SAV и немедленно написал экранный редактор на Бэйсике.
1 PRINT "Экранный редактор для БК-0011. Версия 1.0 <1988>"
2 PRINT \ GO TO 8
3 GO TO 1150
6 R7%=1% \ RETURN
7 R7%=0% \ RETURN
8 PUT(3%,-18812%) \ C1$=CHR$(26%) \ C2$=CHR$(27%) \ C3$=CHR$(25%) \ C4$=CHR$(8%)
9 G$=CHR$(7%) \ G%=1% \ X%=G%+Z1% \ Z%=1% \ Y%=Z% \ Z2%=Z1%+64% \ M$=CHR$(13%)
10 DIM A$(255%) \ K$=CHR$(11%) \ S$=CHR$(12%) \ H$=CHR$(18%) \ I$=CHR$(10%) \ I1$=CHR$(30%)
11 C$="QZ TBEN"+C1$+C2$+C3$+C4$+CHR$(22) \ N1%=80% \ N2%=20% \ N%=N1% \ E$=CHR$(5%)
12 U$=CHR$(0%) \ FOR J%=0% TO N1% \ P$=P$+U$ \ A$(J%)=E$ \ NEXT J%
14 R$=CHR$(14%) \ R1$=CHR$(15%) \ T$=CHR$(9%)
18 A%=TTYSET(255%,250%)
20 F$=" файл " \ PRINT "Входной ";F$; \ INPUT F1$
30 IF F1$="" THEN D%=1%
40 PRINT "Выходной";F$; \ INPUT F2$ \ IF F2$="" THEN F2$=F1$
50 IF D%=0% THEN OPEN F1$ AS FILE 1%
60 OPEN F2$ FOR OUTPUT AS FILE 2% FILESIZE -1%
80 GET(36%,J9%) \ PUT(4096%,36%) \ PRINT CHR$(2%);
84 A%=SYS(7%,0%)
90 GOSUB 3000
100 GOSUB 1500
102 E%=0% \ K%=0% \ V%=0%
110 A$=CHR$(A%) \ IF A%>31% THEN IF A%<127% THEN GOSUB 3635 \ GO TO 800
120 IF A%=127% THEN GOSUB 3640 \ GO TO 800
130 ON A% GOSUB 10000,3700,3,3680,3,3,3,3400,3,5000,3,3,3,6,7,3,3, 2950,6000,3,3720,3600,3618,3,3300,3100,3200,3,3,3, 3
150 ON K%+1% GO TO 800,840
800 A$(ASC(SEG$(P$,Z%,Z%)))=L$
840 GO TO 100
1000 L$="" \ IF D%=1% THEN E%=1% \ RETURN
1002 IF END #1% THEN GOSUB 1150 \ RETURN
1004 LINPUT #1%:L1$ \ IF POS(L1$,T$,1%)<>0% THEN 1008
1006 IF R%=0% THEN IF POS(L1$,R$,1%)=POS(L1$,R1$,1%) THEN L$=L1$ \ RETURN
1008 T1=0
1010 FOR J%=1% TO LEN(L1$) \ A%=ASC(SEG$(L1$,J%,J%)) \ IF A%=14% THEN R%=1% \ GO TO 1100
1020 IF A%=15% THEN R%=0% \ GO TO 1100
1022 T2%=0%
1024 IF A%=9 THEN A%=32 \ T2%=1%
1030 L$=L$+CHR$(A%+128%*R%)
1040 T1=T1+1
1050 IF T2%=1% THEN IF INT(T1/8)<>T1/8 THEN 1030
1100 NEXT J% \ RETURN
1150 PRINT G$; \ K%=1% \ E%=1% \ RETURN
1200 PRINT \ PRINT I1$; \ I%=1%
1210 FOR J%=I% TO LEN(L$) \ IF J%>Z1% THEN IF J%<Z2% THEN PRINT SEG$(L$,J%,J%);
1212 NEXT J% \ PRINT K$ \ RETURN
1300 PRINT H$; \ FOR J%=2% TO Y% \ PRINT I$; \ NEXT J%
1310 FOR J%=2% TO X% \ PRINT C3$; \ NEXT J% \ RETURN
1500 A%=SYS(1%) \ IF A%=13% THEN A%=SYS(1%)
1510 RETURN
1550 X%=G%-Z1% \ IF Z1%>=G% THEN X%=1% \ V2%=1%
1552 IF G%-Z1%>Z2% THEN X%=64% \ V1%=1%
1554 RETURN
2000 IF N%<1% THEN 1150
2010 P%=POS(P$,U$,1%) \ GOSUB 2200 \ A$(M%)=L$ \ N%=N%-1% \ GO TO 2600
2200 FOR M%=1% TO 251% \ IF A$(M%)=E$ THEN RETURN
2202 NEXT M% \ RETURN
2400 A$(ASC(SEG$(P$,P%,P%)))=E$ \ P$=SEG$(P$,1%,P%-1%)+SEG$(P$,P%+1%,N1%)+U$ \ N%=N%+1% \ RETURN
2500 IF N%<1% THEN 1150
2510 P$=SEG$(P$,1%,P%-1%)+CHR$(M%)+SEG$(P$,P%,N1%) \ N%=N%-1% \ RETURN
2600 GOSUB 2400 \ GOSUB 2500 \ RETURN
2700 FOR J%=1% TO LEN(L$) \ A%=ASC(SEG$(L$,J%,J%)) \ R1%=0% \ IF A%>128% THEN R1%=1% \ A%=A%-128%
2710 IF R1%<>R2% THEN PRINT #2%:CHR$(15%-R1%); \ R2%=R1%
2720 PRINT #2%:CHR$(A%); \ NEXT J% \ PRINT #2% \ RETURN
2800 I%=Z%-1%
2802 P%=1%
2810 FOR J1%=1 TO I% \ M%=ASC(SEG$(P$,1%,1%)) \ L$=A$(M%) \ GOSUB 2700 \ A$(M%)=E$ \ GOSUB 2400 \ Z%=Z%-1
2820 NEXT J1% \ RETURN
2900 I%=N%-N2% \ FOR J1%=1% TO I% \ E%=0% \ GOSUB 1000 \ GOSUB 2000 \ IF E%<>0% THEN F%=1% \ RETURN
2910 NEXT J1% \ RETURN
2950 PRINT S$; \ V%=1%
2951 I3%=Z%-Y% \ I4%=27% \ I%=N1%-N%+2% \ IF I4%>I% THEN I4%=I%
2952 FOR J1%=V% TO I4% \ I1%=I3%+J1% \ L$=A$(ASC(SEG$(P$,I1%,I1%))) \ GOSUB 1200 \ NEXT J1% \ GOSUB 1300 \ GO TO 4000
3000 GOSUB 2800 \ IF F%=0% THEN GOSUB 2900
3006 Y%=Z% \ GOSUB 2950 \ IF N1%-N%=0% THEN L$="" \ GOSUB 2000
3010 GO TO 3350
3100 Y%=Y%-1% \ IF Y%=0% THEN Y%=1% \ V%=1%
3110 Z%=Z%-1% \ IF Z%=0% THEN Z%=1% \ GOSUB 1150 \ RETURN
3114 GOSUB 4000
3116 PRINT I1$;
3120 IF V%=1% THEN GOSUB 1200 \ PRINT C1$; \ IF S%>=G% THEN 1310
3121 IF S%<G% THEN X%=1% \ PRINT M$; \ GO TO 3354
3130 RETURN
3200 I%=N1%-N%
3210 Z%=Z%+1% \ IF Z%>I% THEN Z%=I% \ GOSUB 1150 \ RETURN
3212 Y%=Y%+1% \ IF Y%=28% THEN Y%=27% \ V%=1%
3214 GOSUB 4000
3220 PRINT I$; \ GO TO 3120
3300 G%=G%+1% \ IF G%>S% THEN 3352
3306 IF G%=Z1%+1% THEN V2%=0% \ RETURN
3308 IF V2%=1% THEN RETURN
3310 V1%=0% \ X%=X%+1% \ IF X%>Z2% THEN X%=Z2% \ V1%=1% \ RETURN
3320 PRINT C3$; \ RETURN
3330 RETURN
3350 G%=1% \ X%=1% \ PRINT M$; \ IF Z1%>0% THEN V2%=1%
3351 RETURN
3352 IF Z%=N1%-N% THEN GOSUB 3121 \ GO TO 1150
3353 GOSUB 3350 \ GO TO 3200
3354 G%=S% \ V2%=0% \ I%=64%-X% \ I1%=S%-X%-Z1% \ V1%=1% \ IF I%>I1% THEN I%=I1% \ V1%=0% \ IF I1%<0% THEN V2%=1% \ RETURN
3355 X%=X%+I% \ FOR J%=1% TO I% \ PRINT C3$; \ NEXT J% \ RETURN
3356 GOSUB 3100 \ IF E%=0% THEN 3354
3360 RETURN
3400 G%=G%-1% \ IF G%=0% THEN G%=1% \ GO TO 3356
3406 IF G%-Z1%=Z2% THEN V1%=0% \ RETURN
3408 IF V1%=1% THEN RETURN
3410 V2%=0% \ X%=X%-1% \ IF X%=0% THEN X%=1% \ V2%=1% \ RETURN
3422 PRINT C4$; \ RETURN
3500 PUT(J9%,36%) \ V1%=0% \ V2%=0%
3504 PRINT H$;K$;"Зона "; \ PUT(19%,-18812%) \ LINPUT Y$ \ PUT(3%,-18812%)
3510 Z1%=VAL(Y$) \ Z2%=Z1%+64% \ GOSUB 1550 \ K%=1% \ PUT(4096%,36%) \ I%=SYS(7%,0%) \ GO TO 2950
3600 L$=SEG$(L$,1,G%-1%)+SEG$(L$,G%+1,S%) \ S%=S%-1%
3610 I%=G% \ GOSUB 1210
3612 PRINT C1$; \ GO TO 1310
3618 A$=" "
3620 L$=SEG$(L$,1,G%-1%)+A$+SEG$(L$,G%,S%) \ S%=S%+1% \ GO TO 3610
3635 IF R7%=1% THEN A$=CHR$(A%+128%)
3638 GOSUB 3620 \ GO TO 3300
3640 GOSUB 3400 \ GO TO 3600
3660 L1$=SEG$(L$,G%,S%) \ L$=SEG$(L$,1%,G%-1%) \ PRINT K$; \ U%=2%
3664 S%=S%-LEN(L1$) \ RETURN
3680 IF Z%=N1%-N% THEN 1150
3682 L1$=L$ \ U%=1% \ P%=Z% \ GOSUB 2400
3684 GOSUB 4000 \ GOSUB 3121 \ V%=Y% \ GO TO 2951
3700 GOSUB 2200 \ A$(M%)=""
3710 P%=Z% \ GOSUB 2500 \ GO TO 3684
3720 L1$=SEG$(L$,1%,G%-1%) \ L$=SEG$(L$,G%,S%) \ U%=3% \ GOSUB 3664 \ GOSUB 3350 \ GOSUB 1200 \ GO TO 3612
3800 ON U%+1% GO TO 1150,3830,3810,3810
3810 L$=SEG$(L$,1%,G%-1%)+L1$+SEG$(L$,G%,S%) \ I%=G% \ GOSUB 1210 \ S%=S%+LEN(L1$) \ IF U%=2% THEN 3612
3820 G%=G%+LEN(L1$) \ GOSUB 1550 \ GO TO 3612
3830 GOSUB 2200 \ A$(M%)=L1$ \ L$=L1$ \ GO TO 3710
4000 L$=A$(ASC(SEG$(P$,Z%,Z%))) \ S%=LEN(L$)+1% \ RETURN
5000 IF Z%=N1%-N% THEN L$="" \ GOSUB 2000 \ GO TO 3200
5010 GOSUB 3200 \ GO TO 3700
6000 GOSUB 1500 \ IF A%=19% THEN RETURN
6008 IF A%>96% THEN A%=A%-32%
6010 FOR J%=1% TO LEN(C$)
6014 IF A%=ASC(SEG$(C$,J%,J%)) THEN ON J% GO TO 10000,3500,3800,6040,6100,6200,3000,6300,6320,3354 ,3350,3660
6020 NEXT J% \ GO TO 1150
6040 Z%=1% \ Y%=Z% \ GOSUB 2950 \ GO TO 3121
6100 Z%=N1%-N% \ Y%=27% \ GOSUB 2950 \ GO TO 3121
6200 I%=N1%-N% \ IF D%=1% THEN 6208
6202 IF END #1% THEN IF A$(ASC(SEG$(P$,I%,I%)))="" THEN I%=I%-1%
6208 GOSUB 2802 \ IF D%=1% THEN 6230
6210 IF END #1% THEN 6230
6220 LINPUT #1%:L1$ \ PRINT #2%:L1$ \ GO TO 6210
6230 CLOSE \ GO TO 10000
6300 K1%=1%
6304 FOR J2%=1% TO 10% \ ON K1% GOSUB 3100,3200 \ IF E%=1% THEN RETURN
6310 NEXT J2% \ RETURN
6320 K1%=2% \ GO TO 6304
10000 PUT(J9%,36%) \ PUT(19%,-18812%) \ PRINT S$; \ STOP
BASIC.SAV и немедленно написал экранный редактор на Бэйсике.
В MS-DOS программа EDIT в реале ничто иное как врапер, запускающий их басиц в режиме редактирования :)
Правда там программ на басице для этого не используется :)
---------- Post added at 19:15 ---------- Previous post was at 19:10 ----------
Кстати, на случай если не видел, я тут давеча выкладывал полный дистриб BASIC-11 и BASIC-PLUS для RT-11 :)
я тут давеча выкладывал полный дистриб BASIC-11 и BASIC-PLUS для RT-11Только сейчас заметил - это круто.
Только сейчас заметил - это круто.
MU/BASIC бы еще найти полный :)
И в RSXе у меня пока так и нет простого BASIC-11, а BASIC-PLUS-2 все-таки кое-чем отличается, особенно если в оболочке работать.
>BP2
PDP-11 BASIC-PLUS-2 V2.7-00
BASIC2
A = 1
BASIC2
PRINT A
0
BASIC2
Глюки атакуют!
С ужасом обнаружил, что все операционки ( кроме RT-11SB (S) V05.07 C от formа ) при копировании файла изменяют в его дате 2012 год на 1980.
Делать нечего - установил монитор formа.
Но тут пришла другая напасть - при загрузке этот монитор портит последнее слово драйвера системного устройства HD, что приводит к вылету в пульт при получении драйвером запроса SpFun.
Т.к. далеко не всякая программа RT-11 выдаёт такой запрос - вылет случился при подаче (моей любимой) команды DU/TE SY:
Т.е. при таком коде драйвера он вылетает:
;
; .SpFun 373 - Get HD unit size.
;
SPFUN:
CmpB R1, #373 ; GET SIZE?
BNE HDERR
MovB (R4)+, R1 ; Q$UNIT
BiC #^c7, R1 ;
Mov R1, @#HD$CSR+2
Mov #SetUni, @#HD$CSR ; Select unit for operations.
Mov #GetSiz, @#HD$CSR ; Get unit size
Mov @#HD$CSR+2, R1
BEq HDERR
Mov R1, @(R4)+ ; Report unit size
Br DONE
.IIF GT .-HDSTRT-1000 .ERROR
А при таком - нет:
;
; .SpFun 373 - Get HD unit size.
;
SPFUN:
CmpB R1, #373 ; GET SIZE?
BNE HDERR
MovB (R4)+, R1 ; Q$UNIT
BiC #^c7, R1 ;
Mov R1, @#HD$CSR+2
Mov #SetUni, @#HD$CSR ; Select unit for operations.
Mov #GetSiz, @#HD$CSR ; Get unit size
Mov @#HD$CSR+2, R1
BEq HDERR
Mov R1, @(R4)+ ; Report unit size
Br DONE
Nop
.IIF GT .-HDSTRT-1000 .ERROR
Отсюда вопроос - это так и должно быть?
Нужно ли выпускать новую версию драйвера HD.SYS с добавленными в конце Nopами..
Глюки атакуют!
С ужасом обнаружил, что все операционки ( кроме RT-11SB (S) V05.07 C от formа ) при копировании файла изменяют в его дате 2012 год на 1980.
Дело не в мониторе. Старые PIPы подрезают биты, касающиеся AGE. Хотя конечно если монитор сам по себе не патченый - еще может где-нибудь вылезти косяк. Я делал как-то патч для 5.3, DIR к нему поправил, но до PIPа руки так и не дошли, а теперь и вовсе проще подсунуть от 5.7 :)
В SJ впрочем косяк вряд-ли может вылезти такого типа. Там даже валидность аргументов вызовов не проверяется, а если они все-таки валидны и не вылазят за пределы программы - все-равно нет гарантии, что после очередного действия от монитора что-нибудь осталось :)
Но тут пришла другая напасть - при загрузке этот монитор портит последнее слово драйвера системного устройства HD, что приводит к вылету в пульт при получении драйвером запроса SpFun.
...
Нужно ли выпускать новую версию драйвера HD.SYS с добавленными в конце.
Я думаю нужно просто собрать HD.SYS с установленным TIM$IT если собираешься пользовать его в системе с поддержкой device timeout :)
---------- Post added at 21:19 ---------- Previous post was at 21:06 ----------
Посмотрел в SYSMAC, там есть фича в .DREND - параметр FORCE=x, где x - SYSGEN биты для которых в конце драйвера будет зарезервирован вектор вызовов.
Пример из исходников SL:
.DrEnd SL,FORCE=ErLg$!Timit$
проще подсунуть от 5.7Сразу так и сделал, но ничего не изменилось. Спасла только "адаптированная" версия монитора.
есть фича в .DREND - параметр FORCE=x, где x - SYSGEN биты для которых в конце драйвера будет зарезервирован вектор вызовов. .DrEnd SL,FORCE=ErLg$!Timit$Т.е. чтобы при загрузке в мониторе, сгенерённом с поддержкой "всего, чего можно", у драйвера не затирались несколько последних слов - в команде .DrEnd нужно предусмотреть "максимум наворотов" ( или добавить в конец драйвера пяток Nopов ).
Извиняюсь за оффтоп, но хоть я и не PDP-шник, но немножко в теме должен шарить, хотя бы потому что написал эмулятор УКНЦ, и даже кусочек ДВК. Однако же НИЧЕГО не понимаю, чего здесь пишут)
Т.е. чтобы при загрузке в мониторе, сгенерённом с поддержкой "всего, чего можно", у драйвера не затирались несколько последних слов - в команде .DrEnd нужно предусмотреть "максимум наворотов" ( или добавить в конец драйвера пяток Nopов ).
Или привыкнуть собирать драйвер с CND файлом. Я не случайно его всегда рядом с монитором кладу :)
---------- Post added at 21:42 ---------- Previous post was at 21:39 ----------
Извиняюсь за оффтоп, но хоть я и не PDP-шник, но немножко в теме должен шарить, хотя бы потому что написал эмулятор УКНЦ, и даже кусочек ДВК. Однако же НИЧЕГО не понимаю, чего здесь пишут)
Да тут сегодня больше не PDPшные вопросы, а вопросы по внутренностям драйверов RT-11 :)
Если силы будут, как-нибудь сделаю шаблонный драйвер с установщиками, SETами которые исправляют блоки >1 драйвера и с SETами, подпрограммы которых могут быть больше чем блок :)
---------- Post added at 21:42 ---------- Previous post was at 21:42 ----------
Кстати об эмуляторе, а у тебя там случайно COM порт вживую нельзя подключить? :)
Кстати об эмуляторе, а у тебя там случайно COM порт вживую нельзя подключить? :)
К чему? К EmuStudio? Да нет, зачем он мне.
К чему? К EmuStudio? Да нет, зачем он мне.
Удобно когда эмулятор можно связать напрямую с машиной для перекачки файлов. Конечно можно обойтись и образами, но так оно удобнее :)
Удобно когда эмулятор можно связать напрямую с машиной для перекачки файлов. Конечно можно обойтись и образами, но так оно удобнее :)
Ой, я этого и не умею.
Ни пользоваться ком-портом на PC, ни на УКНЦ)
Ой, я этого и не умею.
Ни пользоваться ком-портом на PC, ни на УКНЦ)
Ну на УКНЦ им пользоваться не сложнее чем консольным :)
Разьве что консольный на УКНЦ урезан в функционале в виду своей специфики :)
Ну на УКНЦ им пользоваться не сложнее чем консольным :)
А что, еще и консольный есть?)
А что, еще и консольный есть?)
А у тебя терминал (даже если он и эмулируется на ПП) не считается? :)
А у тебя терминал (даже если он и эмулируется на ПП) не считается? :)
Что значит не считается? Терминал - это терминал.
Что значит не считается? Терминал - это терминал.
Ну так обращаться к "терминалу" который является консольным не сложнее чем к терминалу который сидит на С2 в УКНЦ. Причем этот С2 может быть консольным если будет такое желание :)
Я уже готов "написать" адаптер COM-порта для своего эмулятора - дайте, что можно скопипастить.
Кстати, RT-11 у меня уже нормально грузится через порт своего системного терминала. Правда, пока только локально - через Telnet ещё не пробовал.
Я уже готов "написать" адптер COM-порта для своего эмулятора - дайте, что можно скопипастить.
Я к сожалению на пц только под унихами програмил COM порты. В виндовсном не силен. Могу расписать все, что касается PDP-11 и выходит за рамки битов 6,7 CSRов и 0-7 DATа :)
---------- Post added at 22:12 ---------- Previous post was at 22:10 ----------
Хотя для УКНЦ в доке и так все расписано вроде.
---------- Post added at 22:15 ---------- Previous post was at 22:12 ----------
Кстати, RT-11 у меня уже нормально грузится через порт своего системного терминала. Правда, пока только локально - через Telnet ещё не пробовал.
telnet дело муторное, но не невозможное, особенно если серверная часть пишется с нуля :)
по суте в телнете заложено все, что нужно для проброса serial порта, но реализаций ни разу не видел.
В целом, мы с Andrey_Ak часто соединяли его ДВК с моим E11 или 11/83 по телнету и гоняли файлы - вобщем-то и так обходились :)
telnet дело муторное, но не невозможное, особенно если серверная часть пишется с нуляЯ уже написал полную поддержку Telnet для эмулятора.
Вызывается так (даю только те строчки, которые нужно добавить в соответствующие секции загружаемого конфига):
[objects]
Con1 = Ядро:Console
IP_Adapter1 = Ядро:Terminal_IP_Adapter
IP_Adapter2 = Ядро:Terminal_IP_Adapter
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;
[links]
IP_Adapter1 [Log] > Con1
IP_Adapter2 [Log] > Con1
TerminalPort <==> VT52 ; <- Эту строчку убрать
TerminalPort <==> IP_Adapter1
IP_Adapter2 <==> VT52
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;
[Con1.ini]
TabTitle = "IP Log"
InitialStateOf[StatusBar] = 1
SaveChangesFor[StatusBar] = 0
InitialStateOf[ControlBar] = 0
SaveChangesFor[ControlBar] = 0
InitialStateOf[Log]=0
SaveChangesFor[Log]=0
InitialStateOf[Dump]=1
SaveChangesFor[Dump]=0
LeftDumpSeparator=«
RightDumpSeparator=»
[IP_Adapter1.ini]
Listen_at_IP =""
Listen_at_Port = 8023
Connect_to_IP =""
Connect_to_Port= 0
[IP_Adapter2.ini]
Listen_at_IP = ""
Listen_at_Port = 0
Connect_to_IP = 127.0.0.1
Connect_to_Port= 8023
Боюсь только, что при релизе Telnet-адаптера - параметры Listen_at_IP и Listen_at_Port будут заменены на Listen_on_IP и Listen_on_Port.
Так они будут иметь чуть больше смысла для тех, кто знает английский :)
Я уже написал полную поддержку Telnet для эмулятора.
..
Боюсь только, что при релизе Telnet-адаптера - параметры Listen_at_IP и Listen_at_Port будут заменены на Listen_on_IP и Listen_on_Port.
Так они будут иметь чуть больше смысла для тех, кто знает английский :)
Посмотрим на досуге.
IP с портом вообще можно совместить в одном параметре.
А если быть строгим относительно терминологии и at/on, то получится вообще listen for (a connection) и bind to (address, port) :)
А listen on - это так сказать сокращение - нечто вроде DECовского CALLR :)
Сервис от создателей драйвера )))
При заказе желательно указать параметры генерации системы и тип накопителя (чтобы считать копию стандартными средствами). Документация прилагается. Возможна поставка драйвера для SJ/FB - мониторов.
если быть строгим относительно терминологии и at/on, то получится вообще listen for (a connection)Listen on [IP:port] for connection (насколько понимаю).
Listen on [IP:port] for connection (насколько понимаю).
Я просто с точки зрения назначения socket вызовов - поворчал так сказать немного. А сейчас вот чаю налью и сразу стану добрее :)
Загрузка RT-11 через порт её системного терминала ( продолжающаяся при CPS 960 ровно 1 минуту ) довольно поучительна :)
Сообщения на экране того самого системного терминала, через порт которого идут запросы чтения/записи драйвера псевдодиска, вполне обычны:
.BO/FORE HX0:
HX Boot-I-Cold boot..
HX DSK/TTY multiplexer v1.0 2012
SL V08.00 [SW] Сторожевых С.В. 1988
RT-11SB (S) V05.07 C
.SET USR NOSWAP
.SET EDIT K52
.SET TT FORM
.SET SL ON
.
Но вот сами запросы - довольно любопытны:
HX: READ : uUnit[0] ; uBlock[0000] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0000] ; uWordCount[0001]
HX: READ : uUnit[0] ; uBlock[0002] ; uWordCount[1024]
HX: READ : uUnit[0] ; uBlock[0006] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0048] ; uWordCount[0137]
HX: READ : uUnit[0] ; uBlock[0051] ; uWordCount[0167]
HX: READ : uUnit[0] ; uBlock[0080] ; uWordCount[0163]
HX: READ : uUnit[0] ; uBlock[1400] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[1400] ; uWordCount[0610]
HX: READ : uUnit[0] ; uBlock[0047] ; uWordCount[0232]
HX: READ : uUnit[0] ; uBlock[0055] ; uWordCount[10932]
HX: READ : uUnit[0] ; uBlock[0050] ; uWordCount[0159]
HX: READ : uUnit[0] ; uBlock[0053] ; uWordCount[0112]
HX: READ : uUnit[0] ; uBlock[0049] ; uWordCount[0074]
HX: READ : uUnit[0] ; uBlock[0052] ; uWordCount[0177]
HX: READ : uUnit[0] ; uBlock[1556] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0141] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[1542] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0154] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0155] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[1547] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0156] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[1551] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0143] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0159] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[1338] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0136] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0006] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0143] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0144] ; uWordCount[2560]
HX: WRITE: uUnit[0] ; uBlock[0144] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0140] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0006] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[1336] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0110] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0112] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0110] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0112] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0110] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0159] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0112] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0160] ; uWordCount[2304]
HX: WRITE: uUnit[0] ; uBlock[0160] ; uWordCount[1280]
HX: READ : uUnit[0] ; uBlock[0104] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0160] ; uWordCount[1127]
HX: READ : uUnit[0] ; uBlock[0110] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0006] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0159] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0112] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0160] ; uWordCount[2304]
HX: WRITE: uUnit[0] ; uBlock[0160] ; uWordCount[1280]
Особенно хорош запрос на чтение одного слова из нулевого блока загружаемого диска :)
...
Теперь посмотрим, что сидит в памяти:
.SH MEM
Address Module Words
------- ------ -----
160000 IOPAGE 4096.
156474 HX 354.
134724 RMON 4532.
130406 SL 1127.
120342 USR 2066.
001000 ..BG.. 20337.
.
HX: READ : uUnit[0] ; uBlock[0134] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0136] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0006] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0271] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0272] ; uWordCount[3072]
HX: READ : uUnit[0] ; uBlock[0295] ; uWordCount[1559]
HX: READ : uUnit[0] ; uBlock[0055] ; uWordCount[6400]
Ну и дела!
Оказывается, последняя версия DESS (http://zx.pk.ru/attachment.php?attachmentid=33415) - имеет ещё и режим HEX:
Block=000000/00000. Adres=000061 Type=Hex Edit HD0:HX.SYS Size=00004.
000/ 36 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *62..............*
020/ 00 00 08 F8 00 00 00 00 00 00 00 00 00 00 00 00 *...x............*
040/ 01 00 00 02 00 00 00 00 DE 06 E0 02 40 06 F3 85 *........^.`.@.s.*
060/ 04 00 E0 04 00 02 E0 00 00 00 00 00 00 00 00 00 *..`...`.........*
100/ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 0A *................*
120/ 48 58 20 44 53 4B 2F 54 54 59 20 6D 75 6C 74 69 *HX DSK/TTY multi*
140/ 70 6C 65 78 65 72 20 20 20 76 31 2E 30 20 20 32 *plexer v1.0 2*
160/ 30 31 32 0D 0A 00 00 00 00 00 00 00 00 00 70 FF *012...........p.*
200/ A0 00 DF 0B 34 00 0B 02 C0 11 C0 65 C4 FF 05 01 * ._.4...@.@eD...*
220/ 1F 94 76 FF DF 8B 74 FF FD 80 C8 8B F9 02 A1 00 *..v._.t.}.H.y.!.*
240/ 87 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*
260/ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*
300/ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*
320/ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*
340/ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*
360/ F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *p...............*
Стек : 000000 000000 000000 000000 000000 000000 000000
Макро-11:
Кстати, для получения в эмуляторе текстовой копии экрана терминала - нужно нажать <PrintScreen>
Ну и дела!
Оказывается, последняя версия DESS - имеет ещё и режим HEX:
Я кстати на последнюю системную дискету для УКНЦ именно эту версию залил!
Спасибо. )))
Так как процессор 1801ВМ1 не поддерживает команды EIS и FIS, то при появлении ДВК-2 с процессором 1801ВМ2, который эти команды поддерживает - у пользователей ДВК возникла проблема совместимости, решить которую был призван драйвер EM.SYS, эмулирующий команды EIS и FIS.
; Ныс И.Д.
; Московский
; Инженерно-Физический
; Институт
; каф. 17
; 6 Марта 1985 г. - начало работы.
; 25 марта 1985 г. - конец работы.
; 17 апреля - изменена установка признаков DIV.
; 23 апреля - изменен алгоритм команды MUL.
; 10 мая - прогонка FIS/EIS тестов, коррекция особых ситуаций.
; 2 ноября - переходы по таблице - PIC код, добавлена шапка драйвера
;01 31 окт. 1988 - эмулятор FIS для машины с FPP.
; При работе над эмулятором использовались
; - эмулятор Паскаля
; - подпрограммы Фортран-библиотеки
; - описание процессора M2
; - эмулятор FIS(FPP) из Модулы-2
; Модуль эмулирует наборы команд
; EIS: MUL 070RSS 0.35- 0.5 MS
; DIV O71RSS 0.6
; ASH 072RSS 0.3 - 0.35(вправо)
; - 0.4 (влево)
; ASHC 073RSS 0.3 - 0.5 (вправо)
; - 0.61(влево)
; FIS: FADD 07500R 0.9 - 1.3 MS
; FSUB 07501R - " " -
; FMUL 07502R 1.0 -1.6
; FDIV 07503R 1.6
;
; Времена для процессора с быстродействием
; около 250000 команд регистр - регистр в
; секунду, цикл памяти - 500 наносекунд
; После прерывания по резервной команде, дол-
; жна осуществляться передача управления
; в точку $EMUL.
; Управление передается в точку $ILCOD,
; Если эммулятор не способен обработать преры-
; вание ( вызванное командой, не входящей в
; FIS или EIS)
; Для исключения FIS или EIS набора из эмуля-
; тора, поставьте ";" перед определениями со-
; ответствующих символов в следующих строках
; Эмулятор FIS для процессора с отдельным процессором
; плавающей запятой включен Мухамеджановым Алексеем
; 01 ноября 1988 г., (C) фирма "МИГ" кооп. <1988>
; Команды XOR, SOB включены Яковлевым Михаилом
; 12-декабря-86 г. МИФИ, каф. 25
;
; XOR - 0.3 MS
; SOB - 30-50 MKS (в зависимости от вложенности)
У меня обнаружились исходники двух версий этого драйвера - "общеизвестной" v1.0 (http://zx.pk.ru/attachment.php?attachmentid=33483) и последней - v1.1 (http://zx.pk.ru/attachment.php?attachmentid=33484) ( в последней версии добавлена возможность генерации драйвера с эмуляцией команд FIS при помощи команд FPP ).
При сравнении этих исходников:
EM.SYS v1.0 (фрагмент):
.TITLE EM
; ДРАЙВЕР-ЭМУЛЯТОР FIS/EIS НАБОРА КОМАНД.
; КОМАНДЫ SET EM ON/OFF ИЗ TH ДРАЙВЕРА БЕЛИЦКОГО Е.
.SBTTL MACROS AND DEFINITIONS
.MCALL .DRDEF, .PRINT, .EXIT, .WAIT
.DRDEF EM, 377, 0, 0, 0, 10
; Имя, Код, Тип, Размер, Адрес, Вектор
JSW=44 ; Слово описания
SYSPTR=54 ; Указатель на начало монитора
EIS$=400 ; Бит расширенного набора
CONFIG=370 ; Смещение слова конфигурации
SYSGEN=372 ; Слово параметров
EIS=1 ; Включить EIS
FIS=1 ; Включать FIS
; SM3=1 ; Включить SOB, XOR
.SBTTL INSTALATION VERIFICATION
.ASECT
.=200
NOP
RETURN
; Определение состояния драйвера
FINDRV:
MOV PC,R0
ADD #DEVNAM-.,R0
MOV PC,-(SP)
ADD #AREA-.,(SP)
EMT 342 ; PIC .DSTATUS
BCS O.BAD
MOV AREA+4,R1
O.GOOD:
TST (PC)+
O.BAD: SEC
RETURN
DEVNAM:
.RAD50 /EM /
AREA:
.BLKW 4
EMON: .ASCIZ /?EM-I-Аlready running/
IMSG: .ASCII /?EM-I-V1.0 BY I.NYS, 116-20-42/<15><12>
.ASCII /OPTIONS: /
.IIF DF EIS .ASCII / EIS/
.IIF DF FIS .ASCII / FIS/
.IIF DF SM3 .ASCII / SOB XOR/
.BYTE 0
.EVEN
.IIF GT,<.-400>, .ERROR .-400; INSTALL CODE TO BIG!
EM.SYS v1.1 (фрагмент):
.TITLE EM
; Драйвер-эмулятор FIS/EIS набора команд.
; Команды SET EM ON/OFF из ТН драйвера Белицкого Е.
.SBTTL MACROS AND DEFINITIONS
.MCALL .DRDEF, .PRINT, .EXIT, .WAIT
.DRDEF EM, 377, 0, 0, 0, 10
; ИМЯ, КОД, ТИП, РАЗМЕР, АДРЕС, ВЕКТОР.
JSW=44 ; Слово описания
SYSPTR=54 ; Указатель на начало монитора
EIS$=400 ; Бит расширенного набора
CONFG1=300 ; Смещение 1 слова конфигурации
CONFIG=370 ; Смещение 2 слова конфигурации
SYSGEN=372 ; Слово параметров
;
EIS=1 ; Включить EIS
; SM3=1 ; Включить SOB, XOR
; FPP=1 ; Включить FIS на FPP
.IF NDF FPP
FIS=1 ; Включить FIS
.ENDC
.IF DF FPP
AC0 =R0
AC1 =R1
FPPS =^O1400
FPP$ =^O100
.ENDC
.SBTTL INSTALATION VERIFICATION
.ASECT
.=200
NOP
RETURN
; Определение состояния драйвера
FINDRV:
MOV PC, R0
ADD #DEVNAM-., R0
MOV PC, -(SP)
ADD #AREA-., (SP)
EMT 342 ; PIC .DSTATUS
BCS OO.BAD ; Ошибка .DSTATUS
MOV AREA+4, R1
O.GOOD: CMP (PC)+,(PC)+
OO.BAD: TST (SP)+
O.BAD: SEC
RETURN
L1$: MOV PC, R0
ADD #EMON-., R0
PEX: .PRINT
BR O.GOOD
EMON: .ASCIZ /?EM-I-Already running/
IMSG: .ASCII /EM V1.1 by I.NYS, MX/<15><12>
.ASCII /Options:/
.IIF DF EIS .ASCII / EIS/
.IIF DF FPP .ASCII / FIS(for FPP)/
.IIF DF FIS .ASCII / FIS/
.IIF DF SM3 .ASCII / SOB XOR/
.BYTE 0
.EVEN
.IIF GT,<.-400>, .ERROR .-400; INSTALL CODE TO BIG!
.SBTTL SET OPTION PARAMETR TABLE
.DRSET INFORM, -1, O.INF ; Параметры генерации
.DRSET ON,-1,O.ON ; Включить
.DRSET OFF,-1,O.OFF ; Выключить
.DRSET SYSGEN,NOP,O.SYSG ; SYSGEN
.SBTTL SET OPTION PROCESSING ROUTINES
O.SYSG:
MOV @#SYSPTR,R0 ; Не знаю, будет ли работать с диспетчером
BIT #2,SYSGEN(R0) ; MMG$T
BNE O.BAD
MOVB SYSGEN(R0), 60
RETURN
O.ON:
CALL FINDRV
TST R1 ; Если драйвер уже загружен,
BNE L1$ ; напечатать об этом
MOV @#SYSPTR, R0
BIS #EIS$,CONFIG(R0) ; включить EIS
.IF DF FPP
BIT #FPP$,CONFG1(R0) ; Ошибка, если нет FPP.
BNE 2$
JSR R0,3$
.ASCIZ /?EM-F-Use FPP/
.EVEN
3$: .PRINT
MOV (SP)+,R0;
BR O.BAD
2$:
.ENDC
JSR R1, SETCMD
.ASCIZ /$LOAD EM/
.BYTE 200
.EVEN
RETURN
O.INF:
MOV PC, R0
ADD #IMSG-., R0
BR PEX
O.OFF: CALL FINDRV
TST R1 ; Драйвер загружен?
BEQ N.OFF ; Уже нет
JSR R1, SETCMD
.ASCIZ /$UNLOAD EM/
.ASCIZ /$SET EM OFF/
.EVEN
RETURN
N.OFF:
MOV PC, R0
ADD #NOEIS-., R0
MOV R0, @#10
MUL R0, R0 ; Интересно, есть EIS?
MOV @#4, @#10 ; Вектор
MOV @#6, @#12 ; Статус
BIS #1, @#12 ; С установленным C - разрядом
CLC
RETURN
DEVNAM:
.RAD50 /EM /
AREA:
.BLKW 4
NOEIS: MOV @#SYSPTR, R0
BIC #EIS$,CONFIG(R0) ; Включить EIS
RTI
; Передача команд монитору
SETCMD:
MOV #512, R0
CLR R2
1$: INC R2
MOVB (R1)+, (R0)+
BPL 1$
DEC R2
MOV R2, @#510
BIS #4040, @#JSW
CLR R0
.EXIT
.IIF GT,<.-1000>, .ERROR .-1000; SET CODE TO BIG!
Возникло ощущение, что перенеся в версии 1.1 DEVNAM и AREA за пределы инсталляционного кода - разработчики стали получать постоянную ошибку инсталляции, что заставило изменить завершение инсталлятора с такого:
v1.0
MOV PC,-(SP)
ADD #AREA-.,(SP)
EMT 342 ; PIC .DSTATUS
BCS O.BAD
MOV AREA+4,R1
O.GOOD:
TST (PC)+
O.BAD: SEC
RETURN
DEVNAM:
.RAD50 /EM /
AREA:
.BLKW 4
на такое:
v1.1
MOV PC, -(SP)
ADD #AREA-., (SP)
EMT 342 ; PIC .DSTATUS
BCS OO.BAD ; Ошибка .DSTATUS
MOV AREA+4, R1
O.GOOD: CMP (PC)+,(PC)+
OO.BAD: TST (SP)+
O.BAD: SEC
RETURN
Так как процессор 1801ВМ1 не поддерживает команды EIS и FIS, то при появлении ДВК-2 с процессором 1801ВМ2, который эти команды поддерживает - у пользователей ДВК возникла проблема совместимости, решить которую был призван драйвер EM.SYS, эмулирующий команды EIS и FIS.
Вот такой выясняется момент с этим драйвером на УКНЦ.
Он присутствует на "эталонной" дискете от СЭМЗ - с ситемой - которая поставлялась вместе с УКНЦ. Так вот сообщение при старте - драйвер присутствует (проинсталлирован)
http://savepic.net/2503765.png
Но если посмотреть dir/fu системы - они его словно в последний момент
запихнули и проинсталлировали - ну явно не в первом потоке sys файлов,
http://savepic.net/2493525.jpg
(я молчу что они (например) вообще не удосужились на системную дискету записать ucl из за чего монитор его ищет и всё время ругается,
зато запихнули возможность работы с какой-то базой данных ??? бред)
так вот em.sys воткнули позже остальных, почему? Для перестраховки?
Реально на УКНЦ он нужен или нет?
Версия похоже самая первая.
http://savepic.net/2497621.jpg
:confused_std:
Реально на УКНЦ он нужен или нет?
Абсолютно не нужен. 1801ВМ2 сам исполняет команды EIS и FIS (эти правда эмулируются в системной памяти).
MOV PC, -(SP)
ADD #AREA-., (SP)
EMT 342
Можно стандартными макросами нагляднее выразить:
.ADDR #AREA, -(SP)
.DSTATUS
Абсолютно не нужен.
выходит перестраховались по незнанию??? это вполне вероятно
там инструкция грамотным языком написана к этим дискетам
целая книга (я фотки в теме софта делал выкладывал), правда
там примитивная самая информация.
Версия похоже самая первая."Самая первая" версия у меня есть - но без исходника, да и кривая какая-то, поэтому ну её..
...
P.S.
С EM.SYS связан один интересный момент.
Если при активированном EM.SYS выполнить команду SH CON, то Resorc тихо вылетит после строчки "Extended Instruction Set (EIS)"
.SE EM ON
.SH CON
RT-11SB (S) V05.07 C
Booted from HD1:RT11SB
USR is set NOSWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set ON
EDIT is set K52
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
LSI 11 or PDP 11/03 Processor
56KB of memory
Extended Instruction Set (EIS)
.
у пользователей ДВК возникла проблема
Несовместимость новых программ на первых машинах???
А игры несовместимые есть которые без em.sys на ВМ1 не работали ??? )))
То, что это именно вылет - особенно хорошо заметно при выполнении команды SH ALL.
---------- Post added at 21:07 ---------- Previous post was at 21:05 ----------
Несовместимость новых программ на первых машинах???
А игры несовместимые есть которые без em.sys на ВМ1 не работали ??? )))Думаю, что такое вполне возможно. Я даже подумываю сделать SET EM ON опцией по-умолчанию в эмуляторе ДВК-1, но надо бы как-то решить проблему с вылетом Resorc..
То, что это именно вылет - особенно хорошо заметно при выполнении команды SH ALL.
А что при этом лежит в ячейках 10 и 12? А в RT-11 ранних версий пробовали? Например в 5.00 или 5.01.
тихо вылетит после строчки "Extended Instruction Set (EIS)"
Весьма похоже на интеррупт по незаполненному вектору.
Весьма похоже на интеррупт по незаполненному вектору.
Да, такое ощущение, что не установлены битики в битовой карте защиты векторов, и когда RESORC грузится, то при загрузке очищаются эти ячейки.
А что при этом лежит в ячейках 10 и 12?
.E 10-12
140244 000341
.SE EM ON
.E 10-12
126750 000340
.SH CON
RT-11SB (S) V05.07 C
Booted from HD1:RT11SB
USR is set NOSWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set ON
EDIT is set K52
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
LSI 11 or PDP 11/03 Processor
56KB of memory
Extended Instruction Set (EIS)
.E 10-12
126750 000340
А в RT-11 ранних версий пробовали? Например в 5.00 или 5.01.
Вот готовый (с загрузчиком) HD раздел для ДВК-эмулятора с монитором rt11-5.01 (http://www.fayloobmennik.net/1603079) версии и кучей символьных игр и размера громадного (из этого обзора (http://www.old-games.ru/forum/showpost.php?p=844157&postcount=7)) предлагаю для экспериментов например )))
Да, такое ощущение, что не установлены битики в битовой карте защиты векторов, и когда RESORC грузится, то при загрузке очищаются эти ячейки.RESORC сам подменяет вектора, чтобы тестировать поддержку наборов команд.
RESORC сам подменяет вектора, чтобы тестировать поддержку наборов команд.
Он вроде их не подменяет, а грамотно использует .TRPSET и получает прерывание уже от системы.
---------- Post added at 01:18 ---------- Previous post was at 01:18 ----------
При этом если загрузить SD, то он будет выпадать в него.
---------- Post added at 01:19 ---------- Previous post was at 01:18 ----------
Кстати как раз на этом месте :)
.LO SD
DBG Y01.16 - RT-11 ( SOFT PRO I/D SD: GRH )
.SH CONF
RT-11ZM (S) V05.07
Booted from DU3:RT11ZM
22 bit addressing is on
USR is set NOSWAP
EXIT is set SWAP
KMON is set NOIND
RUN is set VBGEXE
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set KMON
EDIT is set KEX
FORTRAN is set F77XM
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/83 Processor
2048KB of memory
Floating Point Accelerator Unit
Extended Instruction Set (EIS)
T4:(U) 16254
DBG>
Он вроде их не подменяет, а грамотно использует .TRPSET и получает прерывание уже от системыТочно. У нас ведь есть исходники "всех участников процесса" :)))
Что же и где надо изменить, чтобы подружить EM.SYS и RESORC..
RESORC сам подменяет вектора, чтобы тестировать поддержку наборов команд.
О поддержке EIS и FIS RESORC узнает из слова конфигурации по смещению 370 с начала RMON. Вектор он перехватывать не должен, а должен использовать с помощью .TRPSET, ведь есть еще и XM-монитор, там такие дела не приветствуются.
В SD падает на тесте EAE. Возможно и там с него же улетает :)
.TRPSET #AREA,#TRPEAE ;Catch traps to 4 or 10
CLRB @#EAECS0 ;Check first possible location
---------- Post added at 01:30 ---------- Previous post was at 01:27 ----------
То есть попросту драйвер перехватил @#10 и не может потом с ним грамотно разобраться.
В SD падает на тесте EAE. Возможно и там с него же улетает Ага, у меня в эмуляторе есть потоковый дизассемблер, которым можно управлять из исполняемого эмулятором кода.
Значит, запуск дизассемблера нужно вставить в этом месте и собрать новый RESORC.SAV
Сейчас попробую..
hobot, У Вас на первой картинке чуть ниже обведенного что-то там от WD.
Это у Вас "эталонная дискете от СЭМЗ - с ситемой" такая? ;-)
.TRPSET #AREA,#TRPEAE ;Catch traps to 4 or 10
CLRB @#EAECS0 ;Check first possible location
NOP ;Delay an instruction due to T11
BCC 26$ ;If no trap, then Carry clear
25$: .TRPSET #AREA,#TRPEAE ;Catch for second try
CLRB @#EAECS1 ;Check second possible location
NOP ;Delay an instruction due to T11
BCS 113$ ;If trapped, no EAE
26$: PRINT EAE,<Extended Arithmetic Element (EAE)> ;Tell the user
Дизассемблер не запускается, значит этот код не выполняется.
Если установить запуск дизассемблера на метку START, установить быстродействие эмулятора 0.025 MIPS, выполнить команду SH CON, убедиться что был выход в KMON и тут же закрыть эмулятор - потоковый дизассемблер успевает сгенерить больше 5 мегабайт листинга.
Вот его начало:
011676 [000000]: MOV SP, 001046 ; R6 :001000 -> 001046
011702 [000000]: MOV #1978., @#000046 ; 011704:003672 -> 000046
011710 [000000]: EMT 355
141206 [000000]: BIC #15., 2(SP) ; 141210:000017 -> 000776:000000
141214 [000004]: MOV R5, -(SP) ; R5 :135656 -> 000772
141216 [000010]: MOV R4, -(SP) ; R4 :133730 -> 000770
141220 [000010]: MOV 4(SP), R5 ; 000774:011712 -> R5
141224 [000000]: MOV -(R5), R4 ; 011710:104355 -> R4
141226 [000010]: CMPB R4, #251. ; R4 : 355 -> 141230: 373
141232 [000011]: BEQ 141050
141234 [000011]: JSR R3, 151020 ; R3 :075000 -> 000766
151020 [000011]: MOV R2, -(SP) ; R2 :011670 -> 000764
151022 [000001]: MOV R1, -(SP) ; R1 :000016 -> 000762
151024 [000001]: MOV R0, -(SP) ; R0 :030730 -> 000760
151026 [000001]: CALL (R3) ; R7 :151030 -> 000756
141240 [000001]: TST (SP)+ ; 000756:151030
141242 [000010]: CLR R2 ; R2 :011670
141244 [000004]: MOV 136176, R5 ; 136176:137264 -> R5
141250 [000010]: INC 268.(R5) ; 137700:000000
141254 [000000]: MOV SP, R1 ; R6 :000760 -> R1
141256 [000000]: CMPB R4, #252. ; R4 : 355 -> 141260: 374
141262 [000011]: BCS 141372
141372 [000011]: ADD #16., R1 ; 141374:000020 -> R1 :000760
141376 [000000]: MOV R4, R5 ; R4 :104355 -> R5
141400 [000010]: BIC #-16., R4 ; 141402:177760 -> R4 :104355
141404 [000000]: BIC #-241., R5 ; 141406:177417 -> R5 :104355
141410 [000000]: ASR R5 ; R5 :000340
141412 [000000]: ASR R5 ; R5 :000160
141414 [000000]: ASR R5 ; R5 :000070
141416 [000000]: ADD PC, R5 ; R7 :141420 -> R5 :000034
141420 [000010]: MOV -838.(R5), R5 ; 137746:003354 -> R5
141424 [000000]: ROR R5 ; R5 :003354
141426 [000000]: BCC 141436
141436 [000000]: ASR R5 ; R5 :001566
141440 [000000]: BCC 141454
141454 [000000]: ASL R5 ; R5 :000673
141456 [000000]: MOV R5, -(SP) ; R5 :001566 -> 000756
141460 [000000]: MOV 136176, R5 ; 136176:137264 -> R5
141464 [000010]: ASL R4 ; R4 :000015
141466 [000000]: MOV R4, R3 ; R4 :000032 -> R3
141470 [000000]: ASL R3 ; R3 :000032
141472 [000000]: ASL R3 ; R3 :000064
141474 [000000]: ADD R4, R3 ; R4 :000032 -> R3 :000150
141476 [000000]: ADD 24.(R5), R3 ; 137314:135662 -> R3 :000202
141502 [000010]: CLRB @#000052 ; 000052: 000
141506 [000004]: ADD (SP)+, PC ; 000756:001566 -> R7 :141510
143276 [000010]: TST (R4)+ ; 000032:000000
143300 [000004]: ADD PC, R4 ; R7 :143302 -> R4 :000034
143302 [000010]: ADD (R4), PC ; 143336:177372 -> R7 :143304
142676 [000011]: CLRB 199.(R5) ; 137573: 000
142702 [000004]: CALL 145326 ; R7 :142706 -> 000756
145326 [000004]: MOV @#000044, R3 ; 000044:020000 -> R3
145332 [000000]: BIC #-20481., R3 ; 145334:127777 -> R3 :020000
145336 [000004]: BIT #4096., R3 ; 145340:010000 -> R3 :000000
145342 [000004]: BEQ 145350
145350 [000004]: MTPS #224. ; 145352: 340 -> PSW :000004
145354 [000340]: NOP
145356 [000340]: BIC #20480., 260.(R5) ; 145360:050000 -> 137670:050000
145364 [000344]: BIS R3, 260.(R5) ; R3 :000000 -> 137670:000000
145370 [000344]: MTPS #0 ; 145372: 000 -> PSW :000344
145374 [000000]: RETURN ; 000756:142706 -> R7
142706 [000000]: BR 142674
142674 [000000]: BR 142464
142464 [000000]: MOV (SP)+, R0 ; 000760:030730 -> R0
142466 [000000]: MOV (SP)+, R1 ; 000762:000016 -> R1
142470 [000000]: MOV (SP)+, R2 ; 000764:011670 -> R2
142472 [000000]: MOV (SP)+, R3 ; 000766:075000 -> R3
142474 [000000]: MOV 136176, R5 ; 136176:137264 -> R5
142500 [000010]: DEC 268.(R5) ; 137700:000001
142504 [000004]: BNE 142546
142506 [000004]: MOV 270.(R5), R4 ; 137702:000000 -> R4
142512 [000004]: BEQ 142546
142546 [000004]: JMP 153532
153532 [000004]: MOV (SP)+, R4 ; 000770:133730 -> R4
153534 [000010]: MOV (SP)+, R5 ; 000772:135656 -> R5
153536 [000010]: RTI
011712 [000000]: MOV 001046, SP ; 001046:001000 -> R6
011716 [000000]: MOV #988., -(SP) ; 011720:001734 -> 000776
011722 [000000]: MOV #747., -(SP) ; 011724:001353 -> 000774
011726 [000000]: MOV #580., -(SP) ; 011730:001104 -> 000772
011732 [000000]: CLR -(SP) ; 000770:133730
011734 [000004]: EMT 345
141206 [000000]: BIC #15., 2(SP) ; 141210:000017 -> 000766:000004
141214 [000004]: MOV R5, -(SP) ; R5 :135656 -> 000762
141216 [000010]: MOV R4, -(SP) ; R4 :133730 -> 000760
141220 [000010]: MOV 4(SP), R5 ; 000764:011736 -> R5
141224 [000000]: MOV -(R5), R4 ; 011734:104345 -> R4
141226 [000010]: CMPB R4, #251. ; R4 : 345 -> 141230: 373
141232 [000011]: BEQ 141050
141234 [000011]: JSR R3, 151020 ; R3 :075000 -> 000756
151020 [000011]: MOV R2, -(SP) ; R2 :011670 -> 000754
151022 [000001]: MOV R1, -(SP) ; R1 :000016 -> 000752
151024 [000001]: MOV R0, -(SP) ; R0 :030730 -> 000750
151026 [000001]: CALL (R3) ; R7 :151030 -> 000746
141240 [000001]: TST (SP)+ ; 000746:151030
141242 [000010]: CLR R2 ; R2 :011670
141244 [000004]: MOV 136176, R5 ; 136176:137264 -> R5
141250 [000010]: INC 268.(R5) ; 137700:000000
141254 [000000]: MOV SP, R1 ; R6 :000750 -> R1
141256 [000000]: CMPB R4, #252. ; R4 : 345 -> 141260: 374
141262 [000011]: BCS 141372
141372 [000011]: ADD #16., R1 ; 141374:000020 -> R1 :000750
141376 [000000]: MOV R4, R5 ; R4 :104345 -> R5
141400 [000010]: BIC #-16., R4 ; 141402:177760 -> R4 :104345
141404 [000000]: BIC #-241., R5 ; 141406:177417 -> R5 :104345
141410 [000000]: ASR R5 ; R5 :000340
141412 [000000]: ASR R5 ; R5 :000160
141414 [000000]: ASR R5 ; R5 :000070
141416 [000000]: ADD PC, R5 ; R7 :141420 -> R5 :000034
141420 [000010]: MOV -838.(R5), R5 ; 137746:003354 -> R5
141424 [000000]: ROR R5 ; R5 :003354
141426 [000000]: BCC 141436
141436 [000000]: ASR R5 ; R5 :001566
141440 [000000]: BCC 141454
141454 [000000]: ASL R5 ; R5 :000673
141456 [000000]: MOV R5, -(SP) ; R5 :001566 -> 000746
141460 [000000]: MOV 136176, R5 ; 136176:137264 -> R5
141464 [000010]: ASL R4 ; R4 :000005
141466 [000000]: MOV R4, R3 ; R4 :000012 -> R3
141470 [000000]: ASL R3 ; R3 :000012
141472 [000000]: ASL R3 ; R3 :000024
141474 [000000]: ADD R4, R3 ; R4 :000012 -> R3 :000050
141476 [000000]: ADD 24.(R5), R3 ; 137314:135662 -> R3 :000062
141502 [000010]: CLRB @#000052 ; 000052: 000
141506 [000004]: ADD (SP)+, PC ; 000746:001566 -> R7 :141510
143276 [000010]: TST (R4)+ ; 000012:000340
143300 [000000]: ADD PC, R4 ; R7 :143302 -> R4 :000014
143302 [000010]: ADD (R4), PC ; 143316:000416 -> R7 :143304
143722 [000010]: MOV #-32768., R4 ; 143724:100000 -> R4
143726 [000010]: MOV #12., R2 ; 143730:000014 -> R2
143732 [000000]: BR 143762
В принципе можно установить проверку адреса, чтобы в листинг попадали только команды из младших адресов..
Сейчас так сделаю.
---------- Post added at 22:07 ---------- Previous post was at 22:01 ----------
Совсем другое дело - сразу видно, на чём всё заканчивается:
013536 [000000]: BIT #64., R3 ; 013540:000100 -> R3 :105061
013542 [000004]: BNE 013576
013544 [000004]: MOV SP, R2 ; R6 :000772 -> R2
013546 [000000]: MOV #16384., -(R2) ; 013550:040000 -> 000770
013552 [000000]: CLR -(R2) ; 000766:013536
013554 [000004]: MOV #16384., -(R2) ; 013556:040000 -> 000764
013560 [000000]: CLR -(R2) ; 000762:010520
013562 [000004]: 075002 - Команда не опознана.
Trap to 010
Trap to 010 -> PC:126750 PSW:340
000000 [000000]: BIC R0, R0 ; R0 :004430 -> R0 :
000002 [000004]: EMT 350
Patron, скорее всего вылетает при проверке FIS-инструкций, EIS определяется по слову конфигурации.
Patron, скорее всего вылетает при проверке FIS-инструкций, EIS определяется по слову конфигурации.Надо найти это место в исходнике RESORC ( я взял исходники RESORC от RT-11 v05.04 ) и запустить с того места дизассемблер в полном объёме.
Patron, скорее всего вылетает при проверке FIS-инструкций, EIS определяется по слову конфигурации.
Ну собственно на команде FADD R2 и вылетает. И явно видно, что именно из вектора берется 0, а там прописан .EXIT
---------- Post added at 02:14 ---------- Previous post was at 02:13 ----------
Надо найти это место в исходнике RESORC ( я взял исходники RESORC от RT-11 v05.04 ) и запустить с того места дизассемблер в полном объёме.
CLR -(R2) ;
FADD R2 ;Do a floating point add
NOP ;One instruction delay for T11.
Вот это место:
42$: PRINT MICFPU,<Floating Point Microcode>
BR 1$
41$: BIT #C1.FPU,R3 ;Got an FPU?
BEQ 1$ ;Branch if not
PRINT HWFPU,<FP11 Hardware Floating Point Unit>
1$: BIT #C2.EIS,R4 ;How about EIS?
BEQ 2$ ;Branch if no
PRINT EISET,<Extended Instruction Set (EIS)>
2$: BIT #C1.FPU,R3 ;Got an FPU?
BNE 3$ ;Yes. Don't check for FIS
MOV SP,R2 ;Point to stack (but don't destroy)
MOV #40000,-(R2) ;We'll check for FIS by adding .5 to .5
CLR -(R2) ;
MOV #40000,-(R2) ;
CLR -(R2) ;
FADD R2 ;Do a floating point add
NOP ;One instruction delay for T11.
BCS 3$ ;If C set, no FIS
PRINT FIS,<Floating Instruction Set (FIS)> ;Tell the user
Ну собственно на команде FADD R2 и вылетает. И явно видно, что именно из вектора берется 0, а там прописан .EXIT
Хотя должна брать 126750 и 340.
Хотя должна брать 126750 и 340.Она и берёт. Там всё не так просто.
Полная картина - в приложении.
Она и берёт. Там всё не так просто.
Полная картина - в приложении.
Похоже где-то в стеке что-то забывается и не туда делается RETURN, а там попадается циферка 2 которая срабатывает как RTI.
Детально не смотрел.
Пардон, там есть ещё один Trap to 10 - гораздо ближе к "концу":
Trap to 010
Trap to 010 -> PC:126750 PSW:340
126750 [000340]: MOV #6, -(SP) ; 126752:000006 -> 000764
126754 [000340]: ADD SP, (SP) ; R6 :000764 -> 000764:000006
126756 [000340]: MOV R5, -(SP) ; R5 :135656 -> 000762
126760 [000350]: MOV R4, -(SP) ; R4 :010520 -> 000760
126762 [000340]: MOV 6(SP), R5 ; 000766:013564 -> R5
126766 [000340]: MOV -(R5), R4 ; 013562:075002 -> R4
126770 [000340]: MOV R3, -(SP) ; R3 :105061 -> 000756
126772 [000350]: MOV R2, -(SP) ; R2 :000762 -> 000754
126774 [000340]: MOV R1, -(SP) ; R1 :000003 -> 000752
126776 [000340]: MOV R0, -(SP) ; R0 :004430 -> 000750
127000 [000340]: MOV R4, R0 ; R4 :075002 -> R0
127002 [000340]: MOV R0, R1 ; R0 :075002 -> R1
127004 [000340]: CMP R0, #31232. ; R0 :075002 -> 127006:075000
127010 [000340]: BCC 127124
127124 [000340]: CMP R0, #31264. ; R0 :075002 -> 127126:075040
127130 [000351]: BCS 127136
127136 [000351]: BIC #-25., R0 ; 127140:177747 -> R0 :075002
127142 [000345]: ASR R0 ; R0 :000000
127144 [000344]: ASR R0 ; R0 :000000
127146 [000344]: BIC #-8., R1 ; 127150:177770 -> R1 :075002
127152 [000340]: ASL R1 ; R1 :000002
127154 [000340]: ADD SP, R1 ; R6 :000750 -> R1 :000004
127156 [000340]: MOV R1, -(SP) ; R1 :000754 -> 000746
127160 [000340]: MOV (R1), R1 ; 000754:000762 -> R1
127162 [000340]: MOV (R1)+, R2 ; 000762:135656 -> R2
127164 [000350]: MOV (R1)+, R3 ; 000764:000772 -> R3
127166 [000340]: MOV (R1)+, R4 ; 000766:013564 -> R4
127170 [000340]: MOV (R1)+, R5 ; 000770:000004 -> R5
127172 [000340]: MOV R1, -(SP) ; R1 :000772 -> 000744
127174 [000340]: ADD PC, R0 ; R7 :127176 -> R0 :000000
127176 [000350]: ADD #6, R0 ; 127200:000006 -> R0 :127176
127202 [000350]: ADD (R0), PC ; 127204:000412 -> R7 :127204
127616 [000350]: MOV R2, R0 ; R2 :135656 -> R0
127620 [000350]: BNE 127630
127630 [000350]: MOV R4, R1 ; R4 :013564 -> R1
127632 [000340]: BEQ 130154
127634 [000340]: BIC #-128., R2 ; 127636:177600 -> R2 :135656
127640 [000340]: BIS #128., R2 ; 127642:000200 -> R2 :000056
127644 [000340]: TST R0 ; R0 :135656
127646 [000350]: BPL 127656
127650 [000350]: NEG R3 ; R3 :000772
127652 [000351]: ADC R2 ; R2 :000256
127654 [000340]: NEG R2 ; R2 :000257
127656 [000351]: BIC #-128., R4 ; 127660:177600 -> R4 :013564
127662 [000341]: BIS #128., R4 ; 127664:000200 -> R4 :000164
127666 [000341]: TST R1 ; R1 :013564
127670 [000340]: BPL 127700
127700 [000340]: BIC #-32641., R0 ; 127702:100177 -> R0 :135656
127704 [000340]: BIC #-32641., R1 ; 127706:100177 -> R1 :013564
127710 [000340]: CLR -(SP) ; 000742:000000
127712 [000344]: MOV R0, -(SP) ; R0 :035600 -> 000740
127714 [000340]: SUB R1, R0 ; R1 :013400 -> R0 :035600
127716 [000340]: BHI 127746
127746 [000340]: CLR R1 ; R1 :013400
127750 [000344]: CMP R0, #3072. ; R0 :022200 -> 127752:006000
127754 [000340]: BLE 127764
127756 [000340]: CLR R4 ; R4 :000364
127760 [000344]: CLR R5 ; R5 :000004
127762 [000344]: BR 130000
130000 [000344]: ADD R5, R3 ; R5 :000000 -> R3 :177006
130002 [000350]: ADC R2 ; R2 :177521
130004 [000350]: ADD R4, R2 ; R4 :000000 -> R2 :177521
130006 [000350]: BPL 130030
130010 [000350]: NEG R1 ; R1 :000000
130012 [000344]: ADC R3 ; R3 :177006
130014 [000350]: ADC R2 ; R2 :177521
130016 [000350]: NEG R3 ; R3 :177006
130020 [000341]: ADC R2 ; R2 :177521
130022 [000350]: NEG R2 ; R2 :177522
130024 [000341]: INC 2(SP) ; 000742:000000
130030 [000341]: MOV R3, R4 ; R3 :000772 -> R4
130032 [000341]: BIS R1, R4 ; R1 :000000 -> R4 :000772
130034 [000341]: BIS R2, R4 ; R2 :000256 -> R4 :000772
130036 [000341]: BNE 130044
130044 [000341]: CMP R2, #256. ; R2 :000256 -> 130046:000400
130050 [000351]: BCS 130066
130066 [000351]: TSTB R2 ; R2 : 256
130070 [000350]: BMI 130106
130106 [000350]: ASL R1 ; R1 :000000
130110 [000344]: ADC R3 ; R3 :000772
130112 [000340]: ADCB R2 ; R2 : 256
130114 [000350]: BCC 130122
130122 [000350]: MOV (SP)+, R4 ; 000740:035600 -> R4
130124 [000340]: BPL 130136
130136 [000340]: ROR (SP)+ ; 000742:000001
130140 [000347]: BCC 130146
130142 [000347]: BIS #-32768., R2 ; 130144:100000 -> R2 :000256
130146 [000351]: BIC #128., R2 ; 130150:000200 -> R2 :100256
130152 [000351]: BIS R4, R2 ; R4 :035600 -> R2 :100056
130154 [000351]: CLR R5 ; R5 :000000
130156 [000344]: TST R2 ; R2 :135656
130160 [000350]: BNE 130166
130166 [000350]: BPL 130174
130170 [000350]: BIS #8., R5 ; 130172:000010 -> R5 :000000
130174 [000340]: MOV (SP)+, R1 ; 000744:000772 -> R1
130176 [000340]: MOV (SP)+, R0 ; 000746:000754 -> R0
130200 [000340]: MOV R3, -(R1) ; R3 :000772 -> 000770
130202 [000340]: MOV R2, -(R1) ; R2 :135656 -> 000766
130204 [000350]: MOV R1, (R0) ; R1 :000766 -> 000754
130206 [000340]: SUB SP, R0 ; R6 :000750 -> R0 :000754
130210 [000340]: CMP R0, #12. ; R0 :000004 -> 130212:000014
130214 [000351]: BCS 130226
130226 [000351]: CALL 127032 ; R7 :130232 -> 000746
127032 [000351]: BIC #15., 18.(SP) ; 127034:000017 -> 000770:000772
127040 [000341]: BIS R5, 18.(SP) ; R5 :000010 -> 000770:000760
127044 [000341]: MOV (SP)+, 12.(SP) ; 000746:130232 -> 000762
127050 [000351]: MOV (SP)+, R0 ; 000750:004430 -> R0
127052 [000341]: MOV (SP)+, R1 ; 000752:000003 -> R1
127054 [000341]: MOV (SP)+, R2 ; 000754:000766 -> R2
127056 [000341]: MOV (SP)+, R3 ; 000756:105061 -> R3
127060 [000351]: MOV (SP)+, R4 ; 000760:010520 -> R4
127062 [000341]: MOV (SP)+, R5 ; 000762:135656 -> R5
127064 [000351]: RETURN ; 000764:130232 -> R7
130232 [000351]: RTI
000000 [000000]: BIC R0, R0 ; R0 :004430 -> R0 :004430
000002 [000004]: EMT 350
---------- Post added at 22:50 ---------- Previous post was at 22:33 ----------
Похоже где-то в стеке что-то забывается и не туда делается RETURN, а там попадается циферка 2 которая срабатывает как RTI.Внимательно проверил - драйвер отрабатывает штатно, но при выполнении завершающей команды RTI - в стеке оказывается ноль.
Сейчас добавлю в листинг дизассемблера показ значения SP и содержимого ячейки с адресом возврата при каждом шаге.
PC[013562] PSW[004] SP[000772] 0766[000000] : 075002 - Команда не опознана.
Trap to 010
Trap to 010 -> PC:126750 PSW:340
PC[126750] PSW[340] SP[000766] 0766[013564] : MOV #6, -(SP) ; 126752:000006 -> 000764
PC[126754] PSW[340] SP[000764] 0766[013564] : ADD SP, (SP) ; R6 :000764 -> 000764:000006
PC[126756] PSW[340] SP[000764] 0766[013564] : MOV R5, -(SP) ; R5 :135656 -> 000762
PC[126760] PSW[350] SP[000762] 0766[013564] : MOV R4, -(SP) ; R4 :010520 -> 000760
PC[126762] PSW[340] SP[000760] 0766[013564] : MOV 6(SP), R5 ; 000766:013564 -> R5
PC[126766] PSW[340] SP[000760] 0766[013564] : MOV -(R5), R4 ; 013562:075002 -> R4
PC[126770] PSW[340] SP[000760] 0766[013564] : MOV R3, -(SP) ; R3 :105061 -> 000756
PC[126772] PSW[350] SP[000756] 0766[013564] : MOV R2, -(SP) ; R2 :000762 -> 000754
PC[126774] PSW[340] SP[000754] 0766[013564] : MOV R1, -(SP) ; R1 :000003 -> 000752
PC[126776] PSW[340] SP[000752] 0766[013564] : MOV R0, -(SP) ; R0 :004430 -> 000750
PC[127000] PSW[340] SP[000750] 0766[013564] : MOV R4, R0 ; R4 :075002 -> R0
PC[127002] PSW[340] SP[000750] 0766[013564] : MOV R0, R1 ; R0 :075002 -> R1
PC[127004] PSW[340] SP[000750] 0766[013564] : CMP R0, #31232. ; R0 :075002 -> 127006:075000
PC[127010] PSW[340] SP[000750] 0766[013564] : BCC 127124
PC[127124] PSW[340] SP[000750] 0766[013564] : CMP R0, #31264. ; R0 :075002 -> 127126:075040
..... Сut ......
PC[130114] PSW[350] SP[000740] 0766[013564] : BCC 130122
PC[130122] PSW[350] SP[000740] 0766[013564] : MOV (SP)+, R4 ; 000740:035600 -> R4
PC[130124] PSW[340] SP[000742] 0766[013564] : BPL 130136
PC[130136] PSW[340] SP[000742] 0766[013564] : ROR (SP)+ ; 000742:000001
PC[130140] PSW[347] SP[000744] 0766[013564] : BCC 130146
PC[130142] PSW[347] SP[000744] 0766[013564] : BIS #-32768., R2 ; 130144:100000 -> R2 :000256
PC[130146] PSW[351] SP[000744] 0766[013564] : BIC #128., R2 ; 130150:000200 -> R2 :100256
PC[130152] PSW[351] SP[000744] 0766[013564] : BIS R4, R2 ; R4 :035600 -> R2 :100056
PC[130154] PSW[351] SP[000744] 0766[013564] : CLR R5 ; R5 :000000
PC[130156] PSW[344] SP[000744] 0766[013564] : TST R2 ; R2 :135656
PC[130160] PSW[350] SP[000744] 0766[013564] : BNE 130166
PC[130166] PSW[350] SP[000744] 0766[013564] : BPL 130174
PC[130170] PSW[350] SP[000744] 0766[013564] : BIS #8., R5 ; 130172:000010 -> R5 :000000
PC[130174] PSW[340] SP[000744] 0766[013564] : MOV (SP)+, R1 ; 000744:000772 -> R1
PC[130176] PSW[340] SP[000746] 0766[013564] : MOV (SP)+, R0 ; 000746:000754 -> R0
PC[130200] PSW[340] SP[000750] 0766[013564] : MOV R3, -(R1) ; R3 :000772 -> 000770
PC[130202] PSW[340] SP[000750] 0766[013564] : MOV R2, -(R1) ; R2 :135656 -> 000766
-------- Вот это место --------
PC[130204] PSW[350] SP[000750] 0766[135656] : MOV R1, (R0) ; R1 :000766 -> 000754
PC[130206] PSW[340] SP[000750] 0766[135656] : SUB SP, R0 ; R6 :000750 -> R0 :000754
PC[130210] PSW[340] SP[000750] 0766[135656] : CMP R0, #12. ; R0 :000004 -> 130212:000014
PC[130214] PSW[351] SP[000750] 0766[135656] : BCS 130226
PC[130226] PSW[351] SP[000750] 0766[135656] : CALL 127032 ; R7 :130232 -> 000746
PC[127032] PSW[351] SP[000746] 0766[135656] : BIC #15., 18.(SP) ; 127034:000017 -> 000770:000772
PC[127040] PSW[341] SP[000746] 0766[135656] : BIS R5, 18.(SP) ; R5 :000010 -> 000770:000760
PC[127044] PSW[341] SP[000746] 0766[135656] : MOV (SP)+, 12.(SP) ; 000746:130232 -> 000762
PC[127050] PSW[351] SP[000750] 0766[135656] : MOV (SP)+, R0 ; 000750:004430 -> R0
PC[127052] PSW[341] SP[000752] 0766[135656] : MOV (SP)+, R1 ; 000752:000003 -> R1
PC[127054] PSW[341] SP[000754] 0766[135656] : MOV (SP)+, R2 ; 000754:000766 -> R2
PC[127056] PSW[341] SP[000756] 0766[135656] : MOV (SP)+, R3 ; 000756:105061 -> R3
PC[127060] PSW[351] SP[000760] 0766[135656] : MOV (SP)+, R4 ; 000760:010520 -> R4
PC[127062] PSW[341] SP[000762] 0766[135656] : MOV (SP)+, R5 ; 000762:135656 -> R5
PC[127064] PSW[351] SP[000764] 0766[135656] : RETURN ; 000764:130232 -> R7
PC[130232] PSW[351] SP[000766] 0766[135656] : RTI
PC[000000] PSW[000] SP[000766] 0766[135656] : BIC R0, R0 ; R0 :004430 -> R0 :004430
PC[000002] PSW[004] SP[000766] 0766[135656] : EMT 350
Похоже, что ошибка в алгоритме эмуляции FIS.
Адрес возврата в стеке затирается.
Правда, содержимое листинга поcле RTI я не понял..
Похоже, что ошибка в алгоритме эмуляции FIS.
Адрес возврата в стеке затирается.
Правда, содержимое листинга поcле RTI я не понял..
А почему в возвращаемом PSW, судя по листингу, старший байт не равен нулю. В ячейке 770 вроде значение 760.
---------- Post added at 00:14 ---------- Previous post was at 00:12 ----------
Увидел:
PC[130174] PSW[340] SP[000744] 0766[013564] : MOV (SP)+, R1 ; 000744:000772 -> R1
PC[130176] PSW[340] SP[000746] 0766[013564] : MOV (SP)+, R0 ; 000746:000754 -> R0
PC[130200] PSW[340] SP[000750] 0766[013564] : MOV R3, -(R1) ; R3 :000772 -> 000770
PC[130202] PSW[340] SP[000750] 0766[013564] : MOV R2, -(R1) ; R2 :135656 -> 000766
---------- Post added at 00:16 ---------- Previous post was at 00:14 ----------
Кстати эмуляцию FIS можно сравнить с тем, как она делается на УКНЦ, листинги доступны.
Похоже, что адрес возврата "перекладывается" при входе в драйвер в другое место..
Ведь на адрес 135656 управление не передаётся, хотя именно это значение оказывается вместо адреса возврата.
Такое вполне возможно - нужно разбираться дальше.
И дизассемблер, похоже, в конце подвирает с выдачей значения SP.
---------- Post added at 23:21 ---------- Previous post was at 23:18 ----------
А почему в возвращаемом PSW, судя по листингу, старший байт не равен нулю. В ячейке 770 вроде значение 760Драйвер заводит себе в стеке блок временных переменных, перекладывая куда-то исходные значения PC и PSW вектора возврата.
Меня смущает, что дизассемблер не изменяет SP после RTI.
Там явно какой-то глюк..
Меня смущает, что дизассемблер не изменяет SP после RTI.
Там явно какой-то глюк..
А это не прерывание которое мгновенно возникает после RTI (с выборкой 0 из вектора)?
Понял из-за чего это происходит. Взгляните на это кусок кода:
013544 [000004]: MOV SP, R2 ; R6 :000772 -> R2
013546 [000000]: MOV #16384., -(R2) ; 013550:040000 -> 000770
013552 [000000]: CLR -(R2) ; 000766:013536
013554 [000004]: MOV #16384., -(R2) ; 013556:040000 -> 000764
013560 [000000]: CLR -(R2) ; 000762:010520
013562 [000004]: 075002 - Команда не опознана.
Сами два аргумента ложаться в стек, но не по SP, а по R2. Естественно возникающий TRAP10 ложит туда прерванный PC и PSW. Но п/п исполнения FIS естественно его благополучно затирает. Сами команды FIS стек не используют, а вот здесь получается вот так не очень хорошо.
А это не прерывание которое мгновенно возникает после RTI (с выборкой 0 из вектора)?Типа, по адресу возврата сидит что-то типа IOT на пустой вектор.
---------- Post added at 23:31 ---------- Previous post was at 23:30 ----------
Нет, программное прерывание точно попало бы в дизассемблер..
Типа, по адресу возврата сидит что-то типа IOT на пустой вектор.
---------- Post added at 23:31 ---------- Previous post was at 23:30 ----------
Нет, программное прерывание точно попало бы в дизассемблер..
А аппаратное? К примеру которое готово к исполнение, но ждет пока приоритет CPU упадет?
Вроде, все аппаратные прерывания должны в дизассемблере "отмечаться", но в целом - это единственное объяснение, как после RTI может не измениться SP.
Вроде, все аппаратные прерывания должны в диpссемблере "отмечаться", но в целом - это единственное объяснение, как после RTI может не измениться SP.
К примеру такой вариант (просто с потолка) - при возврате из эмулятора в PSW выставился бит T, в 14 естественно 0 -> .EXIT/HRESET
Продублирую еще раз, а то оказалось в конце предыдущей страницы.
Понял из-за чего это происходит. Взгляните на это кусок кода:
013544 [000004]: MOV SP, R2 ; R6 :000772 -> R2
013546 [000000]: MOV #16384., -(R2) ; 013550:040000 -> 000770
013552 [000000]: CLR -(R2) ; 000766:013536
013554 [000004]: MOV #16384., -(R2) ; 013556:040000 -> 000764
013560 [000000]: CLR -(R2) ; 000762:010520
013562 [000004]: 075002 - Команда не опознана.
Сами два аргумента ложаться в стек, но не по SP, а по R2. Естественно возникающий TRAP10 ложит туда прерванный PC и PSW. Но п/п исполнения FIS естественно его благополучно затирает. Сами команды FIS стек не используют, а вот здесь получается вот так не очень хорошо.
Продублирую еще раз, а то оказалось в конце предыдущей страницы.
Понял из-за чего это происходит. Взгляните на это кусок кода:
013544 [000004]: MOV SP, R2 ; R6 :000772 -> R2
013546 [000000]: MOV #16384., -(R2) ; 013550:040000 -> 000770
013552 [000000]: CLR -(R2) ; 000766:013536
013554 [000004]: MOV #16384., -(R2) ; 013556:040000 -> 000764
013560 [000000]: CLR -(R2) ; 000762:010520
013562 [000004]: 075002 - Команда не опознана.
Сами два аргумента ложаться в стек, но не по SP, а по R2. Естественно возникающий TRAP10 ложит туда прерванный PC и PSW. Но п/п исполнения FIS естественно его благополучно затирает. Сами команды FIS стек не используют, а вот здесь получается вот так не очень хорошо.
Это получается то для чего оно и предназначено - чтобы проверить что трап был. Тут не должно проблем быть - просто он все-равно должен бы обнаружить отсутствие FIS несмотря на эмулятор.
---------- Post added at 03:40 ---------- Previous post was at 03:36 ----------
А нет. Все точно - эмулятор-то потрет именно стек :)
Это получается то для чего оно и предназначено - чтобы проверить что трап был. Тут не должно проблем быть - просто он все-равно должен бы обнаружить отсутствие FIS несмотря на эмулятор.
А вот проблемы и есть. Объясняю. Команды FIS в качестве указателя используют адрес двух смежных аргументов. Соответственно в стек по R2 ложаться аргументы A и B. Далее команда FIS вызывает прерывание и аргумент B затирается. Но ничего об этом не зная, программа эмуляции складывает два аргумента A и B и ложит результат на место аргумента B, где вообще то находится адрес возврата и затирает его. Вот что-то так.
А вот проблемы и есть. Объясняю. Команды FIS в качестве указателя используют адрес двух смежных аргументов. Соответственно в стек по R2 ложаться аргументы A и B. Далее команда FIS вызывает прерывание и аргумент B затирается. Но ничего об этом не зная, программа эмуляции складывает два аргумента A и B и ложит результат на место аргумента B, где вообще то находится адрес возврата и затирает его. Вот что так.
Уже написал выше. Правильная работа эмулятора честно трет стек :)
---------- Post added at 03:41 ---------- Previous post was at 03:41 ----------
Нужно проверять в нем такой случай и отпускать на самотек.
Нужно проверять в нем такой случай и отпускать на самотек.
Ну что поделать, не могли авторы предусмотреть такой случай. И главное ничего не поделаешь.
Ну что поделать, не могли авторы предусмотреть такой случай. И главное ничего не поделаешь.
Ну так теперь выяснили - можно поправить драйвер :)
Сэмулировать наличие FIS тут уже не получится - остается сделать вид, что его нету (как оно и есть на самом деле).
Кто-то у нас явно гений..
PC[127032] PSW[351] SP[000746] 0766[135656] : BIC #15., 18.(SP) ; 127034:000017 -> 000770:000772
PC[127040] PSW[341] SP[000746] 0766[135656] : BIS R5, 18.(SP) ; R5 :000010 -> 000770:000760
PC[127044] PSW[341] SP[000746] 0766[135656] : MOV (SP)+, 12.(SP) ; 000746:130232 -> 000762
PC[127050] PSW[351] SP[000750] 0766[135656] : MOV (SP)+, R0 ; 000750:004430 -> R0
PC[127052] PSW[341] SP[000752] 0766[135656] : MOV (SP)+, R1 ; 000752:000003 -> R1
PC[127054] PSW[341] SP[000754] 0766[135656] : MOV (SP)+, R2 ; 000754:000766 -> R2
PC[127056] PSW[341] SP[000756] 0766[135656] : MOV (SP)+, R3 ; 000756:105061 -> R3
PC[127060] PSW[351] SP[000760] 0766[135656] : MOV (SP)+, R4 ; 000760:010520 -> R4
PC[127062] PSW[341] SP[000762] 0766[135656] : MOV (SP)+, R5 ; 000762:135656 -> R5
PC[127064] PSW[351] SP[000764] 0766[135656] : RETURN ; 000764:130232 -> R7
PC[130232] PSW[351] SP[000766] 0766[135656] : RTI
#############
TrapTo(014)
#############
PC[000000] PSW[000] SP[000766] 0766[135656] : BIC R0, R0 ; R0 :004430 -> R0 :004430
Кто-то у нас явно гений..
PC[127032] PSW[351] SP[000746] 0766[135656] : BIC #15., 18.(SP) ; 127034:000017 -> 000770:000772
PC[127040] PSW[341] SP[000746] 0766[135656] : BIS R5, 18.(SP) ; R5 :000010 -> 000770:000760
PC[127044] PSW[341] SP[000746] 0766[135656] : MOV (SP)+, 12.(SP) ; 000746:130232 -> 000762
PC[127050] PSW[351] SP[000750] 0766[135656] : MOV (SP)+, R0 ; 000750:004430 -> R0
PC[127052] PSW[341] SP[000752] 0766[135656] : MOV (SP)+, R1 ; 000752:000003 -> R1
PC[127054] PSW[341] SP[000754] 0766[135656] : MOV (SP)+, R2 ; 000754:000766 -> R2
PC[127056] PSW[341] SP[000756] 0766[135656] : MOV (SP)+, R3 ; 000756:105061 -> R3
PC[127060] PSW[351] SP[000760] 0766[135656] : MOV (SP)+, R4 ; 000760:010520 -> R4
PC[127062] PSW[341] SP[000762] 0766[135656] : MOV (SP)+, R5 ; 000762:135656 -> R5
PC[127064] PSW[351] SP[000764] 0766[135656] : RETURN ; 000764:130232 -> R7
PC[130232] PSW[351] SP[000766] 0766[135656] : RTI
#############
TrapTo(014)
#############
PC[000000] PSW[000] SP[000766] 0766[135656] : BIC R0, R0 ; R0 :004430 -> R0 :004430
Ну это побочное явление. Суть в том, что эмулятор честно вычисляет результат, но по условиям вызова, кладется он на место адреса возврата и PSW (а за счет порчи PSW и получается trap 14).
---------- Post added at 03:47 ---------- Previous post was at 03:46 ----------
То есть надо в эмуляторе проверять что регистр конфликтует со стеком и в случае такого плевать на эмуляцию.
эмулятор честно вычисляет результат, но по условиям вызова, кладется он на место адреса возврата и PSW (а за счет порчи PSW и получается trap 14А в чём разница, когда команду FADD эмулирует не EM.SYS, а процессор или подпрограмма из ПЗУ ВМ2 ?
А в чём разница, когда команду FADD эмулирует не EM.SYS, а процессор или подпрограмма из ПЗУ ВМ2 ?
В том, что в ВМ2 происходит прерывание режима HALT которое не портит стек.
---------- Post added at 03:52 ---------- Previous post was at 03:52 ----------
Ну а в случае с процессором прерывания и вовсе не происходит.
---------- Post added at 03:55 ---------- Previous post was at 03:52 ----------
И кстати, вспоминается мне, что метод попадания в HALT из USER как раз основан на использовании FIS :)
А в чём разница, когда команду FADD эмулирует не EM.SYS, а процессор или подпрограмма из ПЗУ ВМ2 ?
В 1801ВМ2 есть HALT-режим и регистры копий CPC (копия счетчика команд) и CPSW (копия PSW). При исполнении инструкции FIS происходит переход в HALT-режим, который имеет свое адресное пространство, а в CPC и CPSW остается прерванный адрес USER-режима. Никакой стек не используется. А уже программа эмуляции с помощью спецкоманд процессора можем считывать данные из адресного пространства USER-режима и туда же записывать результат. Затем происходит переход в USER-режим. Вот как-то так. Есть же листинги ПЗУ УКНЦ, там все можно посмотреть. Листинги с комментариями.
---------- Post added at 00:58 ---------- Previous post was at 00:55 ----------
И кстати, вспоминается мне, что метод попадания в HALT из USER как раз основан на использовании FIS :)
Да, так можно попасть только на МС 1201.02 с ПЗУ 1801РЕ2-055.
С УКНЦ все проще - системное ОЗУ доступно через регистры 176640/176642. Занес свою программу и с помощью RTI перешел в HALT-режим.
В том, что в ВМ2 происходит прерывание режима HALT которое не портит стек
Ну а в случае с процессором прерывания и вовсе не происходит.Странно, что авторы драйвера об этом не подумали..
Забавно, что RESORC начинает свои баловства со стеком, даже не запретив прерывания..
Похоже, стоит переписать и драйвер, и RESORC :)
Странно, что авторы драйвера об этом не подумали..
Забавно, что RESORC начинает свои баловства со стеком, даже не запретив прерывания..
Похоже, стоит переписать и драйвер, и RESORC :)
Ну случай довольно редкий. RESORC лучше пусть живет. Поправь слегка драйвер и будет RESORC говорить, что FIS нету - да и хрен с ним (ц) :)
Странно, что авторы драйвера об этом не подумали..
Забавно, что RESORC начинает свои баловства со стеком, даже не запретив прерывания..
Похоже, стоит переписать и драйвер, и RESORC :)
Я думаю авторы всех тонкостей ВМ2 и не знали. Может они думали, что инструкции FIS выполняются на микропрограммном уровне. Ну о таком баловстве вряд ли додумаешься, все рассчитывают, что аргументы находятся где-то в области программы, ну или в крайнем случае в стеке, но уже с адресацией по SP.
Забавно, что RESORC начинает свои баловства со стеком, даже не запретив прерывания..
А прерывания как раз запрещены в этом месте вроде.
---------- Post added at 04:07 ---------- Previous post was at 04:04 ----------
Хотя может просто расчет на реальную аппаратуру где за такое время точно ничего не будет :)
А толку запрещать прерывания. Результат ведь не используется. Просто при сложении будут другие аргументы. Максимум на что можно напороться - на прерывание по вектору 244.
Максимум на что можно напороться - на прерывание по вектору 244.
Для FADD по идее такого случая нету.
А прерывания как раз запрещены в этом месте вродеТут дизассемблер вряд ли врёт..
Но дело уже сделано:
.SE EM ON
.SH CON
RT-11SB (S) V05.07 C
Booted from HD1:RT11SB
USR is set NOSWAP
EXIT is set SWAP
KMON is set NOIND
TT is set NOQUIET
ERROR is set ERROR
SL is set ON
EDIT is set K52
KMON nesting depth is 3
Global .SCCA flag is disabled
LSI 11 or PDP 11/03 Processor
56KB of memory
Extended Instruction Set (EIS)
Floating Instruction Set (FIS)
50 Cycle System Clock
Device I/O time-out support
Global .SCCA support
.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot