Просмотр полной версии : Прохождения игр в формате 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
Пытаюсь найти RZX файл прохождения для игры Robin of the Wood: http://www.worldofspectrum.org/infoseekid.cgi?id=0004177
Но ничего не нашёл. Может у кого-то есть?
у меня есть, держите.
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-е.
Спектакулятор и 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.
На счёт спектакулятора, у него отладчик глючный. Его поведение во время прерываний разное, зависит от того выполняется код по шагам или запущена эмуляция. Поэтому под отладчиком в спектакуляторе можно много магических эффектов обнаружить :)
А я тест не под отладчиком гонял, а напрямую.
во флаге 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, и на реальных процессорах - тест висит, как положено.
Так, да не так. При определенных условиях, несмотря на то, что во время команды 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
кстати, в эмуле inkspector2 есть скринсейвер rzx. второй год работает. Иногда свежие rzx-ксы добавляю. Удобно.
Lethargeek
02.10.2020, 21:42
кстати, в эмуле inkspector2 есть скринсейвер rzx.
нету в нём скринсейвера, он отдельно (и вообще появился раньше, чем этот эмуль)
Устанавливается совместно с эму, тут с какой стороны смотреть. Работает конечно без эму. Останемся кажный при своем м.
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 и случается, а в остальное время всё правильно
Господа, а удаленные "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 я так и не нашёл, хотя видос на ютубе есть.
Где-нибудь точно существуют. Может что-то есть здесь
Дык у них на http://www.rzxarchive.co.uk/ и перебрасывает ))
Shadow Maker
25.02.2021, 22:03
Господа, а удаленные "Distribution denied" прохождения c http://www.rzxarchive.co.uk/ у кого-нибудь существуют в природе?
Так они их изначально не выкладывали. Так что они не удаленные, а только для держателей rzxarchive.
Так они их изначально не выкладывали. Так что они не удаленные, а только для держателей rzxarchive.
То есть это не представители Code Masters приходят и предъявляют удалить их игры? Там вроде как-то по определенным компаниям удалено, которые активничают с копирайтом.
Shadow Maker
25.02.2021, 23:00
То есть это не представители Code Masters приходят и предъявляют удалить их игры? Там вроде как-то по определенным компаниям удалено, которые активничают с копирайтом.
Нет, это представитель rzxarchive просто не выкладывает игры, которые denied на WoS. Сами себя ограничили.
Нет, это представитель rzxarchive просто не выкладывает игры, которые denied на WoS. Сами себя ограничили.
Странные какие-то - в новостях "Evgeniy Suhomlin submitted Delta's Shadow", а там denied сразу. Ну тем лучше, ничего искать не надо )
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot