В "технологическом" режиме КМД ДВК выполняет следующее тестирование работы ВП1-128:
Судя по этому тесту - после записи 0xFFFF в регистр статуста ВП1-128 - там должно читаться 0x8007 ( 0100007 ).Код:; Тестирование регистров контроллера накопителя MOV #177130,R2 ; R2 = адрес РСН MOV @R2,R1 ; R1 = значение РСН CMPB @#177716,#3 ; Установлен технологический режим ? BNE 2416$ ; Нет RESET ; СБРОС TST @R2 ; Значение РСН равно нулю BEQ 2350$ ; Да 2342$: MOV #100010,R0 ; R0 = ошибка - ошибка РСН накопителя BR 2372$ 2350$: MOV #177777,@R2 ; Занести в РСН 177777 CMP #100007,@R2 ; Считывается 100007 из РСН? BNE 2342$ ; Нет - ошибка MOV R1,(R2)+ ; Занести старое значение РСН R2=адрес РДН TST @R2 ; Перевести контроллер в режим чтения DEC @R2 ; Перевести контроллер в режим записи BR 2424$ 2372$: CMPB @#177716,#3 ; Установлен технологический режим ? BNE 2412$ ; Нет INC R5 ; Увеличить счетчик ошибок CMP #37,R5 ; Количество ошибок превысило 30? BHIS 2424$ ; Нет 2412$: JMP 202$ 2416$: TST (R2)+ ; R2 = адрес РДН TST @R2 ; Перевести контроллер в режим чтения BR 2442$ 2424$: COM @#177130 BIC #177774,@#177130 JMP 372$ ; На начало тестов
Это так и есть ?
Судя по содержимому прошивки КМД - 1801ВП1-128 может также полноценно записывать маркеры 0xC2:
Код:MOV #0,@R5 ; Запись синхрозоны SOB R0,11664$ ; Цикл записи синхрозоны BIS #1000,2(R3) ; Установить в копии РСН бит записи маркера 11704$: TSTB @R4 ; Контроллер готов к приему? BPL 11704$ ; Нет MOV #141302,@R5 ; Записать маркер 0xC2C2 MOV 2(R3),@R4 ; Включить режим записи маркера BIC #1000,2(R3) ; Сбросить в копии РСН бит записи маркера 11726$: TSTB @R4 ; Контроллер готов к приему? BPL 11726$ ; Нет MOV 16(R3),@R5 ; Записать маркер 0xFСС2 11736$: TSTB @R4 ; Контроллер готов к приему? BPL 11736$ ; Нет MOV #47116,@R5 ; Записать первое слово промежутка GAP1 MOV 2(R3),@R4 ; Сбросить режим записи маркера MOV #31,R0 ; R0 = размер GAP1 в формате IBM (50 байт)
А как выглядит обобщённый алгоритм пропуска синхроимпульса в байте..
Сколько нулей подряд должно быть в двоичном представлении байта и/или с какого бита в байте должны начинаться эти нули, чтобы у третьего из них ( или не у третьего ? ) был пропущен синхроимпульс ?
---------- Post added at 19:10 ---------- Previous post was at 17:17 ----------
И где в итоге ВП1-128 пропускает синхроимпульс при установленном бите WM:
1. В конкретном месте байта, если там 0 ?
2. В третьем нулевом бите на выходе сдвигового регистра ?
Последний раз редактировалось Patron; 02.01.2014 в 19:40.
Должна в третьем нулевом бите. Схема записи не распознает начало байта, биты со сдвигового регистра или регистра CRC двигаются сплошным потоком. Де-факто в схеме запоминаются четыре бита, а пятый - это выход сдвигового регистра или CRC. Вот на основе этих данных и бита записи маркера WM и строится выходной поток.
Посмотрел внимательно схему формирования выходных сигналов DO1, DO2, DO3. Для анализа разложил отдельно по логическим элементам формирование каждого из сигналов. В качестве данных использовал диаграмму, которую выкладывал Vslav в этом сообщении. Также использовал файл для описания диаграммы wave.do. В диаграмме для анализа использовались сигналы DO3, DO2, DO1 (в самом верху), WDATA (бит для записи, соответствует выходу D32 на схеме, а также сигналу WBIT0), WCLK и nWCLK (они перепутаны со схемой, на схеме соответственно nWCLK и WCLK). Далее буду руководствоваться названиями сигналов на схеме.
Сама схема записи состоит из:
-фактически мультиплексора D32, который в зависимости от сигнала LATCH_TR, выбирает или выход с регистра CRC (LATCH_TR=1, пропущенное требование, идет запись CRC), или выход со сдвигового регистра (LATCH_TR=0, запись данных). На выходе получается сигнал WBIT0 (на диаграмме WDATA);
-сдвигового регистра на триггерах D37 (WBIT1), D36 (WBIT2), C37 (WBIT3), C38 (WBIT4), B37 (WBIT5), B36 (WBIT6), A37 (WBIT7), A36 (WBIT8). Хотя разрядов и восемь, но де-факто запоминаются четыре или пять, так как тактируются триггера разными сигналами, нечетные - nWCLK, четные - WCLK. Порядок продвижения битов будет описан чуть ниже;
-собственно целая куча логики для формирования выходных сигналов на DO1, DO2, DO3, в зависимости от значения сигналов WBIT0-WBIT8 и значения бита записи маркера CSR_WM.
Сама схема тактируется двумя сигналами WCLK и nWCLK. Сигналы эти поступают только тогда, когда контроллер находится в режиме записи и дискета не защищена от записи. Также, если нет сигналов WCLK и nWCLK, регистр из триггеров находится все время в режиме сброса (сигнал nWRE). Длительность двоичного бита данных составляет 4 мкс. Сам этот интервал для записи MFM-сигнала делится на два интервала по 2 мкс. В середине этих MFM-интервалов проскакивают импульсы - сначала nWCLK, затем WCLK. Как известно в MFM бит "1" кодируется как "01", бит "0" после "1" как "00" и бит "0" после нуля - "10". Из этого следует, что единичный бит данных надо записывать на импульсе WCLK, а нулевой после нуля - на nWCLK.
Рассмотрим схему продвижения битов по сдвиговому регистру. Они обозначены по порядку, как 1, 2, 3 и т.д.
Для записи единичного бита используется сигнал WBIT3, для записи нулевого - WBIT4(предыдущий бит данных) и WBIT2(текущий бит данных).876543210
---------
000000011 nWCLK
000000111 WCLK
000001122 nWCLK
000011222 WCLK
000112233 nWCLK
001122333 WCLK
011223344 nWCLK
112233444 WCLK
122334455 nWCLK
223344555 WCLK
233445566 nWCLK
Вот теперь о распределении сигналов по выходам DO1, DO2, DO3. Как описывал Vslav, что это скорее всего разнесенные по времени сигналы. Но анализ схемы этого не подтвердил. Схема распределяет сигнал на соответствующий вывод в зависимости от того, какие были предыдущие биты данных и какие будут последующие. А уже далее эту информацию использует схема внешней прекоррекции. Если прекоррекция не нужна, то сигналы с трех выводов нужно просто сложить. При этом сигнал на выходе будет только на одном выводе.
А теперь о распределении сигналов:
- вывод DO1: "1" - если предыдущий(WBIT5) и следующий(WBIT1) биты данных равны. "0" - если второй слева(WBIT6) и следующий(WBIT0) биты данных равны.
- вывод DO2: "1" - предыдущий(WBIT5)=0 и следующий(WBIT1)=1. "0" - второй слева(WBIT6)=1 и следующий(WBIT0)=0.
- вывод DO3: "1" - предыдущий(WBIT5)=1 и следующий(WBIT1)=0. "0" - второй слева(WBIT6)=0 и следующий(WBIT0)=1.
При установленном бите записи маркера CSR_WM все нулевые биты направляются на вывод DO1.
Ну а теперь самое интересное - как же делаются пропуски синхроимпульсов при записи маркера. По идее бит "0" должен записываться как "00", если предыдущие биты данных равны "100", а следующий - "0". Но разработчики 1801ВП1-128 поступили проще - они анализируют только третий слева бит данных на равенство "1". И то, что хорошо получается при записи маркера 0xA1, может наделать лишних пропусков при записи других данных.
Фрагмент из диаграммы от Vslav:
Сверху указаны шестнадцатеричные данные с границами байтов, ниже двоичный поток. Еще ниже показаны два MFM-потока - с установленным битом маркера CSR_WM и сброшенным битом маркера. Между потоками с помощью "--" указано, что пропуска не должно быть, а он есть, "**" - пропуск нужен и он есть.Код:! 30 ! 31 ! 32 ! 33 ! 62 ! A7 ! 00 ! 00 ! A1 ! A1 ! A1 ! FE ! 1 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 0 1 1 0 1 1 0 0 0 1 0 1 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0100000001010000001010100101000000010010010100000100100001010000010100010100000001000100010010010101000000101010101010101010101010100100010010001001010001001000100101000100100010010101010101010100 ---- --** ---- -- -- -- ---- --** ** ** ** 0100101001010010101010100101001010010010010100100100101001010010010100010100101001000100010010010101001010101010101010101010101010100100010010101001010001001010100101000100101010010101010101010100
Также диаграмма маркера C2:
Код:4E ! 00 ! 00 ! C2 ! C2 ! C2 ! FC ! 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 1 1 1 0 0 0001001001010100000010101010101010101010101010100101000000100100010100000010010001010000001001000101010101010000 --** --** --** --** -- 0001001001010100101010101010101010101010101010100101001010100100010100101010010001010010101001000101010101010010
Последний раз редактировалось Alex_K; 04.01.2014 в 17:12.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)