Важная информация

User Tag List

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

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

  1. #11
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,406
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    20
    Поблагодарили
    14 сообщений
    Mentioned
    1 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

  2. #12
    Guru Аватар для ZEman
    Регистрация
    28.10.2005
    Адрес
    Омск
    Сообщений
    2,052
    Спасибо Благодарностей отдано 
    113
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    23 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  3. #13
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    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.

  4. #14
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    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.

  5. #15
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,406
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    20
    Поблагодарили
    14 сообщений
    Mentioned
    1 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

  6. #16
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    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.


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

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

  8. #17
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,406
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    20
    Поблагодарили
    14 сообщений
    Mentioned
    1 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

  9. #18
    Veteran
    Регистрация
    07.10.2006
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    241
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    155 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так, да не так. При определенных условиях, несмотря на то, что во время команды LD A,R приходит сигнал INT прерывания (т.к. после неё идет вход в обработчик), во флаг P/V заносится 1 (на Спектакуляторе и ZXMAK2). Посмотрите код теста в этом сообщении, он несложный, и скажите, должен ли тест выходить в бейсик, если ошибка процессора эмулируется правильно. А тест выходит в бейсик - на ZXMAK2 и Спектакуляторе. А на SpecEmu, Fuse, Unreal, и на реальных процессорах - тест висит, как положено.
    Последний раз редактировалось Spectramine; 10.07.2018 в 18:56.

  10. #19
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,406
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    20
    Поблагодарили
    14 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от weiv Посмотреть сообщение
    Так, да не так. При определенных условиях, несмотря на то, что во время команды LD A,R приходит сигнал INT прерывания (т.к. после неё идет вход в обработчик), во флаг P/V заносится 1 (на Спектакуляторе и ZXMAK2).
    хм... такое может быть только если на последнем такте LD A,R прерывания нет. А на следующем такте уже есть.
    Впринципе тут есть ньюанс, на реальном Z80 прерывание проверяется на последнем такте инструкции, а начинает обрабатываться на следующем такте. А в ZXMAK2 прерывание проверяется перед началом цикла M1. Поэтому эмулятор сразу обрабатывает прерывание, а реальный процессор в такой ситуации по инерции выполнит еще одну инструкцию. Которая будет уже при INT=1. Если это действительно так на реальном железе, то надо фиксить.
    Вообще неприятный баг, его исправление может сдвинуть на 1 такт тайминги. Поэтому если его фиксить, то надо всё перепроверять.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  11. #20
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,549
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    268
    Спасибо Благодарностей получено 
    220
    Поблагодарили
    175 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от weiv Посмотреть сообщение
    1) Лучше всего использовать эмули, знающие о внутреннем баге RZX формата, связанном с командой EI/префиксом DD/FD, и обходящие его. Как минимум SpecEmu точно знает, возможно, знает и Спектакулятор. Старые версии ZXSpin - точно не знают, из-за этого часть RZX архива не идет на некоторых эмулях, в частности, ZXMAK-е и Fuse. Пример файла - Amaurote из архива RZX (вылетает далеко не сразу). Проблемно пишет RZX EmuZwin, об этом сообщалось в какой-то аглоязычной аннотации к нему.
    то есть этот Amaurote НЕ должен воспроизводиться до конца, если ei/di задерживают прерывание как положено?
    а есть примеры, где такой сбой раньше должен произойти?

    только это не то чтобы "баг формата", а скорее эмуляторов, неверно его толкующих
    кстати, в spin (а может, и еще где) еще глюк есть - для кадра без инов повторяется последняя запись
    например, в меню rick1 два halt подряд и нет опроса в обработчике, но вместо 8,0,8,0 там 8,8,8,8...
    так что, чтобы не городить проверки, недочитанные ины достаточно тупо игнорировать
    и хотя так можно пропустить другую ошибку, всё равно рассинхрона после недолго ждать

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

    кстати, в эмуле inkspector2 есть инструмент быстрой проверки rzx
    Прихожу без разрешения, сею смерть и разрушение...

Страница 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

Ваши права

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