PDA

Просмотр полной версии : Контроллер DW подключение дисков, драйвера



Andrey_Ak
04.02.2016, 05:46
Приветствую!

Что-то не нашел тут на форуме особо информации по контроллерам DW от ДВК..

Кто какие диски подключал к нему?
Советские вроде все без проблем работают, SEAGATE ST-225/250/250R тоже...

А вот как на счет больших винтов? Например ST-4096 на 80мб ?

Пробовал подключать его, не видит диска..
Да и в программе TDW.SAV Рождествин (TDW V05.10)
не позволяет указать количство цилиндров больше 999, а на том-же ST-4096 их 1024

И в настройках драйвера SET DW0 TRACKS=ххх тоже не смог вроде выставить 9,216

Драйвер и программу форматирования использовал эти:
http://www.tis.kz/forum/topic.php?forum=27&topic=3&postid=1325696459#1325696459

Вот еще данные диска:



ST-4096 ST412 MFM

┌12─G─G─5─┐
│ 0 0 0 0 │
┌Data Cable ┌Controller Cable 1 \─1─2─3─4─/
═════════ ══ ════════════════ ═══ ═══ ════════════
o o o o o o o o 1────────────┐
o o o o o o o o └────────────┘
Drive Select->1 2 3 4 │ │ │ │ └Resistor Termination Pack
│ │ │ │ │ │ │
│ └┬┘ │ │ │ │
│ │ │ │ │ └ Radial
│ │ │ │ └── Recovery Mode
│ │ │ └──── Write Fault
│ │ └────── Not Connected
│ └───────── Never Used (Drive Select 3 and 4)
└ If twisted cable, use Drive Select 2


ST - 4096

UNFORMATTED CAPACITY (MB) ________________96.0
FORMATTED CAPACITY (17 SECTORS) (MB) _____80.2
ACTUATOR TYPE ____________________________VOICE COIL
TRACKS ___________________________________9,216
CYLINDERS ________________________________1,024
HEADS ____________________________________9
DISCS ____________________________________5
MEDIA TYPE _______________________________THIN FILM
RECORDING METHOD _________________________MFM
TRANSFER RATE (mbits/sec) ________________5.0
SPINDLE SPEED (RPM) ______________________3,600
AVERAGE LATENCY (mSEC) ___________________8.3
INTERFACE ________________________________ST412
SECTORS PER DRIVE ________________________156,672
TPI (TRACKS PER INCH) ____________________1,031
BPI (BITS PER INCH) ______________________9,792
AVERAGE ACCESS (ms) ______________________28
SINGLE TRACK SEEK (ms) ___________________6
MAX FULL SEEK (ms) _______________________55
MTBF (power-on hours) ____________________40,000
POWER REQUIREMENTS: +12V START-UP (amps) _4.0
+12V TYPICAL (amps) __1.3**
+5V TYPICAL (amps) ___1.3
TYPICAL (watts) ______23**
MAXIMUM (watts) ______55
BUFFERED STEP PULSE RATE (micro sec) _____3-70
WRITE PRECOMP (cyl) ______________________N/A (1025)
REDUCED WRITE CURRENT (cyl) ______________N/A (1025)
LANDING ZONE (cyl)________________________AUTO PARK
IBM AT DRIVE TYPE ________________________35 or 12*

* MAY REQUIRE A CONTROLLER WITH BIOS SUPPORT, OR FORMATTING
AND PARTITIONING SOFTWARE. ALSO, CHECK TO SEE IF YOUR CMOS SETUP
HAS A "CUSTOM" OR "USER DEFINABLE" DRIVE TYPE AVAILABLE.

**1.5 amps/25 watts FOR 2-BOARD ST-4096 ONLY

Seagate reserves the right to change, without notice, product
offerings or specifications. (6/26/90)



Что означает: "If twisted cable, use Drive Select 2" ?
а так-же Radial и Write Fault

И где-нибудь попадались исходники DW.SYS именно ДВК-шного,
т.к. везде только от Эл.85 (Прошника)..

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

Да, еще один интересный момент, есть винты ST-225/250
и них в доке написано: RECORDING METHOD - MFM

А вот взять тоже распространенный ST-225R/250R
у них в доке написано: RECORDING METHOD - RLL

Что за RLL ?

AFZ
04.02.2016, 06:22
А вот как на счет больших винтов? Например ST-4096 на 80мб ? Теоретически работать должен. Практически тот, который был у меня, оказался трупом.


не позволяет указать количство цилиндров больше 999, а на том-же ST-4096 их 1024 Я пользовал TESTDW.SAV, из ФОДОСа, который шел в комплекте с этими ДВК. Точно не помню, но, вроде-бы, 1023 она принимала. Правда один хрен ничего не пошло.


Что означает: "If twisted cable, use Drive Select 2" ? Если ты возьтешь не оригинальный ДВК-шный кабель, который обжат 1:1, а писюшный, у которого часть ленты вырезана и перекручена наподобие кабеля флопиков, только номера ножек другие, то надо выбирать не диск0, а диск1.

Вспоминается мне, что у некоторых накопителей надо одевать еще и джампер последнего диска (диск3, на твоей схеме - драйв селект 4, что неправильно, они пронумерованы с нуля по тройку). У КЖД этот провод не драйв селект, а входной сигнал о каком-то параметре диска. Если он установлен (а провод DS0 на контроллере заземлен наглухо, одень джампер DS3 и на его проводе тоже образуется низкий уровень), то контроллер то ли замедляет движение головок, то ли ускоряет - давно забыл, что именно, но некоторым винчестерам оно нужно.


а так-же Radial и Write Fault Не помню, а может тоже кто-то что-то подправил, как с номерами проводов выбора номера диска.


И где-нибудь попадались исходники DW.SYS именно ДВК-шного,
т.к. везде только от Эл.85 (Прошника).. ничего удивительного - ПРОшный DW.MAC лежит в любом дистрибутиве RT-11, начиная с 5.1, а где ты видел отечественных программистов, раздающих свои исходники? То есть, конечно, сейчас уже свободно можно выложить всё ДВК-шное, что народ и делает, но, сырцов DW у народа не нашлось. По всей видимости, им в свое время не удалось вытечь за пределы Кванта, а на Кванте к нынешнему времени всё похерили.

Andrey_Ak
04.02.2016, 06:41
ничего удивительного - ПРОшный DW.MAC лежит в любом дистрибутиве RT-11, начиная с 5.1, а где ты видел отечественных программистов, раздающих свои исходники? То есть, конечно, сейчас уже свободно можно выложить всё ДВК-шное, что народ и делает, но, сырцов DW у народа не нашлось. По всей видимости, им в свое время не удалось вытечь за пределы Кванта, а на Кванте к нынешнему времени всё похерили.

Я написал Юрий Рождествин по поводу драйвера, обещал поискать в архивах..

AFZ
04.02.2016, 07:59
Я написал Юрий Рождествин по поводу драйвера, обещал поискать в архивах.. У него, вероятно, самопал. Видел еще один самопальный драйвер для DW-ДВК, он поддерживал DW0: и DW1:, наружные цилиндры - DW0, внутренние - DW1, граница задавалась SET-параметром. Где-то он лежит...

Тут есть еще одна фенечка. На ПРОшке сначала инкрементируют номер блока, затем делят по цилиндрам, головкам, секторам, из-за чего блок 15 (17oct) ложится на CHR 0-1-0 и т.д., сектор 0-0-0 не используется, зато блоки идут по порядку, со сдвигом на единицу от начала. У ДВК наоборот, сначала делят номер блока на C-H-R, затем инкрементируют R и очищают всё, кроме младших четырех бит. В итоге блок 15 ложится на 0-0-0, блок 31 - на 0-1-0. Из-за этого возникает путаница. Но увы, переиграть это нельзя, кроме RT-11 есть и другие системы, тот же ДИАМС пользует винчестер в ДВК-шном стиле...

Впрочем, попадался мне и ДВК-шный драйвер DW, адресующий винчестер в стиле ПРО. Однажды он даже пригодился, когда я сливал данные с дохлой Э-85 на ДВК. Благо, на той ДВК-шке у меня стоял RK.

hobot
04.02.2016, 08:48
Где-то он лежит...
Нашёл что то вот такое )



; This DW handler was altered too much! Be careful! No error logging support;
; increased time-out for "controller busy" state. Up to 8 heads/16 sectors
; format supported. Cylinder number must be set for both types of drives.
; Only Q=BUS Zelenograd DW - controller supported.
; Alternations made by Andrey : 141-44-85 (home).


заголовок файла DW.(MAC,BAK) вот тут > http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/anasana/DVK/RT11oldrusgame.dsk ну и в целом копался в этой папке, это anasana для архива публиковал 4 года
назад ещё, возможно ещё на какие-то варианты DW не от DEC наткнусь отпишу )

SuperMax
04.02.2016, 09:06
есть как минимум 3 основных варианта драйвера DW для RT-11
первый воспринимает винт как молоблок - те DW0:
второй делит пополам (настройка через SET )
третий на 4 равных части - те по головкам нулевая головка DW0 , первая - DW1 итд
все варианты есть в моей подборке софта, на логическом диске с драйверами. в свое время старался собрать все какие мимо меня проходили.

по исходникам, надо смотреть, вроде тоже были

да, максимальный объем понимаемый КЖД - 40МБ
также важно понимать что КЖД имеет фиксированное количество секторов - 17 в формате MFM, что на RLL винтах даст уменьшение объема

hobot
04.02.2016, 09:28
есть как минимум 3 основных варианта драйвера DW для RT-11

Три версии драйвера DW.SYS (ссылка временная!)
http://www.fayloobmennik.net/5734932
Исходников только там нет, Макс, увы.
Это из архива ADOS.

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

DWX.SYS ещё какой-то )
http://www.fayloobmennik.net/5734942 - размером отличается от 3-х предыдущих. (ссылка временная).

AFZ
04.02.2016, 09:42
также важно понимать что КЖД имеет фиксированное количество секторов - 17 в формате MFM, что на RLL винтах даст уменьшение объема 16, если что. Так, что даже на простых MFM винтах объем будет меньше, чем на писюке. А на RRL так и вообще... На ST238R получается тот же объем, что и на ST225, у ST250R цилиндров побольше, так там не то 22М, не то 24М, уже не помню. А секторов всегда 16, режим RRL в КЖД не предусмотрен.

Andrey_Ak
04.02.2016, 09:46
есть как минимум 3 основных варианта драйвера DW для RT-11
первый воспринимает винт как молоблок - те DW0:
второй делит пополам (настройка через SET )
третий на 4 равных части - те по головкам нулевая головка DW0 , первая - DW1 итд
все варианты есть в моей подборке софта, на логическом диске с драйверами. в свое время старался собрать все какие мимо меня проходили.

по исходникам, надо смотреть, вроде тоже были

да, максимальный объем понимаемый КЖД - 40МБ
также важно понимать что КЖД имеет фиксированное количество секторов - 17 в формате MFM, что на RLL винтах даст уменьшение объема

На счет второго и третьего варианта, драйвер который я использую:
http://www.tis.kz/forum/topic.php?forum=27&topic=3&postid=1325696459#1325696459

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

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


Потом, вы точно проверяли что больше 40мб контроллер не видит? Может это драйвер не понимает? Или не понимал контроллер именно Ваш диск?

AFZ
04.02.2016, 09:56
да, максимальный объем понимаемый КЖД - 40МБ С чего бы это вдруг? 16 секторов, до 8 головок, до 1024 цилиндров (или до 1000). Другое дело, что под RT-11 первый упомянутый тобой драйвер даст максимум 32М, второй - 64М, остальное пространство будет недоступным. Ну, и дисков таких днем с фонарем не найдешь - начиная с 40М пошли IDE, MFM-RRL более 40М в массовых писюках не встречались, разве что в серверах, а их было очень мало. Мне попался всего один - ST4096, вроде-бы, так и тот дохлый...

Andrey_Ak
04.02.2016, 10:01
С чего бы это вдруг? 16 секторов, до 8 головок, до 1024 цилиндров (или до 1000). Другое дело, что под RT-11 первый упомянутый тобой драйвер даст максимум 32М, второй - 64М, остальное пространство будет недоступным. Ну, и дисков таких днем с фонарем не найдешь - начиная с 40М пошли IDE, MFM-RRL более 40М в массовых писюках не встречались, разве что в серверах, а их было очень мало. Мне попался всего один - ST4096, вроде-бы, так и тот дохлый...

Вот у меня есть два ST4096 на 80мб... Пытаюсь подружить их с КЖД..

п.с. Вот один 4096 в продаже:

https://www.avito.ru/moskva/tovary_dlya_kompyutera/hdd_5.25_seagate_st-4096_mfm_710814669

AFZ
04.02.2016, 10:07
Вот у меня есть два ST4096 на 80мб... Пытаюсь подружить их с КЖД.. Ты для начала поработай с ним, как с простым 20М, никто на лишние цилиндры-головки не полезет. Если пройдет, тогда будем разбираться дальше, если нет, скорее всего, труп. Движок запускается? Начальный поиск делает?

Andrey_Ak
04.02.2016, 10:21
Ты для начала поработай с ним, как с простым 20М, никто на лишние цилиндры-головки не полезет. Если пройдет, тогда будем разбираться дальше, если нет, скорее всего, труп. Движок запускается? Начальный поиск делает?

Так в том-то и дело, что даже как с 20М диском если работать, он не видит его.. И форматирование не проходит..
Пробовал по разному настраивать драйвер, тоже не видит..

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

Еще вечером попробую поиграть с перемычками...

AFZ
04.02.2016, 10:36
Кстати, заглянул в справочник Карпова, а там для ST4096 заявлено 9 головок. Очень странно. Обычно, нечетное количество головок бывает тогда, когда выделяют одну поверхность одного диска под серво, тогда возможны всякие чудеса... Это во-первых. А, во-вторых, у КЖД нет сигнала "выбор головки 2^3", что там идет на вторую ногу "широкого" разъема КЖД? Если там воздух, диск может интерпретировать обращение к 0 головке, как к 8-й (последней), а к 1-й и остальным - как к 9-15, которых нет.

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

И да, последняя поверхность по-любому будет недоступна. И, наконец, посчитал - 16 секторов * 8 головок * 1024 цилиндра = 128К секторов (блоков) = 64М. Это предельная емкость DW ДВК

Andrey_Ak
04.02.2016, 10:50
Кстати, заглянул в справочник Карпова, а там для ST4096 заявлено 9 головок. Очень странно. Обычно, нечетное количество головок бывает тогда, когда выделяют одну поверхность одного диска под серво, тогда возможны всякие чудеса... Это во-первых. А, во-вторых, у КЖД нет сигнала "выбор головки 2^3", что там идет на вторую ногу "широкого" разъема КЖД? Если там воздух, диск может интерпретировать обращение к 0 головке, как к 8-й (последней), а к 1-й и остальным - как к 9-15, которых нет.

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

И да, последняя поверхность по-любому будет недоступна. И, наконец, посчитал - 16 секторов * 8 головок * 1024 цилиндра = 128К секторов (блоков) = 64М. Это предельная емкость DW ДВК

Почему "у КЖД нет сигнала "выбор головки 2^3" ?

Согласно настройкам драйвера:

.SET DW0 SIDES=1
.SET DW1 SIDES=1
.SET DW2 SIDES=1
.SET DW3 SIDES=1

.SET DW0 TRACKS=667
.SET DW1 TRACKS=667
.SET DW2 TRACKS=667
.SET DW3 TRACKS=667

Можно выбрать каждую поверхность под один диск, а следовательно и каждую головку...

AFZ
04.02.2016, 11:02
Два в третьей степени. У КЖД три бита номера головки, у писюков 4. Вот, этот самый последний бит, позволяющий выбрать головки 8-15 и выведенный у писюков на 2 ножку широкого разъема, у КЖД и отсутствует. Вопрос, что там: воздух, или земля? Если воздух, то вполне возможны те самые чудеса... Кстати, а заглушка (резисторная сборка) в харде на месте? Без нее тоже возможны чудеса.

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

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

Именно высокий, как подсказал dk_spb.

Andrey_Ak
04.02.2016, 11:04
Программа управления накопителем на жестком диске
( DW.SYS ).


ОПИСАНИЕ ПРИМЕНЕНИЯ

Руководство оператора



Рождествин Ю.Г.


1990.


Настоящий документ содержит руководство оператора по
примененю программы управления накопителем на жестком
диске ( НМД ) и описание ее управляющих директив.

Программа ( драйвер ) DW.SYS написана на языке
макроассемблера и предназначена для использования в
операционной системе RT11FB/SJ. Внешне драйвер отличается от
предыдущих версий длиной - 5-ть блоков и датой создания -
21 февраля 1990г.



1. Общий обзор

Драйвер предназначен для управления НМД через контроллер
КЖД, разработанный в г.Зеленограде.
Драйвер обеспечивает управление НМД со следующими
параметрами:

- число секторов на треке 16.;
- число рабочих поверхностей от 1 до 8;
- число рабочих цилиндров от 1 до 1024.


Драйвер работает с НМД, отформатированным программой
TDW.SAV.


Примерные параметры наиболее распространеных НМД

ТАБЛИЦА 1
-----------------------------------------------------------
! емкость (Мбайт) ! число поверхностей ! число цилиндров!
-----------------------------------------------------------
! ! ! !
! 5 ! 4 ! 153. !
! 10 ! 4 ! 306. !
! 20 ! 4 ! 615. !
! 40 ! 6 ! 820. !
-----------------------------------------------------------

Драйвер может рассматриваь один НМД как несколько
физических устройств, независимых друг от друга: DW0: DW1:
DW2: и DW3:, причем каждый номер устройства работает со
своими поверностями НМД. Например, DW0: использует
поверхности от 0 до 3, DW1: - от 4 до 5, DW2: - 6, DW3 - 7.
Общее количество поверхностей не должно превышать восьми,
некоторые номера могут вообще не использовать никакую
поверхность, тогда при обращении из операционной системы к
такому номеру будет выдаваться сообщение типа : Input/Output
error. Один номер может обращаться не более чем к четырем
поверхностям. Для совместимости с предыдущими версиями драй-
вера номер 0 должен обращаться к поверхностям 0-3.


2. SET - команды драйвера.

Для настройки драйвера на конкретный тип НМД
предназначены две SET-команды:

SET DW TRACK=NNN

где NNN количество рабочих цилиндров НМД в пределах 1-1024.
Назначение NNN большим чем в данном типе НМД может привести
к полной потере информации на НМД ! Для примера смотри
таблицу 1.

SET DW[N] SIDE=NNN

где [N] обязательный параметр ,определяющий номер
устройства (0-3), которому будет соответствовать NNN (0-4)
поверхностей НМД. Если NNN=0, то данный номер исключается из
операционной системы. Общее количество поверхностей на всех
номерах не должно превышать 8-ми или числа поверхностей у
данного типа НМД. Для совместимости с предыдущими версиями
драйвера применяйте команду:

SET DW0 SIDE=4


!!!ВНИМАНИЕ!!!
После изменения числа рабочих поверхностей запустите
программу калибровки драйвера командой R DW.SYS при этом
файл DW.SYS должен находиться на системном устройстве.
Сообщение: ?DW.SYS-U-Calibrate error появляется, если
программа калибровки не выполнилась. (Проверьте системное
устройство на BAD-блоки.)

dk_spb
04.02.2016, 11:12
Вряд ли там чудеса: если старший бит выбора головки никуда не подключен, то, учитывая что сигналы инверсные и что он подтянут к +5В резистором в приводе, там "0"
Соответственно с выбором младших головок проблем быть не должно.

"RADIAL" или "CHAIN" - разные способы подключения нескольких дисков к одному MFM контролеру.

AFZ
04.02.2016, 11:25
"RADIAL" или "CHAIN" - разные способы подключения нескольких дисков к одному MFM контролеру.Ни разу не видел. Данные подключаются радиально всегда, как нас учит ST412. Управление, обычно, подключается цепочкой, хотя, конечно, никто не мешает сделать это дело радиально... Стоп, а может здесь и проблема? Чем отличается подключение цепочкой от радиального? Я, навскидку, ничего, кроме необходимости терминировать только последнее устройство в цепочке, а на остальных терминаторы следует отключить, не припомню. Так вот, стоит поставить радиальное подключение - возможно, в положении CHAIN терминатор отключен, из-за чего возможны любые чудеса.

Ну, и, все-таки, надо проверить старший бит номера головки (2 нога разъемов, как КЖД, так и харда), вдруг там "сопля" и он на земле. Надо убедиться, что там действительно высокий уровень.

Andrey_Ak
04.02.2016, 11:34
Так, а вот прежде чем загружать систему и проверять работает драйвер или нет, видит ли он этот винт или нет,
как с помощью регистров КЖД в мониторе можно проверить подключен ли диск?

AFZ
04.02.2016, 11:40
Первым делом открыть 17774000, там должно быть 401. Если такой ячейки нет, значит диск не готов. (Всегда виден только 174020, остальные регистры видны только когда КЖД выполнил все запрошенные операции, ну или первичную инициализацию после включения и готов пообщаться с системой)

Andrey_Ak
04.02.2016, 17:21
Первым делом открыть 17774000, там должно быть 401. Если такой ячейки нет, значит диск не готов. (Всегда виден только 174020, остальные регистры видны только когда КЖД выполнил все запрошенные операции, ну или первичную инициализацию после включения и готов пообщаться с системой)

Хорошо, вечером попробую...

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

Поставил перемычку на 1 Drive согласно доке от Seagate,
перемычку Write Fault убрал..

Диск увидел...

Берем ранее настроенный драйвер на другой тип диска, смотрим его настройки:



.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 306. Sides = 2. Size = 9791.
DW1: Tracks = 306. Sides = 2. Size = 9791.
DW2: Tracks = 306. Sides = 0. Size = 0. Not installed
DW3: Tracks = 306. Sides = 0. Size = 0. Not installed

Удаляем эти настройки:



.SET DW1 SIDES=0

.SET DW0 SIDES=0

.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 306. Sides = 0. Size = 0. Not installed
DW1: Tracks = 306. Sides = 0. Size = 0. Not installed
DW2: Tracks = 306. Sides = 0. Size = 0. Not installed
DW3: Tracks = 306. Sides = 0. Size = 0. Not installed

Ставим настройки на наш диск ST-4096:



.SET DW TRACKS=1024

.SET DW0 SIDES=2

.SET DW1 SIDES=2

.SET DW2 SIDES=2

.SET DW3 SIDES=2

.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks =1024. Sides = 2. Size =32767.
DW1: Tracks =1024. Sides = 2. Size =32767.
DW2: Tracks =1024. Sides = 2. Size =32767.
DW3: Tracks =1024. Sides = 2. Size =32767.



Перезагружаемся, проверяем настройки диска:


.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks =1024. Sides = 2. Size =32767.
DW1: Tracks =1024. Sides = 2. Size =32767.
DW2: Tracks =1024. Sides = 2. Size =32767.
DW3: Tracks =1024. Sides = 2. Size =32767.

Запускаем программу форматирования:


----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10) Ручная установка
----------------------------------------------------------------------------

-> Тип винчестера | Количество цилиндров : 999.

Форматирование | Количество поверхностей : 8.

Контроль записи | Начало предкомпенсации : 1.

Контроль чтения | -> Номер цилиндра парковки : 1.

Функциональный тест |

Выход из программы |






----------------------------------------------------------------------------
Индикация (Т), Остановка (С), Прерывание 4 (И)
----------------------------------------------------------------------------

Не дает указать количество цилиндров больше 999

Форматируем диск:



----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10) Ручная установка
----------------------------------------------------------------------------

Тип винчестера | Установка параметров

-> Форматирование | Просмотр ошибок

Контроль записи | Чередование секторов

Контроль чтения | Оптимизация форматирования

Функциональный тест | Форматирование с восстановлением

Выход из программы | -> Форматирование винчестера


Форматирование: цилиндр 985. , поверхность 3.
Ошибка : цилиндр , поверхность


----------------------------------------------------------------------------
Индикация (Т), Остановка (С), Прерывание 4 (И)
----------------------------------------------------------------------------


Выходим, инициализируем разделы диска:


.INI DW0:
DW0:/Initialize; Are you sure? Y

@P 000034
@

Повесился, ждал минут 5-10....

Загружаемся снова, смотрим параметры драйвера и пробуем сделать DIR DW0:


.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks =1024. Sides = 2. Size =32767.
DW1: Tracks =1024. Sides = 2. Size =32767.
DW2: Tracks =1024. Sides = 2. Size =32767.
DW3: Tracks =1024. Sides = 2. Size =32767.
.

.DIR DW0:


Тоже повесился, ждал минут 5-10....

Все пробовали на системе RT11 v.5.07, пробуем на системе RT11 v.5.04:


.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks =1024. Sides = 2. Size =32767.
DW1: Tracks =1024. Sides = 2. Size =32767.
DW2: Tracks =1024. Sides = 2. Size =32767.
DW3: Tracks =1024. Sides = 2. Size =32767.
.

.INI DW0:
DW0:/Initialize; Are you sure? Y

Так-же висит... Перезагружаемся..

Пробуем согласно инструкции сделать калибровку и после нее инициализировать:



.R DW.SYS

.INI DW0:
DW0:/Initialize; Are you sure? Y

Так-же висит... Перезагружаемся..

Но ведь мы форматировали диск на 999 цилиндров, пробуем изменить настройки драйвера на 999 цилиндров:



.SET DW TRACKS=999

.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 999. Sides = 2. Size =31967.
DW1: Tracks = 999. Sides = 2. Size =31967.
DW2: Tracks = 999. Sides = 2. Size =31967.
DW3: Tracks = 999. Sides = 2. Size =31967.

Перезагружаемся.. Пробуем сделать инициализацию:


.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 999. Sides = 2. Size =31967.
DW1: Tracks = 999. Sides = 2. Size =31967.
DW2: Tracks = 999. Sides = 2. Size =31967.
DW3: Tracks = 999. Sides = 2. Size =31967.
.INI DW0:
DW0:/Initialize; Are you sure? Y

Так-же висит.... :(

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

Пробуем изменить настройки драйвера так:


.SET DW3 SIDES=0

.SET DW2 SIDES=0

.SET DW1 SIDES=0

.SET DW0 SIDES=0

.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 999. Sides = 0. Size = 0. Not installed
DW1: Tracks = 999. Sides = 0. Size = 0. Not installed
DW2: Tracks = 999. Sides = 0. Size = 0. Not installed
DW3: Tracks = 999. Sides = 0. Size = 0. Not installed
.

.SET DW0 SIDES=4

.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 999. Sides = 4. Size =63935.
DW1: Tracks = 999. Sides = 0. Size = 0. Not installed
DW2: Tracks = 999. Sides = 0. Size = 0. Not installed
DW3: Tracks = 999. Sides = 0. Size = 0. Not installed
.

.SET DW1 SIDES=4

.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 999. Sides = 4. Size =63935.
DW1: Tracks = 999. Sides = 4. Size =63935.
DW2: Tracks = 999. Sides = 0. Size = 0. Not installed
DW3: Tracks = 999. Sides = 0. Size = 0. Not installed
.


Делаем калибровку согласно документации:



.R DW.SYS


Форматируем диск, больше 999 цилиндров так-же не дает установить:



----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10) Ручная установка
----------------------------------------------------------------------------

-> Тип винчестера | Количество цилиндров : 999.

Форматирование | -> Количество поверхностей : 8.

Контроль записи | Начало предкомпенсации : 1.

Контроль чтения | Номер цилиндра парковки : 1.

Функциональный тест |

Выход из программы |






----------------------------------------------------------------------------
Индикация (Т), Остановка (С), Прерывание 4 (И)
----------------------------------------------------------------------------




----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10) Ручная установка
----------------------------------------------------------------------------

Тип винчестера | Установка параметров

-> Форматирование | Просмотр ошибок

Контроль записи | Чередование секторов

Контроль чтения | Оптимизация форматирования

Функциональный тест | Форматирование с восстановлением

Выход из программы | -> Форматирование винчестера


Форматирование: цилиндр 997. , поверхность 3.
Ошибка : цилиндр , поверхность


----------------------------------------------------------------------------
Индикация (Т), Остановка (С), Прерывание 4 (И)
----------------------------------------------------------------------------


Инициализируем:


.INI DW0:
DW0:/Initialize; Are you sure? Y

Так-же висит... :(

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

Перемычку Write Fault поставил на место, так-же не получается сделать инициализацию...

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

Интересно, что Функциональный тест диска дает ошибку...


----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10)
----------------------------------------------------------------------------

Тип винчестера |

Форматирование |

Контроль записи |

Контроль чтения |

-> Функциональный тест |

Выход из программы |




Ошибка-нет готовности РСНУ (ВК)

----------------------------------------------------------------------------
Индикация (Т), Остановка (С), Прерывание 4 (И)
----------------------------------------------------------------------------


Поставил другой, такой-же диск:


.INI DW0:
DW0:/Initialize; Are you sure? Y
?DUP-F-Input error DW0:



Аха, не виснет, но и инициализировать не хочет, ну понятно, диск то не форматировался.. Форматируем:



----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10) Ручная установка
----------------------------------------------------------------------------

-> Тип винчестера | Количество цилиндров : 999.

Форматирование | -> Количество поверхностей : 8.

Контроль записи | Начало предкомпенсации : 1.

Контроль чтения | Номер цилиндра парковки : 1.

Функциональный тест |

Выход из программы |






----------------------------------------------------------------------------
Индикация (Т), Остановка (С), Прерывание 4 (И)
----------------------------------------------------------------------------



----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10) Ручная установка
----------------------------------------------------------------------------

Тип винчестера | Установка параметров

-> Форматирование | Просмотр ошибок

Контроль записи | Чередование секторов

Контроль чтения | Оптимизация форматирования

Функциональный тест | Форматирование с восстановлением

Выход из программы | -> Форматирование винчестера


Форматирование: цилиндр 995. , поверхность 4.
Ошибка : цилиндр , поверхность


----------------------------------------------------------------------------
Индикация (Т), Остановка (С), Прерывание 4 (И)
----------------------------------------------------------------------------


Выходим из программы и инициализируем диски:




.INI DW0:
DW0:/Initialize; Are you sure? Y

.INI DW1:
DW1:/Initialize; Are you sure? Y
?DUP-F-Directory output error DW1:

.INI DW1:
DW1:/Initialize; Are you sure? Y
?DUP-F-Directory output error DW1:

.DIR DW0:
04-Feb-2016
?DIR-F-Invalid directory

.INI DW0:
DW0:/Initialize; Are you sure? Y

.DIR DW0:
04-Feb-2016
?DIR-F-Invalid directory

.INI DW1:
DW1:/Initialize; Are you sure? Y
?DUP-F-Directory output error DW1:



Странно, вроде как DW0: инициализирует, а каталог не отображается...
А DW1: вообще не хочет инициализировать..

Еще раз пробуем, только с калибровкой:



.R DW.SYS

.INI DW1:
DW1:/Initialize; Are you sure? Y
?DUP-F-Directory output error DW1:

.INI DW0:
DW0:/Initialize; Are you sure? Y

.DIR DW0:
04-Feb-2016
?DIR-F-Invalid directory

Тоже не хочет... :(

Ладно, пробуем еще один вариант настройки драйвера:



.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 999. Sides = 4. Size =63935.
DW1: Tracks = 999. Sides = 4. Size =63935.
DW2: Tracks = 999. Sides = 0. Size = 0. Not installed
DW3: Tracks = 999. Sides = 0. Size = 0. Not installed
.

.SET DW1 SIDES=0

.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 999. Sides = 4. Size =63935.
DW1: Tracks = 999. Sides = 0. Size = 0. Not installed
DW2: Tracks = 999. Sides = 0. Size = 0. Not installed
DW3: Tracks = 999. Sides = 0. Size = 0. Not installed
.

.SET DW1 SIDES=2

.SET DW2 SIDES=1

.SET DW3 SIDES=1

.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 999. Sides = 4. Size =63935.
DW1: Tracks = 999. Sides = 2. Size =31967.
DW2: Tracks = 999. Sides = 1. Size =15983.
DW3: Tracks = 999. Sides = 1. Size =15983.

.R DW.SYS


Форматируем:


----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10) Ручная установка
----------------------------------------------------------------------------

-> Тип винчестера | Количество цилиндров : 999.

Форматирование | Количество поверхностей : 8.

Контроль записи | Начало предкомпенсации : 1.

Контроль чтения | -> Номер цилиндра парковки : 1.

Функциональный тест |

Выход из программы |






----------------------------------------------------------------------------
Индикация (Т), Остановка (С), Прерывание 4 (И)
----------------------------------------------------------------------------


----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10) Ручная установка
----------------------------------------------------------------------------

Тип винчестера | Установка параметров

-> Форматирование | Просмотр ошибок

Контроль записи | Чередование секторов

Контроль чтения | Оптимизация форматирования

Функциональный тест | Форматирование с восстановлением

Выход из программы | -> Форматирование винчестера


Форматирование: цилиндр 998. , поверхность 7.
Ошибка : цилиндр , поверхность


----------------------------------------------------------------------------
Индикация (Т), Остановка (С), Прерывание 4 (И)
----------------------------------------------------------------------------


Пробуем инициализировать:


.INI DW0:
DW0:/Initialize; Are you sure? Y

.INI DW1:
DW1:/Initialize; Are you sure? Y
?DUP-F-Directory output error DW1:

.INI DW2:
DW2:/Initialize; Are you sure? Y
?DUP-F-Directory output error DW2:

.INI DW3:
DW3:/Initialize; Are you sure? Y
?DUP-F-Directory output error DW3:

.DIR DW0:
04-Feb-2016
?DIR-F-Invalid directory

.SET DW INFORM

?DW-I-Текущие значения SET-параметров:

DW0: Tracks = 999. Sides = 4. Size =63935.
DW1: Tracks = 999. Sides = 2. Size =31967.
DW2: Tracks = 999. Sides = 1. Size =15983.
DW3: Tracks = 999. Sides = 1. Size =15983.

Не хочет... :(

AFZ
04.02.2016, 17:59
А пустить ФОДОСовскую TESTDW.SAV не ку? У Хобота в архиве наверняка есть...

hobot
04.02.2016, 18:04
TDW V05.10
их несколько версий, я если надо попозже могу накопать,
совсем недавно в теме по "прошке" вроде выкладывал
ссылки и обсуждали.

Andrey_Ak
04.02.2016, 18:05
А пустить ФОДОСовскую TESTDW.SAV не ку? У Хобота в архиве наверняка есть...

У меня то она есть, но ей наверно не понравится этот драйвер, и она рассчитана на СМ5508... попробую..

hobot
04.02.2016, 18:09
http://storage8.static.itmages.ru/i/16/0204/s_1454598452_2927125_7417b8c623.png (http://itmages.ru/image/view/3781315/7417b8c6)

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

Andrey_Ak, Я СЕЙЧАС немного отвлекся от форума, вы капните их в архиве несколько разных версий этой праграммы.

Andrey_Ak
04.02.2016, 18:14
их несколько версий, я если надо попозже могу накопать,
совсем недавно в теме по "прошке" вроде выкладывал
ссылки и обсуждали.

Прошные не пойдут...

Именно TDW V05.10 от Роджественин несколько версий?

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


http://storage8.static.itmages.ru/i/16/0204/s_1454598452_2927125_7417b8c623.png (http://itmages.ru/image/view/3781315/7417b8c6)

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

Andrey_Ak, Я СЕЙЧАС немного отвлекся от форума, вы капните их в архиве несколько разных версий этой праграммы.

TDW1 я помню, она была у меня, никакого отношения к TDW V05.10 она не имеет.. кто-то ФОДОС-овскую переименовал...

AFZ
04.02.2016, 18:34
У меня то она есть, но ей наверно не понравится этот драйвер, и она рассчитана на СМ5508... попробую.. Ей драйвер не нужен, она сама через регистры DW работает. Естественно, под SJ/FB, никаких XM и прочих систем с защитой.

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

И попробуй простой ФОДОСовский драйвер DW

Andrey_Ak
04.02.2016, 18:38
Ф О Р М А Т И Р О В А Н И Е




Номер накопителя 0.:
Начальный номер цилиндра 0.:
Конечный номер цилиндра 999.:
Начальный номер поверхности 0.:
Конечный номер поверхности 8.:
Номер дорожки начала предкомпенсации 0.:
Фактор интерливинга : 00.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.

--> П У С К ! ! ! 999.3


Число с точкой - десятичное, без нее - восьмеричное

Зацикливание процесса - буква "Ц" или "П" перед строкой
Прекращение затянувшегося процесса - <СУ>/Ц

Выход в меню верхнего уровня - М

Отформатировала, но инициализация так-же не проходит, вешается...

Сейчас попробую драйвер из ФОДОС

SKcorp.
04.02.2016, 18:38
Прошные не пойдут...

Именно TDW V05.10 от Сторожевых несколько версий?


Ни одной.

AFZ
04.02.2016, 18:46
П У С К ! ! ! 999.3Почему 999.3, а не 999.7? Может ее от 8 головок колбасит? Попробуй 6 или 7.

Andrey_Ak
04.02.2016, 18:56
А хотя смысл использовать драйвер, которые не умеет разбивать диски?

Ведь RT11 максимально понимает размер диска 65534 блока, а это почти 40 мб..

40 мб я и так могу на ST-250R сделать...

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


Ни одной.

Я имел ввиду "Роджественин"

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


Почему 999.3, а не 999.7? Может ее от 8 головок колбасит? Попробуй 6 или 7.

Это процесс форматирования идет, заснял на 999.3,
так оно шло от 0 до 999 и головки бежали от 0 до 7

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

Взял ФОДОС драйвер DW отсюда: http://www.tis.kz/forum/topic.php?forum=28&topic=7&postid=1329470096#1329470096

Образ FODOS300.DSK из архива fodo_dsk.zip

Этот драйвер не хочет работать с DW:

AFZ
04.02.2016, 19:05
А хотя смысл использовать драйвер, которые не умеет разбивать диски? Убедиться, что диск работает, что никого не колбасит от непривычной геометрии диска. А потом уже подбирать драйвер, который все поймет.


Ведь RT11 максимально понимает размер диска 65534 блока, а это почти 40 мб.. Это ровно 32 М.


40 мб я и так могу на ST-250R сделать... На ST250R ты сделаешь 20.8М - 40М он обеспечивает при 31-м секторе на дорожке за счет RRL-кодирования, а КЖД этого не умеет, кроме мордобития никаких чудес (Высоцкий). :) То есть 16 секторов * 4 головки * 667 цилиндров, у ST225, для сравнения, 615 цилиндров...

Вот ST251 действительно обеспечит 40М (почти) - 16 секторов * 6 головок * 820 цилиндров.

Andrey_Ak
04.02.2016, 19:07
А вот это что за установки:


----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10) Ручная установка
----------------------------------------------------------------------------
Текущее чередование секторов :
Тип винчестера | 00.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.

-> Форматирование | -> 00.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.
00.08.01.09.02.10.03.11.04.12.05.13.06.14.07.15.
Контроль записи | 00.11.06.01.12.07.02.13.08.03.14.09.04.15.10.05.
00.04.08.12.01.05.09.13.02.06.10.14.03.07.11.15.
Контроль чтения | 00.13.10.07.04.01.14.11.08.05.02.15.12.09.06.03.
00.08.03.11.06.14.01.09.04.12.07.15.02.10.05.13.
Функциональный тест | 00.07.14.05.12.03.10.01.08.15.06.13.04.11.02.09.
00.02.04.06.08.10.12.14.01.03.05.07.09.11.13.15.
Выход из программы |
Новое чередование секторов :
00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.




----------------------------------------------------------------------------
Индикация (Т), Остановка (С), Прерывание 4 (И)
----------------------------------------------------------------------------

AFZ
04.02.2016, 19:11
Этот драйвер не хочет работать с DW: Как именно не хочет?

Andrey_Ak
04.02.2016, 19:12
Как именно не хочет?


------ ------ --- ---------
DW -Not installed 174000 300

Но может система не подходит...

AFZ
04.02.2016, 19:30
А что говорит на команду INS DW ?

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


Образ FODOS300.DSK из архива fodo_dsk.zip И вообще, почему бы не загрузиться с этой системы?

Andrey_Ak
04.02.2016, 19:52
А что говорит на команду INS DW ?

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

И вообще, почему бы не загрузиться с этой системы?


.COP HD2:HX.SYS HD3:
Files copied:
HD2:HX.SYS to HD3:HX.SYS

.COP/BOO:HX HD3:FMONSJ.SYS HD3:
?DUP-F-Conflicting SYSGEN options

HX.SYS не подходит к этой системе...

ну и DW.SYS не подходит к системе, с которой грузится c HX

SuperMax
05.02.2016, 05:10
А вот это что за установки:
это интерлейв
в данном случае подбор оптимальной последовательности секторов на треке
суть в том, что контроллер убогий и не способен читать сектора подряд - те просто не успевает
и прочитав 0й сектор он готов приступить к чтению сектора 01 несколько позднее чем он записан (в последовательной записи секторов)
соответственно надо подобрать оптимальную последовательность
как я помню, оптимум по скорости был 1 через 2 или 3 сектора
но надо проверять

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

AFZ
05.02.2016, 07:44
HX.SYS не подходит к этой системе... Попробуй вот это https://yadi.sk/d/KgsyWdk-oKUyz

Andrey_Ak
05.02.2016, 09:14
Собрал все драйвера и исходники DW которые
нашел у себя в архивах тут: http://www.tis.kz/forum/topic.php?forum=28&topic=7



DW1 .SYS 4 02-Feb-1990 Из образа DW_System54.DSK из Эмулятора ДВК Тип системы 0

DW2 .SYS 7 08-Mar-1990 Рождевственин v.05.08 из образа RT11A_UT.DSK от тов. Grand Тип системы 0
DW3 .SYS 4 27-Dec-1988 Из образа FODOS300.DSK от тов. Grand Тип системы 4

DW4 .SYS 4P 27-Jul-1990 Из образа 01.dsk из архива kaldyh-1.rar от тов. KALDYH Тип системы 4
DW5 .MAC 19 04-Sep-1991 Из образа 02.dsk из архива kaldyh-1.rar от тов. KALDYH
DW6 .MAC 43 07-Feb-1991 Из образа 08.dsk из архива kaldyh-1.rar от тов. KALDYH
DW7 .SYS 5 11-Feb-1987 Из образа 10.dsk из архива kaldyh-1.rar от тов. KALDYH Тип системы 0
DW8 .MAC 31 11-Feb-1987 Из образа 12.dsk из архива kaldyh-1.rar от тов. KALDYH
DW9 .SYS 4 21-May-1992 Из образа 13.dsk из архива kaldyh-1.rar от тов. KALDYH Тип системы 4

DWDWK .MAC 20P 27-Jul-1990 Из образа 03.dsk из архива kaldyh-3.rar от тов. KALDYH
DW10 .MAC 19 04-Sep-1991 Из образа 06.dsk из архива kaldyh-3.rar от тов. KALDYH
DW11 .SYS 4P 27-Jul-1990 Из образа 07.dsk из архива kaldyh-3.rar от тов. KALDYH Тип системы 4
DWDWK .MA 20P 27-Jul-1990 Из образа 09.dsk из архива kaldyh-3.rar от тов. KALDYH

DW12 .SYS 4P 12-Jan-1991 Из образа 03.dsk из архива kaldyh-4.rar от тов. KALDYH Тип системы 4
DW13 .SYS 4P 12-Jan-1991 Из образа 07.dsk из архива kaldyh-4.rar от тов. KALDYH Тип системы 4
DW14 .SYS 4 27-Dec-1988 Из образа 15.dsk из архива kaldyh-4.rar от тов. KALDYH Тип системы 0

DW15 .SYS 4P 12-Jan-1991 Из образа 12.dsk из архива kaldyh-5.rar от тов. KALDYH Тип системы 4
DW16 .MAC 19 04-Sep-1991 Из образа 13.dsk из архива kaldyh-5.rar от тов. KALDYH

DW17 .SYS 5 11-Feb-1987 Из образа 06.dsk из архива kaldyh-6.rar от тов. KALDYH Тип системы 0
DW18 .MAC 31 11-Feb-1987 Из образа 08.dsk из архива kaldyh-6.rar от тов. KALDYH
DW19 .MAC 19 04-Sep-1991 Из образа 09.dsk из архива kaldyh-6.rar от тов. KALDYH
DW20 .MAC 43 07-Feb-1991 Из образа 11.dsk из архива kaldyh-6.rar от тов. KALDYH


Наиболее интересны эти:


DWDWK .MAC 20P 27-Jul-1990
DW11 .SYS 4P 27-Jul-1990

Судя по названию исходника, и в исходнике русские комментарии..

Может это и есть исходник драйвера от ДВК? А не от Прошника...

Посмотрите все это...

Вот архив:

http://tis.kz/progs/dvk/DW-ALL.rar





;************************************************* ***********
;* вариант драйвера Винчестера СМ 5508, А.Саньков *
;* использован в качестве системного с 14 июля 1990 г. *
;* последняя коррекция 26 июля 1990, при MMG$T = 1 работает*
;************************************************* ***********

.LIST ME
.NLIST BIN
.NLIST SEQ
.LIST TTM
.NLIST CND

.MCALL .DRDEF
.DRDEF DW,53,<VARSZ$+FILST$+SPFUN$>,22777,174000,300
DWDS=DW$CSR
SYSPTR = 54
P1EXT = 432

.SBTTL SET OPTIONS
.DRSET RETRY,662.,O.RTRY,NUM
.DRSET WRITE,1,O.WRIT,NO
.DRSET WCHECK,1,O.WCHK,NO
O.RTRY:
CMP R0,R3
BHI O.BAD
MOV R0,$RETRY
BNE O.GOOD
BR O.BAD
O.WRIT:
NOP
TST (PC)+
SEC
ROL #0
.456=.-2
BIC #177776,.456
.466:
MOVB R1,R0
CMP R0,R3
BHI O.BAD
MOV R0,-(SP)
ADD PC,R0
ADD #<NOWRIT-.>,R0
MOVB .456,@R0
JSR PC,.600
MOV (SP)+,R0
BCS O.GOOD
CMP @#54,R1
BHI .534
MOV #100000,346(R1)
.534:
ADD #6,R1
ADD R0,R1
MOVB .456,@R1
O.GOOD:
TST (PC)+
O.BAD: SEC
RTS PC
O.WCHK:
BR .566
.WORD 0
CLR DWWCHK
BR .574
.566:
MOV #177777,DWWCHK
.574:
CLC
RTS PC
.600:
MOV PC,R0
ADD #<DWNAME-.>,R0
MOV PC,-(SP)
ADD #<.630-.>,@SP
EMT 342 ;.DSTAT R0,@SP
BCS O.BAD
MOV .634,R1
BEQ O.BAD
BR O.GOOD

.630: .WORD DWSTS
.632: .WORD <DWEND-DWSTRT>
.634: .WORD 0
.636: .WORD DWDSIZE
DWNAME: .RAD50 "DW "


.SBTTL DRIVER ENTRY
.DRBEG DW
BR .1020
NOWRIT: .WORD 0 ;[NO]WRITE
$RETRY: .WORD 10
.1020:
.IF NE MMG$T
ASR #1
BCC DWENT
MOV @#SYSPTR,R5
MOV P1EXT(R5),(PC)+
$P1EXT: .WORD 0
DWENT:
.ENDC
MOV DWCQE,R5
MOV #DW$CSR,R4
TST .1224
BEQ .1052
MOV #10,20(R4) ;нач. установка
MOV #177777,.1224 ;флаг нач.установки
.1052:
MOV #1000.,R1
.1056: MOV #100000,R3
.1062: TST 20(R4)
BPL .1076 ;свободен
.1070: SOB R3,.1062
.1072: SOB R1,.1056 ;эмуляция тайм-аута(.IF B TIM$IT...)
BR .1216 ;облом...
.1076:
ASL #100000
BCC .1136 ;параметры уже установлены
BIT #400,20(R4)
BNE .1136 ;медленный поиск, 5 М
MOV #306.,MAXCIL ;установка параметров для
MOV #19584.,MAXBLK ;10 М диска
MOV #19519.,.1250 ;Длина при замещении(?).BAD
.1136:
MOV $RETRY,RETRY ;иниц. счетчика повторов
CLR .1230
CLR .1232 ;призн.= чтение
CLR .1234
MOV @R5,R3 ; Q$BLKN
MOVB Q$UNIT(R5),R0
BIC #177770,R0
BNE .1212 ;только DW0 - ошибка
MOVB Q$FUNC(R5),R0
ADD #5,R0
CMP R0,#6
BLO .1256
.1212: JMP .2664 ;ошибка
.1216: JMP .2664
DWWCHK: .WORD 0 ;флаг WCHECK
.1224: .WORD 177777
RETRY: .WORD 0
.1230: .WORD 0 ;0 или -1
.1232: .WORD 0 ;призн.чтения(+)-записи(-)-возвр(0)?
.1234: .WORD 0
WCNT: .WORD 0
.1240: .WORD 0 ;# цил.
.1242: .WORD 0 ;# поверхн.
.1244: .WORD 0 ;# сектора
MAXBLK: .WORD 9792.
.1250: .WORD 9727.
MAXCIL: .WORD 153.
.1254: .WORD 0
.1256:
ASL R0
ADD PC,R0
ADD #<.1270-.>,R0
ADD @R0,PC ;переход по коду функции

.1270: .WORD .1770-.1270 ;возвр.длину-20(для табл.замещения ?)

.1272: .WORD .2664-.1270 ;включ.чтения и возврат
.WORD .2664-.1270

.1276: .WORD .1304-.1270
.1300: .WORD .1304-.1270

.1302: .WORD .1310-.1270 ;запись(?)

.1304: MOV SP,(PC)+ ;(SP)=?
.1306: .WORD 0 ;....?

.1310: BIT #1,Q$BUFF(R5)
BNE .1616 ;нечетный адрес буфера
MOV #1,.1232 ;признак = чтение (?)
TST Q$WCNT(R5)
BMI DW$WRT
BNE DW$READ
JMP DWEXIT
DW$WRT:
BIT #20000,16(R4)
BNE .1612 ;ошибка записи
ASL #0
BCS .1366
TST NOWRIT
BNE .1616 ;установлено set dw nowrite
.1366:
MOV #20000,.1234
MOV #100000,.1232 ;запись
NEG Q$WCNT(R5) ;запись,исп-я как еще один флаг
DW$READ:
MOV R3,R1 ;q$blkn
TST .1306 ;призн.рабоы с уменьш.длиной
BEQ .1426
CMP R3,MAXBLK
BCC .1616
BR .1436
.1426:
CMP R3,.1250 ;использование таблицы замещения ?
BCC .1616
INC R1
.1436:
BIC #-20,R1 ;# сектора
ASR R3
ASR R3
ASR R3
ASR R3
MOV R3,R2
BIC #177774,R2
ASR R3
ASR R3
BIC #177000,R3
CMP R3,MAXCIL
.1472:
BCC .1616
MOV R3,.1240 ;тек. # цилиндра
MOV R2,.1242 ;тек. # поверхности
MOV R1,.1244 ;тек. # сектора
.1512:
MOV .1240,12(R4)
MOV .1242,14(R4)
MOV .1244,6(R4)
TST .1232 ;чтение/запись
BMI .1552
MOV #40,16(R4) ;чтение сектора
BR .1576
.1552:
BIC #1,.1232
MOV #60,16(R4) ;запись сектора
JSR R0,.2002
MOV (R2)+,@R4
MOV R5,@R4
.1576:
CLR .1306
BIS #100,@#174020 ;запрерить прерывание
RTS PC
.1612:
JMP .2664
.1616:
JMP .2664

.1622: BIT #20000,16(R4) ;ссылка на эту точку отсутствует ?!
BNE .1612 ;ошибка записи
MOV #20000,.1234
CMP Q$WCNT(R5),#20
BCS .1616
MOV #20,Q$WCNT(R5)
BIT #1,Q$BUFF(R5)
BNE .1616 ;нечетн. адр буфера
MOV R3,R2
BIC #177770,R2
CMP R2,#4
BHIS .1616 ;# поверхности > 3
ASR R3
ASR R3
ASR R3
CMP R3,MAXCIL
BHIS .1616
MOV R3,.1240
MOV R2,.1242
.1726:
MOV .1240,12(R4) ;# цилиндра
MOV .1242,14(R4) ;# поверхн.
MOV #120,16(R4) ;форматирование !!!
.1750:
JSR R0,.2002
MOV (R2)+,@R4
MOV R5,@R4
BIS #100,@#174020
RTS PC
.IF EQ MMG$T
.1770: MOV .1250,@Q$BUFF(R5)
.IFF
.1770: MOV R4,-(SP)
MOV .1250,-(SP)
MOV R5,R4
CALL @$PTWRD
MOV (SP)+,R4
.ENDC
JMP DWEXIT
.2002:
MOV R5,-(SP)
MOV R4,-(SP)
MOV (R0)+,.2126
MOV (R0)+,.2150
MOV R4,R3
ADD #20,R3
ADD #10,R4
MOV Q$BUFF(R5),R2
MOV Q$WCNT(R5),R1
BEQ .2132
MOV R1,WCNT
CMP R1,#400
BLOS .2060
MOV #400,R1
.2060:
TST .1232
BPL .2074
ASL #100000
BCS .2100
.2074:
SUB R1,WCNT
.2100:
.IF NE MMG$T
MOV Q$PAR(R5),PARVAL
JSR R0,@$P1EXT
.WORD PARVAL-.
.IFF
MOV R2,.1254
TST .1232
BPL .2120
ASL #100000
BCS .2126
.2120: ADD #1000,.1254
.ENDC
.2126: HALT ;сюда пишется команда см. .2002
.2130: SOB R1,.2126
.IF NE MMG$T
PARVAL: .WORD 0
TST .1232
BPL 1$
ASL #100000
BCS 2$
1$: ADD #<256./32.>,PARVAL
2$:
.ENDC
.2132:
MOV @R3,R5
BMI .2154
ASR R5
BCS .2154
ASLB R5
BPL .2132
.2146: CLR R5
.2150: .WORD 0 ;сюда пишется команда, см .2002
BR .2132
.2154:
TSTB @R3
BPL .2162
BR .2154
.2162:
MOV (SP)+,R4
MOV (SP)+,R5
RTS R0
.2170:
MOV R4,R2
ADD #20,R2
MOV R4,R3
ADD #10,R3
.2204:
MOV @R2,R1
ASR R1
BCS .2222
ASLB R1
BPL .2204
MOV @R3,R1
BR .2204
.2222:
TSTB @R2
BPL .2230
.2226: .WORD 0
.2230: RTS PC

.2232: JMP .2664

.2236: JMP DWEXIT

.DRAST DW,4

.2252: BIC #100,@#174020 ; запрет прерывания
.FORK DWFBLK ; 2720
.2266: MOV DWCQE,R5
MOV #DW$CSR,R4
TST 20(R4)
BMI .2232 ;занято
BIT .1234,16(R4) ;ошибка|запр.дан.|...(не совсем корректно)
BNE .2232
BIT #400,16(R4) ;ошибка
BNE .2452
TST .1230
BNE .2562
; IF ERR$L
MOV .1232,R0
BEQ .2236
BPL .2370
TST DWWCHK
BEQ .2402
ASR R0
BCC .2362
JSR PC,.2170
.2356:
BR .2402
.2362:
INC .1232
BR .2624
.2370:
BMI .2402
JSR R0,.2002
MOV @R4,(R2)+ ;эти команды вставляются вместо
MOV @R4,R5 ;HALTов
.2402:
MOV WCNT,6(R5)
BEQ .2236
.IF NE MMG$T
MOV PARVAL,Q$PAR(R5)
.IFF
MOV .1254,4(R5)
.ENDC
TST .1232
BPL .2434
ASL #100000
BCS .2436
.2434:
INC @R5
.2436:
MOV @R5,R3
MOV $RETRY,RETRY
JMP DW$READ
.2452:
TST .1230
BNE .2664
BIT #3000,4(R4)
BNE .2664
TSTB 20(R4)
BPL .2502
JSR PC,.2170
.2502:
BIT #10000,4(R4)
BEQ .2562
MOV 16(R4),R3
BIT #20000,R3
BNE .2664
BIC #127777,R3
CMP #50000,R3
BNE .2664
MOV #-1,.1230
MOV #20,16(R4)
BIS #100,@#174020
RTS PC
.2562:
DEC RETRY
BEQ .2664
CLR .1230
TST .1232
BEQ .2620
BPL .2614
BIT #1,.1232
BNE .2624
.2614:
JMP .1512
.2620:
JMP .1726
.2624:
MOV .1240,12(R4)
MOV .1242,14(R4)
MOV .1244,6(R4)
MOV #40,16(R4) ;чтение, без обнуления эл.очереди
BIS #100,@#174020
RTS PC
.2664:
BIS #1,@Q$CSW(R5)
CLR .1306
DWEXIT:
CLR .1224
.DRFIN DW
DWFBLK: .BLKW 5

.SBTTL BOOTSTRAP DRIVER
.DRBOT DW,BOOT1,READ
. = DWBOOT+40
BOOT1:
JMP @#BOOT-DWBOOT
. = DWBOOT+210
READ: MOV #DW$CSR,R4
MOV #23,.3162
.3160:
DEC (PC)+
.3162: .WORD 23
BEQ .3326 ;облом...
MOV #10,20(R4) ;INIT
MOV #1750,R3
.3200:
MOV #100000,R5
.3204:
TST 20(R4)
BPL .3220 ;готов(нет занятости)
SOB R5,.3204
SOB R3,.3200
BR .3326 ;облом...
.3220:
MOV R0,-(SP)
MOV R1,-(SP)
.3224:
MOV @SP,R1
CMP R1,#400
BLOS .3240
MOV #400,R1
.3240:
SUB R1,@SP
MOV 2(SP),R0
INC 2(SP)
MOV R0,R5
INC R5
BIC #177760,R5
MOV R5,6(R4)
ASR R0
ASR R0
ASR R0
ASR R0
MOV R0,R5
BIC #177774,R5
MOV R5,14(R4)
ASR R0
ASR R0
BIC #177000,R0
BIT #400,20(R4)
BNE 37$ ;медленный поиск, 5 М
MOV #306.,MAXCB ;установка параметров для 10 М
37$: CMP R0,#231
MAXCB = .-2
BCS .3332
.3326:
JMP @#BIOERR-DWBOOT
.3332:
MOV R0,12(R4)
MOV #40,16(R4)
MOV R4,R0
ADD #20,R0
MOV R4,R5
ADD #10,R5
.3360:
TST @R0
BMI .3360
.3364: MOV #1000,R3
.3370: SOB R3,.
BIT #400,16(R4)
BEQ .3414
ADD R1,@SP
MOV (SP)+,R1
MOV (SP)+,R0
DEC R0
BR .3160
.3414:
MOV #23,.3162
.3422:
TSTB @R0
BPL .3422
.3426: MOV @R5,(R2)+
.3430: SOB R1,.3422
.3432:
BIT #1,@R0
BNE .3450
TSTB @R0
BPL .3432
TST @R5
BR .3432
.3450:
TST @SP
BNE .3224
CMP (SP)+,(SP)+
CLC
RTS PC
. = DWBOOT+574
BOOT: MOV #10000,SP
MOV #2,R0
MOV #<4*400>,R1
MOV #1000,R2
JSR PC,READ
MOV #READ-DWBOOT,@#B$READ
MOV #B$DNAM,@#B$DEVN
CLR @#B$DEVU
JMP @#B$BOOT
.DREND DW

.SBTTL INSTALL CHECK
.ASECT
.=200
NOP
1$: MOV #DW$CSR,R0
TST 20(R0)
BMI 1$
CMP #401,0(R0)
BNE 2$
TST (PC)+
2$: SEC
RTS PC
.END


.SBTTL I/O QUEUE ELEMENT FORMAT
DSECT GLOBAL=YES
DS Q.LINK,1,GLOBAL=NO
DS Q.CSW
DS Q.BLKN
DS Q.FUNC,1 BYTE
DS Q.JNUM,0 BYTES
DS Q.UNIT,1 BYTE
DS Q.BUFF
DS Q.WCNT
DS Q.COMP
.IF NE MMG$T
DS Q.PAR
DS Q.FREE,2
.ENDC
QESIZE = ..TEMP
QWDSIZ = QESIZE/2





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


Попробуй вот это https://yadi.sk/d/KgsyWdk-oKUyz

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

AFZ
05.02.2016, 12:49
Может это и есть исходник драйвера от ДВК? А не от Прошника... Похоже, отдизасмили ДВК-шный и частично откомментировали. Строго 4 головки.

Andrey_Ak
05.02.2016, 12:57
Похоже, отдизасмили ДВК-шный и частично откомментировали. Строго 4 головки.

Но ведь если разобраться, то может получится свой написать, с поддержкой больших дисков и т.д.?

Там еще разные .MAC исходники есть, может среди них найдется не Прошный драйвер?

form
05.02.2016, 13:02
под SJ/FB, никаких XM и прочих систем с защитой.
В XM в сущности нет защиты для обычных программ не считая минимальной (от команд HALT, WAIT, RESET, MTPS). Так, что если прога просто работает с регистрами то по идее ей нечего бояться :)

AFZ
05.02.2016, 16:38
В XM в сущности нет защиты для обычных программЗато у нее для этих программ очень мало памяти.


Но ведь если разобраться, то может получится свой написать, с поддержкой больших дисков и т.д.?Собственно, сочинить драйвер для RT-11 - ничего военного, достаточно помнить руководство "программирование внешних устройств" от RT-11, иметь полное руководство по программированию контроллера (две-три странички в описании контроллера) и знать асм. Только вот с большими дисками облом: контроллер не поддерживает диски более 64М. А драйвер, обслуживающий такие диски уже есть, зачем напрягаться?

form
05.02.2016, 16:42
Зато у нее для этих программ очень мало памяти.
На самом деле памяти для них у нее больше, но нужно уметь их пропатчить для этого :)
Правда при условии, что прога не использует вектора. Если использует - тогда сложнее.

Andrey_Ak
05.02.2016, 18:36
Попробуй вот это https://yadi.sk/d/KgsyWdk-oKUyz

Попробовал... Загрузился с этого образа...

Отформатировал диск с количеством цилиндров 999 и 8 поверхностей..

Потом:




HX0> INI DW:
DW0:/INITIALIZE; ARE YOU SURE? Y

HX0> DIR DW:
15-Jul-96
?DIR-F-Invalid directory

HX0>

AFZ
05.02.2016, 18:52
Invalid directory - это не физический сбой. Значит, по крайней мере, форматирует оно правильно. А вот пишет не туда, или читает не то, что надо. Контроллер с другими винтами работает нормально? И шлейф тоже.

Andrey_Ak
05.02.2016, 19:01
Invalid directory - это не физический сбой. Значит, по крайней мере, форматирует оно правильно. А вот пишет не туда, или читает не то, что надо. Контроллер с другими винтами работает нормально? И шлейф тоже.

Да, контроллер с другими дисками работает отлично...

AFZ
05.02.2016, 19:08
А попробуй сделать DESS DW: там же есть проограмма DESS?

Patron
05.02.2016, 19:09
Причина может быть (например) в том, что при форматировании предкомпенсация использовалась с нулевой дорожки. Если диск рассчитан на иное - формат может плохо читаться.

AFZ
05.02.2016, 19:12
Причина может быть (например) в том, что при форматировании предкомпенсация использовалась с нулевой дорожки. Если диск рассчитан на иное - формат может плохо читаться. Вряд ли это. Тогда был бы физический сбой.

Andrey_Ak
05.02.2016, 19:51
Остается проверить эти два диска на ХТ-ишке? Но сдается мне они будут нормально работать...

AFZ
05.02.2016, 20:22
Остается проверить эти два диска на ХТ-ишке? Но сдается мне они будут нормально работать... Где DESS DW:
Который после Invalid directory...

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

Попробуй поредактировать несколько секторов. Исправил что-то в одном, перешел в другой блок (буква "b", DESS спросит, записывать ли прошлый блок, скажешь Y), исправишь что-нибудь другое в этом новом блоке, вернешься в нулевой, посмотришь, в общем, сообразишь.

Andrey_Ak
05.02.2016, 21:32
может просто выставлю ДВК в сеть и попробуете помучать?

AFZ
06.02.2016, 00:26
может просто выставлю ДВК в сеть и попробуете помучать? Если меня научат, как это делать - легко, но уже не сегодня.

Andrey_Ak
09.02.2016, 10:19
Нашел еще один исходник DW, судя по содержимому описанию он как раз от ДВК

Кто сможет посмотреть и проверить оно ли это?

http://tis.kz/progs/dvk/DW.rar




.ENABL LC
.DSABL GBL

; This DW handler was altered too much! Be careful! No error logging support;
; increased time-out for "controller busy" state. Up to 8 heads/16 sectors
; format supported. Cylinder number must be set for both types of drives.
; Only Q=BUS Zelenograd DW - controller supported.
; Alternations made by Andrey : 141-44-85 (home).


.SBTTL PRIMARY DECLARATIONS


DWST = 20
DW$CSR = 174000+DWST
DW$VEC = 300

PC$PRI = 4
DW$ID = 401

HdRelx = 1 ;wait for head relaxation before write
;after positioning
.iif ndf HdRelx HdRelx=0 ;default - write as fast as possible

DW$SEC = 16.
DW$SRF = 5.

DW$C51 = 1024. ;306. cylinders must be for 10 MB drive
;668. cylinders for 21 MB (ST250)
;820. cylinders for 40 MB (ST251-1)
CYL0DRV = 306. ; number of cylinders for dw0, the rest is for dw1

SECBIT = 4
SRFBIT = 3
SECMSK = ^C<17>
SRFMSK = ^C<17>
CYLMSK = ^C<3777>

ASIZ51 = DW$SEC*DW$SRF*<DW$C51-cyl0drv>
USIZ51 = <DW$SEC*DW$SRF*<DW$C51-cyl0drv-1>>-1

.SBTTL PREAMBLE SECTION

.MCALL .DRDEF, .ASSUME

.DRDEF DW,53,FILST$!SPFUN$!VARSZ$,USIZ51,DW$CSR,DW$VEC

.SBTTL CONSTANT DEFINITIONS

SYSPTR = 54
P1EXT = 432
CMD0 = 1
CMD1 = 2
CMD2 = 4
CMD3 = 10
CMD4 = 20
CMD5 = 40
CMD6 = 100
CMD7 = 200

PRESEL = 260.

DWID = 0-DWST
DWERR = 4-DWST
DWPRE = 4-DWST
DWREV = 6-DWST
DWSEC = 6-DWST
DWBUF = 10-DWST
DWCYL = 12-DWST
DWHEAD = 14-DWST
DWST2 = 16-DWST
DWCMD = 16-DWST
DWSTAT = 20-DWST
DWINIT = 20-DWST

EDWM = 0400
ERTR0 = 01000
ERABO = 02000
ERIDNF = 10000
ERICRC = 20000
EDWCRC = 40000

S2ERR = 400
S2DRQ = 4000
S2SEK = 10000
S2WRF = 20000
S2DWY = 40000
CMREST = 20
CMREAD = 40
CMWRIT = 60
CMFORM = 120
STOPND = 1
STDRQ = 200
STDCAP = 400
STBUSY = 100000
STINIT = 10
STINT = 100

RETRYS = 2.
WREQ = 100000
RDAWRT = 1

.SBTTL INSTALLATION VERIFICATION ROUTINE
.ASECT
. = 200

BR 3$
1$: MOV #DW$CSR,R0
TST @R0
.ASSUME <STBUSY> EQ 100000
BMI 1$
CMP #DW$ID,DWID(R0)
BNE 2$
TST (PC)+
2$: SEC
RETURN

3$: JSR R0,4$
.ASCIZ /?FAST_DW-I-Altered: 5surf. 1024cyl./
.EVEN
4$: TST (SP)+
EMT 351
BR 1$

.SBTTL HANDLER SET OPTIONS

.DRSET RETRY, RETRY, O.RTRY, NUM

.SBTTL HANDLER MODIFICATION ROUTINES

O.RTRY: CMP R0,R3
BHI O.BAD
MOV R0,DRETRY
BNE O.GOOD
BR O.BAD

O.GOOD: TST (PC)+
O.BAD: SEC
RETURN

.IIF GT,<.-1000> .ERROR

.ASECT
. = 1000

.SBTTL HEADER SECTION

.DRBEG DW
BR DWENT
DRETRY: .WORD RETRYS

.SBTTL I/O INITIATION SECTION

DWENT:
.IF NE MMG$T
MOV @#SYSPTR,R4
MOV P1EXT(R4),(PC)+
$P1EXT: .WORD P1EXT
.ENDC

MOV #DW$CSR,R4

1$: MOV #2000.,R1
2$: CLR R3
3$: TST @R4
.ASSUME <STBUSY> EQ 100000
BPL STRT
SOB R3,3$
SOB R1,2$
BR JMPFD1

STRT:
ASL (PC)+
.WORD 100000
BCC 10$
BIT #STDCAP,@R4
BNE 10$

10$: MOV DRETRY,RETRY
CLR INREST
CLR FNFLAG
MOV DWCQE,R5
clr addcyl
mov #<DW$SEC*DW$SRF*<cyl0drv-1>>-1,siz1
bitb #7,q$unit(5)
beq 101$
mov dwusiz,siz1
mov #cyl0drv,addcyl
101$:
MOV @R5,R3

MOVB Q$FUNC(R5),R0
ADD #FNEG,R0
CMP R0,#FNUM
BLO DISPAT

JMPFU1: JMP DWFUE
JMPFD1: JMP DWFDE


addcyl: .word 0
siz1: .word 0
RETRY: .WORD 0
INREST: .WORD 0
FNFLAG: .WORD 0
WCNT: .WORD 0
CRNTCYL:.WORD 0
CRNTHD: .WORD 0
CRNTSEC:.WORD 0
DWASIZ: .WORD ASIZ51
DWUSIZ: .WORD USIZ51
DW$CYL: .WORD DW$C51
.IF EQ MMG$T
BUFF: .WORD 0
.ENDC

.SBTTL COMMAND DISPATCH

DISPAT: ASL R0
ADD PC,R0
ADD #FNTBL-.,R0
ADD @R0,PC

JMPREF:
FNTBL:
.WORD <DSIZ - JMPREF>
.WORD <DWFUE- JMPREF>
.WORD <DWFUE- JMPREF>
.WORD <DWFUE- JMPREF>
.WORD <DWFUE- JMPREF>
FTBZER: .WORD <RW - JMPREF>
FTBEND:
FNEG = <FTBZER - FNTBL>/2
FNUM = <FTBEND - FNTBL>/2

.SBTTL HANDLER FUNCTIONS SECTION
.SBTTL - READ(X)/WRIT(X) FUNCTION

RW: BIT #1,Q$BUFF(R5)
BNE JMPFUE
MOV #1,FNFLAG
TST Q$WCNT(R5)
BMI 1$
BNE RWNEXT

JMP DWRQS ; to DRFIN

1$: BIT #S2WRF,DWST2(R4) ;Has a write`fault occured?
BNE JMPFDE
.ASSUME . LE DWSTRT+1000
10$:
MOV #WREQ,FNFLAG
NEG Q$WCNT(R5)

RWNEXT: MOV R3,R1

2$: CMP R3,DWUSIZ
BHIS JMPFUE
INC R1
25$: BIC #SECMSK,R1
.REPT SECBIT
ASR R3
.ENDR

clr r2
div #dw$srf,r2
add addcyl,r2
mov r2,crntcyl
mov r3,crnthd

BIC #CYLMSK,R3
tst addcyl
bne 104$
cmp r3,#cyl0drv
bhis jmpfue
104$:
CMP R3,DW$CYL
BHIS JMPFUE

MOV R1,CRNTSEC

RWRTRY:
;### Relax here...
.if ne <hdrelx> ;wait for head relaxation
cmp crntcyl,dwcyl(4)
beq 91$
tst fnflag
bpl 91$
mov crntcyl,dwcyl(4)
mov #0,dwhead(4)
mov #13.,dwsec(4)
mov #cmread,dwcmd(4)
93$: tst @r4
bmi 93$ ;???
mov #256.,r0
94$: tst dwbuf(4) ;no hurry!
sob r0,94$
91$:
.endc ;wait for head relaxation

MOV CRNTCYL,DWCYL(R4)
MOV CRNTHD,DWHEAD(R4)
MOV CRNTSEC,DWSEC(R4)
TST FNFLAG
BMI 3$

MOV #CMREAD,DWCMD(R4)
BIS #STINT,@R4
BR 4$

3$: BIC #RDAWRT,FNFLAG
MOV #CMWRIT,DWCMD(R4)
JSR R0,MTFILL
tst (pc)+ ; MOV (R2)+,@R4
CLR @R4
BIS #STINT,@R4
4$: RETURN

JMPFDE: JMP DWFDE
JMPFUE: JMP DWFUE

FMRTRY: MOV CRNTCYL,DWCYL(R4)
MOV CRNTHD,DWHEAD(R4)
MOV #CMFORM,DWCMD(R4)
JSR R0,MTFILL
tst (pc)+ ; MOV (R2)+,@R4
CLR @R4
BIS #STINT,@R4
RETURN

.SBTTL DSIZ - Get disk size

DSIZ:
.IF EQ MMG$T
MOV siz1,@Q$BUFF(R5)
.IFF
MOV R4,-(SP)
mov siz1,-(sp)
MOV R5,R4
CALL @$PTWRD
MOV (SP)+,R4
.ENDC
JMP DWRQS ; to DRFIN

.SBTTL EMPTY/FILL THE CONTROLLER'S SECTOR BUFFER SUBROUTINE

.ENABL LSB

MTFILL: MOV R5,-(SP)
MOV R4,-(SP)

MOV (R0)+,93$
MOV (R0)+,5$

MOV R4,R3
ADD #DWBUF,R4
MOV Q$BUFF(R5),R2
MOV Q$WCNT(R5),R1
BEQ 4$
MOV R1,WCNT
CMP R1,#256.
BLOS 1$
MOV #256.,R1
1$: TST FNFLAG
BPL 100$
ASL (PC)+
.WORD 100000
BCS 10$
100$: SUB R1,WCNT
10$:

.IF NE MMG$T
MOV Q$PAR(R5),PARVAL
JSR R0,@$P1EXT
.WORD PARVAL-.
.IFF
MOV R2,BUFF
TST FNFLAG
BPL 200$
ASL (PC)+
.WORD 100000
bcs 93$ ; BCS 2$

200$: ADD #512.,BUFF
.ENDC
93$: tst (pc)+ ; var.cmd.! may be nop for read or tst (pc)+ for wrt.
br 270$

BIT #7,R1
BEQ 202$
201$: MOVB @R3,R5
BPL 201$
3$: mov (2)+,@r4 ; MOV (R2)+,@R4 for write
SOB R1,3$
BR 203$
202$: ASR R1
ASR R1
ASR R1
; MOV (R2)+,@R4 for write
; MOV @R4,(R2)+ for read
321$: mov (2)+,@r4
mov (2)+,@r4
mov (2)+,@r4
mov (2)+,@r4
mov (2)+,@r4
mov (2)+,@r4
mov (2)+,@r4
mov (2)+,@r4
SOB R1,321$
br 203$

270$: BIT #7,R1
BEQ 272$
271$:
MOVB @R3,R5
BPL 271$
370$: mov @r4,(2)+ ; MOV @r4,(R2)+ for write

SOB R1,370$
BR 203$
272$: ASR R1
ASR R1
ASR R1
; MOV (R2)+,@R4 for write
; MOV @R4,(R2)+ for read
371$:
mov @r4,(2)+
mov @r4,(2)+
mov @r4,(2)+
mov @r4,(2)+
mov @r4,(2)+
mov @r4,(2)+
mov @r4,(2)+
mov @r4,(2)+
SOB R1,371$
203$:

.IF NE MMG$T
PARVAL: .WORD 0
TST FNFLAG
BPL 30$
ASL (PC)+
.WORD 100000
BCS 300$
30$: ADD #<256./32.>,PARVAL
300$:
.ENDC
4$: MOV @R3,R5
BMI 6$
ASR R5
BCS 6$
ASLB R5
BPL 4$
5$: .WORD 0 ; VARIABLE COMMAND!!!
; CLR @R4 for write
; MOV @R4,R5 for read
BR 4$
6$: TSTB @R3
BPL 7$
HALT
7$: MOV (SP)+,R4
MOV (SP)+,R5
RTS R0

.DSABL LSB

.SBTTL DUMP THE CONTROLLER'S SECTOR BUFFER SUBROUTINE

DUMP: MOV R4,R2
MOV R4,R3
ADD #DWBUF,R3
1$: MOV @R2,R1
ASR R1
BCS 2$
ASLB R1
BPL 1$
MOV @R3,R1
BR 1$

2$: TSTB @R2
BPL 3$
HALT
3$: RETURN

.SBTTL INTERRUPT SERVICE SECTION

INTFDE: JMP DWFDE
INTRQS: JMP DWRQS ; to DRFIN

.DRAST DW,PC$PRI

MOV #DW$CSR,R4
BIC #STINT,@R4

.FORK DWFBLK
MOV DWCQE,R5

TST @R4
BMI INTFDE
BIT #S2ERR,DWST2(R4) ;Error status?
BNE 4$
TST INREST
BNE 6$
80$: MOV FNFLAG,R0
BEQ INTRQS
BMI 3$
JSR R0,MTFILL
nop ; MOV @R4,(R2)+
MOV @R4,R5
3$: MOV WCNT,Q$WCNT(R5)
BEQ INTRQS
.IF NE MMG$T
MOV PARVAL, Q$PAR(R5)
.IFF
MOV BUFF,Q$BUFF(R5)
.ENDC
TST FNFLAG
BPL 30$
ASL (PC)+
.WORD 100000
BCS 35$
30$: INC @R5
35$: MOV @R5,R3
MOV DRETRY,RETRY
JMP RWNEXT

4$: TST INREST
BNE DWFDE
BIT #<ERTR0!ERABO>,DWERR(R4)
BNE DWFDE

TSTB @R4
BPL 5$
CALL DUMP
5$: BIT #ERIDNF,DWERR(R4)
BEQ 6$
MOV DWST2(R4),R3
BIT #S2WRF,R3
BNE DWFDE
BIC #^C<S2SEK!S2DWY>,R3
CMP #<S2SEK!S2DWY>,R3
BNE DWFDE
MOV #-1,INREST

MOV #CMREST,DWCMD(R4)
BIS #STINT,@R4

RETURN

6$: DEC RETRY
BEQ DWFDE
CLR INREST
TST FNFLAG
BEQ 8$
BPL 7$
BIT #RDAWRT,FNFLAG
BNE 9$
7$: JMP RWRTRY
8$: JMP FMRTRY

9$: MOV CRNTCYL,DWCYL(R4)
MOV CRNTHD,DWHEAD(R4)
MOV CRNTSEC,DWSEC(R4)
MOV #CMREAD,DWCMD(R4)
BIS #STINT,@R4

RETURN

.SBTTL I/O COMPLETION SECTION
DWFDE:

DWFUE: BIS #HDERR$,@Q$CSW(R5)
DWRQS:
.DRFIN DW
DWFBLK: .WORD 0,0,0,0



.SBTTL BOOTSTRAP READ ROUTINE
.DRBOT DW,BOOT1,READ,CONTROL=<CBUS>
. = DWBOOT + 40
BOOT1: JMP @#<BOOT-DWBOOT>
.ENABL LSB
. = DWBOOT + 210


READ: MOV #DW$CSR,R4
TST @R4
BMI 40$
ASL (PC)+
.WORD 100000
BCC 10$
BIT #STDCAP,@R4
BNE 10$
MOV #DW$C51,DW$CY1
10$: MOV R0,-(SP)
MOV R1,-(SP)
20$: MOV @SP,R1
CMP R1,#256.
BLOS 30$
MOV #256.,R1
30$: SUB R1,@SP
MOV 2(SP),R0
INC 2(SP)
MOV R0,R5
INC R5

BIC #SECMSK,R5
MOV R5,DWSEC(R4)

.REPT SECBIT
ASR R0
.ENDR

MOV R0,R5

; BIC #SRFMSK,R5 ; 4 surf.

clr (pc)+ ; Calculate head and cylinder
101$: .word 0 ; numbers.
102$: cmp r5,#<dw$srf-1> ;
ble 103$ ;
inc 101$ ;
sub #<dw$srf>,r5 ;
br 102$ ;
103$: ;
MOV R5,DWHEAD(R4)


; .REPT SRFBIT
; ASR R0
; .ENDR
mov 101$,r0

BIC #CYLMSK,R0
CMP R0,(PC)+
DW$CY1: .WORD 153.
BLO 50$
40$: JMP @#<BIOERR-DWBOOT>
50$:
MOV R0,DWCYL(R4)
MOV #CMREAD,DWCMD(R4)
MOV R4,R0
MOV R4,R5
ADD #DWBUF,R5
60$: TST @R0
BMI 60$
BIT #S2ERR,DWST2(R4)
BNE 40$
70$: TSTB @R0
BPL 70$
MOV @R5,(R2)+
SOB R1,70$
80$: BIT #STOPND,@R0
BNE 90$
TSTB @R0
BPL 80$
TST @R5
BR 80$
90$: TST @SP
BNE 20$
CMP (SP)+,(SP)+
CLC
RETURN

.DSABL LSB

. = DWBOOT+500
BOOT: MOV #10000,SP
MOV #2,R0
MOV #<4*256.>,R1
MOV #1000,R2
JSR PC,READ
MOV #<READ-DWBOOT>,@#B$READ
MOV #B$DNAM,@#B$DEVN
CLR @#B$DEVU
JMP @#B$BOOT
.DREND DW
.END

hobot
09.02.2016, 10:58
Нашел еще один исходник DW
В чём отличие от файла по ссылке в начале темы?
http://zx-pk.ru/showthread.php?t=26141&p=855619&viewfull=1#post855619

размер? значения констант? алгоритм?

Andrey_Ak
09.02.2016, 18:53
В чём отличие от файла по ссылке в начале темы?
http://zx-pk.ru/showthread.php?t=26141&p=855619&viewfull=1#post855619

размер? значения констант? алгоритм?

Аха, оно и есть... Просто тогда не так внимательно посмотрел..

Там же еще есть программа форматирования DWOPT.MAC

Выкладываю, в надежде что кто-то сможет просмотреть исходник и понять,
для какого контроллера этот исходник, от ДВК или нет..
А потом переписать драйвер..

К сожалению я в коде почти не понимаю.. ((

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


Если меня научат, как это делать - легко, но уже не сегодня.

Может попробуем удаленно?

AFZ
10.02.2016, 13:12
Может попробуем удаленно? Легко. Что я должен сделать, чтобы получить доступ? Инструкцию, плз... Или ссылку.

Andrey_Ak
10.02.2016, 17:07
Легко. Что я должен сделать, чтобы получить доступ? Инструкцию, плз... Или ссылку.

Отписал в ЛС... Можно будет загрузить ДВК через HX с Вашей стороны..

Andrey_Ak
15.02.2016, 14:31
Итак, вроде полностью разобрался с генерацией системы с нуля,
и со сборкой драйверов под систему.. Если интересно, тут:

http://www.tis.kz/forum/topic.php?forum=27&topic=2&postid=1455178803#1455178803

А теперь самое интересное:

В архиве: http://tis.kz/progs/dvk/DW.rar

Исходник драйвера DW.MAC, исходник программы форматирования DWOPT.MAC
а так-же собранные DW.SYS и DWOPT.SAV для системы с параметром 0

И этот драйвер DW и программа форматирования DWOPT
именно для контроллера DW от ДВК.

Проверил в эмуляторе, все работает.. Вечером проверю на реальном ДВК.

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


п.с. Диск ST-4096 удалось запустить на ДВК, благодаря тов. AFZ, за что ему огромное спасибо!!!

Правда еще не до конца разобрались, диск форматируется с количеством треков 999 (больше не дает программа форматирования),
количество сторон 8 (0-7), и с драйвером DW от Рождевственин работает как 4 диска
по 32 690 блока каждый.. (Получается емкость диска удалось подключить 64 мб)

В чем была проблема с подключением ST-4096:

Если на контакте 2 контроллера ДВК сделано "~Уменьшение тока записи", то все сходится.
При записи ДВК выдает этот сигнал, диск интерпретирует его, как ~HD SLCT 3, запись идет
на головки 8-15, при чтении он не выставляется, читается форматированная дорожка 0.

А на ST-225-ом там "Умеьшение тока записи", у всех, у кого число головок меньше восьми.
С появлением больших винтов сигнал УТЗ утратил актуальность и его заменили на четвертый
бит номера головки (3, если считать с нуля).

А у МФМ оно рулится из драйвера. На самом деле УТЗ был нужен только 506-му и 412-му,
дальше управление током записи было перенесено в контроллер самого накопителя и
сигнал остался ненужным. Ну, если ты не сунешь туда 506 или 412.

А то, что ставили у нас, 5 или 10М винты - это, как раз, 506 и 142, так, что наши УТЗ сделали.

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

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

п.п.с. Оба диска ST-4096 были проверены на XT-шке, как ST-251, т.к. контроллер у меня ST11R,
в нем нет этого диска.. Жаль.. был бы контроллер ST11M в нем есть этот ST-4096...
Ну и один диск дохлый, контроллером вообще не определяется, а другой как ST-251
от форматировался, поставилась система на него и загрузилась с него..

AFZ
15.02.2016, 14:52
Нужно очень разбираться с выложенным тут рабочим исходником DW и переписывать
его под поддержку больших дисков, чтоб ST-4096 и подобные ему могли работать
в полную емкость.. Ну и заодно исправить загрузку с него... Не нужно ничего делать с этим исходником. Я же тебе прислал проверенный драйвер, пробуй его.

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

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

Andrey_Ak
15.02.2016, 14:52
Не нужно ничего делать с этим исходником. Я же тебе прислал проверенный драйвер, пробуй его.

Обязательно проверю.. Но исходник все-равно нужен..
чтоб можно было собирать драйвера с поддержкой 8-ми сторон,
поддержкой разбивки диска на 4 части, и поддержкой треков больше 999

AFZ
15.02.2016, 14:56
чтоб можно было собирать драйвера с поддержкой 8-ми сторон,
поддержкой разбивки диска на 4 части, и поддержкой треков больше 999 Мой любимый драйвер все это делает, хоть до 8 логических дисков, правда на фиг оно нужно больше двух, если макс. размер, поддерживаемый контроллером - 64М ?

Andrey_Ak
15.02.2016, 17:04
Мой любимый драйвер все это делает, хоть до 8 логических дисков, правда на фиг оно нужно больше двух, если макс. размер, поддерживаемый контроллером - 64М ?

64М максимальный размер из-за 16 секторов и 8 головок?

AFZ
15.02.2016, 19:45
64М максимальный размер из-за 16 секторов и 8 головок? Да, и 1024 цилиндров. Итого 16*8*1024 = 131072 блока * 512 = 67108864 байта = 65536 К = 64 М (делим на 1024 два раза)

Andrey_Ak
16.02.2016, 08:23
Вообщем удалось и отформатировать диск, и поставить систему и загрузится с него..

С драйвером от тов. AFZ загрузка заработала на моей сборке системы.

Написал подробную статью про все это дело, и там-же драйвер:

http://www.tis.kz/forum/topic.php?forum=27&topic=3&postid=1455599954#1455599954

Но еще остались моменты, которые нужно проверить..

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

foxb2673
24.02.2016, 09:17
Выложил свой драйвер DW для ДВК сюда (ftp://ftp.fox.khv.ru/pub/DWK/dw_handler_v6.4.zip).
Создан в начале 90х годов на основе стандартного драйвера из RT-11 от ДВК.
В новой эпохе правки в основном косметические, до радикальных переделок руки пока так и не дошли.
Файл README (DW.TXT) в кодировке koi8-r.
Потенциально могут быть ошибки, поэтому с критичными данными под ним осторожнее. Но в ту эпоху работал...

Andrey_Ak
24.02.2016, 09:33
Выложил свой драйвер DW для ДВК сюда (ftp://ftp.fox.khv.ru/pub/DWK/dw_handler_v6.4.zip).
Создан в начале 90х годов на основе стандартного драйвера из RT-11 от ДВК.
В новой эпохе правки в основном косметические, до радикальных переделок руки пока так и не дошли.
Файл README (DW.TXT) в кодировке koi8-r.
Потенциально могут быть ошибки, поэтому с критичными данными под ним осторожнее. Но в ту эпоху работал...

Спасибо!!! Буду заниматься... Теперь уже будет два исходника DW для ДВК... Отлично...

form
24.02.2016, 09:50
Спасибо!!! Буду заниматься... Теперь уже будет два исходника DW для ДВК... Отлично...
Ну вот - еще один потестить можно. Тот который запустили слегка кривоват (в частности разбивка делается только для драйвера, но не для его загрузчика). Но главное - RT-11 SJ/SB/FB/XM и TSX+ запустились :)

foxb2673
24.02.2016, 09:58
В моём загрузчик тоже не учитывает таблицу разделов. Загрузка возможна только с раздела 0, при этом он должен начинаться с нулевого цилиндра.
В ту пору не было задачи грузиться с альтернативных разделов, да и вместить эту таблицу в блок загрузчика проблематично из-за ограничений по размеру. Дисков больше 20 МБ было раз-два и обчёлся на всю контору.

form
24.02.2016, 10:01
В моём загрузчик тоже не учитывает таблицу разделов.
Ну это дело поправимое...

foxb2673
24.02.2016, 10:07
Можно сделать выбор активного раздела, и вписывать в блок загрузчика не всю таблицу, а только его параметры...
Но сам загрузчик при этом всё равно должен будет находиться в блоке 0.

form
24.02.2016, 10:12
Можно сделать выбор активного раздела, и вписывать в блок загрузчика не всю таблицу, а только его параметры...
Загрузчик должен работать полноценно - то есть выполнять команду BOOT в RT-11 без вариантов.

foxb2673
24.02.2016, 10:27
Из уже загруженной операционки нет проблем считать загрузочный блок из начала нужного раздела, но при первоначальной загрузке монитор (стандартный) умеет считывать его только из первого блока диска...

form
24.02.2016, 10:31
но при первоначальной загрузке монитор (стандартный) умеет считывать его только из первого блока диска...
При первоначальной загрузке монитор (а вернее загрузчик монитора) его вообще не умеет считывать блок загрузчика - это не его задача ;)
Кроме того команда BOOT выполняет также аппаратную загрузку, и она тоже должна работать.

Andrey_Ak
24.02.2016, 11:04
Драйвер DW V05.08 [RYG] Рождевствин Ю.Г. 1990 г. (с) т. 322-12-14
поддерживает загрузку DW0 - DW3

- Ставил одну систему (скажем 5.04) на DW0, из монитора загружался с DW0
- Ставил другую систему (скажем 5.07) на DW1, и из монитора без проблем загружался с DW1

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

А так-же, драйвер от тов. AFZ тоже вроде поддерживал загрузку из монитора с раздела DW1

foxb2673
24.02.2016, 11:06
Сдаётся мне, что мы про разные вещи говорим...
Я про то, что загрузчик из стандартного системного ПЗУ на ДВК умеет считывать с диска только блок 0, расположенный по адресу цилиндр 0, поверхность 0, сектор 1.

А доработать загрузчик, который в драйвере, теоретически можно, если места на таблицу разделов хватит... Места там немного. Можно попробовать ещё поджать код, надпись выкинуть...

SKcorp.
24.02.2016, 11:11
Драйвер DW V05.08 [RYG] Рождевствин Ю.Г. 1990 г. (с) т. 322-12-14
поддерживает загрузку DW0 - DW3


Сорри, но глаз режет, то он у Вас Роджественин, то Рождевствин, то вообще Сторожевых. Пишите уже правильно фамилию.

Andrey_Ak
24.02.2016, 11:13
Сорри, но глаз режет, то он у Вас Роджественин, то Рождевствин, то вообще Сторожевых. Пишите уже правильно фамилию.

Это приглашение из драйвера.. Так оно там написано 1:1

А про Сторожевых, один раз ошибся, и по запарке написал его...

form
24.02.2016, 11:14
Я про то, что загрузчик из стандартного системного ПЗУ на ДВК умеет считывать с диска только блок 0, расположенный по адресу цилиндр 0, поверхность 0, сектор 1.
Зато команда BOOT при аппаратной (да-да, и так бывает) загрузке прекрасно прочитает загрузчик с того места где он живет в реале на диске.


можно, если места на таблицу разделов хватит
Не такая она большая - не вижу смысла развлекаться с количеством дисков больше 4 (в силу ограничений контроллера). Но даже если бы не влезла - это тоже не обязательно ограничение. Пример - команды SET в драйверах которые как исправляют блоки за пределами 0-1, так и содержат код много больше чем SET area драйвера :)

Andrey_Ak
24.02.2016, 11:14
Сдаётся мне, что мы про разные вещи говорим...
Я про то, что загрузчик из стандартного системного ПЗУ на ДВК умеет считывать с диска только блок 0, расположенный по адресу цилиндр 0, поверхность 0, сектор 1.

А доработать загрузчик, который в драйвере, теоретически можно, если места на таблицу разделов хватит... Места там немного. Можно попробовать ещё поджать код, надпись выкинуть...

Я тоже про загрузчик из стандартного ПЗУ,
получалось загружаться так:

@B
DW1

SKcorp.
24.02.2016, 11:17
Это приглашение из драйвера.. Так оно там написано 1:1


Вот прямо так два разных и неправильных варианта?

form
24.02.2016, 11:21
получалось загружаться так:

@B
DW1
Получалось, но сам загрузчик при этом может браться из нулевого (первого?) физического блока, а ему уже передается циферка 1 в R0.

Andrey_Ak
24.02.2016, 11:23
Вот прямо так два разных и неправильных варианта?

Рождествин Ю.Г. - Так правильно...

Так в документации, так и в приглашении выходит:
http://www.tis.kz/forum/topic.php?forum=27&topic=3&postid=1325696459#1325696459

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


Получалось, но сам загрузчик при этом может браться из нулевого (первого?) физического блока, а ему уже передается циферка 1 в R0.

Скорее всего так и делает...

foxb2673
24.02.2016, 16:04
Сообщение от form
Получалось, но сам загрузчик при этом может браться из нулевого (первого?) физического блока, а ему уже передается циферка 1 в R0.
Скорее всего так и делает...
Именно так и делает.
Потому что больше брать ему этот загрузчик неоткуда...

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

form
24.02.2016, 16:48
по дизассемблированному
А XM при этом суппортится? (сам еще не добрался заглянуть).

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


А XM при этом суппортится?
Впрочем посмотрел уже. Суппортится вроде. Только бесполезного кода куча вроде .IIFов с SYSGEN опциями который повторяет то, что уже и так делается :)

dk_spb
24.02.2016, 21:57
Извините что влезаю со своим глупым вопросом:
имею неисправный контроллер. Программа TDW при чтении говорит ошибка 10000 на каждый сектор.
При этом загрузчик из ПЗУ при B DW0 читает что-то с диска, выдает полную строку "DW v05...." и виснет.
Правильно ли я понимаю что загрузчик из ПЗУ не проверяет при чтении ошибки?

foxb2673
25.02.2016, 10:47
Нет, не проверяет, проверяет только появление слова 000240 по адресу 000000 (стандартная сигнатура загрузчика), читает до упора, пока оно не появится, но если появилось, то ему неважно, был считан весь блок корректно или с ошибками - передаёт туда управление.


boot_DW:
012701 174020 mov #174020, R1
012711 000010 mov #10, @R1
loc_1526:
005711 tst @R1
100776 bmi loc_1526
012737 000001 174006 mov #1, @#174006
012737 000040 174016 mov #40, @#174016
loc_1546:
005711 tst @R1
100776 bmi loc_1546
005002 clr R2
012703 000400 mov #256., R3
loc_1560:
105711 tstb @R1
100376 bpl loc_1560
013722 174010 mov @#174010, (R2)+
077305 sob R3, loc_1560
022713 000240 cmp #240, @R3
001351 bne boot_DW
005007 clr PC


Выложил новую версию драйвера, 6.5: ftp://ftp.fox.khv.ru/pub/DWK/dw_handler_v6.5.zip
Теперь поддерживается загрузка с любого раздела. Попутно прибил пару багов...

form
25.02.2016, 10:57
000240 по адресу 000000 (стандартная сигнатура загрузчика)
На самом деле стандартная сигнатура - это 240-277 по адресу 0 и 400-777 по адресу 2. Судя по коду выше, RSX-11 напрямую загрузить с DW не получится без переделки - там по умолчанию загрузчик начинается с 260 (функционально то же самое что и 240). Примечательно что с MY все грузится при таком же начале загрузчика.

foxb2673
25.02.2016, 11:16
Странно, в MY аналогичная проверка:

boot_MY:
bit #40, @R1
beq boot_MY
mov #37, @R1
loc_412:
tstb @R1
bpl loc_412
mov R0, @#172142
loc_422:
bit #100040, @R1
beq loc_422
bmi boot_MY
cmp #240, @#0
bne boot_MY
clr PC

form
25.02.2016, 11:44
Странно, в MY аналогичная проверка
Посмотрел образ MY. Там у меня обычный NOP прописан.
form@diag:/tmp$ od rsxdvk.dsk | head -1
0000000 000240 000404 000000 000007 055420 071441 000400 112737
form@diag:/tmp$
Видимо 260 пишется на большие диски только или еще по какому признаку - может гляну сейчас за чаем.
Пустой загрузчик RSX-11 который говорит что на диске нет загружаемой системы:
000000 000240 000005 012706 001000 010700 062700 000036 112001
Загрузчик на диске RA90:
000000 000260 000404 000005 002674 055420 071441 000400 112737

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

Вобщем все проще с RSX. Это начало кода загрузчика (загрузчик один на все устройства):
.WORD 260 ;;; Identify this as a boot block
;;; Changes to a 'NOP' for DK/DP devices
BR 5$ ;;; BR around fixed stuff
А это процедура записи загрузчика после сохранения:
CMP #"XT,(R5) ; IS THIS AN XT DEVICE?
BEQ 70$ ; IF EQ YES
CMP #"RH,(R5) ; IS THIS AN RH DEVICE?
BEQ 50$ ; IF EQ YES
CMP #"DM,(R5) ; IS THIS THE RK06/07?
BEQ 50$ ; IF EQ YES
CMP #"DU,(R5) ; IS THIS THE UDA50/RA80?
BNE 60$ ; IF NE NO
50$: MOV @DRVCSR(R5),$CMBCS ; SET CSR IN BOOTSTRAP
BR 90$ ;
60$: MOV #240,$BTBLK ; INDICATE NORMAL BOOT BLOCK
То есть получается, что по сути только для DU, DB, DR и DW, DZ в P/OS остается 260. Это код из RSX-11M+, в M видимо еще найдутся устройства - DK, DP... Но в общем случае нам не помеха - проверяется название контроллера, а его мы не обязаны обзывать "XT" как на прошике - пусть будет "DW" как и само устройство...

foxb2673
26.02.2016, 03:14
Интересно, зачем они сделали такую дифференциацию...

form
26.02.2016, 05:33
Интересно, зачем они сделали такую дифференциацию...
В исходниках SAV ничего найти не удалось по теме. Только сам факт что для некоторых дисков меняет на 240, а по умолчанию 260. Посмотрел при том исходники последнего 11M - там не нашел такого. Что общего между DU, DB, DR, DW (и чего бы общего у них не было например с DL) тоже в голову не приходит ничего. Есть предположение, что это флаг для программ копирования вроже BRU. В исходниках BRU от M+ 3.0 ничего по теме нету, более того - он проверяет на NOP+BR и если не так - считает, что диск не содержит RSXовского загрузчика. Надо попробовать дизассембльнуть этот модуль от последнего BRU. Можно предполодить, что это связано с возможностью аппаратной загрузки RSX с виртуального диска на данных физических дисках (примерно как если бы был RT11.DSK скажем на диске типа RK, и можно было бы аппаратно загрузившись с него подключить LD к этому DSK и сделать его системным - в M+ V4.6 такое возможно, и видимо до него никаких 260 не было).

Andrey_Ak
12.06.2018, 13:13
Выложил новую версию драйвера, 6.5: ftp://ftp.fox.khv.ru/pub/DWK/dw_handler_v6.5.zip
Теперь поддерживается загрузка с любого раздела. Попутно прибил пару багов...

Добрый день!

Пытаюсь собрать драйвер из этого архива, при компиляции ошибки дает:



.MAC SYSGEN.CND+RK1:DW.MAC/OB
U 12 .MCALL .PUSH .POP .TTYOUT .TTYIN .
SCCA
OQ 1539 001440 10$: .Push <R4,R5>
OQ 1602 001466 .Push R5
OQ 1635 001614 .Pop R5
OQ 1638 001624 Key: .Push <R1,R2,R3>
OQ 1652 001672 .Pop <R3,R2,R1>
OQ 1656 001702 .Pop <R3,R2,R1>
OQ 1688 001774 .Push R0
OQ 1697 002020 .Pop R0
OQ 1698 002020 .Push R2
OQ 1701 002030 .Pop R2
OQ 1704 002030 .Push R3
OQ 1727 002062 .Pop R3
OQ 1795 002400 40$: .Pop <R5,R4>
OQ 1861 002572 .Push <R1,R2>
OQ 1871 002630 u2: .Pop <R2,R1>
OQ 1876 002640 .Push <R1,R2,R0>
OQ 1884 002670 .Pop R0
OQ 1886 002672 10$: .Pop R0
OQ 1902 002752 .Push <R1,R2>
OQ 1915 002772 .Push <R0,R1,R2>
OQ 1921 003020 .Pop <R2,R1,R0>
OQ 1925 003022 .Push <R0,R1,R3> ;R0 - nu
mber, R1 - field lenght (nonzero!)
OQ 1956 003056 .Pop <R3,R1,R0>
OQ 1960 003060 .PUSH <R0,R1,R2> ;R0 - nu
mber, R1 - field lenght (nonzero!)
OQ 1969 003106 CmnRts: .POP <R2,R1,R0> ;Common
return sequence
OQ 1973 003110 .Push <R0,R1,R2> ;R0 - dr
ive number
OQ 1978 003126 .Push R0
OQ 1981 003146 .Pop R0
OQ 1987 003160 .Push <R0,R1,R2,R1>
OQ 1992 003176 .Pop R0
OQ 2002 003224 .Push <R0,R1,R2,R1>
OQ 2007 003242 .Pop R0
OQ 2018 003302 .Push <R0,R1,R2,R1>
OQ 2023 003320 .Pop R0
OQ 2037 003416 .Push <R0,R1,R2,R1>
OQ 2042 003434 .Pop R0
OQ 2049 003460 .Push <R0,R1,R2,R1>
OQ 2054 003476 .Pop R0
OQ 2070 003610 .Push <R0,R1,R2,R3>
OQ 2095 003736 .Pop R3
OQ 2129 003756 SIZCK1: .Push <R2,R3>
OQ 2206 004156 120$: .Pop <R3,R2>
OQ 2229 004174 .PUSH R5
OQ 2232 004202 .POP R5
?MACRO-E-Errors detected: 45
DK:DW=DK:SYSGEN.CND,RK1:DW.MAC


Система RT11 v.5.07 чистая, установлена из оригинального дистрибутива..

Не подскажите в чем проблема?

Hunta
12.06.2018, 13:41
Не опознаёт макросы .PUSH и .POP
Щас гляну архив

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

В DWBLD.COM строчку сборки сделать так:


EXE/NORU/EXE:SY:DW.SYG/OBJ:DW SJCND+DWCND+usrmlb.mac+DW

Andrey_Ak
12.06.2018, 13:55
В DWBLD.COM строчку сборки сделать так:
Код:

EXE/NORU/EXE:SY:DW.SYG/OBJ:DW SJCND+DWCND+usrmlb.mac+DW

А зачем вообще DWBLD.COM ? Ведь для сборки драйвера должно быть достаточно только одного .MAC

Hunta
12.06.2018, 14:00
А зачем вообще DWBLD.COM
Что б руками не вводить


Ведь для сборки драйвера должно быть достаточно только одного .MAC
Нет, ещё нужен LINK

Команда EXE{CUTE} - это - сделать MACRO, если без ошибок - сделать LINK, если без ошибок - сделать RUN



/NORU - не делать RUN
/EXE:SY:DW.SYG - имя и местоположение выходного файла
/OBJ:DW - имя и местоположения OBJect файла


После сборки что бы драйвер задействовать - не забудь переименовать в DW.SYS

Andrey_Ak
12.06.2018, 16:01
Нет, ещё нужен LINK

Команда EXE{CUTE} - это - сделать MACRO, если без ошибок - сделать LINK, если без ошибок - сделать RUN

Ну LINK это понятно, его после MACRO, но макро ошибки дает..


Что б руками не вводить

Ну понятно, просто батник значит..

Но я ведь руками правильно ввожу команду:


MAC SYSGEN.CND+RK1:DW.MAC/OB

Другие драйвера так делал, ошибок не было..

И у меня нет usrmlb.mac

Hunta
12.06.2018, 16:31
MAC SYSGEN.CND+usrmlb.mac+DWCND.mac+RK1:DW.MAC/OB



Другие драйвера так делал, ошибок не было
А в этом автор использует свои (??) макросы, которые в файле usrmlb.mac


И у меня нет usrmlb.mac
В этом архиве он есть (как и DWCND.mac)
ftp://ftp.fox.khv.ru/pub/DWK/dw_handler_v6.5.zip
Именно его содержимое я и смотрел

Andrey_Ak
12.06.2018, 17:25
А в этом автор использует свои (??) макросы, которые в файле usrmlb.mac


В этом архиве он есть (как и DWCND.mac)
ftp://ftp.fox.khv.ru/pub/DWK/dw_handler_v6.5.zip
Именно его содержимое я и смотрел

"А.., вот оно че... " (C)

Спасибо... Все получилось...



.MAC SYSGEN.CND+RK1:USRMLB.MAC+RK1:DWCND.MAC+RK1:DW.MAC/OB

- Создал на RK0: DW.OBJ

.LIN/EXE:RK0:DW.SYS/NOBI DW

- Из RK0: DW.OBJ сделал DW.SYS

Hunta
12.06.2018, 17:39
Спасибо... Все получилось
Не за что :) Не получилось бы - полез транслировать сам :)

Andrey_Ak
12.06.2018, 18:07
Часто попадаются исходники .MAC, но как правило кроме них никаких
дополнительных файлов нет.. И они нормально компилируются.

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