nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 15:32



Reply to topic  [ 115 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 8  Next
Программно-аппаратное формирование видеосигнала 
Author Message
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Lavr wrote:
PS. И вот ещё что вспомнилось, подумав... Я запускал эмулятор Шевцова
на 286-й машине 20 МГц, всё работало, чуть тормозя, а в эмуляторе - не
только ВВ55, но и весь "Специалист МХ". А тут на 30 МГц только ВВ55 не
тянет, странно...

Ты не забывай, что вся трудность как раз не в эмуляции ВВ55, а в скорости выдачи данных. Напомню:
1. Цикл обращения в ВВ55. ВМ80 активирует строб примерно на 1-1,5 такта F2 (проверял осциллом, когда свой SVGA Spec делал). При условии, что у Специалиста F2=2МГц, и данные должны быть выданы до перехода 0=>1 на F2, то времени у нас от 500нс до 250нс. Не густо, если учесть что у AVR 1MIPS и он работает на 16МГц, то получается примерно 62,5нс на команду. Стало быть, в 250нс уместится всего 4 команды (в 500 8 соответственно, но мы учитываем наитяжелейший случай). А теперь вспомним время реакции на прерывание - кто-то тут говорил 4 такта (те самые 4 инструкции, не?). Выход: аппаратный слэйв порт (как у 8042) или более быстрый камень (ATXMega, например, или Cortex STM32, но тут вообще комбайн намутить можно).
2. Как происходит опрос ВВ55, в частности клавы? Выставляем 0 на матрицу и сразу же читаем ее. Итог: последовательность STA/LDA. Между фактическими обращениями всего 4 такта, правильно (цикл M1 от LDA). Так сколько времени на апдейт данных? Вывод: нужно заранее хранить все возможные данные от матрицы, чтобы тупо выдавать их по таблице лукапа. А это 2^12 ячеек на 6 бит (первый режим опроса) или 2^6 ячеек на 12 бит (второй вариант опроса), мы же все еще про спец говорим, правильно? Справедливо заметить, что клавиатура Ориона и РК в этом отношении максимально выгодна: всего 256 ячеек на каждый вариант.
Это 2 критических узла эмулятора клавиатуры на ВВ55. Все остальное время можно кушать данные с PS2, парсить их, строить таблички и т.д. и т.п.

PS Как жуткий вариант, можно использовать CS как запрос на прерывание, а потом тупо следить за битами RD/WR в однокомандном цикле (фактически 2 команды, т.к. 2 бита). Может проканать.


14 Mar 2011 14:43
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
2_HardWareMan

А может поступить как с дисководом в "Спеце"? При обращении к ВВ55 - вешаем
процессор программно по HOLD, готовим ему данные клавы, подставляем и
программно отпускаем HOLD. Это не затормозит всё шибко, но и "вешаться" по
скорости не придётся. HOLD - программно от PIC, чтоб не вешаться аппаратно насмерть
при различных сбоях.

PS. Или аппаратно всёж - раз ты говоришь реакции не хватает, но не триггером,
а одновибратором через ИЛИ. Одновибратор - задержал по HOLD процессор,
если мы получаем прерывание - подтверждаем HOLD уже программно через вывод
PIC. Если мы через PIC не удержим, то одновибратор отпустит HOLD.
А можно притормозить по READY - он на то и сделан, а окончательно уцепить
за HOLD.


14 Mar 2011 14:51
Profile
Doomed
User avatar

Joined: 05 Nov 2007 05:08
Posts: 487
Location: Украина
Reply with quote
Post 
может, замутить клаву спецу на.... 72/4= на 18 561КТ3? а чё? двунаправленные ключи :) не уверен, но думаю, что наскребу :)


04 Jul 2011 07:07
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
задумка есть вот какая:
По кадровому импульсу К580ВМ80 получает видео-INT. Заканчивает текущую
инструкцию и переходит к обработке прерывания. По характерным сигналам
схема на триггере вырабатывает сигнал WAIT и этим тормозит процессор.
Процессор молотит такты ожидания, выдерживая гашение по кадру.
Начало строки развёртки перебрасывает триггер, отпускает процессор
в работу и вот тут-то он...

выполняет по прерыванию команду JMP 9000H (или в видео-ОЗУ на начало).
На время действия прямого кадрового хода отдельным сигналом надо переключить
схему так, чтобы процессор при обращению к области видео-ОЗУ считывал
инструкцию NOP. То есть - он выдал адрес 9000Н и дал строб чтения RD, но
данные пошли не к процессору, а на регистр видео-сдвига.

По NOP К580ВМ80 ничего не делает и далее выставит адрес 9001Н . Возможно
надо точно тайминги посмотреть и для синхронности тормозить проц через
WAIT.
После того как проц во время действия прямого кадрового хода переберёт
весь видео-буфер, читая псевдо-NOP, сигнал начала обратного хода
развёртки по кадру снова разрешит процу обращаться к памяти как обычно.

Вроде как всё правильно. Параметры экрана, конечно, надо подсчитать.
Организация получится: 9000Н, 9001Н, 9002Н ... - в первой строке, и т.д.


Г-н petrenko напомнил мне о моей ностальгии по Galaksija на К580ВМ80, и я
устыдился, и решил просчитать растр хотя бы ориентировочно...

Ориентируемся, что команду NOP процессор К580ВМ80 выполняет за 4 такта.
Учтём параметры полного телевизионного сигнала системы SECAM:
Image

• Номинальная длительность строки Н = 64 мкс;
• Длительность гасящего импульса строк а = 12 мкс;
- (Откуда видимая часть строки = 48 мкс )

Рассмотрим для набор тактовых частот: 48 мкс / (4 такта * 1/F мкс)
F=2.0МГц 4 такта по 500нс = 2000нс = 2.000мкс - 24 символа в строке Кварц- 8 МГц
F=2.5МГц 4 такта по 400нс = 1600нс = 1.600мкс - 30 символов в строке Кварц- 10 МГц
F=2.7МГц 4 такта по 370нс = 1481нс = 1.481мкс ~ 32 символа в строке Кварц- 10.8 МГц
F=3.0МГц 4 такта по 333нс = 1332нс = 1.333мкс ~ 36 символов в строке Кварц- 12 МГц
F=3.5МГц 4 такта по 286нс = 1143нс = 1.143мкс ~ 42 символа в строке Кварц- 14 МГц
F=4.0МГц 4 такта по 250нс = 1000нс = 1.000мкс - 48 символов в строке Кварц- 16 МГц


Что мы имеем: экстремальные режимы (F=3.5МГц, F=4.0МГц) не всякий К580ВМ80
осилит, поэтому F=2.7МГц и 32 символа в строке - вполне удобный выбор.
(Напомню, у оригинальной Galaksija - видеорежим: только текстовый, 32 х 16 символов,
матрица 8 х 13 точек)

По стандарту развёрток как в "Специалисте", видимых строк у нас было 256,
а гасящий составлял: 3584 мкс / 64 мкс = 56 строк при полном числе строк растра - 312.

Если взять матрицу поскромнее, чем у Galaksija - 8 х 10 точек, получим 32 х 25 символов
на экране.
По стандарту Galaksija (32 х 16 символов) можем взять матрицу 8 х 16 точек! :o
Ну и промежуточные варианты есть...

Но надо помнить, что в случае такого схемотехнически нищебродского компьютера,
процессор выполняет полезную работу только во время обратного хода по кадру! :o
Поэтому имеет смысл число видимых строк в растре и подсократить...

У Galaksija их видимых - всего 208.

Вот такие предварительные ориентировочные расчеты... :wink:

_________________
iLavr


05 Sep 2012 23:25
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
А мне чего-то кажется, что количество микросхем логики для отработки этих фейковых нопов будет соизмеримо с количеством микросхем для честной работы с видеопамятью мимо процессора, нет? Вот если бы проц заставить самому выталкивать 8-пиксельные кусочки в обработчике строковых прерываний - например так:
Code:
LXI H, video-mem ; address of current line
LXI D, video-out ; address instead of port
; 19 ticks to send byte
MOV A,M ; 7
STAX D ; 7
INX H ; 5
; 19 ticks to send another byte
MOV A,M ; 7
STAX D ; 7
INX H ; 5
.... ; etc

С маппингом портов в адресное пространство вроде получается на 3 такта быстрее, чем с реальными портами. Выходит, что один проц, работающий на 2.5 МГц, успевает только 6.3 байта заслать в видимой части строки (это только 50 пикселов). А если поставить 4 процессора, у которых обработчики строковых прерываний будут разнесены по времени на 5 тактов друг от друга? Т.е. в первом процессоре обработчик прерывания сразу начинает молотить байтами, во втором в обработчике стоит одна команда MOV A,A (задержка на 5 тактов), в третьем - две (10 тактов), а в четвёртом - три таких команды (15 тактов). Каждый проц будет иметь в своей видеопамяти каждый четвёртый байт видео со смещением. Единственная проблема в том, что у нас 19 тактов шаг, а не 20 - возможно придётся тормозить процы ради вывода оставшихся пикселов (либо ставить 8085-е у которых INX H занимает 6 тактов, а не 5 как у 8080). И нам надо 8 бит сдвигать побитно на экран каждые 5 тактов - тогда получится 24*8=192 пиксела в строке...

_________________
:dj: https://mastodon.social/@Shaos


06 Sep 2012 21:54
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
> А мне чего-то кажется, что количество микросхем логики для отработки этих фейковых нопов будет соизмеримо с количеством микросхем для честной работы с видеопамятью мимо процессора, нет?

Мне так не кажется - я даже это примерно представляю. Но, конечно, надо бы прорисовать схемотехнику...
Тем не менее, я вижу - это проще, чем счётчики и мультиплексоры...

Другой вариант - это заюзать второй 580ВМ80, как длинный счётчик... :wink:
Ну надо разочек это попробовать! Все говорят, а никто не пробовал! :roll:

580ВМ80 на типичных частотах - не лучший вариант делать выдачу в порты... :(
Ну разве что трюки с PUSH, как чистят экран в "Специалисте" - но выдача неравномерна.
Z80 в этой роли куда лучше, И ТО В НЁМ НЕ БЕРУТ БАЙТ В [А]!!!

_________________
iLavr


06 Sep 2012 23:09
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
Ещё вариант: можно сделать, чтобы чтение из видео-памяти автоматически записывало данные в сдвиговый регистр. Тогда достаточно MOV A,M / INX H (12 тактов) При 2.5Мгц получим ровно 10 символов :)

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


06 Sep 2012 23:21
Profile WWW
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
Lavr wrote:
Мне так не кажется - я даже это примерно представляю.

Можно использовать не только NOP. Есть куча команд, которые выполняются за 4 такта, арифметика, например. Т.е. достаточно зафиксировать D7=1 D6=0 D0=1 на шине данных процессора. Вот только, как элегантнее решить это для двунаправленной шины - вопрос.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


06 Sep 2012 23:29
Profile WWW
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
Например, если для шины данных используется двунаправленный буфер (а без него никак не "отрезать" данные из ОЗУ), то её можно подтянуть к еденице, а для D6 использовать логический элемент с ОК, на вход которого подать сигнал чтения и управления этим режимом.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


Last edited by b2m on 06 Sep 2012 23:44, edited 1 time in total.



06 Sep 2012 23:43
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
b2m wrote:
Можно использовать не только NOP. Есть куча команд, которые выполняются за 4 такта, арифметика, например. Т.е. достаточно зафиксировать D7=0 D6=1 D0=1 на шине данных процессора. Вот только, как элегантнее решить это для двунаправленной шины - вопрос.

NOP - самый элегантный схемотехнически - это притянуть все данные резисторами
к шине "0".
Резисторами - чтобы STATUS-у не мешать на шине данных.

Другие варианты - сложнее схемотехнически.

NOP - делает всё автоматически. КОП - считывается на шину данных. Регистр сдвига -
хапнул его.
Но мы обманули проц - подсунули NOP - значит инкремент адреса, и процесс повторяется.

Чем-то напоминает принцип работы контроллера ПДП...

_________________
iLavr


Last edited by Lavr on 06 Sep 2012 23:49, edited 2 times in total.



06 Sep 2012 23:44
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
Lavr wrote:
притянуть все данные реисторами к шине "0".

Ну или так :)

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


06 Sep 2012 23:46
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
b2m wrote:
Lavr wrote:
притянуть все данные реисторами к шине "0".

Ну или так :)

Согласись - что другие команды аппаратно "подсунуть" труднее...

_________________
iLavr


06 Sep 2012 23:47
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
Хотя, мне больше нравится притягивание шины к еденице. Тогда нет проблем с генерацией кода команды для прерывания RST 7. Или ты как-то иначе хотел прерывание делать? :)

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


06 Sep 2012 23:49
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
b2m wrote:
Хотя, мне больше нравится притягивание шины к еденице.

Ты немного не понял идею. К "0" всё будет притянуто не всегда, а через вентиль -
все резисторы за нижний конец - (NOP).
А в другом случае этот же вентиль - тянет все резисторы к "1" - RST7 !!! :lol:
Элегантная схемотехника? :wink:

_________________
iLavr


06 Sep 2012 23:54
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
b2m wrote:
Ещё вариант: можно сделать, чтобы чтение из видео-памяти автоматически записывало данные в сдвиговый регистр. Тогда достаточно MOV A,M / INX H (12 тактов) При 2.5Мгц получим ровно 10 символов :)


Действительно - так не на много сложнее будет ;)
10 символов шириной 6 пикселов сгенерирует один процессор, а ещё 10 - второй процессор, т.е. всего 20 - с этим уже можно жить :)
Можно поддержать как текстовый режим, так и графический (но из каждого байта будет использоваться только старшие 6 битов для отображение шести точек на знакоместо или 120 пикселов по горизонтали)
А количество строк можно сделать настраиваемым (программно ведь генерим : )
Я могу попробовать построить такое на макетке в качестве разминки перед созданием nedoPC-580, причём можно сделать так, чтобы на этом двухголовом монстрике мог запускаться тот же многозадачный софт...

P.S. Вот кстати мои экспериментально подтверждённые растактовки видеосигналов NTSC и PAL для 10-мегагерцового пиксельклока:
http://www.nedopc.org/forum/viewtopic.p ... 8&start=40 (для 2.5-мегагерцового монстрика надо всё делить на 4)
Я начну с NTSC - будет 20x25 текстовый режим и 120x200 графический - причём по вертикали можно будет уменьшать...

P.P.S. Продолжение в топике nedoPC-280

_________________
:dj: https://mastodon.social/@Shaos


Last edited by Shaos on 07 Sep 2012 21:54, edited 1 time in total.



07 Sep 2012 21:25
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 115 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 8  Next

Who is online

Users browsing this forum: No registered users and 16 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:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.