Еще раз про MaxTransfer

Софт для классических Amiga. AmigaOS 1.x-3.9, Morphos 1.x

Модераторы: striimii, Vinnny

Еще раз про MaxTransfer

Сообщение tnt23 07 фев 2014, 12:43

В очередной раз вожусь с картой CF, на которую ставлю минимальную систему 3.1. В качестве теста запаковываю и проверяю большой архив на RAM:.

Стабильно и регулярно при проверке получаю CRC ошибки на файлах больше ~100K. Снова полез читать про MaxTransfer и нашел исчерпывающее обсуждение этого параметра и волшебного значения 0x1fe00. Сообщение №25 тут: http://eab.abime.net/showpost.php?p=759918&postcount=25 (Tony Wilen, автор эмулятора WinUAE).

Примерный перевод:

"Когда IDE драйвер в AmigaOS обрабатывает пересылку размером больше 256 блоков, та разбивается на две или более части (потому что максимальный размер передачи для ATA равен 256 блокам). После завершения передачи первой части драйвер читает регистры CHS/LBA, добавляет единицу к адресу и затем записывает обратно как начальный адрес следующей части. (Согласно спецификации ATA в этих регистрах содержится адрес последней операции записи/чтения). Все бы хорошо, но:

Стандарт ATA-1 говорит: по завершении команды, Command Block Registers содержат цилиндр, головку и номер последнего прочитанного сектора.
Стандарт ATA-2 говорит: содержимое регистров должно отражать media address of the error в случае, если команда доступа к носителю завершилась неудачно.
Примечание 9: до принятия данного стандарта, регистры обновлялись в конце каждой команды для отражения текущего адреса доступа к носителю.

Другими словами, устройство стандарта ATA-2 или выше обновляет CHS/LBA адрес только в случае ошибки, но не в случае успешного завершения операции. Это ломает логику работы ATA драйвера в AmigaOS, начальный адрес второй части пересылки становится неверным (подозреваю, что драйвер оставляет старые значения без изменений, вторая часть пересылки затирает начало первой части, что, кстати, объясняет, почему никогда не возникало жалоб на порчу файловой системы, только на порчу данных)."

Сухой остаток: поставил себе волшебное значение 0x1fe00, дуло исчезло (ошибок нет).
A500, A600, A1200, A3000
Аватара пользователя
tnt23
Беспардонный Амигофлуд
Беспардонный Амигофлуд
 
Сообщения: 1293
Зарегистрирован: 17 май 2005, 16:59
Откуда: Санкт-Петербург

Re: Еще раз про MaxTransfer

Сообщение easy_john 07 фев 2014, 13:37

Неплохо.
Решение было известно, причина - не очень.
PegasosII G4 1.0/1Gb/80Gb/Ati 9200/MorphOS unreg/Debian
a4000/PPC 233mhz/68060 50mhz/128mb/cv ppc/toccata/x-surf/kickflash/indivision/AOS3.9-4.0
a1200/PPC 200mhz/68040 25mhz/256mb/bv ppc/delfina/wifi/indivision sd+ff/AOS 3.9-4.0
a600/68000 7mhz/8mb fast/wifi/AOS 3.0
Аватара пользователя
easy_john
Менеджер
Менеджер
 
Сообщения: 4296
Зарегистрирован: 03 мар 2006, 15:24
Откуда: SPb

Re: Еще раз про MaxTransfer

Сообщение tnt23 07 фев 2014, 15:51

Что-то я поторопился, ошибки у меня по-прежнему выскакивают. Но тут, возможно, MaxTransfer и не при чем, я тестируюсь на конфигурации без фаста и с 64М зорро-памяти.
A500, A600, A1200, A3000
Аватара пользователя
tnt23
Беспардонный Амигофлуд
Беспардонный Амигофлуд
 
Сообщения: 1293
Зарегистрирован: 17 май 2005, 16:59
Откуда: Санкт-Петербург


Вернуться в Софт Classic Amiga

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

cron