(14.11.2013 08:33)Wind писал(а): У тебя задержек все же нет Я как помню ты эмулируешь HLE вызовы дрима. И сразу же исполняешь команду, т.е. для дрима выходит, что время исполнения команды 0 секунд. При чтение с реального дрима команда чтения асинхронно исполняется же, т.е. после вызова чтения, до фактического окончания проходит какой-то промежуток времени. По этой же причине голова тигра в веронике при работе с SD насколько знаю не поворачивается.
Ну не совсем так. Команды сначала ставятся в очередь (как положено), а потом уже исполняются. Но все же ты прав, при первом же проходе GdcExecServer, они выполняются за раз.
Но у загрузчика есть опция - Emulate DMA, она то как раз и разбивает чтение секторов на части и в этом случае команда выполняется не при первом проходе GdcExecServer, а пока не прочитает все сектора. Правда во избежании тормозов (которые я описал в предыдущем посте), эмуляция не читает каждый сектор по отдельности, а читает их по 8 штук, вместо запрошенных, а игры обычно просят по 16 и больше за раз. Мне кажется этого должно быть достаточно для подобных случаев, хотя я не проверял.
Правда вот пока я писал это сообщение и смотрел код, увидел баг в этой опции
)) Все манипуляции происходят с пачкой из 8 секторов, а читается всегда по 1 сектору (раньше так было просто, не уследил за одной строкой)
Вот же блин, я уж хотел предложить кому нибудь голову тигру повернуть в этом режиме...
Кстати раз уж такое дело, может подскажешь лучшую цифру? Может не 8, а меньше или больше. Причем чем больше тем лучше, быстрее читаться будет. Тупо сделать 1 сектор не пойдет, тормоза очень заметны будут.