Перекачал и поставил Cyclone III, Cyclone IV device support (includes all variations).
Вид для печати
В "технологическом" режиме КМД ДВК выполняет следующее тестирование работы ВП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. В третьем нулевом бите на выходе сдвигового регистра ?
Должна в третьем нулевом бите. Схема записи не распознает начало байта, биты со сдвигового регистра или регистра 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
Сегодня Voland сообщил, почему 1801ВМ1 иногда зависает при работе с 1801ВП1-128.
Выяснилось, что причиной зависания является изменение содержимого регистра статуса или данных в тот момент, когда этот регистр читается процессором.
А я наоборот - регулярно читал у пользователей БК такие сообщения:
Если сигнал индекса у ВП1-128 не буферизуется - содержимое регистра статуса должно регулярно изменяться в момент его чтения программой форматирования.Цитата:
? foot - 22.12.2013 22:37
[? gid @ - 18 декабря 11:59]
[Когда зависания меня в конец достали, особенно при записи каталога, я просто выпаял кварц с контроллера, а частоту на ВП1-128 стал брать с МПИ с ноги А20. В результате зависать стало в разы меньше, но всё равно не перестало.]
У меня все имеющиеся контроллеры были подобным образом переделаны.
Зависаний после переделки стало меньше на порядки.
Если при этом КМД не виснет, то БК-0011 скорее виснет при работе с ВП1-128 по какой-то другой причине, нежели изменение битов на шине данных при установленном RPLY.
Да, этот сигнал поступает прямо с дисковода, через логические элементы. Также это относится и к сигналам TR0, WRP, RDY. Да и схема работы с МПИ никак не завязана на работу других схем контроллера.
У 1801ВМ1 была неприятная особенность - надо было привязывать входящие сигналы к тактовой частоте, это относится в частности к RPLY. Но в БК это вроде реализовано. У 1801ВП1-128 RPLY исчезает только тогда, когда снимается сигнал DIN или DOUT, или же SYNC.
Небольшое уточнение - является причиной зависания ПЛИС-реализации ВП1-128 в рамках контроллера СМК512,
а на оригинальном СМК64, построенном на заводской ВП1-128 - именно такие зависания отсутствуют.
Закономерным будет вопрос - откуда зависания взялись. Логика контроллера не менялась, логика формирования самих данных в регистрах осталась абсолютно прежней, отчасти это подтверждается тем, что на БК0010-01 данная проблема зависаний ИЗНАЧАЛЬНО ОТСУТСТВОВАЛА. Другое дело, что никто точно не знает, почему 1801ВМ1 так может реагировать на происходящее на шине, ибо это нормально, когда содержимое какого-нибудь периферийного регистра может меняться в процессе считывания - это же асинхронные события. Вполне возможно, что к примеру у оригинального контроллера задержки и фронты длинее, поэтому такие модификации при чтении не сбивают процессор. Для защиты теперь поставили регистр-защелку, который фиксирует состояние шины во время чтения из регистров FDD.
Итак, для любознательных прикладываю исходники прошивки cpld для SMK-512. Скорее всего окончательная версия.
Отлично, дойдут руки - покурим. Наверное на базе этого сделаю еще вариант штатного контроллера FDD от БК.
Да вроде есть еще немножко :)Цитата:
128-е закончились совсем
http://s61.radikal.ru/i174/1703/0a/3259416e0eact.jpg
Только конструкторы огорчают - они корпус 429-42 ухитрились тремя разными способами на платы посадить. Поэтому совсем универсально не получится, или надо делать три варианта замен.
приделать 42 гибких вывода и пусть кто как хочет так и формует Ж)
По-моему получится две платы - одна с FPGA, вторая - просто переходник.
Я готов даже к вертикальному монтажу на PLD, который потом надо вставлять в плату-переходник с пинами-PLS распаянными в нужной конфигурации.
Замена будет выглядеть как SIP/SIMM. Можно ещё светодиоды для индикации активности туда поместить :)
Видимо, господ, причастных к разработке ИС здесь совсем мало - порядка 2 чел.
Господин svinka предложил абсолютно правильное решение, т.к. есть еще и поверхносный монтаж без шахматных выводов, применяющийся в изделиях с высокой плотностью посадки компонентов.
Для такого варианта может понадобится несколько меньшая МПП с глухими переходными отверстиями. Например, снизу - плюшка, сверху пользователь напаивает выводы от резисторов и формует согласно имеющейся посадке.
*
Кстати, какая планируется цена новодела ?
*
КР1801ВП1-128 до сих пор имеются в розничной продаже ( 250 руб ) по почте у энтузиастов БК :
http://market.zx-pk.ru/forum/viewtopic.php?f=4&t=815
- - - Добавлено - - -
Конструктив под замену 1801ВП1 был бы интересен в первую очередь для 037 прошивки, с целью хотя бы в пару раз сократить тайминги доступа к ДОЗУ БК.
Можно предусмотреть и отдельный вход для 12 мгц, для технологических целей.
Я не особо в курсах содержания ячеек в данной плюшке - может и не хватить...
Оставшиеся комплекты из трех пустых плат (две на фото плюс еще замена 014 с USB-клавиатурой) распродам по себестоимости - $5/комплект.
А это универсальная плата - может заменить 037/065/128 и много чего еще, там есть и свой отдельный генератор (я ставлю 48МГц), и можно выдать 12МГц на основную плату чтобы синхронизировать и видео.
В пару-не в пару, а раза в полтора реально, буду пробовать. Но сначала сделаю 014-ую, потому что древние клавиатуры меня задолбали, и обрывами и ЙЦУКЕНГ-ом, ничего на БК делать не могу.
На плату можно ставить 3064/3128 в TQFP-100, в зависимости от сложности прошивки. Оригинальная 037 может и в 3064 влезть.
Проект заглох?