Вообще конечно, жизнь странная штука, я немного понимаю как физически работает УКНЦ, но понятия не имею, как из режима отладки например записать в порт 177130, а мне надо.. Очень!
Вообще конечно, жизнь странная штука, я немного понимаю как физически работает УКНЦ, но понятия не имею, как из режима отладки например записать в порт 177130, а мне надо.. Очень!
Последний раз редактировалось Arseny; 29.07.2020 в 18:19. Причина: тема разбита
hobot (29.03.2020)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
из отладки ПП получиться,
идём так > клавиша УСТ в меню установок жмём УПР+@ , затем 177130 и клавишу "стрелка вправо", там должно быть что-то, но если не
открывается ячейка тогда беда !!!! Пишем значение и вверх или вниз или "ввод" запишет его туда, в случае стрелок перещаемся по чётным ячейкам вверх вниз
ZPilot (30.03.2020)
Уважаемые коллеги, друзья. Хочу опять попросить у вас помощи.
Получилось мне сделать вот такое: https://ibb.co/4K7sjWK
Но дальше полный ступор, вижу, что при выборе дисковода УКНЦ отправляет в порт 177130 команду 2023, те включить мотор и выбор накопителя, почему-то отправляет ее 2 раза и обращается к 177132.
я на команду отвечаю первым словом с 0 сектора 0x4E4E, а статус ставлю о140201. Все это крутится по кругу (нулевой сектор) до бесконечности, не перемещая головки или не выбирая сторону.
Если я правильно понял, то вы вручную (на микроконтроллере) эмулируете дисковод? Но тогда нужно эмулировать и структуру дорожки, и маркеры.
https://github.com/nzeemin/ukncbtl/b...ase/Floppy.cpp -- см. тут EncodeTrackData().
http://www.emuverse.ru/wiki/%D0%A3%D...4_%D0%A3%D0%9A
https://github.com/nzeemin/ukncbtl-doc/wiki/Floppy-ru
Последний раз редактировалось nzeemin; 05.04.2020 в 14:41.
Да, вы правы, я взял за основу код для формирования полного трека из Вашего эмулятора.
Честно говоря, я вообще по началу переделал ваш эмулятор флопа на СИ и попытался использовать его, но эмулятор и реальная железка все-таки разные вещи. Например, CFCGetData() вызывается в момент обращения УКНЦ к порту, но у меня есть только флаги, что УКНЦ забрал или положил в ячейку: статус/команду, данные. Если попытаться использовать в прерывании даже CFCGetData, то не попадешь в тайминги.
nzeemin, если не трудно, подскажите суть обмена УКНЦ с контроллером: Например, УКНЦ дает команду, читает статус, читает/пишет данные.. или команда, статус, данные, статус, данны и тд
А еще, первые шаги, что должен писать и что должен получить в ответ. Я понимаю, что в статусе 6 бит, но что-то не пойму цепочку.. вдруг я что-то упускаю или пропускаю.
Спасибо!
Да и еще один момент, я пишу данные сразу как только сброшен бит TR или надо выжидать время характерное для реального дисковода?
И еще один.. маркеры.. поиск маркера это перейти на 0xA1A1A1?
Последний раз редактировалось ZPilot; 05.04.2020 в 15:19.
ZPilot, по сигналам я не подскажу, спросите @Alex_K - он мне всё очень подробно объяснял про дисковод когда я делал реализацию записи на диск в эмуляторе.
Маркер это не про поиск нужных байт. Это про поиск "неправильного" перехода в кодировании MFM. То есть в самом кодировании сигнала "зашиваются" метки.
Посмотрите вот тут: https://en.wikipedia.org/wiki/Modifi...ncy_modulation - см. термин Sync Mark.
Этот переход мне весь мозг сделал когда я писал свой эмулятор флопа, я все ни как не мог понять, как это так, ведь сдвоенного нулевого интервала в MFM кодировании не бывает, оказывается бывает!
Но я имел в виду немного другое, технически, для УКНЦ это что? Подал команду на поиск и получил в РД 0xA1A1?
У меня еще один вопрос, бит 14 статуса (CRC) выставляется когда? после того как считан заголовок трека/данных или сразу же, а снимается только тогда когда обнаружена ошибка CRC?
Мне кажется, что он снят от начала трека до момента когда контроллер считает CRC с диска, и только тогда устанавливает 14 бит. Снимает его еще раз при нахождении 0xA1A1 перед блоком данных и ставит опять, после того, как считал данные и сам CRC с диска. Так?
Меня смущает вот это место: Если за это время регистр не был прочитан, то контроллер сравнивает рассчитанную при чтении CRC прочитанных данных со значением непрочитанного слова. При совпадении устанавливается бит CRC в РС 177130.
Последний раз редактировалось ZPilot; 05.04.2020 в 16:58.
Вот код из обработчика канала 2 УКНЦ -- http://www.emuverse.ru/wiki/%D0%A3%D...6_ROM_disasm_4
То есть получается что после того как словили маркер ожидаем что следующее прочитанное слово это 0xA1FE из заголовка сектора.Код:MOV #177130,R4 ; R4 = адрес РСУ накопителя ... 132740$:SOB R1,132730$ BIS #400,R3 ; Установить в УС бит поиска заголовка MOV R3,@R4 ; Начать поиск BIC #400,R3 ; Сбросить в УС бит поиска заголовка MOV #226,R0 ; Время ожидания поиска MOV R3,@R4 132762$:TSTB @R4 ; Маркер заголовка обнаружен ? BMI 133034$ ; Да SOB R0,132762$ BR 132630$ ; Заголовок сектора необнаружен ... 133034$:TST @R5 ; Сбросить готовность контроллера дисковода 133036$:TSTB @R4 ; Следующее слово прочитано ? BPL 133036$ ; Нет CMP #120776,@R5 ; Это адресный маркер заголовка сектора? BEQ 133212$ ; Да
Если заголовок сектора уже прочитали то логично ожидать сразу после маркера слово 0xA1FB как признак начала данных.
- - - Updated - - -Код:CALL 134132$ ; Поиск пропуска синхроимпульсов BEQ 133476$ ; Не найдено 133370$:TSTB @R4 ; Очередное слово сформировано ? BPL 133370$ ; Нет CMP #120773,@R5 ; Это маркер данных ?
По моему коду так: флаг CHECKSUMOK сбрасывается при чтении по команде поиска маркера, при записи по команде записи маркера.
Устанавливается при чтении после чтения и сравнения с контрольной CRC, при записи после записи CRC.
- - - Updated - - -
ZPilot, кстати, микросхема 1801ВП1-128 полностью отреверсена, по идее, все нюансы работы там - https://github.com/1801BM1/k1801/tree/master/128
Последний раз редактировалось nzeemin; 05.04.2020 в 17:32.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)