Видеотерминал - немного мыслей

8-битные микроконтроллеры AVR (AT90, ATtiny, ATmega) от Atmel (в настоящий момент принадлежит Microchip)

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

emax wrote:c PAL камеры, LM1881 для связи с AVR. Или можно черное поле этой же AVR формировать, на это много ресурсов не надо
если авр сам будет видео генерить - может быть (хотя как там телетекст выводится - в сигнале гашения? не маловато времени?), а если принимать видео и выдавать модифицированное, то вряд ли...
Я тут за главного - если что шлите мыло на me собака shaos точка net
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Идея любопытная. Формируем пустое ч/б видео и подмешиваем туда телетекст. А сам телевизор уже его декодирует и выводит, причём в цвете. :kruto:
Применение правда весьма ограниченое - только телевизоры понимающие телетекст.
И посимвольный вывод не организуешь, только страницами, причём довольно медленно.
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Ну например в штатах все продаваемые телевизоры системы NTSC обязаны понимать субтитры (CC=Close Captioning), у меня лет 10 назад тоже была мысль попробовать генерить текст через CC - там буквы можно в любое место экрана ставить, однако строк там не так чтобы сильно дофига было - 16 чтоли...
Я тут за главного - если что шлите мыло на me собака shaos точка net
emax
Novelist
Posts: 43
Joined: 15 Sep 2014 22:32
Location: Пермь

Post by emax »

jdigreze wrote: И посимвольный вывод не организуешь, только страницами, причём довольно медленно.
почему медленно, если в телетексте только одна страница, то телевизор будет перезагружать ее довольно быстро. Зависит от того сколько строк телетекста утолкать в один КГИ. В PAL сигнале получается больше, чем в SECAM.
Только вот как телевизор перерисовывает страницу, посимвольно или полностью гасит, а потом рисует заново? Если заново, то будут заметные моргания.
emax
Novelist
Posts: 43
Joined: 15 Sep 2014 22:32
Location: Пермь

Post by emax »

готовую статичную страницу уже показывает:

Image
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Видеотерминал - немного мыслей

Post by masterspammer »

Ну вот, добрался я после затяжного переезда до своих игрушек!

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

Аппаратно это Atmega328 (потом будет 1284) на 20 Мгц. Вывод через честный SPI, 9-й паразитный бит модулируется вручную, итого из 9 байт (#0-#8 ниже) делается 8 байт на SPI и 8 отдельных бит, далее - повторяется ещё два раза и третий - не до конца, в сумме ровно 256 пикселей:

// SPI #0 76543210
// bit #1.7
// SPI #1 6543210 #2 7
// bit #2 6
// SPI #2 543210 #3 76
// bit #3 5
// SPI #3 43210 #4 765
// #4 4
// SPI #4 3210 #5 7654
// #5 3
// SPI #5 210 #6 76543
// #6 2
// SPI #6 10 #7 765432
// #7 1
// SPI #7 0 #8 7654321
// #8 0

Чуть кривовато (если первый бит SPI - 1, то он западывает), но выглядит съедобно, свободные такты есть, легко добавить палитру (на внешний мультиплексор) или работу со знакогенератором; добавить И палитру И знакогенератор вместе уже сложнее.

В итоге хочу "рулить" блоками по 8 строк, устанавливая для них независимо флаги символ/графика и возможно - уменьшенное разрешение, плюс ещё может быть - деление пополам - слева 128 пикселей, справа - 16 символов и наоборот.
You do not have the required permissions to view the files attached to this post.
emax
Novelist
Posts: 43
Joined: 15 Sep 2014 22:32
Location: Пермь

Re: Видеотерминал - немного мыслей

Post by emax »

если переходить на 1284, то лучше использовать второй UART в синхронном режиме, там девятого бита нет. Или 328pb у нее тоже два UART, но на 20Мгц она заводится с трудом. Сам хотел поселить в 1284 terminal basic вместе с выводом на экран и PC клавиатурой, но споткнулся о прерывания в basic, они портят картинку.
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Видеотерминал - немного мыслей

Post by masterspammer »

emax wrote:если переходить на 1284, то лучше использовать второй UART в синхронном режиме, там девятого бита нет.
Ну тут с одной стороны как с Кеннеди - "Мы решили лететь на Луну не потому, что это легко, а потому, что это сложно", про UART в синхронном режиме было бы нечего писать :-) а с другой - теперь есть выбор - где-то полезнее свободный SPI, а где-то второй UART (а кто-то душу отдаст за целый Port D). Так-то эти такты один фиг надо чем-то занимать, хоть NOPами.
emax wrote:Или 328pb у нее тоже два UART, но на 20Мгц она заводится с трудом.
Сейчас это как раз 328, у моей только 1 UART и она работает на 20 МГц, хотя вроде как расчитана на 16. Но для телевизионного вывода даже и 16 даст более 400 пикселей, это мне на VGA надо побыстрее.

А вот в синхронном режиме UART я бы аналогичным образом поиграл с "шестибитными байтами" - в 256 пикселей тогда влезет 42 символа 6*8 пикселей (а на телевизор влезет целых 85, что даст реализовать честный терминал нормального размера).
emax wrote:Сам хотел поселить в 1284 terminal basic вместе с выводом на экран и PC клавиатурой, но споткнулся о прерывания в basic, они портят картинку.
С прерываниями я кажется знаю, что можно сделать, но надо тоже покопаться. Сначала же починю синхронизацию и добавлю мультиплексор на порт с атрибутами.

Вот это выше ^^^ надеялся довести до состояния "грузит спектрумовскую заставку с магнитофона не гася экрана (а не как RK-86)" с единственным отличием - вместо мерцания второй бит яркости.
emax
Novelist
Posts: 43
Joined: 15 Sep 2014 22:32
Location: Пермь

Re: Видеотерминал - немного мыслей

Post by emax »

с 6-битными я уже поигрался, в 3байта по 8 уталкиваю 4 по 6. получается на 240 пикселей 30 байтов или 40 символов.
А с прерываниями там не знаю, что делать. Атомарные операции рекомендовано обрамлять CLI -SEI , в ардуинских библиотеках так и сделано, что рушит строчки если строчное прерывание попадает на это место.
Про внешний мультиплексор тоже думал для цветов, но как-то не спортивно - еще один чип.
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Видеотерминал - немного мыслей

Post by masterspammer »

emax wrote:с 6-битными я уже поигрался, в 3байта по 8 уталкиваю 4 по 6. получается на 240 пикселей 30 байтов или 40 символов.
Угу, а теперь [s]без рук[/s] байты брать из таблицы символов, а не видеопамяти, чтоб получить "аппаратный" знакогенератор и разумное потребление памяти.
emax wrote: А с прерываниями там не знаю, что делать. Атомарные операции рекомендовано обрамлять CLI -SEI , в ардуинских библиотеках так и сделано, что рушит строчки если строчное прерывание попадает на это место.
Не, CLI/SEI тут надолго радикально нельзя. А ненадолго оно само получится - одни команды 1 байт, другие 2, третьи 3... Эти мелкие неточности вроде можно отловить/поправить по регистру ICR, а вот что-то больше... надо пробовать.

Но я если что в микроконтроллерах __совсем__ начинающий, едва ли суммарно сутки (24 часа) проковырялся.
emax wrote:Про внешний мультиплексор тоже думал для цветов, но как-то не спортивно - еще один чип.
Ну тут надо; так-то по уму там надо и какие-то формирователи ставить (в Спектрумах вон на кт315), хотя можно вместо мультиплексора по аналогии с XMEM (у 1284 его нет) использовать дополнительную память одновременно и как мультиплексор и как хранилище палитры (выходит вкусно - отнимая от памяти всего 512 байт, можно задавать для каждого кода атрибута независимые цвет символа и фона из 256 возможных, например красный на чёрном сделать ярче чем на белом, только с этой памятью работать надо будет аккуратно и вручную).
emax
Novelist
Posts: 43
Joined: 15 Sep 2014 22:32
Location: Пермь

Re: Видеотерминал - немного мыслей

Post by emax »

masterspammer wrote:
Угу, а теперь [s]без рук[/s] байты брать из таблицы символов, а не видеопамяти, чтоб получить "аппаратный" знакогенератор и разумное потребление памяти.
так и делал, получилось на текстовый экран 40х25=1000 байтов ОЗУ.
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Видеотерминал - немного мыслей

Post by masterspammer »

emax wrote: так и делал, получилось на текстовый экран 40х25=1000 байтов ОЗУ.
Чёт-то мало, это на VGA или на телевизоре? Кажется мне, что добрая половина софта (Unix, CP/M) на таком работать нормально не будет, 80 захочет.

Даже при 16 МГц на телевизоре можно по 5 бит (не самый красивый шрифт, знаю) набрать 80 символов. Или дело было в имеющейся памяти?
emax
Novelist
Posts: 43
Joined: 15 Sep 2014 22:32
Location: Пермь

Re: Видеотерминал - немного мыслей

Post by emax »

на VGA, обычный телек для меня уже давно не актуален. У 328 всего 2кб ОЗУ, один из них под экран - это норм.
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Видеотерминал - немного мыслей

Post by masterspammer »

emax wrote:на VGA, обычный телек для меня уже давно не актуален. У 328 всего 2кб ОЗУ, один из них под экран - это норм.
Понятно, потому я и думаю опробовать 1284, что хочется даже не сколько графики, сколько шрифтов и цвета, а они любят память. Учитывая, что я обдумываю терминал, то мне придётся переезжать на телек как раз ради 80 символов.