С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Образ HD - это файл на карте SD, смонтированный в виртуальный привод. Вытащить карту SD при работающем контроллере, это как вытащить флешку из гнезда USB, с которой в эмуляторе смонтирован образ - тогда до размонтирования образа - все обращения чтения и записи будут давать аппаратную ошибку, которую эмулятор контроллера HD возвращает драйверу в старшем бите CSR.
- - - Добавлено - - -
Нет смысла отдавать биты в "режиме заглушки", потому что при работе контроллера с регистрами - в CSR всегда есть какой-то установленный бит и только при "режиме заглушки" все биты сброшены - это позволяет детектировать режим заглушки одной командой TST (R1). Когда надо проверять какой-то бит - команда становится длиннее на одно слово ( маску этого бита ). Зачем такие усложнения платы и кода, когда без них гораздо лучше.
Насколько я успел посмотреть, уже есть готовые библиотеки.
? Считаем смещение в файле образа (если хитрые, типа .dw .rd .dx .dy - просто немного хитрее смещение считается) и дальше читаем или пишем затребованное количество байт (при записи добивая нулями до следующей кратной 512 байтам границе). Никакой распаковки упаковки - файловую систему поддерживает система на ДВК
Без ДМА придётся делать пакетную эмуляцию ДМА ( когда передача "блока ДМА" начинается с появления бита 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 на этапе обмена пакетами.
Последний раз редактировалось Patron; 26.09.2017 в 01:14.
Если этот бит - не Д15.
Именно. Я давно продвигаю основной тезис этого дела: псевдодиск PDP-11 на современном носителе должен быть файлом для писюка. Вне зависимости от типа носителя, будь то простая USB-флешка, SD-карточка, винчестер, да вообще, хоть SSD-шник. Чтобы сняв этот носитель и подключив его к писюку можно было нормальными писюшными средствами свободно манипулировать файл-образами. Архивировать, выкладывать в Нет, заливать на носитель свежеукачанные из Нета файл-образы и пользовать их на ДВК. А что делать, допустим, с УКНЦ-шным WD? Правильно, без специальной программы (которой нет), ничего. Разве что посекторную копию сделаешь...
А распаковки файл-образы .dsk не требуют, этим будет заниматься ОС, работающая на ДВК, точно так же, как это делается на эмуляторе.
А вот об этом я забыл... Спасибо.
Что касается формата регистров, я еще не решил, и вообще, всё, кроме "заглушки" легко будет перепрограммировать под любой формат, а вот заглушка - вещь аппаратная и изменить ее будет не так просто. Именно поэтому ее нужно спланировать очень тщательно, и, желательно, чтобы она, во-первых, была минимальной по объему аппаратуры, во-вторых не сильно привязана к тому или иному формату регистров и, в третьих, если получится, выполняла еще какие-либо полезные функции.
В частности, если адресную часть цикла МПИ обрабатывать аппаратно, можно попробовать обрабатывать запросы МПИ в режиме прерываний. Программная реализация этого дела предусматривают строго синхронную "прополку" (Polling), поскольку нельзя пропустить фронт СИА, да и не сдюжит 72-МГц процессор прерываний с частотой 1 МГц - это же, максимум, 72 команды от одного прерывания до другого - ведь нужно и сохраниться, и в конце восстановиться, и проверить, к нам обращаются, или нет, и это по каждому обращению к МПИ, включая память. Так и на основную программу времени не останется. А вот если адрес зафиксируется аппаратно, причем "наш" адрес, на чужие не реагировать, то вполне можно и СИП притормозить, если что... Если это сойдется, то, может быть и отключать регистры не понадобится. Но, опять же, это большое количество рассыпухи, что очень не хочется. В общем, буду прикидывать схемы и думать...
- - - Добавлено - - -
Нет никаких там ФАТов. По-простому, сектор 0-0-1 - блок 0, 0-0-2 - блок 1 и т.д. А сделать FAT в драйвере PDP-11... Известное творение г-на Чана - FatFS, при всех его оптимизациях и отсечениях всего, сколь-нибудь избыточного, занимает на любой платформе не менее 10=12К, отдать столько на драйвер - так ведь для работы места не останется...
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
Распаковкой DSK занимается ОС работающая на ДВК только одного образа с одного диска. Если на SD карте несколько образов, то контроллер должен распределить на каком диске какой образ. Для этого делаются маркеры в имени файла.
Например: HD000.DSK, HD001.DSK, HD001.DSK... итд.
Более того, какой размер должен быть у образа? 32Мб?
Тогда нужна утилита для форматирования из под ОС на ДВК.
И не забудьте про блокиратор записи на SD карте.
Старший бит CSR у всех контроллеров означает: команда завершена с ошибкой.
- - - Добавлено - - -
Лучше: 000.исходное имя образа, 001.исходное имя образа - тогда и пользователь, и контроллер смогут легко управлять монтированием.
- - - Добавлено - - -
DSK-плагин для TC поддерживает упаковку/распаковку прямых и инверсных образов HDD UKNC на DSK-образы разделов, а также прямую работу с содержимым разделов HDD UKNC в образе HDD, если эти разделы содержат файловые системы, поддерживаемые плагином.
Со следующего релиза контроллер 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 ).
Последний раз редактировалось Patron; 25.09.2017 в 09:38.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)