Вход

Просмотр полной версии : Контроллер псевдодиска на SD-карте для ДВК/ УКНЦ / PDP-11 original + Ethernet



Страницы : [1] 2 3

AFZ
23.09.2017, 16:52
Пока Ярослав сочиняет свой вариант контроллера псевдодиска на SD-картах для УКНЦ, я неспешно размышляю на ту же тему для ДВК. С PSoC я не знаком и пока в моих ближайших планах не предусмотрено изучения входящей в него ПЛИС. Но вот с STM32 я, худо-бедно, разобрался и сейчас планирую попробовать реализовать подобный контроллер на вот такой (https://ru.aliexpress.com/item/STM32F103VET6-ARM-STM32-Minimum-System-Development-Board-Cortex-m3-NEW/32671989602.html?spm=a2g0v.search0104.3.182.I5Ua59&ws_ab_test=searchweb0_0,searchweb201602_2_10152_10 065_10151_10068_10344_10342_10343_10340_10341_1030 7_10137_10060_10155_10154_10056_10055_10054_547002 0_10059_10532_100031_10099_5460020_10338_10339_101 03_10102_10052_10053_10142_10107_10050_10051_10170 _5380020_10326_10084_10083_5370020_10080_10082_100 81_10110_10111_10112_10113_10114_143_10312_10313_1 0314_10078_10079_10073_10125-10051,searchweb201603_19,ppcSwitch_5&btsid=ea4292d6-9c2c-49c9-b0d2-bc9a7b0c6687&algo_expid=32ec08b2-40d7-4d17-be1e-520cad914e2c-25&algo_pvid=32ec08b2-40d7-4d17-be1e-520cad914e2c) китайской пробной плате.

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

100-ногий STM32F103VET6, стоящий на той платке имеет на борту полноценный контроллер SDIO, к которому напрямую можно прицепить ту самую (микро)SD-карточку. 72-МГц процессора вполне хватает, чтобы вести обмен с МПИ/Q-Bus через GPIO в синхронном программном режиме, единственное, чего не хватает - это возможности просигналить "Думаю, прошу не мешать" (дальше буду писать ДПнМ). :)

Пока общаемся по МПИ, все выходит ровно, а как полезешь к флешке, а это процедура долгая, возможность поймать фронт СИА теряется и все, если ЦП полезет в это время к контроллеру, будет Trap to 4.

Я вижу несколько решений этой проблемы, но все они что-то усложняют.

(1) Можно просто объявить это фичей. Мол, от выдачи команды GO и до прерывания регистры контроллера недоступны, будет Trap to 4. Это усложнит программирование со стороны ЦП, зато склепать такой агрегат из готовой китайской платы с микроконтроллером, и нескольких шинных драйверов, сможет даже неспециалист в электронике - лишь бы паять умел!

(2) Можно сделать узел ДПнМ на рассыпухе. К оборудованию для (1) добавляются одна 531ЛА19, пара 1533ЛН1, какой-то 1533-й регистр, может, одна-две ЛА3, одна "силовая" 8-ножка, вроде 155ЛА18 или ЛЕ2 (чтобы отдать в МПИ СИП и бит Д15, тот самый, ДПнМ) и, вроде-бы, все.

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

(4) Сваять этот узел на ПЛИС.

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

Почему, спросите, 100-ногий F103VET6 ? Все просто: 100 ног нужно для того, чтобы гарантировано нашелся полностью свободный 16-разрядный порт GPIO с Full 5V-tolerance для подключения к ДА15-00 МПИ, чтобы не манипулировать битами, собирая принятое с МПИ из разных GPIO. Среди 64-ногих такого я не нашел. Ну, а именно F103VET6 - потому, что и платка с ним тогда оказалась на Али самой дешевой из платок со 100-ногими STM32, $11 с копейками (сейчас и еще дешевле), и сам чип F103VET6 в партиях по 10 шт обходится в $2 с копейками, на Али куча предложений. Ну, и параметры очень приличные - 64К оперативки, 512К флеши для программы, 72 МГц...

Теперь об изготовлении. Разработку и отладку можно провести "на соплях", используя готовую китайскую плату и какую-то самодельную макетку, которая воткнется в МПИ. Если кто-то, как и я, соберется что-то макетировать, ее можно напечатать лазерным утюгом или сделать из удлиннителя от 15ИЭ-00-013. У меня для этого есть готовая макетка из старых запасов. А вот боевой вариант, по-любому, надо будет напечатать. И, по моим прикидкам, вариант (1) легко разведется на двусторонней плате без металлизации отверстий, то есть ее можно будет сделать лазерным утюгом. Все остальные потребуют, как минимум, металлизации отверстий, а, значит, плата будет заказная. И, учитывая, что она большая ("половинка" ДВК), цена у нее будет - ой!

Немного о возможных вариантах. Из сотни ног чипа штук 40 точно останутся свободными, на них можно будет сваять что-то еще. Допустим, подключить тот же IDE-винчестер, о котором мечтает Хунта. Желающие трудностей могут попробовать заменить F103VET6 на F107VCT6, там на борту, правда, нет контроллера SDIO, зато есть USB OTG и Ethernet. А у F407VET6 есть всё вместе, да еще и 168 МГц, и 192К оперативки, и всего в 2-3 раза дороже, чем 103-107, программируй - не хочу. Вот я и не хочу пока всем этим заниматься - дай Бог, завести псевдодиск на микро-SD.

А теперь, прошу помощи клуба. Раз это диск, то с него должна быть возможность загрузиться. Чтобы не связываться еще и с ПЗУ загрузчика, проще всего воспользоваться командой загрузки с перфоленты. На Э-60 и на ДВК с ВМ1 где считывание абсолютного загрузчика делается командой 177550L, все просто. Набрал вместо 177550 адрес регистра состояния своего устройства, и вперед! А вот с ВМ2 и ВМ3 такое возможно только с альтернативными системными прошивками - 279 и 377 соответственно - у родных прошивок 055 и 134 абсолютный загрузчик считывается по простому нажатию буковки "L" и смена регистра состояния не предусмотрена. Так вот, спрашивается: что делать? Положить регистры устройства по адресам 177550-177556? Можно, но тогда, во-первых, их будет всего 4, и, во-вторых, перфолентами на ДВК с таким контроллером уже не воспользуешься. Положить их в другое место? тогда без замены системного ПЗУ не воспользуешься загрузчиком с перфоленты. Можно еще поизощряться с командами типа mov -(R7),(R0)+ и загрузить что угодно из флеши контроллера, используя всего один адрес в пространстве ввода-вывода, как это было предложено где-то в МПСиС...

В общем, собственно вопросы

1. Дайте мне, пожалуйста, блок адресов в пространстве ввода-вывода для моего контроллера.
2. Как лучше оформить начальный загрузчик?
3. Принимаю советы по организации регистров устройства.
4. Есть мысль попробовать сделать обмен данными через DMA. Стоит ли связываться?
5. Дайте, плз, двухбуквенное имя устройства.

----------------------------------------------------
upd: Контроллер разработан

Ссылки:
AZБК официальный сайт (https://azbk.maxiol.com/)
AZ официальный сайт (https://az.maxiol.com/)

Основная страничка поддержки проекта [инструкции, техническое описание, обновления фирмвари]
Контроллер псевдодиска на MicroSD (https://forum.maxiol.com/index.php?showtopic=5388)
Контроллер псевдодиска на MicroSD: сборка и наладка конструктора контроллера v1.01 (https://forum.maxiol.com/index.php?showtopic=5452)
Контроллер псевдодиска на MicroSD: подключение сетевой карты (https://forum.maxiol.com/index.php?showtopic=5490)
Канал оперативной поддержки всего что связано с контроллерами серии AZ (https://t.me/pdp11_az)


Разработка версии для УКНЦ
УКНЦ + AZ - вариант контроллера псевдодисков на микро-SD для УКНЦ. (https://zx-pk.ru/threads/30596-uknts-az-variant-kontrollera-psevdodiskov-na-mikro-sd-dlya-uknts.html)
Контроллер псевдодиска на MicroSD на шину МПИ: особенности версии для УКНЦ (https://forum.maxiol.com/index.php?showtopic=5491)

Разработка версии для БК-0010/11/11M
AZ для БК-0011М (https://zx-pk.ru/threads/32102-az-dlya-bk-0011m.html)
Основная страничка проекта для БК-0010/11/11M
AZ для БК-0010 БК-0010.01 БК-0011 БК-0011М, расширенная версия AZ (https://forum.maxiol.com/index.php?showtopic=5543)
Контроллер AZ BK: Процедура обновления firmware (прошивки) контроллера (https://forum.maxiol.com/index.php?showtopic=5550)
Контроллер AZ BK: Обновления прошивки (https://forum.maxiol.com/index.php?showtopic=5553)


Приобрести контроллер можно на Барахолке
Версия контроллера для ДВК (https://zx-pk.com/forum/viewtopic.php?f=7&t=13392)
Версия контроллера для УКНЦ (https://zx-pk.com/forum/viewtopic.php?f=7&t=14197)
Версия контроллера для QBUS PDP-11 (https://zx-pk.com/forum/viewtopic.php?f=7&t=16943)


upd 2020: появилась поддержка сети
Контроллер псевдодиска на MicroSD ДВК / УКНЦ: подключение сетевой карты (https://forum.maxiol.com/index.php?s=&showtopic=5490)

upd 2022: заработали часы RTC, ест возможность установки часов с NTP сервера
Контроллер псевдодиска на MicroSD ДВК / УКНЦ: NTP RTC часы (https://forum.maxiol.com/index.php?s=&showtopic=5388&view=findpost&p=57072)

Patron
23.09.2017, 17:58
DMA полезно для загрузки, потому что можно добавить контроллеру команду "прочитать блок 0 устройства 0 по адресу 0" и/или ( для более продвинутых извращений ) "переслать сервисный код в ОЗУ с адреса 020000", тогда после засылки с пульта в регистр контроллера такой команды - можно будет начать загрузку командой G или запустить сервисный код командой 20000G.

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

При реализации прерываний и DMA - можно легко сделать разновидность контроллера HD. В таком случае подходит имя устройства HD.


Когда процессор контроллера занят - не надо отдавать в МПИ никаких битов. Достаточно, чтобы перед уходом в офлайн процессор контроллера активировал аппаратную "заглушку", которая при активации SYNC сличает адрес на шине с адресом CSR и при совпадении - замыкает линию DIN на линию RPLY, а при сбросе SYNC - сбрасывается в исходное состояние. Данные на шину выставлять не надо, тогда CPU считает с шины нули - и это будет признаком "BUSY". На запись отвечать не обязательно - никто не пишет в CSR, когда там нет флага разрешения записи ( READY ). Когда контроллер в онлайне - он сам эмулирует CSR и всегда держит там признак "READY" ( бит 0200 ). Перед каждым "сеансом" работы с контроллером драйвер должен дождаться появления бита READY в CSR.

MM
23.09.2017, 19:22
2. Как лучше оформить начальный загрузчик?
Посмотрите повнимательней 055 ПЗУ - там вроде как есть загрузка с лентопротяга пользователя (Адр)L.
Можно пойти простым путем - при установке какого-то бита появляется текст ПЗУ ма МПИ - например, на 173000 ( или др. адресе ), и пользователь может его запустить на исполнение.
*

1. Дайте мне, пожалуйста, блок адресов в пространстве ввода-вывода для моего контроллера.
Как насчет 177000 - 177022 ?
*

3. Принимаю советы по организации регистров устройства.
См. DW: , но с резиновым объемом.
*
DMA - значит - заведомый гемор, или под многозадачник.
*

5. Дайте, плз, двухбуквенное имя устройства.
AF: :v2_dizzy_coder:
*
Я бы посоветовал взять за основу готовый КМД ДВК, и просто сменить адрес ВП1-095/096, ну и текст прошивки. Так же отказаться от ВП1-128 - сменить её на мелкоту или ВП1-033.

hobot
23.09.2017, 22:12
5. Дайте, плз, двухбуквенное имя устройства.
AZ, AZ.SYS, AZX.SYS и т.д. и т.п. )

Hunta
23.09.2017, 23:33
А если что то типа STM32F407VET6 (https://ru.aliexpress.com/item/Free-shipping-STM32F407VET6-development-board-Cortex-M4-STM32-minimum-system-learning-board-ARM-core-board/32618222721.html)?

AFZ
24.09.2017, 08:47
При реализации прерываний и DMA - можно легко сделать разновидность контроллера HD. В таком случае подходит имя устройства HD. Я бы тоже хотел воспользоваться HD - давно утверждены состав и назначение битов регистров, есть готовый драйвер... Но HD работает мгновенно - ему дали команду, и на следующий такт виртуального процессора данные появились в памяти. В реале такое не выйдет. Если добавить в HD возможность ожидания - пусть в эмуляторе она и не будет использоваться, поскольку данные появились мгновенно, но, если они не появились... Впрочем, скорее всего, не выйдет. HD ведь не предусматривает отключения всех регистров на время ожидания? И прерываний у него нет.


Когда процессор контроллера занят - не надо отдавать в МПИ никаких битов. Достаточно, чтобы перед уходом в офлайн процессор контроллера активировал аппаратную "заглушку" То есть, вариант (2). Именно так я и представляю себе конструкцию на ЛА19, нескольких инверторах, мощной 8-ножке и, может быть, паре-тройке простых ЛЭ - детально я ее не продумывал. Причем отдать один бит в МПИ почти ничего не стоит - та самая 8-ножка содержит два ЛЭ, один отдаст СИП, второй свободен, цена вопроса - лишняя пара проводков на макетке или дорожек на боевой плате. Ладно, буду думать...


Посмотрите повнимательней 055 ПЗУ - там вроде как есть загрузка с лентопротяга пользователя (Адр)L Все хуже. Попробовал в эмуляторе 134-ю, она вообще на букву L не реагирует, так, что перфоленточный загрузчик отменяется.


при установке какого-то бита появляется текст ПЗУ ма МПИ - например, на 173000 ( или др. адресе ), и пользователь может его запустить на исполнение. 173000/165000 отпадают однозначно - кроме ДВК есть еще и Э-60 (М6, М8), а кое у кого и 11/83-84, конфликтовать с их ПЗУ загрузчиков не хочется. К тому же в МПСиС был опубликован замечательный прием, позволяющий разместить ПЗУ загрузчика на одном адресе. Адрес внутри ПЗУ перебирается отдельным аппаратным счетчиком, после каждого считывания к нему прибавляется единица, адресация внутри пословная. Первой командой в ПЗУ располагают команду MOV -(R7),R0, затем адрес загрузки, затем MOV -(R7),(R0)+, затем первую команду загружаемой программы, затем снова MOV -(R7),(R0)+, следующую команду программы и т.д. В конце ставят каким-то образом переход на загрузчик, например MOV -(R7),R0, <адрес перехода>, JMP @R0. Команда MOV -(R7),<регистр или косвенно-регистровый адрес>, первым делом скорректирует адрес следующей команды, схемы ЦП прибавят к немк двойку, а автодекремент ее отнимет, в результате адрес останется тем же. А адресный счетчик ПЗУ подставит на этот адрес следующее слово данных (нечетное обращение, считая с нуля) или следующую команду (четное обращение). Цена вопроса - дополнительный аппаратный счетчик и двойной расход объема ПЗУ. В нашем же случае - несколько лишних строк кода, а ПЗУ у нас большое. Хотя бесплатные кейловские 32К я занял уже на 45%. Впрочем, "таблетки от жадности" никто не отменял... :)


DMA - значит - заведомый гемор, или под многозадачник. Да не то, чтобы так. В моем варианте реализации DMA - это лишние 6 шинных драйверов для A16-21, второй комплект шинных драйверов для управляющих сигналов (СИА, СИП, ВВОД, ВЫВОД и т.д.). Если делать без ДМА, то на прием с МПИ хватит 1/6-й простого 1533ЛН1, на передачу - половины 155ЛА18 или похожей мощной восьминожки с другой логической функцией. А для ДМА их придется ставить двусторонними, или ставить второй комплект с обратной функцией. Да, увеличивается количество рассыпухи, причем заметно. :(


См. DW: , но с резиновым объемом. Для точной эмуляции, боюсь, опять понадобится много рассыпухи. А неточная смысла не имеет. Впрочем, погляжу.


Я бы посоветовал взять за основу готовый КМД ДВК, и просто сменить адрес ВП1-095/096 Зачем? Я планирую, по-простому, эмулировать несколько абонентов МПИ на ножках GPIO контроллера. Обычной синхронной зацикленной программой. Ожидаю пассивного СИА. Жду фронт СИА: снял себе в переменную состояние ДА15-00, проверил СИА. Неактивен? Назад, на метку "Жду фронт СИА". Иначе по МПИ только что передан адрес. Сравниваю его со своими. Не мой? назад на ожидание пассивного СИА. Иначе разбираюсь, что мне там предлагают сделать... 72-МГц процессор сделает все это не напрягаясь, ЦП и не заподозрит, что там не аппаратные регистры, а программная эмуляция. Таким образом, без ДМА, всего оборудования будет: БИС микроконтроллера, 4 шинных драйвера для К ДА00-15 Н, пара 1533ЛН1 для приема управляюших сигналов МПИ и одна-две мощных восьминожки для передачи К СИП Н, К ТПР Н, может еще что понадобится... Ну, и заглушка "Думаю, прошу не мешать", которую мы обсуждаем с Патроном. И никаких ВП1-ххх, ВМ1 и прочих.

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


А если что то типа STM32F407VET6? Можно и такое, есть у меня такая платка. Единственный недостаток, если дело дойдет до мелкой серии, на Али они вдвое дороже. 103VET6 попадаются по $23 за десяток, а 407VET6 не менее $43 за тот же десяток. Впрочем, эта разница, думаю, потеряется на фоне цены платы - все-таки, "половинка" ДВК/Э-60 - более 3 кв. дм!

А так - замечательный МК. На борту и SDIO, и USB OTG, и 100-Мбит Ethernet, и еще много чего, включая 168 МГц и 192К оперативки.

Hunta
24.09.2017, 10:47
AFZ, просто именно такой вариант мне уже почти дошёл (оно и отладочный модуль уже пришли в Ёбург, значит к концу недели будут у меня)

Patron
24.09.2017, 13:26
Но HD работает мгновенно - ему дали команду, и на следующий такт виртуального процессора данные появились в памяти.Ну, вот прямо сейчас я уже сделал 3-ю версию контроллера HD, где в CSR добавлен бит разрешения прерываний 0100, при установке которого контроллер начинает выполнять команды чтения и записи с задержкой 100 мкс, во время которой бит READY сброшен и после которой происходит прерывание по вектору 0164.

Сейчас напишу для этого контроллера драйвер, проверяющий бит READY в CSR перед каждым обращением к любому регистру - и всего делов. Главная особенность использования прерываний контроллером HD - они возникают только в двух случаях: 1) после начала выполнения команды чтения; 2) после начала выполнения команды записи. Все остальные команды выполняются "мгновенно", т.е. пока драйвер идёт ждать появления бита READY в CSR - контроллер уже готов сообщить в регистре данных размер подключенного образа или принять в регистре данных значения номера устройства, номера блока, адреса буфера или счётчика слов.

MiX
24.09.2017, 14:16
Ну, вот прямо сейчас я уже сделал 3-ю версию контроллера HD
А как будет реагировать контроллер если "карту SD"* вытащить и вставить другую?

*В эмуляторе это будет образ HD.

Patron
24.09.2017, 14:58
А как будет реагировать контроллер если "карту SD"* вытащить и вставить другую?
*В эмуляторе это будет образ HD.Образ HD - это файл на карте SD, смонтированный в виртуальный привод. Вытащить карту SD при работающем контроллере, это как вытащить флешку из гнезда USB, с которой в эмуляторе смонтирован образ - тогда до размонтирования образа - все обращения чтения и записи будут давать аппаратную ошибку, которую эмулятор контроллера HD возвращает драйверу в старшем бите CSR.

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


Причем отдать один бит в МПИ почти ничего не стоит - та самая 8-ножка содержит два ЛЭ, один отдаст СИП, второй свободен, цена вопроса - лишняя пара проводков на макетке или дорожек на боевой плате.Нет смысла отдавать биты в "режиме заглушки", потому что при работе контроллера с регистрами - в CSR всегда есть какой-то установленный бит и только при "режиме заглушки" все биты сброшены - это позволяет детектировать режим заглушки одной командой TST (R1). Когда надо проверять какой-то бит - команда становится длиннее на одно слово ( маску этого бита ). Зачем такие усложнения платы и кода, когда без них гораздо лучше.

MiX
24.09.2017, 15:06
Образ HD - это файл на карте SD
Во как!
Значит контроллер должен поддерживать файловую систему (FAT16/32) и распаковывать образ DSK.


Вытащить карту SD при работающем контроллере, это как вытащить флешку из гнезда USB,
Вот по этому и был задан вопрос. Значит карту нельзя вынимать на протяжении всего сеанса, вплоть до выключения компьютера.

Hunta
24.09.2017, 15:33
Значит контроллер должен поддерживать файловую систему (FAT16/32)
Насколько я успел посмотреть, уже есть готовые библиотеки.

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

Patron
24.09.2017, 16:24
В моем варианте реализации DMA - это лишние 6 шинных драйверов для A16-21, второй комплект шинных драйверов для управляющих сигналов (СИА, СИП, ВВОД, ВЫВОД и т.д.). Если делать без ДМА, то на прием с МПИ хватит 1/6-й простого 1533ЛН1, на передачу - половины 155ЛА18 или похожей мощной восьминожки с другой логической функцией. А для ДМА их придется ставить двусторонними, или ставить второй комплект с обратной функцией. Да, увеличивается количество рассыпухи, причем заметно.Без ДМА придётся делать пакетную эмуляцию ДМА ( когда передача "блока ДМА" начинается с появления бита 040000 в CSR и заканчивается появлением бита READY в CSR, а в промежутке - сначала в регистре данных выдаётся счётчик передаваемых слов, а потом все слова пакета со скоростью шины, т.е. без проверки готовности для каждого отдельного слова ).

Но при такой реализации "псевдо ДМА" - минимальный загрузчик, отправляющий команду "передать блок 0 устройства 0" и считывающий из регистра данных пакет "псевдо ДМА" - будет выглядеть так:



Error: ; При ошибке - повторить чтение.
Mov #177720, R1 ; HD CSR -> R1
Mov #10, (R1) ; 010 == Read Boot
Tst (R1) ; Блок "псевдо ДМА" готов?
BEq .-4. ; Нет..
Tst (R1)+ ; Была ошибка чтения?
BMi Error ; Да..
Mov (R1), R0 ; Word Count -> R0
Clr R2 ; Buff Addr -> R2
Mov (R1), (R2)+ ; Читаем слова блока
SOB R0, .-4. ; Все слова переданы?
Clr PC ; Переходим на адрес 000000


Если часть предварительных операций выполнить вручную - минимальный код загрузчика в ОЗУ ДВК будет таким:


Mov (R1), R0 ; Word Count -> R0
Mov (R1), (R2)+ ; Читаем слова блока
SOB R0, .-4. ; Все слова переданы?
Clr PC ; Переходим на адрес 000000


При работе с пульта ДВК это будет выглядеть так:


***** ДОСТУПНОЕ ОЗУ - 256 K *
@ 001000
@R1/001122 177722
R2/000000
@R7/001000 10000
@0010000/000000 11100
00010002/000000 11122
00010004/000000 77002
00010006/000000 5007
@17777720/040200 10
@17777720/000000 /040000
@P
HD Boot-I-Cold boot..

HD (177720) disk driver v4.0 2017
SL V08.00 [SW] Сторожевых С.В. 1988
KZ V01.00 (C) ВЦ МИЭТ, НОЯБРЬ 1987

RT-11SB (Y) V05.07



Если такая процедура загрузки устраивает - можно сделать разновидность контроллера HD с пакетной эмуляцией DMA. В режиме записи - передавать счётчик слов в пакете не надо, потому что контроллер использует счётчик слов, переданный командой "задать счётчик слов". Важная особенность, которую надо учитывать, заключается в том, что контроллер может отдать в пакете меньше слов, чем было указано в счётчике слов чтения, поэтому в качестве счётчика слов при приёме пакета "псевдо ДМА" - обязательно должно использоваться первое слово пакета. При записи контроллер может записать не все переданные ему слова, но перед этим принимает пакет целиком - в соответствии со значением текущего счётчика слов.

Текущие значения номера привода, номера блока и счётчика слов сохраняются между операциями и обнуляются по сигналу шины INIT ( команда CPU = RESET ).

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

Сигнал INIT и любая запись в CSR на этапе чтения/записи пакета "псевдо ДМА" - принудительно завершают выполнение текущей команды и переводят контроллер в режим приёма команды. При этом, в случае записи в CSR - выполнение текущей команды завершается с установкой бита ошибки в CSR и кода ошибки IE_ABT = 0375 в регистре данных.

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

Чтобы операционка могла сбросить операцию на "этапе заглушки" - можно добавить в заглушку возможность приёма сигналов DOUT и INIT с установкой флагов для контроллера. Тогда, при выходе из "режима заглушки" контроллер при наличии флага INIT или флага записи в CSR - отменяет посылку прерывания, отключает прерывания, а всё остальное делает так же, как в случае приёма INIT или записи в CSR на этапе обмена пакетами.

MM
24.09.2017, 18:08
Как бы сделали в НЦ в 1990-е :
Собственно котроллер-полуплата состоит из 2-х частей :
1. Телеграфный адаптер для карточки, по типу ВП1-065.
2. Небольшой участок ПЗУ загрузчика, да со сменным адресом. ИМХО - в 000400 можно уложиться для загрузки 0 сектора карточки.

Т.е. все эти шевеления с ФАТ - программно в драйвере.

AFZ
24.09.2017, 18:48
Когда надо проверять какой-то бит - команда становится длиннее на одно слово ( маску этого бита ). Если этот бит - не Д15.


Значит контроллер должен поддерживать файловую систему (FAT16/32) и распаковывать образ DSK. Именно. Я давно продвигаю основной тезис этого дела: псевдодиск PDP-11 на современном носителе должен быть файлом для писюка. Вне зависимости от типа носителя, будь то простая USB-флешка, SD-карточка, винчестер, да вообще, хоть SSD-шник. Чтобы сняв этот носитель и подключив его к писюку можно было нормальными писюшными средствами свободно манипулировать файл-образами. Архивировать, выкладывать в Нет, заливать на носитель свежеукачанные из Нета файл-образы и пользовать их на ДВК. А что делать, допустим, с УКНЦ-шным WD? Правильно, без специальной программы (которой нет), ничего. Разве что посекторную копию сделаешь...

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


Чтобы операционка могла сбросить операцию на "этапе заглушки" - можно добавить в заглушку возможность приёма сигналов DOUT и INIT с установкой флагов для контроллера. Тогда, при выходе из "режима заглушки" контроллер при наличии флага INIT или флага записи в CSR - отменяет посылку прерывания, отключает прерывания А вот об этом я забыл... Спасибо.

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

В частности, если адресную часть цикла МПИ обрабатывать аппаратно, можно попробовать обрабатывать запросы МПИ в режиме прерываний. Программная реализация этого дела предусматривают строго синхронную "прополку" (Polling), поскольку нельзя пропустить фронт СИА, да и не сдюжит 72-МГц процессор прерываний с частотой 1 МГц - это же, максимум, 72 команды от одного прерывания до другого - ведь нужно и сохраниться, и в конце восстановиться, и проверить, к нам обращаются, или нет, и это по каждому обращению к МПИ, включая память. Так и на основную программу времени не останется. А вот если адрес зафиксируется аппаратно, причем "наш" адрес, на чужие не реагировать, то вполне можно и СИП притормозить, если что... Если это сойдется, то, может быть и отключать регистры не понадобится. Но, опять же, это большое количество рассыпухи, что очень не хочется. В общем, буду прикидывать схемы и думать...

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


Т.е. все эти шевеления с ФАТ - программно в драйвере. Нет никаких там ФАТов. По-простому, сектор 0-0-1 - блок 0, 0-0-2 - блок 1 и т.д. А сделать FAT в драйвере PDP-11... Известное творение г-на Чана - FatFS, при всех его оптимизациях и отсечениях всего, сколь-нибудь избыточного, занимает на любой платформе не менее 10=12К, отдать столько на драйвер - так ведь для работы места не останется...

MiX
24.09.2017, 19:21
А распаковки файл-образы .dsk не требуют, этим будет заниматься ОС, работающая на ДВК, точно так же, как это делается на эмуляторе.
Распаковкой DSK занимается ОС работающая на ДВК только одного образа с одного диска. Если на SD карте несколько образов, то контроллер должен распределить на каком диске какой образ. Для этого делаются маркеры в имени файла.
Например: HD000.DSK, HD001.DSK, HD001.DSK... итд.

Более того, какой размер должен быть у образа? 32Мб?
Тогда нужна утилита для форматирования из под ОС на ДВК.
И не забудьте про блокиратор записи на SD карте.

Patron
24.09.2017, 20:05
Если этот бит - не Д15.Старший бит CSR у всех контроллеров означает: команда завершена с ошибкой.

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


Например: HD000.DSK, HD001.DSK, HD001.DSK... итд.Лучше: 000.исходное имя образа, 001.исходное имя образа - тогда и пользователь, и контроллер смогут легко управлять монтированием.

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


А что делать, допустим, с УКНЦ-шным WD? Правильно, без специальной программы (которой нет), ничего. Разве что посекторную копию сделаешь...DSK-плагин для TC (http://zx-pk.ru/threads/11015-rt-11-dsk-total-commander-wcx-plugin.html?p=223608&viewfull=1#post223608) поддерживает упаковку/распаковку прямых и инверсных образов HDD UKNC на DSK-образы разделов, а также прямую работу с содержимым разделов HDD UKNC в образе HDD, если эти разделы содержат файловые системы, поддерживаемые плагином.

Hunta
24.09.2017, 21:39
Кто-нибудь потом, странице где-нибудь на 13, если тема до неё доживёт, сравните, пожалуйста общий ход обсуждений здесь и здесь: 32-разрядный процессор, полностью совместимый с архитектурой PDP-11 (http://zx-pk.ru/threads/28074-32-razryadnyj-protsessor-polnostyu-sovmestimyj-s-arkhitekturoj-pdp-11.html)

MiX
24.09.2017, 21:47
Кто-нибудь потом, странице где-нибудь на 13, если тема до неё доживёт, сравните, пожалуйста общий ход обсуждений здесь и здесь: 32-разрядный процессор, полностью совместимый с архитектурой PDP-11
Не понял намёка... ???

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


DMA полезно для загрузки, потому что можно добавить контроллеру команду "прочитать блок 0 устройства 0 по адресу 0"
А как это будет выглядеть? Без загрузчика будет загружаться?

Hunta
24.09.2017, 21:51
Кстати, вот вам ещё идея начального загрузчика:
- принцип - как у MY - то есть нулевой сектор читаем с адреса 0, 1000 или какого ещё.
- у устройства есть 2 спец регистра. Команда 17abcdG (где 17abcd - первый из них) приводит к следующему - устройство выдаёт по это адресу значение 777 (если я не ошибся с кодом BR .), одновременно читая по адрес 0 или 1000 или см выше начальный загрузчик и как только он прочитан, по адресу 17abcd читается JMP @(PC)+, а с адреса 17abcd+2 - соответственно 0 или 1000 или см выше.

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


Без загрузчика будет загружаться?
Как в MY

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


Не понял намёка... ???
Ничем не могу помочь.

Patron
24.09.2017, 21:55
А как это будет выглядеть? Без загрузчика будет загружаться?Выглядеть будет так:


@177720/000200 10
@G
HD Boot-I-Cold boot..

HD (177720) disk driver v3.0 2017
SL V08.00 [SW] Сторожевых С.В. 1988
KZ V01.00 (C) ВЦ МИЭТ, НОЯБРЬ 1987

RT-11SB (Y) V05.07


По команде 10 - контроллер устанавливает значения: Unit = 0 ; Block = 0 ; BufAddr = 0 ; Word Count = 256 и выполняет чтение.
Прочитанный блок затем запускается с адреса 0 командой пульта G.

Vslav
24.09.2017, 22:00
А не рассматривали вариант собрать желаемое по схеме MY? Только вместо 1801ВМ1 поставить STM32. Для макетирования можно взять нерабочую плату MY, выпаять ненужное и припаять свою китайскую платку взамен. Заодно вопрос загрузчиков и драйверов решится автоматически.

MiX
24.09.2017, 22:08
Выглядеть будет так:
В эмуляторе не работает.

Patron
24.09.2017, 22:10
В эмуляторе не работает.Будет работать со следующего релиза.

MiX
24.09.2017, 22:38
HD (177720) disk driver v4.0 2017
Драйвером не поделитесь? :) У меня версия 1.5.

Patron
24.09.2017, 22:50
Драйвером не поделитесь? У меня версия 1.5.Со следующего релиза контроллер HD будет позволять задавать в конфиге версию интерфейса: 1 ; 2 ; 3 ; 4 ; 5. Драйвер версии 1.6 будет работать с HD v1 и HD v2 без ожидания готовности. Драйвер версии 2.0 будет работать с HD v2 и HD v3 без прерываний, но с ДМА. Драйвер версии 3.0 будет работать только с HD v3 с прерываниями и ДМА ( как MY ). Драйвер версии 4.0 будет работать с HD v4 и HD v5 без прерываний и с пакетным обменом через регистр данных ( как MX ). Драйвер версии 5.0 будет работать только с HD v5 с прерываниями и с пакетным обменом через регистр данных ( как DW ).

AFZ
12.10.2017, 05:41
Patron, кстати, те STM32, на которых проектируется это устройство, имеют на борту прекрасные часы реального времени, не хуже, чем в писюке. Всех дополнительных расходов - часовой кварц и батарейка 2032. Надо бы использовать.

И еще, 177724 ничем не занят?

Patron
12.10.2017, 12:44
STM32, на которых проектируется это устройство, имеют на борту прекрасные часы реального времени, не хуже, чем в писюке. Всех дополнительных расходов - часовой кварц и батарейка 2032. Надо бы использовать.Надо. В следующем релизе эмулятора ДВК выйдет спецификация нескольких ( совместимых друг с другом ) вариантов реализации часов реального времени различной сложности, обменивающихся данными с программой через интерфейс HD.



И еще, 177724 ничем не занят?Не занят. Но для чего он может понадобиться?

AFZ
17.05.2018, 04:55
Оказывается, склепать абонента МПИ на рассыпухе - адский труд. Я и забыл об этом. В былые времена, когда мы массово клепали разное оборудование для Э-60/ДВК, я просто рисовал схему, а собирали ее другие люди, причем делалось это безобрывной накруткой обмоточного провода на ножки микросхем, с односторонней зачисткой изоляции. Я нарисовал схемы, день-два, и мне приносят готовую плату на отладку.

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

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

Patron, можно ссылку на последнюю спецификацию оборудования HD ?

MM
17.05.2018, 22:46
после всех оптимизаций
Радикально оптимизировать сложный новодел хорошо получается с полуплатой КМД - оставляется АП2 и НР1-4-9, остальное удаляется вместе с дорожками ( лучше тиглем -для последующего использования по назначению ).
Можно даже новодел оформить как блочок для приделывания на полузачищенную КМД, особенно на ЭКФ1533 ИС.

AFZ
18.05.2018, 05:41
У меня от тех еще времен осталось вот такое. (https://yadi.sk/i/rHFpaEn43W6m7Z) На свободное поле клеились микросхемы ножками вверх, после чего ножки в нужном порядке соединялись накруткой обычного ПЭЛ Ф0.25. Крутили самодельным накрутчиком из иголок от шприцов, он в процессе накрутки слегка обдирал лак с провода с одной стороны, этого вполне хватало для контакта с ножкой. Концы, подключаемые к разъемам, паялись, остальное, не обрезая провод, крутили по всем ножкам, куда должна идти эта связь. Работало вполне надежно - когда я уходил из той конторы, все платы работали, т.е. самые старые проработали года по четыре. Подозреваю, их и выкинули рабочими. По крайней мере, ту плату, которая на фото, я разобрал рабочей - и это после того, как она провалялась лет 10 в кладовке.

Ну, а сейчас я все развел на односторонней платке с перемычками, положу ее поверх этой платы, к разъему МПИ припаяюсь проводками, и можно будет отлаживать.

dk_spb
18.05.2018, 08:32
самодельным накрутчиком из иголок от шприцов, он в процессе накрутки слегка обдирал лак с провода с одной стороны,
Я на али купил себе такую тулзу фирменную. Вполне удобная.
И к ней проводок с изоляцией. Правда тут изоляция не лак.

svinka
18.05.2018, 08:47
Крутили самодельным накрутчиком из иголок от шприцов Толстые иглы продаются в ветеринарной аптеке

AFZ
18.05.2018, 08:59
Я на али купил себе такую тулзу фирменную. Вполне удобная.
И к ней проводок с изоляцией. Правда тут изоляция не лак.Ссылку, если можно.


Толстые иглы продаются в ветеринарной аптекеМы пользовали иглы от капельницы ("системы"). Но за наводку спасибо.

dk_spb
18.05.2018, 09:48
Ссылку, если можно.
https://www.aliexpress.com/item/NEW-WSU-30-Wire-Wrap-Strip-Unwrap-Tool-AWG-30-Prototyping-Wrapping/32779488052.html
https://geektimes.com/post/258798/ - тут если отсеять "бла-бла-бла" есть информация про инструмент и видео работы

svinka
18.05.2018, 12:05
И к ней проводок с изоляцией
После различных экспериментов мне больше всего понравилось работать с отечественным проводом НВ-1 (одножильный луженый с изоляцией)
Сейчас выпускаются сечением 0.2 и 0.12. Я раздобыл с хранения 0.07

Еще хорошо навивается провод одножильный из витой пары CAT5

Эмалированный провод зачищать не надо. Эмаль должна разрушиться при накрутке.
Ссылку на книжку прислать???

dk_spb
18.05.2018, 15:01
с отечественным проводом НВ-1
Я особо импортозамещением не страдаю, поэтому купил китайский провод. C учетом пересыла он минимум раза в 4 дешевле вышел.
кусочек отрезать на попробовать?

Patron
18.05.2018, 21:12
можно ссылку на последнюю спецификацию оборудования HD ?Устройство HD - варианты контроллеров и драйверов (http://zx-pk.ru/threads/18351-emulyator-dvk.html?p=929457&viewfull=1#post929457).

AFZ
15.10.2018, 19:14
Дело слегка тронулось с места. Я долго теоретизировал, сочинил несколько вариантов схем, всё получался здоровенный огород из рассыпухи. Попытался сделать его на макетке (китайская плата со сплошным полем дырочек с шагом 2.54), озверел после распайки десятка линий. Бросил. Нарисовал печатку, даже вытравил ее. Надеялся на новые цанговые патроны и победитовые сверла из Китая. Наконец все получил, попробовал сверлить - изба фигвам, хреновый у меня станок, не для таких движков и оборотов. Сверлить же стальным сверлом - хреново...

Ладно, вернулся к идее с "заглушкой", появилась идея, как ее реализовать попроще. Схема упростилась радикально,остались только драйверы. Ладно, с разгону решил ее напечатать. Развел, всё красиво, потом вспомнил, как я паял переходник с опторазвязкой для ДВК и понял, что без паяльной маски я таких соплей навешаю, что ой! Почитал, как наносят эту паяльную маску, понял, что это для меня слишком сложно, "влёт" не получится. Пришлось таки сделать крутилку и начать изготовление макета методом накрутки.

На сегодняшний день подсоединил все драйверы к МПИ. Осталось подсоединить противоположные ноги драйверов к МК. Но тут, блин, опять работа навалилась, дня 3-4 точно буду занят...

MM
15.10.2018, 22:45
появилась идея, как ее реализовать попроще
Насчет платы - посоветую сразу делать в КАДе небольшую ДПП, в районе 10х10 см., и отправлять заказ китайцам - там цены Очень приемлемы для такого типономинала ПП.
А готовое устройство винтиками и МГТФ приделать на МПИ-слот от какой-нибуть ненужной платы Э-60.

Отмечу, что для 4СПП пока цены малоприемлемы - один только одноразовый шаблон потянет на ~$40, но сам тираж 4СПП - всего в пару раз дороже ДПП.

AFZ
15.10.2018, 23:49
Да? Не знал. Я, правда, герберы не умею делать, придется выучить... А так я планировал это на второй этап - сначала как-нибудь запущу "на соплях", а уже потом заказывать отладочную плату. А так, это же туда и STM32 можно будет прилепить, а то я планирую с китайской отладочной платой. С другой стороны, так у меня какая-то свобода есть, я могу перебирать GPIO ардуиновскими проводками...

Ничего, зато вспомнил безобрывную накрутку с односторонней зачисткой изоляции. Простой обмоточный ПЭЛ Ф0.2, подпаял кончик к дорожке МПИ и пошел крутить на все ножки всех м/с, куда эта линия подключена. Мы в конце 80-х - начале 90-х не один десяток плат так сделали, одна лежит до сих пор живая.

hobot
16.10.2018, 12:54
одна лежит до сих пор живая.


https://www.youtube.com/watch?v=WpkB_ZDnAis

AFZ
25.10.2018, 19:41
Железяку я таки сделал. В смысле, макет. Теперь осталось сочинить в нее софтину. Фирмварь, так сказать... Уффф! Больше я такими делами заниматься не буду - не с моим зрением собирать сложные железяки.

Вот так выглядит готовая железяка:
66685

А так - она же с подключенной китайской пробной платой с МК.
66686

AFZ
14.11.2018, 15:09
Ну вот, дело основательно сдвинулось. Докладываю.

Во-первых, надежда обработать цикл МПИ полностью программно не состоялась. Не зря Vslav в свой РЕ-мулятор поставил 120-МГц STM32F205 и программу для него написал на асме. Нет, может быть, если писать на асме, то, скорее всего, и F103 с его 72 МГц справится, но писать под STM-ки на асме - это слишком круто! А Си там такого нагенерил (я смотрел), что неудивительно: переход К СИА Н из высокого уровня в низкий правильно поймать невозможно - адрес, который следует зафиксировать по этому сигналу ловится крайне ненадёжно! Тогда я поступил по-простому: сделал для этого адреса аппаратную ловушку. Она ловит факт выбора моей платы - обращение по адресу 17772х, принимает этот факт выбора и биты этого "х" в 1533ИР22 и выдает все это в мой МК. Пока я еще не прикрутил аппаратный ответ "думаю, прошу не мешать", но это одна ЛА4-я, как припрёт, прикручу.

В общем, концептуально проект состоялся - обмен данными с МПИ работает в лучшем виде. Я даже уже прикрутил механизм передачи начального загрузчика, передает всё, что захочешь. СамогО загрузчика, правда, еще нет, вместо него передается демонстрашка. Вот:

173000
@177724G
This code recieved from STM32
010032
@ Теперь надо двигаться дальше. Во-первых, нужна правильная работа с микро-SD-шкой. Это, помнится, грозился сделать Хунта. Во-вторых, надо согласовать регистры и порядок работы контроллера. Это собирался сделать Патрон, и сделал, но не совсем то, что у меня получается. Ну, и нужен драйвер для RT-11. Сделать железо под те 5 вариантов драйвера, которые сделал Патрон, я пока не могу, надо вносить изменения. И их очень желательно согласовать. (Патрон, ау!) Ну, и внести в эмулятор, чтобы железо соответствовало эмулятору.

Hunta
14.11.2018, 18:11
Это, помнится, грозился сделать Хунта
Ну, на самом деле это сделано уже (только адаптировать) в прошивке-эмуляторе кучи флопов для Готека. Взять и адаптировать.

Patron
14.11.2018, 19:04
надо вносить изменения. И их очень желательно согласовать. Ну, и внести в эмулятор, чтобы железо соответствовало эмулятору.Для этого было бы полезно иметь описание формата регистров и порядка работы получившегося железа.

AFZ
15.11.2018, 05:16
2 Patron
Да, в общем-то, пока все свободно. Есть 3 регистра - 177720 -177724. Последний - для загрузки. Команда 177724G запускает передачу загрузчика, по окончании которой передает ему управление. Размер загрузчика, в общем-то, неограничен, в МК он представлен набором hex-констант. Есть недоделанная программа, которая конвертит .SAV-файл в этот набор констант.

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

В общем, чистый PIO-mode с прерываниями.

Как я понимаю, на этот базис почти ложатся HD V4 и V5. Но не совсем, поскольку ни один из них не знаком с концепцией блоков. А надо, поскольку мне для безблочных манипуляций с данными не хватает ресурсов МК. Ниже изложено моё видение обмена с псевдодиском в блочном варианте.

К числу длительных действий относятся:

- чтение первого слова блока. Ну, или, как вариант, передача команды "прочитать блок в буфер", после которой по отдельной команде "читать содержимое буфера" можно быстро передавать данные из буфера на МПИ. При этом, недочитанную ненужную часть блока можно просто бросить.

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

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

-----------------------------------------------------------

2 Hunta Ну, если оно готово, присылай. Собственно, мне нужны возможности открыть файл, читать/писать его, да небольшая работа с оглавлениями, типа findfirst/findnext. И, вроде-бы, твой Готек собран на F103 ? Тогда вообще идеально - оно ляжет на мой F103ZET6, практически, без переделки.

Hunta
15.11.2018, 06:30
Ну, если оно готово, присылай
Видимо, я не точно выразился. Я не имел ввиду, что я написал, я имел ввиду проект
https://github.com/keirf/FlashFloppy
в котором используется стандартная библиотека fatfs для работы с FAT32, а сам проект можно использовать как пример работы с ней.
Врят ли я напишу за приемлемое время что то лучшее, чем эта библиотека, да и смысле ещё раз реализовывать то же самое как бы нет.

AFZ
15.11.2018, 08:16
Я и не хочу, чтобы ты писал что-то своё. Мне нужен готовый проект с faffs, который без плясок с бубном собирается в Кейле и из которого можно выдернуть работу с fatfs и SD-картой. И желательно, чтобы оно не было собрано из кубиков.

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

Ладно, у меня пока есть небольшая заглушка, которую можно использовать для отладки, а потом разберемся и с FATFS.

Hunta
15.11.2018, 08:44
Мне нужен готовый проект с faffs

собирается в Кейле

из которого можно выдернуть работу с fatfs и SD-картой
fatfs там есть, работы с SD картой нет, кейл автор не использует, выдернуть работу с fats можно, а поскольку с твоей стороны описания желаемого api нет - чего писать - я просто не представляю. Где ТЗ?


И желательно, чтобы оно не было собрано из кубиков.
А тебе не кажется, что использование fatfs (а уж тем более написанной кем-то работы с SD) - это уже использование кубиков?

AFZ
15.11.2018, 09:03
поскольку с твоей стороны описания желаемого api нет - чего писать - я просто не представляю. Где ТЗ? Меня вполне устраивает чановский API, в принципе, запустить бы пример от Чана. Просто его сэмплы недописанные - начинаешь смотреть, а там то и дело "// здесь надо преобразовать то-то в то-то".


А тебе не кажется, что использование fatfs (а уж тем более написанной кем-то работы с SD) - это уже использование кубиков? Под кубиками я подразумеваю STM32CubeMX с его кривыми, как бумеранг, драйверами HAL. Сильно не хочется воевать с ошибками этого HAL'а вместо собственных...

Alex
15.11.2018, 15:23
Великое дело сделали. Причешете... Всё хорошо будет :)

AFZ
16.11.2018, 07:33
Patron, а где указать эмулятору, чтобы он использовал HD V4 или V5 ?

И еще. Я правильно понимаю, что если я добавлю в драйвер HD V4 и V5 в циклы чтения и записи ожидание бита готовности (0200) перед каждым принимаемым/передаваемым словом, то оно должно работать в эмуляторе? Это я к тому, что слона надо есть по кусочкам - сначала V4 в простейшем PIO-mode, а когда заработает, буду двигаться дальше. Оно, конечно, неэффективно (лишние две команды в цикле передачи данных, который мог бы быть на эти две команды короче, но это требуется вмешательство в эмулятор), но для начала сойдет. Поскольку отлаживать одновременно и железо (точнее, софт в МК), и драйвер, это сложнее не вдвое, а больше.

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

Нет, конечно, я понимаю, что в рамках V4/V5 тоже можно организовать поблочную работу - аккуратно отсчитывать заполнение блоков и делать ожидание только в момент окончания очередного блока, в том числе, для V5 ждать прерывания, но это солидное усложнение драйвера, а я основательно подзабыл приёмы драйверописательства для RT-11, и сейчас заниматься еще и этим как-то не с руки.

А отлаживать драйвер одновременно с железом на ДВК, как новое устройство - так у меня на ДВК-шнике, кроме моей железки, ничего нет, не через HX же гонять MACRO с LINK'ом? То есть, конечно, можно все сгенерить в эмуляторе, засунуть драйвер в HX.DSK, или как там его, загрузить ДВК с HX и пробовать. В крайнем случае так и сделаю...

Patron
16.11.2018, 14:48
где указать эмулятору, чтобы он использовал HD V4 или V5 ?

При эмуляции тип эмулируемого контролера HD задаётся "секретным" параметром: HD_InterfaceType в разделе HD.ini. Значение по умолчанию HD_InterfaceType = 2 соответствует обычному контроллеру HD.



Я правильно понимаю, что если я добавлю в драйвер HD V4 и V5 в циклы чтения и записи ожидание бита готовности (0200) перед каждым принимаемым/передаваемым словом, то оно должно работать в эмуляторе?Нет, цитирую описание (https://zx-pk.ru/threads/18351-emulyator-dvk.html?p=929457&viewfull=1#post929457):
После подачи команды записи - контроллер снимает флаг READY ( 0200 ) и в регистр данных нужно (без каких-либо других обращений) записать количество слов, равное текущему значению "СЧЁТЧИК СЛОВ", после чего контроллер снимает флаг NO.DMA и выполняет запись. Завершение записи приводит к установке в CSR флагов READY и NO.DMA.

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



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


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

AFZ
16.11.2018, 16:31
Нет, цитирую описание: Недоглядел. Жаль, я бы уже начал.


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



На мой взгляд - сначала надо детально продумать работу "блочного" контроллера (всем миром), ОК. Думаем. Мне больше импонирует, так сказать, "раздельное заряжание". То есть, при записи подаем отдельную команду "принять с МПИ в буфер", передаем без ожиданий любое количесво слов от 1 до 256 включительно, затем даем команду "писать на СД", и контроллер запишет это дело по заданному адресу, с отключением и переходом в состояние "Думаю, прошу не мешать". Ну, и при чтении - даем команду "читать с СД в буфер", контроллер, опять же, отключится, прочитает блок с СД-шки, подключится снова, выдаст прерывание, и, получив команду "передать содержимое буфера на МПИ" быстренько передаст прочитанное.

Я, конечно, не настаиваю, но, ИМХО, так будет лучше.

Patron
16.11.2018, 18:28
Мне больше импонирует, так сказать, "раздельное заряжание". То есть, при записи подаем отдельную команду "принять с МПИ в буфер", передаем без ожиданий любое количесво слов от 1 до 256 включительно, затем даем команду "писать на СД", и контроллер запишет это дело по заданному адресу, с отключением и переходом в состояние "Думаю, прошу не мешать". Ну, и при чтении - даем команду "читать с СД в буфер", контроллер, опять же, отключится, прочитает блок с СД-шки, подключится снова, выдаст прерывание, и, получив команду "передать содержимое буфера на МПИ" быстренько передаст прочитанное.Это алгоритм работы контроллеров DX ( если без ДМА ) и DY ( если с ДМА ).

Можно сделать упрощённый аналог контроллера DX ( например FX ), которому вместо номеров дорожки и сектора надо передавать только номер блока, а остальную логику работы оставить без изменений. Правда, такое устройство не сможет работать с образами больше 32М, но для первого варианта реализации в эмуляторе и железе это и не особо надо.

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

AFZ
16.11.2018, 21:27
Можно сделать упрощённый аналог контроллера DX ( например FX ), которому вместо номеров дорожки и сектора надо передавать только номер блокаНа эту тему два возражения. Одно непринципиальное - мне сложно сменить адрес, он в "заглушке", за 5 минут я его не сменю, так, что лучше бы оставить 177720. Второе - принципиальное. А что делать с нормальным DX-ом? 1201.01 или .02 плюс ГМД-7012 - вполне работоспособная конфигурация, мою железяку, получается, в неё не воткнуть?

Нет, я не настаиваю на своем варианте, может быть, есть что-то лучше?

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

Кроме того, мне нравится способ передачи параметров у HD.

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


что лучше бы оставить 177720.Нет, на этом я тоже не настаиваю. Вообще, ИМХО, приспосабливать HD, устройство, изначально запланированное на DMA - неважно, реальный, или мгновенный, к работе в PIO-mode было ошибкой. В PIO-mode должно работать другое устройство, пусть и с похожим способом передачи параметров, но другое. Так, что, вероятно, имеет смысл изменить адрес. Если наш проект когда-нибудь дорастёт до DMA, тогда можно будет вернуться к идее реализации HD в железе, а пока надо делать что-то другое. ИМХО.

Hunta
16.11.2018, 22:18
к работе в PIO-mode было ошибкой. В PIO-mode должно работать другое устройство, пусть и с похожим способом передачи параметров, но другое
PDP - это устройство с ограниченным ресурсом - памятью. Да и быстродействие тоже ограниченный ресурс.
Значит, надо делать так, что бы драйвер был максимально простым и не затратным. Блок параметров в памяти, а не регистры устройства, PIO, а не DMA - это напрасный расход ресурсов и затраты.
Уже две ошибки, а не одна.

AFZ
17.11.2018, 06:56
Блок параметров в памяти, а не регистры устройства, PIO, а не DMA - это напрасный расход ресурсов и затраты. Угу. Только вот готовый макет, пригодный для работы в PIO-mode у меня есть, стоит рабочий, включай, загружай в МК софтину, переключайся в окно VT52 и пробуй, как работает. А вариант с DMA я не потянул, хоть и собирался сначала - я с трудом справился с имеющимся десятком микросхем, зрение не позволяет, а для DMA надо два десятка!

Ты сделай такой макет с DMA, я с удовольствием подключусь к твоему проекту. А так...

Да и не так страшен черт, как его малюют. Да, тот самый "мгновенный" HD занимает всего 88 слов. Тот же, допустим, MY - 145. А творение Патрона в "безблочном" PIO-mode - порядка 130. Ну, пусть для разбиения на блоки понадобится еще 2-3 десятка команд, грубо - 50 слов. Итого 180. Тот же DW занимает около 500 слов, а MX вообще 2 тыс. с гаком! Сильно тебя напрягут потерянные 100 слов на драйвере SD-шки в PIO-mode? Да не морочь голову!

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

Hunta
17.11.2018, 10:09
Ты сделай такой макет с DMA,
Как только получится купить осциллограф (один раз загадывал, больше загадывать не буду) - займусь.


я с удовольствием подключусь к твоему проекту
Он будет на FPGA

AFZ
18.11.2018, 21:11
Тады ой! (с) То есть из моего проекта ты выходишь? Ладно, придется собрать FATFS из кубиков, оно, вроде-бы, как-то работает. Коряво, конечно, но для сельской местности сойдет!..

Только учти, что FPGA - это, конечно, круто, но воевать с писюшной ФС ты на нем конкретно устанешь, а ерунда по типу WD, когда непонятно, что делать с полученным диском на писюке - это несерьезно. Диск PDP-11 на писюшном носителе должен быть файлом в писюшной ФС. Согласись, круто, когда сделал в эмуляторе что-то работающее, залил файл-образ диска из под этого эмулятора на носитель для PDP-11, включил, и оно работает. Я тут почитал, с каким геморроем народ разбирается с теми самыми WD...

Так, что правильным решением будет все-таки ставить туда какой-то МК, на котором соберётся FATFS, а на FPGA делать только интерфейс между МПИ и этим МК. Это, конечно, идеальный вариант.

Hunta
18.11.2018, 21:47
То есть из моего проекта ты выходишь
Вообще то - не собирался. Одно другому не мешает, да и начнётся мой проект даже не через месяц. Как я уже писал - трудно заниматься железом без осциллографа.
Просто я действительно пока не понимаю, чем могу сейчас помочь. Написать код-пример работы с файлом с использованием API из FATFS? Готековская прошивка - весьма неплохой и уже готовый пример. Единственно но - автор не использует Keil. Но смотреть пример работы с FATFS это не должно помешать.

FPGA - это, конечно, круто, но воевать с писюшной ФС ты на нем конкретно устанешь
Кто сказал, что воевать с ФС будет FPGA? В том то и прелесть FPGA, что на нём можно собрать ЧТО УГОДНО.

ерунда по типу WD, когда непонятно, что делать с полученным диском на писюке
Может, кому и не понятно, но у меня проблем это не вызывало. Ибо есть эмулятор PDP и не один. Но авторы WD реализовали одну "ценную" вещь. С этого всё и завертелось.

Я тут почитал, с каким геморроем народ разбирается с теми самыми WD
У меня не WD, а WQ, в котором авторы НЕ сделали одну очень "ценную вещь" - таблицу разделов. Всё. (почти) Все проблемы по работе с носителем на PC решены. Ибо, как я уже писал - есть эмуляторы.

правильным решением будет все-таки ставить туда какой-то МК
На МК есть только одна полезная вещь. Пакет FATFS, показывающий - как работать с FAT или FAT32. И то, только потому, что Windows на PC (!!) умеет работать с FAT или FAT32 системой. В остальном МК бесполезен.
И да, я почитал, с каким трудом рождается интерфейс обмена инфы между PDP и МК. Потому что то, что надо - на МК нет, а то что есть - по большей части не надо.
Автор PDP-2011, конечно, не реализовал поддержку на SD карте файловой системой, зато он показал - как SD карта может прикидываться другим устройством, о котором знает PDP. Так что теперь можно делать аналоги любых родных для PDP (или их аналогов) устройств - с точностью до работы контроллеров. Осталось только сделать удобной работу с SD картой для Windows на PC. Мысли на этот счёт есть. Времени свободного мало. И мышление с программистского на железячное надо научиться переключать. Подвижки есть :)

на FPGA делать только интерфейс между МПИ и этим МК

Это, конечно, идеальный вариант
А потом набраться знаний - и избавиться от МК :)

AFZ
18.11.2018, 22:37
Вообще то - не собирался. Тогда все замечательно.


На МК есть только одна полезная вещь. Пакет FATFS, показывающий - как работать с FAT или FAT32. И то, только потому, что Windows на PC (!!) умеет работать с FAT или FAT32 системой. В остальном МК бесполезен.Да, конечно. Только вот большинство народа пользуется именно виндой. Впрочем, линюхи ведь тоже умеют работать с ФАТами. Ну, и главное - это то, что SD-шки изначально идут с ФАТом.


Кто сказал, что воевать с ФС будет FPGA? В том то и прелесть FPGA, что на нём можно собрать ЧТО УГОДНО. Нет, конечно, там вполне можно прописать еще один процессор PDP-11. Только вот соберется ли под него FATFS ? Свежих Си под него ведь нет...


И да, я почитал, с каким трудом рождается интерфейс обмена инфы между PDP и МК. Да ничего особо сложного нет. Да, Кейл генерит не очень хороший код, который не успевает правильно поймать адрес в момент перехода К СИА Н из высокого в низкий. Можно было бы написать это дело на асме, но я плюнул и поймал это дело аппаратно - всего три м/с, довесок так сказать. После чего все заработало в лучшем виде. Я еще планировал делать аппаратную "заглушку" на тему ДПНМ, но сегодня почитал про внешние прерывания STM32 и спокойно сделал эту заглушку софтово. Завтра с утреца напишу еще кусочек, может успею сделать чтение с псевдодиска.


Просто я действительно пока не понимаю, чем могу сейчас помочь. Написать код-пример работы с файлом с использованием API из FATFS? Готековская прошивка - весьма неплохой и уже готовый пример. Угу. Посмотрел. Что-то там до фига всякого, вникать в это совершенно не хочется. К тому же SD-шка там, вроде-бы, подключена по SPI, а мне хотелось бы по SDIO, хот это и некритично. Если бы ты выдрал и прислал мне готовый кусок для работы с FATFS, это бы мне помогло.

К тому же есть еще один аспект, про который пока не вспоминали. Ограниченное количество записей на SD-шку. Пусти простое копирование под RT-11 и посчитай, сколько раз там переписывается оглавление. Такими темпами ресурс SD-шкиной флеши будет съеден очень быстро. Поэтому очень бы желательно организовать кэширование с отложенной записью, это сразу сократит количество перезаписей оглавлений раз в 10. Для этого, правда, придется приделать к контроллеру какой-то источник питания - батарейку, или ионистор, чтобы при выключении ДВК-шника успеть сбросить кэши.

Да и еще есть о чем подумать...

Hunta
18.11.2018, 22:59
там вполне можно прописать еще один процессор PDP-11
А можно - и не PDP-11

Если бы ты выдрал и прислал мне готовый кусок для работы с FATFS
Ок, постараюсь - быстро только не обещаю...

AFZ
18.11.2018, 23:08
Угу, пока оно не горит. На "прям сейчас" у меня есть заглушка, потом соберу из кубиков, как получится, ну а заполируем с тем, что ты пришлешь.

AFZ
20.11.2018, 14:00
А я основательно продвинулся. Написал всё для минимального набора команд HD T4. Добавил две команды: RDbuf = 015 и WRbuf = 016. По команде RDbuf с адреса 177722 последовательно выдаются все 256 слов блока. По команде WRbuf данные, записываемые в 177722, последовательно заносятся в буфер. Команды CmdRea и CmdWri запускают операции чтения и записи, при записи остаток буфера будет заполнен нулями. Если в буфер ничего не заносилось, запишется целый сектор нулей. То есть, заполненность буфера определяется по последнему сеансу записи в него (WRbuf).

И даже отладил чтение. В процессе отладки нашел одну ошибку у себя в программе МК и целых 4 в тестовой программе на ДВК - я ее писал на скорую руку, да и отвык я программировать на Макро-11...

Кстати, оценил скорость чтения SD-карты. У меня в тесте был свободен R5, так я сделал ожидание чтения следующим образом.

MOV #77777,R5
MOV #CmdRea,@R0 ; передать команду чтения сектора
1$: DEC R5
TSTB @R0
BPL 1$ Так вот, после окончания ожидания в R5 оказалось число 077703, разница 074 (60). Получается, этот цикл выполнился 60 раз, и сектор был прочитан в буфер. Т.е. выполнилось 240 циклов шины. Передача сектора из буфера контроллера в память ДВК займет минимум 256 х 3 = 768 циклов шины. Видно, что SD-шка читается быстро, но не мгновенно. И имеет смысл поработать на тему совмещения времени чтения SD-шки и передачи, т.е. один сектор прочитали и передаем, а второй в это время читается во второй буфер.

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

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

Да, а еще надо заняться прерываниями. Надеюсь, что прерывание у меня получится без аппаратных "довесков". Но продвижение по-любому весьма заметное...

AFZ
23.11.2018, 11:49
Докладываю. Макет, вроде-бы, работает. Осталось сделать обработку ошибок, пока у меня по каждой обнаруженной ошибке программа зацикливает на отдельном while(1); дальше смотрю в отладчике. Кое-что еще не совсем гладко, опять же, и уровень HD минимальный, но все это решается программированием, аппаратура, вроде-бы, устаканилась. Я, правда, еще не сделал прерывание, но, вроде-бы, с этим особых проблем не должно быть и дополнительной аппаратуры, вроде-бы, не надо.

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

Да, FATFS я таки собрал из кубиков. Тоже не все еще понятно, но, вроде-бы, работает. Только вот выяснилось, что эта FATFS жрет ресурсы МК, как свинья помои! То есть, по-хорошему, надо бы сменить МК. И F407 в этом свете выглядит очень приличным решением. Так, что можно не жалеть о сборке проекта из кубиков - делать для 407-го что-то, помимо кубиков, это закат Солнца вручную!..

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

Patron, как, будем считать это устройство разновидностью HD или нет? Мне сменить адрес особых проблем нет - он у меня в одном месте. На мой взгляд, HD изначально планировалось, как устройство с ПДП, так пусть оно таким и останется. А моё устройство в эту идеологию ни разу не вписывается и тянуть его за уши в один ряд с HD, ИМХО, не стоит.

Назову его, допустим, HZ (H - это от Host-based или HFS-based, а Z - понятно...), адрес/вектор сообразим. Некоторое же время спустя, если энтузиазм не иссякнет, можно будет продолжить эту разработку, используя ПДП, тогда можно будет вернуться к идее аппаратной реализации устройства HD.

Patron
23.11.2018, 14:25
будем считать это устройство разновидностью HD или нет?Если драйвер должен разбивать запрос операционки на отдельные блоки - это не HD.

Если оставить адрес и вектор как у HD, то при эмуляции такого устройства (для написания ему драйвера) надо будет грузиться с чего-то кроме HD ( например с DW ) - в принципе это не проблема.

AFZ
23.11.2018, 15:44
Я бы, как раз, предпочел "не HD", Адрес сменю без вопросов, он у меня в одном месте. Вопрос, какой взять адрес и какой вектор?

AFZ
24.11.2018, 12:20
Ну, вот, еще продвинулся. Это ДВК-2 (ВМ2) загружается с микро-SD-шки.

ИМХО, на глаз, загрузка с uDS на этом ДВК идет быстрее, чем эмулятора с True Speed с диска DW:
@ 173000
@177724G 010002
@P 010056
@P
HD v4 Boot-I-Cold boot..

HD (177720) disk driver v4.0 2017

SL V08.00 [SW] Сторожевых С.В. 1988

RT-11SJ (Y) V05.04 G

?MON-F-Trap to 4 157536

.DIR

RT11SJ.SYS 78 16-Dec-2012 SWAP .SYS 30 25-Mar-2003
HX .SYS 6 06-May-2015 TT .SYS 2 23-Jan-1980
SL .SYS 10 28-Dec-1987 EM .SYS 4 04-Mar-2012
LD .SYS 8 18-Jan-1988 DIR .SAV 19 04-Jul-2002
PIP .SAV 30 31-Oct-1998 DUMP .SAV 9 27-Dec-1983
DUP .SAV 45 27-Dec-1983 UCL .SAV 16 18-Jan-1988
UCL .DAT 9 04-Dec-2011 HAND .SAV 8 08-Nov-2011
HANDLE.SAV 17 06-Sep-1991 EDIK .SAV 22 19-Mar-2003
DAY .SAV 4 13-Apr-2013 DESS .SAV 19 04-Mar-1994
SPEED .SAV 3 28-Nov-1992 MEMORY.SAV 2 03-Sep-1982
KLOP .SAV 13 21-Nov-1988 IND .SAV 58 19-Dec-1988
TESTMY.SAV 16 27-Dec-1988 HZ .SYS 3 24-Nov-2018
HD .SYS 3 24-Nov-2018 RESORC.SAV 25 01-Mar-2012
STARTS.COM 1 30-Dec-2014 DHRY .SAV 25 08-Feb-2015
DW .SYS 4 02-Feb-1990 MACRO .SAV 63 21-Dec-2012
CREF .SAV 6 31-Oct-1998 SYSMAC.SML 92 31-Oct-1998
LP .SYS 2 19-Dec-1988 MY .SYS 3 07-Dec-1989
MX .SYS 9 15-Dec-2012 VM .SYS 3 19-Dec-1988
RT11XM.SYS 107 19-Dec-1988 DWX .SYS 5 15-Jun-1988
MYX .SYS 3 07-Jul-1988 MXX .SYS 10 01-Sep-1989
VMX .SYS 3 17-Apr-1989 LPX .SYS 2 19-Dec-1988
LDX .SYS 8 19-Dec-1988 HDX .SYS 3 09-Feb-2016
HXX .SYS 6 09-Feb-2016 BINCOM.SAV 25 21-Apr-1998
BASIC .SAV 60 15-Feb-2015 LINK .SAV 59 31-Oct-1998
HELP .SAV 143 19-Dec-1988 K52 .SAV 54 19-Dec-1988
TESTDW.SAV 47 27-Dec-1988 TDW .SAV 51 08-Mar-1990
XONIX .SAV 13 01-Sep-1992 TETRIS.SAV 28 04-Apr-1985
DESS .HLP 26 10-Dec-1987 EDIK .HLP 32 06-May-1988
56 Files, 1352 Blocks
64115 Free blocks

.SH MEM

Address Module Words
------- ------ -----
160000 IOPAGE 4096.
157400 HD 128.
146552 RMON 2251.
001000 ..BG.. 26037.


.SH DEV

Device Status CSR Vector(s)
------ ------ --- ---------
HX Installed 177560 000
TT Installed 000000 000
SL Installed 000000 000
EM Installed 000000 010
LD Installed 000000 000
HZ Installed 177720 000
HD Resident 177720 000
DW Not installed 174000 300
LP Installed 177514 200
MY Not installed 172140 170
MX Not installed 177130 000
VM Not installed 177572 250



. Два останова в самом начале (10002 и 10056) - отладочные, я смотрел, как оно там... А Trap to 4 - это кто-то что-то хочет писать (кто-то из драйверов результаты DRSet'а), а драйвер в части записи еще не готов. Ну, а чтение все в лучшем виде.

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

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

Пока контроллер прикидывается HD, но это только пока мы с Патроном не согласуем адрес и вектор для моего контроллера.

MiX
24.11.2018, 12:22
Назову его, допустим, HZ
Лучше AZ :)

Patron
24.11.2018, 18:53
чтение все в лучшем видеТ.е. при чтении задержки невелики, что позволяет реализовать потоковое чтение.

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

AFZ
24.11.2018, 20:33
Я же выкладывал цифры. Потоковое чтение, увы, не выходит. Цикл из трех команд: 1$: DEC R5 / TSTB @R3 / BPL 1$ успевает выполниться 64 раза, прежде, чем придет сигнал готовности. К тому же я не уверен, что К СИП Н приходит сразу - там очень даже могут быть 2-3-4 такта задержки, т.е. цикл шины по добыванию CSR моей железки может быть растянут. Надо будет все-таки вытащить из кладовки осцилограф и глянуть. Хотя это и немного - переслать тот же блок в память - это 256 повторений, хоть цикл и на команду короче.

А с записью все еще хуже - аналогичный цикл при записи блока успевает выполниться 425 раз. То есть запись идет заметно дольше, чем пересылка блока из ДВК в контроллер.Хотя, опять же, все это относительно - время перемещения головок винчестера должно быть сильно больше - у меня получается порядок единиц миллисекунд, а головки бегут десятки мс. Но, как я и говорил, задержки хоть и невелики, но сильно больше тайм-аута МПИ.

Ладно, это лирика. А теперь серьезный вопрос. Какие мне взять адрес и вектор для этого чуда? Мне, в принципе, все равно, что прописывать в ПЗУху и программу. А что именно?

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

Начал продумывать прерывания, увы, программно, опять же, похоже, не успеваю, придется лепить аппаратный довесок. Вроде-бы укладываюсь в один дополнительный триггер 7474 aka 155ТМ2. Хвала всевышнему,один свободный толерантный вывод в GPIOA у меня остался...

AFZ
26.11.2018, 12:36
Ну вот, в варианте без прерываний работает в полном объеме.
@ 173000
@177724G
HD v4 Boot-I-Cold boot..

HD (177720) disk driver v4.0 2017

SL V08.00 [SW] Сторожевых С.В. 1988

RT-11SJ (Y) V05.04 G

.SET USR NOSWAP

.SET EXIT NOSWAP

.SET TT SCOPE

.SET SL ON

.DAY
Время Дата
00:00:00 25-Ноя-2018, Воскресенье

.SH MEM

Address Module Words
------- ------ -----
160000 IOPAGE 4096.
157276 HD 161.
146450 RMON 2251.
142132 SL 1127.
132066 USR 2066.
001000 ..BG.. 22811.


.SH CONF

RT-11SJ (Y) V05.04 G
Booted from HD0:RT11SJ

USR is set NOSWAP
EXIT is set NOSWAP
KMON is set NOIND
TT is set NOQUIET
ERROR is set ERROR
SL is set ON
EDIT is set KED
KMON nesting depth is 3

LSI 11 or PDP 11/03 Processor
56KB of memory
Extended Instruction Set (EIS)
Floating Instruction Set (FIS)
50 Cycle System Clock

No SYSGEN options enabled


. Сейчас размышляю над аппаратными "довесками" на предмет прерываний, а, заодно, и аппаратной сигнализации "Думаю, прошу не мешать" - программная реализация этого дела мне что-то не нравится, а аппаратная - плюс пара ЛЭ к имеющемуся оборудованию.

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

Да, машинка, если что - 1201.02 (ВМ2).

Patron, form, так какой адрес мне взять? 177710 ? 177730 ? А вектор? Я ведь ориентируюсь только в нашем оборудовании, и то не всём, а оригинального DEC'овского вообще не знаю.

Patron
26.11.2018, 16:30
так какой адрес мне взять? 177710 ? 177730 ? А вектор?Базовый адрес 177730, вектор 174

AFZ
26.11.2018, 18:49
ОК. Как только достану из кладовки 386-ю машинку с "Кротом", сразу перепишу. Спасибо!

AFZ
12.12.2018, 21:05
Ну вот, вроде-бы завёл.

000002
@177734G
AZ v4 Boot-I-Cold boot..

AZ (177730) disk driver v4.0 2018

SL V08.00 [SW] Сторожевых С.В. 1988

RT-11SJ (Y) V05.04 G

.SET USR NOSWAP

.SET EXIT NOSWAP

.SET TT SCOPE

.SET SL ON

.DAY
Время Дата
00:00:00 12-Дек-2018, Среда

.SH M

Address Module Words
------- ------ -----
160000 IOPAGE 4096.
157304 AZ 158.
146456 RMON 2251.
142140 SL 1127.
132074 USR 2066.
001000 ..BG.. 22814.


.SH CONF

RT-11SJ (Y) V05.04 G
Booted from AZ0:RT11SJ

USR is set NOSWAP
EXIT is set NOSWAP
KMON is set NOIND
TT is set NOQUIET
ERROR is set ERROR
SL is set ON
EDIT is set KED
KMON nesting depth is 3

LSI 11 or PDP 11/03 Processor
56KB of memory
Extended Instruction Set (EIS)
Floating Instruction Set (FIS)
50 Cycle System Clock

No SYSGEN options enabled


.SH SU

LD0 is AZ0:LD001.DSK[5000.]


.DIR LD0:
12-Dec-2018

0 Files, 0 Blocks
4962 Free blocks

.DIR
12-Dec-2018
RT11SJ.SYS 78 16-Dec-2012 SWAP .SYS 30 25-Mar-2003
HX .SYS 6 06-May-2015 TT .SYS 2 23-Jan-1980
SL .SYS 10 28-Dec-1987 EM .SYS 4 04-Mar-2012
DIR .SAV 19 04-Jul-2002 PIP .SAV 30 31-Oct-1998
DUMP .SAV 9 27-Dec-1983 DUP .SAV 45 27-Dec-1983
UCL .SAV 16 18-Jan-1988 UCL .DAT 9 04-Dec-2011
HAND .SAV 8 08-Nov-2011 HANDLE.SAV 17 06-Sep-1991
EDIK .SAV 22 19-Mar-2003 DAY .SAV 4 13-Apr-2013
DESS .SAV 19 04-Mar-1994 AZ .SYS 3 12-Dec-2018
MEMORY.SAV 2 03-Sep-1982 KLOP .SAV 13 21-Nov-1988
IND .SAV 58 19-Dec-1988 TESTMY.SAV 16 27-Dec-1988
HZ .SYS 3 24-Nov-2018 SPEED .SAV 3P 26-Apr-1989
RESORC.SAV 25 01-Mar-2012 STARTS.COM 1 30-Dec-2014
DHRY .SAV 25 08-Feb-2015 HD .SYS 3 25-Nov-2018
DW .SYS 4 02-Feb-1990 MACRO .SAV 63 21-Dec-2012
CREF .SAV 6 31-Oct-1998 SYSMAC.SML 92 31-Oct-1998
LP .SYS 2 19-Dec-1988 MY .SYS 3 07-Dec-1989
MX .SYS 9 15-Dec-2012 VM .SYS 3 19-Dec-1988
RT11XM.SYS 107 19-Dec-1988 DWX .SYS 5 15-Jun-1988
MYX .SYS 3 07-Jul-1988 MXX .SYS 10 01-Sep-1989
VMX .SYS 3 17-Apr-1989 LPX .SYS 2 19-Dec-1988
LDX .SYS 8 19-Dec-1988 HDX .SYS 3 09-Feb-2016
HXX .SYS 6 09-Feb-2016 BINCOM.SAV 25 21-Apr-1998
BASIC .SAV 60 15-Feb-2015 LINK .SAV 59 31-Oct-1998
HELP .SAV 143 19-Dec-1988 K52 .SAV 54 19-Dec-1988
TESTDW.SAV 47 27-Dec-1988 TDW .SAV 51 08-Mar-1990
XONIX .SAV 13 01-Sep-1992 TETRIS.SAV 28 04-Apr-1985
DESS .HLP 26 10-Dec-1987 EDIK .HLP 32 06-May-1988
LD001 .DSK 5000P 25-Nov-2018 KOMP8 .SAV 5 21-May-1987
LD .SYS 8 18-Jan-1988
59 Files, 6360 Blocks
59107 Free blocks

.DIR AZ1:
12-Dec-2018
TT .SYS 2P 12-Mar-1985 MY .SYS 3P 27-Dec-1988
KZ .SYS 3P 22-Mar-1990 DW .SYS 4P 27-Dec-1988
VM .SYS 3P 31-Dec-1988 SL1 .SYS 10P 06-Mar-1987
LD .SYS 8P 08-Dec-1986 RK .SYS 3P 06-Sep-1989
SL .SYS 10P 26-Oct-1988 RT11DS.SYS 72P 21-Aug-1986
SWAP .SYS 27P 25-Oct-1985 MT .SYS 4 10-Sep-1991
NL .SYS 2P 13-Oct-1982 BINCOM.SAV 24P 24-Nov-1987
KOMP8 .SAV 5 21-May-1987 FORMAT.SAV 24 25-Oct-1986
ZCHR .SAV 2 03-Feb-1990 PIP .SAV 29 12-Mar-1985
DESS .SAV 19P 24-Apr-1987 RESORC.SAV 22 30-Sep-1987
DIR .SAV 19 22-Mar-1986 LIBR .SAV 24P 24-Nov-1987
SPEED .SAV 3P 26-Apr-1989 SRCCOM.SAV 26P 24-Nov-1987
EDK .SAV 22 27-Dec-1988 DUP .SAV 45 30-Sep-1987
VRF .SAV 3 19-Apr-1984 DUMP .SAV 8 16-Jan-1988
MYFORM.SAV 5 14-Feb-1986 REG .SAV 1 05-Mar-1991
MACRO .SAV 60 12-Mar-1983 LINK .SAV 49 12-Mar-1983
QUEMAN.SAV 15 12-Mar-1983 BAS .SAV 45P 20-Jan-1990
DMP .SAV 2 25-Sep-1985 DAY .SAV 4P 14-Feb-1986
KMATCH.SAV 5 06-Jun-1987 CREF .SAV 6P 24-Nov-1987
IVP .SAV 4 04-Apr-1992 KCGD .SAV 13 04-Oct-1989
SP21 .SAV 21 03-Jun-1985 RENDZU.SAV 23P 28-Dec-1983
XCUBE .SAV 7 06-Aug-1991 WALL .SAV 7 05-Jun-1989
BASIC .SAV 56 13-Oct-1982 HELP .SAV 161P 05-Sep-1986
PITON .SAV 8 02-Mar-1991 STAKAN.SAV 27 10-Nov-1986
SYSMAC.SML 49 29-Oct-1985 HD .SYS 3 28-Sep-2017
AZ .SYS 3 12-Dec-2018
51 Files, 1000 Blocks
64467 Free blocks

.
Вариант без прерываний, чистая "прополка".

Основной МК, как я и говорил, 100-ногий STM32F103VET6, он сам разбирается с шиной МПИ, принимает с нее команды, выдает состояние, обменивается данными, и, при включенной оптимизации по скорости, вполне все успевает. Кроме, естественно, обмена с SD. Поэтому, на время обмена с СД-шкой, я подключаю заглушку "Думаю, прошу не мешать".

Её я пока сделал на втором STM32, попроще - STM32F103C8T6, 48-ногая дешевка. Оно, вроде-бы, работает, но мне активно не нравится, надо будет сделать или аппаратную, или на мелкой ПЛИС, так, что вариант еще не окончательный. Но работает.

Пока поддерживаются два псевдодиска - AZ0: и AZ1:, представленные на СД-шке двумя файлами типа dsk. По-простому, залил на СД-шку два файл-образа с RT-11, залил драйвер AZ.SYS на файл-образ HX.DSK, загрузился с HX:, скопировал AZ.SYS на диски AZ0: и AZ1:, сделал COPY/BOOT и вперед!


Рабочего DW я пока не подключал, мне нечем кормить винчестер. В моем БПС6-1, оказывается, высохли литики, пришлось переделывать и цеплять писюшный АТХ-БП, но я ему еще не доделал нормальную стабилизацию +12В, так, что винты подключать пока не хочу.

Однако, эмулятор Патрона, вроде-бы, соблюдает временнЫе характеристики DW. Так вот, "на глаз", с моего AZ загрузка RT-11 идет заметно быстрее, чем с DW в эмуляторе. Так, что, в принципе, можно не упираться на темы прерываний и DMA, и так неплохо. :)

xolod
12.12.2018, 21:55
Хотел бы такой себе собрать, а краевой разьем на плате будет для советской корзины или для DEC ковской?

Alex
14.12.2018, 10:38
Давно ждал, что кто-то нечто подобное сделает. Молодец:v2_clap2:
Ну а то, что без прерываний - так конечно получается быстрее чем с прерываниями.
Ведь обмен начинается сразу по готовности. Не уходит время на обработку прерывания.
Конечно тратятся ресурс ЦП в пустую, но для большинства конфигураций реально работающих - не велика потеря.
Для того, чтобы получить бонус от прерываний необходимо пользоваться многозадачностью и(или) асинхронным вводом-выводом. Под RT11 такое специально мало кто пишет. (ну пожалуй только при работе с другими устройствами)
А вот под RSX-11 или чем-то подобным прерывание, а то и ПДП будут иметь большой смысл.

У устройства МХ, на мой взгляд, ситуация гораздо печальнее...

AFZ
14.12.2018, 20:14
Ну а то, что без прерываний - так конечно получается быстрее чем с прерываниями.
Ведь обмен начинается сразу по готовности. Не уходит время на обработку прерывания.Тут другое. Пересылка блока из РД контроллера , т.е. из буфера в ОЗУ контроллера - 768 циклов шины МПИ

10$: MOV @R3,(R1)+
SOB R2,1$ А ожидание, пока контроллер прочитает очередной сектор с СД-шки в этот буфер, на время которого имело бы смысл выходить из драйвера и ждать прерывания - порядка 180 циклов шины, т.е. не стоит оно того. С записью хуже, но не намного - там время измеряется где-то 1000-1500 циклов шины, на такое время можно, наверное и выйти. А можно и не выходить.


А вот под RSX-11 или чем-то подобным прерывание, а то и ПДП будут иметь большой смысл. Или в TSX-11. Впрочем, не системным диском единым жива операционка... :)

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

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

Да, у меня пока не все гладко с заглушкой "Думаю, прошу не мешать". Я тут почитал всякое разное и решил-таки использовать ПЛИС. Конкретно, вроде-бы, для моих целей годится ATF22V10B, я выписал их с Али и за те полтора-два месяца, пока они доползут, хочу освоить методы сочинения прошивок для них. Отписался тут (почти) рядом, задал списочек вопросов, пока молчат, как партизаны на допросе. :)

Alex
17.12.2018, 09:36
Ведь всё равно скорее всего же нет такого оборудования, которое требует моментальной реакции на прерывание да сохранения-обработки полученных данных, а для копирования образов или отдельных файлов - просто шикарно :v2_dizzy_snowball:

AFZ
17.12.2018, 12:08
Ведь всё равно скорее всего же нет такого оборудования, которое требует моментальной реакции на прерывание А не суть важно. Оно исполняется на системном уровне при открытых прерываниях, приоритет выше, чем у всех заданий, но прерывания открыты. Примерно там же, где и .FORK.

AFZ
27.01.2019, 04:13
Докладываю. Добился безукоризненной работы контроллера в варианте без прерываний. Заглушку сделал аппаратную, 3 м/с: селектор адресов 177730-177736 (2764), регистр выбора контроллера по МПИ и младших битов адреса (1533ИР22) и логика сигналов выбора и выдачи К СИП Н (1533ЛЛ1, все 4 элемента). Когда подключил эту заглушку, обнаружилась ошибка в программе основного МК - я выдавал с него сигнал "Думаю, прошу не мешать" в произвольный момент времени, заглушка отключалась мгновенно (десяток-другой НС), если в это время проходит фронт (вернее, спад) К СИА Н и я его, естественно, пропускаю, итого - trap to 4. Дождался высокого уровня на К СИА Н и только после этого снял ДПНМ, и все заработало, как часы. В варианте с заглушкой на F103C8T6 заглушка отключалась долго, в результате trap to 4 возникал изредка и я грешил на общее несовершенство мира, а надо было искать ошибку в программе. :)

Работает очень шустро. Файл 5000 блоков с AZ0: на AZ1: копируется 44 сек, на NL: - 18 сек. Это раза в три (навскидку) быстрее, чем DW: и, вроде-бы, в 1.5 раза быстрее, чем WQ:

Сейчас размышляю на тему прерываний. Программно на STM32 это точно не получится, опять же нужен аппаратный довесок, опять огород в 3-4 м/с. Варианты:
1. Плюнуть и обойтись без прерываний.
2. Сделать это дело на рассыпухе.
3. Сделать это дело на ПЛИС.

Первый вариант, в общем-то, не так и плох. Прерывания во время прополки контроллера открыты, так, что потерь быть, вроде-бы, не должно. Конечно, если в оперативном разделе FB/XM монитора запустить копирование внутри SD-шки, то фоновый раздел ляжет, но так, обычно, не делают. Для больших систем (RSX, TSX, конечно, будет похуже, но тоже не очень критично - не системным диском единым жива операционка, да и Time Sharing никто не отменял...

Второй - понятно. Огород. Сильно не хочется.

Третий. Большие ПЛИС я еще не освоил. Вроде бы, разобрался с GAL/ATF, но нет в жизни счастья - простым GAL16V8 и GAL22V10 не хватает ног и логических возможностей, чтобы запихнуть всё это, вместе с заглушкой, в одну м/с. Им даже на одну заглушку ног не хватает. Правда, двух ГАЛок на заглушку хватит, а на 3-й даже и контроллер прерываний можно, вроде-бы, сбацать, но три м/с - это тоже, в общем-то, огород. Да еще и ГАЛки как вылетели из страны отправления, так и (если верить отслеживанию Али) зависли где-то в воздухе... :)

В принципе, может быть, все запихнется в две ГАЛки, если одна из них будет GAL6001D, но TL866, к которому у меня есть доступ, их не шьет, в отличие от первых двух.

В общем, пока думаю...

AFZ
29.01.2019, 07:26
form, я тут начал заниматься прерываниями, и обнаружил проблему. У меня в процессе обмена с SD-шкой контроллер занят, и работает аппаратная заглушка "Думаю, прошу не мешать". Пока она у меня на рассыпухе, и у меня получилось сделать ее только на чтение CSR. Делать еще и запись - большой огород. Нет, когда приползут с Али ГАЛки, скорее всего, справлюсь, но они уже месяц, как ползут и, думаю, еще будут ползти с месяц. Так вот, при нормальной работе это по барабану - кончится длинная операция, придет прерывание, и все ОК. А вот при отмене текущей операции будет лажа - надо снять бит разрешения прерываний от моего контроллера, а CSR недоступен.

Я так мыслю, что мне в точке входа отмены операции надо будет подождать, пока контроллер завершит текущую операцию и снять бит разрешения прерываний. Но это место исполняется при открытых прерываниях и, если я буду дожидаться подключения CSR на запись, то ничего не успею сделать - прерывание произойдет сразу же, и черт его знает, что там сделается. ИМХО, проще всего, закрыть прерывания на время этого ожидания. Это, в общем-то, ИМХО, не фатально - аварийные завершения происходят достаточно редко. На ДВК все просто: MTPS #200, и вперед (у моей железки будет IRQ4). А если процессор "взрослый", без PSW на шине?

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

form
29.01.2019, 14:40
как в драйвере процессорно-независимо закрыть прерывания.
Самое простое - использовать макрокоманду .MTPS - она, не трогая регистров, вызывает подпрограмму которая или делает MTPS, или MOV ...,@#PS (код патчится во время загрузки).

Если критичны пара MOV и один JSR перед собственно командой - можно патчить код драйвера при загрузке (работает только в 5.2 и новее), опираясь на бит LSI$ в слове $CONFG в RMON.

Как вариант, просто использовать команду MTPS, забив за процы где ее нет (навскидку мне известен только один такой - Э100/25).

AFZ
29.01.2019, 15:03
Как вариант, просто использовать команду MTPS, забив за процы где ее нет (навскидку мне известен только один такой - Э100/25).Если только Э-100/25, то, скорее всего, забью. Она же UNIBUS-ная? А мой контроллер только под МПИ/Q-Bus, вряд ли я стану его переделывать под UNIBUS.

form
29.01.2019, 15:14
Она же UNIBUS-ная?
Да.

Собственно насчет MTPS/MFPS в Э100/25 уверен не на 100%, но на 99% - память подсказывает, что я проверял, но времени много прошло. Ну а в описании команд процессора точно нету.

В любом случае если где еще нету - это наверняка все UNIBUS машины.

Команда MTPS в отличие от MOV ...,@#PS не работает в пользовательском режиме, но для драйвера это неактуально: он всегда в KM работает.

AFZ
30.01.2019, 07:58
Пока ГАЛки машут крылышками :) (я же говорил, что они вылетели из Китая и где-то зависли), решил сделать прерывания на 559ВН1. Достал из кладовки м/с, достал панельку, достал макетку, примерился и сел рисовать в любимом Оркаде DC003. Нарисовал, пригляделся к ней внимательнее и ужаснулся: у DC003 18 ног, а у ВН1 - 20!

Срочно полез искать что-нибудь, нашел 5-й том Нефедова, подписал на DC003 ножки ВН1, потом перешел на следующую страницу Нефедова и увидел, что ноги 10 и 11 не подключены! То есть, у тех наших ребят, которые цельно тянули DC003, в номенклатуре не оказалось 18-ногого кузова и они, по-простому, запихали этот кристалл в 20-ногий, бросив ноги 10 и 11, я правильно понял? Нефедов в этом месте не ошибается?

AFZ
23.02.2019, 15:40
Ну, вот и все. Работа с железом по этому проекту закончена. На макете. Схема готова, плату будет разводить и заказывать наш коллега СуперМакс. Делать будем для МПИ, Для Q-Bus, желательно, сначала попробовать на макетке. Ну, или, когда оно у нас пойдет в МПИ-варианте, то воткнуть его через переходник Q-Bus-МПИ.

С самого начала мы собирались работать над проектом втроем: я, Хунта и СуперМакс: я сочиняю схему и программную часть работы с МПИ/Q-Bus, Хунта - программную часть работы с микро-SD, Макс по моей схеме делает плату. Увы, Хунта из нашего проекта вышел - нашел себе занятие поинтереснее, с FPGA. Поэтому работа с файл-образами на карточке осталась в минимальном варианте - два файла на одной карточке (два псевдодиска, AZ0: и AZ1: ), никаких динамических переназначений, имена файл-образов псевдодисков жестко прописаны в программе микроконтроллера. Впрочем, всё это никак не завязано на железо, соответствующая часть программы легко может быть дописана/переписана и заменена прямо на готовой плате.

Прерывания "в железе" я так и не проверил - макет весь опутан проводами, с ним стало тяжело работать. Лезть подпаивать новые провода к макетке, рискуя что-нибудь оторвать - никакого желания. А теоретически - 559ВН1 aka DC-003 подключена по стандартной схеме, все должно работать.

form
23.02.2019, 15:51
Для Q-Bus, желательно, сначала попробовать на макетке.
У меня есть 5 макеток Q-Bus буржуйского покроя.

AFZ
23.02.2019, 16:13
Пришлось повоевать с загрузчиком. Первоначально я собирался сделать его на основе того самого приема из МПСиС с MOV -(R7),R0 - MOV -(R7),(R0)+, но всё было неотлаженным и в таком варианте было сложно понять что не так и где ошибка или недоработка, так я переиграл это дело на три ячейки регистров контроллера - поначалу, для подстраховки, с адреса 177734 выдавался код 777 (BR .), потом 775 (BR .-2), при этом с адреса 177730 в первый раз после перехода выдавался код 012700, а с адреса 177732 код 10000 - адрес расположения загрузчика в памяти (т.е MOV #10000,R0), а далее - с 177730 код 012720 и, с 177732 - код очередного слова загрузчика (MOV #<код>,(R0)+ и в конце, после передачи всего загрузчика - коды 137 и 10000 (JMP @#10000). С адреса 177734 при этом все время передавался код 775 - переход на 177730.

Все великолепно работало. На 1201.02, т.е. на ВМ2. По идее, оно должно точно так же работать на ВМ1 и на Э-60. Потом я таки вставил 1201.04 и попробовал на ней. Как говорит молодежь, "Ага, щаззз!" Во-первых, отказалась работать 2764, на которой у меня был дешифратор адресов контроллера. В общем-то, неудивительно. Удивительно, как она работала на ВМ2, ведь у нее заявлено время выборки 180 нс, тогда, как адресная часть цикла МПИ - 100 нс. Я уже было опустил руки, но тут, наконец-то, из Китая долетели Галки, конкретно - GAL16V8D и я, все забросив, сделал плату новой заглушки - на Галках, некоторое время воевал с ее подключением, добил. Заработало все, кроме загрузчика. Вставляю ВМ2 - загрузчик работает, вставляю ВМ3, загрузчик валится.

Я уже собрался просить помощи клуба, но решил сначала, все-таки попробовать тот прием из МПСиС, благо, аппарат для написания таких программ был наработан на загрузчике с ВМ2. И - о чудо! Загрузчик заработал. По всей видимости, это что-то, связанное с предвыборкой и конвейером, которые сбрасываются при прямых манипуляциях с R7 (PC) и не сбрасываются при последовательном исполнении программы.

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

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


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

form
23.02.2019, 17:11
Нам ее пока некуда сунуть. А у тебя, вроде-бы, и переходники были?
Не, переходников не было. У Andrey_Ak вроде были. Вернее не переходники - удлинители, ереходник можно было бы сделать.

MM
23.02.2019, 17:23
связанное с предвыборкой
ВМ3 предвыбирает 1 или 2 слова после фактического окончания программы, зависит от текста самой программы.
Точнее это можно установить в пульте МС1201.03 для адресов программы 157700 и выше.

AFZ
23.02.2019, 17:51
Точнее это можно установить в пульте МС1201.03 Для ВМ3 оно уже неактуально - загрузчик на ВМ3 весело влетает, куда положено. Вопрос, как оно будет на фирменной технике? И, кстати, если оно пойдет на наших клонах фирмЫ, это же будет достаточно для утверждения, что на фирмЕ оно тоже пойдет?

Отсюда еще вопрос: есть ли у народа рабочие машинки на М6 и М8 ? Чтобы сунуть этот контроллер в них...

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

Вот как оно работает...


***** ДОСТУПНОЕ ОЗУ - 1 M *
@ 001000
@7777777777736G
AZ v4 Boot-I-Cold boot..

AZ (177730) disk driver v4.0 2018

SL V08.00 [SW] Сторожевых С.В. 1988

RT-11SJ (Y) V05.04 G

.SET USR NOSWAP

.SET EXIT NOSWAP

.SET TT SCOPE

.SET SL ON

.DAY
Время Дата
00:00:00 23-Фев-2019, Суббота

.DIR
23-Feb-2019
RT11SJ.SYS 78 16-Dec-2012 SWAP .SYS 30 25-Mar-2003
TT .SYS 2 23-Jan-1980 SL .SYS 10 28-Dec-1987
EM .SYS 4 04-Mar-2012 HX .SYS 6 06-May-2015
NL .SYS 2P 13-Oct-1982 DIR .SAV 19 04-Jul-2002
PIP .SAV 30 31-Oct-1998 DUMP .SAV 9 27-Dec-1983
DUP .SAV 45 27-Dec-1983 UCL .SAV 16 18-Jan-1988
UCL .DAT 9 04-Dec-2011 HAND .SAV 8 08-Nov-2011
HANDLE.SAV 17 06-Sep-1991 EDIK .SAV 22 19-Mar-2003
DAY .SAV 4 13-Apr-2013 DESS .SAV 19 04-Mar-1994
AZ .SYS 3 12-Dec-2018 MEMORY.SAV 2 03-Sep-1982
KLOP .SAV 13 21-Nov-1988 IND .SAV 58 19-Dec-1988
TESTMY.SAV 16 27-Dec-1988 HZ .SYS 3 24-Nov-2018
SPEED .SAV 3P 26-Apr-1989 RESORC.SAV 25 01-Mar-2012
STARTS.COM 1 30-Dec-2014 DHRY .SAV 25 08-Feb-2015
HD .SYS 3 25-Nov-2018 DW .SYS 4 02-Feb-1990
MACRO .SAV 63 21-Dec-2012 CREF .SAV 6 31-Oct-1998
SYSMAC.SML 92 31-Oct-1998 LP .SYS 2 19-Dec-1988
MY .SYS 3 07-Dec-1989 MX .SYS 9 15-Dec-2012
VM .SYS 3 19-Dec-1988 RT11XM.SYS 107 19-Dec-1988
DWX .SYS 5 15-Jun-1988 MYX .SYS 3 07-Jul-1988
MXX .SYS 10 01-Sep-1989 VMX .SYS 3 17-Apr-1989
LPX .SYS 2 19-Dec-1988 LDX .SYS 8 19-Dec-1988
HDX .SYS 3 09-Feb-2016 HXX .SYS 6 09-Feb-2016
BINCOM.SAV 25 21-Apr-1998 BASIC .SAV 60 15-Feb-2015
LINK .SAV 59 31-Oct-1998 HELP .SAV 143 19-Dec-1988
K52 .SAV 54 19-Dec-1988 TESTDW.SAV 47 27-Dec-1988
TDW .SAV 51 08-Mar-1990 XONIX .SAV 13 01-Sep-1992
TETRIS.SAV 28 04-Apr-1985 DESS .HLP 26 10-Dec-1987
EDIK .HLP 32 06-May-1988 LD001 .DSK 5000P 25-Nov-2018
KOMP8 .SAV 5 21-May-1987 LD .SYS 8 18-Jan-1988
LD1HX .DSK 5000P 25-Jan-2019 LD003 .DSK 5000P 24-Apr-1992
62 Files, 16362 Blocks
49104 Free blocks

.SH C
?KMON-F-Ambiguous option

.SH CONF

RT-11SJ (Y) V05.04 G
Booted from AZ0:RT11SJ

USR is set NOSWAP
EXIT is set NOSWAP
KMON is set NOIND
TT is set NOQUIET
ERROR is set ERROR
SL is set ON
EDIT is set KED
KMON nesting depth is 3

PDP 11/34 Processor
1024KB of memory
Extended Instruction Set (EIS)
Memory Management Unit

No SYSGEN options enabled


.SH MEM

Address Module Words
------- ------ -----
160000 IOPAGE 4096.
157304 AZ 158.
146456 RMON 2251.
142140 SL 1127.
132074 USR 2066.
001000 ..BG.. 22814.


.BO AZ1:

AZ (177730) disk driver v4.0 2018
SL V08.00 [SW] Сторожевых С.В. 1988


RT11-SJ (DS) V05.01

Date [24-APR-92]
24-APR-92, Пятница

SET EXIT NOSWAP
SET USR NOSWAP
SET TT SCOPE
LO LD
AS LD3 DK
LO SL
AS LD2 C
SET SL ON
! < UNUSED >


Assignments:
Symbol Status Value
------ ------ -----
^I auto DIR/FU/BL
? EDK
> /NOOBJ
^ /LIS:TT:
; auto DIR/FU/BL SY:
^\ auto ,C:(SPEIS,CXLIB,CMLIB)/BOT:4000
^V auto VT52
^N LINK
^A MAC
^L auto SET SL LET
^_ auto AS LD1 DK
< auto AS LD4 DK
] /SH:TTM
[ /NOSH:BEX
^T auto +LD1:ZML/LIB
---------------------
Empty bytes: 121.

LD3> SH SU

LD3 IS AZ1:LD003.DSK[5000.]


LD3> DIR
24-Apr-92
?DIR-F-Invalid directory

LD3> INI LD3:
LD3:/INITIALIZE; ARE YOU SURE? Y

LD3> COP/SY/EXC AZ0:*.DSK LD3:
Files copied:
AZ0:RT11SJ.SYS to LD3:RT11SJ.SYS
AZ0:SWAP.SYS to LD3:SWAP.SYS
AZ0:TT.SYS to LD3:TT.SYS
AZ0:SL.SYS to LD3:SL.SYS
AZ0:EM.SYS to LD3:EM.SYS
AZ0:HX.SYS to LD3:HX.SYS
AZ0:NL.SYS to LD3:NL.SYS
AZ0:DIR.SAV to LD3:DIR.SAV
AZ0:PIP.SAV to LD3:PIP.SAV
AZ0:DUMP.SAV to LD3:DUMP.SAV
AZ0:DUP.SAV to LD3:DUP.SAV
AZ0:UCL.SAV to LD3:UCL.SAV
AZ0:UCL.DAT to LD3:UCL.DAT
AZ0:HAND.SAV to LD3:HAND.SAV
AZ0:HANDLE.SAV to LD3:HANDLE.SAV
AZ0:EDIK.SAV to LD3:EDIK.SAV
AZ0:DAY.SAV to LD3:DAY.SAV
AZ0:DESS.SAV to LD3:DESS.SAV
AZ0:AZ.SYS to LD3:AZ.SYS
AZ0:MEMORY.SAV to LD3:MEMORY.SAV
AZ0:KLOP.SAV to LD3:KLOP.SAV
AZ0:IND.SAV to LD3:IND.SAV
AZ0:TESTMY.SAV to LD3:TESTMY.SAV
AZ0:HZ.SYS to LD3:HZ.SYS
AZ0:SPEED.SAV to LD3:SPEED.SAV
AZ0:RESORC.SAV to LD3:RESORC.SAV
AZ0:STARTS.COM to LD3:STARTS.COM
AZ0:DHRY.SAV to LD3:DHRY.SAV
AZ0:HD.SYS to LD3:HD.SYS
AZ0:DW.SYS to LD3:DW.SYS
AZ0:MACRO.SAV to LD3:MACRO.SAV
AZ0:CREF.SAV to LD3:CREF.SAV
AZ0:SYSMAC.SML to LD3:SYSMAC.SML
AZ0:LP.SYS to LD3:LP.SYS
AZ0:MY.SYS to LD3:MY.SYS
AZ0:MX.SYS to LD3:MX.SYS
AZ0:VM.SYS to LD3:VM.SYS
AZ0:RT11XM.SYS to LD3:RT11XM.SYS
AZ0:DWX.SYS to LD3:DWX.SYS
AZ0:MYX.SYS to LD3:MYX.SYS
AZ0:MXX.SYS to LD3:MXX.SYS
AZ0:VMX.SYS to LD3:VMX.SYS
AZ0:LPX.SYS to LD3:LPX.SYS
AZ0:LDX.SYS to LD3:LDX.SYS
AZ0:HDX.SYS to LD3:HDX.SYS
AZ0:HXX.SYS to LD3:HXX.SYS
AZ0:BINCOM.SAV to LD3:BINCOM.SAV
AZ0:BASIC.SAV to LD3:BASIC.SAV
AZ0:LINK.SAV to LD3:LINK.SAV
AZ0:HELP.SAV to LD3:HELP.SAV
AZ0:K52.SAV to LD3:K52.SAV
AZ0:TESTDW.SAV to LD3:TESTDW.SAV
AZ0:TDW.SAV to LD3:TDW.SAV
AZ0:XONIX.SAV to LD3:XONIX.SAV
AZ0:TETRIS.SAV to LD3:TETRIS.SAV
AZ0:DESS.HLP to LD3:DESS.HLP
AZ0:EDIK.HLP to LD3:EDIK.HLP
AZ0:KOMP8.SAV to LD3:KOMP8.SAV
AZ0:LD.SYS to LD3:LD.SYS

LD3> DIR
24-Apr-92
RT11SJ.SYS 78 16-Dec-80 SWAP .SYS 30 25-Mar-103
TT .SYS 2 23-Jan-80 SL .SYS 10 28-Dec-87
EM .SYS 4 04-Mar-80 HX .SYS 6 06-May-83
NL .SYS 2P 13-Oct-82 DIR .SAV 19 04-Jul-102
PIP .SAV 30 31-Oct-98 DUMP .SAV 9 27-Dec-83
DUP .SAV 45 27-Dec-83 UCL .SAV 16 18-Jan-88
UCL .DAT 9 04-Dec-79 HAND .SAV 8 08-Nov-79
HANDLE.SAV 17 06-Sep-91 EDIK .SAV 22 19-Mar-103
DAY .SAV 4 13-Apr-81 DESS .SAV 19 04-Mar-94
AZ .SYS 3 12-Dec-86 MEMORY.SAV 2 03-Sep-82
KLOP .SAV 13 21-Nov-88 IND .SAV 58 19-Dec-88
TESTMY.SAV 16 27-Dec-88 HZ .SYS 3 24-Nov-86
SPEED .SAV 3P 26-Apr-89 RESORC.SAV 25 01-Mar-80
STARTS.COM 1 30-Dec-82 DHRY .SAV 25 08-Feb-83
HD .SYS 3 25-Nov-86 DW .SYS 4 02-Feb-90
MACRO .SAV 63 21-Dec-80 CREF .SAV 6 31-Oct-98
SYSMAC.SML 92 31-Oct-98 LP .SYS 2 19-Dec-88
MY .SYS 3 07-Dec-89 MX .SYS 9 15-Dec-80
VM .SYS 3 19-Dec-88 RT11XM.SYS 107 19-Dec-88
DWX .SYS 5 15-Jun-88 MYX .SYS 3 07-Jul-88
MXX .SYS 10 01-Sep-89 VMX .SYS 3 17-Apr-89
LPX .SYS 2 19-Dec-88 LDX .SYS 8 19-Dec-88
HDX .SYS 3 09-Feb-84 HXX .SYS 6 09-Feb-84
BINCOM.SAV 25 21-Apr-98 BASIC .SAV 60 15-Feb-83
LINK .SAV 59 31-Oct-98 HELP .SAV 143 19-Dec-88
K52 .SAV 54 19-Dec-88 TESTDW.SAV 47 27-Dec-88
TDW .SAV 51 08-Mar-90 XONIX .SAV 13 01-Sep-92
TETRIS.SAV 28 04-Apr-85 DESS .HLP 26 10-Dec-87
EDIK .HLP 32 06-May-88 KOMP8 .SAV 5 21-May-87
LD .SYS 8 18-Jan-88
59 Files, 1362 Blocks
3600 Free blocks

LD3>

MiX
24.02.2019, 11:10
@7777777777736G
Это куда Вы ПЗУху отправили? В космос? :)
Лучше вешать на 173000, тогда можно автостарт сделать.

Hunta
24.02.2019, 11:43
В космос?
Это типа что бы семёрки не считать

Лучше вешать на 173000
При выбранном методе организации загрузки - не получится. 736 - это спец регистр устройства
И есть ещё один момент, связанный с адресами, хотя вряд ли народ на него налетит (но тут есть нюансы). В компах с J-11 устройство не взлетит.

AFZ
24.02.2019, 13:49
И есть ещё один момент, связанный с адресами, хотя вряд ли народ на него налетит (но тут есть нюансы). В компах с J-11 устройство не взлетит.А подробности расскажешь?

Hunta
24.02.2019, 14:00
А подробности расскажешь?
177732 J-11 diagnostic data register; EK-PDP94-MG-001_Sep90.pdf pg. 5-51
177734 J-11 memory configuration register; EK-PDP94-MG-001_Sep90.pdf pg. 5-48

177736 пока не нашёл - задействован ли.

ЕМНИП, то эти два регистра сидят внутри J-11 и при обращении к ним оно (обращение) даже не транслируется наружу. Детали надо смотреть в доках, меня пока больше интересует таблица по использованию адресов на странице в/в в принципе

AFZ
24.02.2019, 16:32
177732 J-11 diagnostic data register; EK-PDP94-MG-001_Sep90.pdf pg. 5-51
177734 J-11 memory configuration register; EK-PDP94-MG-001_Sep90.pdf pg. 5-48 Блин, я же Патрона допрашивал, какой мне взять адрес для регистров моего контроллера. Впрочем, он присутствует всего в двух местах - в ГАЛке адресного селектора и в драйвере в виде

AZCSR = 177730 ; Command and state reg addr for AZ device.

То есть, исправить его - 5 минут.

Hunta
24.02.2019, 16:35
Блин, я же Патрона допрашивал, какой мне взять адрес для регистров моего контроллера
Я так и не нашёл ничего в инете типа - Список стандартных адресов векторов - составляю примерно третьи выходные сам. Но могу обрадовать - его стандартный адрес для HD - тоже попадос:

177720 J-11 control/status register; EK-PDP94-MG-001_Sep90.pdf pg. 5-27
177722 J-11 page control register; EK-PDP94-MG-001_Sep90.pdf pg. 5-29
177724 J-11 configuration and display register; EK-PDP94-MG-001_Sep90.pdf pg. 5-30
177726 J-11 additional status register; EK-PDP94-MG-001_Sep90.pdf pg. 5-31
177730 J-11 diagnostic controller status register; EK-PDP94-MG-001_Sep90.pdf pg. 5-49
177732 J-11 diagnostic data register; EK-PDP94-MG-001_Sep90.pdf pg. 5-51
177734 J-11 memory configuration register; EK-PDP94-MG-001_Sep90.pdf pg. 5-48
177736
177740 low error address register, EK-KB11C-TM-001_1170procMan.pdf pg. VI-4-18
177742 high error address register, EK-KB11C-TM-001_1170procMan.pdf pg. VI-4-18
177744 memory system error register, EK-KB11C-TM-001_1170procMan.pdf pg. VI-4-19
177746 cache control register, EK-KB11C-TM-001_1170procMan.pdf pg. VI-4-19
177750 maintenance register, EK-KB11C-TM-001_1170procMan.pdf pg. VI-4-21
177752 Cache hit/miss register, EK-KB11C-TM-001_1170procMan.pdf pg. VI-4-21
177754 Cache Data register (см PDP-11/44)
177756
177760 System Size - Lower
177762 System Size - Upper
177764 System Id
177766 CPU Error Register
177770 microbreak register, EK-KB11C-TM-001_1170procMan.pdf
177772 PIRQ
177774 Stack limit
177776 PSW

AFZ
24.02.2019, 17:10
То есть 1777хх занято, практически, полностью. В принципе, мне по барабану, я могу взять и16хххх. 165ххх занято ПЗУ загрузчика, остальное, вроде-бы, свободно. Хотя, хотелось бы, все-таки что-нибудь из 177ххх - меньше цифр набирать после зажатой семерки...

Patron, form, ау!

Hunta
24.02.2019, 17:34
173xxx тоже не стОит

MM
24.02.2019, 17:45
1777хх занято,
На самом деле это довольно серьезная проблема.
Есть несколько методов решения.
Самый простой - установка 533СП1 на средние разряды адреса устройства, и несколько припойных перемычек.
Рекомендуемое АП - 177ххх, т.к. изрядное к-во всяких промышленных контроллеров ( включая ПП УКНЦ ) содержат в зоне 160ххх...176ххх кучи регистров и даже ПЗУ .

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

MiX
24.02.2019, 18:58
173xxx тоже не стОит
Не надо путать МПИ с Кубасом. На PDP там стоит ПЗУ, а на ДВК не задействован. Да МПИ контроллер в PDP никак не поставить. Что касается J11 то плат типа М8 найдется у ~1,5 человека.

С другой стороны, если там регистр, то да 173000 лучше не использовать. Это я думал что там ПЗУ. Можно сделать не обязательный регистр (отключающийся) где в регистре JMP to [адрес загрузчика].

Hunta
24.02.2019, 19:17
Что касается J11 то плат типа М8 найдется у ~1,5 человека.
Не буду загадывать, но это может измениться.
Не появлением у народа большого количества M8, а появлением платы под ДВК с J-11.
Но так же есть подозрение, что для неё данный контроллер окажется не сильно востребованным.

AFZ
24.02.2019, 21:47
Самый простой - установка 533СП1 на средние разряды адреса устройства, и несколько припойных перемычек. У меня адрес прошит в GAL16V8D, всех проблем - перешить эту м/с. Кроме того, у нее 3 свободных ноги, при желании, можно прошить в одну ГАЛку 8 вариантов адресов, нужный вариант выбирать тремя перемычками (джамперами).



С другой стороны, если там регистр, то да 173000 лучше не использовать. Это я думал что там ПЗУ. Можно сделать не обязательный регистр (отключающийся) где в регистре JMP to [адрес загрузчика].Там не один регистр, а три. CSR, DatR и регистр загрузчика. В принципе, могу ужаться до двух - например, включать регистр загрузчика на место регистра данных, будет действовать от сброса (по команде xxxxxxG или исполнении ЦП команды RESET) и до выдачи первой команды в CSR.

MiX
25.02.2019, 21:01
В принципе, могу ужаться до двух - например
Это я к тому говорил, что если 173000 понадобится для ПЗУ, то регистр придется отключить (передвинуть). В этом случае понятно что автозагрузка уже не получится.

AFZ
26.02.2019, 07:19
Ладно, коллеги, это все лирика. А мне нужен адрес для контроллера. Надеюсь, что оно таки заработает на буржуазных машинках, поэтому нужен адрес, не конфликтующий с чем-либо на них. Дайте мне его, плз. Идеально - 4 слова, можно 3, в крайнем случае 2. Очень желательно, чтобы адрес был в зоне 177ххх - меньше набирать на ДВК с ВМ3 после зажатой семерки.

Hunta
26.02.2019, 08:17
Пока ничего не светится на 177200. Альтернатива - 177300 - в диапазоне 177300-177336 висят два ускорителя EAE, который вроде как существовал только на PDP-11/20 - вроде как самая первая модель PDP, в которую вряд ли кто будет втыкать сей девайс - так что шанс налететь на конфликт вроде как минимален.

AFZ
26.02.2019, 10:39
ОК. А сколько там размера?

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

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

В смысле на 177200...

Hunta
26.02.2019, 10:46
На текущий момент ничего не светится в диапазоне 177200-177276

AFZ
07.05.2019, 10:21
А какой вектор можно взять для контроллера? Патрон советовал 174, но, учитывая конфликт HD с внутренними делами J-11...

Желательно даже два вектора - для двух контроллеров в одной машинке.

Hunta
07.05.2019, 10:25
Ну.. У самой DEC 170-174 помечены как user reserved.. Пуркуа бы и не па. Я, конечно, прошерстил далеко не всю документацию, но пока на них ничего не находил (всякое советское и самодельное не в счёт)

AFZ
07.05.2019, 14:47
170 занято. MY.

Hunta
07.05.2019, 15:09
270 274 - тоже User Reserverd

AFZ
07.05.2019, 17:58
Отлично.

Я, правда, занимал 270-274 под один из каналов МС 4622 (КТЛК-6), там в оригинале были вектора 300-304, но они заняты КЖД (или первый из них, не помню, но и не суть важно), а мне эта 4622 была нужна для ДИАМСа. Так я разобрался и прошил новую 556РТ5 (на фото у СуперМакса она помечена нацарапанным 10н, что значит м/с D10 новая).

Но вряд ли кому понадобится такая конфигурация - КТЛК-6 для ДИАМСа и два контроллера AZ одновременно. Так, что для второго контроллера вектор 274 - самое то.

AFZ
17.05.2019, 20:43
Итак, мы его таки сделали! Ура, товарищи! :)

Как сказал Гекльбкрри Финн (в смысле Марк Твен), не прошло и двух лет, как...

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

Я настолько полно проработал контроллер на макете, а СуперМакс настолько хорошо развел плату, что плата пошла с первой же ревизии, без каких-либо изменений. То есть, конечно, есть несколько мелких погрешностей, типа не совсем удобно расположено гнездо для микроSD-шки, но это мелочи. Остальное - все ОК, ни соплей, ни МГТФ-а - ничего! Пришлось слегка подшаманить прошивку - я макетировал на STM32F103VET6, а Макс развел плату под STM32F407VET6, и запаял, естественно, его. Ничего страшного, все спортилось легко!

Как я и обещал, диском для ДВК является обычный файл на микроSD в файловой системе FAT-32 (файл-образ). Этот файл-образ без каких-либо изменений может быть подключен к эмулятору Патрона в качестве одного из HDx. Более того, Патрон обещал, что он добавит в свой эмулятор моё устройство, когда оно будет готово, тогда можно будет работать с файл-образом как в реале, так и в эмуляторе.

Обмен с МПИ контроллер делает программно - МК STM32 в синхронном цикле опрашивает сигналы с МПИ, принимает или выдает нужные данные и отвечает сигналом К СИП Н (RPLY) на каждый акт "короткого" обращения к нему. Если же обращение "долгое" - прочитать сектор (блок) с SD, записать блок на SD, в дальнейшем - смонтировать файл-образ на какой-то из виртуальных приводов, прочитать оглавление хост-носителя, и т.п., контроллер отключается от МПИ, подключая вместо себя "заглушку", которая отвечает на обращения по МПИ аппаратно. В этом случае отвечает только CSR устройства, нулём, обращение по другим адресам вызовет Trap to 4. Запись в CSR в этом случае только стирает бит D6, на предмет аварийного завершения операции, например, по двойному Ctrl/C.

Устройство мы назвали AZ. Название предложили здесь - сначала Хобот, позже - коллега MiX. Устройство поддерживает 8 псевдодисков (AZ0-AZ7). Размер каждого диска, пока, фиксированный - 65534 блока, но изменить это - не вопрос, просто пока так получилось. Планирую "большие" псевдодиски (для RSX-11, а может и для ДИАМСа, если когда-нибудь дойдут руки), особых сложностей это не вызовет, но это позже. Пока имена файл-образов фиксированные - AZ000.DSK ... AZ007.DSK - мне хватало забот со схемой и с программным обслуживанием МПИ, чтобы еще вникать в FATFS. Вникнуть туда обещал Хунта, но он соскочил с проекта, в итоге все действия с FATFS остались на том минимальном уровне, с которым мне удалось справиться "с наскока", особо не вникая. Теперь придется заняться этим, но сначала доделаю прерывания - аппаратура установлена, но фирмварь для этого узла я еще не сочинил.

Также еще недосочинен драйвер. Пока у меня есть только драйвер для SJ/FB, работающий без прерываний (прополкой). Собственно, обслужить те же прерывания программой на МК - не вопрос, я это сделаю за день, но их надо же еще обслужить в драйвере, а я основательно подзабыл приёмы драйверописания для RT-11, да и Макро-11 тоже не особо помню. То есть, помню, конечно, но так, влёт писать программу, как я это делал в 80-е - 90-е, увы, не могу, приходится то и дело заглядывать куда-нибудь... А еще нужен драйвер для XM/TSX, и его очень желательно делать сразу в прерываниях.

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

Фотки готового изделия и еще кое-какая инфа лежат у Макса на страничке (https://forum.maxiol.com/index.php?showtopic=5388). Её (страничку) тоже надо чуток подправить, но это тоже мелочи, основное там есть. А то, что пока выложены не совсем актуальные прошивки, так их и прошивать, кроме меня и Макса пока некому.

Контроллер пока есть в версии для МПИ. Я сильно подозреваю, что он пойдет и на фирмЕ, но надо пробовать. Если Макс сможет запустить свой комплект 11/83, или что там у него, то проверим сами, иначе придется просить помощт клуба.

В общем, Макс на свой (и мой) страх и риск заказал сразу десяток плат. Но, как я уже отметил, все сошлось в лучшем виде и эти платы ждут желающих. Деталей на все у Макса пока не хватает, но три штуки сверх тех трех, которые нужны нам самим, он соберет точно. А может и уже собрал, он, как раз, доделывал их.

Arseny
17.05.2019, 21:36
В общем, Макс на свой (и мой) страх и риск заказал сразу десяток плат. Но, как я уже отметил, все сошлось в лучшем виде и эти платы ждут желающих. Деталей на все у Макса пока не хватает, но три штуки сверх тех трех, которые нужны нам самим, он соберет точно. А может и уже собрал, он, как раз, доделывал их.
Ну, вы бы цену сразу озвучили ... Пока - я занимаю очередь. Если цена будет "не очень" - придется соскочить...

SuperMax
18.05.2019, 07:35
Ну, вы бы цену сразу озвучили ... Пока - я занимаю очередь. Если цена будет "не очень" - придется соскочить...

На данный момент доступно 2 контроллера [GAL-ки кончились]
Барахолка: Контроллер псевдодиска на MicroSD для ДВК (https://zx-pk.com/forum/viewtopic.php?f=7&t=13392)
Принимаются заявки
Барахолка: Краудфандинг: Контроллер псевдодиска на MicroSD для ДВК (https://zx-pk.com/forum/viewtopic.php?f=40&t=13393)

svinka
18.05.2019, 13:59
Исходников нету. Ценник конский. А тут можно размещать ссылки на продажи в других форумах? Или есть исключения?

Наверное ещё нарушает лицензии включенных в код чужих проектов...

Arseny
18.05.2019, 15:06
Исходников нету.
Да вроде никто и не обязан исходники своих разработок выкладывать.

Ценник конский.
Покупать тоже никого не заставляют.

А тут можно размещать ссылки на продажи в других форумах? Или есть исключения?
В смысле - продажа на других форумах? Барахолка ZX.PK - это продолжение данного форума вынесенное на отдельную площадку. Что не так-то?

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

CodeMaster
18.05.2019, 16:08
В смысле - продажа на других форумах? Барахолка ZX.PK - это продолжение данного форума вынесенное на отдельную площадку. Что не так-то?
Вообще, продажа как-раз только на других форумах и разрешена, но ссылки (аккуратные) де-факто допускаются.

AFZ
18.05.2019, 16:56
Исходников нету.Пока я еще программирую, до окончания далеко. А там посмотрим...


Ценник конский.Ну, про это уже сказали...


Наверное ещё нарушает лицензии включенных в код чужих проектов...Ни хрена! FATFS распространяется свободно (что, я дурной, что-ли, сочинять ее самому? Г-н Чен над ней уже сколько работает? Лет 7, да?), остальное - целиком моё творчество. И софтина в STM32, и прошивки ГАЛок, и вообще, вся схема принципиальная электрическая. А СуперМакс превосходно развёл плату, так, что она сразу пошла без каких-либо доработок. Так, что вот! :)

Hunta
18.05.2019, 17:03
Наверное ещё нарушает лицензии включенных в код чужих проектов...
Наверное, надо для начала прочитать лицензионное соглашение - а потом строить предположения. Конкретно по FatFS


The FatFs module is a free software opened for education, research and development. You can use, modify and/or redistribute it for personal projects or commercial products without any restriction under your responsibility. For further information, refer to the application note.

SuperMax
18.05.2019, 17:26
Пока я еще программирую, до окончания далеко. А там посмотрим...
самое важное, что контроллер построен таким образом, что является платформой для развития.
грубо говоря, если сейчас писать на ассемблере под PDP-11 становиться лениво, то на СИ под STM32 будет вполне легко. ну конечно тем, кто СИ пишет.



А СуперМакс превосходно развёл плату, так, что она сразу пошла без каких-либо доработок. Так, что вот! :)
cпасибо, но я не совсем доволен собой, ибо не всё идеально, причина в моем освоении системы Pulsonix и ее особенностей.

Я планирую подключиться к написанию кода, в частности к прикручиванию стека TCP/IP который я лично написал сначала под AVR, а теперь портировал под STM32.
Прикручивание сети позволит реализовать FTP-сервер с содержимым флешки, как следствие удобство работы и переноса информации ДВК-PC возрастет, а вот когда получится сделать это на уровне самой файловой системы RT11, то я думаю это будет очень удобно.
с другой стороны, можно сделать и обратную операцию, а именно реализовать FTP-клиент для RT11 который позволит шарится и качать с любых FTP-ресурсов.

AFZ
18.05.2019, 17:34
cпасибо, но я не совсем доволен собой, ибо не всё идеально, причина в моем освоении системы Pulsonix и ее особенностей.Это все фигня, главное, что заказанные 10 плат не пошли в помойку и не увешаны соплями по самое не хочу.

SKcorp.
19.05.2019, 17:08
Будет ли AZ.SYS работать в ФОДОС Ф В3.00?
Будет ли контроллер работать с ГМД-7012?

SuperMax
19.05.2019, 20:26
Будет ли AZ.SYS работать в ФОДОС Ф В3.00?
если я правильно помню ФОДОС это RT11
соответственно если монитор SJ - то будет.


Будет ли контроллер работать с ГМД-7012?
не совсем понятен вопрос
если речь о конфликтах, то их нет

AFZ
19.05.2019, 21:53
Будет ли AZ.SYS работать в ФОДОС Ф В3.00?Контроллеру, вообще-то, глубоко фиолетова ОС, которая расположена на любом из псевдодисков. А вотчто касается драйвера, то он есть пока только для RT-11 V04.xx - V05.xx и их клонов, причем (пока) только для вариантов SJ и FB. Сочиняйте драйверы для других ОСей, заработает и в них. Инструкцию по написанию драйверов, вернее, инструкцию по программированию обмена с контроллером, на днях выложу. (Как допишу.)


Будет ли контроллер работать с ГМД-7012?Нет, конечно. Но если ваш ДВК или Э-60 имеет аппаратуру и софт для работы с ГМД7012, то этот контроллер не помешает, Макс правильно сказал, конфликтов нет.

MiX
19.05.2019, 22:53
Будет ли контроллер работать с ГМД-7012?
А в чём прикол то? К МС1201.1, МС1201.2 подключай или отдельно через плату И4. Распиновка на ГМД-7012 под И4.

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

В принципе можно и на 1801ВП 033 отдельно сочинить.

SKcorp.
19.05.2019, 23:14
А в чём прикол то? К МС1201.1, МС1201.2 подключай или отдельно через плату И4. Распиновка на ГМД-7012 под И4.



Я криво вопрос задал. Естественно имелась ввиду совместная работа и отсутствие конфликтов, т.к. драйвера DX.SYS в загрузочном образе не нашел.

AFZ
21.05.2019, 07:56
Я,конечно, понимаю, что предложенный вариант софта для контроллера - это чтобы только попробовать, и что нужно идти дальше.

ИМХО, первым шагом в этом направлении должна быть свободная манипуляция файл-образами, лежащими на SD-шке. То есть, лежит у вас на столе кучка дискет до 32М размером, и вы можете в любой из восьми ваших накопителей воткнуть любую из них. Ну, кроме системной, но никто не мешает перезагрузиться с другого накопителя и сменить дискету в том, который только что был системным. [В скобках замечу, что СуперМакс параллельно работает над проблемой доставки этих "дискет" по сети (обычный проводной Ethernet), пока через FTP, а дальше посмотрим.]

Естественный способ манипулировать физическими носителями из-под RT-11 это .SPFUN

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

Действия простые:

- получить элемент оглавления хост-носителя [вообще-то это два действия - получить первый элемент оглавления и получить очередной элемент оглавления, аналогично виндовым _findfirst() и _findnext()];

- смонтировать на конкретный привод AZn конкретный файл-образ с хост-носителя;

- просмотреть, какой файл хост-носителя смонтирован на заданный виртуальный привод AZn;

и все, пожалуй.

form, Patron, ау!

2All: Все эти .SPFUN будут соответствовать командам контроллера. Теперь к вопросу о RSX-11. Ясно, что там будет не механизм .SPFUN, а что-то другое. Но команды контроллера от этого никуда не денутся. Так вот, нужно-ли для RSX-11 что-то дополнительное?


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


Естественно имелась ввиду совместная работа и отсутствие конфликтов, т.к. драйвера DX.SYS в загрузочном образе не нашел. Просто все эти комплектации RT-11 собраны с дискет. В былые времена все лишние файлы с дискет вычищались, и так мало места. А когда место появилось, про DX никто не вспомнил, ибо их очень мало. Мы это, конечно, исправим, но никто не мешает и самостоятельно доставить нужный драйвер на файл-образ диска. Вариантов доставки куча, это же не WQ...

hobot
21.05.2019, 21:20
Просто все эти комплектации RT-11 собраны с дискет.
можно ли уточнить о каких дискетах речь? возможно я пропустил ссылку прямую?

SKcorp.
22.05.2019, 14:03
Просто все эти комплектации RT-11 собраны с дискет. В былые времена все лишние файлы с дискет вычищались, и так мало места. А когда место появилось, про DX никто не вспомнил, ибо их очень мало. Мы это, конечно, исправим, но никто не мешает и самостоятельно доставить нужный драйвер на файл-образ диска. Вариантов доставки куча, это же не WQ...

Спасибо за ответ.
А вот еще вопрос: Можно ли с этой платы загрузить ТМОС для Электорники-60? Как я понял в ТМОС драйвер DX встроен и с другого накопителя она не загрузится.

AFZ
22.05.2019, 16:20
Почитал внимательно про .SPFUN и пришел к выводу, что проблема надуманная - коды SPFUN назначены, что называется, "от фонаря". Даже тот, казалось бы, универсальный код 373, оказывается, универсален только для устройств с VARSZ$, у той же магнитной ленты кодом 373 вызывается что-то другое. То есть, поскольку моё устройство VARSZ$, код 373 для меня обязателен, остальные я могу назначать по своему усмотрению. Что ж, леди с диллижанса...

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


А вот еще вопрос: Можно ли с этой платы загрузить ТМОС для Электорники-60? Как я понял в ТМОС драйвер DX встроен и с другого накопителя она не загрузится.Честно скажу, не имею ни малейшего понятия. Ни разу не интересовался ТМОСом.

Набор тестов для ДВК, который, вроде-бы, сделан на базе тестов из ТМОС, работает из-под RT-11 и, соответственно, запускается с любого носителя, с которого может быть загружена RT-11. А как там оно с ТМОС - понятия не имею.

SuperMax
22.05.2019, 19:09
Спасибо за ответ.
А вот еще вопрос: Можно ли с этой платы загрузить ТМОС для Электорники-60? Как я понял в ТМОС драйвер DX встроен и с другого накопителя она не загрузится.
надо закинуть туда драйвер AZ.SYS , затем COPY/BOOT .... и можно загрузиться

AFZ
22.05.2019, 21:43
Коллеги, а как аппаратные загрузчики передают первичному загрузчику номер устройства, с которого надо загружаться? Или программа DUP по команде BOOT/FOREIGN ? Где-то недавно попадалось, а где- не могу найти, и вспомнить не могу. А то мой AZ по команде BO/FO AZ1: делает загрузку с AZ0...


надо закинуть туда драйвер AZ.SYS , затем COPY/BOOT .... и можно загрузитьсяТам не RT-11, там Тест-Мониторная Операционная Система.

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


Кто-нибудь потом, странице где-нибудь на 13, если тема до неё доживёт, сравните, пожалуйста общий ход обсуждений здесь и здесь: 32-разрядный процессор, полностью совместимый с архитектурой PDP-11 :) Дожила. И ?

Hunta
22.05.2019, 22:19
R0 или аппаратный регистр - номер устройства
R1 - CSR


Дожила. И ?
И например, в текущем состоянии, плата интереса для меня не представляет

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


А то мой AZ по команде BO/FO AZ1: делает загрузку с AZ0...
4 варианта загрузки RT-11

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

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

AFZ
23.05.2019, 07:11
4 варианта загрузки RT-11Поделись? Я только 2 знаю.


И например, в текущем состоянии, плата интереса для меня не представляет У нас разные целевые аудитории. Моя - владельцы рабочих или полурабочих ДВК, которым будут полезны 8 шт. (псевдо)дисковых накопителей большой емкости. Особенно для ДВК-1 или ДВК-2, у которых либо дискеты, либо вообще ничего. Да и на ДВК-3/4 оно будет полезным - на один винчестер не засунешь одновременно и RT-11, и RSX-11, а то и еще какую-нибудь экзотическую ОСь. Переключать же винчестеры - не дело... А так, воткнул платку, и все под рукой.

Твоя же аудитория... С трудом представляю, если честно. Разве что еще работающие где-то на производстве ЧПУ с Э-60/ДВК или что-то в том же роде, где можно будет выкинуть весь зоопарк и вставить одну твою платку. И то оно под вопросом. Я в нулевые переписывался с работником АЭС, на которой чем-то рулила Э-60. Так там шаг влево - шаг вправо считается побег, охрана стреляет без предупреждения. Все полностью регламентировано бумагами, утвержденными в 70-е. Чтобы заменить протухший литик на что-то новое (старого, но годного, естественно, нет), надо исписать полтонны бумаги и каждую из бумажек согласовать. В общем, мрак.

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

Нет, я понимаю, показать "какой я крутой - вот, ФПГА освоил.." - это, конечно мотив. Я сейчас сам посматриваю в сторону ВХДЛ и Верилога. Но чтобы это изделие заинтересовало сильно многих - не думаю.

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

SuperMax
23.05.2019, 08:10
Добавлю, про свои цели

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

Если у кого-то есть хорошие идеи которые можно реализовать - велкам.

Да, если контроллер представляет интерес для пользователей УКНЦ, то прошу отписаться, тк первая прикидка показывает возможность уложить его в СА-карту.

hobot
23.05.2019, 08:19
SuperMax,
100% интересен лично для себя как минимум

Да, если контроллер представляет интерес для пользователей УКНЦ, то прошу отписаться, тк первая прикидка показывает возможность уложить его в СА-карту.
а возможность первичной загрузки возможно реализовать?

SuperMax
23.05.2019, 08:21
SuperMax,
100% интересен лично для себя как минимум
а возможность первичной загрузки возможно реализовать?
как я понимаю да

Hunta
23.05.2019, 08:37
Поделись? Я только 2 знаю.

- аппаратная
- boo/for
- boo z10:
- boo z10:rt11sb

попарно похожи, но есть свои нюансы.


Твоя же аудитория... С трудом представляю, если честно.
Ну уж точно не владельцы

владельцы рабочих или полурабочих ДВК
и не

работающие где-то на производстве ЧПУ с Э-60/ДВК


Нет, я понимаю, показать "какой я крутой - вот, ФПГА освоил.." - это, конечно мотив
Ну, если ты так думаешь - то точно не понимаешь

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


Да и на ДВК-3/4 оно будет полезным - на один винчестер не засунешь одновременно и RT-11, и RSX-11
Я это делал. Когда писал драйвер для DW. А с ZF вообще тривиально, оно у меня сейчас именно так и начинает жить

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

Вдогонку. Технически проработан вариант полуплаты с четырьмя разъёмами под CF. Но поскольку это мой личный интерес и поскольку у КЦГД приоритет - когда это будет сделано - писано вилами на воде. Мне пока хватает и разъёма на полуплате с процессором.

Hunta
23.05.2019, 12:00
С официального сайта


одновременно будут доступны только 8 из них, т.е. 262136К, это ограничение RT-11.

Это не ограничение RT-11, это ограничение старых версий ОС или драйвера на новых версиях ОС. Не скажу насчёт версий 5.5 (вроде про неё говорили, что возможность заложена, но не работает) и 5.6 (должно быть, но я не проверял), а в 5.7 вполне себе работает до 64 устройств.

AFZ
23.05.2019, 13:55
Да. В 5.7 действительно может быть до 64 устройств. Только положа руку на сердце скажи, на хрена они нужны в таком количестве? Чтобы было? Или чтобы показать конкурентам, что у нас тоже может быть много дисковой памяти? Последнее - возможно. Только вот зачем? ИМХО, для любой программы на ДВК хватит 3-4 шт дисков по 32М. Я сделал 8, мне это ничего не стоило. Другой вопрос, что желательно иметь под рукой стопку таких "дискет" и иметь возможность смонтировать любую из них в любой псевдонакопитель. Так я сейчас над этим работаю, а "дискет" на современный носитель можно натолкать много. То есть, я, конечно, могу сделать и 64 диска, цена вопроса - некоторый (не сильно большой) расход ресурсов МК, но пока я не тороплюсь - зачем? Ни 5.1 оно не нужно, ни TSX-у...

И про систему 5.7. Нет, на 11/83 и 11/84 она, конечно, полезна, но к чему все это на ДВК? Тем более, на ДВК-1/2, где нет диспетчера памяти. 5.7 ведь кушает эту память с большим аппетитом. У нее даже монитора SJ нет, SB - это однозадачный вариант полноформатного FB-монитора, а не предельно простой от рождения SJ-монитор. Опять же никто не спорит, 5.7 в виртуальном режиме с монитором расширенной памяти даст программе юзера все 56К полностью, а то и 60/64, но это, минимум, ВМ3 то есть ДВК1/2 в пролёте.

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

Hunta
23.05.2019, 14:02
Да. В 5.7 действительно может быть до 64 устройств.
Ты даже не понял, про что я написал

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


Вариант фирмвари с 64 дисками я обеспечу, только попросите.
256 под RSX?

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


показать конкурентам
Конкурентам? Я хоть раз что то сказал, что будет производство в достаточном масштабе?

AFZ
23.05.2019, 16:43
Ты даже не понял, про что я написалПочему? Я об этом знаю, просто мне это не нужно. И значительной части моей целевой аудитории 5.7 действительно не нужна - на ДВК-1/2 лучше пользовать 5.1 или (с исправленными датами) 5.4, остальное - от лукавого.


256 под RSX?Без вопросов. Хоть 16Г, или какой там потолок у RSX-11 ? Интерфейс только согласовать.

Hunta
23.05.2019, 17:16
Я об этом знаю, просто мне это не нужно
Я не про это писал

AFZ
23.05.2019, 17:41
С официального сайта

Это не ограничение RT-11, это ограничение старых версий ОС или драйвера на новых версиях ОС. Не скажу насчёт версий 5.5 (вроде про неё говорили, что возможность заложена, но не работает) и 5.6 (должно быть, но я не проверял), а в 5.7 вполне себе работает до 64 устройств. Ну, признаю, поторопился. Надо было написать:

"Ограничение основных версий RT-11, применяемых на ДВК (старых).
RT-11 V05.07 (и, вроде бы, 05.06) поддерживают до 64 устройств по 32М каждое, но драйверов с поддержкой 64 устройств нет и, пока не предвидится."

Исправимся.

AFZ
23.05.2019, 22:21
- аппаратная
- boo/for
- boo z10:
- boo z10:rt11sb

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

Это я к тому, что, почему-то, нашел у себя в драйвере первой командой под меткой BOOT команду CLR R0. Заменил ее на BIC @177770,R0 и заработало BO/FO с любого из восьми дисков. Спасибо, что напомнил.

Hunta
24.05.2019, 06:29
Хотя, если вдуматься, отличия таки есть.
Уже выветрилось из головы, но лезть в доки не буду. Основной нюанс - есть несколько ячеек в адресах диапазона 47xx, через которые общаются первичный и вторичный загрузчик и в зависимости от варианта загрузки их или нельзя использовать или можно использовать в части кода первичного загрузчика. В принципе, это всё вычисляется чисто по логике работы, но пока дойдёт.. Не с первой попытки у меня заработали три последних варианта, хотя первый уже во всю работал

AFZ
24.05.2019, 08:29
Подожди! Первый - аппаратная загрузка с номером устройства а R0 или аппаратном регистре. (Как я понимаю, собственно аппаратной загрузки, как таковой, нет - есть программа в ПЗУ плюс, может быть, аппаратный регистр на странице ввода-вывода, да?) Второй - BO/FO. По нему другая программа (DUP) передает в R0 номер устройства, аппаратный регистр не при деле. А так, и та, и другая программы считывают блок 0 - неважно, через ДМА или в PIO-mode - и передают управление на нулевой адрес. Не въеду, в чем отличие? Ну, кроме аппаратного регистра в первом случае, и то, лучше бы, чтобы программа из ПЗУ сама передавала из аппаратного регистра в R0, а нач. загрузчик о нем и не знал. Или я заблуждаюсь?

Hunta
24.05.2019, 08:52
Второй - BO/FO. По нему другая программа (DUP) передает в R0 номер устройства, аппаратный регистр не при деле.
А фот хрен

; At this point, we do a hard reset to stop all I/O, and then read 1 word
; from the selected device. The reason for this is that most of the primary
; bootstraps ignore the fact that the booted unit number is in R0 and pull
; it out of the device CSR. We then go to PR7 because the 11V03's clock
; never stops.

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

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

AFZ
24.05.2019, 10:01
И что? Не въеду, зачем читать отдельно 1 слово, если все равно читаем целый блок? И заработает ли наугад взятый драйвер после RESET-а? Хотя, должен...

И вообще, это, скорее, относится к фичам программы DUP, чтобы обойти загрузчики тех ОСей и дисков, нач. загрузчик которых игнорирует содержимое R0 и добывает номер устройства из своего CSR. Драйвер моего устройства такого не делает, так, что это не ко мне. У меня вообще номер устройства из CSR не добудешь - не надо было.

А вот сведения о том, что нач. загрузчику можно закрыть прерывания из-за ручного управления таймером на наших машинках - это очень полезно, спасибо. Мы, обычно, писали по адресу 100 код 102, а по 102 - двоечку, RTI, и при этом побаивались: а вдруг прервется, пока оно недозагружено? Оказывается, можно, по-простому, закрыть прерывания...

Hunta
24.05.2019, 10:06
Не въеду, зачем читать отдельно 1 слово, если все равно читаем целый блок?
Вообще то, к этому моменту целый блок уже давно прочитан средствами RT. И в комменте ясно написано, зачем


Оказывается, можно, по-простому, закрыть прерывания
Установка приоритета в PS - дааа, открытие

AFZ
24.05.2019, 10:32
Вообще то, к этому моменту целый блок уже давно прочитан средствами RT. И в комменте ясно написано, зачем Оно-то так, но почему бы не прочитать его непосредственно перед этими действиями? И кто даст гарантию, что отдельный наугад взятый диск и его драйвер заведутся после ресета без предварительных больших плясок с бубном? Ну, в общем, понятно...




Установка приоритета в PS - дааа, открытиеЗлой ты!

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

Если что, вспомни, как народ загружал ВМ2 с MY и как при этом воевал с таймером.

Hunta
24.05.2019, 10:41
До этого у меня не было 100% уверенности, что вторичный загрузчик не откроет прерывания
То есть текст вторичного загрузчика дают только под подписку о невыезде?


Если что, вспомни, как народ загружал ВМ2 с MY и как при этом воевал с таймером.
Не помню - я в этом не участвовал. К тому же - есть определённые стандарты написания драйвером под RT и есть даже документация (не под одну версию) - я достаточно активно листаю её, когда пишу очередной драйвер. Если же отдельные писатели драйвером хотят странного - они и получат странного.

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

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

AFZ
28.05.2019, 07:10
Без вопросов. Хоть 16Г, или какой там потолок у RSX-11 ? Интерфейс только согласовать.Это я погорячился. Ограничение FAT32 - 2Г или 4Г, не вникал, как оно в реализации FATFS.

AFZ
08.06.2019, 18:52
Выложен (https://forum.maxiol.com/index.php?act=ST&f=68&t=5388&st=0#) новый релиз фирмвари. Сделана обработка файла AZ.INI, в котором прописываются все диски и указывается, кто из них загрузочный. Снято ограничение на расположение файл-образов, отменена жесткая привязка имён файл-образов, еще некоторые мелочи.

Еще в новую версию фирмвари встроены средства управления монтированием/размонтированием файл-образов в псевдодиски программным путём из ДВК. Встроены, но не проверены, поскольку за программирование на ДВК я еще не брался - некогда было. Сейчас стоит задача доделать управление прерываниями, а то 559ВН1 я туда поставил, а программно ее не обслужил. В общем, продолжаю работать.

Patron
11.06.2019, 20:16
Естественный способ манипулировать физическими носителями из-под RT-11 это .SPFUNВ устройстве HD реализован протокол монтирования образов, который работает через операции чтения/записи привода со специальным номером. Технология полностью описана здесь: HMount (http://zx-pk.ru/threads/18351-emulyator-dvk.html?p=932141&viewfull=1#post932141).

Пример программы для RT-11, позволяющей управлять монтированием образов в приводе HD через интерфейс HMount здесь: MNT.SAV (https://zx-pk.ru/threads/10718-soft-dlya-dvk-pdp11.html?p=936537&viewfull=1#post936537)

AFZ
12.06.2019, 17:17
Делать .SPFUN я уже передумал - не вижу смысла кодировать это все для передачи в .SPFUN, потом декодировать назад, да еще и занимать место в драйвере, которое, в отличие от управляющей программы, будет сидеть в памяти всегда. Тем более, что .SPFUN - это только для RT-11. Так, что сейчас я клепаю программу, которая будет выполнять переназначения, обращаясь прямо к регистрам кондуктора. Да, конечно, TSX к регистрам не пустит, да и на здоровье - оно же запускается из RT-11, там и конфигурируйте...


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

Patron
12.06.2019, 19:28
Блин, а я уже сделал по-своему. Вспомнить бы вовремя, так я бы подогнал это дело под программу MNT...Думаю, есть смысл переделать - HMount очень продуманная и легко масштабируемая технология, которая будет работать сразу на любом этапе реализации. Кроме того - аналогичный интерфейс позволяет так же просто реализовать на том же контроллере и часы реального времени, всё программное обеспечение для взаимодействия с которыми из ДВК также уже написано.

AFZ
13.06.2019, 05:17
Подумаю. И посовещаемся. Тут беда в том, что мне недоступна концепция безразмерного блока, 512 байт, и всё. Поэтому, может быть, разбить это дело на блоки, а манипуляции с часами РВ вынести в отдельное устройство? Это ведь, так сказать, "свободный" ресурс - в большинстве реальных контроллеров номер устройства - 3-6 бит, а у нас доступны все 16...

Patron
13.06.2019, 22:47
Тут беда в том, что мне недоступна концепция безразмерного блока, 512 байт, и всё. Поэтому, может быть, разбить это дело на блокиВ HMount (http://zx-pk.ru/threads/18351-emulyator-dvk.html?p=932141&viewfull=1#post932141) такое предусмотрено - там можно или пихать всё в один блок #0, или отдавать строку монтирования для каждой точки монтирования отдельным блоком - тогда в блоке #2 должен быть список точек монтирования, а затем должно идти столько же отдельных блоков, сколько есть точек монтирования, а в каждом блоке - строка монтирования для данной точки. В MNT.SAV реализована работа только по первому варианту, но добавить второй не сложно.

Интерфейс предусматривает, что контроллер может сам решать, как отдавать список монтирования. Если общий объём списка меньше размера блока #0 - контроллер может отдавать список монтирования обоими способами (так проще начинать отлаживать, потому что MNT.SAV будет проще заставить работать), а если список не лезет в нулевой блок, тогда при чтении нулевого блока контроллер должен отдавать пустой результат и получив такой результат программа уже должна пробовать получить список монтирования более сложным способом - прочитать блок #2, сосчитать точки монтирования и затем прочитать все блоки со строками монтирования для каждой из точек.

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

Можно сделать ещё интереснее, превратив блоки фиксированного размера в безразмерные простым трюком - при повторных чтениях того же блока отдавать следующие 512 байт "безразмерного" блока. Это очень круто и позволяет реализовать все преимущества безразмерных блоков практически бесплатно. Понятно, что при таком подходе - первое слово в первом прочитанном блоке должно содержать общий размер данных, как это и предусмотрено "безразмерным протоколом".

Тогда переделки MNT.SAV окажутся вообще минимальными и можно будет не морочиться со вторым способом отдачи списка монтирования (этот способ сейчас даже в эмуляторе ДВК не реализован).

Как и положено крутым протоколам - HMount реализует просмотр списка файлов каталога SD-карты так, чтобы можно было передать в ДВК даже бесконечный список файлов. Для этого предусмотрен особый протокол (https://zx-pk.ru/threads/18351-emulyator-dvk.html?p=932479&viewfull=1#post932479), наиболее близкий концепции 512-байтовых блоков. Там каждое следующее имя из списка файлов передаётся при каждом следующем чтении блока #1.

AFZ
15.06.2019, 18:34
А каким образом это все делается? Ведь RT-11 передает номер устройства одним байтом, так как передать номер 282 ? Напрямую в регистры контроллера, минуя драйвер?

Patron
16.06.2019, 10:23
А каким образом это все делается? Ведь RT-11 передает номер устройства одним байтом, так как передать номер 282 ? Напрямую в регистры контроллера, минуя драйвер?Так специально сделано, чтобы технология "волшебных приводов" не пересекалась с работой операционок. Драйвер - часть операционки, поэтому ему не стоит позволять обращаться к "волшебным приводам" - это могут делать только специализированные программы.

Подключен ли "волшебный привод" к контроллеру - в программе MNT.SAV проверяется так:



Mov #MNT.Unit, (R2) ; Номер привода HMount ( 432 )
Mov #SetUni, (R1) ; Задать номер привода.

Tst (R1) ; Привод HMount подключен к контроллеру HD ?
BMi 4$ ; Нет - сообщить об ошибке.


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

В принципе, для имитации "безразмерных блоков" можно обойтись без передачи размера данных в начале первого отдаваемого блока. По сути это полезно только в одном месте - при извлечении полного содержимого блока #0. Но если принять соглашение, что программа повторяет чтение блока #0, пока не получит ошибку чтения (и в этот момент контроллер сбрасывает фазу чтения блока #0 в исходное состояние) - то результат будет не хуже, чем с передачей размера данных, а мороки меньше.

Таким образом общий "безразмерный подход" может быть таким:

1. Чтения блока #0 повторяются вплоть до ошибки чтения ( там список монтирования в виде текста ASCII, содержащего по одной команде монтирования/размонтирования для каждой точки монтирования ).
2. Чтения блока #1 повторяются вплоть до ошибки чтения ( там список файлов, находящихся в текущем каталоге флешки, отдаваемый по одному имени файла в каждом прочитанном блоке ).

Блок #2 и последующие блоки не поддерживаются.

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

Запись в блок #1 (если поддерживается) изменяет текущий каталог флешки.

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

AFZ
16.06.2019, 16:35
Понятно. Я начал делать что-то подобное, но мне до окончания, как до Луны пешком. Только вот у меня и CSR другой, и команды не совсем совпадают (частично совпадают, но тем не менее...) Поэтому, ИМХО, надо будет сочинить какой-то промежуточный интерфейсный модуль, который будет приводить эти дела к общему знаменателю.


1. Чтения блока #0 повторяются вплоть до ошибки чтения ( там список монтирования в виде текста ASCII, содержащего по одной команде монтирования/размонтирования для каждой точки монтирования ). Здесь, как раз, ограничений нет, читать можно сколько угодно. У меня по аналогичной команде - "передать таблицу назначений" передаются 560 слов - таблица назначений во внутреннем формате, для всех восьми дисков. Только не чтениЯ, а чтениЕ. То есть счетчик слов я задаю не 256, а 560, и всё прилетает. Ну, и вместо чтения какого-то блока, я принимаю несколько команд, одна из них специальная, остальные - общего назначения: запросить передачу таблицы назначений, читать из памяти контроллера и цикл чтения регистра данных без ожидания, по счетчику, который в этом случае начинается с 560.


2. Чтения блока #1 повторяются вплоть до ошибки чтения ( там список файлов, находящихся в текущем каталоге флешки, отдаваемый по одному имени файла в каждом прочитанном блоке ).У меня, опять же, несколько манипуляций - передать (укороченный) блок данных с полным путём к оглавлению, открыть оглавление, читать его по одной записи, после последней записи следующей прочитается пустая строка.

------------------------------------------------

В общем, для того, чтобы пользовать одну программу для двух разных устройств, необходима "прослойка" между железом и программой. Вопрос, как ее прицепить. Навскидку, возможно, имеет смысл сделать драйвер, у которого тот же CSR, что и у основного устройства, а средства ввода-вывода повторяют NL: плюс единственная SPFUN, которая возвратит адрес таблицы вызовов. Тогда делаем .FETCH этому драйверу, вызываем эту SPFUN, запоминаем возвращенный адрес и вызываем нужные функции по таблице. Ну, или, вариант, собрать её, как .REL и сделать свой загрузчик для нее (списать из системы).


Запись в блок #1 (если поддерживается) изменяет текущий каталог флешки.У меня не поддерживается относительная адресация - строку текущего оглавления надо будет держать у себя.


Уже смонтированные файлы не должны показываться в списке файлов на флешке, чтобы исключить двойное монтирование.С этим пока сложности...

Patron
16.06.2019, 16:59
В общем, для того, чтобы пользовать одну программу для двух разных устройств, необходима "прослойка" между железом и программой.Зачем такие сложности - сделать две разные программы и всего делов.



С этим пока сложности...Без этого при достаточно большом количестве образов пользователь будет регулярно пытаться смонтировать один и тот же образ дважды. Простое решение - в момент монтирования переименовывать монтируемый образ, добавляя к нему расширение с номером привода. Типа SYSTEM.DSK -> SYSTEM.DSK.001

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

AFZ
16.06.2019, 19:37
момент монтирования переименовывать монтируемый образ, добавляя к нему расширение с номером привода. Типа SYSTEM.DSK -> SYSTEM.DSK.001Увы, мне недоступны длинные имена, только 8+3. И так оперативки маловато, а разреши я длинные имена, и ее вообще не хватит.

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


Зачем такие сложности - сделать две разные программы и всего делов. Угу, так еще проще.

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

В общем, как я понимаю, с меня объектный модуль, который будет выполнять взаимодействие с моим кондуктором. Так? Осталось согласовать интерфейс.

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

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

Patron
17.06.2019, 16:46
В общем, как я понимаю, с меня объектный модуль, который будет выполнять взаимодействие с моим кондуктором. Так? Осталось согласовать интерфейс.Зачем такие сложности. В комплекте поставки MNT.SAV (http://emulator.pdp-11.org.ru/misc/MNT.SAV.zip) есть исходник. Нужно просто взять его и исправить на свой лад.

AFZ
17.06.2019, 18:17
Посмотрел. Круто. Снимаю шляпу!

А как его транслировать и собирать? Там довольно сложные манипуляции с секциями, расположением и пр. Сходу не въедешь. Батничек... Ой, пардон, com-файлик не сохранился?

Patron
17.06.2019, 21:51
А как его транслировать и собирать?Просто компилировать MNT.MAC - там включается HEAD00.MAC, который уже подтягивает всё остальное.

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


Там довольно сложные манипуляции с секциями, расположением и пр. Сходу не въедешь.Это исполняющая система, которая всё делает сама. Использована концепция "библиотеки исходников", потому что только при включении всех исходников в один "корневой" можно создавать переменные не в виде нулевых слов в коде, а в виде смещений от конца кода.

AFZ
18.06.2019, 07:48
Увы, оно работает только под последними версиями RT-11. С какой версии начали передавать остаток командной строки с адреса 510 ? С 5.04, да? В общем, моя любимая RT-11DS (SJ) V5.01 в их число не попадает...

Ладно, буду думать.

SuperMax
18.06.2019, 07:57
Увы, оно работает только под последними версиями RT-11. С какой версии начали передавать остаток командной строки с адреса 510 ? С 5.04, да? В общем, моя любимая RT-11DS (SJ) V5.01 в их число не попадает...
Ладно, буду думать.

да, надо предусматривать совместимость со старыми версиями - дабы ADOS работал

AFZ
18.06.2019, 09:54
Без этого при достаточно большом количестве образов пользователь будет регулярно пытаться смонтировать один и тот же образ дважды. Простое решение - в момент монтирования переименовывать монтируемый образ, добавляя к нему расширение с номером привода. Типа SYSTEM.DSK -> SYSTEM.DSK.001 В принципе, у файлов еще есть атрибуты. Причем флажки Hidden и System у нас не используются. Можно заюзать их. Смонтированному диску ставить HIDDEN, а тому, с которого загрузились, дополнительно - System. Для этого добавить в устройство команду "пометить диск, как загрузочный", а в первичном драйвере выдать ее.

Patron
18.06.2019, 10:14
Ладно, буду думать.Нужно переделать ввод командной строки:



;************************************************* ***********************
;* *
;* Подпрограмма GETLIN *
;* *
;* - Назначение Ввод командной строки вызова программы *
;* в буфер с адресом в R0. *
;* *
;* При пустой командной строке возвращает *
;* SeC *
;* *
;************************************************* ***********************

.Procedure GETLIN

Mov R0, R1
Mov #510, R2
Mov (R2)+, R3
BEq 1$
Dec R3
BEq 1$
.GTLIN ; Нужно убрать командную строку из буфера KMON

2$: MovB (R2)+, (R1)+
SOB R3, 2$

ClrB (R1)
Tst (PC)+
1$: SeC
Return
.End.


Вызов .GTLIN при отсутствии командной строки рисует приглашение программы, а при наличии - переставляет две части введённой строки местами, помещая между ними символ "=" (и если не ошибаюсь - заменяя пробелы на запятые). Нужно написать обратное преобразование (когда-то давно для ввода командной строки в ранних версиях RT-11 я уже такое делал) и тогда единственным отличием станет появление приглашения программы при вызове программы без аргументов.

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


В принципе, у файлов еще есть атрибуты. Причем флажки Hidden и System у нас не используются. Можно заюзать их. Смонтированному диску ставить HIDDEN, а тому, с которого загрузились, дополнительно - System. Для этого добавить в устройство команду "пометить диск, как загрузочный", а в первичном драйвере выдать ее.Помечать загрузочный диск есть смысл только в том случае, когда предусмотрена автоматическая загрузка с ненулевого привода. Нужность такой опции (а значит - и всех связанных с её реализацией заморочек) представляется довольно сомнительной.

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

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

AFZ
18.06.2019, 11:43
Проблема, правда, возникнет, когда ДВК-шик вырубят внезапно. При плановом выключении (получив низкий на К ПИТН В) можно попытаться снять все эти атрибуты со смонтированных файлов, обещанных 10 мс от снятия К ПИТН В до снятия К ПОСТН В и отключения питания должно хватить. А вот внезапное вырубание всяких самодельных источников (которые сделаны из АТХ) - это ой!

Те файлы, которые прописаны в AZ.INI можно, конечно, смонтировать, игнорируя эти флаги (и потом поставить их, как надо). А вот с файлами, смонтированными на ходу, будут сложности...

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


Помечать загрузочный диск есть смысл только в том случае, когда предусмотрена автоматическая загрузка с ненулевого привода. Нужность такой опции (а значит - и всех связанных с её реализацией заморочек) представляется довольно сомнительной.Не факт. Я подаю команду BO AZ2:, и? А для того, чтобы не перемонтировать системный диск (любая ОС от такого, скорее всего, упадёт), в программе надо дополнительно контролировать это дело. Но это, скорее всего, можно будет обойти и как-то по-другому.


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


Вызов .GTLIN при отсутствии командной строки рисует приглашение программы, а при наличии - переставляет две части введённой строки местами, помещая между ними символ "=" (и если не ошибаюсь - заменяя пробелы на запятые). Нужно написать обратное преобразование Мне казалось, что лучше было бы принять строку CSI и, если в ней указан какой-то файл, использовать его, как источник команд. Если же строки нет, то принимать последовательность команд через .GTLIN и отрабатывать их, зациклив программу. Через .GTLIN - это чтобы можно было править строку посредством SL. В общем, тоже надо обдумать.

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

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

Так, что информации к размышлению - море! Буду думать...

Patron
18.06.2019, 14:24
И вообще, тут вот СуперМакс высказал предложение: сделать все эти дела внутри контроллера. Переключить контроллер в некоторое подобие терминала и общаться с юзером через терминал ДВК.Да, переключить контроллер в терминальный режим и принимать/передавать потоки байтов через родной регистр данных контроллера. Тогда программа в ДВК должна просто "коммутировать" эти потоки с системным терминалом, а всё остальное будет делать контроллер - рисовать промпт, выводить HELP, разбирать и выполнять команды. Это самый крутой способ, максимально совместимый со всеми возможными применениями контроллера.

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

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

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

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

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

SuperMax
18.06.2019, 14:47
да, для многозадачного решения надо будет продумать архитектуру, но пока начнем с простого - те однозадачный вариант

MM
18.06.2019, 15:02
Проблему разрушенного содержания накопителя при внезапном снятии питания обычно решают приделыванием достаточно большого конденсатора на связку "контроллер-накопитель", и детектирования понижения входных +5в. до, например, +4.5 в.
В самой минимальной конфе такой аддон будет содержать сам электролит ( например ~~2200 мкф 6.3 в. ), несколько диодов Шоттки , участок измерения питающих +5в. и софтовую поддержку этого в ОЭВМ.
Для более сложного варианта можно приделать и 8-выв. DC-DC ИС, обеспечивающую стабильные +5в. 0.1 сек после снятия основного +5в.

AFZ
18.06.2019, 16:23
Но здесь есть и подводный камень - в многозадачном окружении контроллер должен запоминать фазу терминального обмена на время выполнения блочного обмена. Иначе когда (например) фоновая задача дефрагментирует какой-то диск, смонтировать новый образ в какой-то свободный привод не получится. Вообще-то, приличная многозадачка просто не пустит эту программу к странице ввода/вывода, и правильно сделает, ибо не фиг.

Неприличная многозадачка, вроде RT-11FB/XM (ну, может быть, кроме каких-нибудь АСУТП), работает в многозадачном режиме крайне редко. Лично я пользовал эту многозадачность в единственном случае - для распечатки больших листингов программой QUEUE - она печатает, а я занимаюсь чем-то другим. Так вот, здесь, чтобы порулить дисками, можно просто остановить (или не запускать) оперативные задачи.


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

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

А для "больших" многозадачек я, по-простому, опубликую исходник, и пусть любители этих операционок сочиняют сами. Впрочем, для TSX, может быть, я и сам что-то сочиню.

SuperMax
19.06.2019, 06:39
Проблему разрушенного содержания накопителя при внезапном снятии питания обычно решают приделыванием достаточно большого конденсатора на связку "контроллер-накопитель", и детектирования понижения входных +5в. до, например, +4.5 в.
В самой минимальной конфе такой аддон будет содержать сам электролит ( например ~~2200 мкф 6.3 в. ), несколько диодов Шоттки , участок измерения питающих +5в. и софтовую поддержку этого в ОЭВМ.
Для более сложного варианта можно приделать и 8-выв. DC-DC ИС, обеспечивающую стабильные +5в. 0.1 сек после снятия основного +5в.
в нашем случае всё проще - надо стабильные 3.3В и только
соответственно заряженный конденсатор -> стабилизатор 3.3В и всё

AFZ
20.06.2019, 04:19
Но здесь есть и подводный камень - в многозадачном окружении контроллер должен запоминать фазу терминального обмена на время выполнения блочного обмена. Иначе когда (например) фоновая задача дефрагментирует какой-то диск, смонтировать новый образ в какой-то свободный привод не получится. У меня, похоже, не получится совместить терминальный и блочный режимы. Переключиться - без вопросов, а совместить не выходит. Поэтому, если запускать это дело под многозадачкой, то ее сначала лучше, наверное, остановить. То есть задача, в которой запускается настройка контроллера, должна перейти в монопольный режим, все остальные задачи должны быть приостановлены.

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

Естественно, запрос .SPFUN должен выдаваться в варианте без ожидания.

Кстати, ИМХО, эти дела актуальны и для устройства HD с программой MNT. Вот, программа MNT, запущенная под TSX, начала программировать чтение блока 0. Переслала номер устройства, номер блока, тут подоспел квант времени другой задачи, а она взяла, да и запустила на HD какую-то свою операцию ввода-вывода. И все, чтение блока 0 программой MNT сорвано. Или я ошибаюсь?

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

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

Поэтому внимание, вопрос: как в эмуляторе подключить к 176560 реальный компорт?

Patron
20.06.2019, 12:14
Кстати, ИМХО, эти дела актуальны и для устройства HD с программой MNT. Вот, программа MNT, запущенная под TSX, начала программировать чтение блока 0. Переслала номер устройства, номер блока, тут подоспел квант времени другой задачи, а она взяла, да и запустила на HD какую-то свою операцию ввода-вывода. И все, чтение блока 0 программой MNT сорвано. Или я ошибаюсь?Да, проблема есть - о полной совместимости процесса монтирования с многозадачным окружением я не думал.



как в эмуляторе подключить к 176560 реальный компорт?Добавки в любой конфиг, эмулирующий обычную ДВК, следующие:



[objects]
ComPort_Adapter = Ядро:Terminal_ComPort_Adapter
TerminalPort2 = Port_module:DL11-W


[links]
bus & TerminalPort2
TerminalPort2 <=> ComPort_Adapter


[ComPort_Adapter.ini]
PortName="COM5"
MinimalBreakTime_MKS=3000


[TerminalPort2.ini]
BaseIO_Address = 0176560
BaseVectorsAddress = 0360
DL11W_LineClock_ComponentDisabled = 1
DL11W_TerminalPort_BitsPerByte = 10
DL11W_TerminalPort_BaudRate = 9600

AFZ
20.06.2019, 13:36
Спасибо! А по поводу моего подхода к многозадачному монтированию (приостановке) особых замечаний нет, можно делать?

Patron
20.06.2019, 19:04
А по поводу моего подхода к многозадачному монтированию (приостановке) особых замечаний нет, можно делать?Если включение терминального режима будет наглухо блокировать дисковый обмен - даже программа монтирования не сможет обращаться к диску после перехода в терминальный режим. Это не очень круто. Без совмещения дискового и терминального обмена нормальной работы в многозадачной среде не будет. При правильном подходе - для запоминания фазы терминального обмена не надо много ресурсов, но зато блочные запросы смогут вклиниваться в любом месте не разрушая терминальный обмен.

AFZ
21.06.2019, 07:12
Если включение терминального режима будет наглухо блокировать дисковый обмен - даже программа монтирования не сможет обращаться к диску после перехода в терминальный режим.А ей-то это зачем? Её задача - выполнить переназначение, а не читать/писать файлы псевдодисков, которые, к тому же, могут быть ею же перемонтированы.


При правильном подходе - для запоминания фазы терминального обмена не надо много ресурсов Тут проблема в том, что я собираюсь сделать эти назначения в духе Командира Нортона - чтобы юзер, вместо набора команд, мог выбрать клавишами управления курсором что-то из предложенного на экране и одним-двумя нажатиями отправить выбранное на исполнение (в оглавление - войти, файл-образ - смонтировать). В стиле Командира Нортона, увы, не выйдет - не на всех компьютерах есть терминалы, поддерживающие, хотя бы, VT100, а возможностей VT52, совместимость с которыми есть у всех терминалов ДВК/УКНЦ, для этого недостаточно.

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

Да, конечно, юзер будет предупреждён, что не стоит держать слишком много файлов в одном оглавлении, тем не менее...

AFZ
23.06.2019, 08:07
Пошли первые вопросы от владельцев ДВК, купивших этот контроллер. Решение вопроса, который в барахолке задал DATAsoft, в общем-то, не так очевидно. Дело в том, что драйверов для КЖД существует несколько штук и все они имеют название файла DW.SYS, какой из них стоит на конкретной машинке мы, естественно, знать не можем. И не факт, что находящийся на наших псевдодисках DW.SYS окажется совместимым с тем, который стоит у вас на ДВК. Поэтому проще всего загрузить ДВК с этого DW, инициализировать VM: скопировать на этот VM: свой драйвер DW.SYS, потом, не выключая компьютер, перезагрузиться с AZ: (дважды нажать кнопку ОСТ и набрать 177226G) и скопировать с VM на SY актуальный драйвер DW, для чего последовательно подать четыре команды

DEAS - в некоторых из псевдодисков сразу при загрузке DK назначается
на какой-то из приводов LD, DEAS отменяет все назначения
REM DW - это чтобы убрать имеющийся на AZ драйвер DW из таблиц системы
UNPRO DW.SYS - драйвер DW.SYS может оказаться защищенным от удаления
COP/SY VM:DW.SYS SY: - и, наконец-то, копируем драйвер.
После чего надо будет перезагрузиться, и наша подборка системы заработант с вашим драйвером DW. Убедившись, что все работает, можно будет расписать этот DW.SYS на остальные псевдодиски AZ.

DATAsoft
28.06.2019, 23:11
Добрался сегодня до своего ДВК-3М. гружусь с AZ0 (177224G). После загрузки пишу SET DW INFORM и получаю:
https://pic.maxiol.com/thumbs/1561752667.1435238840.img6840.jpg (https://pic.maxiol.com/?v=1561752667.1435238840.img6840.jpg)
DIR DW0: дает тот же результат.

При этом загрузка с HDD работает штатно.
https://pic.maxiol.com/thumbs/1561752805.1435238840.img6841.jpg (https://pic.maxiol.com/?v=1561752805.1435238840.img6841.jpg)

Вопрос. Как настроить драйвер записанный на диске AZ0:?

p.s. По предыдущей инструкции пытался скопировать свой dw.sys - не заработало... Пишет ошибку как на первой картинке..

SKcorp.
28.06.2019, 23:24
Добрался сегодня до своего ДВК-3М. гружусь с AZ0 (177224G). После загрузки пишу SET DW INFORM и получаю:
https://pic.maxiol.com/thumbs/1561752667.1435238840.img6840.jpg (https://pic.maxiol.com/?v=1561752667.1435238840.img6840.jpg)
DIR DW0: дает тот же результат.

При этом загрузка с HDD работает штатно.
https://pic.maxiol.com/thumbs/1561752805.1435238840.img6841.jpg (https://pic.maxiol.com/?v=1561752805.1435238840.img6841.jpg)

Вопрос. Как настроить драйвер записанный на диске AZ0:?

p.s. По предыдущей инструкции пытался скопировать свой dw.sys - не заработало... Пишет ошибку как на первой картинке..

Раз "заголовка" драйвера при загрузке нет - значит он HDD не видит.
Видимо что-то регистры DW перекрывает.

PS: Плата AZ стоит последней?

DATAsoft
28.06.2019, 23:37
Попробовал после загрузки (177224G) подать команду BO AZ2:
Загрузилась оболочка типа NC и в ней мой диск DW0: виден. Нажимаю ВР+1 и в открывшемся окошке пишу DW0: и... в левой панели появляется содержимое моего диска DW0!!!

В ДВК почти ноль, поэтому просьба сразу не пинать.:)
--------------------------------------------------------------------
наверное я глючу.
В очередной раз загрузился по команде 177224G. Дал команду DIR DW0: и комп вывел каталог моего жесткого диска. Правда мой HDD разбит на 2 диска и далее по команде DIR DW1: получил зависший комп и жесткий диск дрочащий головками туда-сюда.))

Просьба к разработчикам. Напишите что за драйвер DW записан на ваших дисках AZ0-AZ7 и как его настраивать под мой HDD?

DATAsoft
28.06.2019, 23:53
PS: Плата AZ стоит последней?

Да. Стоит последней.
https://pic.maxiol.com/thumbs/1561755374.1435238840.img6842.jpg (https://pic.maxiol.com/?v=1561755374.1435238840.img6842.jpg)

SKcorp.
29.06.2019, 03:17
Попробовал после загрузки (177224G) подать команду BO AZ2:
Загрузилась оболочка типа NC и в ней мой диск DW0: виден. Нажимаю ВР+1 и в открывшемся окошке пишу DW0: и... в левой панели появляется содержимое моего диска DW0!!!

В ДВК почти ноль, поэтому просьба сразу не пинать.:)
--------------------------------------------------------------------
наверное я глючу.
В очередной раз загрузился по команде 177224G. Дал команду DIR DW0: и комп вывел каталог моего жесткого диска. Правда мой HDD разбит на 2 диска и далее по команде DIR DW1: получил зависший комп и жесткий диск дрочащий головками туда-сюда.))

Просьба к разработчикам. Напишите что за драйвер DW записан на ваших дисках AZ0-AZ7 и как его настраивать под мой HDD?

Возможно драйвер с HDD не переписался. Не все DW.SYS поддерживают разбивку и команду INFORM.

Надо загрузиться по команде B DW0 и вызвать SET DW INFORM - должны появиться параметры разбиения.
Потом тоже самое, загрузившись с AZ0: сделать DIR DW0: и, если выдаст каталог, вызвать SET DW INFORM - если будет Invalid set parametr, то драйверы
разные.

SuperMax
29.06.2019, 07:04
Попробовал после загрузки (177224G) подать команду BO AZ2:
Загрузилась оболочка типа NC и в ней мой диск DW0: виден. Нажимаю ВР+1 и в открывшемся окошке пишу DW0: и... в левой панели появляется содержимое моего диска DW0!!!

В ДВК почти ноль, поэтому просьба сразу не пинать.:)
--------------------------------------------------------------------
наверное я глючу.
В очередной раз загрузился по команде 177224G. Дал команду DIR DW0: и комп вывел каталог моего жесткого диска. Правда мой HDD разбит на 2 диска и далее по команде DIR DW1: получил зависший комп и жесткий диск дрочащий головками туда-сюда.))

Просьба к разработчикам. Напишите что за драйвер DW записан на ваших дисках AZ0-AZ7 и как его настраивать под мой HDD?
надо скопировать именно ВАШ драйвер на диски AZ:
вариантов копирования несколько

1. через дискету
- загрузится с DW, скопировать DW.SYS на дискету
- загрузится с AZ, скопировать DW.SYS c дискеты на AZ0: AZ1: AZ2:

2. через VM
- загрузится с DW, скопировать DW.SYS на VM0:
- загрузится с AZ, скопировать DW.SYS c VM0: на AZ0: AZ1: AZ2:

3. через ADOS на AZ2:
так как AZ2: содержит возможно правильную версию DW - те диск DW0: виден
то скопировать c DW0:DW.SYS на AZ0:
загрузится с AZ0: и скопировать AZ0:DW.SYS на AZ1: AZ2:

Версий DW.SYS было куча - основные отличия в разбивке
те первый DW - давал диск DW0: и только
потом была версия с разбивкой на два диска с установкой начала разбивки через SET DW
затем появилась версия с разбивкой по головкам - те на 4 диска
вообще разные версии драйверов есть на логическом диске с драйверами на AZ3:

AFZ
29.06.2019, 07:54
Похоже, включение драйвера DW.SYS в состав системных дисков AZ: было ошибкой. Их куча вариантов и все они разные. Надо будет убрать их (переименовать во что-то неактивное). У кого есть работающий DW, тот скопирует свой драйвер - через VM, допустим, а у кого его нет, тому он и не нужен. А пользовать свой винчестер с чужим драйвером - так еще и попортить что-нибудь на нем запросто.

DATAsoft
29.06.2019, 11:57
Со свежей головой попробовал следующую последовательность действий.
Загружаюсь 177224G. После загрузки диск DW0 виден, каталог считывается, диск DW1 не виден (мой драйвер настроен на два диска)
Даю команду:
https://pic.maxiol.com/thumbs/1561798554.1435238840.45217a1893ef4c188c.jpg (https://pic.maxiol.com/?v=1561798554.1435238840.45217a1893ef4c188c.jpg)
Драйвер похоже копируется.

После этого перезагружаю комп, снова 177224G и в итоге:
https://pic.maxiol.com/thumbs/1561798675.1435238840.f945a9a31637449785.jpg (https://pic.maxiol.com/?v=1561798675.1435238840.f945a9a31637449785.jpg)

Что я делаю не так?

P.s. Странно. В превью фотки развернуты на 90 градусов, а по ссылке нормальные открываются...

DATAsoft
29.06.2019, 12:31
кстати мой диск DW0 виден если только я предварительно загружаюсь с него и после сброса гружусь с AZ. Если загрузиться после включения сразу с AZ - мой HDD не виден.
Выкладываю мой драйвер DW.sys. Может сможете его запихнуть в вашу сборку AZ0 и выслать мне?
69408

Hunta
29.06.2019, 12:42
Что я делаю не так?
В зависимости от того, как настроена разбивка диска в DW.SYS, который на винте, возможно, что каталог читается нормально, а вместо DW.SYS читается фигня. Лучше - загрузиться с DW, скопировать DW.SYS на дискету, загрузиться с AZ, скопировать DW.SYS с дискеты, перезагрузиться (или INS DW:,), проверить.

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


кстати мой диск DW0 виден если только я предварительно загружаюсь с него и после сброса гружусь с AZ. Если загрузиться после включения сразу с AZ - мой HDD не виден.
Когда я вставлял два контроллера DW в свой Квант, была проблема с работоспособностью контроллеров. ЕМНИП, проблема была в том, что цепочки сигналов прерываний, запроса ПДП и их подтверждений получались замкнуты в кольцо. Опять же, ЕМНИП, решил проблему разорвав цепочку на одном из контроллеров. Поскольку было давно - то, что проблема наблюдается - факт (проверял, когда запускал Квант после приобретения монитора), как решал - давно было - не факт. Но Квант запустился (и были видны оба диска) только при определённом порядке контроллеров в корзине, что как бы намекает

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

Хотя нет, не прав в данном случае - есть пустое место

DATAsoft
29.06.2019, 12:43
Лучше - загрузиться с DW, скопировать DW.SYS на дискету, загрузиться с AZ, скопировать DW.SYS с дискеты, перезагрузиться (или INS DW:,), проверить.

Пробовал. Не помогло.

Hunta
29.06.2019, 12:47
Пробовал. Не помогло.
Ну тогда трясите разработчиков.

DATAsoft
29.06.2019, 13:41
Короче тормоз я, или наоборот слишком быстрый.:)
Включаю ДВК и сразу гружусь с AZ. А ведь надо немного подождать пока HDD раскрутится и инициализируется! Вот и вся проблема была.
Настроил драйвера DW.SYS на всех дисках под свой ЕС5300. Всё работает.

Всем спасибо!

Hunta
29.06.2019, 13:58
А ведь надо немного подождать пока HDD раскрутится и инициализируется
Значит, этот драйвер DW криво написан. У контроллера особенность - когда контроллер занят или не смог выйти (диск ещё не раскрутился, например, или диска вообще нет) на контакт с диском, доступен только один регистр (РКС). Даже, скажем, когда он готов передавать считанный сектор - перед считыванием из регистра следующего слова надо ждать готовности контроллера, иначе - trap4

AFZ
29.06.2019, 14:17
Когда я вставлял два контроллера DW в свой Квант, была проблема с работоспособностью контроллеров. ЕМНИП, проблема была в том, что цепочки сигналов прерываний, запроса ПДП и их подтверждений получались замкнуты в кольцо.Этого не может быть потому, что этого не может быть никогда! :)

На платах процессоров ДВК нет контактных площадок для К ППРI Н и К ППДI Н. Добежавшие по кольцу до платы процессора ППР и ППД придут на голый стеклотекстолит. То есть, проблема была в чем-то другом.

MM
29.06.2019, 14:42
потому
Адреса КЖД были разные ?
Вектора КЖД были разные ?
Хватало ли питания - каждая КЖД жрет по 5 а., а просадка питания КМ1801ВМ3А ниже 4.80 вольт весьма критична, особенно на частотах свыше 4-5 мгц.

Hunta
29.06.2019, 14:50
Адреса КЖД были разные ?
Вектора КЖД были разные ?
Естественно разные, я и тогда тупым не был


Хватало ли питания - каждая КЖД жрет по 5 а
Ещё раз подробно.

Есть два контроллера, назовём условно A (нетронутый) и Б (переделанный на новые адреса и вектор). Нумерация посадочный мест - сверху - 1 2 3 и 4. Загрузочная RSX на диске, который подключается к А.

Ставлю - А в 1, Б в 2 - RSX не грузится.

Ставлю Б в 1, А в 2 - RSX грузится, оба диска в процессе загрузки монтируются и работоспособны.

Поскольку вопрос не актуален, выяснять, в чем было дело и что, помимо смена адреса и вектора ещё было переделано на плате - не собираюсь.

AFZ
16.07.2019, 20:20
Пофиксил - не знаю, баг это, или нет. В обшем, так: у меня шина АД (Адрес-Данные) заведена СТМ-ке на GPIO E. К системной (силовой) МПИ она подключена через драйверы 531АП2, c открытыми коллекторами, которым необходима подтяжка. Силовая МПИ, как известно, подтянута через 222 Ом к источнику +3.37 В (для одной корзинки, для нескольких корзинок нужна еще более злобная подтяжка). Внутреннюю шину я подтянул через 1 кОм к источнику +3.3 В. Так вот, пока я портил софтину с STM32F103 на STM32F407 (макетировал я на 103-м, а боевую плату СуперМакс сделал на 407-м), в процессе борьбы с необъяснимыми редкими глюками, я переключил выходы GPIO E на открытые стоки. Источник глюков оказался не там, я его, в конце концов обнаружил и пофиксил, а открытые стоки убрать забыл. Все хорошо работало на всех платах ЦП, включая и разогнанную до 6.3 МГц 1201.03 плату Макса.

А вот позавчера (14.07), когда приехали новые платы, Макс героически запаял одну, стал проверять, обнаружились глюки. После нескольких проверок впервые решили глянуть, что там происходит, осциллоскопом. (До этого всю разработку я провел ни разу не подключая осциллоскоп.) Результаты, мягко говоря, разочаровали. До этой разработки я никогда не использовал 531АП2 и не представлял, что это такое - открытый коллектор, подтянутый к +3.3В резистором 1 кОм. Так вот, это ужас! 222 Ом - это максимум, что можно допустить, с 1кОм нарастающие фронты импульсов оказываются настолько затянутыми, что уверенного распознавания можно не ждать! Тем более чего ожидать от внутренних шин родных ДВК-шных плат, которые подтянуты хоть и на +5В, но где 2.2 кОм, а где и 4.7 кОм. Неудивительно, что разгонный потенциал ДВК-шных плат, можно сказать, никакой! Нет, на плате ЦП все (почти) хорошо - там же, в основном, все БИС работают на шину выходами с 3 состояниями, а вот внешняя, через те самые драйверы АП2...

В общем, я посмотрел осциллограммы, прикинул, что к чему, да и переключил выходы GPIO E назад, в три состояния. И все заработало. Более того, Макс еще разогнал свою 1201.03, до 6.98 МГц, оно и тут оказалось вполне работоспособным. Зато с прогревом начал гнать КЦГД - ИМХО, сыграло злую шутку переключение АП2 на передачу в МПИ по сигналу К ВВОД Н, т.е. то самое образование общего поля ввода для всех абонентов, подключенных к МПИ, из расчета на то, что единственный адресованный абонент МПИ подключится к этому полю своими открытыми коллекторами, а остальные ему не помешают. Собственно, этот баг несложно пофиксить, мы это проделаем, когда Макс вернется из отпуска...

А вот AZ после багфикса и на такой разогнанной машинке работает вполне весело. Обновленная прошивка выложена на официальной страничке (https://forum.maxiol.com/index.php?showtopic=5388&st=0&gopid=53231&#), рекомендую обновить.

В общем, мои мысли на эту тему. Проектируя новоделы, ИМХО, надо забыть про 531АП2. Есть вполне приличные драйверы 74F245, с тремя состояниями, в кузове 8 двунаправленных драйверов с общим управлением, 64 мА. В одной корзинке, даже большой, все будет работать в лучшем виде. В общем-то и правильно согласованная трехкорзиночная конфигурация работать будет, хотя, конечно, для нее от драйверов требуется 60 мА, что близко к пределу в 64 мА, ну что делать, если надо. Вентиляцию усилить... Тем более, что у правильно спроектированных абонентов МПИ основное направление передачи - с B на A, а передача с A на B включается достаточно редко и ненадолго...

Да, еще тревожный симптом. Года два-три назад, когда мы обсуждали шинные драйверы и решили, что лучше всего были бы 74F641, хотя можно и 74А245, их на Али было валом. Год-два назад я снова смотрел 641-е, нашлось всего у двух или трех продавцов. Сейчас 641-х на Али нет вообще. А 245-е есть всего у 2-3 продавцов. ИМХО, их уже на производят, а на Али распродают старые запасы. Распродадут, и их не будет...

MM
16.07.2019, 20:52
с 1кОм нарастающие фронты импульсов оказываются настолько затянутыми,
Можно ли скриншот осциллограммы ?
При входе на АП2 с триггера на 531 серии выход АП2, подтянутый 1 ком к +3.3.в может иметь фронт не более 20 нс длиной, при емкости монтажа порядка ~20 пф.
Очень существенную помеху вносит щуп ослика 1:1 ( когда фактически 1 ком прокачивает коаксиал порядка 1 метра до входа в ослик + сам входной каскад ослика - порядка 150 пф общей емкости ), да и щуп 1:10 с конденсатором ~30 пф. тоже не сахар.
Сам ослик следует выбирать цифровой или совковый от 30 мгц, на С1-94 мало что видно...

Кстати, 74F641 СМД всё еще можно купить, но гуглить следует не из РФ, и цены там ( у китайцев ) существенно больше 1$ за 1 шт.

AFZ
17.07.2019, 05:20
Можно ли скриншот осциллограммы ? Пожалуйста (https://yadi.sk/d/IPBkUna1l9z7EA).

Красный - это один из битов шины АД (внутренней, той самой, с подтяжкой 1 кОм). Синий - на фото 2 это К СИА Н, с корзинки, на фото 3 - внутренний сигнал, полученный из К ВВОД Н когда ЦП читает какой-то из регистров нашего контроллера, фото 4 - то же самое для записи в регистры контроллера. Особенно показательно фото 3, там где красный импульс вниз находится внутри синего, точнее нарастающий фронт красного в этом месте. Так сказать, почувствуйте разницу между ОК, подтянутым 1 кОм и тремя состояниями. :)

SuperMax
30.07.2019, 10:09
Начата рассылка контроллеров версии 1.01 а также конструкторов
Соответственно инструкция
Контроллер псевдодиска на MicroSD: сборка и наладка конструктора контроллера v1.01 (https://forum.maxiol.com/index.php?showtopic=5452)

Контроллеры заказывать в этой теме
https://zx-pk.com/forum/viewtopic.php?f=7&t=13392

AFZ
31.07.2019, 15:01
Занимаюсь драйверами, для RT-11, не самых последних версий. Т.е. 4.х - 5.х без 5.05-5.07, 8 дисков максимум. Вроде-бы, обслужил диспетчер памяти - еще надо потестить, но, в общем-то, и RT-11XM, и TSX, вроде-бы, работают.

Обслужил прерывания. В процессе их обслуживания выяснилось, что первоначально задуманный вариант управления ими не очень удобен. Для удобства контроллеру добавлена команда "нет операции" которая не изменяет внутреннего состояния контроллера, но бит D6 CSR, записываемый вместе с этой командой, попадает куда надо, то есть код 100+AZNOP, записанный в CSR контроллера, разрешит прерывания, а код 0+AZNOP - запретит. Таким образом, можно отложить взведение разрешения прерываний до тех пор, пока не понадобится, чтобы это прерывание произошло. Что будет актуально, если мы, все-таки, соберемся сделать кэширование. Новая прошивка (1.0.3), как всегда, выложена на официальной страничке (https://forum.maxiol.com/index.php?act=ST&f=68&t=5388&st=0#). Заодно пофиксил мелкие баги.

Драйвера выложу по окончании тестирования.

Arseny
31.07.2019, 20:30
А когда же будет готова УКНЦ версия?

UA3GBV
12.08.2019, 20:00
Вопрос снят. Проблема (все-таки) с ноунеймовскими карточками. На брендовой все работает, авторам спасибо!

AFZ
20.08.2019, 22:04
Некоторое время занимался драйверами для контроллера AZ. Я довольно давно прописал в фирмвари контроллера обслуживание прерываний, но в драйвере для ожидания окончания операций с микро-SD использовалась банальная прополка (Polling). Вот, наконец-то, сделал ожидание, как и положено, через прерывания. Если система многозадачная, она может отдать это время ожидания другой задаче. Кроме того, я, наконец-то, сделал ХМ-версию драйвера. Ну, и ее вариант - драйвер для TSX. Итого, выложено 6 файлов драйверов, на двух логических дисках - на одном (AZPOL.DSK) лежат драйвера AZ.SYS, AZX.SYS и AZ.TSX с прополкой, на втором (AZINT.DSK) - AZ.SYS, AZX.SYS и AZ.TSX с прерываниями.

Да, в руководстве по TSX написано, что для нее годятся драйвера от RT-11 в версии для XM. Это, в общем-то, почти так, с одним небольшим отличием, касающимся небольшой разновидности устройств, имеющих встроенный буфер и обменивающихся с системой в PIO-mode. Обычно в PIO-mode работают относительно медленные устройства, для передачи данных между ними и памятью в ХМ-мониторе предусмотрены программы $GTBYT и $PTBYT/$PTWRD. Однако, для быстрых устройств эти программы оказываются слишком тормозными. Поэтому в ХМ-мониторе предусмотрен вариант передачи данных, когда драйвер устройства сам рулит диспетчером памяти, используя его регистр KPAR1. В TSX предусмотрен аналогичный механизм, только используется не KPAR1, а KPAR6. В принципе, и в ХМ и в TSX есть еще один механизм - подпрограмма $P1EXT, которая каким-то образом позволяет использовать один и тот же код и под ХМ и под TSX, но я не стал вникать еще и в эти дела и, по-простому, сделал дополнительный параметр генерации - TSX$P, по которому генерится програма либо для ХМ, либо для TSX, через KPAR1 в первом случае и через KPAR6 во втором.

Предлолженные драйвера должны работать под всеми версиями RT-11, начиная с 4-й. Под 5.7 они тоже должны работать, но только для восьми устройств (AZ0 - AZ7). Поддержка 64-х устройств не предусмотрена в самОм контроллере, и не будет - FATFS жрет оперативку, как свинья помои. На каждый открытый файл будьте добры отдать порядка 2.5К, итого для 64-х открытых файлов (каждый из которых будет псевдодиском) надо будет 160К. А их в нашем МК всего 192... Да и вообще, ИМХО, эти 64 устройства - это чисто маркетинговый ход DEC, мол мы тоже поддерживаем диски большого объема. А реально, любой задаче под RT-11, трех-четырех дисков объемом 32М - выше крыши! Другим операционкам, поддерживающим диски большего объема (та же RSX-11 или ДИАМС) контроллер позволит использовать те же 8 файл-образов но объемом до 4Г каждый. Но это будет только тогда, когда кто-то займется созданием драйверов для этих систем, а мне хватило и RT-11 (ну, плюс TSX).

В этой выкладке (https://forum.maxiol.com/index.php?showtopic=5388&st=0&gopid=53374&#) основной системой является RT-11SJ (DS) V5.01. Кроме того там лежит минимальный сгенерированный вариант TSX 6.1 и RT11XM 5.01. Все три системы запускаются, но насторек для нормальной работы ХМ и TSX я не делал - попробовать можно, а, соберётесь пользоваться - настройте так, как вам надо. То есть, отредактируйте должным образом файлы STARTX.COM и STARTS.TSX. И вообще, TSX сгенерирован далеко не лучшим образом - мне он был нужен только чтобы протестировать работоспособность драйвера AZ в версии для TSX, поэтому я особо в эти дела не вникал.

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

Из заложенного в фирмварь, но еще не отработанного со стороны ДВК осталось управление монтирование и размонтированием файл-образов, лежащих на флешке, на виртуальные дисководы AZ0-AZ7. И когда я займусь этим, даже не знаю. Я, все-таки, основательно подзабыл программирование на асме PDP-11. То есть, конечно, что-то я еще помню, но писать "влет", не заглядывая ни в какие книги, как я это делал 30 с гаком лет назад - увы...

tc002
24.08.2019, 02:24
Получил контроллер (Отдельное огромное спасибо его создателям и всем кто участвует в его развитии), вставил в Квант 4с (в единственно свободный полу-слот). Включил. Появляется надпись:
**** Доступное ОЗУ - 1М *
@ 001000
@
Набираю команду 177226G, выскакивает зацикленная строчка: @G000002

Я что-то должен ещё сделать?

(Мой HDD разбит на 4 диска программой TDW.SAV Рождествин (TDW V05.10). На DW0 стоит RT11SJ)

SuperMax
24.08.2019, 07:16
Получил контроллер (Отдельное огромное спасибо его создателям и всем кто участвует в его развитии), вставил в Квант 4с (в единственно свободный полу-слот). Включил. Появляется надпись:
**** Доступное ОЗУ - 1М *
@ 001000
@
Набираю команду 177226G, выскакивает зацикленная строчка: @G000002

да, что-то пошло не так
1. посмотреть на светодиод - если мигает то определить ошибку
https://forum.maxiol.com/index.php?s=&showtopic=5388&view=findpost&p=53140
2. проверить наличие MicroSD и корректность ее установки.
3. вынуть контроллер, аккуратно вынуть GAL-ки из панелек, вставить обратно до упора. вставить обратно. см п1.
4. поменять слот.

AFZ
24.08.2019, 07:33
ГАЛки вряд ли виноваты. И вообще, первым делом п.1 - что там на светодиоде?

(Мой HDD разбит на 4 диска программой TDW.SAV Рождествин (TDW V05.10). На DW0 стоит RT11SJ)Если в системе на диске есть драйвер VM, то подключить этот винт к системе на AZ без вопросов - здесь (https://forum.maxiol.com/index.php?s=&showtopic=5388&view=findpost&p=53185) все подробно описано.

tc002
24.08.2019, 22:11
Лампочки не горят. А батарейка там нужна? а то у меня её нет.

AFZ
25.08.2019, 05:29
А батарейка там нужна? а то у меня её нет. Пока нет. Она предусмотрена для часов РВ, которые я еще не обслужил в фирмвари.


Лампочки не горят. Два светодиода? То есть AZ V1.00 ? Тогда, вместо команды 177226G, первым делом подаем команду

17777220/

Чтобы не считать нажатия семерки, можно зажать ее и подержать, пока автоповтор не нащелкает их с десяток - пультовая программа сохранит от набранного восьмеричного числа последние 22 разряда, остальное отбросит, т.е. 77777777777220 при любом количестве семерок, большем, чем 4, превратится в 17777220.

Команда 17777220/ - это команда "открыть ячейку с физическим адресом 17777220, т.е. CSR контроллера. Пультовая программа напечатает содержимое этого CSR. Возможны варианты:

1. 000000 - что-то не то с флешкой
2. 000200 или Bus error (может быть вопросительный знак - не помню, как реагирует стандартная пультовая программа 134) - что-то не то со связью контроллера и ДВК.

Если в CSR нули, заливаем свежую прошивку (https://forum.maxiol.com/index.php?s=&showtopic=5388&view=findpost&p=53337), флешку очищаем (но не форматируем, надо просто удалить все файлы, а еще лучше взять новую SDHC, 32Г или меньше, а эта пусть полежит) и заливаем на нее последний набор файл-образов (https://forum.maxiol.com/index.php?s=&showtopic=5388&view=findpost&p=53115), сохраняя стуктуру файлов и оглавлений в том же виде, как оно лежит в архиве, после чего пробуем запуститься.

Если в CSR 000200 или его не видно (вопрос / Bus error), то все хуже. Если не знаешь, в срочном порядке осваивай пультовую программу, чтобы фразы "Открой CSR", "занеси туда код 015" и т.п. не вызывали ступора. Будем разбираться вместе.

Да, если CSR видно и в нем не ноль, нажми три раза клавишу ПС (команда "закрыть текущую открытую ячейку и открыть следующую"), результаты в студию.

И вообще, внимательно прочитай всю тему с инструкциями (https://forum.maxiol.com/index.php?s=&showtopic=5388&view=findpost&p=53036). Букв там, конечно, многовато, но я, вроде-бы, неплохо пишу технические тексты, все должно быть понятно.

tc002
25.08.2019, 06:49
"Описание" написано очень хорошо, и даже интересно читать. Просто сама машинка требует слишком низкоуровневые команды и знания. (клавишу ПС нашел не сразу)

17777220/000200
17777222/000000
17777224/000777
17777226/014700
17777230/BUS ERROR

AFZ
25.08.2019, 07:52
Так. Контроллер работает, файл-образы восприняты правильно, но что-то дурит при обмене по шине. Для начала попробуй переставить контроллер вместо MY (его просто вынуть). Потом попробуем кое-что еше, но сейчас у меня проблемы со временем. У меня GMT+6, у тебя, как я понимаю, GMT-5 или -6 и сейчас субботний вечер, да? Тогда, лучше всего, займемся плотно (если, конечно, не пойдет после перестановки) часов через 10-12 - у тебя будет утро воскресенья, у меня вечер. Тогда и повоюем. Возможно, придется заменить прошивку. Запасись новой карточкой микро-SD, чтобы старую пока не трогать. Напоминаю, SDXC наш контроллер не поддерживает, так, что карточка нужна 32Г или меньше. Кардридер для микро-SD есть?

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

Добавлю. Первые версии прошивки неважно работали на разогнанных машинках, с частотой выше 6 МГц. Я это пофиксил в прошивке 1.02, начиная с нее ЦП при разгоне отказывает раньше, чем AZ. Проверить просто: запускаем программу SPEED.SAV, если сложений больше 1000, значит машинка разогнанная и надо менять фирмварь AZ. Подробности см здесь (https://zx-pk.ru/threads/28134-kontroller-psevdodiska-na-sd-karte-dlya-dvk.html?p=1020638&viewfull=1#post1020638).

tc002
25.08.2019, 22:15
Карточку приготовил.

Вынул МУ. Вставил в неё контроллер, пишет "Ошибка вектора 4" @ 020205
Набрал 17777220/, получил
17777220/177777

17777222/000200
17777224/000000
17777226/000777
17777230/000000
17777232/000000

Вставил МУ обратно, убрал контроллер. Но теперь всегда пишет:
"Ошибка вектора 4"
@ 020205

AFZ
26.08.2019, 04:33
А как там питания? Советские литики наверняка пересохли...

tc002
26.08.2019, 04:44
Не, бочонки заменены.

AFZ
26.08.2019, 06:13
А что вольтметр показывает?

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

Подозреваю, что на К ДА03 Н образовался ноль вне зависимости от желания ЦП. Допустим, расконтачился соответствующий контакт между платой ЦП и корзинкой. В общем, машинке надо делать профилактику. Запустить ее без контроллера AZ, убедиться в ее полной (или частичной) работоспособности, измерить скорость программой SPEED.SAV, если сложений больше 1000, перешить прошивку AZ и заменить флешку и только после этого вставлять и запускать AZ.

tc002
26.08.2019, 06:51
Контроллер я вытащил. Так она ж теперь только "Ошибка вектора 4" показывает. B - DW0 больше не работает и не загружается она больше с HDD.

А где конкретно измерять, фото не попадалось случайно? (Схемы читать не умею. С ремонтом электроники знаком на уровне "кое как припаять оторванный проводок на место")

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

Измерил на флоппи, первый и четвертый показывает 7.5 .. 7.8 вольт. Остальные 5.4В .. 5.6В.

SuperMax
26.08.2019, 07:17
Контроллер я вытащил. Так она ж теперь только "Ошибка вектора 4" показывает. B - DW0 больше не работает и не загружается она больше с HDD.

А где конкретно измерять, фото не попадалось случайно? (Схемы читать не умею. С ремонтом электроники знаком на уровне "кое как припаять оторванный проводок на место")

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

Измерил на флоппи, первый и четвертый показывает 7.5 .. 7.8 вольт. Остальные 5.4В .. 5.6В.

если на флопе измерять то
первый (смотря с какой стороны смотреть) будет +12В
потом две земли и +5В

соответственно, я вижу явно завышенное напряжение 5.4В .. 5.6В вместо +5.0
+12В тоже завышено тк получается 5.6+7.8=13.4

точность установки напряжения имеет значение
вообще правильно измерять на конденсаторах, к примеру, процессорной платы и там должно быть ровно 5,0В +- 0.1В

+12тоже выводится в диапазон +-0.2В

tc002
26.08.2019, 08:04
Попробую почистить контакты на платах...

SuperMax
26.08.2019, 09:39
Попробую почистить контакты на платах...
я бы начал с ревизии БП
те завышенное напряжение это проблема
рекомендую прочитать темы
https://forum.maxiol.com/index.php?showtopic=5003
https://forum.maxiol.com/index.php?showtopic=5158
те надо не только заменить все электролиты, но и выставить правильное напряжение
при настройке для МС9028 надо обеспечить минимальную нагрузку - те 3А по 5В и 1А по 12В (подойдут автомобильные лампочки)
настраивать с живыми платами и периферией крайне не рекомендуется тк может привести к фатальным последствиям

tc002
27.08.2019, 07:31
Заработал мой ДВК4. Когда вытаскивал МУ, зацепил маленькие стрелочки джамперс (8 штучек). Они каким-то образом все в ряд встали, хоть я вроде аккуратно манипулировал.
Хорошо что на своем сайте коллекций http://computers.koi8.io/product/pdp11-family/elektronika/dvk-4 делал фотки когда-то, по ним и восстановил рисунок.

Теперь обновлю фирмваре в контроллере, и буду дальше смотреть...

Hunta
27.08.2019, 08:07
на своем сайте коллекций
У Вас там небольшая ошибка в описании. На МС 1201.03-.04 нет порта RS232, там порт использует токовую петлю (current loop)

tc002
27.08.2019, 16:04
У Вас там небольшая ошибка в описании. На МС 1201.03-.04 нет порта RS232, там порт использует токовую петлю (current loop)

Спасибо, подправил. Если кому будет нужен сайт, где выложить свою коллекцию - обращайтесь! Могу исходники выложить.

Hunta
27.08.2019, 17:03
Могу исходники выложить
Думаю, в любом случае стоит выложить

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

Вдогонку. Последовательный порт на .03-.04 поддерживает не только 9600 бод в секунду, у .065 достаточно большой диапазон скоростей, максимальная, ЕМНИП - 57600

tc002
27.08.2019, 20:04
Обновил фирмваре до 1.0.4. Засунул новую флешку 1Gb с дисками из AZwINI.zip
Теперь горит зеленая лампочка на контроллере.

**** Доступное ОЗУ - 1М *
@ 001000
@
Набираю команду 177226G, выскакивает зацикленная строчка: @G000002

Набираю 17777220/

17777220/000200
17777222/000000
17777224/000777
17777226/014700
17777230/BUS ERROR

AFZ
27.08.2019, 21:47
Блин, чудеса! А что говорит SPEED.SAV ?

Может быть 177224G поможет?

Как вариант, вынуть MY, вынуть КЖД и воткнуть AZ в верхнее левое гнездо. Когда заведется, будем думать дальше.

tc002
27.08.2019, 22:06
У меня на HDD не оказалось SPEED.SAV

Вытащил, вставил в верхнее левое гнездо. Горит зеленая лампочка. Набираю команду 177224G, выскакивает зацикленная строчка: @G000002 (как и в случае 177226G)

AFZ
27.08.2019, 22:27
А что находится с адреса 10000 ? После неудачного запуска загрузки остановить машинку кнопкой ОСТ и подать команду 10000/ а затем с десяток ПС.

tc002
27.08.2019, 23:32
http://computers.KOI8.io/product/pdp11-family/elektronika/dvk-4/dvk-4_imgd43d392c-04aa-4944-bd3f-ccf5bb61e0e9.jpg

AFZ
28.08.2019, 05:51
Так. Во-первых, возьми картинку под спойлер.
Во-вторых, я никак не мог понять, что значит "выскакивает зацикленная строчка: @G000002", оказывается, машинка просто вылетает в останов по нулевому адресу (там действительно ноль, если его рассматривать, как команду, то это команда HALT), а ты зачем-то пытаешься еще раз нажать G (то есть 0G), то есть запустить машинку с нулевого адреса.

Но начало программы загрузчика вошло правильно. Под спойлером полный текст загрузчика, сравни его весь, дальше будем делать выводы. Апострофом после содержимого ячейки MACRO помечает те ячейки, содержимое которых линкер изменит (в данном случае добавит 10000). К строке 32 dskbot=.+2 это не относится - это не содержимое ячейки, а значение, присвоенное метке dskbot, т.е. 106 (10106, в эту ячейку загрузчик должен положить номер привода AZ, с которого надо грузиться и это последний код, присылаемый с контроллера).

Если код влетел полностью, открой R6 и глянь, что лежит в ячейке с этим адресом (команда R6/ и затем клавиша @), там должен быть алрес, где прервалась программа загрузчика. Если же загрузчик вошел не полностью, глянь R0, в нем должен быть адрес первой ячейки, которая не получена от AZ.
1 000006 R6 = %6
2 000007 R7 = %7
3 .ENABL LC
4 .DSABL GBL
5
6
7 000000 000240 START: nop
8 000002 106427 mtps #340
000340
9 000006 012706 mov #START,R6
000000'
10 000012 012704 MOV #177220,R4
177220
11 000016 005024 CLR (R4)+
12 000020 010405 MOV R4,R5
13 000022 016700 mov dskbot,r0
000060
14 000026 032700 bit #177770,r0
177770
15 000032 001401 beq 4$
16 000034 000000 0
17 000036 4$:
18 000036 010015 mov r0,@R5
19 000040 012744 MOV #1,-(R4)
000001
20 000044 005015 CLR @R5
21 000046 012714 MOV #2,@R4
000002
22 000052 012714 MOV #5,@R4
000005
23 000056 005002 clr R2
24 000060 012701 MOV #400,R1
000400
25 000064 105714 1$: tstb @R4
26 000066 100376 BPL 1$
27 000070 012714 mov #15,@R4
000015
28 000074 011522 2$: MOV @R5,(R2)+
29 000076 077102 SOB R1,2$
30 000100 000240 nop
31 000102 005007 CLR R7
32 000106' dskbot = .+2
33 000000' .end START
R6 и R7 вместо SP и PC я использую по привычке, оставшейся с перфоленточной ОС - тамошний Перемещающий Ассемблер не имел предопределений регистров, приходилось каждую программу начинать с их определения, т.е. R0=%0 ... R5=%5, оставшиеся два регистра я с разгона пометил, как R6 и R7 (ИМХО, я и сокращений тогда этих не знал - SP и PC), и привык к этому - даже сейчас, нужно обратиться к PC, руки сами пишут R7. :)

tc002
28.08.2019, 07:27
Не-не, я не нажимаю G. Она сама очень быстро буквально на каждой новой строчке рисует @G000002
http://computers.KOI8.io/product/pdp11-family/elektronika/dvk-4/dvk-4_img49e0619c-ed08-4d09-93c0-10a73890dd21.jpg

Но, когда я нажимаю Стоп Кадр на клавиатуре, то видно что там оказывается чередуется 000002 и G (которая вероятно сливается в @G000002, если без стоп кадра)
@000002
@G
@000002
@G

Я предлагаю в личке договорится на Скайп конференс звонок, и вместе debug step by step.

AFZ
28.08.2019, 07:41
Но, когда я нажимаю Стоп Кадр на клавиатуре, то видно что там оказывается чередуется 000002 и G Угу, оно самое. Учитывая, что между @ и цифрами есть пробел, оно сливается. Странно ее расколбасило.


Я предлагаю в личке договорится на Скайп конференс звонок, и вместе debug step by step.ОК, я пошел в личку.

monoxrom
23.11.2019, 21:31
приехала и мне недавно посылочка, но я немного приболел и не запускал сразу и вот вчера впервые притронулся к миру PDP и RT-11 )))
Начал с платы для УКНЦ так как давно хотел запустить этот комп

Саму плату посадил на такий переходник:
http://i.piccy_.info/i9/66d7f7402ef24eb15797f30e56582c59/1574533473/39269/1338996/IMG_3089_500.jpg (http://piccy_.info/view3/13516852/690802ad19e4bf2e43922d3f41d31551/)http://i.piccy_.info/a3/2019-11-23-18-24/i9-13516852/472x354-r/i.gif (http://i.piccy_.info/a3c/2019-11-23-18-24/i9-13516852/472x354-r)
Заодно и поменял блок питания на маленький АТХ вместо родного на 42 вольта. Поменял грамотно, оставил родной включатель компьютера и красный светодиод тоже есть :)

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

Теперь извините меня но подскажите несколько вопросов для чайников, ведь я с такими компютерами вообще не знаком, а хочу познакомится :)

- Какие здесь есть дисковые устройства и как их выбрать и перейти?
- у меня есть внешний флоппик от учительской УКНЦ, как с ним работать?
- Как я могу скинуть на флешку свои проги, или игры? чтобы поиграть?
- Где брать софт?
- может есть какая-то толковая и простая книга по рт-11 для чайников?

пока что все :)

hobot
23.11.2019, 21:53
- Какие здесь есть дисковые устройства и как их выбрать и перейти?
если я прав.понял у вас AZ контроллер, стандартный драйвер для стандартного КМД УК - MZ.SYS
и ещё есть вариант IDE контроллера ЖД, там драйвер и устр-ва (разделы ЖД) - WD.SYS


- Где брать софт?
http://hobot.pdp-11.ru/
в темах на этом форуме, образ для AZ-контроллера вы можете подготовить в эмуляторе средствами RT-11 и записать\скинуть туда всё что считаете нужным...


- может есть какая-то толковая и простая книга по рт-11 для чайников?
среди операторов системы нет таковых, есть операторы с разным уровнем опыта, литературы по теме
выше крыши...
http://pdp-11.org.ru/info.pl

SuperMax
24.11.2019, 10:06
приехала и мне недавно посылочка, но я немного приболел и не запускал сразу и вот вчера впервые притронулся к миру PDP и RT-11 )))
- Какие здесь есть дисковые устройства и как их выбрать и перейти?

устройства AZ0: AZ1: итд
загрузится с другого устройства - BOOT AZ6:



- у меня есть внешний флоппик от учительской УКНЦ, как с ним работать?
если есть контроллер, то это устройство MZ


- Как я могу скинуть на флешку свои проги, или игры? чтобы поиграть?
Контроллер псевдодиска на MicroSD (https://forum.maxiol.com/index.php?showtopic=5388)
Контроллер псевдодиска на MicroSD: сборка и наладка конструктора контроллера v1.01 (https://forum.maxiol.com/index.php?showtopic=5452)
Контроллер псевдодиска на MicroSD: подключение сетевой карты (https://forum.maxiol.com/index.php?showtopic=5490)
Контроллер псевдодиска на MicroSD на шину МПИ: особенности версии для УКНЦ (https://forum.maxiol.com/index.php?showtopic=5491)



- Где брать софт?
http://mirrors.pdp-11.ru/_pdp-11/_soft/



- может есть какая-то толковая и простая книга по рт-11 для чайников?

https://forum.maxiol.com/index.php?showtopic=5004

monoxrom
24.11.2019, 21:50
Ага про книги понял... но что-то не понял как загружать другие программы (((
То что есть на флешке это понятно пишу например boot az6: и оно грузит другую систему, а как быть с софтом со стороны?

Вот например качал архив игр отсюда:
http://uknc.narod.ru/Soft6/game.rar
http://mirrors.pdp-11.ru/_pdp-11/_soft/game.dsk.gz

Назвал файл не games.dsk а допустим AZ005.DSK потом пишу в системе boot az5: но оно не грузится(((
Еще создавал файл на 32 мб и вставлял байты дискеты в начале файла, а остальное пространство нолики,
но оно так чтоже не грузилось. Как что нибуть другое загружать?

hobot
24.11.2019, 22:01
Назвал файл не games.dsk а допустим AZ005.DSK потом пишу в системе boot az5: но оно не грузится((( игровые сборники не гарантируют наличие системы,
вы осваивайте работу с каталогами и почитайте уже описания команд RT-11,
термин "загрузка" не совсем корректен и не однозначен в рамках рабочей сессии ОС.
Если вы уже загрузили систему, вы можете ПКМ попытаться запустить исполнямый файл с любого другого устр-ва, как системного так и не системного.

monoxrom
29.11.2019, 22:43
почитал немного... чем больше читаю тем больше ничего не понятно ((((

Я не могу понять как старая операционная система может знать что где-то на железе есть файлик который надо считать диском?

на карточке в ini файле я допустим написал D3=0:/disks/GAMES.DSK
сам файлик на 33 553 408 байта (как написано в инструкции) но не понятно так точно надо делать со всеми файлами? а почему на карточке есть другие файлы которые не такого размера? например 51SYS_DS.DSK ?

Потом как мне обратится к этому диску?
пишу что AZ3: что LD3: система ничего не знает

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


Предлагаемый контроллер эмулирует до восьми дисковых устройств AZ на одной микроSD-карточке. Каждый эмулируемый диск (псевдодиск) представлен на карточке файлом с точки зрения PC,
Это понятно с точки зроения ПЦ, а с точки зрения УКНЦ?


просто помещаем карточку в кардридер, подключаем к PC, копируем на карточку файлы нужного объема (и с нужным содержимым), переставляем ее в контроллер, и всё
А что все? как этот диск увидеть на укнц? :)

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

А программы в РТ-11 я так понял это sav файлы? которые в документации называются "Файл формата отображения памяти "
А почему так страшно? а не просто исполняемый файл? Или это как бы тупо вырезаная часть оперативки помещенная в файл.
Если этот файл обратно поместить в озу и перейти на начало то он будет выполнятся. такой себе упрощенный аналог сом файла из дос? я правильно понял?

Hunta
29.11.2019, 23:13
как старая операционная система может знать что где-то на железе есть файлик который надо считать диском?
Никак не может знать. И не знает. С её точки зрения есть 8 AZ дисков. Соответствие устройств файлам знает программа на микроконтроллере платы - и она преобразует запросы со стороны RT к устройствам AZ в считывание или запись соответствующих участков файлов.


на карточке есть другие файлы которые не такого размера?
33554432 байт (или 65536 блоков) - это МАКСИМАЛЬНЫЙ размер диска для RT. Если диск большего размера - использовать его целиком напрямую не получится. DEC в своё время решила для страховки (видимо, но не будут уверять что это так, возможно, причина была в другом) работать не с максимальным размером, а с максимальным размером минус один блок - 33553920 байт или 65535 секторов. Почему авторы устройства и драйвера решили уменьшить этот размер ещё на один сектор - вопрос к авторам. Но этот диск не обязательно должен быть макс размера - может быть и меньше


Потом как мне обратится к этому диску? пишу что AZ3: что LD3: система ничего не знает
Попробуйте для начала DIR AZ3:
Но в принципе - это вопросы к авторам


а с точки зрения УКНЦ?
А с точки зрения УК-НЦ - до восьми устройств AZ - AZ: AZ1: AZ2: ... AZ7:


как этот диск увидеть на укнц?
AZ: AZ1: AZ2: ... AZ7:


А программы в РТ-11 я так понял это sav файлы?
Или .REL, если запустить FB монитор


А почему так страшно? а не просто исполняемый файл?
Потому что для исполняемых файлов операционок DEC я знаю что то порядка 5 форматов исполняемых файлов и не все они являются форматом отображение памяти


Если этот файл обратно поместить в озу и перейти на начало то он будет выполнятся
Не на начало, а на точку запуска.


такой себе упрощенный аналог сом файла из дос?
Это com - упрощенный аналог .sav

SuperMax
30.11.2019, 07:24
почитал немного... чем больше читаю тем больше ничего не понятно ((((
Я не могу понять как старая операционная система может знать что где-то на железе есть файлик который надо считать диском?
она и не знает
для нее есть драйвер устройства AZ через который операционка получает данные



на карточке в ini файле я допустим написал D3=0:/disks/GAMES.DSK
сам файлик на 33 553 408 байта (как написано в инструкции) но не понятно так точно надо делать со всеми файлами? а почему на карточке есть другие файлы которые не такого размера? например 51SYS_DS.DSK ?
Потом как мне обратится к этому диску?
пишу что AZ3: что LD3: система ничего не знает

к примеру, после загрузки с AZ0:
DIR AZ3:

LD3: это уже устройство LD со своим драйвером LD.SYS



Прочитал что есть такая конманда mount она что-то может смонтировать, файлик к диску, но она уже хочет чтобы файлик был на диске загруженой системы! конечно родная команда такой старой операционки не знает что где-то там выше есть контроллер и сд карточка с файлом диска
не
LD это логический диск, который сам располагается на другом диске

те
mount LD2: AZ4:test.dsk
те файл AZ4:test.dsk будет рассмотрен как диск LD2:

рекомендуется прочитать
https://mirrors.pdp-11.ru/search.php?text=AA-M239D-TC_RT-11_System_Utilities_Manual_Part_I_Aug91.pdf

monoxrom
30.11.2019, 21:21
Спасибо за инфу, так уже лучше! Да если набирать DIR AZ3: то диски открываются
Но почему я не могу перейти на такой диск? AZ3: не переходит, или нужна другая команда?

Запускать проги тоже разобрался как, например RUN AZ3:TETRIS, но все равно неудобно все время так много писать( без перехода на диск да и если не набирать RUN то оно не понимает что надо запускать файл, но если просто что-то запускать с "системного диска" AZ0 то оно запускается без RUN почему так?

Еще вопрос, иногда запускаю что-то и курсор системы меняется на * как отсюда выйти без перезагрузки?
если что-то писать в системной строке то выдает CSI-F-Invalid command
Отсюда можно как-то выйти назад в систему? :)

Еще не понял, вот хочу посмотреть файлы на диске по алфавиту, читаю команда DIR /A, набираю это а система ругается что нет такого(((( почеку так? что не то уже на таких мелочах ((((

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

Hunta
30.11.2019, 21:37
Но почему я не могу перейти на такой диск? AZ3: не переходит, или нужна другая команда?
Используются логические имена. Например, SY: - логическое имя устройства, с которого загрузилась система. DK: - логическое имя текущего диска.

Для привязки логических имён физическим используется команда ASSIGN (сокращённо - ASS). Логическое имя SY: перепривязать нельзя. Поскольку после имени устройства всегда идёт двоеточие, в команде ASSIGN его можно опускать. Номер устройства ноль тоже можно опускать. Так что для перехода на устройства AZ3: (в терминах RT - сделать AZ3: устройством по умолчанию) используется команда ASSIGN AZ3: DK: или сокращённо ASS AZ3 DK


если не набирать RUN то оно не понимает что надо запускать файл, но если просто что-то запускать с "системного диска" AZ0 то оно запускается без RUN почему так?
Без явного указания RUN можно запускать только с системного диска. Так же для запуска с системного диска можно использовать команду R (раньше был только этот способ). Для запуска программ с несистемного диска - только RUN. Почему так - потому что не надо думать, что это MS-DOS. Забудьте знания MS-DOS, в RT многое по другому


Еще вопрос, иногда запускаю что-то и курсор системы меняется на * как отсюда выйти без перезагрузки?
Программа запустилась и ждёт ввода команд. Выход - Ctrl/C



Еще не понял, вот хочу посмотреть файлы на диске по алфавиту, читаю команда DIR /A
Не знаю, где вы прочитали такое, но у команды DIR есть два ключа, которые начинаются на AL - /ALLOCATE и /ALPHABETIZE. Название ключей (как, собственно и самих команд) можно сокращать до такой длины, что бы они отличались от других, начинающихся одинаково, так что система не поймёт /A, /AL, но поймёт /ALP