я в satisfaction копался давно, но насколько помню там загрузка частей стандартная #3d13, напрямую сделано только отрубание magic кнопки.
я в satisfaction копался давно, но насколько помню там загрузка частей стандартная #3d13, напрямую сделано только отрубание magic кнопки.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Сейчас более досконально проанализировал работу загрузчика. В общем, в процедуре гашения лампочки дисковода (торможение диска) используется вот такой вот алгоритм:
Далее, когда загрузчик пытается загрузить новую часть демо, то turbo loader виснет на процедуре #3fe5 при чтении порта #ff в ожидании сигнала intrq, судя по всему. Вроде бы так. Это актуально для эмулятора Unreal, но, судя по всему и для ZXMAK2 тоже.Код:xor a - гасим лампочку, bit 3 загрузки головки выставляем в 0 out (#1f),a ld a,#d0 - принудительно прерываем выполнение команды out (#1f),a ret
Последний раз редактировалось Faster; 10.04.2013 в 14:35.
Когда на твой вопрос отвечает философ, перестаешь понимать вопрос
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Я запустил демо на эмуле по алгоритму описанному выше. Та версия, что у ААА по мультиколору ничем не отличается от той, что ты хотел увидеть в моей версии, так что ничего не потерял
Верно, в оригинальной версии от Cоdebasters. В моей версии дема полностью перепакована, пофиксена в плане мультиколора, вроде еще пофиксен 6-й бит, чтобы правильно через полупорт странички щелкались в части с кубом + добавлен турбо-загрузчик. Чей именно косяк (эмулятора или кода загрузчика) в не совсем хорошей работы turbo loader-а я сейчас не скажу, но на моем реальном скорпе всё работало без проблем. Бегло посмотрев код предположил, что зависание связано с тем, что после загрузки очередной части загрузчик тормозит диск (гасит лампочку), а потом при попытки загрузить следующую часть и происходит зависание на чтении порта #ff.
update: Сейчас проверил в Unreal, пропатчил загрузчик, чтобы не гасил движок дисковода - демо грузится и без No Delay.
Когда на твой вопрос отвечает философ, перестаешь понимать вопрос
при переходе в трдос у скорпиона несколько необычная процедура для вг93 выполняется, без задержек (nodelay) она зависает...
---------- Post added at 23:30 ---------- Previous post was at 23:26 ----------
скорей всего загрузчик расчитывает на приход прерывания индексного отверстия, т.к. после отключения мотора диск все-еще крутится по инерции. нужно проверить, но похоже в эмуляторе вг93 эта инерция при отключении двигателя не предусмотрена и получается что индексное прерывание после отключения двигателя уже никогда не приходит...
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Нее, дело не в этом. Сейчас проверил работу загрузчика в разных вариантах:
т.е. убрал команду прерывания выполнения команды. Turboloader работает нормально, только с какого-то фига "головка дисковода" таки лезет на 0 трек (с чего бы?) при выполнении первой команды связанной с портом ВГ-шки, в данном случае out (#7f),track. Но далее командой "позиционирование" возвращается на нужный трек и все ок.Код:xor a out (#1f),a ret
Собственно, дальше turboloader также работает нормально, возвращая "головку дисковода" на нужное место командой "позиционирование".Код:Здесь я несколько изменил процедуру, добавив ожидание выполнения команды: xor a out (#1f),a #3fe5 in a,(#ff) - происходит позиционирование на 0 трек (с чего бы?) and #c0 jr z,#3fe5 ret m
В связи с этим возникает вопрос: каким образом происходит эмуляция команды "восстановление" при условии того, что bit 3 (загрузка головки) в 0? На реале, чтобы диск раскрутился этот бит всегда должен быть в 1, собственно этим нулевым битом и происходит торможение и гашение лампочки. Следующий вопрос: что происходит в эмуляции ВГ-шки, после выполнения команды "прерывание выполнения предыдущей команды"? Что там с сигналами intrq и drq? Почему после выполнения последовательности
приходит "капец"?Код:xor a out (#1f),a ld a,#d0 out (#1f),a
Чего же тут здорового? )) Это наоборот печаль.
Когда на твой вопрос отвечает философ, перестаешь понимать вопрос
Не должна! Т.к. bit 3 нулевой. На этом и построена процедура гашения лампочки дисковода/торможение диска.
Восстановление 0000hvxx - команда восстановления используется для инициализации микросхемы КР1818ВГ93, обеспечивая установку магнитной головки выбранного дисковода в исходное состояние (на нулевую дорожку). Команда имеет следующие параметры:
h - бит определяет положение магнитной головки дисковода во время выполнения команды. Если он обнулен, то головка поднята, если установлен - находится в рабочем положении (опущена на дискету). Следует учитывать, что при h=0, контроллер не выдает сигнал на включение двигателя дисковода.
Источник: А. Ларченко, Н. Родионов. "ZX-Spectrum & TR-DOS Для пользователей и программистов", с.203
Когда на твой вопрос отвечает философ, перестаешь понимать вопрос
На жёлтом скорпе работать должно по идее, но т.к. эмуляторы путаются в показаниях, я не вполне уверен, насколько "надёжна" моя подстройка. Лично я отлаживаю жёлтые скорпионы на Unreal и зелёные - на ZKMAK2. Что эмулируют остальные эмуляторы сказать сложно, т.к. чаще всего там бывает реализована какая-то гремучая смесь из обоих
Мои исходники не секретные, они просто недоделанные. Я работаю над неким "универсальным" просмотрщиком бордерной графики, который бы позволил художникам публиковать свои работы. Прошлой осенью было написано несколько версий просмотрщика, каждый со своими преимуществами и недостатками. Я сейчас в процессе некой унификации, которая позволит этим разным версиям полагаться на одно общее ядро идентификации железа, после чего все исходники будут опубликованы. Точнее, сейчас я очень занят и почти ничего не пишу, но обязательно вернусь к этой теме весной.
"introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.
"introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)