PDA

Просмотр полной версии : Прохождения игр в формате RZX



Oleg N. Cher
20.10.2016, 01:56
Господа, может быть кто-то из форумчан занимался записью прохождения игр в формате RZX. Есть пара вопросов.

Какой эмулятор лучше всего использовать? Я столкнулся с тем, что некоторые RZX-файлы не воспроизводятся на некоторых эмуляторах. И это связано не только с тем, что запись велась на одной модели Спектрума [+2, +3], а воспроизводящий эмуль не поддерживает эту модель. Иногда RZX начинает вполне чудно воспроизводиться, но в процессе вылетает ошибка, насколько я понял, синхронизации.

http://i.piccy_.info/i9/4ea80dfa45e5f0bbf43d06d05cecba45/1476917286/7324/1081357/ZXSpin.png

И заранее нельзя сказать, довоспроизводится ли файл до конца нормально или вылетит. К слову сказать, такое в основном бывает при воспроизведении в эмуле, отличном от того, в котором велась запись.
Размер получаемых RZX иногда очень различен при использовании разных эмуляторов. Самые компактные даёт Spectaculator. Можно ли как-то почистить RZX, чтобы он стал меньшего размера? (подозреваю, что нет, но уточнить надо)
И вообще - поделитесь, пожалуйста, опытом, если есть что сказать. Ссылки даже на англоязычные ресурсы приветствуются.

Извиняюсь если тема уже когда-то поднималась, просто не нашёл.

P.S. Соревновательные запароленные RZX не интересуют вообще.

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

2) RZХ файл содержит внутри снап-файл(-ы) (.sna, .z80, .szx) и последовательность(-и) значений чтений портов, которые могут быть сжаты zip-библиотекой. Чем более эффективна в плане сжатия используемая zip-библиотека, тем меньший размер файла на выходе. Также размер RZX файла может быть увеличен за счет разделения длинных последовательностей значений портов на несколько меньших, и сохранении нескольих снапов внутри RZX, что дает некоторые преимущества в работе с RZX файлом. А, и ещё один момент - в RZX формате есть встроенная возможность слегка уменьшить размер IN-последовательностей, кодируя одинаковые фреймы ссылками на предыдущий, которой эмуляторы-писатели могут пользоваться, а могут и не пользоваться, понадеявшись на zip.
Почистить можно - пережать RZX более эффективным RZX/zip-пакером, конечно, с учетом особенностей формата.

3) Вот тут: (http://zx-pk.ru/threads/23797-testirovanie-emulyatorov.html?p=852117&viewfull=1#post852117) я расписал изначальный баг формата RZX, и отношение к нему разных эмуляторов. Насколько я знаю, других багов у формата RZX нет, так что все остальные несовместимости RZX на совести авторов эмулей.


Если не сложно, поделитесь информацией, на каких эмулях писались проблемные RZX файлы, и на каких они не читались, а также было бы неплохо получить и сами проблемные RZX-файлы в аттаче. Ну и статистика по размерам RZX файлов тоже интересна.

Oleg N. Cher
20.10.2016, 04:10
Что касается проблемных RZX, то я их не столько писал, сколько брал с архива rzxarchive.co.uk (http://rzxarchive.co.uk). Играю их сначала стареньким ZXSpin V0.504, а почему именно им? Где-то читал, что советуют для записи RZX использовать именно старую версию ZXSpin, и на rzxarchive довольно много проходилок писалось ZXSpin'ом, соответственно, я решил, что и воспроизводить свои родные записи он будет лучше прочих. Хотя в последнее время очень часто используют Spectaculator. А попадаются и RZX с внешним снапшотом, которые берёт только один эмуль, забыл какой (по-мойму Unreal?).

Если ZXSpin затыкается, беру EmuZWin, FUSE или тот же Spectaculator. Пробовал ими всеми писать одну и ту же игру, и очень удивился тому, что, например, Spectaculator даёт в результате RZX размером в 50 кб, а EmuZWin или FUSE больше 100.

Все просмотренные RZX я упорядочиваю по жанрам и помечаю, каким эмулем каждый файл корректно играется. Если интересно, могу поделиться этой базой в формате cat-плагина к Total Commander (который хранит древовидную структуру папок/файлов).

Все файлы в моей коллекции взяты с rzxarchive.co.uk (http://rzxarchive.co.uk).

Spectramine
20.10.2016, 05:47
Вот кстати ZXSpin V.5 как раз и выдает RZX-ы с EI в конце фрейма (он не знает, что сразу после EI прерывание невозможно), что создает головную боль для эмулеписателей. Так что для записи новых RZX я бы его не рекомендовал. SpecEmu знает об глюке RZX, и для совместимости с RZX архивом проигрывает неоднозначные файлы совместимо с ZXSpin, а при записи старается неоднозначность обходить.

Поделитесь, пожалуйста, своей базой. Возможно, есть ещё какие-то скользкие места RZX, о которых я не знаю.

Oleg N. Cher
20.10.2016, 13:24
SpecEmu - это для меня вообще незнакомый эмулятор. Я сначала даже подумал, что он для DOS. Буду разбираться.

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

Вот моя база, прикладываю в архиве.
58542

В скобочках в именах файлов указан эмулятор, например:

Beastie Feastie [-][+2a][Spectaculator].rzx
Action Farce II [-][128k][noAY][EmuZWin].rzx

Если эмулятор не указан, значит это старый ZXSpin.

И ещё момент. Если есть связь с людьми, записывающими прохождения, можно ли им подать идею игры? Мне хотелось бы увидеть, например, прохождение симулятора подлодки Ocean Conqueror (http://www.worldofspectrum.org/infoseekid.cgi?id=0003482).

Spectramine
20.10.2016, 21:47
Прогнав практически все игры из базы, отмеченные другими эмуляторами, на Spectaculator-е, делаю вывод: Spectaculator проигрывает почти всё. Ломают плейбек только ситуации с EI в конце фрейма - Spectaculator для совместимости с старым ZX Spin считает, что после EI идет вход в прерывание, хотя z80 так себя не ведёт. Но в данном списке есть только файлы с ZX Spin-овской логикой их обработки. Так что эмулеписателям стоит для совместимости придерживаться её, либо как-то обрабатывать оба варианта.

У меня связи с людьми, записывающими прохождения, нет, увы. Может, кто-то из форумчан сподвигнется.

Что касается откатов (Rollback) - они точно есть в Spectaculator-e, Fuse, EmuzWin, и SpecEmu. В ZX Spin вроде как тоже есть, хотя я их там не нашел.

NEO SPECTRUMAN
20.10.2016, 23:52
Какой эмулятор лучше всего использовать?
Тот на котором и было записано. Именно той же версии.
И при записи своего нужно обязательно точно указывать в чем было оно записано
(а не просто какой то там EmuZWin...)

смотрим как это сделано на http://www.emu-land.net/consoles/dendy/movies

и будет всем счастие...

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

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

Oleg N. Cher
21.10.2016, 18:30
И при записи своего нужно обязательно точно указывать в чем было оно записаноВ самом RZX есть тег с название эмулятора, в котором файл был создан. Но, увы, версия почему-то указана только для Spin.

http://i.piccy_.info/i9/615d1d8c012832c0254c16ca95a5ab9a/1477063730/16042/1065564/RZX.png

Spectramine
04.11.2016, 21:03
В самом 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. Я этот вопрос выяснить до конца не смог. Скорее всего баг, но какова его логика, непонятно.65699

ZXMAK
08.07.2018, 03:34
Пытаюсь найти RZX файл прохождения для игры Robin of the Wood: http://www.worldofspectrum.org/infoseekid.cgi?id=0004177
Но ничего не нашёл. Может у кого-то есть?

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

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

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, 12:55
Благодаря 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-е.

ZXMAK
10.07.2018, 13:10
Спектакулятор и 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;
}


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

Spectramine
10.07.2018, 13:58
а в чём неправильность? 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.



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

ZXMAK
10.07.2018, 17:08
во флаге P/V после команды LD A,I/R _всегда_ должен быть 0 на NMOS процессоре Z80

Флаг P устанавливается в двух случаях:
- если IFF2=1 и IFF1=0 (прерывания были разрешены, но запрещены входом в обработчик NMI)
- если IFF2=1 и INT=0 (прерывания разрешены и нет сигнала прерывания)

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

по сути именно то что вы и сказали. Именно так работает ZXMAK2

Spectramine
10.07.2018, 18:43
Так, да не так. При определенных условиях, несмотря на то, что во время команды LD A,R приходит сигнал INT прерывания (т.к. после неё идет вход в обработчик), во флаг P/V заносится 1 (на Спектакуляторе и ZXMAK2). Посмотрите код теста в этом сообщении (http://zx-pk.ru/threads/27033-prokhozhdeniya-igr-v-formate-rzx.html?p=970613&viewfull=1#post970613), он несложный, и скажите, должен ли тест выходить в бейсик, если ошибка процессора эмулируется правильно. А тест выходит в бейсик - на ZXMAK2 и Спектакуляторе. А на SpecEmu, Fuse, Unreal, и на реальных процессорах - тест висит, как положено.

ZXMAK
10.07.2018, 19:16
Так, да не так. При определенных условиях, несмотря на то, что во время команды LD A,R приходит сигнал INT прерывания (т.к. после неё идет вход в обработчик), во флаг P/V заносится 1 (на Спектакуляторе и ZXMAK2).

хм... такое может быть только если на последнем такте LD A,R прерывания нет. А на следующем такте уже есть.
Впринципе тут есть ньюанс, на реальном Z80 прерывание проверяется на последнем такте инструкции, а начинает обрабатываться на следующем такте. А в ZXMAK2 прерывание проверяется перед началом цикла M1. Поэтому эмулятор сразу обрабатывает прерывание, а реальный процессор в такой ситуации по инерции выполнит еще одну инструкцию. Которая будет уже при INT=1. Если это действительно так на реальном железе, то надо фиксить.
Вообще неприятный баг, его исправление может сдвинуть на 1 такт тайминги. Поэтому если его фиксить, то надо всё перепроверять.

Lethargeek
02.10.2020, 20:36
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

zebest
02.10.2020, 21:01
кстати, в эмуле inkspector2 есть скринсейвер rzx. второй год работает. Иногда свежие rzx-ксы добавляю. Удобно.

Lethargeek
02.10.2020, 21:42
кстати, в эмуле inkspector2 есть скринсейвер rzx.
нету в нём скринсейвера, он отдельно (и вообще появился раньше, чем этот эмуль)

zebest
02.10.2020, 21:59
Устанавливается совместно с эму, тут с какой стороны смотреть. Работает конечно без эму. Останемся кажный при своем м.

Spectramine
03.10.2020, 09:42
то есть этот Amaurote НЕ должен воспроизводиться до конца, если ei/di задерживают прерывание как положено?
Да.


а есть примеры, где такой сбой раньше должен произойти?
Не помню, у меня вроде нет. Я его на максимальной скорость прокручивал.


только это не то чтобы "баг формата", а скорее эмуляторов, неверно его толкующих
Да, это баг эмуляции Z80 несовершенными эмуляторами, прописавшийся в записанные ими RZX. Так же, как и с LD A,I/R.

Lethargeek
05.10.2020, 21:01
Да, это баг эмуляции Z80 несовершенными эмуляторами, прописавшийся в записанные ими RZX. Так же, как и с LD A,I/R.
причём вполне может быть, что в некоторых эмулях этот баг только при записи rzx и случается, а в остальное время всё правильно

ultra
25.02.2021, 21:18
Господа, а удаленные "Distribution denied" прохождения c http://www.rzxarchive.co.uk/ у кого-нибудь существуют в природе?

Oleg N. Cher
25.02.2021, 21:41
Господа, а удаленные "Distribution denied" прохождения c http://www.rzxarchive.co.uk/ у кого-нибудь существуют в природе?Где-нибудь точно существуют. Может что-то есть здесь:

https://www.zx-spectrum.cz/index.php?cat1=3&cat2=10

Но не всё. rzx'шку игры Wonder boy я так и не нашёл, хотя видос на ютубе есть.

ultra
25.02.2021, 21:57
Где-нибудь точно существуют. Может что-то есть здесь

Дык у них на http://www.rzxarchive.co.uk/ и перебрасывает ))

Shadow Maker
25.02.2021, 22:03
Господа, а удаленные "Distribution denied" прохождения c http://www.rzxarchive.co.uk/ у кого-нибудь существуют в природе?
Так они их изначально не выкладывали. Так что они не удаленные, а только для держателей rzxarchive.

ultra
25.02.2021, 22:10
Так они их изначально не выкладывали. Так что они не удаленные, а только для держателей rzxarchive.

То есть это не представители Code Masters приходят и предъявляют удалить их игры? Там вроде как-то по определенным компаниям удалено, которые активничают с копирайтом.

Shadow Maker
25.02.2021, 23:00
То есть это не представители Code Masters приходят и предъявляют удалить их игры? Там вроде как-то по определенным компаниям удалено, которые активничают с копирайтом.
Нет, это представитель rzxarchive просто не выкладывает игры, которые denied на WoS. Сами себя ограничили.

ultra
25.02.2021, 23:21
Нет, это представитель rzxarchive просто не выкладывает игры, которые denied на WoS. Сами себя ограничили.

Странные какие-то - в новостях "Evgeniy Suhomlin submitted Delta's Shadow", а там denied сразу. Ну тем лучше, ничего искать не надо )