новый мегагигасуперкрутой эмулятор для буханки

emulators

Postby TS-Labs » 27 May 2013, 08:19

zxmak wrote:на нелюбимом тут форуме есть созданная мной ветка по поводу таймингов пентагона, там есть скрины с риалов и результаты различных эмулей.

Можно линку, плз?
lvd wrote:но тем не менее тоже дем, которым это критично -- я не видел.

Stellar где в этой части: http://www.youtube.com/watch?feature=pl ... r0g#t=137s
TS-Labs
 
Posts: 1150
Joined: 19 Apr 2010, 10:10
Location: Wildest West
Group: Registered users

Postby deathsoft » 09 Jul 2013, 21:32

zxmak wrote:в унриал вообще тайминги пентагона довольно далеки от риала - разница порядка 5-6 тактов, т.е. ошибка более чем 8 пикселов. Кроме того в унриал иногда при отладке замечал недостачу в 1-2 такта на выполнении больших процедур.


Если речь о вот этой таблице с говнофорума:
Результаты такие:
Unreal: 17990 -> 17991
Spectaculator: 17981 -> 17982
Fuse: 17989 -> 17990
Spin: 17988 -> 17989
SpecEmu: 17987 -> 17988
ZXMAK: 17987 -> 17988
ZXMAK2: 17987 -> 17988 (в последней версии 2.7.3.0 исправлно - теперь 17984->17985)

то в унриале в настройках улы есть параметр start of paper, сколько там выставлено, столько тест и будет показывать. (В дефолтном ини файле в этом параметре 17989), поменяй на 17986 и будет как в zxmak2. Т.е. проблема вообще не в эмуляторе, а в настройках улы, которые просто ктото не точно замерил, либо на его пентагоне были такие значения.
User avatar
deathsoft
 
Posts: 4671
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby zxmak » 09 Jul 2013, 21:44

deathsoft wrote:поменяй на 17986 и будет как в zxmak2

не будет. этот параметр в unreal может только хуже сделать, исправить им ничего не получится, т.к. при его изменении сдвинется тайминг развертки бордюра. Чтобы пофиксить, нужно тайминги эмуляции Z80 исправлять, а это чревато тем что все тайминги процессора поплывут. И нужно все тайминги тестить и фиксить с нуля. Возможно конечно, что все само пофиксится, если исправить ошибки таймингов обращения к портам, но не факт.

В ZXMAK2 тайминги оттачивались под contended memory, т.к. с contended memory при малейшей ошибке таймингов все сразу плывет
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby zxmak » 09 Jul 2013, 21:57

deathsoft wrote:Т.е. проблема вообще не в эмуляторе, а в настройках улы, которые просто ктото не точно замерил, либо на его пентагоне были такие значения.


проблема именно в эмуляторе, т.к. с текущей реализацией в unreal добиться таймингов близких к оригиналу Pentagon невозможно, сколько параметры не меняй.
Как это ни парадоксально звучит, но точно эмулировать ULA пентагона сложнее чем оригинальный спектрум c contended memory :crazy:
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby deathsoft » 09 Jul 2013, 22:19

zxmak wrote:Возможно конечно, что все само пофиксится, если исправить ошибки таймингов обращения к портам, но не факт.

В пентагоне нету никакой контентед памяти, и тайминги обращения к портам взяты из доки на z80 (порты в пентагоне тоже не тормозятся). Сигнал /wait в пентагоне не используется, процессор всегда получает доступ к памяти по первому требованию.
User avatar
deathsoft
 
Posts: 4671
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby zxmak » 09 Jul 2013, 23:03

deathsoft wrote:В пентагоне нету никакой контентед памяти, и тайминги обращения к портам взяты из доки на z80 (порты в пентагоне тоже не тормозятся). Сигнал /wait в пентагоне не используется, процессор всегда получает доступ к памяти по первому требованию.


Я к чему про contended memory упомянул, на софте критичном к contended memory очень удобно тайминги отлаживать - малейшая ошибка и все плывет, ошибки сразу заметно. Без contended memory такого эффекта нет и ошибки не заметно.

Речь идет о таймингах внутри инструкции - на каком такте запись в порт/память происходит и т.п. Если ты изменишь тайминги в ini файле unreal, то поплывет мультиколор бордюра. Чтобы его скорректировать, прийдется фиксить в коде эмуляции Z80 тайминги обращения к портам. Поэтому с помощью ini ничего исправить не получится.

Но даже если это исправить, у пентагона есть еще фишка что очередность выборки аттрибута/пикселов меняется, если в момент чтения было обращение процессора к памяти. В итоге выборка аттрибутов/пикселов в двух соседних кадрах будет производиться на разных тактах. Это пока ни в одном эмуляторе не эмулируется...


кстати тайминги в ini файле unreal правильные. Ошибки эмуляции мультиколора для пентагона в unreal именно из-за неправильной эмуляции таймингов Z80. А следовательно, можно сделать вывод что для скорпиона в unreal тоже будут некорректный мультиколор, т.к. код Z80 тот-же самый.
Ошибки таймингов в Unreal небольшие - +-5 тактов и в большинстве мультиколорных дем они будут незаметны, но они есть и 5 тактов - это весьма существенная ошибка.
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby deathsoft » 09 Jul 2013, 23:23

zxmak wrote:прийдется фиксить в коде эмуляции Z80 тайминги обращения к портам

Alone Coder в свое время разбивал все тайминги инструкций пишущих в память на части, часть тактов добавлялась до записи в память, часть после (это все есть в текущей версии), с записью в порты все проще, там сразу добавляется нужное число тактов и все, т.к. запись в порты в пентагоне ни на что влияет и ни с пикселями ни с атрибутами никак не связана.

Вот пример таких разбитых на 2 части таймингов:
Code: Select all
Z80OPCODE op_22(Z80 *cpu) { // ld (nnnn),hl
   unsigned adr = cpu->MemIf->rm(cpu->pc++);
   adr += cpu->MemIf->rm(cpu->pc++)*0x100;
   cpu->memptr = adr+1;
//   wm(adr, cpu->l);
//   wm(adr+1, cpu->h);
//   cpu->t += 12;
   cpu->t += 9;
   cpu->MemIf->wm(adr, cpu->l);
   cpu->t += 3;
   cpu->MemIf->wm(adr+1, cpu->h);
//Alone Coder
}

Рвньше сразу добавлялось 12 тактов, потом AloneCoder сделал разбивку на 9 и 3 именно отлаживая какието критические мультиколоры. Каждая такая запись в память может влиять на отрисовку (если адрес принадлежит экрану, и собственно только тогда текущий счетчик тактов и влияет на отрисовку, и тогда критично разбит тайминг на 2 или нет). Правда AloneCoder исправил далеко не все инструкции работающие с памятью.

Посмотрел твои сорцы, у тебя даже тайминги команд чтения памяти разбиты на части, для пентагона нужно только команды пишущие в память разделять, для контентед памяти видимо еще и читающие нужно.
User avatar
deathsoft
 
Posts: 4671
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby zxmak » 09 Jul 2013, 23:43

deathsoft wrote:запись в порты в пентагоне ни на что влияет и ни с пикселями ни с атрибутами никак не связана


как это не влияет, еще и как влияет, для порта #FE на бордюр, а для #7FFD и на аттрибуты влияет и на пикселы
Last edited by zxmak on 09 Jul 2013, 23:48, edited 1 time in total.
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby zxmak » 09 Jul 2013, 23:46

deathsoft wrote:для контентед памяти видимо еще и читающие нужно


для контендед памяти не только читающие, но и такие которые к памяти на самом деле не обращаются (обычно если значение IR попадает в зону медленной памяти). С портами для contended memory еще сложнее.
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby deathsoft » 09 Jul 2013, 23:58

zxmak wrote:как это не влияет, еще и как влияет, для порта #FE на бордюр, а для #7FFD и на аттрибуты влияет и на пикселы

Да, эти влияют, чтото я не посмотрел, что внутри out вызывается update_screen.
User avatar
deathsoft
 
Posts: 4671
Joined: 07 Apr 2007, 00:58
Group: Registered users

PreviousNext

Return to Эмуляторы

Who is online

Users browsing this forum: No registered users and 1 guest

cron