Page 1 of 2

Эмуляция дисковода

PostPosted: 03 Apr 2014, 15:39
by Faster
Deathsoft, мы с тобой эту тему обсуждали в свое время, поэтому в новой версии Unreal'а прошу реализовать следующее:

Согласно документации:
Восстановление 0000hvxx - команда восстановления используется для инициализации микросхемы КР1818ВГ93, обеспечивая установку магнитной головки выбранного дисковода в исходное состояние (на нулевую дорожку). Команда имеет следующие параметры:
h - бит определяет положение магнитной головки дисковода во время выполнения команды. Если он обнулен, то головка поднята, если установлен - находится в рабочем положении (опущена на дискету). Следует учитывать, что при h=0, контроллер не выдает сигнал на включение двигателя дисковода.

Во всех эмуляторах ВГ-шка так и эмулируется, но:
Сообщение от Blade
Это дисковод не включается, а ВГ93 команду выполняет. Выдает 256 импульсов "шаг"

Так вот, прошу в эмуляторе учесть этот момент и сделать эмуляцию физического дисковода, т.е. при выполнении команд с h=0 "мотор дисковода" не включать (тормозить), как это и происходило на физическом дисководе. После этого фикса заработают программы, в которых используется, как пример, процедура гашения лампочки дисковода (торможение диска), которые на данный момент работают только с включенной опцией No delays, например мой крек Satisfaction.

Re: Эмуляция дисковода

PostPosted: 05 Apr 2014, 22:14
by deathsoft
Вот исправил, тестируй.

Проблема была совершенно не в эмуляции мотора дисковода (ноего я тоже проэмулировал). Суть проблемы я раскрывать не буду, а то авторы других эмулей тутже ее пофиксят. Ну и таки правильное отключение мотора дисковода - это 15 импульсов HTL через порт FF (этот сигнал подключен через диод ко входу индекса ВГ93), когда ВГ93 находится в состоянии ожидания команды, то мотор отключается через 15 оборотов диска, чтобы не зависеть от того вставлена дискета или нет индексные импульсы можно подавать вручную через сигнал HLT в порте FF (бит D3). При этом такой код абсолютно надежен в отличие от говнокода примененного в "турбо лоадере" сатисфэкшена.

Re: Эмуляция дисковода

PostPosted: 05 Apr 2014, 23:19
by fk0
А не моментальное выполнение команд ВГшкой хоть кто-то уже пофиксил? Ведь когда команду записываешь -- регистры обновляются (у ВГ) и оно исполняется не с первого такта.

Re: Эмуляция дисковода

PostPosted: 05 Apr 2014, 23:41
by deathsoft
fk0 wrote:А не моментальное выполнение команд ВГшкой хоть кто-то уже пофиксил? Ведь когда команду записываешь -- регистры обновляются (у ВГ) и оно исполняется не с первого такта.

Так когда не стоит галка "No Delays" в унриале, задержки эмулируются (но далеко не во всех местах, эмулируются только там, где были лоадеры который используют эти задержки).

Re: Эмуляция дисковода

PostPosted: 06 Apr 2014, 10:08
by Faster
deathsoft wrote:Вот исправил, тестируй.

Спасибо! Теперь Satisfaction грузится без проблем. Попутно погонял еще Refresh, Insult, Eye Ache 2, Unreal. Почему-то Unreal стал зависать после надписи "Are you not sleep???". В паблик версии 0.38.1 такого не происходит.

deathsoft wrote:Проблема была совершенно не в эмуляции мотора дисковода (ноего я тоже проэмулировал). Суть проблемы я раскрывать не буду, а то авторы других эмулей тутже ее пофиксят. Ну и таки правильное отключение мотора дисковода - это 15 импульсов HTL через порт FF (этот сигнал подключен через диод ко входу индекса ВГ93), когда ВГ93 находится в состоянии ожидания команды, то мотор отключается через 15 оборотов диска, чтобы не зависеть от того вставлена дискета или нет индексные импульсы можно подавать вручную через сигнал HLT в порте FF (бит D3). При этом такой код абсолютно надежен в отличие от говнокода примененного в "турбо лоадере" сатисфэкшена.

Ну, насчет говнокода я бы поспорил, конечно. )) На реале алгоритм работает четко! А то, что он не работает на эмуляторах, так это косяк эмуляторов! ИМХО.

Re: Эмуляция дисковода

PostPosted: 06 Apr 2014, 10:57
by lvd
deathsoft wrote:Суть проблемы я раскрывать не буду, а то авторы других эмулей тутже ее пофиксят.

Faster wrote:Почему-то Unreal стал зависать после надписи "Are you not sleep???".

Бугага.

Re: Эмуляция дисковода

PostPosted: 06 Apr 2014, 22:16
by deathsoft
Faster wrote:На реале алгоритм работает четко!

Будет ВГшка хоть чуть с другими таймингами и ничего работать не будет, алгоритм завязан на конкретную nmos ВГшку чуть менее чем совсем (потактово). Тот алгоритм, который описал я, работает с любыми таймингами, хоть в режиме ноделэйс.

Re: Эмуляция дисковода

PostPosted: 08 Apr 2014, 02:21
by Александр Бухаров
deathsoft wrote:Так когда не стоит галка "No Delays" в унриале, задержки эмулируются (но далеко не во всех местах, эмулируются только там, где были лоадеры который используют эти задержки).

У Кворума CP/M отвалился.

Еще такую фишку заметил:
Есть старый эмуль версии 0.2 у того норм диск загружается.
а есть современный 38.ххх у него появляется кант реад диск...
хотя там и там диск один и тот же...

образ цепанул к сообщению

Re: Эмуляция дисковода

PostPosted: 15 Apr 2014, 21:07
by deathsoft
Faster wrote:Почему-то Unreal стал зависать после надписи "Are you not sleep???". В паблик версии 0.38.1 такого не происходит.

Исправил, проверяй.

Re: Эмуляция дисковода

PostPosted: 17 Apr 2014, 11:53
by Faster
Проверил, все работает! Респект! )