Насколько я успел посмотреть, уже есть готовые библиотеки.
? Считаем смещение в файле образа (если хитрые, типа .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.
Как бы сделали в НЦ в 1990-е :
Собственно котроллер-полуплата состоит из 2-х частей :
1. Телеграфный адаптер для карточки, по типу ВП1-065.
2. Небольшой участок ПЗУ загрузчика, да со сменным адресом. ИМХО - в 000400 можно уложиться для загрузки 0 сектора карточки.
Т.е. все эти шевеления с ФАТ - программно в драйвере.
Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения [email protected]
Если этот бит - не Д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 карте.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Старший бит CSR у всех контроллеров означает: команда завершена с ошибкой.
- - - Добавлено - - -
Лучше: 000.исходное имя образа, 001.исходное имя образа - тогда и пользователь, и контроллер смогут легко управлять монтированием.
- - - Добавлено - - -
DSK-плагин для TC поддерживает упаковку/распаковку прямых и инверсных образов HDD UKNC на DSK-образы разделов, а также прямую работу с содержимым разделов HDD UKNC в образе HDD, если эти разделы содержат файловые системы, поддерживаемые плагином.
Кто-нибудь потом, странице где-нибудь на 13, если тема до неё доживёт, сравните, пожалуйста общий ход обсуждений здесь и здесь: 32-разрядный процессор, полностью совместимый с архитектурой PDP-11
Кстати, вот вам ещё идея начального загрузчика:
- принцип - как у MY - то есть нулевой сектор читаем с адреса 0, 1000 или какого ещё.
- у устройства есть 2 спец регистра. Команда 17abcdG (где 17abcd - первый из них) приводит к следующему - устройство выдаёт по это адресу значение 777 (если я не ошибся с кодом BR .), одновременно читая по адрес 0 или 1000 или см выше начальный загрузчик и как только он прочитан, по адресу 17abcd читается JMP @(PC)+, а с адреса 17abcd+2 - соответственно 0 или 1000 или см выше.
- - - Добавлено - - -
Как в MY
- - - Добавлено - - -
Ничем не могу помочь.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)