User Tag List

Страница 9 из 9 ПерваяПервая ... 56789
Показано с 81 по 90 из 97

Тема: Точное описание задержек Скорпиона

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,293
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    203
    Спасибо Благодарностей получено 
    1,457
    Поблагодарили
    947 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    я в satisfaction копался давно, но насколько помню там загрузка частей стандартная #3d13, напрямую сделано только отрубание magic кнопки.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    22.06.2005
    Адрес
    Ульяновск
    Сообщений
    161
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alexander Makeev Посмотреть сообщение
    Нужно no-delay включить, загрузчик к эмуляции вг-шки привередливый
    Сейчас более досконально проанализировал работу загрузчика. В общем, в процедуре гашения лампочки дисковода (торможение диска) используется вот такой вот алгоритм:
    Код:
    xor a - гасим лампочку, bit 3 загрузки головки выставляем в 0
    out (#1f),a
    ld a,#d0 - принудительно прерываем выполнение команды
    out (#1f),a
    ret
    Далее, когда загрузчик пытается загрузить новую часть демо, то turbo loader виснет на процедуре #3fe5 при чтении порта #ff в ожидании сигнала intrq, судя по всему. Вроде бы так. Это актуально для эмулятора Unreal, но, судя по всему и для ZXMAK2 тоже.
    Последний раз редактировалось Faster; 10.04.2013 в 14:35.
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

  4. #3

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Faster Посмотреть сообщение
    Сейчас более досконально проанализировал работу загрузчика. В общем, в процедуре гашения лампочки дисковода (торможение диска) используется вот такой вот алгоритм:
    Код:
    xor a - гасим лампочку, bit 3 загрузки головки выставляем в 0
    out (#1f),a
    ld a,#d0 - принудительно прерываем выполнение команды
    out (#1f),a
    ret
    Далее, когда загрузчик пытается загрузить новую часть демо, то turbo loader виснет на процедуре #3fe5 при чтении порта #ff в ожидании сигнала intrq, судя по всему.
    А можно поподробнее как это обрабатывает реальная вг93? Зачем тут принудительное прерывание?
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  5. #4

    Регистрация
    22.06.2005
    Адрес
    Ульяновск
    Сообщений
    161
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    Включал, по совету Faster, результат отрицательный. Первый раз сразу сбросилось при переходе к загрузке второй части ( на которой висит без включения оной опции). но чаще всего висит просто при переходе в 128 TR-DOS. Это именно с версией Faster.
    С той версией, которая на сайте инноплАААнетянена - с той нормально, мУльтиколор увидел, вроде вполне приличный, No Delay там не включал. ЧЯА5НТД ?
    Я запустил демо на эмуле по алгоритму описанному выше. Та версия, что у ААА по мультиколору ничем не отличается от той, что ты хотел увидеть в моей версии, так что ничего не потерял

    Цитата Сообщение от goodboy Посмотреть сообщение
    я в satisfaction копался давно, но насколько помню там загрузка частей стандартная #3d13, напрямую сделано только отрубание magic кнопки.
    Верно, в оригинальной версии от Cоdebasters. В моей версии дема полностью перепакована, пофиксена в плане мультиколора, вроде еще пофиксен 6-й бит, чтобы правильно через полупорт странички щелкались в части с кубом + добавлен турбо-загрузчик. Чей именно косяк (эмулятора или кода загрузчика) в не совсем хорошей работы turbo loader-а я сейчас не скажу, но на моем реальном скорпе всё работало без проблем. Бегло посмотрев код предположил, что зависание связано с тем, что после загрузки очередной части загрузчик тормозит диск (гасит лампочку), а потом при попытки загрузить следующую часть и происходит зависание на чтении порта #ff.

    update: Сейчас проверил в Unreal, пропатчил загрузчик, чтобы не гасил движок дисковода - демо грузится и без No Delay.
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

  6. #5

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    это я понимаю. Тут важен сам факт, что эмуль висит при переходе в ТРДОС, даже без образа диЦкеты. Или мы разные эмуули запускаем, вот в чОм вопрос....
    при переходе в трдос у скорпиона несколько необычная процедура для вг93 выполняется, без задержек (nodelay) она зависает...

    ---------- Post added at 23:30 ---------- Previous post was at 23:26 ----------

    Цитата Сообщение от Faster Посмотреть сообщение
    Сейчас более досконально проанализировал работу загрузчика. В общем, в процедуре гашения лампочки дисковода (торможение диска) используется вот такой вот алгоритм:
    Код:
    xor a - гасим лампочку, bit 3 загрузки головки выставляем в 0
    out (#1f),a
    ld a,#d0 - принудительно прерываем выполнение команды
    out (#1f),a
    ret
    Далее, когда загрузчик пытается загрузить новую часть демо, то turbo loader виснет на процедуре #3fe5 при чтении порта #ff в ожидании сигнала intrq, судя по всему. Вроде бы так. Это актуально для эмулятора Unreal, но, судя по всему и для ZXMAK2 тоже.
    скорей всего загрузчик расчитывает на приход прерывания индексного отверстия, т.к. после отключения мотора диск все-еще крутится по инерции. нужно проверить, но похоже в эмуляторе вг93 эта инерция при отключении двигателя не предусмотрена и получается что индексное прерывание после отключения двигателя уже никогда не приходит...
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  7. #6

    Регистрация
    22.06.2005
    Адрес
    Ульяновск
    Сообщений
    161
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alexander Makeev Посмотреть сообщение
    скорей всего загрузчик расчитывает на приход прерывания индексного отверстия, т.к. после отключения мотора диск все-еще крутится по инерции. нужно проверить, но похоже в эмуляторе вг93 эта инерция при отключении двигателя не предусмотрена и получается что индексное прерывание после отключения двигателя уже никогда не приходит...
    Нее, дело не в этом. Сейчас проверил работу загрузчика в разных вариантах:
    Код:
    xor a
    out (#1f),a
    ret
    т.е. убрал команду прерывания выполнения команды. Turboloader работает нормально, только с какого-то фига "головка дисковода" таки лезет на 0 трек (с чего бы?) при выполнении первой команды связанной с портом ВГ-шки, в данном случае out (#7f),track. Но далее командой "позиционирование" возвращается на нужный трек и все ок.
    Код:
    Здесь я несколько изменил процедуру, добавив ожидание выполнения команды:
    
    	xor a
    	out (#1f),a
    #3fe5	in a,(#ff) - происходит позиционирование на 0 трек (с чего бы?)
    	and #c0
    	jr z,#3fe5
    	ret m
    Собственно, дальше turboloader также работает нормально, возвращая "головку дисковода" на нужное место командой "позиционирование".

    В связи с этим возникает вопрос: каким образом происходит эмуляция команды "восстановление" при условии того, что bit 3 (загрузка головки) в 0? На реале, чтобы диск раскрутился этот бит всегда должен быть в 1, собственно этим нулевым битом и происходит торможение и гашение лампочки. Следующий вопрос: что происходит в эмуляции ВГ-шки, после выполнения команды "прерывание выполнения предыдущей команды"? Что там с сигналами intrq и drq? Почему после выполнения последовательности
    Код:
    xor a
    out (#1f),a
    ld a,#d0
    out (#1f),a
    приходит "капец"?

    Цитата Сообщение от introspec Посмотреть сообщение
    Ёлки-палки, до чего же здорово!
    Чего же тут здорового? )) Это наоборот печаль.
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

  8. #7

    Регистрация
    27.03.2005
    Адрес
    CПб
    Сообщений
    711
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Faster Посмотреть сообщение
    Turboloader работает нормально, только с какого-то фига "головка дисковода" таки лезет на 0 трек (с чего бы?)
    А разве не должна?
    Команда "восстановление" осуществляет позиционирование на дорожку 0. Если через 256 шагов сигнал TR00 не появится, то команда перкращает работу.

  9. #8

    Регистрация
    22.06.2005
    Адрес
    Ульяновск
    Сообщений
    161
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Blade Посмотреть сообщение
    А разве не должна?
    Не должна! Т.к. bit 3 нулевой. На этом и построена процедура гашения лампочки дисковода/торможение диска.

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

    Источник: А. Ларченко, Н. Родионов. "ZX-Spectrum & TR-DOS Для пользователей и программистов", с.203
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

  10. #9

    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    Угу. все равно строить больше не по чем тайминги))
    По твоей тестовой программе настроил эмуль Xpeccy, ну и Speccy2010 то жи перестроил под "зеленый" при эмууляции скорпиона. Зачем - не знаю
    Обратный отсчет какой то, на...
    Кстати, на "желтом" скорпе тоже должна работать?? Кто бы еще проверил..
    Исходники сильно секретные?)) А то в одном эмуле работает неправильно))
    На жёлтом скорпе работать должно по идее, но т.к. эмуляторы путаются в показаниях, я не вполне уверен, насколько "надёжна" моя подстройка. Лично я отлаживаю жёлтые скорпионы на Unreal и зелёные - на ZKMAK2. Что эмулируют остальные эмуляторы сказать сложно, т.к. чаще всего там бывает реализована какая-то гремучая смесь из обоих

    Мои исходники не секретные, они просто недоделанные. Я работаю над неким "универсальным" просмотрщиком бордерной графики, который бы позволил художникам публиковать свои работы. Прошлой осенью было написано несколько версий просмотрщика, каждый со своими преимуществами и недостатками. Я сейчас в процессе некой унификации, которая позволит этим разным версиям полагаться на одно общее ядро идентификации железа, после чего все исходники будут опубликованы. Точнее, сейчас я очень занят и почти ничего не пишу, но обязательно вернусь к этой теме весной.
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

  11. #10

    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    Ну плюс\минус - это же геометрия экрана only "желтого" скорпиона, с M1 ?
    На зелененьком - несколько иначе в +\-?? особенно int ?
    Ну там FAQ гораздо более поверхностное, там и для жёлтого скорпиона деталей совершенно недостаточно для реальной работы. Но на том уровне детализации, что в остальных частях этого FAQ, по-моему, разумно.
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

Страница 9 из 9 ПерваяПервая ... 56789

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 30
    Последнее: 16.08.2011, 21:13

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •