nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 22 Aug 2017 14:31



Reply to topic  [ 17 posts ]  Go to page 1, 2  Next
Video --> SPI 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Есть вот такой "микропроцессор" из игровых приставок Денди, точнее - это фактически микро-ЭВМ UM6561:

Image

Чаще всего она всё же встречается вот в таком виде:
Attachment:
um6561.jpg
um6561.jpg [ 24.24 KiB | Viewed 357 times ]

Но это не меняет сути, в одном чипе содержатся 6502-совместимый процессор,
с портами ввода-вывода, звуковым сопроцессором, контроллером ПДП, и видео-
контроллером.
В общем - полноценная микро-ЭВМ, функции которой задаются программой
из картриджа.

Недостаток в том, что видео-контроллер не гибкий и расточен сугубо под
телевизионные стандарты.
И есть в связи с этим у меня мысль слегка сыроватая... но мыслю я её довольно давно,
и, может быть, вместе доведем до ума: А что, если к этой микро-ЭВМ на чипе дендика
приделать LCD-дисплечик с интерфейсом SPI, скажем, типа Nokia 3310, но
сигнал SPI сформировать из видео-сигнала? :roll:

Я представляю это вот так: из полного видео-сигнала выделяем компаратором
строчные импульсы - они будут запускать одновибратор, формирующий строб
интерфейса SPI (SCK) посредине строки видео-изображения.
Содержимое строки видео-изображения нам доступно программно (хотя и очень
непрямым путём - через спрайты).
Для логической "1" программируем всю строку в уровень максимальной яркости,
а для логического "0" - вблизи уровня черного.
Attachment:
Zeilensignal_unmoduliert.gif
Zeilensignal_unmoduliert.gif [ 17.21 KiB | Viewed 357 times ]

Получится, что каждая видео-строка отвечает за 1 бит по интерфейсу SPI, что
должно позволить формировать изображение на экране LCD типа Nokia 3310.

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

Отягчающее обстоятельство: видео-контроллер Денди формирует по 256 точек
в 240 строках - после чего идет импульс гашения по кадру, и я не знаю,
формируется ли он в соответствии с ТВ-стандартом.
И второе: если одна строка отвечает за 1 точку на LCD, то за 1 кадр прорисуем
только 240 точек, а у Nokia 3310 - их 84х48 = 4032.

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

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

_________________
iLavr


04 Aug 2017 21:54
Profile
God
User avatar

Joined: 13 Nov 2010 07:06
Posts: 1270
Reply with quote
Если внутри микросхемы есть уже порты ввода-вывода, почему их не использовать для программного SPI? С Денди я вообще не знаком.


04 Aug 2017 23:50
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
VituZz wrote:
Если внутри микросхемы есть уже порты ввода-вывода, почему их не использовать для программного SPI?

Они "расточены" под ввод с джойстиков и специфической клавиатуры.

Поскольку у 6502 нет отдельного пространства ввода-вывода, можно, конечно, влепить и свои
порты в пространстве памяти картриджа.
Но использовать видео-сигнал как SPI всё же соблазнительно - видеоконтроллер всё-равно
торчит ведь на кристалле, и отключить его, насколько помню, нет возможности.

_________________
iLavr


05 Aug 2017 07:13
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
использовать видео-сигнал как SPI всё же соблазнительно - видеоконтроллер всё-равно
торчит ведь на кристалле, и отключить его, насколько помню, нет возможности.

Вобще говоря, если там внутри микро-ЭВМ полный аналог UM6538, то вроде как он отключается:
http://www.nedopc.org/nedopc/upload/6538.rar

_________________
iLavr


07 Aug 2017 10:22
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Джентльмены, подскажите простой пример программирования NES - вывести статичную картинку.
(кроме Рюмик С.М., КАК СОСТАВИТЬ ПРОГРАММУ ДЛЯ ГИТС НА БАЗЕ “DENDY” - это я читал, и
Архитектура и программирование Dendy” от Migera - тоже читал)

Можно на английском...
Я пошарил и сам в Интернете, но ничего подходящего пока не нашел... :-?


P.S. Вроде как зарубежные NES - кодописатели начинают вот отсюда: Nerdy Nights week 1...X

_________________
iLavr


08 Aug 2017 08:27
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
VituZz wrote:
С Денди я вообще не знаком.

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

Ну и тем, кто с Денди я вообще не знаком, я думаю, он будет интересен.
Attachment:
Famicom.pdf [107.63 KiB]
Downloaded 11 times

Ну и хелп-файл от MiGeRA пусть тоже на всякий случай рядом будет:
Attachment:
dendy.zip [628.25 KiB]
Downloaded 7 times

_________________
iLavr


11 Aug 2017 07:49
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Не хотелось мне читать про муторное программирование видеоконтроллера NES,
всё надеялся, что найду что-то типа программы "Монитор" для этой платформы... :-?

Но "Монитор" я не нашел, и пришлось прочитать и вникнуть в программирование
этого видеоконтроллера.
Несколько муторно там всё, что обусловлено маленькой видеопамятью в 1 Кбайт,
но идея моя вполне осуществима!
И самой положительной новостью оказалось, что видеоконтроллер NES позволяет
выставить цвет "чернее черного"!
Attachment:
NES_Palette.gif
NES_Palette.gif [ 29.65 KiB | Viewed 171 times ]

Это позволяет управлять выводом просто записывая такие элементы изображения
в видео-ОЗУ (блокировать вывод) без лишних аппаратных средств.

Единственное, что пока смущает, это цветовая вспышка... :-?
Attachment:
TV_2.gif
TV_2.gif [ 5.14 KiB | Viewed 171 times ]

Она как раз - на уровне "чернее черного", и может помешать компаратору.
Я так понимаю - она всё-равно присутствует, даже если выводится изображение BW.

Жалко, никто не сделал модель NES в Proteus, а то можно было бы логику предварительно
попробовать... а так - городить видеосигнал как-то придется... :wink:

_________________
iLavr


15 Aug 2017 06:04
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Джентльмены, подскажите простой пример программирования NES ...
...зарубежные NES - кодописатели начинают вот отсюда: Nerdy Nights week 1...X
Хороший обзор "с чего начать" программировать NES - здесь: Пишем для NES.
Жаль мне этот обзор поздно попался... но, тем не менее с кое-каким софтом помог! :kruto:


P.S. Также могут быть полезны следующие ссылки:
http://nesdev.com/archive.html;
https://www.zophar.net/utilities/nesgraph.html

_________________
iLavr


15 Aug 2017 12:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Ну вот и мой первый опыт самостоятельного программирования NES! :lol:
Так сказать, "Hello, world!" в среде NES...
Attachment:
Wellcome.gif
Wellcome.gif [ 4.84 KiB | Viewed 135 times ]

Честно говоря, все, кто программировал на "Микроше" или "Радио-86РК", справятся с такой задачей
без особых проблем.
Там надо настроить один раз ВГ75, а затем помещать коды символов в видеобуфер.

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

Ну и программирование 6502 очень похоже на программирование начинающего изучать i8080... :mrgreen:
Он знает, что есть аккумулятор А и пара регистров H, L (есть и другие - но пока не дочитал, и фиг с ними...) :wink:
Вот и у 6502 есть аккумулятор А и пара регистров X, Y, а больше ничего и нету! 8)

В общем-то для тех целей, что обозначены в топике, достигнутого уровня фактически достаточно.
А то меня всё смущало: ну как я буду делать что-то из NES, когда я её программировать не умею! :o
Теперь немножко умею... :mrgreen:


P.S. Пока программировал, просто подмывало меня заменить все эти BEQ и BNE от 6502 макросами на привычные
JZ, JNZ тем более, что в описании на ассемблер NESASM3 пример макроса был просто очень провокационный!
:wink:
Code:
            add    .macro       ; add a value to register A
                    clc         ; (handle carry flag)
                    adc   \1+1
                   .endm


P.P.S. А больше всего мешало при программировании, что LDA $2E - это не то, к чему привыкли люди,
начинавшие с КР580ВМ80А... У 6502 это: A<--[002E], а то что надо - это LDA #$2E ...
:mrgreen:

_________________
iLavr


16 Aug 2017 12:46
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Какая-то несостыковка получается при "соединении теории с практикой"... :-?

На всех теоретических картинках уровни белого и черного в видеосигнале идут без цветовых вспышек.
Это я, собственно, и хочу использовать для преобразования Video в SPI...

Но цветовая синхро-вспышка в теории всегда на заднем плече строчного гасящего на уровне "чернее черного".
Attachment:
TV_img_big8.gif
TV_img_big8.gif [ 75.53 KiB | Viewed 102 times ]


На всех же реальных осциллограммах уровни белого и черного в видеосигнале действительно идут без
цветовых вспышек, а вот цветовая синхро-вспышка, насколько я вижу - просто на уровне черного.
Хотя разница между черным и уровнем "чернее черного" по теории должна быть порядка 7%, т.е. заметна.
Attachment:
cea-pattern.gif
cea-pattern.gif [ 25.56 KiB | Viewed 102 times ]
Attachment:
iwatsu_screen_05.gif
iwatsu_screen_05.gif [ 107.21 KiB | Viewed 102 times ]

Получается, что уровень "чернее черного" понятие довольно условное (что черный, что
"чернее черного" - видеосигнал на обратном ходе гасят) и разделять видеосигнал, видимо,
лучше всё же по уровню синхоимпульсов... :-?

_________________
iLavr


17 Aug 2017 08:54
Profile
Senior
User avatar

Joined: 30 Mar 2017 03:55
Posts: 126
Reply with quote
Отделять именно синхроимпульсы, которые заведомо ниже черного и гасящих.
Дальше по ним привязать ФАПЧ, и можно уже будет восстановить всё остальное.


20 Aug 2017 14:19
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Annett wrote:
Дальше по ним привязать ФАПЧ, и можно уже будет восстановить всё остальное.

А что за ФАПЧ? И зачем ФАПЧ? :o Что-то у меня в мыслях и в тексте не было никакой ФАПЧ... :roll:
И что за "всё остальное можно будет восстановить" - тоже непонятно... :-?

Была мысль по уровню "чернее черного" (гасящему импульсу) ничего не выводить на LCD
во время обратного хода по кадрам.

_________________
iLavr


20 Aug 2017 14:24
Profile
Senior
User avatar

Joined: 30 Mar 2017 03:55
Posts: 126
Reply with quote
Ну пусть тогда будет PLL :)

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


20 Aug 2017 14:44
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Annett wrote:
Ну чтобы получить привязку к любым нужным моментам времени в сигнале, и дальше уже выделять всё что необходимо и делать с этим то, что хочется.

Да у меня там очень простая привязка - примерно на середине строки выдавать строб.
Вся строка - это "0" или "1".
Просто думал запускать формирователь строба по строчному гасящему, но чужие картинки
убедили меня, что лучше - по сточному синхро запускать формирование строба.
На время обратного хода по кадру - не выводить ничего, ибо это будут все "0".
А формирователь строба - скорее всего обыденный одновибратор типа АГ3 - попасть в середину
строки особая точность не нужна, так что вряд ли будет какая-то ФАПЧ или PLL.

Будем следовать завету старца Окамы - не творить излишних сущностей без нУжды... :wink:

_________________
iLavr


20 Aug 2017 15:02
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Annett wrote:
Ну чтобы получить привязку к любым нужным моментам времени в сигнале, и дальше уже выделять всё что необходимо и делать с этим то, что хочется.

Да у меня там очень простая привязка - примерно на середине строки выдавать строб.
Вся строка - это "0" или "1".
Просто думал запускать формирователь строба по строчному гасящему, но чужие картинки
убедили меня, что лучше - по сточному синхро запускать формирование строба.
На время обратного хода по кадру - не выводить ничего, ибо это будут все "0".
А формирователь строба - скорее всего обыденный одновибратор типа АГ3 - попасть в середину
строки особая точность не нужна, так что вряд ли будет какая-то ФАПЧ или PLL.

Будем следовать завету старца Окамы - не творить излишних сущностей без нУжды... :wink:



P.S. И, кстати, раскопал очень полезную вещь: цвет с его вспышками у видеоконтроллера можно
и вовсе отключить:

Quote:
Разряд 0 регистра 2001h, при установке в 1, запрещает вывод цветного изображения.
Остаются только градации яркости.

_________________
iLavr


20 Aug 2017 15:05
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 17 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.