- Вопрос по прошивкам КНГМД
-
? nzeemin@ - 23.05.2010 20:51
Какая версия прошивки ставилась в КНГМД для БК-0010.01? можно ли было использовать любую прошивку 253, 326, 327? или нужна была особая версия прошивки, с измененными задержками -- для того чтобы учесть разницу в частоте процессоров?
-
? anonymous - 23.05.2010 22:04
Ставилась любая, из-за более низкой частоты запись на десятке часто выполнялась за несколько оборотов, т.к. заголовок сектора иногда проскакивал. Сама же запись тактируется генератором, установленным в КНГМД, процессор пишет/читает регистр данных которого, опрашивая бит готовности, потому на самой записи задержки не сказываются. Хуже обстояли дела в 11м, где работая на одинаковых частотах, процессор и контроллер иногда начинали дурить в циклах самой шины, лечилось это перерезанием дорожки RPLY и пропусканием сигнала через один из свободных элементов 155ЛП9, имеющийся на плате КНГМД, для задержки сигнала ответа. Некоторые не знали о таком способе лечения зависаний и "запитывали" тактовые цепи контроллера выходом 4мГц с системной платы 11м. При "турбировании" машин качество работы с диском резко возрастало, ошибки появлялись гораздо реже за счет того, что процессор более своевременно брал/клал данные в ВП1-128, задержки же в пзу оставались все равно прежними.
P.S. 253ю в 10ку не ставили из-за вызова в ее коде EMT с номером, не обслуживаемым монитором 10ки, на этапе начальной загрузки, потому для запуска 0010 с 253й прошивкой все равно приходилось либо загружать с магнитофона загрузчик, либо набирать его каким-либо образом ( для имеющих бейсиковскую машину единственным выходом был магнитофон, т.к. оператор poke не работал без третьего пзу, которое замещалось пзу КНГМД). Обычно практиковалась установка 253й прошивки в 10ку вместе со вторым пзу, содержащим образ ОС, тогда код загрузчика из 253й, естественно, выполнять уже было не нужно.
-
? Александр Тишин (Sandro)@ - 24.05.2010 00:26
С 253 не совсем так. Можно (мне удалось) разработать заглушку для перехода в загрузчик 253, которая полностью состояла из кодов набираемых с клавиатуры символов и влезает в 16 байт. Соответственно, выходим в монитор, M[ВВОД], набираем заглушку,[ВВОД][СТОП], S320.
Ну а когда мне это надоело, я просто припаял два диода и батарейки к плате ОЗУ :)
PS: Пока отлаживал эмулятор -- убедился: в 326 там местами остаётся крайне мало времени на 3 МГЦ. Особенно узко в переходе от поиска маркера к чтению заголовка сектора. Ещё ~2 команды, и всё, первое слово будет потеряно.
-
? anonymous - 24.05.2010 01:30
Это где конкретно? В RTшном драйвере покажите место http://qbus.narod.ru/by.mac
-
? Александр Тишин (Sandro)@ - 24.05.2010 02:54
Не понял что показать. Где почти не успевает? Сейчас посмотрю в логе ...
Мда, спать надо больше. Именно в этом месте у меня эмуляторе был косяк, почему и запомнилось.
А почти не успевает в другом -- проверка CRC после чтения сектора. BIT #40000,@R4 иногда исполнятся практически впритык перед копированием сдвигового регистра в буферный (если у меня верные времянки). Подпрограмма TSTCRC в этом исходнике. Сейчас прогнал в эмуляторе около 15 секторов (загрузка ANDOS) -- хотя обычно запас 20-30 мкс, что при времени чтения слова в 64 мкс вполне нормально, иногда встречаются менее удачные времена. Худший случай (из 15 секторов!) составил 4 мкс. Это, если верить моим времянкам, время исполнения инструкции BRANCH. Несколько раз встретились 8-12 мкс. Такие дела :(
И, кстати, имеющийся у меня бинарник с вашим исходником не совпадает -- как минимум, MTPS 52(R3) делается уже после возврата из подпрограммы проверки CRC, а не в конце чтения сектора. Есть и другие отличия.
PS: Напоминаю, это в эмуляторе и при 3МГЦ на процессоре.
PPS: Это всё в предположении, что ВП1-128 снимает бит CRC на следующем слове. А то, конечно времени мноого ... Но судя по доступной мне документации, она его снимает.
PPPS: Oops, нашёл баг в эмуляции записи на диск. Но это уже не сегодня чинить буду.
-
? Александр Тишин (Sandro)@ - 24.05.2010 03:16
Ещё помучил эмуляцию. Успевает всегда, но худший случай таки 4 мкс. Правда, модель времени у меня не потактово точная, но в любом случае, максимальная ошибка -- время одного доступа в память с вычислением эффективного адреса. Около 6 мкс. То есть, таки 2-3 команды, и всё. Не успели.
-
? anonymous - 24.05.2010 04:41
MTPS 52(R3) стоят на своих местах, как они расположены в пзу РЕ2-326, в конце чтения сектора она стоит по адресу 0161652, посмотрите в своем образе, я ничего не менял, кроме нескольких констант, этот исходник - результат дизассемблирования собственно пзу.
-
? Александр Тишин (Sandro)@ - 24.05.2010 04:52
Как интересно ... а у меня -- по адресу 161546
Это что тогда за прошивка получается?
Собственно, вот трасса исполнения этого места (окончание чтения сектора и проверка CRC):
FDD: reading data word 03f00 at track position 305
R0 <= 37400
161626: 000300 SWAB R0
¤
R0 <= 77
161630: 010022 MOV R0,(R2)+
¤
161632: 077106 SOB R1,161620
¤
161620: 105714 TSTB @R4
¤
¤
FDD: reading status word 00000005 at track position 305
161622: 100376 BPL 161620
¤
(taken)
161620: 105714 TSTB @R4
¤
¤
FDD: reading status word 00000005 at track position 305
161622: 100376 BPL 161620
¤
(taken)
161620: 105714 TSTB @R4
¤
¤
FDD: reading status word 00000205 at track position 306
161622: 100376 BPL 161620
¤
N (NOT taken)
161624: 011500 MOV @R5,R0
¤
¤
FDD: reading data word 00000 at track position 306
R0 <= 0
161626: 000300 SWAB R0
¤
R0 <= 0
161630: 010022 MOV R0,(R2)+
¤
161632: 077106 SOB R1,161620
¤
161634: 016301 MOV 000042(R3),R1
161636: 000042
¤
R1 <= 0
161640: 001406 BEQ 161656
¤
Z (taken)
161656: 000207 RTS PC
¤
161332: 004767 JSR PC,161566
161334: 000230
¤
161566: 105714 TSTB @R4
¤
¤
FDD: reading status word 00040205 at track position 307
161570: 100376 BPL 161566
¤
N (NOT taken)
161572: 012702 MOV #000017,R2
161574: 000017
¤
R2 <= 17
161576: 032714 BIT #040000,@R4
161600: 040000
¤
¤
FDD: reading status word 00040205 at track position 307
161602: 001001 BNE 161606
¤
(taken)
161606: 000207 RTS PC
¤
161336: 001011 BNE 161362
¤
(taken)
161362: 166363 SUB 000064(R3),000030(R3)
161364: 000064
161366: 000030
¤
161370: 003461 BLE 161534
¤
Z (taken)
161534: 105063 CLRB 000056(R3)
161536: 000056
¤
161540: 016337 MOV 000046(R3),@#000004
161542: 000046
161544: 000004
¤
161546: 106463 MTPS 000052(R3)
161550: 000052
¤
161552: 000257 CLNZVC
¤
161554: 106063 RORB 000056(R3)
161556: 000056
¤
161560: 016306 MOV 000050(R3),SP
161562: 000050
¤
SP <= 772
161564: 000207 RTS PC
-
? Alex_K@ - 24.05.2010 08:52
Александр Тишин, по моим опытам с 1801ВП1-128 на УКНЦ бит CRC устанавливается, если чтение сектора прошло успешно, и уже не снимается до следующей команды поиска маркера или записи маркера, ну так же он снимается по команде RESET. А устанавливается он в том случае, если непрочитанное за 64 мкс слово совпадает с CRC прочитанных до этого слов. Во время записи соответственно надо в течении 64 мкс не записывать в регистр данных, тогда пойдет запись CRC и устанавливается бит CRC.
PS. А какая у Вас есть документация? Не могли бы выложить куда нибудь?
-
? anonymous - 24.05.2010 16:08
Александр, вы смотрите в два разных места, это второе восстановление ССП, а адрес в конце чтения сектора я посмотрел в вашем же образе :)
-
? Александр Тишин (Sandro)@ - 28.05.2010 00:09
Alex_K, любопытно. Тогда время там действительно есть. Но: формулировка "непрочитанное за 64 мкс слово совпадает с CRC прочитанных до этого слов" точно неверна. Прошивка 326 ждёт чтения слова CRC и потом СРАЗУ ЖЕ проверяет 14 бит.
Документация такая же, как у всех. Вырезка из ТО на 128 прошивку. Лежит много где, например тут: http://www.felixl.com/UKNC_FDD_1801vp1-128
-
? Alex_K@ - 28.05.2010 09:30
Александр Тишин, уточню формулировку: "непрочитанное из регистра данных слово совпадает с CRC прочитанных с регистра данных до этого слов".
Да, подпрограмма проверки CRC, как в 326-й прошивке, так и в системном ПЗУ УКНЦ, ждет чтения слова CRC в регистр данных, но с регистра данных она его не читает и ждет чтения очередного слова с диска. Так вот, когда данные с регистра данных не прочитаны, а контроллер уже прочитал другую информацию, которую надо поместить в регистр данных, то вот тогда и прекращается подсчет CRC и она сравнивается с непрочитанным регистром данных. А так как CRC считается побитно, то по всей видимости должен быть временный регистр для хранения подсчитанной до этого CRC.
- << Форум