Меня уже давно не волнует, что другие думать про меня и моё эго.
Кому и чего я буду давать - сам решу. Если другие ждут, что я им чего то должен давать - их проблемы.
Модераторам: оффтопить закончил, пусть S_V_B дальше резвится.
Успешно прошло тестирование WinSCP как WEBDAV-клиента
Угу, два раза!.. MZ занимает в памяти УКНЦ 147 слов. AZ - 146. И это несмотря на то, что я его дополнил для работы с сетью - раньше он был меньше, как выкопаю трактор из кладовки, так скажу точно. Для справки, LD занимает 309 слов.
Это, вообще-то, малоинформативно. Во-первых, в любом драйвере присутствует абсолютная секция (1 блок), которая не занимает места в памяти, а используется только при загрузке драйвера и установке его SET-параметров. Во-вторых, в любом загрузочном драйвере присутствует секция первичного загрузчика - еще один блок. Ну, и, в третьих, некоторые драйверы используются не только как драйверы, но и как обычные программы, это еще отдельный набор блоков файла драйвера. Тот же LD. Когда мы подаем консольную команду MOUNT LD0 SY:XXX.DSK, KMON транслирует эту команду в команду R LD.SYS с передачей ей строки в формате CSI, что-то вроде LD0:=SY:XXX.DSK с нужными ключиками. Точно так же, как, допустим, для команды INI MZ1: тот же KMON вызывает программу DUP.SAV, тоже с последующей строкой в формате CSI с соответствующими ключиками. Остальные манипуляции с LD также выполняет программа LD.SYS, вызываемая не как драйвер, а как обычная программа, несмотря на то, что ее тип .SYS, а не .SAV. И, естественно, эта программа также занимает какую-то часть блоков файла LD.SYS, но эти блоки не являются загружаемой частью драйвера.
Посмотреть, сколько оперативки занимает загруженный драйвер проще всего по команде SHOW MEMORY (можно сократить до SH ME). Ну, или (если драйвер нельзя загрузить, например, MZ на ДВК или MY на УКНЦ, можно запустить программу HANDLE.SAV, указав ей для просмотра нужный файл драйвера. Результат смотреть в строчке handler, смотреть размер в словах.
ЗЫ. Блин, ну и развели тут срач!..
Начал воевать с виндой, теперь она соглашается подключить WEBDAV как сетевой диск и читает оттуда файлы.
остальное в процессе тк у микрософта, как всегда, "свое" прочтение стандартов
А в случае MZ там их столько много разных, есть и на 2 блока(?),
на 3, 4 и на 8 (в основном на 40дор. дискетах из сетевого ПО поставки встречаются) и
аж 19 блочные (который легендарно убивает все эмуляторы).
Я обратил внимание - на стремление наших разработчиков сделать среду RT-11 на УК-НЦ
полностью Русскоязычной ! Раньше меня это раздражало, теперь наоборот бодрит )
Как сделать загрузочный драйвер в 2 блока, я не знаю. Вероятно, есть возможность... А большие драйвера, скорее всего, не только драйвера. Посмотри на ДВК-шный драйвер MX от Потёмкина. Он же ведь не только драйвер, он еще и программа форматирования дискет. Причем даешь команду, допустим, SET MX1 FORMAT, и не надо никаких параметров форматирования, все настройки про этот дисковод лежат в драйвере, откуда их и берет программа форматирования. Но эта программа не занимает места в загружаемой части драйвера. KMON, получив команду SET MX загружает куда-то к себе нулевой блок файла MX.SAV и исполняет из него соответствующую SET-программу. А эта программа генерит R MX.SYS и передает ей в качестве параметра строку формата CSI, в которой указывает что и с каким диском надо сделать.
Никто не мешает сочинить подобный драйвер и для MZ. и, точно так же, основная загружаемая часть драйвера останется маленькой, а программа форматирования будет лежать в дополнительных блоках файла MZ.SYS. И, навверняка, кто-нибудь такое сочинил. Да и еще можно придумать что-то в этом роде...
Опять же, нормально написанный драйвер должен иметь возможность подстроиться под любые подключенные дисководы, на что, обычно, употребляются разнообразные SET-параметры.
- - - Добавлено - - -
Да, отличительным признаком того, что драйвер написан в стиле Потёмкина, служит наличие команды SET dd INFORM, которая также исполняется частью файла dd.SYS, не входящей в состав собственно драйвера.
Да, теперь я понял, почему у микрософта так всё тупит:
как заливает файлы обычный клиент:
1. PROPFIND - есть ли такой файл ?
2. PUT + длина файла + сами данные потоком
3. PROPFIND на директорию со слешом
как заливает микрософт
1. PROPFIND - есть ли такой файл ?
2. PUT длина файла 0
3. LOCK на файл
4. HEAD на файл
5. PUT длина файла 0
6. PROPATCH + XML данные
7. UNLOCK на файл
8. PROPFIND на файл
9. LOCK на файл
10. PROPATCH + XML данные
11. HEAD на файл
12. PUT + сами данные потоком
13. PROPATCH + XML данные
14. UNLOCK на файл
15. PROPFIND на директорию без последнего слеша
16. PROPFIND на директорию со слешом
17. PROPFIND на директорию без последнего слеша
18. PROPFIND на директорию со слешом
к сожалению, по быстрому не получилось, те обманки на LOCK не катят - винда реально хочет получить подтверждение в XML-ке что LOCK прошел
соответственно откладываю тк критичность совместимости с виндой не очень высокая, а вот недостатки в виде почти двухкратного увеличения размера XML есть.
займемся полировкой и подготовкой первого релиза к выкладыванию
Прикрутил DNS клиента - он потребуется в Ethernet-API для RT11
И таки удовлетворил вынду - теперь можно писать на смонтированный диск! иначе говоря можно смонтировать webdav как диск, подключить образ и к физической машине и к эмулятору. те вообще ничего не надо делать для копирования данных - можно сразу проверять сделанное и там и тут.
монтировать очень просто - в несколько кликов
однако, с виндой еще не все - теперь работу в вирутальных дисках надо победить ну и потом приступать к полировке кода
С виндой в принципе всё, работает всё кроме записи новых файлов и перезаписи файлов с разными размерами в образа дисков.
Это сделать "прямо" не получится так как винда сначала пишет файл с нулевой длиной, а потом его расширяет.
При перезаписи файла, винда опять пытается сначала обнулить имеющийся файл, а потом расширить.
Перезапись файла с одинаковой длиной работает.
работа с эмулятором:
лучше подключать в качестве обменника образ небольшого размера, ибо винда работает с образом как с файлом и перезаписывает его целиком время от времени.
Протестировал монтирование логического диска который в образе в эмулятор
отлично работает!
те можно иметь большой образ, а для обмена использовать логический диск в этом образе
https://pic.maxiol.com/thumbs2/15897...19.capture.png
- - - Добавлено - - -
для записи в винде сделал финт ушами - сначала создаю пустой файл в 1 блок (тк винда не отдает реальный размер при первой записи файла)
а потом уже появляется настоящий файл. Побочное действие - появляются файлы ".deleted" размером в 1 блок.
Да, отмечу важный момент
прошивка получается универсальной
те если сетевая карта подключена - она будет инициализирована и поднята сеть
если ее нет, обычная работа.
Проблема ручного запуска решаема? (Из меню было бы приятней)
offtop
Скрытый текст
заказал сетевую.. буду пробовать :)[свернуть]
- - - Добавлено - - -
Наверняка есть какой-нибудь хак.. но мы его не знаем (разработчики часто себе лазейки оставляют)... типа в зарезервированную ячейку цифирку запишешь, а она потом в стеке появится.. в нужный момент.
если речь идет о "177226G" то сейчас нет.
всего пути два
1. внести изменения в ПЗУ - технически это просто, сложность с отсутствием КМ1801РР1 в необходимом количестве.
2. притворится сетевым адаптером и запускаться вообще автоматом (тк это загрузка по-умолчанию), это можно, но в новом AZ в котором будут не GAL-ки а ПЛИС.
Соответственно если будет достаточный спрос на AZ УКНЦ, то такое [2] развитие возможно.
Винда таки хитрая штука, к примеру виртуальный файл показывающий свободное пространство в образе RT11 - "unused.space" она скрывает
пришлось переименовать в "unused.space.file"
Также у нее свое понимание виртуальных директорий - пришлось определять тип WEBDAV-клиента и для винды скрывать updir каталога.
Так выглядит древо каталогов в винде:
https://pic.maxiol.com/thumbs2/15898...235619.az1.png
Занялся этим делом, и вдруг упёрся. Коллеги, подскажите, плз, как правильно добраться до загруженной копии драйвера устройства из программы? Когда-то я это делал, но, блин, ни фига не помню, и где я нашел материалы по этому, тоже не помню. Помню только, что когда я уточнял это дело, дизасмил кусок какой-то программы, не то RESORC, не то еще что-то...
Блин, как говорила людоедка Эллочка: "Жуть! Мрак!" Таки вспомнил: тогда я дизасмил RESORC. Сейчас проще: есть бонусный дистрибутив, поискал в нем. Вот такая радость!Кусок из RESORC.MAC
Код:;+
; Determine the address and size of the device tables.
;-
MOV @#$SYPTR,R5 ; R5 -> RMON.
MOV S.PNAM(R5),R4 ; R4 = offset from RMON to $PNAME.
ADD R5,R4 ; R4 -> $PNAME.
MOV R4,R3 ; R3 -> $PNAME.
MOV R4,$PNAM ; Save it.
1$: CMP (R3)+,#-1 ; Search for end of $ENTRY table.
BNE 1$ ; Keep going.
TST -(R3) ; R3 -> first word above $ENTRY.
SUB R4,R3 ; R3 = bytes in combined tables.
MOV R3,-(SP) ; Save, it is also owner table size.
ASR R3 ; Make it bytes per $UNAM(1,2) table.
MOV R3,R0 ; Copy it. (DK/SY slot NOT included).
ADD R4,R3 ; R3 -> $ENTRY+2.
TST -(R3) ; Back it off.
MOV R3,$ENTRY ; Save the pointer.
MOV R4,R2 ; R2 -> $PNAME.
SUB R0,R2 ; R2 -> $UNAM2+4.
CMP -(R2),-(R2) ; R2 -> $UNAM2.
MOV R2,$UNAM2 ; Save the pointer.
SUB R0,R2 ; R2 -> $UNAM1+4.
CMP -(R2),-(R2) ; R2 -> $UNAM1.
MOV R2,$UNAM1 ; Save the pointer.
SUB (SP)+,R2 ; R2 = Start of owner.
MOV R2,$OWNA ; Save it.
[свернуть]
Вот так получают доступ к таблицам устройств. Ну, допустим, таблица $OWNER не особо нужна, но, это всего три лишних команды. А чтобы узнать, допустим, куда назначено устройство DK, надо еще найти в таблице $UNAM2 "DK ", перейти с этим смещением в таблицу $UNAM1 и из нее достать назначение...
Делал такое в своём драйвере AC. Искал назначения SY и DK.
- - - Добавлено - - -Код:; Поиск назначения SY
CALL LOGD
SUB R4,R5
SUB #6,R5
MOV @R5,R5
; Поиск назначения DK
CALL LOGD
SUB R4,R5
CMP -(R5),-(R5)
14$: CMP (R5)+,#^RDK
BNE 14$
SUB R4,R5
CMP -(R5),-(R5)
MOV -(R5),R5
LOGD: MOV @#54,R5
ADD 404(R5),R5
MOV R5,R4
1$: CMP (R4)+,#-1
BNE 1$
TST -(R4)
SUB R5,R4
ASR R4
RETURN
Так вроде можно с помощью макроса .DSTAT. Можно узнать, установлен ли драйвер, а также загружен он в память или нет. Соответственно и адрес загрузки.
Ну да, там в RT-11 три макрокоманды всего, 1-я строку отдаёт как есть и более ни гу-гу, вторая производит разбор строки по системному алгоритму, третья кроме разбора - открывает файлы :)
В принципе можно ещё способы придумать, но они редкие и неуниверсальные...(например буфер SL посмотреть, но если SL нет или не той версии, то в пролёте)
.CSIGEN/.CSISPC самое простое.
Можно воспользоваться табличным парсером из RSXLIB (так же есть отдельно в RT-11 source kit), но это несколько муторный вариант.
Ну и с самим разбором строки вручную есть особенности.
Начиная с RT-11 V5.02 (кажется) все просто: строка копируется в chain area в оригинальном виде, обнаружив ее там, ее можно оттуда же и разобрать, а с помощью .GTLIN просто выбрать чтобы она не прилетела вместо следующей команды.
В более старых RT-11 командная строка не копируется - тут только сразу выбирать .GTLIN'ом, но учитывать, что при запуске в виде "FILE command" если в командной строке есть пробелы, строка преобразуется к CSI формату ("A B" в "B=A").
Так что если нет особых требований (многобуквенные ключи, хитрый их формат итд), то .CSISPC самое то.
- - - Добавлено - - -
Не совсем как есть - при явном указании командной строки для программы, .GTLIN переводит строку в CSI формат (ну или точнее - до .GTLIN она дойдет уже в CSI формате).
Вообще-то .GTLIN я применял, при вводе строки с клавиатуры.Что мне нравилось - SL на ней работал :)
Не надо было с редактором строки заморачиваться .
Из командного файла, знал, что считывает строку, но особо с этим не заморачивался, просто учитывал, что строка может уйти не туды...
Собственно, меня интересовало, как потёмкинский МХ передает управление от SET-программы себе же, загруженному в качестве простой программы, и как он при этом передает себе параметры, причем так, что можно и запустить его вручную, командой R MX и потом набрать для него команды. Я собираюсь сделать нечто подобное для AZ. Вроде бы был у меня его (МХ) исходник, но найти не удалось. Тогда я вспомнил, что чем-то похожим занимается драйвер LD и полез смотреть LD.MAC, сначала из бонусного дистрибутива, потом из 5.1. Отличаются заметно, тем не менее...
В общем,это делают так:
1. В программе установки SET-параметров собирают командную строку и переносят ее с адреса 522 (почему не 510? С 510 по 520 - нули).
2. Делают .CHAIN
3. В запущенной программе первым делом проверяют, по .CHAIN ее запустили, или нет. Если да, то третьим параметром .CSISPC делают 522, иначе - ноль.
4. Делают .CSISPC и радуются жизни.
То есть, если программу запустили по .CHAIN, то .CSISPC разберет строку, выложенную с адреса 522, если же ее вызвали командой монитора R, то CSISPC попросит эту командную строку из того же источника, откуда поступила команда вызова ее самой - неважно, командный файл это или ручной набор на клавиатуре.
Непонятно, почему у LD строку выкладывают с адреса 522 - ведь в руководстве по макро .CHAIN явно написано, что строку можно начинать с адреса 510. А в LD.MAC после DBLK для файла драйвера явно прописаны пять слов нулей - .WORD 0 и .WORD 0,0,0,0. Без меток,так, что туда ничего не пишут. И в 5.1, и в бонусном...
В общем, я планирую для AZ 4 (вернее 3) команды - SET AZ (NO)AUTONEt, SET AZ NETON и SET AZ NETOFF. Первая команда будет рулить драйвером на диске - сеть дефолтно будет включена (AUTONE) или нет (NOAUTONE), сработает это только после перезагрузки, как и заявлено для команд SET любых драйверов. Вторая и третья будут рулить драйвером в памяти, независимо от параметра (NO)AUTONE, то есть, надо - включили сеть, надо - выключили. В частности, это необходимо из-за моей недоработки: в первичном загрузчике старых версий я некорректно сбрасываю контроллер, из-за чего при запуске системы со старым драйвером командой BO AZn: из-под системы с активной сетью, загрузка валится.
А теперь один вопрос. Это ведь не догма, что область 204-377 отведена под код инсталляции, а область 400-777 - под код SET ? Да, входы в эти программы должны лежать в этих областях, но если мне не хватит места для кода SET, а в инсталляции у меня его еще много, я ведь могу прогуляться туда CALL'ом? В памяти-то во время SET'а присутствует весь нулевой блок драйвера, вместе с первым, если что?
LD для команд использует .EXIT с запуском командного файла, при этом в 510 пишет длину, в 512 и далее строки. А .CHAIN начиная с 510 принимает имя программы - так видимо LD сам себя запускает.
Не догма, но правила нужно соблюдать :)
Если не нужна процедура инсталяции, то 200/202 лучше не трогать или забить парой RETURN.
Если не нужны команды SET, то 400 обязан содержать 0, а все остальное можно пользовать (драйвер VS так делает - у него большая процедура инсталяции перепрыгивает через 400 и идет дальше.
Маленький хинт: драйвер не ограничен двумя блоками для обработки команд SET.
Можно использовать область блока #1 как оверлейный буфер и подгружать нужное (пример можно посмотреть в исходниках SL, LD и других).
- - - Добавлено - - -
.CHAIN начиная с 510 должен содержать имя программы для передачи.
- - - Добавлено - - -
Вообще, передавать себе управление через .CHAIN необязательно.
В принципе можно прочитать код программы в память начиная с 1000 (все реквизиты в SET хандлере мы для этого имеем, а канал 17 открыт на файле драйвера), а потом передать управление в нужное место.
Правда если памяти совсем мало свободной - для такого маневра может не хватить места :)
- - - Добавлено - - -
Ну и еще что следует помнить - это то, что формат команды SET не ограничивается одной настройкой в команде.
Соответственно там где подразумевается .EXIT/.CHAIN стоит делать проверку и предупреждать что часть команды будет проигнорена (пример есть в SL).
Угу. В LD для этого используют $HSUFF - фиксированное смещение 412.
Кстати, может есть какой-либо лёгкий и быстрый способ получить у системы адрес драйвера в памяти, доступный из его SET-программы? .DSTAT, как я подозреваю, недоступен - ему ведь нужна USR, а из SET-прогарммы она недоступна, да?
Тогда замечательно. Запихну все это в SET-программу, и не буду ничего загружать. А что вспомнил подробности про .CHAIN - пригодится где-нибудь еще...
Блин, откуда я взял, что .DSTAT требует USR? С чем-то спутал, по всей видимости...
Итак серьезный этап развития контроллера AZ сформировался в релиз!
Релиз фирмвари и драйверов с поддержкой сети
документация по сети
Контроллер псевдодиска на MicroSD ДВК / УКНЦ: подключение сетевой карты
Прочие ссылки:
Основная страничка поддержки проекта [инструкции, техническое описание, обновления фирмвари]
Контроллер псевдодиска на MicroSD
Контроллер псевдодиска на MicroSD: сборка и наладка конструктора контроллера v1.01
Контроллер псевдодиска на MicroSD: подключение сетевой карты
Разработка версии для УКНЦ
УКНЦ + AZ - вариант контроллера псевдодисков на микро-SD для УКНЦ.
Контроллер псевдодиска на MicroSD на шину МПИ: особенности версии для УКНЦ
Приобрести контроллер можно на Барахолке
Версия контроллера для ДВК
Версия контроллера для УКНЦ
Об опыте работы с сетью.
Программировать для ДВК/Э-60 что-либо объемное, однозначно, лучше под эмулятором. Я вот в прошлом году занимался TSX-ом. Собирать TSX на ДВК крайне утомительно. Во-первых, TSX не лезет в любимый редактор EDK. Во-вторых, даже с довольно быстрым диском AZ он собирается минут 20, с винчестером, помнится, одна сборка занимала полчаса. А на эмуляторе - десятки секунд. И редакторы доступны любые. Меня, например, вполне устраивает встроенный редактор FAR'а. Но тут встает другая прооблема - доставки собранного материала на ДВК. Тот же TSX, допустим, через канал драйвера HX доставляется минут 10-15. А передергивать SD-карточку - канительно, да и высока вероятность что-либо перепутать.
А с сетью - одно удовольствие. Создал папку с исходниками проекта, смонтировал ее на один из HD. На ДВК создал т.наз. обменник. Я создал файл EXCHAN.DSK размером 1000 блоков и смонтировал его на LD2. В FAR'е в одной панели открыл папку проекта, во второй - FAR'овский NetBox, настроенный на WebDav-сервер контроллера AZ, сразу же, пройдя по дереву папок и файл-образов дисков, нашел этот обменник и остался в нем.
Далее, давлю F4 на нужных исходниках, правлю их, затем перехожу в окно эмулятора и собираю проект. Естественно, чтобы не набирать все команды вручную, заранее приготовил батничек, т.е. .COM-файл для RT-11. После этого перехожу в окно FAR'а и копирую результат сборки в обменник. Все, можно переходить к ДВК и пробовать результат сборки. Там тоже имеет смысл приготовить .COM-файл для переноса материалов из обменника по местам - куда надо.
Сейчас я по этой схеме отлаживал новую версию драйвера, далее планирую еще пару дел, в частности, займусь TSX-ом. Он, по прогнозу, будет прилетать по сети секунд за 5 (в отличие от 10 мин через HX)...
Сейчас ведется работа по разработке-доработке прошивки с точки зрения удобства
1. добавлена секция [network] в ini файл
теперь можно задать и MAC и DHCP имяКод:[network]
MAC=000E35220513
DHCPNAME=AZNET-DVK3M2
DHCP=OFF
IP=192.168.0.199
MASK=255.255.255.0
GW=192.168.0.1
NTP=192.168.0.1
DNS1=192.168.0.70
DNS2=192.168.0.80
и при желании отключить получение адреса по DHCP задав его явно
2. перезапуск контроллера и применение изменений в ini файле после нажатия УСТ
и еще в процессе очень интересная штука которая повысит гибкость применения контроллера
AZ начал движение в сторону оригинальных PDP-11
первые результаты
https://pic.maxiol.com/thumbs2/15911...0060313310.jpg
Да-а-а, у буржуев имеется рынок сбыта. :-)
AZ лежит на 11/73?