bestm80eva / unrealspeccyp

Automatically exported from code.google.com/p/unrealspeccyp
0 stars 0 forks source link

v0.40 for Dingoo A320 - flickering screen on ILI9325 #71

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
Platform: Dingoo A320
Screen Controller: ILI9325
Emul version: v0.40
Problem: When enabled ray sync the screen flickering with a white background.

Original issue reported on code.google.com by volga...@gmail.com on 16 Nov 2012 at 7:14

GoogleCodeExporter commented 8 years ago
не помешало бы фото :)
с какой стороны, как сильно залазит на 
экран ?

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

Original comment by scorp...@gmail.com on 17 Nov 2012 at 11:04

GoogleCodeExporter commented 8 years ago
Мерцает белым большей частью в правой 
половине экрана. На фото это не видно, так 
что залил видео - http://www.youtube.com/watch?v=XleAwqH5F90 
Хотя на нем тоже плохо видно - белый цвет 
очень быстро мерцает, да еще и камера так 
близко не фокусируется.

Кстати, ты помнится хотел попробовать 
смиксовать BEEPER+AY+TAPE для Динги (как на 
Андроиде) и попробовать потянет ли на 
дефолтной частоте проца (хотя, ради такого 
дела имхо можно и разогнать - 400Мгц держат 
вроде бы все динги).

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

Original comment by volga...@gmail.com on 17 Nov 2012 at 4:24

GoogleCodeExporter commented 8 years ago
scorpizx>а вообще сделаю ещё персональную 
настройку...сразу после включения одно а 
через время как прогреется другое

))) OMG, это же надо настройку делать с учетом 
подогрева, чтобы она менялась 
соответственно :)

volgalom>ты помнится хотел попробовать 
смиксовать BEEPER+AY+TAPE для Динги (как на 
Андроиде)

scorpizx, ты хотел? :) попробуй - там микшер 
прикрутить 5-10 минут дела.

Original comment by djd...@gmail.com on 17 Nov 2012 at 10:10

GoogleCodeExporter commented 8 years ago
volgalom>И еще, заметил что на Динге не хватает 
функции паузы. На андроиде для этого 
достаточно в настройки залезть, а тут никак

в настройках есть пункт "pause"))

Original comment by djd...@gmail.com on 17 Nov 2012 at 10:13

GoogleCodeExporter commented 8 years ago
У меня девайс вроде не разогревается. По 
крайней мере минут за 15-20 характер мерцания 
экрана при включенной синхронизации не 
изменяется. Кстати, в старой версии с 
включенной синхронизацией ничего не 
моргало.
Быстренько состряпал и собрал версию с 
микшером (diff во вложении, только из меню 
переключатель источника звука не убирал) - 
в плане производительности никаких 
проблем нет. Вот только почему-то из 
динамиков какой-то низкочастотный гул 
слышу (в наушниках его нет, но возможно они 
просто такую частоту не тянут/фильтруют).
По поводу паузы - совсем позабыл про этот 
пункт в меню. %)

Original comment by volga...@gmail.com on 18 Nov 2012 at 10:14

Attachments:

GoogleCodeExporter commented 8 years ago
По поводу гула из динамиков - микшер 
оказывается тут ни при чем, просто раньше 
этот гул я не замечал. %)

Original comment by volga...@gmail.com on 18 Nov 2012 at 11:14

GoogleCodeExporter commented 8 years ago
В общем, собрал для себя версию с покером и 
куртизанками (во вложении). :)
Добавил в меню выбора источника звука 
пункт "all" (микшировать все источники) и 
повесил на правый шифт паузу. Красота! 
Осталось еще только с синхронизацией 
разобраться. Может подскажешь что можно 
подкрутить? Я в этом совсем ничего не 
понимаю.

Original comment by volga...@gmail.com on 18 Nov 2012 at 11:25

Attachments:

GoogleCodeExporter commented 8 years ago
у меня 31й контроллер, подогрев 
укладывается в blank период и лагов не вижу но 
это достигалось экспериментальным 
подбором.
раньше vsync это был фэйк который улучшал но 
не искоренял проблему, сейчас нет.
раз уж вы такие резвые :) подберите у себя 
параметры, мне надо знать в каком диапазоне 
разброс.
чё крутить, R_PORCHES это blank период в линиях 
(задержка), от 0x0101 до 0x0f0f. у меня выставлен в 
0x0909, чем больше тем лучше туда должна 
укладываться погрешность прогрева :). ну и 
R_FRAME_RATE, говорит сам за себя, выставил в 
51герц. попробуйте соседние значения, если у 
вас справа залазит это свидетельствует о 
том, что lcd спешит и надо замедлять 
попробуйте 48герц.

frame rate:
ILI9325: 2(45гц), 3(48гц), 4(51гц), 5(55гц), 6(59гц)
ILI9331: 6(43гц), 7(47гц), 8(51гц), 9(56гц), 10(62гц)

Original comment by scorp...@gmail.com on 18 Nov 2012 at 2:38

GoogleCodeExporter commented 8 years ago
звук когдато микшировал, но услышал щелчки. 
начал разбираться, выяснилось что device_sound 
выдаёт на разных девайсах разную длину 
буфера. в звуке я был не бельмес, короче 
забил, а так источник один качество 
максимальное производительность тоже, 
меня лично устраивало.
как там дела с переполнением в микшере, 
если одновременно будут несколько 
источников шпилить не поглючит?
есть идея с общим рендер таргетом чтобы 
писать каждый девайс в общий буфер, там 
правда теже глабли с переполнением да и 
первый источник придётся писать со 
стиранием буфера. но зато экономия по 
количеству операций чтения/записи, так 7, а 
так 5.

Original comment by scorp...@gmail.com on 18 Nov 2012 at 3:02

GoogleCodeExporter commented 8 years ago
scorpizx

Да нормально микшер на андроиде работает 
уже давно, ничего не переполняется.
Если dingoo успевает, то надо оставить версию 
с микшером, и убрать опцию, как это сделано 
в psp версии.

Original comment by djd...@gmail.com on 18 Nov 2012 at 4:09

GoogleCodeExporter commented 8 years ago
scorpizx

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

Original comment by djd...@gmail.com on 18 Nov 2012 at 4:22

GoogleCodeExporter commented 8 years ago
оно всё так нормально, только как начинаешь 
разбираться, багов вагон и маленькая 
тележка

Original comment by scorp...@gmail.com on 18 Nov 2012 at 4:34

GoogleCodeExporter commented 8 years ago
Смена частот (попробовал все доступные) 
почти никак не влияет - характер мерцания 
только едва заметно меняется.
Пытался подкрутить еще Porches - пробовал 
пограничные значения (0x109 и 0xf09). Характер 
мерцания тоже изменяется очень 
незначительно.
Так и должно быть или я что-то делаю не так? 
Мне казалось изменения должны были быть 
более визуально заметными.
Я правил возвращаемые значения в классе 
eLcd9325 функциях Porches() и FrameRate() для ray_sync=true.
Еще обратил внимание, что метод RaySync() в 
классе eLcd9338 реализован совсем иначе.
А ты на каких контроллерах экрана тестил?

Original comment by volga...@gmail.com on 18 Nov 2012 at 4:59

GoogleCodeExporter commented 8 years ago
Попробовал на динге свой эталонный тест - 
Dizzy 4 ( сборку скачал здесь: 
http://lu0.nitroroms.com/download/file/145604/Sinclair_ZX_Spectrum/Dizzy%20Colle
ction%2001%20(19xx)(-)(Ru).trd ).
Также как и на андроиде во время игры 
спикерный звук прыжка иногда так 
накладывается на AY-музыку, что слышны 
щелчки (и в наушниках, и во встроенных 
динамиках). Без микширования (только бипер 
или ау) никаких щелчков нет.

Original comment by volga...@gmail.com on 18 Nov 2012 at 5:19

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
о чём я и говорю, звук надо править, а как 
пока непонятно :)

насчёт экрана, даа, вот ведь задачка. у меня 
31й контроллер и такого жестяка нет, если и 
видно лаг то незначительный типо вылазит 
предыдущий кадр и иногда промаргивает 
полосочка белая толщиной в один пиксел но 
это если левые значения вписывать а так оно 
всё в blank'е происходит и на экране это не 
видно. нужно этот лаг за экран сдвинуть, 
если у тебя ничего не помогает то дело в чём 
то другом.

попробуй dingear там можно покрутить в сетапе 
параметры но подозреваю что не поможет

Original comment by scorp...@gmail.com on 18 Nov 2012 at 9:40

Attachments:

GoogleCodeExporter commented 8 years ago
А как микширование в оригинальном UnrealSpeccy 
сделано? Оттуда выдрать код не получится?

Запустил на своем девайсе Dingear 2.4. Экран 
сразу же оказался зеркалирован по 
горизонтали и точно также моргает белым, 
как и в USP с включенной синхронизацией.
Потыкался в Calibrate Screen. Смена Frequency и Blank Period 
ни на что не влияет.
При попытке покрутить Pixel Clock в большую 
сторону (до максимального 0x10) тоже ничего 
не дает, а при 0x08 экран переглючивает и уже 
не восстанавливается - помогает только 
ресет. В общем, этот эмуль совершенно не 
пригоден для использования на моем девайсе.

Original comment by volga...@gmail.com on 19 Nov 2012 at 5:52

GoogleCodeExporter commented 8 years ago
весело :(
попробуй поколдовать с Reset() скорей всего в 
ней проблема а именно в
for(int i = 0; i < 5; ++i) //wait for lcd reset
    Set(R_RESET, (1 << 4)|(1 << 5)|(1 << 8));

можешь закоментить Set чтобы убедиться что 
дело в нём
попробуй увеличить задержку цикл не до 5 а 
скажем до 10
ещё попробуй тот Set который в цикле 
поменять на
Set(R_RESET, 1|(1 << 4)|(1 << 5)|(1 << 8));
или
Set(R_RESET, 2|(1 << 4)|(1 << 5)|(1 << 8));
но у меня в таком случае экран не ресетится, 
подозреваю что и у тебя не будет
проверять надо на двухэкранных мерцающих 
эффектах лучше всего в демах, в идеале 
изображение на экране должно быть сплошным 
без разрывов

насчёт оригинального эмуля посмотрим, но 
подозреваю что микшер виндовый, там же под 
win32 и можно несколько потоков сразу 
отдавать, но возможно я и ошибаюсь

ps: а ты кто, бывший спектрумист?

Original comment by scorp...@gmail.com on 19 Nov 2012 at 9:43

GoogleCodeExporter commented 8 years ago
1. Для начала закомментил первые две 
строчки в Reset(). Белые мерцания полностью 
пропали, но экран стал еле-еле заметно 
рябить для некоторых цветов. Синхронизации 
картинки при этом совсем нет - экран 
обновляется как попало (еще хуже чем с 
отключенной синхронизацией). Кстати, с 
отключеной синхронизацией у меня границы 
двух кадров видны как диагональные полосы 
(растояние между ними - примерно 1/2 экрана), 
двигающиеся с левого нижнего до правого 
верхнего угла.

2. В следующем билде увеличил цикл в Reset() с 5 
до 10. Экран стал мерцать белым с более 
низкой частотой (раза в 2 реже) и затрагивая 
почти весь экран (ранее мерцала белым 
только правая часть экрана).

3. Еще один билд сделал с циклом из 1 шага 
(всего один сет в цикле). Экран стал мерцать 
вертикальными темными черезколоночными 
полосами (т.е. сначала полоса обычная, потом 
темнее) с шириной колонки в ~1/3 экрана со 
случайным положением по горизонтали (т.е. 
колонка из обычных/темных полос прыгает по 
горизонтали по экрану).

4. Затем поменял в цикле сет на Set(R_RESET, 1|(1 << 
4)|(1 << 5)|(1 << 8)); и сделал цикл как было до 5. 
Получилось как в первом случае - экран едва 
заметно рябит (но с белым не мерцает) и 
синхронизации нет.

5. После прописал в цикле Set(R_RESET, 2|(1 << 4)|(1 << 
5)|(1 << 8));. Сам цикл остался до 5. Получилось 
опять как в первом варианте.

Еще какие варианты есть?

P.S.:
В каком смысле кто я? Спекки у меня был в 
90-ые (Ленинград 48Кб, потом какая-то 48Кб 
самоделка и затем Пентагон 128Кб). На 
спекки-сцене я вообще никак не засветился - 
программил убогие демки/гифты чисто для 
себя/родни/друзей, уже почти ничего и не 
сохранилось, потом ушел на ПиСи, но со 
времен ДОСа юзал разные спектрумские 
эмуляторы. Сейчас я программер в крупной 
финансовой организации (программил в 
разное время на более десятка ЯП - от x86 asm до 
java/python/c#). Вот и вся типичная история 
спктрумиста. :) Если интересны какие 
подробности, то могу написать лично.

Original comment by volga...@gmail.com on 19 Nov 2012 at 11:03

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
попробуй так
virtual void Reset()
{
    Set(R_RESET, (1 << 4)|(1 << 5)|(1 << 8));
    for(int i = 0; i < 5; ++i) //wait for lcd reset
        Set(R_GRAM_WRITE);
    Set(R_RESET, 3|(1 << 4)|(1 << 5)|(1 << 8));
    Set(R_GRAM_WRITE);
}

>>P.S.: В каком смысле кто я? Спекки у меня был 
в 90-ые
да ладно забей, просто часто проскакивают 
знакомые лица типа pROF'а Fil'а, они тут тоже 
бывают

Original comment by scorp...@gmail.com on 19 Nov 2012 at 11:25

GoogleCodeExporter commented 8 years ago
Попробовал. Экран мерцает белым в правой 
части эрана, а в левой чуть заметно рябит. 
На черном бордюре временами полосами 
отображаются светлые куски изображения 
(как и раньше). Т.е. вроде бы все так же как и 
было.

Original comment by volga...@gmail.com on 19 Nov 2012 at 11:36

GoogleCodeExporter commented 8 years ago
>Запустил на своем девайсе Dingear 2.4. Экран 
сразу же оказался зеркалирован по 
горизонтали и точно также моргает белым, 
как и в USP с включенной синхронизацией.
Потыкался в Calibrate Screen. Смена Frequency и Blank Period 
ни на что не влияет.
При попытке покрутить Pixel Clock в большую 
сторону (до максимального 0x10) тоже ничего 
не дает, а при 0x08 экран переглючивает и уже 
не восстанавливается - помогает только 
ресет. В общем, этот эмуль совершенно не 
пригоден для использования на моем девайсе.

Это при том, что hhhikr в нем vsync пилил пол года.

Original comment by djd...@gmail.com on 19 Nov 2012 at 8:47

GoogleCodeExporter commented 8 years ago
>>В общем, этот эмуль совершенно не пригоден 
для использования на моем девайсе.
>Это при том, что hhhikr в нем vsync пилил пол года.

Может это у меня девайс какой-то особенный 
или он вообще для моего контроллера экрана 
не тестил.

Original comment by volga...@gmail.com on 20 Nov 2012 at 6:25

GoogleCodeExporter commented 8 years ago
угадал!
просто хичхикер запилил под себя сразу но 
под остальные контроллеры так и не 
получилось. я делал на основе его идеи 
только проще. у него ещё был баг, нужно было 
поставить задержку чтобы не глюкало на 31х 
контроллерах.

по поводу твоего бага, я его у себя 
воспроизвёл, но выводы не радостные. 
короче, баг воспроизводится если в первом 
Set'е сбросить 5й бит. у меня весь экран 
заливает светлым градиентом и мерцает.

в даташыте написано, что:
GON(5бит) and DTE(4бит) Set the output level of gate driver G1 ~ G320 as 
follows:

GON DTE G1 ~G320 Gate Output
0   0   VGH
0   1   VGH
1   0   VGL
1   1   Normal Display

тобиш как я понял выставляет напругу на 
строки лцд матрицы. заметь я эти биты 
устанавливаю в 1цу и это правильно, но на 25х 
контроллерах при отключении дисплея GON 
зануляется чтоли. видать илитековцы чтото 
поменяли. и скорей всего такая борода на 
всех 25х, насчёт 38х я тоже не уверен, там 
вообще всё переколбасили все адреса 
регистров и не только. вот такая ерунда.

Original comment by scorp...@gmail.com on 20 Nov 2012 at 10:06

GoogleCodeExporter commented 8 years ago
Я нифига не понял (хотел было приложить 
картинку на знаменитый мем, но потом решил, 
что здесь все-таки культурное общество), но 
в общем-то лично меня отсутствие 
синхронизации не очень напрягает. :)

Original comment by volga...@gmail.com on 20 Nov 2012 at 1:51

GoogleCodeExporter commented 8 years ago
попробуй ещё на последок в первом Set'е 
который в цикле
Set(R_RESET, (1 << 4)|(1 << 5)|(1 << 8));
перебрать все комбинации 4го и 5го бита
ну тоесть:
(0 << 4)|(0 << 5)
(0 << 4)|(1 << 5)
(1 << 4)|(0 << 5)
(1 << 4)|(1 << 5)

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

Original comment by scorp...@gmail.com on 20 Nov 2012 at 2:33

GoogleCodeExporter commented 8 years ago
scorpizx

может, лучше прикрутить vsync при подключении 
к TV?
это же будет rulez!!!11

Original comment by djd...@gmail.com on 20 Nov 2012 at 2:54

GoogleCodeExporter commented 8 years ago
Перепробовал в цикле процедуры Reset() 
установку всех возможных комбинации битов 
4, 5 и 8 - практически никаких изменений.
А как включить предыдущий (фейковый) режим 
синхронизации? Много кода переделать 
придется?
Синхронизация на ТВ - поддерживаю. А это 
вообще реализуемо? Жаль только я свой 
AV-шнурок от Динги куда-то задевал и 
протестить не смогу.

Original comment by volga...@gmail.com on 20 Nov 2012 at 4:28

GoogleCodeExporter commented 8 years ago
djdron
а ты к телику подключаешь? я уж и забыл 
когда в последний раз.

телевыход не ковырял совсем, а что разве 
нет синхры на нём, я и не знал :)
никто не ресёрчил?

volgalom я добавлю нужные опции, будет выбор 
типа vsync'а

Original comment by scorp...@gmail.com on 20 Nov 2012 at 6:05

GoogleCodeExporter commented 8 years ago
Ну, подрубал, когда делал отключение vsync. 
Синхры нет, полоса едет плавно сверху-вниз.
Ну и плюс можно сделать фичу, чтобы если 
запускаешь эмуль с подключением к тв, то 
текущие опции vsync отключаются (там должен 
работать свой vsync). А тосейчас надо 
предварительно выключить vsync, выйти из 
эмуля, потом включить выход на телек, потом 
опять запустить.

Original comment by djd...@gmail.com on 20 Nov 2012 at 7:50

GoogleCodeExporter commented 8 years ago
scorpizx, протестил на своем девайсе твой патч 
в ревизии 840 ( 
http://code.google.com/p/unrealspeccyp/source/detail?r=840 ).
При RAY SYNC = PERFECT смена VBLANK ни на что не влияет, 
а увеличение FRAME RATE увеличивает частоту 
мерцания и уменьшает время белой заливки 
при мерцании. Т.е. чем больше значение, тем 
чаще и быстрее мерцает белым правая 
половина экрана.
Идеальным вариантом для меня остается 
режим RAY SYNC = RAW.

Original comment by volga...@gmail.com on 26 Nov 2012 at 7:54

GoogleCodeExporter commented 8 years ago
да всё уже ясно :) для того и сделал разные 
режимы синхры, у кого не заработает для тех 
лучшим вариантом остаётся RAW.
перфект к сожалению на 9325 не прокатит, ибо 
это злой хак. даже по дашашиту сказано что 
при сбросе контроллера надо выдерживать 
паузу в несколько фреймов и выполнять 
поэтапно, ну а тут передёргивает его 
практически мгновенно.
ещё бы владельцы 9338х отозвались, для меня 
это тёмный лес.

Original comment by scorp...@gmail.com on 26 Nov 2012 at 1:48

GoogleCodeExporter commented 8 years ago

Original comment by djd...@gmail.com on 14 Mar 2013 at 4:38