Грядущее появление эмулятора интерфейса часов реального времени HClock, реализуемого в виде эмулятора привода дискового устройства, подключаемого к контроллеру HD - означает не только необходимость создания API эмуляции приводов, но и то, что вторым кандидатом на реализацию в виде "магического дискового привода" становится интерфейс монтирования HMount.
При реализации интерфейса монтирования в виде дискового устройства ( с номером привода 0432 = 282 ) принципиальным вопросом становится - отдавать пользователю весь список текущего монтирования одним "безразмерным блоком" с номером блока 0 или оформлять информацию о каждой точке монтирования отдельным блоком. Учитывая, что интерфейс монтирования допускает указание как относительных, так и абсолютных путей - превышение общим списком всех точек монтирования размера 64 Кб - выглядит вполне реальной возможностью, а раз так - есть смысл предусмотреть как возвращение пользователю всей информации монтирования одним блоком, так и возвращение информации о каждой точке монтирования отдельным блоком.
Тогда спецификация работы с приводом HMount через контроллер HD будет выглядеть так:
1. Для выбора интерфейса монтирования нужно задать контроллеру HD номер привода 282. Если контроллер HD не имеет доступа к интерфейсу монтирования - возвращается ошибка с кодом IE_OFL = "устройство offline".
2. Запрос размера устройства возвращает количество доступных точек монтирования + 3.
3. Все блоки HMount являются "безразмерными", поэтому содержат в первом слове размер блока в байтах. Правила чтения/записи блоков HMount совпадают с аналогичными правилами для таймблоков HClock.
4. Блок 0 доступен для чтения и записи. При чтении возвращается блок информации о текущем монтировании в виде последовательности команд монтирования, разделённых байтами <CR><LF>. Если какой-то привод не смонтирован - сразу за символом '=' идут байты <CR><LF> Например:
Если размер блока >= 64 Кб - слово размера блока содержит 000. Уместно напомнить, что количество реально передаваемых пользователю слов не может превышать текущее значение счётчика слов WordCount, задаваемое командой контроллера HD "установить счётчик слов". При записи программа посылает контроллеру блок аналогичного формата, содержащий произвольное количество команд монтирования, разделённых байтами <CR><LF>. Для размонтирования привода - команда монтирования не должна иметь аргумента. Например: "MX1=".Код:HD0=HDSYS.DSK<015><012>HD1=<015><012>HD2=C:\Documents and Settings\WORK_DIR\<000>
5. Блок 1 предназначен для просмотра содержимого SD-карты ( подробнее ЗДЕСЬ ).
6. Блок 2 доступен только для чтения и содержит список всех доступных точек монтирования в виде последовательности символов ASCII, разделённых байтами <CR><LF>. Например:
7. Все последующие блоки доступны только для чтения и содержат информацию о текущем монтировании точек из списка монтирования, возвращаемого при чтении блока 2, в порядке их присутствия в списке. Формат совпадает с форматом одиночной команды монтирования, если привод смонтирован, или команды размонтирования, если привод размонтирован. Например:Код:HD0<015><012>HD1<015><012>HD2<015><012>HD3<000>Нужно помнить, что все читаемые и записываемые блоки HMount имеют в первом слове размер блока в байтах.Код:MX1=E:\ARHIV\PDP11.DSK\FRESH\MX40.DSK
При невозможности выполнить переданную команду монтирования - возвращается ошибка с кодом IE_OFL, если указанное устройство недоступно для монтирования или IE_NUM = "параметр вне диапазона" ( 0356 ), если нарушен формат команды, монтируемый путь не найден или тип пути ошибочен ( например, не все эмулируемые контроллеры позволяют монтировать каталоги, вместо DSK-образов ). Если переданный блок монтирования содержит более одной команды - команды монтирования выполняются последовательно, безотносительно к успешности выполнения предыдущей команды, но при наличии хотя бы одной ошибочной команды - в итоге возвращается ошибка.
- - - Добавлено - - -
Пробелы и табуляции между именем точки монтирования, символом '=' и путём монтирования должны игнорироваться, поэтому передаваемые контроллеру команды монтирования могут выглядеть так:
MX1 = E:\ARHIV\PDP11.DSK\FRESH\MX40.DSK
- - - Добавлено - - -
Если конкретный аппаратный контроллер, реализующий интерфейс HMount, может гарантировать, что размер нулевого блока с полным списком монтирования всегда может быть прочитан в буфер пользователя разумного размера - возможна сокращённая реализация интерфейса с обработкой только чтения и записи нулевого блока. В таком случае запрос размера устройства для привода 282 должен возвращать 1 ( если просмотр содержимого карты не поддерживается ) или 2 ( если блок 1 поддерживается ), а попытка задания больших номеров блока - возвращать ошибку "выход за пределы устройства".
Последний раз редактировалось Patron; 16.10.2017 в 16:56.
Несколько мыслей.
Эмулятор активно развивается и показал себя весьма стабильным: RSX-11M+ проработал без перерыва почти год и проработал бы больше, да затеяли перестановки на сервере виртуальных машин. Но для полного счастья не хватает одной маленькой мелочи - поддержки модемных сигналов. Самый простой вариант - добавить поддержку DL(V)11-E. Это сразу резко расширило бы возможности эмулятора: появилась бы возможность запускать в нем online системы и выставлять их в интернет. Сравнительно несложно так же добавить мультиплексор DZ(V)11. Так же тут задавался вопрос про DU... DU вещь навороченная и сравнительно новая. Гораздо интереснее для начала было бы эмулировать DL (RLV контроллер): он и достаточно старый чтобы запустить многие системы в которых нет поддержки MSCP и поддерживает 22bit на Q-Bus...
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Учитывая, что контроллер SD-карты может подключить к любому из эмулируемых приводов любой из сотен образов на карте - интерфейсу монтирования полезно иметь возможность возвращать содержимое текущего каталога SD-карты, а также осуществлять смену текущего каталога.
Особо нужно отметить, что образы, подключенные к приводам, не должны показываться в списке образов каталога, чтобы исключить возможность двойного монтирования. При подключении образ должен переименовываться контроллером таким образом, чтобы однозначно обозначить в его имени номер привода подключения и исключить показ образа в списке файлов каталога, доступных для монтирования.
Для взаимодействия с интерфейсом просмотра каталогов в приводе HMount логично выделить блок 1. Если контроллер не поддерживает просмотр каталогов - при чтении и записи блока 1 должна возвращаться ошибка с кодом IE_NUM ( 0356 = параметр вне диапазона ), если контроллер поддерживает расширенные блоки, или с кодом IE_BLK ( 0354 = выход за пределы устройства ), если контроллер обслуживает только запросы к блоку 0.
Для установки пути к просматриваемому каталогу программа производит запись пути в блок 1. Устройства не поддерживаются. Корневой каталог SD-карты ( или текущий каталог эмулятора ДВК ) выбираются заданием пути "\":
Если заданный путь отсутствует - текущий каталог не изменяется, а запись завершается ошибкой с кодом IE_NUM ( 0356 = параметр вне диапазона ).Код:\
Вложенные каталоги ( если есть ) выбираются записью абсолютного или относительного пути. Например:
Код:\RT-11\NEW\Код:\Код:RT-11\Запись ошибочного или пустого блока ( т.е. блока с нулевым словом размера блока ) в блок 1 или обращение к любому блоку, кроме блока 1 - не изменяет текущий каталог, но сбрасывает фазу возврата содержимого текущего каталога.Код:NEW\
Признаком абсолютного пути является символ '\' в первой позиции пути. Последним ( или единственным ) символом пути всегда должен быть '\'.
Контроллер сбрасывает текущий каталог только при включении питания и при смене SD-карты.
Первое чтение блока 1 после сброса фазы возврата содержимого текущего каталога - возвращает абсолютный путь к текущему каталогу. Каждое последующее чтение блока 1 возвращает очередное имя файла из текущего каталога. Если имя соответствует вложенному каталогу - последним символом имени должен возвращаться символ '\', если нет - сразу после имени выводится выводится двоеточие и размер файла в байтах. Когда имена всех файлов уже выведены - каждое последующее чтение блока 1 возвращает ошибку с кодом IE_BLK ( 0354 = выход за пределы устройства ).
...
Расширенные возможности работы с блоком 1
1. Если переданная строка оканчивается символами *\ - это маска для вывода списка папок в текущем каталоге.
2. Если записанная строка не оканчивается символом '\' - это маска для вывода списка файлов и папок.
3. Если записанная строка содержит символ ':' после имени файла - это запрос на создание файла. Если символ ':' находится в конце строки - должен быть создан образ с дефолтным размером. Если после символа ':' находятся цифры - это размер в байтах для создаваемого файла.
4. Если после символа ':' находится буква 'D' ( :D ) - это запрос на удаление файла ( например: XXX.DSK:D ).
Маска для вывода списка файлов может содержать относительный или абсолютный путь ( например: WorkDir\* ). При выводе списка файлов с путём в маске - этот путь должен добавляться к каждому выводимому имени файла:
Код:.MNT DIR WORKDIR\ \ WORKDIR\XXX\ WORKDIR\YYY\ WORKDIR\WWW.DSK 819'200 .
При создании и удалении файла также может указываться относительный или абсолютный путь:
Код:.MNT CREATE WORKDIR\XXX.DSK:1234567 \ WORKDIR\XXX.DSK 1'234'567 .MNT DIR WORKDIR\ \ WORKDIR\XXX\ WORKDIR\YYY\ WORKDIR\WWW.DSK 819'200 WORKDIR\XXX.DSK 1'234'567 .MNT DEL WORKDIR\XXX.DSK .MNT DIR WORKDIR\*.DSK \ WORKDIR\WWW.DSK 819'200 .
Последний раз редактировалось Patron; 11.11.2017 в 23:37.
Patron, Возможно ли сделать нативный DX привод? Это для того чтоб эмулятор мог работать с прошивкой контроллера самого привода.
...
Посмотрел платы ГМД7012 и RX02, RX01. ГМД7012 схематически похож на RX02. Возможно что ГМД70 будет схематически похож на RX01.
Спасибо.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Имеется контр-предложение, а именно
слепить достаточно качественный и насовсем прилепить к эмулятору ДВК один сетевой БК(модификация на выбор
БК0010Ш, БК0010-01, БК-11М) что бы была возможность гонять КУВТшный софт, проверять сетевые программы и
улучшить поддержку реальных БК во всём мире, виртуальный БК скорее должен работать с ч\б выходом на свой
собственный 6105 монитор с полной по возможности точной реализацией, что так же позволило бы любому желающему
попутно продемонстрировать отечественные графические игры (коих не мало и весьма качественных) для PDP совместимых Ангстремовских процессоров. Не слишком суровое предложение? Тут ещё актуальность задачи помимо прочего в том, что полностью отлаженных эмуляторов БК0010-01 к примеру нет до сих пор. Везде что то немного не работает. Софт вроде бы есть не много под это дело, я думаю можно по КУВТ софту ещё раз попросить считать всё
самое сетевое актуальное боевое Стаса @SKcorp. при всей его не любви к эмуляторам ) Стас, пожалуйста считай КУВТ софт для сети ДВК-БК что нибудь актуальное ? Кроме
тех образов, что уже имеются, если помнишь у тебя на видео есть загрузочная сетевая программа
ДВК>>>БК в виде таблицы - вот хорошо бы эту систему к архиву подшить !!!
Все ромы для БКашки какие попадались мне с различными эмуляторами
http://archive.pdp-11.org.ru/BKGAMES/ROM/ там конечно дубли просто с разными именами файлов,
совпадают как правило определяющие наполнение слова, а расширения авторы разное могут использовать
в своих проектах.
Уточняю (на всякий случай), что в последних двух сообщениях речь идёт только о виртуальном
железе - то есть об эмуляции.
Последний раз редактировалось hobot; 23.10.2017 в 20:25.
Не будет ли возможности разработать специальный конфиг для ДВК (все модели) - 1801ВП1-128 на адресе 177130 / 17777130 и ПЗУ 1801РЕ2 - 326 в адресах пользователя 160000 - 167777 ( 17760000 - 17767777 ).
Загрузка - 160000G
Описание точек входа в ПЗУ 326 - см. Руководство системного программера от БК11М.
Драйвер BY.SYS, или он же с программой TESTBY.SAV ( есть на моем диске к блоку ВМ3А ).
Разумеется, из драйвера BY.SYS надо удалить все следы аппаратуры и софта БК11М.
Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения [email protected]
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)