PDA

Просмотр полной версии : Программа для теста видео таймингов Pentagon 128



Saar
03.02.2016, 04:51
Не могу найти какую-нибудь вразумительную прогу для Pentagon 128 для проверки видео таймингов.
На одном из сайтов нашел скрин:
http://zx-pk.ru/attachment.php?attachmentid=55852&d=1454464361&thumb=1&stc=1
Что это за прога и где скачать можно?

zebest
03.02.2016, 09:58
какую-нибудь вразумительную прогу для Pentagon 128 для проверки видео таймингов.
Неужели хочешь проверить правильность таймингов в MiSt-e ?
Ну именно этот тест от великого VNN не нашелся сразу,земля ему пухом, но другой нашелся, в архиве.
Там же есть парочка тестов для проверки таймингов 48к и 128к.
А вообще то тайминги Пентагон-а правильно проверять в Rage в полной версии, но доооолго.. Поэтомуу в архиве только усеченная.

Saar
03.02.2016, 13:01
Неужели хочешь проверить правильность таймингов в MiSt-e ?
А что в этом удивительного?
Я написал эмулятор ZX Spectrum 128 с таймингами идентичными оригинальному с ULA.
Теперь хочу сделать опцию переключения на тайминги Pentagon 128, а каких-то понятных тестов не нашел. Есть некоторые демки, но по ним сложно понять как должно выглядеть и что именно неправильно.
Кстати, а на Speccy2010 тайминги идентичные оригинальному Pentagon 128?

Saar
03.02.2016, 14:46
Так я буду проверять на соответствие таймингам Speccy2010 или Pentagon 128? Или они одинаковы?

zebest
03.02.2016, 14:57
ну как бы сказать поточнее...
Если считать дему RAGE идеалом для Pentagon 128, то на всех без исключения эмуляторах , сам можешь проверить, вертикальные линии совпадают.
Но реальщики говорят, что вроде как есть расхождение на 1 пиксель. Или у авторов Rage был другой Пятногон, или будем все же равняЦЦа на эту демку , и примем ее за эталон. 1 пиксель можно подвинуть в эмулях, в программе его не подвинешь, там шаг 2 пикселя минимуум. Так что будем считать, что "Ашхабад - ТАМ!" (с) Кин-Дза-Дза

Saar
03.02.2016, 16:01
ULA48 и ULA128 - это для оригинального Spectrum с ULA чипом или всё-таки для Pentagon?
Что не верится, потому как на обоих вариантах кракозябры на бордюре.
Причем проверенные тесты ввиде Shock Megademo, Auquaplane и Darkstar выглядят правильно.

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

Test Border выглядит вот так:
http://zx-pk.ru/attachment.php?attachmentid=55856&d=1454504155&thumb=1&stc=1

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

zebest
03.02.2016, 16:03
Shock Megademo, Auquaplane
вовсе не показатель. Там горизонтальные линии сошлись - и то хорошо))
Есть хоть один эмуулятор, которому ты доверяешь?? Спекулятор, или еще какой? проверь в нем то же самое, и можешь сделать скриншот с кракозяблами

Saar
03.02.2016, 16:11
по Rage как-то непонятно. Такой впечатление там быстродействия сильно нехватает, ибо на бордюре картинка раза в 2 больше чем надо.
При этом скриншот выше показывает, что нужно только сдвинуть сигнал вертикальной развертки.
В Rage помимо бордюра используются какие-то еще особенности железа Pentagon 128?

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

zebest,
в Darkstar не линии а рисунок из квадратиков в верхней части бордюра.
Я не знаю какой эмулятор правильный. Попробую в спекуляторе, если говорите что там правильно.

Saar
03.02.2016, 18:16
А... понял из-за чего тормоза. В ULA 312 строк, а в Pentagon 128 - 320.
Теперь только надо сдвинуть INT.

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

Хмм. Похоже, у меня как у оригинального Pentagon 128 (судя по вашим словам) не получается совместить бордюр точно с пиксельным изображением. Либо туда один пиксел, либо сюда.
В моем эмуляторе используется точная модель Z80 (A-Z80), а не примерная как T80 - поэтому и недочет как у железа.
А в какую сторону сдвиг у бордюра? на пиксель вправо или влево?

zebest
03.02.2016, 18:51
В моем эмуляторе используется точная модель Z80 (A-Z80), а не примерная как T80
ну по поводу точности эмулирования процов - это можно отдельно поспорить, кто точнее и на совсем других тестах. Поэтому слово "примерная" - это пусть останеЦЦа частным мнением :) К формированию картинки и растра - это никаким боком.
В оригинальном Speccy2010 у SYD-a тоже сдвиг на один пиксель. Я уж не помню, как "извратился" и подвинул ровно - вроде как фазу тактирования перевернул, надо бы в исходники глянуть, может что и вспомниЦЦа.
Так что 1 пиксель несхождения - это нормально. В какую сторону в нативных - а х.з. , надо по форуму поискать, вроде была картинка. Ну или попросить владельцев...
Так а что с оригиналом Spectrum 128 с таймингами?

Saar
03.02.2016, 19:41
Я пока занимаюсь таймингами Pentagon 128. Как только закончу, вернусь к Spectrum 128.

тут какая-то странная картина вырисовывается.
Смотрите два скрина.
Я подогнал начало INT по Rage. Получилось практически точно (за исключением сдвига на пиксел).
А вот в ZebestTest сдвиг очень сильный.
Как так может быть?

5586055861

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

что интересно, в случае Rage, смещение на 1 пиксел стабильно. А вот в Zebest при каждом запуске разное. Как-то заколдованный тест. Не могу понять почему так.

zebest
03.02.2016, 19:51
А вот в ZebestTest сдвиг очень сильный.
Как так может быть?
Желательно запустить несколько раз. Для удостовериЦЦа. Может быть запросто. Настройка на первый такт не работает или слетает. Тем не менеее большинство эмулей с моей прогой согласны :) и можно и других пару-тройку найти, в которых будет ровно работать...
http://s2.micp.ru/s0Bn6.jpg


А вот этот вопрос уже к точности эмууляции процессора и команд)) В т.ч. недокументированных) а такие в тесте точно есть))

Saar
03.02.2016, 20:24
Расскажите как происходит настройка на первый такт. Если там не большой участок кода, то не могли бы его тут привести чтобы мне знать где искать. Это же ваш тест?

Saar
03.02.2016, 22:38
zebest,
у вас все демки в scl формате, который не поддерживается в моем эмуляторе. Приходится извращаться конвертирую в trd или sna.
Причем, похоже в trd не всегда корректно конвертируется.

Вообщем, судя по всему все ваши демки синхронизируются нестабильно. То есть, каждый раз разное смещение, как вы и сказали.
Приведите пример обоих настроек, если не уверены какую именно использовали.
Мне хотя бы понять что используется для этого и где искать.

Что интересно, Rage всегда одинаково синхронизируется. Еще EyeAche правильно работает. Там, правда эффекты не на бордюре, а на самом экране, но тоже очень точно надо выдерживать тайминги.

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

Сравнивать с компьютерными эмуляторами неправильно, ибо там принцип эмуляции "оффлайновый", в отличие от FPGA.

goodboy
03.02.2016, 22:46
Мне хотя бы понять что используется для этого и где искать.
out (c),0 точно эмулируется ?

Saar
03.02.2016, 22:49
goodboy,
А в чем подвох может быть в этой простой команде? Объясните.

Saar
03.02.2016, 23:23
В аттаче тот же самый Rage, который синхронизируется как хочет в почти любом эмууле, правильно только в Спекуляторе.
Дык, это же SNA и снапшот снят уже после процедуры синхронизации. Посему и получается по сути без синхронизации.

zebest
03.02.2016, 23:23
А в чем подвох может быть в этой простой команде?
Она хоть и простая, но недокументированная относительно, и на разных процессорах выдает разный результат.
Кстати ,если тест запустить в Unreal-e с поддержкой TS-conf - то можно разниЦЦу увидеть невооруженным взглядом)
Ну или на реальной Пентеве.

Saar
03.02.2016, 23:52
Ну вернее подпрограмму основную могу одну выложить...

а вот кстати и вторая подпрограмма нашлась
хмм.. ничего особенного не вижу. Думал, что там какие-то хитрые чтения с портов или еще что-то.

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


Кстати ,если тест запустить в Unreal-e с поддержкой TS-conf - то можно разниЦЦу увидеть невооруженным взглядом)
Расскажите поподробнее, что за TS-Conf?
Судя по всему этот unreal распространяется в разобраном виде: ни РОМов ни конфигов. Там хрен поймешь что и куда. Я уж даж не говорю чтобы что-то протестировать в нем и увидеть разницу.

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


Переделал с ней. проверь.
zebest2016 не работает. Появляется скрин с черным бордюром, а через секунду ресет наступает.

zebest
04.02.2016, 01:12
Расскажите поподробнее, что за TS-Conf?
Это еще одна из сказок Шахеризады. Можно 1000 и одну ночь рассказывать. Конфа Пентевы с блек-джеком, институтками, тайлами и спрайтами, которую вполне можно попытаЦЦа портировать да жи на MiSt. Адепты оной есть по обе стороны баррикад:) Unreal настроенный, из-каропки, там же
http://zx-pk.ru/showthread.php?t=26125&p=854800&viewfull=1#post854800
http://s1.micp.ru/cSiP0.jpg

так по идее выглядел бы тест на реальной Пентеве, и на правильном эмууле, но чет в последней версии они кое-что поломали, или оптимизировали. Художникам - виднее.



zebest2016 не работает. Появляется скрин с черным бордюром, а через секунду ресет наступает.
ну что, не поленился, включил Speccy2010. Обе версии работают ровно. Какая отсюда мораль ?

Saar
04.02.2016, 02:33
Запустил Shock Megademo на якобы самом правильном эмуляторе Spectacular в режиме Spectrum 128 и... упс... Не работает первая часть с цветными полосами. Эмулятор в ресет уходит. Зато ваш тест ULA128 на нем работает правильно. Такое впечатление, что тест этот для эмуляторов написан, а не для реального Spectrum 128.
У Spectrum 128 и Pentagon 128 одинаковое количество тактов в строке 224. Однако ваш ULA128 на моем эмуляторе имеет косые искажения вертикальных линий, что по определению быть не может. Рисунок может сдвинуться вверх/вниз, но никак не по диагонали.
Но и по вертикали он сдвинуться не может, потому как Shock Megademo 100% писан для Spectrum 128 и несовпадение даже на одну линию по вертикали сильно исказит радугу.
Отсюда вывод - ваш ULA128 тест не для Spectrum 128.
Я в своем эмуляторе использовал модель ZX_ULA с Opencores - он основан на восстановлении модели посредством спиливания реального кристалла.

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


ну что, не поленился, включил Speccy2010. Обе версии работают ровно. Какая отсюда мораль ?
Выводы по SNA файлу делать нельзя. Нет уверенности в полной совместимости системы. Вы-то наверняка снапшот на прошивке Pentagon 128 делаете, а уменя прошивка Spectrum 128. В ОЗУ могут мешать какие-то данные, не совпадающие между прошивками.
Нужно TAP или TRD чтобы прога загрузилась правильно и выполнилась сначала, а не с сохраненного момента.

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

Ан нет. 224 это у ZX48.. 228 у ZX128 Опять ребус... Но Shock Megademo на Spectacular в ZX128 не работает. Только в ZX48 и без звука.

molodcov_alex
04.02.2016, 08:47
но чет в последней версии они кое-что поломали, или оптимизировали
Где баг репорты? :) То, что ваш тест неправильно показывается - это беда, и уже догадываюсь почему. В ближайшее время постараюсь исправить. По идее, если загрузить с диска, например, то будет работать правильно (главное чтобы сервис меню отрабатывало и настраивало "железо").
А out (c), 0 в конфиге настраивается.

Кстати, раз разговор про тесты таймингов, не подкинете аналогичных для скорпиона?

Saar
04.02.2016, 10:14
zebest,
я совсем недавно на этом форуме, потому не весь жаргон улавливаю.
Где искать этого zst. Это его ник на данном форуме или где?

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

Кстати, тайминги в Shock Megademo переключаются автоматически между ZX48 и ZX128. То есть поддерживаются режимы 224х312 и 228х311. Однако, это не значит что тайминги могут быть +-лапоть. Я подвинул INT на пару тактов и сразу куча артефактов вылезла.
Но ваши тесты ULA48 и ULA128 всё равно неправильно показывают на моем эмуляторе. Диагонального сдвига больше нет, но вертикальный сдвиг неравномерный. Нижняя часть намного сильнее вверх сдвинута чем верхняя. То есть тут простыми подстройками вверх/вниз/влево/вправо не поможешь. Даже не могу понять в чем именно нестыковка получается. Вы эти тесты пробовали на реальных ZX48 и ZX128 с ULA чипом?

zebest
04.02.2016, 10:25
Вы эти тесты пробовали на реальных ZX48 и ZX128 с ULA чипом?
http://savepic.net/3410274.jpg
Кто нибудь, да и на реалах пробовал. ФСЕ!! эмуули не могут ошибаться, (и сто тысяч бурундучков - то жи) ,уж они то в этих режимах точно проверены
Просто примите за аксиому, что вот ТАК должно быть, и "пилите Шура, пилите..."(с)

Saar
04.02.2016, 10:31
5586955870

Судя по характерным признакам, данные тесты предполагают что тормоза Contended Memory происходят только в момент вывода пикселей, а в моем эмуляторе это происходит всегда.
Осталось найти где-то инфу на этот счет чтобы понять какой вариант правильный.

zebest
04.02.2016, 10:45
вот это предположение ближе к истине. про Contended Memory писано-переписано за последние столетия куча всего.
но это что касается 48го. в 128 вроде тут другая проблема . Скорее всего проблема и в процессоре, попробуйте заменить на "приблизительный" :))) Т80, и посмотреть, будет ли разниЦЦа.


Где искать этого zst. Это его ник на данном форуме или где?
http://zx-pk.ru/member.php?u=4746
Довольно часто появляется. Напишите в личку, может поделится программкой для народа:)


Где баг репорты? То, что ваш тест неправильно показывается - это беда, и уже догадываюсь почему. В ближайшее время постараюсь исправить. По идее, если загрузить с диска, например, то будет работать правильно (главное чтобы сервис меню отрабатывало и настраивало "железо").
А out (c), 0 в конфиге настраивается.
[/off]
Кстати, раз разговор про тесты таймингов, не подкинете аналогичных для скорпиона?
Баг-репорты?? так будут. Мне много не надо. Мне тайминги Пентагона чтобы были а5 нормальные, снапшоты грузились, zip архивы. В ts-conf-у я не лезу:)
Про "out (c), 0 в конфиге " - не знал. посмотрю, видимо недавно опция.
Про аналогичные картинки для Скорпиона - сложно. Вернее нарисовать не сложно, сложно живых владельцев найти, для тестирования. А так еще рисовал для ZXM c его замороченными таймингами, для Профи с родной разверткой, для турбо в конфе вроде тоже пробовал, интересно получается)

Saar
04.02.2016, 15:17
про Contended Memory писано-переписано за последние столетия куча всего.
не могли бы поделиться ссылкой про это?
Хочется посмотреть чистые формулы. А то изучаю по разным исходникам, где это обычно размазано по всему коду и суть теряется.

zebest
04.02.2016, 15:30
Это бы у эмуулеписателей поспрашивать, которые уже все знают, и которые тут есть на форуме.
а по поводу ссылок - ну из общеизвестных
http://www.worldofspectrum.org/faq/reference/48kreference.htm#Contention
http://www.zxdesign.info/memContRevision.shtml
http://scratchpad.wikia.com/wiki/Contended_memory
Парочка тестов существует, насколько помню. А если в исходниках и коде смотреть - попробуйте в Speccy2010 посмотреть как сделано, там ПОЧТИ правильно работает в части 48 и 128, мелочи есть, но это я придираюсь, да и попрАвлять все равно некомуу :(((
Там же, тест fusetest и contention
http://www.zxdesign.info/cpld/

molodcov_alex
04.02.2016, 20:32
В ts-conf-у я не лезу
Собственно проблема как раз в ts-conf'е, при загрузке снапшотов машина сбрасывается и заодно сбрасываются настроенные под пентагон тайминги.
У пентагона на данный момент в конфиге только неправильно задано начало инта (должно быть 1 вместо 13), если это поправить и задать пятногоновскую модель памяти, то казать будет правильно.

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

для Профи с родной разверткой
Тоже интересная вещь которую надо бы цивильно оформить. Нет ли точных цифр сколько тактов на строку, размеры бордюра, где начинается инт и всякое такое? До "расшифровки" ПЗУ синхрогенератора руки пока не доходят.

solegstar
04.02.2016, 21:56
Тоже интересная вещь которую надо бы цивильно оформить. Нет ли точных цифр сколько тактов на строку, размеры бордюра, где начинается инт и всякое такое? До "расшифровки" ПЗУ синхрогенератора руки пока не доходят.
это всё по профи проверяли в zxmak2, вроде получилось. вот тема - http://zx-pk.ru/showthread.php?t=16830 . еще я ковырял синхрогенератор от тройки, вот тут описание и ссылка на пдф - http://zx-pk.ru/showthread.php?t=11709&p=555428&viewfull=1#post555428

molodcov_alex
05.02.2016, 01:27
Дико извиняюсь что развёл тут злостный оффтоп, но есть ещё один вопрос по профику.
solegstar, спасибо за ссылки, стандартный режим оригинального синхрогенератора интересен, но расширенный режим гораздо интереснее. Пробежался по ссылкам, но информации по нему практически не нашёл. Кажется в теме про ZXMAK посты почищены. Или я что-то проглядел?

solegstar
05.02.2016, 01:45
Пробежался по ссылкам, но информации по нему практически не нашёл. Кажется в теме про ZXMAK посты почищены. Или я что-то проглядел?
возможно, но можно глянуть исходники эмуля, ссылки есть в первом сообщении. там вроде довольно понятно описано. по описанию стандартного экрана можно сделать описание расширенного. гляну завтра, что там.

zebest
05.02.2016, 02:02
Собственно проблема как раз в ts-conf'е, при загрузке снапшотов машина сбрасывается и заодно сбрасываются настроенные под пентагон тайминги.
У пентагона на данный момент в конфиге только неправильно задано начало инта (должно быть 1 вместо 13), если это поправить и задать пятногоновскую модель памяти, то казать будет правильно.
Если в биос-е INT Offset:1 - тогда вроде кажет ровно..Но!!!... Но другая проблема. Проверял все на том же rage_fix.trd
Если подгрузить образ, и резет-ить, чтобы он подхватился - то:
1.Если войти в биос Shift+F12 и выйти по F12 - то все Ок.
2.Если жать Ctrl+F12 - то фигня((, я так думаю врубается режим Pent512, в котором Rage не работает, или работает неправильно.
Ну и снапшоты как то не так работают, пока не разобрался

molodcov_alex
05.02.2016, 12:26
zebest, но это всё, я так понимаю, при включённой TS-Conf. Собственно, как я и писал, при сбросе куда угодно кроме Service ROM всякие регистры, в том числе отвечающие за INT Offset оказываются не настроенными. Значит надо сделать чтоб при ресете выставлялись дефолтные настройки под пентагон. Или брать их из вкладки ULA, надо подумать...
Но я всё-таки говорил про чистый пентагон, как, например, в этом конфиге: https://yadi.sk/d/g1WUndQFoKpzG

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


можно глянуть исходники эмуля
Поглядел исходники, так понимаю что:
- тактов на строку: 192
- бордюр сверху: 8 строк
- бордюр снизу: 8 строк
- бордюр слева: 16 тактов (64 точки), в комменте - real 3.xx=6
- бордюр справа: 16 тактов (64 точки), в комменте - real 3.xx=10
- 64 строки (72 - 8) вертикального бланкирования (слово-то какое, никак blanking не могу из головы выкинуть)
- 32 такта (128 точек) горизонтального бланкирования
Смущает что итого 320 строк на кадр, это как-то по пентагоновски.

solegstar
05.02.2016, 12:51
Смущает что итого 320 строк на кадр, это как-то по пентагоновски.
та да, я гляну прошиву на сколько оно близко к реалу)

daniel
05.02.2016, 14:06
Не могу найти какую-нибудь вразумительную прогу для Pentagon 128 для проверки видео таймингов.
рекомендую ветку прочитать вот здесь с середины страницы:

http://forum.tslabs.info/viewtopic.php?f=31&t=20&start=225

может многое проясниться.

solegstar
05.02.2016, 14:50
Вообщем смотрел синхрогенератор SAMX6 от третьего Профи, наверняка в 5.0х тоже самое. прошива у пятерки чуть измененная, но на построенние изображения оно не влияет. Итак:
1. начало кадра:
- 16 строк невидимого бордюра + кадровый импульс.
- еще 16 строк невидимого бордюра.
2. Верхний видимый бордюр:
- 16 строк.
3. экран:
- 240 строк
4. Нижний видимый бордюр + начало Int:
- 16 строк.
5. Нижний невидимый бордюр:
- 8 строк.
Всего: 312 строк. :)

Далее:
- 8 тактов проца = 32 пиксела.
- длина строки в тактах: 24 байта х 8 = 192 такта.
- невидимый правый бордюр: 32 пиксела.
- видимый правый бордюр: 32 пиксела.
- невидимый левый бордюр: 32 пиксела.
- видимый левый бордюр: 32 пиксела.

molodcov_alex
05.02.2016, 15:32
длина строки в тактах: 23 байта х 8 = 184 такта
Что-то где-то не сходится... 96 + 32 + 512 + 32 + 32 = 704 (бордюр слева+пиксели+бордюр справа). 704 / 4 = 176. 8 тактов я недосчитался :)

solegstar
05.02.2016, 16:17
такс, немного просчитался. тактов таки 192. левый невидимый бордюр 32 пиксела, а не 96. это если следовать аналогии с первой половиной.
получается так: 32 + 32 + 512 + 32 + 32 + 64 (строчный импульс) + 64 бланк = 768/4 = 192.

solegstar
05.02.2016, 18:42
тогда получается в расширенном режиме 4 точки за такт рисуют, а в стандартном - две. Так?? Вряд ли..

да, именно так.

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

посмотри схему профи 3.2 и картинку из 42 сообщения, когда меняется кварц на 12мгц, то тактирование счетчиков синхрогенератора не меняется, по сравнению с синклер-режимом, там один байт прошивки соотв. 8 тактам Z80. теперь смотрим картинку и сигнал FLD1 - он определяет папер(1)/бордюр(0), считаем байты и зная, что папер у нас 512 точек получаем 32 пиксела на байт, т.е. 4 точки на такт.

molodcov_alex
05.02.2016, 20:53
Надо бы и с моего профика пыль сдуть, правда у меня с дискетами тоже всё очень сложно :) Хотя...

solegstar
05.02.2016, 21:28
Мне проще картинку нарисовать и по тактам в ней посчитать))
Вобщем да, 192 такта ровно) Только цвета по бордюру - инверсные. Так и должно быть?? На реале проверять будешь? тогда сделаю ТАР-ку... Мой реал уж оченно долго собирать и он только с магнитофона грузиЦЦа.. ((

давай тапку, мне собирать чуть быстрее, а если выложишь хобету/кодовый блок, то мне проще запускать её с сд-карты будет... прямо из fatall`a. наверное я свои сообщения перенесу в другую тему... по профику...

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


Мой реал уж оченно долго собирать и он только с магнитофона грузиЦЦа.. ((
вот это не хорошо, в чем причина?

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

zebest, molodcov_alex, у меня для вас есть решение, если лутом умеете пользоваться. :)

molodcov_alex
05.02.2016, 22:41
если лутом умеете пользоваться
Могём :) Но могу и с дисководом поизощряться, благо есть где дискеты записать (древний ноут с полноценным дисководом).

zebest
06.02.2016, 00:11
http://s2.micp.ru/QPy5K.jpg
http://s1.micp.ru/3o8D8.jpg

Картинки с реалов, уж очень долго я их искал. Два года прошло все ж...

Saar
06.02.2016, 13:57
ULA48 сделал, хотя и не обошлось без ухищрений.
ULA128 пока не получается. Инфы очень мало. То что везде пишут вскользь, что всё отличие - это в 228х311 вместо 224х312, судя по всему, это не совсем так, ибо contended модель от 48к не подходит.

Кстати, ваши тесты ULA48 и ULA128 не показывают полную совместимость, поскольку, если настроив на них тайминги, загружаю Shocк Megademo - а там беда! А вы говорите, что там не нужны точные тайминги.

creator
06.02.2016, 16:30
Кстати, ваши тесты ULA48 и ULA128 не показывают полную совместимость, поскольку, если настроив на них тайминги, загружаю Shocк Megademo - а там беда!
Shock Megademo хитрый, он поддерживает 48, 128, +2A/+3. И за кого из них он восприниает эмулятор, это ещё вопрос.

Saar
06.02.2016, 18:32
Shock Megademo хитрый, он поддерживает 48, 128, +2A/+3. И за кого из них он восприниает эмулятор, это ещё вопрос.
Да, с этим проблема. Поэтому остается только запускать и смотреть как выглядит.
Заметил интересные глюки ввиде смещенного на пиксел вверх или вниз области шириной примерно в 4/8 пикселей в центре экрана, если что-то не так с таймингами. То ли демка воспринимает эмулятор как какую-то другую модель, то ли еще что-то. При этом тест ULA48 отлично выглядит. Я это пофиксил путем смещения по времени считывания BitData и AttrData.

Изначально хотел сделать такие тайминги: ZX48, ZX128, Pentagon128.
Сейчас вот думаю убрать вариант ZX128. Не могу найти достаточно инфы по таймингам как для 48К. И попутно заметил, что именно для ZX128 нет прог, использующих эти тайминги. Shock как оказалось, универсальный и ему достаточно ZX48.
А остальные демки с таймингами написаны для Pentagon128.
Кстати, Speccy2010, как оказалось, тоже не имеет режима ZX128. По крайней мере, исходники, что у меня есть, поддерживают только ZX48, P128, P1024, Sсorpion.

zebest
06.02.2016, 19:03
Speccy2010, как оказалось, тоже не имеет режима ZX128
ну да, а в менюшке - Timings Spectrum 128 - просто так написано ? (((((( Печалька.

Saar
06.02.2016, 19:18
Кстати, ULA48 всегда одинаково запускается.
Остается мистические сдвиги у тестов от Zebest на P128.

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

zebest,
Точно. Я не на ту настройку посмотрел. Есть ZX128 в таймингах.

zebest
06.02.2016, 19:46
да какое это тесты... Так, картинки на бордюре.
Но с помощью их все же удобнее настраивать визуально, чем там, где циферьки..
тут (http://zx-pk.ru/showthread.php?t=21212&p=596743&viewfull=1#post596743) с помощью циферек тестируют, только я на год? -другой? раньше тестил этим же тестом, и даже с картинкамЕ, и даже прогу немного переделал, и вопросами задавался, только тогда это никомуу не надо было
Ах да, если ты в таймингах уверен, всегда остается вопрос, насколько точен процессор и растактовка.
Пробовал на Т80 менять? Вот TV80 точно не точен в таймингах.

Saar
06.02.2016, 22:19
zebest,
я попытался на T80 поменять, но с ним тесты P128 не запускались.
Сейчас я еще с ZX48 разбираюсь. Пытаюсь понять все моменты. Может тогда какое-то озарение снизойдет :)

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

zebest,
Кстати, а почему ваш ULA48 тест всегда одинакого синхронизируется, а Zebest нет?
Там разные синхронизации?

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

zebest,
а сам тест ULA128 в каких адресах располагается? Если в >=C000 то есть вероятность что в моем эмуляторе по-умолчанию страница c contended памятью включена, а в spectaculator нет. Или наоборот.

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

Точняк! Отключил сейчас проверку на область C000 и ваш ULA128 сразу заработал как надо.
В своем эмуляторе я эмулирую DivMMC с ESXDOS. Он при запуске инициализируется и выбрасывает в Basic 48 оставляя при этом переключение страниц доступным. При этом, видимо, после инициализации подключается какая-то страница с contended памятью (3,5 или 7), куда ваш ULA128 тест и заливается по-умолчанию.

Saar
06.02.2016, 22:29
zebest,
Не могли бы вы прогнать Shock Megademo на Speccy2010 в режиме ZX128?
У меня в правом нижнем углу есть артефакты. При этом я уверен что сделал в точности так же как в Speccy2010. Никаких изменений у Speccy2010 между ZX128 и ZX48 нет кроме количества тактов в строке и количества строк.

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


но смысл?? тогда это будет другой тест
Смысл я выше описал уже. Это не имеет отношения к тесту таймингов, а какая страница в окно подключена.
Можно сделать так: сначала тест переключает на конкретную страницу памяти, потом копирует себя туда и запускается там. Это исключит неопределенности.

zebest
06.02.2016, 22:36
У меня в правом нижнем углу есть артефакты.
да:)) есть небольшая "загогулина". Я же и говорю - некому в коде разбираться, чтобы уж совсем 100% было.
и да, моя картинка, не тест, не использует доп. страницы, только стандартные, и портами не щелкает... и не настраивает их.

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


Можно сделать так: сначала тест переключает на конкретную страницу памяти, потом копирует себя туда и запускается там. Это исключит неопределенности.
Но почемуу то в эмулях и нативных машинах такой неопределенности не возникает. Может все таки что то в консерватории поправить?

Saar
06.02.2016, 22:42
да) есть небольшая "загогулина".
ну хоть одной паранойей меньше :)


Но почемуу то в эмулях и нативных машинах такой неопределенности не возникает. Может все таки что то в консерватории поправить?
Я же говорю, это из-за ESXDOS. Если я загружу тест из меню Spectrum 128, то этой проблемы не будет. Но проблема в том, что все быстрые загрузки TAP/TRD возможны только через ESXDOS в моем эмуляторе.
Если без ESXDOS, то придется перегонять в CSW и грузить медленно через виртуальный магнитофонный вход.

Поэтому я и предложил седлать в тесте подключение определенной страницы перед запуском.

Saar
07.02.2016, 13:35
zebest,
не могли бы вы прогнать ULA test 3: http://wizard.ae.krakow.pl/~jb/qaop/t/ulatest3.tap
на Speccy2010 в режимах ZX48 и ZX128, и выложить скрины?

Titus
07.02.2016, 13:53
Shock Megademo хитрый, он поддерживает 48, 128, +2A/+3. И за кого из них он восприниает эмулятор, это ещё вопрос.

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

Saar
07.02.2016, 13:57
Titus,
это не может быть. Что-то вы упустили. Shock не может показывать картинку правильно на ZX48 и ZX128 без изменения параметров.

goodboy
07.02.2016, 14:33
Странно. Когда я переделывал Шок под пентагон, выяснил, что шок был заточен под фиксированные тайминги. Никакого мультиопределения там не было, и уж тем более, настройки на разную длину строки.

в фирменной версии определялка есть, но она не в коде загруженной части.
в зависимости от модели патчится примерно 7 байт
(разные команды пустышки для задержки)

zebest
07.02.2016, 14:40
zebest,
не могли бы вы прогнать ULA test 3: http://wizard.ae.krakow.pl/~jb/qaop/t/ulatest3.tap
на Speccy2010 в режимах ZX48 и ZX128, и выложить скрины?

Мог бы.

ZX48
http://s2.micp.ru/8C64E.jpg

ZX48mod
http://s3.micp.ru/4kwRE.jpg

ZX128
http://s2.micp.ru/wup13.jpg

По крайней мере с эмуулем не расходится в 48 режиме.
Upd
а вот в 128 режиме с эмуулем - расходиЦЦа. Причем , судя по картинке, довольно сильно.
Елси расскажешь, где в коде поправить - поправлю. Сам я не разобрался в этом режиме где что))

Saar
07.02.2016, 15:17
А у меня и в ZX128 правильно показывает ;)
А где взять MOD by CDS? а то у меня только оригинальная версия.

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

zebest,
Надо двигать INT сигнал чтобы приходил ранее.
У Speccy2010 вообще какая-то непонятка с INT. Если посмотрите код, то увидите что он приходит когда hCnt==444 что неправильно.
Он должен приходить когда hCnt==0. Но, я подозреваю, что в Speccy2010 всё сразу поплывет если его поменять.
Поскольку сигнал INT генерится в конце строки, а не в начале, то на ZX128 он получается задержанным на 4 такта из-за разницы длины строки. Можно сделать проверку на syncMode==1 и задержать его на 4 такта.
В моем коде я генерю INT - в начале строки (как должно быть в стандарте). Только пришлось его подвинуть на 2 такта вперед чтобы и в ZX48 и ZX128 ULA Test 3 показывал правильно.

Saar
07.02.2016, 16:20
Нашел я этот модифицированный тест. Мой твик INT на 2 такта выходит боком на этом тесте. Пришлось сдвинуть INT в стандартную позицию hc=0 чтобы ZX48 выглядел корректно.
А вот в ZX128 этот тест не запускается у меня. На Spectaculator тоже вылетает. Да и у вас нет фотки такой - тоже не работает?

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

Не видел вашего ответа перед написанием своего :)

Speccy2010 код довольно сложно читать. Там практически весь код FPGA в одном большом файле с размазыванием разных частей между собой.

По поводу INT в ZX128 надо думать. Есть предположение, что позиция INT осталась такой как в ZX48. То есть на 4(или 2) такта раньше должен приходить в силу увеличенного размера строки.

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

zebest,
Вопрос вам как к знатоку разнообразных эмуляторов для PC:
порекомендуйте опенсорс проект, где на ваш взгляд все тесты таймингов в ZX48 и ZX128 правильные. Желательно исключить unreal из этого списка, поскольку он явно разрабатывался каким-то аутистом.

Spectramine
07.02.2016, 16:33
порекомендуйте опенсорс проект, где на ваш взгляд все тесты таймингов в ZX48 и ZX128 правильные. Желательно исключить unreal из этого списка

Вопрос не ко мне, но я бы порекомендовал Fuse, он хорош в плане точности. Unreal вообще выпадает, так как он задержки оригинальных спеков не поддерживает в принципе, насколько я знаю.

zebest
07.02.2016, 17:14
В защиту unreal скажу, что он для эмуляции Пентагона хорош и для отладки. ну и для некоторых экзотических конфигураций, типа ZXM. А на мой взгляд тайминги ZX48 и ZX128 правильные, ну или меня устраивают:), в ZXMAK2.
И кстати у 48 модели как минимум два варианта таймингов то жи - "late" и "early", если совсем быть точным, видимо в разных ULA

Saar
07.02.2016, 20:44
А есть ли какой тест памяти для ZX128 чтобы еще показывал скорость ее? Мне надо проверить всю память и страницы на предмет скорости.
Смотрю в код Contendent памяти и уверен что правильно, а вот картинка ULA128 неправильно работает пока не отключу проверку на C000 & PAGE[0]. При этом кто-то принудительно включает 7 страницу, которая по определению Contendent.

Короче, нужен тест памяти для выяснения причины.

Saar
07.02.2016, 21:13
И по портам есть торможение. Но сейчас конкретно интересует тестер памяти.

zebest
07.02.2016, 21:37
тогда вот. два теста. второй тоже интересный. в SpecEmu всего одна ошибка

Saar
07.02.2016, 21:47
zebest,
TactTest не умеет страницы переключать. Ну или я не нашел как это сделать.
TimingTest пришет Is Loading и дальше не идет. По названию тоже для 48к.

А для 128к нет ничего?

Saar
07.02.2016, 22:25
Ну мне хотелось чтобы страницы переключались в тесте памяти чтобы посмотреть разницу в скорости между 1 3 5 7 и 0 2 4 6.
А так да, скорость второй медленнее показывает.

Но я нашел в чем глюк у меня! Я забыл про то, что процессор еще занимается рефрешем памяти, при котором адреса выставляются как FFxx - то есть попадают в верхнюю область. И если включена одна из нечетных страниц, то включается тормоз.
Видимо, в Т80 нет эмуляции рефреша - поэтому в Speccy2010 нет проверки на это.

Saar
07.02.2016, 22:45
Я же выше написал почему такой глюк у меня был.
Сейчас добавил проверку на nRFSH и ULA128 стал показывать правильно.

Saar
07.02.2016, 23:18
Да. 7 страница там открывается. Это происходит когда я загружаю ULA128 через ESXDOS. Почему именно 7 страница там включается - не знаю.

Saar
07.02.2016, 23:41
Сейчас проверил: если загружаю ULA48, то вверху 0 страница. Если ULA128 - то 7 страница. Так что это именно ваш тест подключает 7 страницу.

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

TactsTest показывает быструю память, потому что там 0 страница. Вы сами похоже забыли, что ваш тест включает 7 страницу. И, кстати, там с адреса BFFF кусочек кода выполняется.

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

2 страница жестко с 8000 адреса. А в С000 может быть любая подключена - я про это окно и говорю.

Saar
08.02.2016, 03:57
Ну, дык, я же пофиксил уже глюк. Там не из-за 7 страницы тайминги не совпадали, а из-за рефреша, который интерпретировался как обращение к медленной памяти.

Что-то у меня перестал грузиться Eye Ache. Надо с этим разобраться.

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


ну как это нету, елси сигнал то есть ??
сигнал-то есть. Но, видимо, адрес рефреша не выставляется на адресных выходах. Ведь он же в эмуляторах никому не нужен.

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

55929
Вон смотрите что у меня. адреса FExx

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

Черт, забыл что форум ресайзит картинки. Но, в принципе, там видно что вставляются адреса рефреша.

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

TEST 4.30 выдает ошибки.
Хотелось бы получить пояснения в чем проблема:
1) шина данных зашумлена в цикле подтверждения прерывания. Что это вообще такое?
2) некорректно подключен музыкальный чип на порте BFFD. А как правильно-то?

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

Поменял модель процессора на T80 - проблемы с синхронизацией тактов в P128 исчезли. Так же заработала демка Eye Ache 2, которая отказывалась работать раньше.
В этот раз Т80 модель встала хорошо. Раньше мне не удавалось вот так просто взять и поменять. То ли тайминги какие-то не совпадали, то ли еще что-то.
Наверное, останусь на Т80, раз улучшения есть.

goodboy
08.02.2016, 11:46
2) некорректно подключен музыкальный чип на порте BFFD. А как правильно-то?
какие адресные линии задействованы на его порту ?

zebest
08.02.2016, 12:35
Поменял модель процессора на T80 - проблемы с синхронизацией тактов в P128 исчезли.
Рефреш то жи задействовал в Т80? возможно все же в твоем проце некоторые команды по тактам некорректны.



Так же заработала демка Eye Ache 2, которая отказывалась работать раньше.
Т80 тоже довольно много ревизий. на прежних некорректно работает демка ээээ... Oscoss (http://zxaaa.untergrund.net/view_demo.php?id=7537) . просто зацикливается на начальной части.




шина данных зашумлена в цикле подтверждения прерывания. Что это вообще такое?
Наверное пресловутый порт #FF ?? Говоряят в нек. игрушках сильно нужен. Посмотри как в Speccy2010 он сделан
Там же по портам музыкалки посмотри. И еще по поводу портов есть ньюансы, это надо еще одну демку поискать, капризную к портам

Saar
08.02.2016, 14:03
Рефреш то жи задействовал в Т80?
кроме самого процессора ничего не менял. Соответственно и проверка на сигнал рефреша осталась. Она не мешает.
Я думаю, может сделать выбор процессора. Погоняю пока на Т80. Если будут проблемы, то сделаю выбор.


Т80 тоже довольно много ревизий.
я взял из Speccy2010.



Наверное пресловутый порт #FF ??
Ну порт FF я реализовал, но данную ошибку тест показывал еще до реализации порта.
Тест 4.30 еще говорит что сигнал INT очень короткий. А как вообще программно можно определить длину сигнала INT? Он же вроде по отрицательному фронту отрабатывает, а не по уровню.



Там же по портам музыкалки посмотри.
А запустите ТЕСТ 4.30 и выложите тут скрины, чтобы было понятно в чем разница. Судя по коду, ничего особенного нет в подключении музыкального сопроцессора.

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


Oscoss .
Без проблем проиграла вся демка. И все бордюрные эффекты отлично были показаны.

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


И еще по поводу портов есть ньюансы, это надо еще одну демку поискать, капризную к портам
это интересно. Еще бы инфу к каким именно портам.

creator
08.02.2016, 15:15
Судя по коду, ничего особенного нет в подключении музыкального сопроцессора.
Если в схеме дешифрации AY не будет использоваться сигнал /M1, то AY будет гадить на шину данных в цикле подтверждения прерывания.

Saar
08.02.2016, 15:49
Проблему зашумленности данных пофиксил.
Данные в FF порте сдвинулись у Т80. Надо двигать опять.

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

creator,
Я сделал проще. Теперь никто не может выдавать данные когда условие (~nM1 & ~nIORQ) выполняется.
Теперь тест на INT не ругается, но на подключение AY всё еще ругается.

Saar
08.02.2016, 16:52
zebest,
эх, любите вы подсовывать зоопарк разных форматов. Вот ищу теперь как эту хрень tzx в стандартный tap сконвертировать.

goodboy
08.02.2016, 16:59
SONG IN LINES Part 4
точно, хороший тест.
там одним OUT`ом переключаются сразу бордюр и страница

Saar
08.02.2016, 17:05
вот нашел Song in Lines 4:
http://www.worldofspectrum.org/infoseekid.cgi?id=0007743

но выглядит совершенно по-другому. Что это за демка в tzx и где найти ее в tap формате? Перевести в tap не получается.

goodboy
08.02.2016, 17:18
а чем он поможет если загрузчик нестандартый (esxdos такое явно непрожуёт)

zebest
08.02.2016, 17:19
Перевести в tap не получается.
Печалька конечно. Тогда держите в SCL, адаптированную, насколько возможно, местными умельцами под Pentagon

Saar
08.02.2016, 17:46
ZX-Blockeditor справился с конвертацией, но goodboy прав - загрузчик там нестандартный и через esxdos не загружается.
В ZXMAK2 обычно TAP грузится моментально, а в этой демке по-старинке со скоростью обычного магнитофона загружается.

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

Перевел через ZXMAK2 в SNA формат. Не уверен, что 100% правильный тест получается таким образом, но глюк есть.
Почему-то буквы идут только по бардюру, а по самому экрану нет. Ну и сами буквы перекособочены. Тут можно грешить, что что-то неправильно загрузилось из-за SNA формата, а может быть и что-то неправильно работает в самом эмуляторе.

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


адаптированную, насколько возможно, местными умельцами под Pentagon
дык, а какой толк тогда от адаптированной версии. Мы же вроде тайминги ZX128 проверяем.

goodboy
08.02.2016, 17:48
а какой толк тогда от адаптированной версии.
а кто проверку портов просил ?

Saar
08.02.2016, 18:49
а кто проверку портов просил ?
Дык, все переделанные версии с вырезаной проверкой.
Но вот SIL4.ZIP от zebest оказалась с проверкой! Правда, с таймингами под пентагон, ессно. Но сойдет.
Буквы и квадратик правильные, только буквы почему-то за экраном проходят. В чем может быть проблема?

goodboy
08.02.2016, 19:13
буквы почему-то за экраном проходят. В чем может быть проблема?
теневой экран не включается, вероятно у порта #7ffd слишком правильная/длинная адресация

Saar
08.02.2016, 19:30
goodboy,
и какая маска для этого порта нужна чтобы правильно работало?
у меня вот так: !A[15] && !A[1] && A[0]

goodboy
08.02.2016, 19:51
в sil4 используется порт #7ffc
как я понял на-фирме a15&&a1

#c==%1100 (в твой расклад попадает)

возможно команда outi барахлит

Saar
08.02.2016, 20:06
Вот теперь буквы нормально идут :)
жаль что оригинал только в TZX. Нельзя проверить ZX128 вариант.

goodboy
08.02.2016, 20:07
а что было не-так ?

zebest
08.02.2016, 20:20
жаль что оригинал только в TZX. Нельзя проверить ZX128 вариант.
можно пойти длиинным путем) запустить в эмууле и сделать снапшот. Чиста для проверки. как раз и снапшоты проверишь, корректность...
В 128 должна надпись бежать плавнее, без рывков и дрожаний

Saar
08.02.2016, 21:14
zebest,
да, я так уже и сделал.
в ZX128 буквы все в разложенном виде. Опять где-то проблема с contendent mem или io.

Я для проверки загрузил через магнитофонный вход - та же проблема с буквами. Ну значит по крайней мере SNA правильно работает.
Надо теперь думать что не так.


goodboy,
Просто из декодера порта 7FFD убрал проверку на A0. В оригинале, как во всех доках написано, А0 должен быть равен 1. Поэтому 7FFC не попадал. Ну раз в фирменном так сделано, значит пусть будет без A0.

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

Я теперь понимаю почему в Speccy2010 INT начинается в конце предыдущей строки, а не в начале.
У T80 тайминги сдвинуты.

creator
08.02.2016, 21:45
Особо продвинутые чуваки, типа "PRESENTED BY PASHA NIKITIN" ничтоже сумняшеся щёлкали странички через "OUT #0D, A" и даже, о ужас, через "OUT #00, A". Нуачо, работает. :)

Заходим в BASIC, вводим OUT 0, 255 — красота. :)

Saar
08.02.2016, 23:01
Руки бы по отрывать дезигнерам спектрума.

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

Особо умиляет, что в пентагоне на обычной логике тех же времен сделали обращение к памяти без торможения, а на оригинале почему-то не смогли.

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

Кстати, на Т80 сигнал nRFSH не надо учитывать. Сам-то сигнал есть, а адреса на шине нет (ну или неправильный, я не проверял).
Т80 создавался по принципу "что мы знаем о Z80?". И постепенно допиливался и подгонялся. Наверное, можно считать что его допилили до почти совершенного состояния.
A-Z80 создавался по реальному железу, но реверсили без достаточно тщательности. Это же ведь тоже не автоматические действия. Там достаточно ручной работы. Поэтому есть ошибки. А автор уже отошел от этого проекта и не особо горит желанием фиксить. Я ему писал об ошибках, но он как-то вяло реагирует да и повторяет постоянно что уже многое забыл. А больше никто этим проектом не занимается.
В общем, вначале многообещающий проект превратился в недоделанный.
Это как с MOS6581/8580 - вроде и есть модель, и даже в большинстве случаев работает. Но не всегда. Тоже подгоняют по принципу "наверное, должно быть так". А настоящей модели нет. Точнее есть, но тоже нифига не доделанная.

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

кстати, по поводу contendent:

Оставлю этот кусок кода из ZXMAK2 тут для истории:


namespace ZXMAK2.Hardware.Spectrum
{
public class UlaSpectrum128_Early : UlaDeviceBase
{
public UlaSpectrum128_Early()
{
Name = "ZX Spectrum 128 [early model]";
}


#region IBusDevice

public override void BusInit(IBusManager bmgr)
{
base.BusInit(bmgr);
bmgr.Events.SubscribeRdMem(0xC000, 0x4000, ReadMem4000);
bmgr.Events.SubscribeRdMemM1(0xC000, 0x4000, ReadMem4000);
bmgr.Events.SubscribeRdMem(0xC000, 0xC000, ReadMemC000);
bmgr.Events.SubscribeRdMemM1(0xC000, 0xC000, ReadMemC000);

bmgr.Events.SubscribeRdNoMreq(0xC000, 0x4000, ContendNoMreq);
bmgr.Events.SubscribeWrNoMreq(0xC000, 0x4000, ContendNoMreq);
bmgr.Events.SubscribeRdNoMreq(0xC000, 0xC000, ContendNoMreq);
bmgr.Events.SubscribeWrNoMreq(0xC000, 0xC000, ContendNoMreq);

bmgr.Events.SubscribeRdIo(0x0000, 0x0000, ReadPortAll);
bmgr.Events.SubscribeWrIo(0x0000, 0x0000, WritePortAll);
}

#endregion

public override bool IsEarlyTimings
{
get { return true; }
}

protected override SpectrumRendererParams CreateSpectrumRendererParams()
{
// ZX Spectrum 128
// Total Size: 456 x 311
// Visible Size: 352 x 303 (48+256+48 x 55+192+56)
var timing = SpectrumRenderer.CreateParams();
timing.c_frameTactCount = 70908;
timing.c_ulaLineTime = 228;
timing.c_ulaFirstPaperLine = 63;
timing.c_ulaFirstPaperTact = 64; // 64 [40sync+24border+128scr+32border]
timing.c_ulaBorder4T = true;
timing.c_ulaBorder4Tstage = 2;

timing.c_ulaBorderTop = 32; //55
timing.c_ulaBorderBottom = 32; //56
timing.c_ulaBorderLeftT = 16; //16T
timing.c_ulaBorderRightT = 16; //32T

timing.c_ulaIntBegin = 64 + 2;
timing.c_ulaIntLength = 36; // according to fuse

timing.c_ulaWidth = (timing.c_ulaBorderLeftT + 128 + timing.c_ulaBorderRightT) * 2;
timing.c_ulaHeight = (timing.c_ulaBorderTop + 192 + timing.c_ulaBorderBottom);
return timing;
}


#region Bus Handlers

protected override void WriteMem4000(ushort addr, byte value)
{
contendMemory();
base.WriteMem4000(addr, value);
}

protected override void WriteMemC000(ushort addr, byte value)
{
if ((m_pageC000 & 1) != 0)
contendMemory();
base.WriteMemC000(addr, value);
}

protected void ReadMem4000(ushort addr, ref byte value)
{
contendMemory();
}

protected void ReadMemC000(ushort addr, ref byte value)
{
if ((m_pageC000 & 1) != 0)
contendMemory();
}

#region The same as 48

protected void ContendNoMreq(ushort addr)
{
if (IsContended(addr))
contendMemory();
}

protected override void WritePortFE(ushort addr, byte value, ref bool handled)
{
}

private void WritePortAll(ushort addr, byte value, ref bool handled)
{
contendPortEarly(addr);
contendPortLate(addr);
if ((addr & 0x0001) == 0)
{
int frameTact = (int)((CPU.Tact - 2) % FrameTactCount);
UpdateState(frameTact);
PortFE = value;
}
}

private void ReadPortAll(ushort addr, ref byte value, ref bool handled)
{
contendPortEarly(addr);
contendPortLate(addr);
int frameTact = (int)((CPU.Tact - 1) % FrameTactCount);
base.ReadPortFF(frameTact, ref value);
}

#endregion

#endregion

private bool IsContended(int addr)
{
int test = addr & 0xC000;
return (test == 0x4000 || (test == 0xC000 && (m_pageC000 & 1) != 0));
}

private bool IsPortUla(int addr)
{
return (addr & 1) == 0;
}

#region The same as 48

private void contendMemory()
{
int frameTact = (int)(CPU.Tact % FrameTactCount);
CPU.Tact += m_contention[frameTact];
}

private void contendPortEarly(int addr)
{
if (IsContended(addr))
{
int frameTact = (int)(CPU.Tact % FrameTactCount);
CPU.Tact += m_contention[frameTact];
}
}

private void contendPortLate(int addr)
{
int shift = 1;
int frameTact = (int)((CPU.Tact + shift) % FrameTactCount);

if (IsPortUla(addr))
{
CPU.Tact += m_contention[frameTact];
}
else if (IsContended(addr))
{
CPU.Tact += m_contention[frameTact];
frameTact += m_contention[frameTact];
frameTact++;
frameTact %= FrameTactCount;

CPU.Tact += m_contention[frameTact];
frameTact += m_contention[frameTact];
frameTact++;
frameTact %= FrameTactCount;

CPU.Tact += m_contention[frameTact];
frameTact += m_contention[frameTact];
frameTact++;
frameTact %= FrameTactCount;
}
}

protected override void OnTimingChanged()
{
base.OnTimingChanged();
m_contention = UlaSpectrum48.CreateContentionTable(
SpectrumRenderer.Params,
new int[] { 6, 5, 4, 3, 2, 1, 0, 0, });
}

private int[] m_contention;

#endregion

//protected override void EndFrame()
//{
// base.EndFrame();
// if (IsKeyPressed(System.Windows.Forms.Keys.F1))
// {
// c_ulaBorder4T = true;
// c_ulaBorder4Tstage = 0;
// OnTimingChanged();
// }
// if (IsKeyPressed(System.Windows.Forms.Keys.F2))
// {
// c_ulaBorder4T = true;
// c_ulaBorder4Tstage = 1;
// OnTimingChanged();
// }
// if (IsKeyPressed(System.Windows.Forms.Keys.F3))
// {
// c_ulaBorder4T = true;
// c_ulaBorder4Tstage = 2;
// OnTimingChanged();
// }
// if (IsKeyPressed(System.Windows.Forms.Keys.F4))
// {
// c_ulaBorder4T = true;
// c_ulaBorder4Tstage = 3;
// OnTimingChanged();
// }
// if (IsKeyPressed(System.Windows.Forms.Keys.F5))
// {
// c_ulaBorder4T = false;
// OnTimingChanged();
// }
//}
//private static bool IsKeyPressed(System.Windows.Forms.Keys key)
//{
// return (GetKeyState((int)key) & 0xFF00) != 0;
//}
//[System.Runtime.InteropServices.DllImport("user32")]
//private static extern short GetKeyState(int vKey);
}

public class UlaSpectrum128 : UlaSpectrum128_Early
{
public UlaSpectrum128()
{
Name = "ZX Spectrum 128 [late model]";
}


public override bool IsEarlyTimings
{
get { return false; }
}

protected override SpectrumRendererParams CreateSpectrumRendererParams()
{
var timing = base.CreateSpectrumRendererParams();
timing.c_ulaFirstPaperTact += 1;
timing.c_ulaBorder4Tstage = (timing.c_ulaBorder4Tstage + 1) & 3;
return timing;
}
}
}

Меня привлекла внимание функция contendPortLate. Круто там навернули аж тройную проверку.
У меня ощущение, что опять весь алгоритм придется переписывать :(
Кстати, Shock на ZXMAK2 в режиме ZX128 не работает. Сбрасывается при загрузке цветных полос.

Spectramine
08.02.2016, 23:30
Кстати, Shock на ZXMAK2 в режиме ZX128 не работает. Сбрасывается при загрузке цветных полос.

http://zx-pk.ru/showthread.php?t=23797&page=2&p=856341&viewfull=1#post856341

Saar
09.02.2016, 00:11
weiv,
понятно. но в ZXMAK2 я не нашел отключение быстрой загрузки с ленты.
Странно, что в режиме ZX48 работает.

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

В общем, загрузил я Shock в ZXMAK2 ZX128. Надо было просто войти в Basic 48 - и оттуда загрузить. В общем, с таймингами ZX128 в ZXMAK2 отлично выглядит, без глюка в правом нижнем углу.
Только не получается что-то портировать алгоритм на verilog.

Spectramine
09.02.2016, 00:25
В начале сообщения как раз и предлагается грузить демку после USR 0 в режиме 128к. (Проблемы с SHOCK при быстрой загрузке с ленты только у Спектакулятора, в режиме 48к и с отключенным старт/стопом ленты - слетевшие из-за быстрой загрузки тайминги не выравниваются даже после остановки ленты. Но это мелочи).

Saar
09.02.2016, 00:26
zebest,
А как этот Song In Lines выглядет на Speccy2010 в режиме ZX128?

Saar
09.02.2016, 00:46
О! пофиксил проблему в Shock в правом нижнем углу в режиме ZX128! Остался лишь маленький еле заметный глюк в правом верхнем углу.

Saar
09.02.2016, 01:45
zebest,
не, тут дело не в медленной странице. Ты постоянно забываешь, что проблема у меня была из-за цикла рефреша, которую я уже давно пофиксил.
Тут в чем-то другом.
Судя по всему, contendent алгоритм для ZX48 и ZX128 идинаковый. Вон даже в ZXMAK2 он идентичен за исключением проверки на верхние 16кб. И в ZXMAK2 SIL4 выглядет отлично.
Отсюда вывод, что алгоритм contendent в Speccy2010 не совсем правильный не только для ZX128 но и ZX48.
Я пофиксил угол в Shock, но в ZX48 вылезли глюки. Я пока сделал проверку и включаю разные алгоритмы, но это костыль. Так быть не должно.
Надо разобраться в алгоритме ZXMAK2, но я пока не уловил смыл полностью.

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

zebest, мне не нравится в алгоритме Speccy2010 обратная петля ввиде ulaWaitCancel. На мой взгляд, это костыль.

Spectramine
09.02.2016, 03:01
Нарыл ещё один тест, который тестирует задержки ZX128. Вроде в теме его ещё не выкладывали (был похожий под 48к). Есть нюанс - он заточен под модель 128к с late timings, поэтому на эмуляции с early timings дает несколько ошибок. (Не уверен, что формат .z80 сохраняет информацию о модификации таймингов (issue 2 = late timings?), поэтому при использовании снапа .z80 надо иметь это ввиду. Кстати, большинство эмулей игнорируют эту информацию и при чтении szx снапов).

Saar
09.02.2016, 04:34
Хм.. вообще ничего не понимаю. Сейчас отключил contendent задержку в ZX128 вообще - и SIL4 стал отображать правильно буквы во весь экран! Есть небольшой глючок - квадратик красный дергается, но это пока не важно.
Получается, что задержек не должно быть вообще. А как так может быть? Чуваки рассчитали тайминги обращения так что попадают именно в тот момент (два такта из 8), когда нет задержек? Такое вообще возможно?

zebest
09.02.2016, 08:23
Нарыл ещё один тест, который тестирует задержки ZX128.
Меня трудно удивить какими-то новыми тестами, кроме вновь написанных..
http://zx-pk.ru/showthread.php?t=26138&p=856405&viewfull=1#post856405
Там написано, что в SpecEmu всего одна ошибка в нем..

Saar
09.02.2016, 09:25
Удалось сделать так, чтобы SIL4 заработал, но квадратик телепается.
Правда, такты contendent памяти пришлось сдвинуть и данные portFF еще сильнее сдвинуть относительно реального чтения данных видеопамяти. Как-то это неправильно.

Не могу понять почему и в Speccy2010 и в ZXMAK2 проверяют состояние шины адреса когда nMREQ = 1. Ну это же бред! Шина в таком состоянии не активна же. Что-то я не пойму этого момента. Либо какой-то костыль, либо еще какое-то извращение.
Есть ли где описание этого момента? На http://www.zxdesign.info про это нет ни слова, что еще раз убеждает что это какая-то неправильная проверка. Должно быть либо nIORQ==0 либо nMREQ==0. Во всех остальных случаях шина адреса не имеет значения.

zebest
09.02.2016, 10:02
Удалось сделать так, чтобы SIL4 заработал, но квадратик телепается.
в режиме Пентагона тоже телепается. но там 1t , а в 128 4t - не должен. Такты не выровнены в циклах, но для ZX128 это не существенно должно быть

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

http://s3.micp.ru/jgyJ1.jpg
Вот так все печально в режиме zx128. Это все же проблемы с тормознутой памятию или с положением Int-a ? INT-ом точно не выравнивается(((

Spectramine
09.02.2016, 12:37
Меня трудно удивить какими-то новыми тестами, кроме вновь написанных..
http://zx-pk.ru/showthread.php?t=26138&p=856405&viewfull=1#post856405
Там написано, что в SpecEmu всего одна ошибка в нем..

Тест, который вы выкладывали, заточен под ULA 48к, и на 128к машине вообще не работает. Я его упомянул в своём сообщении. У меня - его модификация под 128к машину, обратите внимание.

Saar
09.02.2016, 20:53
zebest,
Если убрать часть кода contendent тормоза в ZXMAK2, то и в нем квадратик начинает телепаться. Так что проблема именно в правильном торможении.



Вот так все печально в режиме zx128. Это все же проблемы с тормознутой памятию или с положением Int-a ? INT-ом точно не выравнивается(((
а это где так? в Speccy2010?

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

Я думаю, этот загадочный цикл чтения без активности nMREQ, это, наверное nIORQ? Ведь, согласно схеме, на ULA приходит не чистый nIORQ, а смешаный с A0. Соответственно если идет обращение к нечетному порту, то на ULA не приходит ни nMREQ (поскольку это не чтение памяти) ни nIORQ (поскольку замаскирован A0=1).
Видишь суслика? И я не вижу. А он есть!

Saar
10.02.2016, 15:00
В общем, после многочисленных тестов пришел к выводу - Т80 не точная модель что касается тактов. Если я выдаю INT в начале 248 строки, то в ULATEST3 я должен получить красивую картинку по contendent памяти и тоже красивое распределение данных порта FF. Но этого нет. Поэтому начинается подгонка тактов, смещение INT и прочая лабуда. Где-то это работает. Где-то вылезают глюки.
В A-Z80 картина на порядок лучше и в принципе похоже на настоящий процессор. Но, блин, она не доделанная. Неправильно раотают INIR и OTIR инструкции - это то, что я сам нашел. А сколько еще может быть ошибок - не знаю. Автор не горит желанием это исправлять.

Сделал один вариант для Т80, при котором Shock, Ulatest3, SIL4 работают правильно, но растактовка и тайминги в коде - просто ужас.
Сейчас делаю второй вариант в надежде сделать это не так ужасно.
Потом решу что пойдет в релиз.

molodcov_alex
10.02.2016, 16:15
Кстати, если надо, могу какие-нибудь тесты прогнать на оригинальных 48, 128 и +3, правда только с магнитофона. И вероятно не слишком быстро.

Saar
10.02.2016, 21:10
zebest,
Я имел ввиду не общее количество тактов каждой комманды - тут вопросов нет, выглядит как точная копия.
А вот что творится с сигналами внутри этих тактов - большой вопрос. Для пятногона это неважно, а вот для ZX это очень важно, поскольку contendent модель очень чувствительная к положению сигналов и то, на каком именно такте производятся определенные действия.
У Т80 несколько top моделей, которые ведут себя по-разному. Возможно, получится подвинуть сигналы в этих обертках, потому как я вижу что T80a имеет несколько иное распределение сигналов чем T80s, которая в свою очередь отличается от T80se.

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

zebest,
Ну вот сейчас смотрю на графике Z80a: nIORQ активируется на первом такте, а нужно на втором. При этом первый такт в IO цикле очень странный. Он длится 2 такта вместо одного. Ну ок, можно было подумать, что это так объединили T2 и TW такты. Ну дык, это тогда Т2 должен иметь два такта, а не Т1.
А ты говоришь, точный...

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

Сделал фикс для кривого nIORQ у T80 и глюки исчезли! Использую contendent модель из книжки Криса Смита (она же в zx_ula проекте используется). Так что теория вполне себе работает. А вот в том же Speccy2010 модель тормоза довольно кривая, видимо подгонялась под неточность процессора, поэтому там и странные номера тактов используются, и обратная петля ввиде WaitCancel.

в Shock в ZX128 слева вверху есть маленькая помарка ввиде смещенного куска, но я уверен что это и в оригинальном ZX128 имется. Просто в моем эмуляторе очень широкий бордюр. Во всех эмуляторах что я видел - бордюр довольно узкий - поэтому там не видно это место.

Saar
11.02.2016, 01:54
Кстати, там модель используется T80se насколько помню...
угу. А глюки те же.

Сначала хотел влезть в код Т80, чтобы подвинуть nIORQ, но потом решил подвинуть в видео контроллере. А то вдруг что-то задену.

В общем, всё работает сейчас как надо. Растактовка тоже красиво теперь выглядит, как и должно в железном ZX. С единственной заковыркой - начало INT. Пришлось двинуть на 2 такта в ZX48, на 6 в ZX128 и на 4 в P128.

Надо будет еще раз прогнать все тесты перед релизом.

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

zebest,
Не мог бы ты посмотреть в Speccy2010 что пишет TEST 4.30?
Интересует сообщение об AY. У меня он ругается на неправильное подключение.

zebest
11.02.2016, 02:48
TEST 4.30
который из ROM\ПЗУ работает?? Ничего не ругается на звук, все нормально пишет. фото сделай, где именно ругается


Кстати, если надо, могу какие-нибудь тесты прогнать на оригинальных 48, 128 и +3, правда только с магнитофона. И вероятно не слишком быстро.
А проверь эту поделку на реальном ZX128. Ибо в эмулях - полная фигня.
4 эмууля со мной согласны, зато отсальные 22 - ни разу не согласны ((

http://s1.micp.ru/P3R27.jpg

Так может как раз эти 4 эмуля и самые неправильные?((((

Saar
11.02.2016, 03:13
в моем эмуляторе вот так:
55989

А вот собственно сообщения об ошибке AY:
5599055991

zebest
11.02.2016, 03:24
А вот собственно сообщения об ошибке AY:
На первом экране у меня пишет:
AY-Chip: AY-3-8910/12
На втором:
Тест регистром музпроцессора
Канал А Исправен
Канал В Исправен
Канал С Исправен



в моем эмуляторе вот так:
Ну вроде как правильно. Верхняя картинка не дрожит?? Бегучка не сильно дергается?

Saar
11.02.2016, 03:29
Верхняя картинка не дрожит??
нет.


Бегучка не сильно дергается?
она не дергается, но видно что не попиксельное перемещение а как минимум на 4 пиксела (или 8) за раз.

zebest
11.02.2016, 03:34
ну и хорошо. осталось узнать, как оно все же на оригинале смотрицца, ибо большинство(!) эмулей криво показывают.
Попиксельно на бордюре не сделать, минимум по 2 пикселя(такт) можно, но в пентагоне, в 128 модели минимуум 4 такта, из за особенностей архитектуры) так что тут нормально

Saar
11.02.2016, 06:10
Не понимаю почему этот тест ругается на AY.
Есть ли какие более вразумительные тесты музыкального чипа? чтобы писал что именно не так если не нравится.

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

P.S.: починил-таки :) Не думал, что так по-извращенски он подключается в спектруме.

ZXMAK
11.02.2016, 07:26
Да, с этим проблема. Поэтому остается только запускать и смотреть как выглядит.
Заметил интересные глюки ввиде смещенного на пиксел вверх или вниз области шириной примерно в 4/8 пикселей в центре экрана, если что-то не так с таймингами. То ли демка воспринимает эмулятор как какую-то другую модель, то ли еще что-то. При этом тест ULA48 отлично выглядит. Я это пофиксил путем смещения по времени считывания BitData и AttrData.

Изначально хотел сделать такие тайминги: ZX48, ZX128, Pentagon128.
Сейчас вот думаю убрать вариант ZX128. Не могу найти достаточно инфы по таймингам как для 48К. И попутно заметил, что именно для ZX128 нет прог, использующих эти тайминги. Shock как оказалось, универсальный и ему достаточно ZX48.
А остальные демки с таймингами написаны для Pentagon128.
Кстати, Speccy2010, как оказалось, тоже не имеет режима ZX128. По крайней мере, исходники, что у меня есть, поддерживают только ZX48, P128, P1024, Sсorpion.

вообщето все ровно наоборот :)
Под 128 дем с хитрыми выкрутасами на contended memory тьма тьмущая, под 48 late можно найти, а вот под 48 early почти ничего нет

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


Удалось сделать так, чтобы SIL4 заработал, но квадратик телепается.
Правда, такты contendent памяти пришлось сдвинуть и данные portFF еще сильнее сдвинуть относительно реального чтения данных видеопамяти. Как-то это неправильно.

Не могу понять почему и в Speccy2010 и в ZXMAK2 проверяют состояние шины адреса когда nMREQ = 1. Ну это же бред! Шина в таком состоянии не активна же. Что-то я не пойму этого момента. Либо какой-то костыль, либо еще какое-то извращение.
Есть ли где описание этого момента? На http://www.zxdesign.info про это нет ни слова, что еще раз убеждает что это какая-то неправильная проверка. Должно быть либо nIORQ==0 либо nMREQ==0. Во всех остальных случаях шина адреса не имеет значения.

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

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


Руки бы по отрывать дезигнерам спектрума.

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

Особо умиляет, что в пентагоне на обычной логике тех же времен сделали обращение к памяти без торможения, а на оригинале почему-то не смогли.


в пентагоне более сложные тайминги, чем в оригинальном спектруме. Поэтому и нет эмуляторов которые точно тайминги пентагона эмулируют. Про демы я не слышал, но есть тесты которыми легко поймать неточную эмуляцию видеогенератора пентагона. Ктото пытался добавить поддержку в свой эмулятор, но насколько точно это вышло не знаю. В ZXMAK2, ошибка сведена к 1 такту.

Saar
11.02.2016, 08:40
ZXMAK,
Порекомендуйте хитрые демки для ZX128 для проверки contendent памяти.

Я ZX128 уже сделал, те мои измышления были давно :)


Про демы я не слышал,
Демок под пентагон хоть отбавляй. Практически все русские демки под него. Из тех, что требуют точные тайминги - Eye Ache, например.


но есть тесты которыми легко поймать неточную эмуляцию видеогенератора пентагона.
Дайте ссылки или выложите их тут - хочу потестировать.
Мне почему-то показалось, что под пентагон как раз-таки легко настроить тайминги. По крайней мере, я это сделал за день. И то, основная часть времени ушла на то, чтобы понять, что проблема была в модели процессора а не в видео контроллере.

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


в пентагоне более сложные тайминги, чем в оригинальном спектруме. Поэтому и нет эмуляторов которые точно тайминги пентагона эмулируют.
по-моему, вы всё усложняете. Пентагон сделан весь на простой логике, и повторить его тайминги зная схему - раз плюнуть. На FPGA вообще можно нарисовать схему как есть, если что. Это на ZX стояла ULA которую раскусили только когда спилили и под микроскопом разглядели. А логику 155 серии не надо вскрывать ;)

ZXMAK
11.02.2016, 10:23
ZXMAK,
Порекомендуйте хитрые демки для ZX128 для проверки contendent памяти.

Я ZX128 уже сделал, те мои измышления были давно :)


один из хороших тестов для contended memory - это игра sidewise, она и в 48 и в 128 работает. Если есть ошибки в эмуляции задержек, спрайт игрока будет иногда мерцать. На правильных таймингах он мерцать не должен вообще. Это конечно не гарантирует что тайминги правильные, т.к. отсутствия мерцания можно из без задержек добиться, но если задержки эмулируются, то эту игру можно использовать для теста ошибок в эмуляции таймингов. Но, как я уже сказал - отсутствие мерцания не говорит о правильных таймингах. Тут правило наоборот - если мерцает, значит есть ошибки в таймингах

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



Демок под пентагон хоть отбавляй. Практически все русские демки под него. Из тех, что требуют точные тайминги - Eye Ache, например.


eye ache точных таймингов вообще не требует, там хоть плюс минус лапоть все будет смотреться более менее нормально. Она даже на эмуляторе Шалаева шла, где таймингов вообще нет... :)



Мне почему-то показалось, что под пентагон как раз-таки легко настроить тайминги. По крайней мере, я это сделал за день. И то, основная часть времени ушла на то, чтобы понять, что проблема была в модели процессора а не в видео контроллере.

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


по-моему, вы всё усложняете. Пентагон сделан весь на простой логике, и повторить его тайминги зная схему - раз плюнуть. На FPGA вообще можно нарисовать схему как есть, если что. Это на ZX стояла ULA которую раскусили только когда спилили и под микроскопом разглядели. А логику 155 серии не надо вскрывать ;)

нет, посмотри кусок схемы с триггером для прерываний. Там не просто логика чтобы на фиксированном такте прерывание генерировать, все сложней - меняется порядок выборки ink/paper - все это влияет на тайминги. Если ошибка +-1 такт не имеет значения, то это можно не учитывать (так и происходит во всех эмуляторах), но эту ошибку можно поймать тестом. btime тест насколько помню, в эмуляторах на границе такта пикселы либо есть, либо нету. На реальном пентагоне они мерцают.

Это происходит потому что на некоторых тактах происходит конфликт доступа к памяти между процессором и видеогенератором и видеогенератор откладывает чтение на следующий такт, при этом меняется порядок выборки ink/paper.

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

Ошибка в 1 такт для демок не критична, врядли где-то артефакты появятся. В unreal ошибка эмуляции вообще 10-20 тактов и никто этого не замечает... :)

ZX128 в ZXMAK2 достаточно точно эмулируется, 48К late тоже, для 48К early есть ньюансы с длительностью инта нигде информации по этому нет, все демы и тесты работают корректно. Но в каком-то тесте с прерываниями можно поймать разницу - на всех эмуляторах значения разные, какое на реальном 48К early неизвестно.

Один из ключевых тестов для проверки contended memory - ulatest3, есть несколько модификаций.
При любых тестах contended memory важно помнить, что нужно использовать только оригинальную прошивку ROM, если хоть один байт ROM отличается, то результаты могут быть некорректными.

goodboy
11.02.2016, 11:18
Порекомендуйте хитрые демки для ZX128
http://files.omega.webnode.com/200000548-960a79702c/E2.tap

http://files.omega.webnode.com/200000554-377cf38773/e2_run2.png
первая (несколько затянутая) часть мультиколор/бордюр,
вторая часть то что называют `звуковой мультиколор` sidAY

(с-трудом нашёл оригинал, даже на pouet.net лежит только фикс под пентагон от vnn)

Saar
11.02.2016, 12:23
ZXMAK,
теория - это хорошо, если есть ей применение. Я не спорю, что нюансы и в Пентагоне имеются, но они имеют значение только тогда когда какая-то программа это использует. Если практического применения нет, то и эмуляции достаточно на макро-уровне. Смысл в том, что на пентагоне процессор не тормозится вообще. Видео отрисовывается тоже без тормозов, потому-что иначе быть не может.
Поэтому, с точки зрения программы на пентагоне, ничего особенного нет. Выводить какие-то динамические эффекты на самом экране с точностью до 1 такта невозможно поскольку выборка идет по 8 точек за раз, и изменить это в триггере уже невозможно. Ну а эффекты на бордюре без проблем выводятся просто "в лоб".
Покажи какую-нибудь хитрую демку или игру для Пентагона, которую сложно заставить работать правильно на эмуляторе. Ну а если нет таких, то и нет смысла вдаваться в точности.
Согласен, что тайминги пентагона мало кто описывал. Просто это мало кому было нужно. Но, как я уже говорил, если нужно, то можно взять схему и посмотреть. Она вся из простых триггеров и комбинаторной логики состоит. Был бы стимул, как говорится.


В unreal ошибка эмуляции вообще 10-20 тактов и никто этого не замечает...
вот и я про это говорю. Смысл ловить черную кошку в темной комнате, если она не мешает?



Один из ключевых тестов для проверки contended memory - ulatest3, есть несколько модификаций.
с этим тестом проблем никаких нет.


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

ZXMAK
11.02.2016, 12:32
Смысл в том, что на пентагоне процессор не тормозится вообще. Видео отрисовывается тоже без тормозов, потому-что иначе быть не может.
Поэтому, с точки зрения программы на пентагоне, ничего особенного нет. Выводить какие-то динамические эффекты на самом экране с точностью до 1 такта невозможно поскольку выборка идет по 8 точек за раз[QUOTE=Saar;857099]

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

Задержки в пентагоне есть, но задерживается не процессор, а ULA (видеогенератор).

[QUOTE=Saar;857099]Это почему же? Не вижу связи. Поясните.

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

Saar
11.02.2016, 12:54
goodboy,
отлично прошла вся демка.
музыка sidAY понравилась. Конечно нет в ней того рашпильного звука настоящего SIDа, но всё равно классно звучит. Надо полагать, там просто сэмплерная музыка.

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


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


Задержки в пентагоне есть, но задерживается не процессор, а ULA (видеогенератор).
Задержка - это прерывание действия. Например, проц тормозится в ZX и команды выполняются дольше чем обычно. А видеоконтроллер не задерживается, а распределяет свои такты чтобы не мешать процессору, но не больше чем позволяют сдвиговые регистры для генерации пикселов. Если бы видеоконтроллер реально задерживался, то наблюдалось бы выпадение пикселей и даже целых групп пикселей. Такого нет. У меня был пентагон 128. Я сам его паял. Всё там работало ровно.
Я не смотрел схему Пентагона уже лет 20, наверное, но что-то мне подсказывает, что там банально цикл рефреша был совмещен с обращением видеоконтроллера - поэтому и прозрачно было, ибо проц после каждой команды сам выдает сигнал рефреша и шина 100% свободна в этот момент.

ZXMAK
11.02.2016, 13:02
Задержка - это прерывание действия. Например, проц тормозится в ZX и команды выполняются дольше чем обычно. А видеоконтроллер не задерживается, а распределяет свои такты чтобы не мешать процессору, но не больше чем позволяют сдвиговые регистры для генерации пикселов. Если бы видеоконтроллер реально задерживался, то наблюдалось бы выпадение пикселей и даже целых групп пикселей. Такого нет. У меня был пентагон 128. Я сам его паял. Всё там работало ровно.
Я не смотрел схему Пентагона уже лет 20, наверное, но что-то мне подсказывает, что там банально цикл рефреша был совмещен с обращением видеоконтроллера - поэтому и прозрачно было, ибо проц после каждой команды сам выдает сигнал рефреша и шина 100% свободна в этот момент.

проблема в том что в пентагоне такты на которых происходит чтение памяти смещаются, если на каком-то такте был одновременный доступ к озу. Т.к. в эмуляторах это не эмулируется, чтение происходит на одних и тех-же тактах. А на реальном пентагоне на разных. Соответственно если запись происходит в область где сейчас проходит луч, то изображение в эмуляторе и на реальном пентагоне будет отличаться.

Смысл пентагоновской схемы в том что процессор никогда не обращается к памяти на каждом такте, где-то у него будет такт без обращения к памяти, соответственно видеоконтроллер откладывает чтение до тех пор пока не сможет прочитать. При таких задержках происходит смена последовательности чтения ink/paper. Как детально это работает нужно долго разбираться по схеме.

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

goodboy
11.02.2016, 13:40
музыка sidAY понравилась. Конечно нет в ней того рашпильного звука настоящего SIDа, но всё равно классно звучит. Надо полагать, там просто сэмплерная музыка.
"Используя ту же технику, но не отключая генерацию тона, возможно расширить возможности генерации различных тембров. В этом случае изменение выходного уровня ЦАП канала используется для модуляции основного тона другой частотой. Таким образом можно получить, например, три независимых амплитудных огибающих любой формы, или тембры, напоминающее звучание микросхемы SID. Для эффективной реализации этого способа требуется наличие в системе возможности прерывания работы процессора с достаточно высокой частотой — например, на компьютере Atari SТ, где эта техника использовалась наиболее активно, применялось прерывание по началу строки растра. На системах, где таких аппаратных возможностей нет, для реализации подобного эффекта потребуется почти всё время процессора. Существует демонстрационная программа Digisid, реализующая эффект на компьютере ZX Spectrum, который не имеет аппаратных возможностей, подобных Atari ST.

http://www.zxdemo.org/f/200310/digisid.zip
запускать после usr0 в 128ом режиме

ZXMAK
11.02.2016, 14:06
http://www.zxdemo.org/f/200310/digisid.zip
запускать после usr0 в 128ом режиме

прикольно, на ZXMAK2 лучше запускать со 192 кГц звуком - меньше искажений

Saar
12.02.2016, 00:30
я не знаю что такое usr0, но на ZXMAK2 не запустилось никак.
На моем эмуляторе работает без проблем.

Spectramine
12.02.2016, 00:39
я не знаю что такое usr0, но на ZXMAK2 не запустилось никак.
На моем эмуляторе работает без проблем.
USR 0 - это когда заходишь в бейсик 128 из меню, вбиваешь вручную команду print usr 0, а потом после ресета в бейсике 48 вбиваешь load "" и запускаешь ленту в эмуле. Чтобы жизнь мёдом не казалась, такой изощрённо-извращенный способ запуска 128-х демок.

Saar
12.02.2016, 00:55
Прикольно :) Заработало.

А не подскажете ли тогда еще одно?
Есть ли быстрый запуск прог находясь в TR-DOS? На диске одна единственная прога, и набирать в строке
LOAD "ОчЕнЬ_ЗаКоВыРиСтОе_ИмЯ"
довольно неудобно. LOAD "*" или LOAD "" не прокатывает.

Spectramine
12.02.2016, 01:01
Нет, нету) Разве что некоторые эмули такие диски умеют запускать автоматом при их открытии, например, Спектакулятор. И то, почему-то только для SCL файлов, TRD он уже ниасиливает так запустить.

Saar
12.02.2016, 06:20
В общем, зарелизил я то, что наваял. Думаю, проблемы с таймингами contendent памяти решены. По крайней мере, код выглядит стройно и почти как по "библии" Криса Смита. А значит не может быть неправильным ;)
Есть только нарекания в начале INT сигнала, но тут вряд ли уже что-то поделаешь. Думаю, дальнейшие улучшения в этой области лежат уже на стороне самой модели Т80. Над улучшениями Т80 вообще кто-то работает в настоящее время?

null_device
12.02.2016, 07:17
Есть ли быстрый запуск прог находясь в TR-DOS? На диске одна единственная прога

Находясь в tr-dos даете команду NEW "boot", "имя файла". Файл переименуется в boot, и будет запускаться автоматом (такая функция, вроде есть в некоторых вариантах BDI) либо: "через две клавиши", при входе в tr-dos - RUN потом ENTER или LOAD потом ENTER и "недокументированная команда: POKE потом ENTER.

Saar
12.02.2016, 07:55
null_device, а если потом нужно временно отключить автозапуск? Нужно держать какую-то кнопку нажатой или что?

daniel
12.02.2016, 08:31
вбиваешь вручную команду print usr 0
достаточно usr0 причем без пробела :)

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


null_device, а если потом нужно временно отключить автозапуск? Нужно держать какую-то кнопку нажатой или что?
клавиши здесь не при чем. Просто команда переименовывает бэсик файл в "boot", который сам запускается при RUN.

Spectramine
12.02.2016, 08:53
достаточно usr0 причем без пробела :) Ха, и правда) я забыл, что бейсик 128 можно использовать как калькулятор. Но всё равно геморно.

Saar
12.02.2016, 14:25
клавиши здесь не при чем. Просто команда переименовывает бэсик файл в "boot", который сам запускается при RUN.
вопрос был про то, как предотвратить автозапуск, а не о том как это работает. Я как бы не совсем тупой ;)

null_device
12.02.2016, 18:00
Saar, любая из этих трех команд (или, двух первых - без "параметров"), запускает файл с именем boot. Если ввести первые две с указанием конкретного имени - будет запущена другая программа (если она есть на дискете).
Если не изменяет склероз, в пентагон 128, вроде - как, при входе в tr-dos не происходит автозапуска программы boot.

Saar
12.02.2016, 19:52
null_device,
у меня TR-DOS не в прошивке, а ввиде betadisk.sys который автоматом стартует при выборе TRD образа в ESXDOS.
В принципе, если после выбора быстро нажать на ESC (BREAK в спектруме, вроде) то boot не успевает запуститься и я попадаю в строку ввода. Просто думал, что есть какой-то стандартный метод удержанием какой-то кнопки.

zebest
12.02.2016, 20:01
Есть ли быстрый запуск прог находясь в TR-DOS? На диске одна единственная прога, и набирать в строке
LOAD "ОчЕнЬ_ЗаКоВыРиСтОе_ИмЯ"
Ну в Speccy2010 есть же Gluk Boot как раз для этого . Очень удобно, часто пользуюсь, елси нет автозапуска и boot-a.
И еще.

В общем, зарелизил я то, что наваял. Думаю, проблемы с таймингами contendent памяти решены. По крайней мере, код выглядит стройно и почти как по "библии" Криса Смита. А значит не может быть неправильным
Твой код как то можно портировать на другие борды? хотя бы частично, ту же самую часть ULA хоть. Или все сильно связано с железом mist-a ?

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

а, ну да, у тебя глюк не пойдет, у тебя esxdos

molodcov_alex
12.02.2016, 20:57
А проверь эту поделку на реальном ZX128. Ибо в эмулях - полная фигня.(
Добрался наконец до спека, правда с видеозахватом сейчас беда, поэтому с ТВ:
http://savepic.net/7730837m.jpg (http://savepic.net/7730837.htm)http://savepic.net/7693973m.jpg (http://savepic.net/7693973.htm)

https://youtu.be/3FQGUTjXZBM

zebest
12.02.2016, 21:26
Добрался наконец до спека
Отлично же!! Значит два десятка эмуулей эмулят ZX128, но частично.
Особенно разочаровал SpecEmu, а я емууу таак верил (((

http://s1.micp.ru/1S05K.jpg

goodboy
12.02.2016, 22:55
Особенно разочаровал SpecEmu, а я емууу таак верил (((
у него похоже проблема с дешифрацией портов, а не с построением экрана

bc==#71fc ???
out (c),a

zebest
12.02.2016, 23:08
у него похоже проблема с дешифрацией портов, а не с построением экрана
ну это да, но ко всему - верхний бордюр дрожит. Кстати на видео плохо видно, дрожат ли вверху буквы. Подгонял то тайминги по этим 4-м работающим эмулям.. Надо же во что-то верить

Saar
12.02.2016, 23:18
Ну в Speccy2010 есть же Gluk Boot как раз для этого . Очень удобно, часто пользуюсь, елси нет автозапуска и boot-a.
Мне NEW "boot","имя" помог. Сделал на всех TRD файлах - и теперь всё с автозапуском.

Про Gluk Boot не знал. Надо почитать - может и можно прикрутить его.



Твой код как то можно портировать на другие борды? хотя бы частично, ту же самую часть ULA хоть. Или все сильно связано с железом mist-a ?
Конечно можно. Там почти нет привязки в видео модуле. Весь видео контролер находится в ula/video.sv
Из него можно убрать scandoubler если не нужен.
Проблема в том, что Speccy2010 написан так, что вставить в него будет не просто. Можно взять только непосредственно тормоз процессора, но скорее всего этого будет недостаточно, поскольку требуется еще и правильная выборка видео-данных в нужный момент времени. Учитывая что в Speccy2010 начало INT в 444 такте 247 строке, а у меня в 2/6 в 248 строке, то алгоритмы явно отличаются. Ну и у меня Т80а топ-модель вместо T80se - что тоже может повлиять на "растактовку" сигналов.
В принципе, портировать можно. Исходники и там и сям доступны.

molodcov_alex
12.02.2016, 23:40
Кстати на видео плохо видно, дрожат ли вверху буквы.
Не дрожат, всё чётко работает.

goodboy
12.02.2016, 23:47
ну это да, но ко всему - верхний бордюр дрожит.
если заглушить скролл outi/ret то дрожь в SpecEmu пропадёт.

а если изменить #71fc / #00fe
то появится нормальный скролл на-бордюре.

http://savepic.ru/8595092.png

Saar
13.02.2016, 00:05
zebest,
Там на самом деле каша из топора получилась. То есть от оригинала в моих исходниках ничего не осталось. Да и проц я уже на Т80 поменял, поскольку автор забросил свое творение и не жаждет больше исправлять глюки.
В оригинале, кстати, ULA тайминги не эмулируются. Запустить-то ты запустишь, только что ты там смотреть будешь - непонятно. Там даже загружать-то придется разве что с аудио входа.
Видеоконтроллер я с нуля заново переписал.

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

zebest,
Судя по форуму, у тебя что-то из DEx имеется. Переписать мой эмулятор под нее не сложно, ибо основная работа с диском совместима с MIST. Надо только отрезать обращение к SD карте на уровне SPI интерфейса (для MIST у меня дальше конвертируется в другой вид обращения). OSD опции перевести на переключатели. Надо только дописать загрузку ПЗУ из SPI-rom. И в общем-то всё.

goodboy
13.02.2016, 00:30
возможно)) но это мы поделку под эмуль подгоняем.. хотелось бы наеборот - чтобы эмууль подогнали бы под реальный спек.
попробую растормошить автора

Saar
13.02.2016, 05:59
еще бы мозги имелись, все это портировать)
Было бы желание ;)
Я FPGA первый раз "пощупал" 2 месяца назад.

Saar
09.03.2016, 16:52
Я решил обновить свой ZX Spectrum проект. После того как сделал эмулятор Вектора, у меня появился модуль эмуляции ВГ93 на регистровом уровне. Соответственно, хочу добавить поддержку TRD образов напрямую (сейчас это сделано через ESXDOS).

Соответственно, возникло куча вопросов, на которые я не могу найти конкретные ответы:
1) Какие именно порты отключаются при включении портов ВГ93? Если почти все, то тогда какие остаются доступными?
2) Когда происходит переключение на порты ВГ93? Вроде если PC в адресах 3Dхх находится. Но не уверен что диапазон правильный.
3) Когда происходит отключение портов ВГ93?

goodboy
01.08.2017, 20:23
zebest, ты ваще-то дееспособный ?
задаёшь (только тебе понятный) вопрос,
просишь скриншот с реала,
а найдя ответ на другом ресурсе удаляешь свои высеры

я про это

http://hype.retroscene.org/uploads/images/00/00/05/2017/08/01/92191b.png

zebest
22.01.2023, 10:59
ты ваще-то дееспособный ?
Вообще-то - нет, но сейчас не в этом суть вопроса.
Снова нужен скриншот с реала теста, ибо все, ВСЕ! эмули, могущие хоть как то эмулить пентагон - кто в лес, кто по дрова, 5 различных вариантов отображения. Выбирай любой :)
Не то, чтобы это сильно уж важно, просто забавненько как то, доктор (с)
Интересуют реальные Пентагон-ы, и Профи, который может в тайминги пентагон. А даже если и не может.
Есть ли?

Spectramine
23.01.2023, 01:54
Вообще-то - нет, но сейчас не в этом суть вопроса.
Снова нужен скриншот с реала теста, ибо все, ВСЕ! эмули, могущие хоть как то эмулить пентагон - кто в лес, кто по дрова, 5 различных вариантов отображения. Выбирай любой :)

Я насчитал 3 варианта:
1) Равномерный слегка дерганый скролл, как в SpecEmu и ZXMak2 (в СпекЭму ещё и звук фоновый)
2) То плавный, то дерганый скролл, как в Spectaculator, Fuse, UnrealSpeccy
3) В Спектрамине - плюс ко второму варианту ещё мелькает гребенка по краям букв, если включена опция глитчей Пентагона, без неё - как в 2)

Ставлю на свой эмуль) Буду рад, если кто-то подтвердит экспериментально.

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

На Эве гребенки не будет, на ней глитчи не эмулируются. Скорее всего тоже 2й вариант, хотя не уверен. В любом случае Эва - это железный эмуль, значит, нерелевантна.

Spectramine
23.01.2023, 02:28
Да, гр ебенка на твоем эмуле славная. Но так же, как у Вуди и в Спекуляторе.
Да нету вроде гребенки у Вуди и в Спектакуляторе. Если бы была, я бы увидел, и она бы ловилась по паузе. Она чисто от глитчей, которые нигде, кроме Спектрамина, не эмулируются (ну ещё в ZXDevStudio от Lion17, который малоюзабелен, к тому же неточен).

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

Эмуль Цезаря это, можно сказать, эталонный в своей нерелевантности эмуль)

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


На моем Профи - там вообще песня, но надо еще подтверждение)
Профи это не Пентагон. Надо смотреть строго на Пентагонах.

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

zebest, ты бы тестик-то выложил, а то я стесняюсь, не моё же)

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

Вот поймай такую гребенку где-нибудь ещё:
https://i121.fastpic.org/big/2023/0123/e6/ea96b03096b9b12276ed9c0ec0d1dce6.jpg (https://fastpic.org/view/121/2023/0123/ea96b03096b9b12276ed9c0ec0d1dce6.jpg.html)