С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Это как? Меняет скорость вращения диска чтоль? ) Как-раз скорость чтение диска константна, и она равна 250,500 и прочие кбит, а вот компьютер может читать данные с ВГ как ему удобнее.
То что 115200 у человека получилось получить только сильно извернувшись и поломав голову и говорит о том что где-то в этих пределах и лежит максимальная скорострельность в операциях, правда организация потока, проверка готовности устройства заметно еще скосят скорость даже при параллельном подключении, еще на таких скоростях у UARTов начинается еррор рейт заметный, значит еще и коррекция ошибок понадобится.
Кстати для того чтобы успешно работать на шине нужен достаточно быстрый контроллер, чтобы он успевал дергаться.
Т.е. там порядка 500-700 нс на то чтоб получить прерывание и выставить ответ или просто отреагировать.
Вот тут интересная статья про эмуляцию дисковода и картриджа на STM32
https://www.kernelcrash.com/blog/emu...sx/2020/06/14/
Последний раз редактировалось Kulich; 24.11.2021 в 15:42.
Подождите. На скорпе копирование с карты на карту через SMUC занимает 5 сек целая дискета. В турбе. А это значит около 1.2 мегабита. И причём это сначала чтение, потом запись. А там шина 8 бит.
А при обмене на 57600 процессор даже не в турбе довольно много ждёт. И по одному биту всё проталкивает. А на 115200 предел возможностей, похоже, для нетурбы. Но это для UART протокола.
Скрытый текст
https://drive.google.com/drive/folde...xZ83juCuaBe32I
Scorpion ZS 256 Turbo+/GMX 2MB/SMUC v1.3 OP/CF-IDE 2GB/TS ARM/Covox #DD/FDD 5'25/FDD 3'5/AT Kbrd & Mouse Ctrl v2.5/Universal PS/2 Kbrd Ctrl/ZX WiFi
Leningrad 1/Sega Joy Adapter
DivGMX
ZX Spectrum +2A
ZX Evolution rev. C
TCK Computer 486DX2-66/512K Tridend 9000i/8MB SIMM72/CF-IDE 512MB/ESS 1869/CNet CN200/FDD 5'25/FDD 3'5
[свернуть]
Это уже если лезть в технические дебри контроллера и флопа. На стандартном обмене скорость фиксированная, не просто же так существуют эти обороты диска в 300, 360 и другие. Частота ВГ определяет скорость записи данных. Спектрум обязан принять/отослать данные в порт ВГ по сигналу готовности, иначе вылетит ошибка. Вот эта стандартная скорость и есть 250 Кбит (5 оборотов в секунду, 6 Кб на дорожке, итого 30 Кбайт).
Выше уже отписали о копировании дискеты за 5 секунд, что довольно неплохо. Да, с карты на карту, но что мешает реализовать эти скорости для других типов хранения (приема) данных?
Ну для 7 мегагерц там уже веселее я за 3.5 приводил расчет. Кажется я знаю как работает это копирование, без участия памяти вообще, так-как это тактов 28 на байт из которых in/out 20 съедают точно.
Но вообще это дело десятое, максимальная скорость. Главное чтоб работало=) Я гофернеты в районе 9600 бороздю и не жалуюсь )
Даже если эту перезапись реализовать сдвигами напрямую из одной карты в другую (по SPI или по полному 4-разрядному интерфейсу SD), то все равно надо много доп.информации передавать каждой из карте для адресации единиц размещения (файловую систему-то она сама по себе не детализирует, а как без ее разбора ?). Но в СМУКе ж и этого нет. Как копировать без участия памяти-то ?
И как за 5 сек вся дискета - разъясните, а то аж уснуть не могу )
Что касается предела скорости обмена, тут Kulich действительно прикинул довольно точно.
Вот такой фрагмент кода читает данные из условного "порта данных" некоей идеализированной железяки, которая в идеальном случае успевает формировать очередной байт данных к каждому новому чтению из порта. После чтения байт сохраняется в буфер в ОЗУ.
На это уходит 43 (то есть даже больше, чем 40) тактов на один цикл (=байт), и это без какой-либо прочей обработки полученных данных и контроля готовности очередных данных перед приемом. 81395 циклов в секунду. Но это "сферический конь в вакууме".Код:ld hl, srcaddr ld de, length ld bc, portaddr loop: in a, (c) 12T ld (hl), a 7T inc hl 6T dec de 6T jr nz, loop 12T
Если в действительности будет даже вдвое меньше, то ~40Кбайт/с при байтном обмене по 8-разрядной шине уже было бы неплохим результатом (~16 сек суммарное время на получение данных всех фрагментов TRD от сервера + обычное суммарное время записи из памяти на флоп с ожиданием позиционирования).
Если бы такое удалось, уже классно. Все зависит действительно от того, насколько хорошо удастся оптимизировать обработку прерывания при обращении к ESP на чтение. Для нас, начинающих, та еще задачка )
valerium(24.11.2021)
"И как за 5 сек вся дискета - разъясните, а то аж уснуть не могу )"
Как 5 секунд дискета не знаю, но без памяти просто, in из порта и следом out в порт эти же данные. Но если честно я абсолютно не знаю как работает IDE, наверное там нужно еще выбирать откуда и куда)
Из какого и в какой порт ? Там все непросто хотя бы потому, что IDE 16-разрядный и процессор одним движением эти данные обработать в любом случае не может.
Еще у него записью в отдельные регистры адресуется каждый сектор (или LBA-блок, в зависимости от режима адресации),а внутри него есть еще таблица разделов, внутри которых лежат структуры файловых систем. Так что одно IDE-устройство со своей файловой системы корректно отдать данные в файловую систему другого устройства просто не сможет, нужен промежуточный интеллект )
Upd: про разделы, наверное, гоню, это ж не esxdos, который работает со всеми фишками писишных устройств, наверное тут данные организованы проще. Но структуры, контролирующие размещение файлов, точно никто не отменит )
- - - Добавлено - - -
Вариант был мало того, что неоптимальный, так еще и неправильный. Лет 20 почти ничего под Z80 не писал - похоже и начинать уже не надо )
Красиво. Респект )Сферический конь без проверки готовности данных состоит из одной команды inir/otir, это 21 такт =) Если же раскранчить код в памяти (кучу команд ini/outi), то вообще 16 тактов.
Последний раз редактировалось valerium; 24.11.2021 в 22:07.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)