 |
nedoPC.orgElectronics hobbyists community established in 2002 |
 |
Программно-аппаратное формирование видеосигнала
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 21045 Location: Silicon Valley
|
Ну ты сразу же и написал сам, что эту схему "весёлых людей" "прочитать практически невозможно" - я уж не стал от себя добавлять 
|
22 Jun 2016 12:38 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Строчный синхроимпульс расширил и сориентировал по стандарту относительно строчного гасящего: С кадровой синхронизацией призадумался: хотел задействовать третий канал таймера под это, но тормозит меня мысль, что в компьютере, который 50 раз в секунду перывается на обновление экрана, третий канал таймера, видимо, лучше оставить под генерацию звука спикером? А кадровый синхроимпульс, возможно, сформировать чисто на одновибраторах... Продумываю задно, как это всё собрать на макетке с U880 - еще один мешающий фактор всплыл: в режиме отображения видео-ОЗУ счетчик до 3-х считает непосредственно фронты на адресной линии А3 процессора К580ВМ80А, но у Z80 по А3 "шарится" заодно и счетчик регенерации... Тактировать что-ли счетчик до 3-х... но это опять распирает схему... Какая-то злобнозаточенная под К580ВМ80А схема получилась... 
_________________ iLavr
|
24 Jun 2016 17:18 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|

Тут вот какая двойственность получается: стабильная кадровая частота в схеме уже есть - она используется для INT =50 Гц, вызывающего процессор для обновления экрана. Но получатся, что этот импульс находится в самом конце кадрового импульса гашения. Если брать 2 одновибратора из 555АГ3, то один из них должен отработать по запуску от INT интервал, б ольший видимой части кадра, чтобы попасть на середину следующего импульса гашения, где второй одновибратор из 555АГ3 сформирует длительность КСИ. Я боюсь, что на интервале такой длительности у одновибратора 555АГ3 будет заметен джиттер из-за конденсатора. В результате будет неустойчивость по кадру. Вариант с таймером: канал 3 настраиваем в режим 5 и запускаем по INT, а сам КСИформируем по длительности опять же одновибратором из 555АГ3. Здесь другая проблема: режим 5, насколько я помню, не возобновляемый, хотя и запускаемый аппаратно по GATE. Значит в конце каждого кадра процем надо записать в канал 3 делитель. Если проц ушел в задачу и не откликается на INT =50 Гц, синхронизация по кадру будет потеряна. А мне хотелось, чтобы синхронизация в этом случае не терялась...
_________________ iLavr
|
25 Jun 2016 09:16 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|

Склонился я-таки в сторону одновибраторов на К555АГ3 в формировании развертки по кадру... Множество материалов убеждают, что длительность импульса на К555АГ3 достаточно стабильна. И раз уж есть прерывание 50 раз в секунду, то во время него неплохо и клавиатуру опрашивать и контролироват длительность звука канала 3 таймера интервалами по 20 mS. При 256 строках развертки в видимой части экрана длительность задержки должна составить 1776 мкс при 160 мкс КСИ по стандарту. Расчет следующий: Кадровая развертка: 312 строк при прогрессивной развертке составляют 312 х 64 мкс = 19968 мкс = 19.968 мс. Видимая часть строки: 256 х 64 мкс = 16384 мкс = 16.384 мсКадровый гасящий импульс: 19968 мкс – 16384 мкс = 3584 мкс Кадровый синхроимпульс: 160 мкс (по стандарту и примерно посредине гасящего) Половина гасящего: (3584 мкс - 160 мкс)/2 = 1712 мксНо запуск на 64 мкс раньше => dT = 1712 мкс + 64 мкс = 1776 мкс (one-shoot) Сразу и сделал оценку насколько занят процессор: Видимая часть кадра составляет 82,05% от всего периода, откуда процессор не занят обновлением экрана всего лишь 17,95% времени. Это несколько удручает, и склоняет к развертке в 192 строки, для них: 61,54% – видимая часть кадра, а 38,46% – не занят процессор, это лучше! Осциллограммы я смотреть не стал, т.к. все-равно одновибраторы в расчете идеальные, а кадровый импульс приходится ждать довольно долго. 
_________________ iLavr
|
26 Jun 2016 15:47 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
После консультаций с PVV, допилили мы модель z80(aka K580BM80) драчовым напильником, так что теперь нужный сигнал /INTE будет выдаваться через вывод /RFSH. Всё равно у K580BM80 никакого /RFSH нет в помине даже "в шкуре" z80... Так что начал я потихонечку пробовать "собирать" опробованную идею в Протезусе. Все "грязные трюки", в принципе, сработали как и ожидалось... Схема пробы грязных трюковА то я уж начал опасаться, что Протезус не поймет притяжки шины данных резисторами то к лог. "1", то к "0", поскольку у него на этот повод " цифровые резисторы" разные: pull-up и pull-down - соответственно... Но - вроде обошлось... Протезус справился... Конечно, порешать это всякими костылями в принципе было бы можно, но схему и так уже начинает распирать от лишнего - всё-таки она конструировалась под K580BM80...  Один только аналог простого двунаправшенного ШФ К580ВА86 чего ст Оит! 
_________________ iLavr
Last edited by Lavr on 04 Jul 2016 22:35, edited 1 time in total.
|
04 Jul 2016 15:22 |
|
 |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 21045 Location: Silicon Valley
|
А картинки то нету...
|
04 Jul 2016 21:25 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Это у тебя какой-то глюк форума - картинка то видна, то не видна... Она закачана на форум - вот на неё "кривая" ссылка: http://www.nedopc.org/forum/download/file.php?id=1040По ссылке - открывается. А под спойлером как-то через раз... P.S. Ну, поскольку глюк я и сам заметил, то скачал картинку с форума и залил её под спойлер заново...
_________________ iLavr
|
04 Jul 2016 22:32 |
|
 |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 21045 Location: Silicon Valley
|
Теперь видно (а по старой ссылке как не открывалось, так и не открывается)
|
04 Jul 2016 23:05 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну вот смотри: нажал я на ссылку постом выше и всё тут же открылось!  Не будешь же ты мне говорить, что я под спойлер приписал опять " huj" ? P.S. Если кому ещё не видно - кликаем следующую ссылку: http://www.nedopc.org/forum/download/file.php?id=1041 Ну да ладно... пошел я в отпуск!... 
_________________ iLavr
|
05 Jul 2016 06:56 |
|
 |
fifan
Devil
Joined: 06 Oct 2006 03:17 Posts: 817 Location: г.Лянтор,Сургутского р-на,ХМАО
|
Да ладно. Отпуск не на Луне? в смысле на форум будешь заходить?
|
06 Jul 2016 07:50 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|

А с нашим хобби отдыхать полноценно можно только на Луне, причем не брать с собой ноутбука... А иначе после нескольких дней неорганизованного безделия тянет что-то сконструировать!... Хотя, как говорят в одном моем любимом фильме:" Если проблема не решается, надо отвлечься..." А проблема была такая, что не нравился мне в моей конструкции таймер К580ВИ53... А делитель частоты на одновибраторе при больших коэффициентах деления (5МГц до 15625 Гц) будет, похоже что, проскакивать точные нужные значения из-за неизбежного "джиттера"... И как мне кажется, я нашел удобоваримое нищебродское решение: сделать одновибратор синхронным с запускающим сигналом. В этом случае все мелкие неточности длительности "спрячутся" привязкой к фронтам запускающего сигнала. На картинке я как раз сформировал строчный синхросигнал из сигнала с б Ольшей частотой, меньше, правда, чем 5МГц, чтобы процесс понаблюдать... Видна аккуратная привязка к синхросигналу. Попробую теперь "уволить" таймер К580ВИ53 из конструкции... P.S. В общем-то на двух таких каскадах весьма четко получается строчная частота с импульсом строчной синхронизации нужной длительности ~4мкс.Первым каскадом из 5МГц получаем частоту 250кГц (период 4мкс). Коэффициент деления = 20. Это довольно-таки немного. Вторым каскадом из 250кГц получаем 15625Гц с длительностью импульса ~4мкс. Коэффициент деления = 16, что тоже вполне приемлемо...
_________________ iLavr
|
08 Jul 2016 18:18 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А вот эта мысль ну оооооочень правильная! Только не с 0хс020, а с 0хс030 и далее - кратно 30Н... Действительно, похоже на то, что получается ситуация, при которой можно выводить заданное количество строк на экране. Сейчас сам так в отладке делаю, чтобы не ждать, когда эмулятор "прокрутит" полное число строк. Ибо ждать полное число строк в симуляции довольно долго...
_________________ iLavr
|
10 Jul 2016 09:05 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Что-то у меня такое нехорошее впечатление складывается, что на этой модели под Протезусом правильно всё работать не будет...  Растактовки команд, похоже, что отличаются от оригинального К580ВМ80А... А на обратном ходе по строке у меня там точно посчитано в тактах всё. P.S. Кстати говоря, когда я по тактам рассчитывал, пользовался вот этим источником. Система команд микропроцессора К580ВМ80А Но вроде как пара опечаток в этом "полотнище" есть. Поэтому контролировал я сам себя по следующему он-лайн документу: http://www.pastraiser.com/cpu/i8080/i8080_opcodes.htmlОшибиться по идее - не должен был...
_________________ iLavr
|
11 Jul 2016 04:13 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|

Мы с Shaos-ом посоветовались и решили выделить эту тему из топика Galaksija, чтобы не мешать его развитию. Заодно я решил итоговую схему по этой теме: программно-аппаратное формирование видеосигнала на К580ВМ80А выложить здесь, поскольку "причесать" её окончательно руки так и не дошли... Аналог Galaksija на 580 (оригинал)Но всё же я над оригиналом схемы поработал значительно и отрисовал вот такой вариант: Аналог Galaksija на 580 (схема по ГОСТ)Насколько этот вариант окончательный и безошибочный, мне сейчас точно сказать уже трудно. Под схему было тестовое программное обеспечение: Тестовое ПО аналога Galaksija на 580 |  |  |  | Code: ORG 0000H
CONST PORTOUT 0FFE0h CONST PORTINP 0FFE1h
CONST TIMER_0 0FFE4h CONST TIMER_1 0FFE5h CONST TIMER_2 0FFE6h CONST TIMERYC 0FFE7h
:START LXI SP,1FFFH XRA A STA PORTOUT; таймер изначально выключен CALL INITMR LDA PORTINP; читаем порт ORI 00000111B; установим биты упр.таймера STA PORTOUT; выведем в порт ; CALL GETBIN :WAITKEY LDA 0C000H STA 0C000H :WAITIT LDA PORTINP ANI 80H JZ WAITIT :WAITUP LDA PORTINP ANI 80H JNZ WAITUP JMP MAINLOOP SKIP 38H :REST7 ; EI; Restart_7 = 0038H ; HLT ; JMP REST7 JMP 0C000H; видео-ОЗУ SKIP 100H :MAINLOOP ; EI :INIRGE MVI E,00001000B :GETBYTE LDA PORTINP; читаем порт ANI 00000111B; выделяем биты упр.таймера ORA E; установим бит пробега STA PORTOUT; выведем в порт MOV A,E ORA A RLC JC RSHIFT MOV E,A
LDA PORTINP ANI 80H JNZ WAITIT ; LXI B,01FFH ; CALL DELAY JMP GETBYTE
:RSHIFT MVI E,80H :SETBYTE LDA PORTINP; читаем порт ANI 00000111B; выделяем биты упр.таймера ORA E; установим бит пробега STA PORTOUT; выведем в порт MOV A,E RRC CPI 00000100B; JZ INIRGE MOV E,A
LDA PORTINP ANI 80H JNZ WAITKEY ; LXI B,01FFH ; CALL DELAY JMP SETBYTE
:DELAY DCX B MOV A,B ORA C JNZ DELAY RET
:INITMR LXI H,TIMERYC;HL -> РУС таймера MVI M,34H; 00_11_010_0 - УС К.0 MVI M,74H; 01_11_010_0 - УС К.1 MVI M,0B6H; 10_11_000_0 - УС К.2 (не используем пока) EI ;----------------------------- DCX H; укажем на Канал 2: - 440 Гц MVI M,0C1H; Делитель К.2: MVI M,11H; = 4545 = 11C1H ;----------------------------- DCX H; укажем на Канал 1: MVI M,1FH; Делитель К.1: MVI M,00H; 31 = 001FH кадровая быстрее в 10 раз ;----------------------------- DCX H; укажем на Канал 0 - 15625 Гц MVI M,0A0H; Делитель К.0: MVI M,00H; = 160 = 00A0H RET
:GETBIN LXI H,0C000H; начало экрана LXI D,0010H; смещение к след.строке LXI B,20FFH; размер файла :GET0 LDA 0FFF0H; читаем байт из файла MOV M,A; помещаем в видео-ОЗУ INX H; и так весь файл... DCR B JNZ GET0 MVI B,20H DAD D DCR C JNZ GET0 LDA 0FFEFH; REWIND - указатель на начало файла RET
END
; Видео-ОЗУ сформатировано так:
ORG 0C000H :M000 DR 20h, 00h ; 32 байта - видео-стока JMP T001; 10 clock (3) обратный ход по строке ;DB 00H,00H; NOP (4)---1 :T001 DB 00H,00H,00H; NOP(4),NOP(4),NOP(4) JMP M001; 10 clock ... 22 DR 07h, 00h ; не используется :M001 DR 20h, 00h JMP T002; 10 clock (3) ;DB 00H,00H; NOP (4)---1 :T002 DB 00H,00H,00H; NOP(4),NOP(4),NOP(4) JMP M002; 10 clock ... 22 DR 07h, 00h :M002 DR 20h, 00h JMP T003; 10 clock (3) ;DB 00H,00H; NOP (4)---1 :T003 DB 00H,00H,00H; NOP(4),NOP(4),NOP(4) JMP M003; 10 clock ... 22 DR 07h, 00h :M003
; и т.д.
:M255 DR 20h, 00h JMP T256; 10 clock (3) ;DB 00H,00H; NOP (4)---1 :T256 DB 00H,00H; NOP(4),NOP(4) EI ; разрешим прерывания JMP M256; переход ЗА видео-ОЗУ 10 clock ... 22 DR 07h, 00h :M256 ;---0F000H RET ; ADDR 0F000H - возврат из прерывания по кадру.
|  |  |  |  |
СХЕМА ОДНОЗНАЧНО НУЖДАЕТСЯ В НЕКОТОРОЙ ДОРАБОТКЕ, ПОСКОЛЬКУ НА МОМЕНТ РАЗРАБОТКИ НИ МНЕ, НИ АВТОРАМ ЭМУЛЯТОРА НЕ БЫЛО ИЗВЕСТНО, ЧТО КР580ВМ80 В РЕЖИМЕ ИСПОЛНЕНИЯ NOP НЕ ТАКОЙ УЖ И ХОРОШИЙ СЧЕТЧИК ПО ШИНЕ АДРЕСА, КАК ЭТО ВСЕМИ ПРЕДПОЛАГАЛОСЬ РАНЕЕ.http://www.nedopc.org/forum/viewtopic.php?p=135807#p135807http://www.nedopc.org/forum/viewtopic.php?p=135808#p135808http://www.nedopc.org/forum/viewtopic.php?p=135826#p135826
_________________ iLavr
|
07 Mar 2019 16:12 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вот этот момент, собственно, и требует доработки в схеме... Но, как оказалось, сигнал на адресной линии А3 процессора К580ВМ80А "изрезан"... ...и это будет сбивать счетчик до 3-х, который считает непосредственно фронты на адресной линии А3. P.S. Да вобщем-то не так уж и масштабно доработать схему, если посмотреть на эту диаграмму: Состояние адресной линии А3 скорее всего просто надо "защелкивать" перед счетчиком до 3-х, в D-триггер в привязке к импульсу SYNC. По идее это должно убрать "изрезанность" А3...
_________________ iLavr
|
08 Mar 2019 01:33 |
|
|
Who is online |
Users browsing this forum: No registered users and 12 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
|
|