User Tag List

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 32

Тема: Прохождения игр в формате RZX

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

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

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,711
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    И при записи своего нужно обязательно точно указывать в чем было оно записано
    В самом RZX есть тег с название эмулятора, в котором файл был создан. Но, увы, версия почему-то указана только для Spin.


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

  3. #2

    Регистрация
    07.10.2006
    Сообщений
    1,730
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    В самом RZX есть тег с название эмулятора, в котором файл был создан. Но, увы, версия почему-то указана только для Spin.
    Версия эмулятора указывается в файле в числовых полях, сразу за названием эмулятора.


    Благодаря вашей базе выявил ещё пару нюансов, касающихся плейбека RZX. Один простой - для корректного плейбека некоторых RZX требуется в точности тот же образ ПЗУ, который использовался при записи RZX. Если ПЗУ моделей спектрума у большинства эмулей одинаковые, то с TRDOS возникают проблемы - в разных эмулях используется разные ПЗУ TRDOS (даже с одним и тем же номером версии), что приводит к краху плейбека некоторых RZX на некоторых эмулях. Я бы рекомендовал эмулеписателям использовать образ ПЗУ TRDOS, поставляемый с SpecEmu - он совпадает с Spectaculator-ским.

    Второй посложнее, он касается недокументированной особенности команд LD A,I/LD A,R - во время её выполнения в момент прихода импульса прерывания в флаг PV записывается не состояние триггера IFF1, а ноль, т.к. запрос на прерывание начинает обрабатываться на последнем такте команды. Все эмуляторы, кроме Spectaculator, при плейбеке RZX этот факт игнорируют. А сам Spectaculator почему-то в большинстве случаев обрабатывает эти команды правильно, но иногда, несмотря на заход в обработчик прерывания после выполнения команды LD A,R, в флаг PV таки копируется триггер IFF2. С чем это связано, я не знаю, но из-за этого файл beastiefeastie.rzx в принципе не может быть правильно проигран - он нарушает и нативную, и ненативную логику выполнения команды LD A,R во время плейбека RZX. Однако, тем не менее, в Spectaculator-е он проигрывается до конца То есть, либо в Spectaculator-е есть баг, либо он знает о ещё какой-то особенности выполнения команды LD A,R, из-за которой она иногда во время импульса прерывания копирует в флаг PV триггер IFF2. Я этот вопрос выяснить до конца не смог. Скорее всего баг, но какова его логика, непонятно.ldartst2.zip
    Последний раз редактировалось Spectramine; 08.07.2018 в 16:47.

  4. #3

    Регистрация
    07.10.2006
    Сообщений
    1,730
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для RZX всё не так критично, он специально сделан так, чтобы отвязаться хотя бы от таймингов команд/INT/длины фрейма. Проблемы могут быть, только если эмуль где-то криво эмулирует z80, ну или из-за багов реализации. А так в принципе большинство эмулей Спека большинство RZX проигрывает корректно.

    Кстати, я вроде бы встречал RZX, записанные EmuzWin, которые в самом EmuzWin-е сбоят. То есть хороший проигрыватель RZX не гарантирует хорошей записи RZX, и наоборот, это две разные процедуры.

  5. #4

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

    По умолчанию

    Пытаюсь найти RZX файл прохождения для игры Robin of the Wood: http://www.worldofspectrum.org/infos...cgi?id=0004177
    Но ничего не нашёл. Может у кого-то есть?
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  6. #5

    Регистрация
    28.10.2005
    Адрес
    Омск
    Сообщений
    2,116
    Спасибо Благодарностей отдано 
    162
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    32 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    у меня есть, держите.
    https://yadi.sk/d/5mOlGrZD3YujEH

  7. #6

    Регистрация
    07.10.2006
    Сообщений
    1,730
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Поднятая тема напомнила мне о нерешенном вопросе с beastiefeastie.rzx. Новые размышления привели меня к мысли, что либо Spectaculator не вполне правильно эмулирует команды LD A,R/LD A,I в части эмуляции ошибки z80 копирования IFF2 во флаг P/V во время прихода импульса прерывания (что более вероятно), либо процессор обрабатывает эту команду по какому-то сложному алгоритму (что менее вероятно). Я написал тест: ldartst2.zip, который проверяет это дело. И выяснилось, что по данному вопросу мнения расходятся у половины самых ходовых эмуляторов.

    Spectaculator, ZX Spin, ZXMAK2, EmuzWin выходят в бейсик и выдают "LD A,R ERROR!".

    Fuse, SpecEmu и Unreal виснут - что является, как мне кажется, правильным поведением, совпадающим с работой реального NMOS Z80. На CMOS Z80 тест должен сбрасываться - на нем после команды LD A,R прерывание вообще невозможно.

    Тест настроен для работы на фирменных моделях и Пентагоне (на Скорпионах и других клонах запускаться будет, но толку от него мало - на них не будет работать использованная в тесте схема сдвига времени начала команд в кадре на 1 такт).

    Если кто-то заинтересуется и проверит тест на реале, буду рад.

    - - - Добавлено - - -

    Исходник теста

    Скрытый текст

    org #FFD0

    DI
    LD HL,#8000
    LD BC,8000
    L1 LD (HL),#ED
    INC HL
    LD (HL),#5F
    INC HL
    DEC BC
    LD A,B ; заполняем память с адреса #8000 8000-ми командами LD A,R
    OR c
    JR NZ,L1
    LD (HL),#C7 ; сброс для CMOS процессоров

    LD HL,#FFFF
    LD (#BEFF),HL
    LD A,#BE
    LD I,A
    IM 2
    EI
    JP #8000

    org #FFF4
    LD A,(HL)
    POP HL ; снимаем адрес возврата
    EI
    JP PO,#8000 ; флаг PV=0, ожидаемое поведение из-за ошибки Z80
    ; 19+12+7+10+4+10=62 (7*9-1) тактов на обработку прерывания


    INC BC
    IM 1
    RET ; возврат в бейсик, если на момент входа в прерывание PF=1

    org #FFFF
    JR #FFF4
    [свернуть]
    Последний раз редактировалось Spectramine; 09.07.2018 в 14:02.

  8. #7

    Регистрация
    07.10.2006
    Сообщений
    1,730
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Благодаря daniel, запустившему тест на своих реалах, подтвердилось, что Спектакулятор и ZXMAK2 неправильно эмулируют команды LD A,I/LD A,R - хотя они эмулируют ошибку этой команды, из-за которой во флаг P/V во время прихода импульса прерывания во время команды заносится 0 на NMOS-процессорах, (в остальное время во флаг P/V заносится состояние маскируемых прерываний - 0-выключены,1 - включены), НО - не всегда, иногда на них во флаг P/V заносится 1, а после команды происходит прерывание.

    Это уже второе узкое место эмуляции Z80, влияющее на запись RZX. Первое - малоизвестный факт, что сразу после команды EI и префиксов команд прерывание произойти не может.

    - - - Добавлено - - -

    Так что вопрос с bestiefestie.rzx снят - он был записан с неправильной эмуляцией Z80. Обойти это при плейбеке можно, примерно так же, как и с прерыванием после EI на некоторых RZX, записанных на старом ZXSpin-е.
    Последний раз редактировалось Spectramine; 09.07.2018 в 14:02.

  9. #8

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

    По умолчанию

    Цитата Сообщение от weiv Посмотреть сообщение
    Спектакулятор и ZXMAK2 неправильно эмулируют команды LD A,I/LD A,R - хотя они эмулируют ошибку этой команды, из-за которой во флаг P/V во время прихода импульса прерывания во время команды заносится 0 на NMOS-процессорах, (в остальное время во флаг P/V заносится состояние маскируемых прерываний - 0-выключены,1 - включены), НО - не всегда, иногда на них во флаг P/V заносится 1, а после команды происходит прерывание
    а в чём неправильность? LD A,I/R читает IFF2 (не путать с IFF1), это вроде даже в документации прописано.
    Нужно это для того, чтобы в обработчике NMI можно было узнать состояние IFF1 до прерывания.
    Это нужно, т.к. NMI срабатывает независимо от того - разрешены прерывания или нет.
    Таким образом NMI обработчик имеет возможность корректно восстановить состояние прерываний после завершения своей работы.

    Глюк процессора в том, что IFF2 не всегда читается, в частности он не читается когда INT активен и IFF1=1 (прерывания разрешены).
    По крайней мере в ZXMAK2 такое условие эмуляции. Откуда это бралось уже не помню.
    Был какой-то софт, который без эмуляции этой фишки не работал.

    Вот код эмуляции этого флага в ZXMAK2:
    Код:
                if (!(INT && IFF1) && IFF2)
                {
                    regs.F |= CpuFlags.P;
                }
    На счёт спектакулятора, у него отладчик глючный. Его поведение во время прерываний разное, зависит от того выполняется код по шагам или запущена эмуляция. Поэтому под отладчиком в спектакуляторе можно много магических эффектов обнаружить
    Последний раз редактировалось ZXMAK; 10.07.2018 в 13:21.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  10. #9

    Регистрация
    07.10.2006
    Сообщений
    1,730
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    а в чём неправильность? LD A,I/R читает IFF2 (не путать с IFF1), это вроде даже в документации прописано.
    Нужно это для того, чтобы в обработчике NMI можно было узнать состояние IFF1 до прерывания.
    Это нужно, т.к. NMI срабатывает независимо от того - разрешены прерывания или нет.
    Таким образом NMI обработчик имеет возможность корректно восстановить состояние прерываний после завершения своей работы.

    Глюк процессора в том, что IFF2 не всегда читается, в частности он не читается когда INT активен и IFF1=1 (прерывания разрешены).
    По крайней мере в ZXMAK2 такое условие эмуляции. Откуда это бралось уже не помню.
    Был какой-то софт, который без эмуляции этой фишки не работал.
    Глюк процессора в том, что, если во время выполнения команды LD A,I/R активен INT, а прерывания разрешены, во флаг P/V заносится 0 вместо 1. Другими словами - если после команды LD A,I/R идет подтверждение маскируемого прерывания, во флаге P/V после команды LD A,I/R _всегда_ должен быть 0 на NMOS процессоре Z80.

    А глюк ZXMAK2 и Spectaculator в том, что иногда при этих условиях во флаг P/V заносится 1. Можете запустить мой тест на на них и убедиться, а также запустить его на Fuse, SpecEmu и Unreal. При правильной эмуляции тест должен висеть, а при ошибке эмуляции - выходит в бейсик с сообщением "LD A,R ERROR!".
    Проверьте граничные условия в коде эмулятора, связанные с сигналом INT.


    На счёт спектакулятора, у него отладчик глючный. Его поведение во время прерываний разное, зависит от того выполняется код по шагам или запущена эмуляция. Поэтому под отладчиком в спектакуляторе можно много магических эффектов обнаружить
    А я тест не под отладчиком гонял, а напрямую.

  11. #10

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

    По умолчанию

    Цитата Сообщение от weiv Посмотреть сообщение
    во флаге P/V после команды LD A,I/R _всегда_ должен быть 0 на NMOS процессоре Z80
    Флаг P устанавливается в двух случаях:
    - если IFF2=1 и IFF1=0 (прерывания были разрешены, но запрещены входом в обработчик NMI)
    - если IFF2=1 и INT=0 (прерывания разрешены и нет сигнала прерывания)

    В остальных случаях флаг P устанавливается в 0.

    по сути именно то что вы и сказали. Именно так работает ZXMAK2
    Последний раз редактировалось ZXMAK; 10.07.2018 в 17:11.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 27
    Последнее: 25.11.2014, 09:57
  2. Игры и их прохождения
    от Slider в разделе Игры
    Ответов: 4
    Последнее: 11.12.2013, 14:57
  3. Коллекция демок в формате TAP
    от AAA в разделе Демо
    Ответов: 49
    Последнее: 02.03.2011, 21:28

Ваши права

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