Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Документация » Програмный ремонт жёстких дисков HDD |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 ... 42 43 44 45 46 * 47 48 49 50 .. 75 76 77 78 79 80 | Печать |
KALDYH
Advanced Member
Технонекромант Откуда: Кемерово Всего сообщений: 2355 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 июня 2009 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 13 мая 2018 23:06 Сообщение отредактировано: 14 мая 2018 23:20
Вдохновившись статьёй Шаклеина об анализе микропрограмм коннергейтов, я решил попробовать сам - и у меня кое-что получилось! Спустя много бессоных ночей и ещё больше потраченного на другие дела времени, я готов выложить предварительные результаты анализа микропрограммы Conner на примере семейства Jaguar, прошивка 4HT2.61. Вычитывалась и анализировалась голая плата, результат выполнения некоторых команд потом перепроверялся на исправном накопителе. Система команд, по результатам анализа. Цветом выделены команды, не совпадающие с вышеописанными для Seagate Barracuda. Команды приводятся в порядке расположения в таблицах в прошивке. Список команд - полный, но назначение установлено не для всех и не везде точно. Разбирался где-то по аналогии с другими уровнями тестирования у Seagate, где-то по известной таблице команд для CFS540, где-то чистым анализом кода. Онлайн-команды . (точка) - статус активности Pgm 00 Target 200.0.1D Rd Op Err 10 Health 0000.0000 Ready ' (апостроф) - таблица статистики ошибок
> > - изменить положение синхроимпульса чтения-записи ; (точка с запятой) - статус накопителя Age Typ Ftr Hds Gn Thd Grey Itg Ofs Spin Rwctl " - статус трансфера (см. команду ` барракуд) Cyl Hd Sct Cnt Rel Xfr Err Rf Rc Rty.ctl Rw Ef Mf Sf Spc Error ` - не выяснено, некие внутренние переключения % - статус Mux :40000000A60100000001 AT`ALCC5SE ' & - вывод BAR CODE T>BAR CODE # `' ! - отобразить регистры каналов чтения-записи (а может, и не только этих) Adr D0 - 00100800 7F801510 580018B7 000001FF ~ - статус команды интерфейса (интересно, что выводится без переноса строки) Cmd=E0.01.00.00 at=0000.00.01.00.01 Cm=0008.00.00.0001 Fl=00.00.00.0000 [ ] - увеличить/уменьшить слово, адрес которого хранится в переменной F8 (значение не выяснено) { } - увеличить/уменьшить адрес, который хранится в переменной F8 0x04 (^D) - переключатель Action code Display/no display (отключение отображается стиранием строки) 0x09 (^I) - см. 3>i 0x0C (^L) - печать версии прошивки 0x10 (^P) - Toggle power chop (в подтверждение ничего не выводит) 0x11 (^Q) - Foreground resume 0x12 (^R) - реинициализация и рекалибровка винта (не сброс всей микропрограммы) 0x13 (^S) - Foreground pause. При этом печатается содержимое регистров процессора: BRK - Pc=2429 A=00 B=0D C=C5 X=1000 Y=10E0 Sp=13EF 0x14 (^T) - начать тестирование с уровня Age 0x15 (^U) - печать флагов ошибок сервосистемы (в текстовом виде) 0x16 (^V) - Toggle interface command echo display (в подтверждение ничего не выводит) 0x17 (^W) - не выяснено (выводит два байта, только при работе по интерфейсу) 0x18 (^X) - показать содержимое каких-то регистров по определенному адресу (только при работе по интерфейсу, не в командной строке) At 10AE - 08 00 00 00 03 D7 09 11 0x19 (^Y) - не выяснено 0x1A (^Z) - прерывание текущей программы, запуск теста 00. По ^T на интерфейс не выйдет! 0x05 (^E) - состояние интерфейса Interface State 0x06 (^F) - статус сегментов (полагаю, то же, что и буферы) BUFFER SEGMENT TABLE Общие команды (действуют на всех уровнях) 0x03 - забой символа /x - смена уровня. Уровни TMOS - 0 (T), 1, 2, 3, 4, 6. Специальные параметры - A, B, D - производят некие внутренние переключения, но уровень не меняют. L - зациклить следующую комнаду 0x0D - Еnter @x - метка | - конец пакетного файла =x,y - ввести байт y по адресу x в память микроконтроллера +x - считать байт по адресу x из памяти микроконтроллера \ - быстрый вызов пакетного файла * - специальные функции для пакетных файлов: _x,y - ввести байт y по адресу x в буферную памятьУровень T - основной уровень тестирования B - ввести Bar Code S/N. Хранится в EEPROM Dx - вывести логи начиная с x Ex - печать одного лога x, без параметров - текущего. Если x=0 - очистка лога Fx,y - выставляем feature бит номер x (0..F) в y (0,1) H - печать битов Health в текстовом виде. H,,22 - сбросить биты health J - аналогично ENx - установить Age P - ввести PCB S/N. Хранится в EEPROM Yx - установить тип Tx - запустить одиночный тест # - ввести Drive S/N. Хранится в EEPROM Уровень 1 - команды работы с памятью микроконтроллера Ax - установить адрес стека (граница - 4000) Bx - установить breakpoint C - продолжить после break'а Dx - вывод 256 байт памяти E - не выяснено Fx,y - найти слово x с адреса y (по умолчанию - 2000) Gx - запустить код на выполнение с адреса x (>1000) H - тест оборудования (в случае ошибки пишет "12 Volts unsafe") M - переместить ПЗУ в ОЗУ (адреса 1000-1200 и 1E00-2000), по сути - инициализация переменных Px,y - запрограммировать данные y в EEPROM по адресу x (0..3F) R - производит инициализацию неких портов и подаёт импульс в некий порт Sx - не установлено Уровень 2 - работа с подсистемой чтения-записи (микроконтроллер CL-SH359) Ax,y - показать/изменить тестовое пространство (x - битовая карта опций), см. общую команду A у барракуд Показ:Single trk - Hd 0 Bx - отобразить буфер x Cx,y - сравнение буферов. При несовпадении - ошибка Code - 10 D - последовательно выполняет тесты 47, 43, 48, 46, 45? Возможно аналогично 3>D барракуд Ex - см. T>E F - добавление/удаление дефектов. Точный формат параметров не установлен, см. также команду 9>F у барракуд Gx - выводит Log 01 = 01 Skp=0 , (при x=1) - какое-то преобразование номера лога во что-то Hx - выбор головки Ix,y,z - показать/изменить адаптивные параметры (хранятся в EEPROM) x - номер головки y,z=EITW - четыре полубайта параметров, макс. 3377, для внешней и внутренней зоны соотв. Без аргументов - просто вывод >I У живого винта: Outer Zone Inner Zone Jx - аналогично E Kx - устанавливает некую флаговую переменную (один байт) Mx,y,z - быстрый тест границ адаптивов (см. также 7>M барракуд) N - тест адаптивов (см. также 7>N барракуд) Ox,y - см. 3>O Px,y - заполнение паттерном x буфера y (по умолчанию - буфер 2) Qx,y - запись/чтение дорожки, x - начальный сектор, z - число секторов Rx,y - чтение дорожки, x - начальный сектор, z - число секторов Sx,y - позиционирование на цилиндр x, головка y Ux - раскрутка шпинделя. x - опции: 0 или без аргумента - обычное 22 - печать меняющегося Pwr E - останов и печать некоей таблицы (выбега?) F - печать той же таблицы, но шпиндель при этом не пищит 1 - не менять состояние Vx,y - чтение/верификация: x - начальный сектор, y - число секторов Wx,y - запись, параметры те же X - печать ID секторов на дорожке. На голой плате: 2>X (второе число - Pwr) На живом винте: Sct 00 0500.00.00 FF Sct 10 0500.00.10 FF Sct 20 0500.00.20 FF Yr,x,yyzz - отобразить/установить управление повтором: r - биты, x - число повторов, см. документацию по барракудам На пустой плате:Hdr, OTF, ECC, Servo, Window, Splash, Oftk rd, Eqlizr, Dta rty=40, Wrt rty=40 Z - останов шпинделя bx - то же что и 2>B ex - обменять местами младший и старший байт аргумента (регистровой пары d) p - не выяснено, нечто сложное rx - длинное чтение сектора x s - то же что и 2>Z wx - длинная запись сектора x y z - не выяснено, возможно Write bad data field sync byte и ещё что-то в тот же байт (комады различаются одним внутренним параметром) Уровень 3 - команды работы с сервосистемой A - см. 2>A B - расчёт неких констант для сервосистемы: Cyl 500 Cx,y - Acceleration Constant Measurement Test: x - внутренний цилиндр (ID), y - внешний цилиндр (OD) Dx,y,z - тест времени доступа 3>D E - см. T>E F - построение графика Moror acceleration
Gx,y - ввести/отобразить параметры Gain и еще какой-то Tf=AA AB=CB CD=2E Hx - см. 2>H I - тест Gain на цилиндре Cyl 37C J - см. T>J Kx - тест переключения головок Head switch test x - если введено, сбросить offset Mx,y - перемещение актуатора без обратной связи по положению: x - значение DAC, y (=00,01,01,11) - направление Nx - построение графика, поиск смещения позиционирования и ширины трека (похоже на команду 7>7 у барракуд) x - сектор o Ox,y - тест позиционирования от цилиндра x до y. С настройками Retry по умолчанию выполняется однократно. P - предположительно график отклонения позиционирования Qx,y - сертификационная запись/чтение. x - начальный сектор, y - число секторов R - не установлено S - см. 2>S T - тест магнитного замка 3>T U - печать флагов ошибок сервосистемы (в виде сообщений). На исправном винте не печатает ничего. На голой плате: Spin lock err, Init err, Spin error, То же самое что онлайн-команда ^U V - (ничего не выводит, хотя должен) возможно, тест тока потребления шпинделя Xx - показать амплитуду сервовспышек A, B, C, D и ошибку позиционирования для данного сектора (см. 4>X у барракуд) x - номер сектора (0..2E) и за ним сразу же селектор A или B (что значит - не знаю) 3>X2EB Y - тест гистерезиса актуатора
Zx,y - предположительно, Zap servo burst на текущей дорожке (см. 4>Z у барракуд) Параметр x тот же самый, что у 3>X i - график Intg dsply
b - не устанвлено (должен выводить CHS = .5.6..7..8 ABCD = .Ц_.Ч_.._.Щ avg = .о_.-_.-_.+ Fidv = .Ъ Favg = .Ы..-) Уровень 4 I - см. 2>I Mx - некий тест Без параметров: C00A H0 P1 Wc2 Th3 . . . . . . . . G=4096 x - головка N - какой-то долгий тест, возможно Napa Servo Adaptive Test Vx,y - неясно, что-то с чтением/записью Sx,y - см. 2>S Y - см. 2>Y Уровень 6 - работа с пакетными (batch) файлами Bx - запустить пакетный файл x. В прошивке 4HT2.61 доступны 5, 7, 9, 11, 30, 31, 50 Ex - ввести пакетный файл x. Пользователю есть место в EEPROM на 3 файла. Dx - отобразить пакетный файл x K - не выяснено N - не выяснено Таблица тестов Таблица тестов в прошивке выглядит так: $2C, $34, $32, $1A, $19, $29, $38, 1, 2, 3, 4, 5, 6, 7, 8, 9, $F, $10, $11, $12 $13, $14, $15, $16, $17, $18, $1A, $1B, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $2E, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $3A, $3B, $40, $3F, $3F, $A, $B, $C, $D, $E, $2A, $2B, $2C, $2D, 0 Тесты до 1-го и после 3F-го не используются: 0A..0E совпадает с 01..05, 2A..2С - с 06/07/09, 2С - с 1A, 19 - с 00. Соответствующие тестам цепочки подпрограмм найдены, но их назначение точно не установлено. Пост будет редактироваться с целью исправления найденных ошибок. Далее будет выложен проект IDA и описана структура микропрограммы: карта памяти, переменные, объекты, особенности вызова подпрограмм, и т.п., а также некоторая информация о самом диске. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 14 мая 2018 9:46 Сообщение отредактировано: 14 мая 2018 9:47
KALDYH, класс, очень полезное исследование!! KALDYH написал: Это у U-series, у barracuda тоже 2>F F - добавление/удаление дефектов. Точный формат параметров не установлен, см. также команду 9>F у барракуд |
KALDYH
Advanced Member
Технонекромант Откуда: Кемерово Всего сообщений: 2355 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 июня 2009 |
Тем временем сделал небольшое открытие. В Jaguar применялись как интерфейсный контроллер CL-SH359, как у меня: так и CL-SH360 а на CL-SH360 есть даташит с описаниями регистров! http://datasheet.datasheetarch...3X1198.pdf Также по фото глянул, какие существовали версии прошивок. Вижу 4HT2.05A, 4HT2.17, 4HT2.35. |
KALDYH
Advanced Member
Технонекромант Откуда: Кемерово Всего сообщений: 2355 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 июня 2009 |
i8088 написал: У барракуд есть как 2>F, так и 9>F. Скорее всего, это одна и та же команда, но в справочниках на них разные описания, и на 9 уровне оно более полное. Это у U-series, у barracuda тоже 2>F |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
KALDYH написал: Я не припоминаю уровня /9 у Barracuda, сейчас перепроверил на AVALANCE, нет /9 уровня. У барракуд есть как 2>F, так и 9>F. Скорее всего, это одна и та же команда, но в справочниках на них разные описания, и на 9 уровне оно более полное.
Или у каких-то моделей имеется /9? AVALANCE у меня завис при попытке просмотреть последовательность тестов C>D, Вы не знаете, это нормально для него? С диском я ничего не делал, собственно в первый раз подключил его к терминалу. |
KALDYH
Advanced Member
Технонекромант Откуда: Кемерово Всего сообщений: 2355 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 июня 2009 |
i8088 написал: Не, не знаю, никогда аваланчей не пытал. AVALANCE у меня завис при попытке просмотреть последовательность тестов C>D, Вы не знаете, |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Жаль что он у меня один всего (на 30GB, одноголовый), сравнить не с чем. Попался потертый жизнью, но без единого remap-а. У нас вообще Barracuda до 7200.7 очень редки, MFM-ки и то чаще встречаются. |
KALDYH
Advanced Member
Технонекромант Откуда: Кемерово Всего сообщений: 2355 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 июня 2009 |
На этом я, пожалуй, закончу свои исследования коннеров. Осталось только выложить результаты и проект для тех, кто желает покопать его за меня дальше. Вот образ памяти, с которым я работал: https://drive.google.com/file/...sp=sharing Файл проекта IDA: https://drive.google.com/file/...sp=sharing Дамп снимал программой https://drive.google.com/file/...sp=sharing под досом , в принципе можно написать тупой скрипт побайтового чтения для ST_MEM. Аппаратная часть Плата Conner семейства Jaguar состоит из следующих компонентов:
Краткое введение в процессорную архитектуру Motorola 68HC11 Семейство МК было представлено в 1985 году, представляет собой дальнейшее развитие 6800. Архитектура - фон-неймановская, что необычно для МК. Адресное пространство - 64к, порты ввода-вывода мапятся на память. Регистры: - два 8-разрядных аккумулятора A и B, которые могут объединяться в один 16-разрядный регистр В - два 16-разрядных регистра X и Y - 16-разрядные регистр стека SP и счётчик команд PC Набор команд - типичный. Есть целочисленные умножение и деление. Набор периферии - типичный: порты, таймеры, UART (SCI), прерывания. Внутрення память может включать в себя области ROM, RAM, EEPROM, конкретное расположение областей зависит от модели. Особенность - первые 256 байт памяти могут использоваться для быстрого доступа (два байта на команду: 1 байт команда и 1 байт адрес). Карта адресного пространства По итогам анализа была получено следующее распределение адресов:
Методика дизассемблирования Работать с IDA я не умею, поэтому учился на ходу. Действовал так: Запускаем IDA, выбираем Disassemble a new file. Выбираем считанный 64кб дамп. Выбираем тип процессора Motorola MC6811, остальное не трогаем, нажимаем OK. На следующей странице также нажимаем ОК. Далее нужно выбрать модель микроконтроллера. Подходящего по параметрам там нет (я попытался написать свой конфиг, но не преуспел), поэтому просто нажимаем Cancel. Я первоначально выбрал произвольный наобум, как показала дальнейшая деятельность - не угадал. Наконец получаем листинг. IDA проводит первичный автоанализ от вектора сброса и находит в нём некоторые функции (выделены голубым и красным), но большая часть дампа в полоске карты раскрашена серым цветом - это данные и цветом хаки - это нераспознанные области. Пора вручную найти всё остальное. Прежде всего разворачиваем свёрнутые в массивы блоки данных. Ставим курсор на блок и нажимаем U. Неопределённые данные в автокомментариях имеют расшифровку своего значения в ASCII - это нам пригодится. Прячем неиспользуемые блоки. Выделяем их (курсор на начало, Alt+L, курсор на конец) и из меню View - Hide. Можно также временно спрятать крупные блоки данных. Переключаемся на вкладку Hex View и визуально находим в нём тестовые строки. Устанавливаем курсор на начало блока и переключаемся обратно в IDA View. Выделяем строку от начала до конца и нажимаем A - строка преобразуется в текстовую константу с автосгенерированным именем. Проходим таким образом по всем дампу. Замечание: Формат срок - сишные, нуль-терминированные (выделять вместе с нулём). Большинство строк оканчиваются кодом перевода строки $D. Переменные в выводимую строку вставляются управляющими кодами: 02 xx - напечатать байт переменной xx от смещения 1000 06 xx - то же самое, без лидирующих нулей 08 xx - вывести байт как символ Ну а теперь ищем код. Замечание по структуре программы: массивы и строковые константы располагаются сразу за подпрограммой. Большинство подпрограмм оканчиваются командой rts - это байт $39 или rti - $3B Ставим курсор на любой неопределённый блок и нажимаем C - IDA разворачивает этот участок и всё, на что ведут переходы, в код. Разворачиваются целые блоки, так что процесс идёт быстро. Смотрим, похоже получилось или непохоже. Если на что-то осмысленное непохоже - разопределяем обратно клавишей U. Для быстрого перехода далее используйте Ctrl-U Пройдясь так по всему дампу, находим большую часть кода и относящихся к нему данных (на них появятся метки). Теперь займёмся кодом. Смотрим на слова, подсвеченные красным (о байтах позже). Как известно, регистры X и Y - индексные, поэтому то, что грузится в них командами ldx и ldy - скорее всего указатели. Если навести мышь на число, показывается, куда он ведёт. Ставим курсор на слово и нажимаем O - значение преобразуется в указатель. Делаем так для всего, что похоже на указатели в ПЗУ (числа более 2000) и в ОЗУ/EEPROM (от 1000 до 2000), более мелкие пока не трогаем. Далее займёмся байтами. Замечание: для работы с переменными в ОЗУ в подавляющем большинстве случаев используется индексная адресация через регистр X, который большую часть времени хранит константу $1000. Исходя из этого, увидев команду с аргументом вида $число, x можно с уверенностью утверждать, что на самом деле она ссылается на адрес ($1000+$число). Как показать это наглядно? Ставим курсор на байт, нажимаем Ctrl+R. Выставляем Type - OFF16, Base Address - 0x1000. Адресу 1000 для удобства дадим какую-нибудь метку, например RAM. Напоследок заглянем в область переменных. Ставим курсор на все по очереди и нажимаем X. Если на неё ссылаются в основном команды, работающие с регистрами d, x, y - это слово, если a и b - это байт. Выбираем нужный тип клавишей D. Попробуем определить назначение некоторых функций. Видим, например, что на текстовые строки ссылается команда ldd $DEAD, и сразу за ней идёт jsr sub_BEEF (адреса, разумеется, для примера). Очевидно, что это процедура печати в терминал! Перейдём к ней двойным кликом или Enter и поищем ещё её вызовы комбинацией Ctrl+X. Видите, сколько их много? Теперь можно переименовать её кнопкой N во что-нибудь более понятное и привычное. Про что ещё рассказать? Явные массивы для компактности листинга лучше так и пометить (кнопка в панели инструментов). Разбор кода удобнее вести, давая комментарии (кнопки ":" и ";"). Структура исследовааной микропрограммы Jaguar - 4HT2.61 Информация о диске, извлечённая из прошивки Дорожек - 0x717 Головок - 0x04 Секторов - 0x2E Микропрограмма подходит к следующим моделям: Тип A0 - 4 головы, 716h дорожек "Conner Peripherals 170MB - CP30171E " feature бит 1 = 1 "Conner Peripherals 170MB - CP30174E " feature бит 1 = 0 Тип A1 - 4 головы, 514h дорожек "Conner Peripherals 120MB - CP30121E " feature бит 1 = 1 "Conner Peripherals 120MB - CP30124E " feature бит 1 = 0 Тип A2 - 2 головы, 716h дорожек "Conner Peripherals 85MB - CP30081E " feature бит 1 = 1 "Conner Peripherals 85MB - CP30084E " feature бит 1 = 0, feature бит 40 = 0 "Conner Peripherals 80MB - CP30084E " feature бит 1 = 0, feature бит 40 = 1 Зонного распределения, предположительно, нет (по графику чтения не проверял) Системные дорожки - 4..7, начиная с 8 идут пользовательские Кодовых оверлеев нет Калибровки и адаптивы хранятся в EEPROM Буферы образуют отдельное адресное пространство, микроконтроллер имеет доступ к нему только через порты цирруса. Переменные: (для удобства - только последний байт) 00 - Pgm 01 - error code 02 - Pwr error 03 - Type 04,05 - Health 06,07 - Features 08,09 - состояние шпинделя 14,15 - текущий сектор 16,17 - временный регистр X 18,19 - Cyl 1A - Head 1B - Sect 1C,1D - Sec Count 1E,1F - Rel 20,21 - Xfr 22,23 - Err 26 - Ef 27 - Rw 2A - Spin lock 2C - State flags 2E,2F - Max cyl 30,31 - Min cyl 32 - Max head 35,36 - цилиндр, на который нужно спозиционироваться 37 - ...головка 38 - ...сектор 3D,3E - Spin 4D - Servo Gain 4E - AB 50 - Itg 58 - Offtrack error 59 - GC err 5C,5D - Grey 61 - Servo Threshold 68 - CD 8B - Rf 89,8E,8F,90 - Retry control (rd.hdr.wrt) 92 - Rc 93 - Mf 94 - Error log num 95 - выводимый level 96,97 - внутрикомандная временная переменная 98,99 - второй операнд команды 9A,9B - третий операнд команды 9С - флаг проверки вызова команды: 1 - foreground прерван 2 - есть первый аргумент 4 - есть второй аргумент A0,A1 - A2 - test space A3 - error.3 AE - display flags E0-F0 - какой-то временный массив на 16 байт Данные в EEPROM Каждая байтовая переменная хранится в трёх байтах. Первый байт как есть, второй - инвертированный байт, третий - XOR AA (10101010). Полагаю, сделано для надёжности и помехозащищённости. 1E00 - Age 1E03 - Type 1E06 и 1E09 - Feature (старший и младший байты соотв.) 1E10 и 1E13 - Health Далее идут константы: 1E20-1E3F - массив адаптивов (16 слов) 1E40-1E6A - серийник 1E82-1E8E - Barcode S/N 1EF0-1EFA - PCB S/N С адреса 1F00 и до конца располагается место для пользовательских пакетных файлов. Таблицы Найденные массивы табличных данных (как их оформлять в структуры - я не разобрался): Команды: 889D - таблица переходов по уровням. Записи по 4 байта: первый - вводимый номер уровня, второй - выводимый в строке приветствия символ, 3-4 - указатель на таблицу команд данного уровня минус 3 (цикл поиск в таблице пред-инкрементный, поэтому минус) 883D - команды для всех уровней 8995 - команды уровня 1 8C9E - команды уровня 2 92C2 - команды уровня 3 A423 - команды уровня 4 ABBE - команды уровня 6 AEFA - онлайн-команды B406 - команды уровня T Записи по 3 байта: байт символа команды, за ним слово адреса вызываемой подпрограммы. Селфскан 7B3F - последовательность тестов селфскана (массив 40h байт) 7B7F - массив 41h указателей на последовательности подпрограмм для каждого номера теста (нумерация линейная, от 0 до 40) Прочие A237 - массив указателей на текстовые строки расшифровки битов ошибок. Сами строки - сразу за ним. B537 - таблица расшифровки битов health. Элементы по 4 байта: битовая маска, затем 0, потом ссылка на строку расшифровки. 6D33 - таблица типов накопителя (указатель на неё ведёт на 4 байта раньше). Элементы по 4 байта: байт типа, байт числа головок, слово числа дорожек. DAB3 - выводимые в паспорте имена моделей Подпрограммы Передача параметров в функции - через регистры, если часть параметров не вмещается - через переменные. Процедуры обработки команд На входе: регистровая пара d - первый аргумент, переменные 98 и 9A - второй и третий. Наличие аргументов проверяется анализом битовой переменной 9С. На выходе: d - указатель на выводимое сообщение об ошибке либо a - код ошибки. Подпрограммы ввода и печати Находится по адресу 2506, еще одна - по адресу 25F0 На входе: d - указатель на начало выводимой строки. Формат строк - см. выше. Связанные подпрограммы: 2434 - приём одиночного символа, результат - в регистре a 2459 - печать одиночного символа из регистра a 2549 - использует входной регистр x 25F9 - помещает сообщение по адресу d в очередь на вывод Контрольная сумма ПЗУ защищено контрольной суммой. Считается по адресам 1000-1200, 1E00-2000 и 2000-FFFF вместе. В процессе дополнения... | ||||||||||||||
strelec
Newbie
Откуда: Кемерово Всего сообщений: 105 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 апр. 2018 |
Приветствую. Винт seagate 7200.10 , NHPLUS2HD. Запустил селф с N2.На 13 тесте долго не реагировал на"." Подумал, что завис.Передернул питание, селф не стартовал после подачи питания. Выходит только на уровень F>Pgm=00 Trk=0001690A(0001690A[0180F8]).0(0).01E(01E) Zn=FF Err=00 ErCt=0000 Hlth=0000 CHlth=0000 Ntrdy LBA=00000000. Как правильно запустить селф опять? |
KALDYH
Advanced Member
Технонекромант Откуда: Кемерово Всего сообщений: 2355 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 июня 2009 |
strelec, посылаем ему App по кабелю, считываем системный сектор, проверяем - Age должен показывать 13, cert code и cert table должны быть на месте. |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 ... 42 43 44 45 46 * 47 48 49 50 .. 75 76 77 78 79 80 | Печать |
Полигон-2 » Документация » Програмный ремонт жёстких дисков HDD |
0 посетителей просмотрели эту тему за последние 15 минут |
В том числе: 0 гостей, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |