|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Программно-аппаратное формирование видеосигнала
Author |
Message |
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Ты не забывай, что вся трудность как раз не в эмуляции ВВ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 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
2_HardWareMan
А может поступить как с дисководом в "Спеце"? При обращении к ВВ55 - вешаем
процессор программно по HOLD, готовим ему данные клавы, подставляем и
программно отпускаем HOLD. Это не затормозит всё шибко, но и "вешаться" по
скорости не придётся. HOLD - программно от PIC, чтоб не вешаться аппаратно насмерть
при различных сбоях.
PS. Или аппаратно всёж - раз ты говоришь реакции не хватает, но не триггером, а одновибратором через ИЛИ. Одновибратор - задержал по HOLD процессор, если мы получаем прерывание - подтверждаем HOLD уже программно через вывод PIC. Если мы через PIC не удержим, то одновибратор отпустит HOLD. А можно притормозить по READY - он на то и сделан, а окончательно уцепить за HOLD.
|
14 Mar 2011 14:51 |
|
|
shoorick
Doomed
Joined: 05 Nov 2007 05:08 Posts: 487 Location: Украина
|
может, замутить клаву спецу на.... 72/4= на 18 561КТ3? а чё? двунаправленные ключи не уверен, но думаю, что наскребу
|
04 Jul 2011 07:07 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
| | | | 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:
• Номинальная длительность строки Н = 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 точек!
Ну и промежуточные варианты есть...
Но надо помнить, что в случае такого схемотехнически нищебродского компьютера,
процессор выполняет полезную работу только во время обратного хода по кадру!
Поэтому имеет смысл число видимых строк в растре и подсократить...
У Galaksija их видимых - всего 208.
Вот такие предварительные ориентировочные расчеты...
_________________ iLavr
|
05 Sep 2012 23:25 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22606 Location: Silicon Valley
|
А мне чего-то кажется, что количество микросхем логики для отработки этих фейковых нопов будет соизмеримо с количеством микросхем для честной работы с видеопамятью мимо процессора, нет? Вот если бы проц заставить самому выталкивать 8-пиксельные кусочки в обработчике строковых прерываний - например так:
С маппингом портов в адресное пространство вроде получается на 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 пиксела в строке...
|
06 Sep 2012 21:54 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
> А мне чего-то кажется, что количество микросхем логики для отработки этих фейковых нопов будет соизмеримо с количеством микросхем для честной работы с видеопамятью мимо процессора, нет? Мне так не кажется - я даже это примерно представляю. Но, конечно, надо бы прорисовать схемотехнику... Тем не менее, я вижу - это проще, чем счётчики и мультиплексоры... Другой вариант - это заюзать второй 580ВМ80, как длинный счётчик... Ну надо разочек это попробовать! Все говорят, а никто не пробовал! 580ВМ80 на типичных частотах - не лучший вариант делать выдачу в порты... Ну разве что трюки с PUSH, как чистят экран в "Специалисте" - но выдача неравномерна. Z80 в этой роли куда лучше, И ТО В НЁМ НЕ БЕРУТ БАЙТ В [А]!!!
_________________ iLavr
|
06 Sep 2012 23:09 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Ещё вариант: можно сделать, чтобы чтение из видео-памяти автоматически записывало данные в сдвиговый регистр. Тогда достаточно MOV A,M / INX H (12 тактов) При 2.5Мгц получим ровно 10 символов
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
06 Sep 2012 23:21 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Можно использовать не только NOP. Есть куча команд, которые выполняются за 4 такта, арифметика, например. Т.е. достаточно зафиксировать D7=1 D6=0 D0=1 на шине данных процессора. Вот только, как элегантнее решить это для двунаправленной шины - вопрос.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
06 Sep 2012 23:29 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Например, если для шины данных используется двунаправленный буфер (а без него никак не "отрезать" данные из ОЗУ), то её можно подтянуть к еденице, а для 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 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
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 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Ну или так
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
06 Sep 2012 23:46 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Согласись - что другие команды аппаратно "подсунуть" труднее...
_________________ iLavr
|
06 Sep 2012 23:47 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Хотя, мне больше нравится притягивание шины к еденице. Тогда нет проблем с генерацией кода команды для прерывания RST 7. Или ты как-то иначе хотел прерывание делать?
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
06 Sep 2012 23:49 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ты немного не понял идею. К "0" всё будет притянуто не всегда, а через вентиль -
все резисторы за нижний конец - (NOP).
А в другом случае этот же вентиль - тянет все резисторы к "1" - RST7 !!!
Элегантная схемотехника?
_________________ iLavr
|
06 Sep 2012 23:54 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22606 Location: Silicon Valley
|
Действительно - так не на много сложнее будет
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
Last edited by Shaos on 07 Sep 2012 21:54, edited 1 time in total.
|
07 Sep 2012 21:25 |
|
|
Who is online |
Users browsing this forum: No registered users and 57 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
|
|