С другой сороны, только что отключали лехтронергию, смею заверить, що керосиновая лампа и кирпичная печь - рулят.
Программно-аппаратное формирование видеосигнала
Moderator: Shaos
-
jdigreze
- God
- Posts: 1388
- Joined: 02 Jan 2006 02:28
- Location: Abakan
-
Lavr
- Supreme God
- Posts: 16805
- Joined: 21 Oct 2009 08:08
- Location: Россия
Мне иногда кажется, что всё придумали древние римляне с греками: всё назвали нужнымиjdigreze wrote:"Всё, что мы думаем, уже делается, всё, а что мы придумали, уже снято с производства".![]()
словами, на все случаи придумали подходящие цитаты и афоризмы...
Но меня так эмоционально подкинуло другое: я вроде сделал прикидки, посчитал, обсудил
с коллегами, но всё-равно в душЕ некий червь сомнения - а будет ли ОНО работать?
А ОНО - РАБОТАЛО 30 ЛЕТ НАЗАД! --- Вот это - ШОК!
PS. Вот только у меня сомнение, сможет ли 580ВМ80 успевать и регенерацию ДОЗУ выполнять
при таком способе?...
PРS. В общем-то здесь не курилка, а топик Galaksija из раздела Other retrocomputers...
iLavr
-
Lavr
- Supreme God
- Posts: 16805
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Galaksija на К580ВМ80?
В общем мысль у меня к Галаксии периодически возвращается, тем более что у нас теперь есть модель z80 aka 580ВМ80 для Протезуса.Lavr wrote:Учтём параметры полного телевизионного сигнала системы SECAM:
• Номинальная длительность строки Н = 64 мкс;
• Длительность гасящего импульса строк а = 12 мкс;
- (Откуда видимая часть строки = 52 мкс )
...
Рассмотрим всё же как оно по правде будет: 52 мкс / (4 такта * 1/F мкс)
F=2.0МГц 4 такта по 500нс = 2000нс = 2.000мкс - 26 символов в строке Кварц- 8 МГц
F=2.5МГц 4 такта по 400нс = 1600нс = 1.600мкс ~ 32 символа в строке Кварц- 10 МГц
F=2.7МГц 4 такта по 370нс = 1481нс = 1.481мкс ~ 35 символов в строке Кварц- 10.8 МГц
F=3.0МГц 4 такта по 333нс = 1332нс = 1.333мкс ~ 39 символов в строке Кварц- 12 МГц
F=3.5МГц 4 такта по 286нс = 1143нс = 1.143мкс ~ 45 символа в строке Кварц- 14 МГц
F=4.0МГц 4 такта по 250нс = 1000нс = 1.000мкс - 52 символа в строке Кварц- 16 МГц
А значит, можно уже некоторые прикидки поделать, исходя из того, что в этом топике обсудили...
Мне лично интересны 2 вещи: реализовать идеологию Галаксии (а может быть zx81) на процессоре 580ВМ80 без специфики z80.
И вторая мысль: использовать отдельный 580ВМ80 в качестве счетчиков, если это осуществимо...
Из процитированных выше расчетов оптимальным представляется вариант:
F=2.5МГц 4 такта по 400нс = 1600нс = 1.600мкс ~ 32 символа в строке Кварц- 10 МГц
Это дает нам геометрию 256х256 пикселей, но пиксель будет НЕ КВАДРАТНЫМ!
Я уж было начал делать кое-какие схемные прикидки, но стало мне интересно, а как будет выглядеть при этом экран?
Вариантов поручилось 2: первый - используем способ как в "Специалисте" и получаем 48 символов в строке.
Выглядеть это будет вот так: А второй вариант - не используем сдвигов и матрица символа - шириной в байт, это быстрее.
Но получаем 32 символов в строке, и выглядит это вот так: Я, кстати, искал схему Галаксии поразборчивее и увидел, что интерес к ней не пропадает.
Какие-то черти пытаются сделать её на CMOS... https://revspace.nl/Galaksija
Попадаются материалы по Галаксии-плюс, но как я вижу, это - попытка "дотянуть" её до уровня "Специалиста",
причем не совсем удачная, так что мне она не показалась интересной...
You do not have the required permissions to view the files attached to this post.
iLavr
-
b2m
- Devil
- Posts: 927
- Joined: 26 May 2003 06:57
Re: Galaksija
А ты уже придумал, как ты без регистра регенерации памяти будешь видео выводить в варианте Галаксии на 580ВМ80?
Я уже не помню где (может даже на этом форуме), но была вроде идея на время формирования строки видео
запускать процессор по видеопамяти, но он при этом должен получать NOPы, а считанные из ОЗУ байты должны записываться
в сдвиговый регистр. Только вот непонятно, как этот процесс заканчивать в конце строки. Видимо, тут надо как-то усложнять
дешифрацию адреса, чтобы для процессора видеопамять была "дырявая", с NOPами в видимой части строки.
Я уже не помню где (может даже на этом форуме), но была вроде идея на время формирования строки видео
запускать процессор по видеопамяти, но он при этом должен получать NOPы, а считанные из ОЗУ байты должны записываться
в сдвиговый регистр. Только вот непонятно, как этот процесс заканчивать в конце строки. Видимо, тут надо как-то усложнять
дешифрацию адреса, чтобы для процессора видеопамять была "дырявая", с NOPами в видимой части строки.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
http://bashkiria-2m.narod.ru/
-
Lavr
- Supreme God
- Posts: 16805
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Galaksija
Именно это я и придумал, а потом ещё и увидел, что так же сделано в zx80, обсуждали мы это прямо в этой ветке несколько страниц назад.b2m wrote:А ты уже придумал, как ты без регистра регенерации памяти будешь видео выводить в варианте Галаксии на 580ВМ80?
Я уже не помню где (может даже на этом форуме), но была вроде идея на время формирования строки видео
запускать процессор по видеопамяти, но он при этом должен получать NOPы, а считанные из ОЗУ байты должны записываться
в сдвиговый регистр.
И это можно уже начать проверять на имеющейся у нас модели 580ВМ80 aka урезанный z80, и потихоньку я уже начал это делать...
Но всё же интересно выяснить в чем была программно-аппаратная хитрость Галаксии. Если всё связано с регистром регенерации памяти, то для него мне известно следующее:
Что из этого, или из того, чего здесь нет, может помешать сделать "Галаксию" на современном z80?R: Регистр регенерации памяти, 8 бит. Увеличивается на 1 после каждой выборки команды, но инкремент затрагивает только младшие 7 бит, старший бит не меняется и может быть использован в программах.
- При выборке команды с префиксом, R увеличивается еще на 1. В блочных командах R увеличивается на 2 в каждой итерации.
- Для правильной работы LD A, R и LD R, A увеличение R должно происходить до выполнения команды.
- Прием прерывания увеличивает R на единицу.
По схеме оригинальной "Галаксии", которую я на днях, надеюсь, что дорисую, я вижу, что обращением к УВВ они тормозят z80 по WAIT с учетом М1, а строчный импульс из ожидания z80 отпускает на формирование строки.
Я прочитал где-то, что вроде как у некоторых клонов z80 есть отличия именно где-то в процессе обращения к УВВ.
Возможно, это еще может иметь значение?
iLavr
-
Lavr
- Supreme God
- Posts: 16805
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Galaksija
Я вот думаю, а не поставить ли таймер типа 8253 на формирование строчных и кадровых импульсов?
С одной стороны - он уберет 3...4 корпуса ИС... но с другой стороны, таймер - это как-то
не "по-нищебродски"...
Но программируемый таймер с прерыванием по нему - очень удобная вещь и даже несколько универсальная...
С одной стороны - он уберет 3...4 корпуса ИС... но с другой стороны, таймер - это как-то
не "по-нищебродски"...
Но программируемый таймер с прерыванием по нему - очень удобная вещь и даже несколько универсальная...
iLavr
-
Shaos
- Admin
- Posts: 24567
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Galaksija
http://zxpress.ru/book_articles.php?id=2054Lavr wrote:Я вот думаю, а не поставить ли таймер типа 8253 на формирование строчных и кадровых импульсов?
You do not have the required permissions to view the files attached to this post.
-
Lavr
- Supreme God
- Posts: 16805
- Joined: 21 Oct 2009 08:08
- Location: Россия
-
fifan
- Devil
- Posts: 917
- Joined: 06 Oct 2006 03:17
- Location: г.Лянтор,Сургутского р-на,ХМАО
Re: Galaksija
Мне кажется здесь разговор пошёл не о Галаксии, а о ZX80. Может всё это в другую тему?
-
Lavr
- Supreme God
- Posts: 16805
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Galaksija
Да нет... разговор здесь о том, как генерировать видео-сигнал программно-аппаратным способом,fifan wrote:Мне кажется здесь разговор пошёл не о Галаксии, а о ZX80. Может всё это в другую тему?
и Галаксия - просто хороший тому пример.
А ZX80 использует трюк с аппаратной подстановкой процессору кода NOP, хотя и не так, как я планировал.
Но разобрать его схемотехнику мне показалось полезным.
И нет нужды новые темы плодить, я считаю... пусть вся нужная информация лежит в одном месте.
По поводу программно-аппаратной генерации видео-сигнала на К580ВМ80:
что-то у меня структура видео-памяти неприятная сейчас вырисовывается - начала строк не выраниваются
на удобные числа.
Я планировал поместить видео-ОЗУ на адреса 0C000…DFFFH, 0E000 - начало служебного ОЗУ.
И строки должны были располагаться так:
Code: Select all
0C000…0C01F - 1100000000011111
0C020…0C03F - 1100000000111111
0C040…0C05F - 1100000001011111
0C060…0C07F и т.д.На обратный ход по строке у меня остаются 24 такта - это 6 NOP-ов или что-то другое...
Варианты: либо потерять на каждой строке лишних ячеек памяти - пропустить их, либо логическая
организация видео-ОЗУ будет весьма неудобной...
iLavr
-
Shaos
- Admin
- Posts: 24567
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Galaksija
а если сразу VGA сделать? там времянки другие - может удобнее будет? 
-
Lavr
- Supreme God
- Posts: 16805
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Galaksija
Не получится. Я рассчитываю для К580ВМ80А на тактовой частоте 2.5 МГц при частоте выдачиShaos wrote:а если сразу VGA сделать? там времянки другие - может удобнее будет?
пикселей 5 МГц.
И то всего получается выдать 256 точек в видимой части строки - это всего 32 байта.
А в VGA и этого не получится, т.к. К580ВМ80А для этих целей слабоват...
Давайте уж о реальном, а не об сюрреальном...
iLavr
-
Shaos
- Admin
- Posts: 24567
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Galaksija
а ты много точек хочешь? ну тогда да 
а то можно было бы при 31778 Гц строчной частоты и 5 МГц пиксельклока утолкать 157 точек в строку
это вместе со всеми синхро и гасящими импульсами - а реально там (исходя из 640+16+96+48 или 80%+2%+12%+6%) будет 125 строк (источник по таймингам: http://martin.hinner.info/vga/timing.html)
P.S. если частота будет чуть больше - скажем 5.084 МГц, то в строку влезет 160 точек, из которых видимый растр будет 128, front porch - примерно 3 пиксела, sync pulse - примерно 19 пикселов, back porch - примерно 10 пикселов
P.P.S. на самом деле можно процессор прерывать с частотой 31778 Гц, чтобы он выплёвывал видеостроку побайтно, а в конце видимого растра выдавал бы короткий импульс (и отпускал прерывание) и по этому импульсу простая схемка их резисторов и кондёра делала бы строчный синхроимпульс с нужными задержками
а то можно было бы при 31778 Гц строчной частоты и 5 МГц пиксельклока утолкать 157 точек в строку
это вместе со всеми синхро и гасящими импульсами - а реально там (исходя из 640+16+96+48 или 80%+2%+12%+6%) будет 125 строк (источник по таймингам: http://martin.hinner.info/vga/timing.html)
P.S. если частота будет чуть больше - скажем 5.084 МГц, то в строку влезет 160 точек, из которых видимый растр будет 128, front porch - примерно 3 пиксела, sync pulse - примерно 19 пикселов, back porch - примерно 10 пикселов
P.P.S. на самом деле можно процессор прерывать с частотой 31778 Гц, чтобы он выплёвывал видеостроку побайтно, а в конце видимого растра выдавал бы короткий импульс (и отпускал прерывание) и по этому импульсу простая схемка их резисторов и кондёра делала бы строчный синхроимпульс с нужными задержками
-
Lavr
- Supreme God
- Posts: 16805
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Galaksija
Я бы и все 384 точки хотел бы... но проц не потянет... так что только 256.Shaos wrote:а ты много точек хочешь? ну тогда да
а то можно было бы при 31778 Гц строчной частоты и 5 МГц пиксельклока утолкать 157 точек в строку
Глядя на свои расчеты и на план видео-ОЗУ, я пока сомневаюсь в подобной резвости К580ВМ80А на выбранной частоте.Shaos wrote:можно процессор прерывать с частотой 31778 Гц, чтобы он выплёвывал видеостроку побайтно, а в конце видимого растра выдавал бы короткий импульс (и отпускал прерывание) и по этому импульсу простая схемка их резисторов и кондёра делала бы строчный синхроимпульс с нужными задержками
Поэтому за INT будет дергать кадровая частота, поскольку если прерывать с частотой 31778 Гц,
проц замучается обрабатывать прерывания.
iLavr
-
Lavr
- Supreme God
- Posts: 16805
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Galaksija
В общем, на данный момент получается вот такой примерно расклад:
на тактовой частоте 2.5 МГц процессор К580ВМ80А выполняет операцию NOP за 4 такта по 400нс = 1600нс = 1.6 мкс
То есть каждые 1.6 мкс процессор способен менять адрес ячейки видео-ОЗУ и выдавать байт
в регистр сдвига.
Последний при этом выдвигает точки по строке с частотой 5 МГц.
На видимую часть строки приходится 32 операции NOP или 32 байта (32 х 8 = 256 точек).
Это составляет 51200 нс или 51.2 мкс.
На строчный гасящий остается 12800 нс или 12.8 мкс (32 такта по 400 нс) или 8 байт.
Таким образом, полная длина строки = 40 байт, то есть, через 1 строку начало строки будет не выровнено на параграф.
Я всё же хочу для удобства рассчетов координат точек на экране выровнять на параграф, но тогда
в каждой строке остается 8 неиспользуемых в отображении байт, а начала строк будут расположены
вот так:
Весь экран: 0C000…0EFFFH, 0F000… - служебная область.
Область 0C000…0EFFFH выбрана как верхняя четверть пространства в 64К.
Её удобно отслеживать селекторами по шине адреса, если будет необходимость.
(11000000.00000000 - 0C000 начало видео-ОЗУ, 11110000.00000000 - 0F000 конец видео-ОЗУ)
на тактовой частоте 2.5 МГц процессор К580ВМ80А выполняет операцию NOP за 4 такта по 400нс = 1600нс = 1.6 мкс
То есть каждые 1.6 мкс процессор способен менять адрес ячейки видео-ОЗУ и выдавать байт
в регистр сдвига.
Последний при этом выдвигает точки по строке с частотой 5 МГц.
На видимую часть строки приходится 32 операции NOP или 32 байта (32 х 8 = 256 точек).
Это составляет 51200 нс или 51.2 мкс.
На строчный гасящий остается 12800 нс или 12.8 мкс (32 такта по 400 нс) или 8 байт.
Таким образом, полная длина строки = 40 байт, то есть, через 1 строку начало строки будет не выровнено на параграф.
Я всё же хочу для удобства рассчетов координат точек на экране выровнять на параграф, но тогда
в каждой строке остается 8 неиспользуемых в отображении байт, а начала строк будут расположены
вот так:
Весь экран: 0C000…0EFFFH, 0F000… - служебная область.
Code: Select all
0C000…0C02F - 1100000000101111 - 0-я строка
0C030…0C05F - 1100000001011111 - 1-я строка
0C060…0C08F - 1100000010001111 - 2-я строка
0C090…0C0BF - 1100000010111111 - 3-я строка
и т.д.Её удобно отслеживать селекторами по шине адреса, если будет необходимость.
(11000000.00000000 - 0C000 начало видео-ОЗУ, 11110000.00000000 - 0F000 конец видео-ОЗУ)
Last edited by Lavr on 11 Jun 2016 12:38, edited 1 time in total.
iLavr
