Нет.
Вид для печати
SKcorp., С паспортом спорить будешь?
А, ну да, ну да, середина из 306 - это 153. А паркует на 96. Не середина...
>По логике после инициализации (от кнопки УСТ) контроллер МС5405 сначала ищет нулевую дорожку, потом головки переводит в парковочную зону.
А где описана это логика?
По логике инициализация любого MFM винчестера заканчивается на trk00. И рекалибровка ("горячий" сброс) тоже заканчивается на trk00.
И в паспорте ДВКшного контроллера после инициализация заканчивается на trk00.
Откуда логика про "после инициализации .. сначала ищет нулевую дорожку, потом головки переводит в парковочную зону. "
Код:----------------------------------------------------------------------------
Рождествин т.321-67-81 (TDW V05.10)
----------------------------------------------------------------------------
Тип винчестера | Задержка записи/чтении
Форматирование | Индикация прерывания 4
Контроль записи | Автопоповторение теста
Контроль чтения | -> Парковка Винчестера
Функциональный тест |
-> Параметы теста |
Выход из теста |
----------------------------------------------------------------------------
Стоп (С), Меню (М), Индикация (Т) , Прерывание (И) , Автоповтор -
----------------------------------------------------------------------------
В смысле что логично если это касается для завершения работы Кванта (там я что-то не помню чтобы писали про парковку). Сейчас посмотрел диаграмму МС5410 (МС5405 не нашёл) там в начальной установке сигнал "дорожка 0" остаётся в низком уровне. Получается что при выключении головки падают на 0 дорожку.
Это я предположил, иначе для чего делать инит перед выключением... В общем, на МС5405 тоже надо делать парковку.
>иначе для чего делать инит перед выключением...
Например, чтобы не вышло ай-ай-ай когда вырубил питание во время записи.
Прошу сильно не бить - я с MFM дисками никогда не работал и потому многого могу не понимать. Даже в университете у нас на кафедре стояли только 386 и более старшие модели с IDE винчестерами, хотя Искры-1030 и Мазовии в некотором количестве и сохранялись а тот момент на кафедре высшей математики.
- - - Добавлено - - -
Поглядеть бы где, куда эта кнопка на схеме Кванта подключается
- - - Добавлено - - -
Мне приехал NEC D5126 на 20 Мб с четырьмя головами, 615 рабочими цилиндрами по 17 секторов и Landing Zone на 664 цилиндре (информация из TH' 99). То есть, для парковки надо программой гнать головки на 664 цилиндр?
Ах, это обычный warm reboot. Тогда понятно. Похоже, что никакого паркинга по этой кнопке и быть не могло. А вот рекалибровку с установкой на нулевой трек КНЖМД по сбросу проводил.
- - - Добавлено - - -
Тогда для парковки конкретно моего экземпляра кладем в регистр адреса цилиндра 174012 номер цилиндра 664d, в регистр команд/состояния 2 174016 команду чтения сектора 40, а сектор и поверхность не надо и устанавливать. Ждем секунду и выводим надпись о том, что компьютер можно выключать.
- - - Добавлено - - -
В ТО КНЖМД приведены только 4 команды - установка нулевой дорожки, чтение сектора, запись сектора и форматирование дорожки. Так что паркинг, похоже, только программный и так как нет отдельной команды позиционирования по дорожкам, нужно использовать три последние команды.
именно. та копия stopdw, что у меня есть, запускает команду чтения c:h:s 96:3:13, но не читает собственно данные.
Иного способа вывести головки в нужное место просто не предусматривалось разработчиками, а читать с инженерного цилиндра что-либо бессмысленно. Если Ваш stopdw в сырцах, опубликуйте текст, пожалуйста.
Korchagin, Ну вот Вы опять пишете совсем непонятно. Объясните, пожалуйста, что Вы имеете ввиду:
>вывести головки в нужное место
Что значит "нужное место"? Если речь идет о парковке, разве "нужное место" находится на 96 цилиндре?
>читать с инженерного цилиндра что-либо бессмысленно
Тут сразу два вопроса:
1) а почему Вы считате что 96 цилидр - инженерный?
2) почему Вы предполагаете что у СМ5508 (как и у ST-506/412) вообще есть инженерный цилиндр?
Нужное место для парковки. Я НИГДЕ не говорил, что оно на 96 цилиндре, у моего экземпляра это 664 цилиндр. 1) Инженерны цилиндр - для служебных целей. И я не считаю, что 96 инженерный. 2) У меня нет как самого 5508, так и документации на него. Но из-за отсутствия у него автопарковки чисто логически можно предположить, что должен быть предусмотрен цилиндр для этой цели за пределами рабочего поля.
- - - Добавлено - - -
Судя по таблице в старинных биосах 286 и 386 компов, СМ5508 соответствует двум типам из этой таблицы - landzone типа 1 на 305, а типа 23 аж на 336 цилиндре из 306. То есть место для парковки голов для дисков без автопарковки всё же предусмотрено.
Мы вернулись к тому что очень жаль что разработчики многих HDD об этом не знали.
Да и спрашивал я про упомянутый Вами инженерный цилиндр, а никак не про место парковки (обычно это очень разные вещи).
На самом деле меня просто несколько озадачила Ваша фраза "Иного способа вывести головки в нужное место просто не предусматривалось разработчиками, а читать с инженерного цилиндра что-либо бессмысленно."
В ней не было ни слова про "логично предположить", "мне кажется" и т.д. Поэтому я и переспросил откуда такая уверенность. Мне показалось что я нашел источник очень недостающей информации.
Ан нет, извинте что отвлек....
> То есть место для парковки голов для дисков без автопарковки всё же предусмотрено.
Это Вы в BIOS прочитали или опять предполагаете?
Ну пожалуйста, ну очень прошу: если Вы что-то предполагаете или Вам что-то кажется - не забывайте об этом упомянуть, пожалуйста. И меня можете смело пинать если я этого не делаю.
исходников нет, дизассембировать можно (но лень). есть трасса работы в эмуляторе.
после этого с устройством никаких действий не происходит.Код:[:qbus3:kzd] 14.141004 at ':maincpu' (1102): KZD R [:qbus3:kzd] 174020 == 000401 @ 0
[:qbus3:kzd] 14.141031 at ':maincpu' (1122): KZD R [:qbus3:kzd] 174016 == 050000 @ 0
[:qbus3:kzd] 14.141048 at ':maincpu' (1016): KZD W [:qbus3:kzd] 174020 <- 000010 & 177777 @ 0
[:qbus3:kzd] 14.141048 at ':maincpu' (1016): KZD [:qbus3:kzd] Reset in progress
[:qbus3:kzd] 14.141069 at ':maincpu' (1102): KZD R [:qbus3:kzd] 174020 == 000401 @ 0
[:qbus3:kzd] 14.141084 at ':maincpu' (1026): KZD W [:qbus3:kzd] 174012 <- 000000 & 177777 @ 0
[:qbus3:kzd] 14.141091 at ':maincpu' (1032): KZD W [:qbus3:kzd] 174014 <- 000000 & 177777 @ 0
[:qbus3:kzd] 14.141098 at ':maincpu' (1036): KZD W [:qbus3:kzd] 174006 <- 000000 & 177777 @ 0
[:qbus3:kzd] 14.141098 at ':maincpu' (1036): IRQ [:qbus3:kzd] clear_zoa
[:qbus3:kzd] 14.141106 at ':maincpu' (1044): KZD W [:qbus3:kzd] 174012 <- 000140 & 177777 @ 0
[:qbus3:kzd] 14.141114 at ':maincpu' (1052): KZD W [:qbus3:kzd] 174014 <- 000003 & 177777 @ 0
[:qbus3:kzd] 14.141122 at ':maincpu' (1060): KZD W [:qbus3:kzd] 174006 <- 000015 & 177777 @ 0
[:qbus3:kzd] 14.141122 at ':maincpu' (1060): IRQ [:qbus3:kzd] clear_zoa
[:qbus3:kzd] 14.141131 at ':maincpu' (1066): KZD W [:qbus3:kzd] 174016 <- 000040 & 177777 @ 0
[:qbus3:kzd] 14.141131 at ':maincpu' (1066): IRQ [:qbus3:kzd] clear_zoa
[:qbus3:kzd] 14.149131 at (no context): KZD Timer [:qbus3:kzd] fired 1
[:qbus3:kzd] 14.149131 at (no context): IRQ [:qbus3:kzd] raise_zob
[:qbus3:kzd] 14.149131 at (no context): KZD [:qbus3:kzd] read c:h:s 96:3:13 lba 6205 CSR 054040 SI 000600 zoa 0 zob 0
>после этого с устройством никаких действий не происходит.
Так вроде и не должно. Написано же в паспорте: для транспортировки загнать головки на 96 цилиндр - загнали. А уж нужная там информация была или нет - как повезет ;-)
Главное нулевую дорожку не испортить, а то потом винт нельзя будет использовать, пока нулевую дорожку не передвинешь.
Иного способа вывести головки в нужное место просто не предусматривалось разработчиками, а читать с инженерного цилиндра что-либо бессмысленно. Не предусматривалось разработчиками КНЖМД ДВК из-за его скромного набора команд - речь в этом разделе форума идет о ДВК и совместимых с ними машинах. Читать что-либо с цилиндров вне рабочего поля незачем, поэтому написавшие stopdw программисты команду чтения сектора на парковочном цилиндре (объяснения цилиндру 96 дать не могу, хотя диск 5Мб с 8 блинами вполне мог бы иметь такую границу рабочей зоны) написали и этого было достаточно. Место для парковки голов для дисков без автопарковки производителями MFM HDD было предусмотрено, так как определено параметром LandZone. Конторы-разрабы биосов эти параметры взяли не с потолка в жестких условиях тогдашней битвы с конкурентами за многомиллионные отчисления производителями материнок. Насчет инженерных цилиндров. В современных винчестерах к ним относятся области для ремапленных дорожек, хранения таблиц ремаппинга, нескольких экземпляров паспорта винчестера, таблиц SMART и области для приземления головок после автопарковки. По слухам, есть области диагностических цилиндров для проверки целостности головок путем проверки записи-чтения неких последовательностей хитрых паттернов в процессе автодиагностики винчестера. Так что я не так уж неправ, называя LandZone mfmников инженерными цилиндрами. О своих предположениях постараюсь упоминать, но пинать не привык, лучше вежливо переспрошу если что-то не понял.
>Место для парковки голов для дисков без автопарковки производителями MFM HDD было предусмотрено
Пожалуйста, в сети полно паспортов и мануалов как для Seagate ST-506, так и для ST-412, подскажите где там хоть слово о зоне для парковки. Вот, например, http://oldpc.su/111/files/ST506_Prel...nual_Apr81.pdf
Сравните с тем же ST-225, где эта зона предусмотрена.
Поэтому не надо писать "Место для парковки голов для дисков без автопарковки производителями MFM HDD было предусмотрено" без добавления "мне кажется" или "некоторыми производителями некоторых HDD". Прошу Вас.
>Так что я не так уж неправ, называя LandZone mfmников инженерными цилиндрами.
По Вашей же логике абсолютно неправы. Нет в очень многих MFM HDD ни автопарковки, ни "области для приземления головок после автопарковки", ни, тем более, инженерных цилиндров.
И, к слову, можете дать хоть один пруф что "область для приземления головок после автопарковки" расположена на инженерных цилиндрах или вообще имеет хоть какое-то отношение к этим самым инженерным цилиндрам?
В приведенном мануале на странице 30 есть пункт 6.4, где говорится о 152 цилиндре и о том, что головы на него должны быть позиционированы пока диски крутятся. Правда, цель этого действа там безопасный "shipping". Честно сказать, крайне устал с Вами вести пустопорожние споры о каких-то малозначащих мелочах в вопросах давным-давно покойного стандарта, поэтому специально пруфов изыскивать не буду. Разрешите откланяться.
park.com(exe) для MS DOS
Первая из них 1 в 1 похожа на ДВКашную из ПО ФОДОС ! ;-)
>поэтому специально пруфов изыскивать не буду.
ч.т.д.
Особенно доставило Ваше "малозначащих мелочах в вопросах давным-давно покойного стандарта" ;-)
Да тут весь форум - полнейшая малозначащая ерунда по сравнению с мировой революцией ;-)
Я конечно понимаю, что это форум о советском ДВК, но разработчики КНЖМД просто использовали уже качественно скопированный контроллер DEC Professional 350, и ограничение пришло оттуда :) Можно для полноты картины поискать, что делали авторы оригинала для парковки дисков...
И кстати, родной драйвер DW (с исходником, кстати) по идее должен работать с нашим клоном, но нет...
Изваял. Критика приветствуется.
Цитата:
.TITLE PARK2016.MAC
.MCALL .PRINT, .EXIT ;используемые вызовы библиотеки
STARTF: CMP 174000, #401 ;сравнить содержимое регистра идентификации 174000 с кодом 401(восьмеричное)
BNE CNTRLRNOTFOUND ;контроллер не обнаружен, выходим
CHECK1: BIT #100000, 174020 ;проверка занятости
BEQ CHECK1 ;занят, ждем
BIS #8, 174020 ;начальная установка с выводом головок на нулевой трек
CHECK2: BIT #100000, 174020
BEQ CHECK2 ;занят, ждем
CHECK3: BIT #1, 174020
BNE CHECK3 ;ждем, пока операция не будет завершена
MOV #LANDZONE, 174012 ;поместить в регистр адреса цилиндра 174012 номер цилиндра для парковки
MOV #7, 174006 ;сектор 7 (любой)
MOV #0, 174014 ;поверхность 0 (любая)
MOVB #40, 174016 ;команда чтения сектора, команды пишутся в младший байт РАЦ
.PRINT #SHUTDOWNMSG
.EXIT
CNTRLRNOTFOUND:
.PRINT #NOTFOUNDMSG
.EXIT
NOTFOUNDMSG: .ASCIZ /MFM CONTROLLER NOT FOUND/
SHUTDOWNMSG: .ASCIZ /TURN THE POWER OFF/
LANDZONE: .WORD 1230 ;664 цилиндр у моего HDD парковочный
.END STARTF
Лучше @#174000 - так будет явное указание данного адреса, а не смещения до него (а в старых компиляторах и вовсе не скомпилится такой вариант).
После 8 нужна точка.
Команда записывает адрес переменной LANDZONE (а не значение) - так и планировалось?
CLR @#174014
Ну и названия меток лучше укладывать в 6 символов чтобы потом не гадать где косяк вылез из-за одинаковых названий :)
Нет, вы правы насчет точки и значения - это описки. Сляпал на скорую руку))), дебага пока не было.
Выходить в ОС надо - вдруг юзер что-то забыл сделать перед выключением компа и внезапно вспомнил об этом. Иначе получается, что машина будет завешена?
- - - Добавлено - - -
Хотя, да - если ОС грузится с жесткого, то парковка будет отменена.
- - - Добавлено - - -
Тогда завесим машину по BR
Тогда надо ждать клавиши и если нажата - выход в систему. В противном случае выход в систему вызовет чтение с диска и эффективно отменит парковку.
- - - Добавлено - - -
.TTYIN и .EXIT после него достаточно
Ну еще JSW проинитить чтобы достаточно было одной клавиши.
Да, с нажатием клавиши хорошая идея - если нажата, то возврат в ОС, или просто выключение машины.
Проверить на наличие foreground job не помешает. Это несложно. Ну а заодно и запретить запуск под VBGEXE (на случай XM), ну и отловить случай когда регистра нет с помощью .TRPSET... Если совсем чисто делать - также можно проверить на предмет TSX/RTEM дабы и не рыпаться в этом случае :)
А вот не знаю, отправит ли классический парк головы моего хдд на 644 трек.
Тут уместнее не парковать если загружен так как парковка просто может отмениться другим заданием. Заодно вопрос с TSX отпадет - там всегда бит FJOB$ установлен.
- - - Добавлено - - -
Примерно так можно проверки всяческие сделать. Ну .TRPSET еще сделать чтобы в случае отсутствия регистра не свалиться, а написать сообщение и выйти :)
Ну и где клавиша будет ожидаться - если принят CR, сделать еще один .TTYIN - в RT-11 он всегда дополняется LFом.Код:$JSX =: 4 ;EXTENDED JOB STATUS WORD
NOVBG$ =: 100 ;DISABLE VBGEXE BIT
$JSW =: 44 ;JOB STATUS WORD
TTSPC$ =: 10000 ;SPECIAL MODE TERMINAL BIT
TCBIT$ =: 100 ;INHIBIT TERMINAL WAIT BIT
$SYPTR =: 54 ;POINTER TO RMON
$CNFG1 =: 300 ;SYSTEM CONFIG WORD
FJOB$ =: 200 ;FOREGROUND LOADED BIT
$SYSGE =: 372 ;SYSGEN FEATURE WORD
RTEM$ =: 10 ;RTEM-11 SYSTEM
.ASECT
.=$JSX
.WORD NOVBG$ ;DISABLE VBGEXE
.=$JSW
.WORD TTSPC$!TCBIT$ ;SET TERMINAL MODE
.PSECT
START:: MOV @#$SYPTR,R0 ;R0 -> RMON
BIT #RTEM$,$SYSGE(R0) ;RTEM-11?
BNE 10$ ;YES, EXIT
TSTB $CNFG1(R0) ;FOREGROUND LOADED?
BPL ... ;IF PL NO, OK
.PRINT #FLOAD ;FOREGROUND LOADED ERROR
10$: .EXIT ;EXIT