nedoPC.org

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



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

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ну ты сразу же и написал сам, что эту схему "весёлых людей" "прочитать практически невозможно" - я уж не стал от себя добавлять :)

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


22 Jun 2016 12:38
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Чего я не доделал - это кадровый синхроимпульс. Но там - однозначно будет К555АГ3 или какой
другой одновибратор. Строчный - тоже надо расширить одновибратором.

Строчный синхроимпульс расширил и сориентировал по стандарту относительно строчного гасящего:
Attachment:
SSI_.gif
SSI_.gif [ 3.83 KiB | Viewed 14083 times ]

С кадровой синхронизацией призадумался: хотел задействовать третий канал таймера под это,
но тормозит меня мысль, что в компьютере, который 50 раз в секунду перывается на обновление
экрана, третий канал таймера, видимо, лучше оставить под генерацию звука спикером?
А кадровый синхроимпульс, возможно, сформировать чисто на одновибраторах...


Продумываю задно, как это всё собрать на макетке с U880 - еще один мешающий фактор всплыл:
в режиме отображения видео-ОЗУ счетчик до 3-х считает непосредственно фронты на адресной
линии А3 процессора К580ВМ80А, но у Z80 по А3 "шарится" заодно и счетчик регенерации...
Тактировать что-ли счетчик до 3-х... но это опять распирает схему... :-?

Какая-то злобнозаточенная под К580ВМ80А схема получилась... :wink:

_________________
iLavr


24 Jun 2016 17:18
Profile
Supreme God
User avatar

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

Тут вот какая двойственность получается: стабильная кадровая частота в схеме уже есть -
она используется для 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
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Склонился я-таки в сторону одновибраторов на К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% – не занят процессор, это лучше!

Осциллограммы я смотреть не стал, т.к. все-равно одновибраторы в расчете идеальные,
а кадровый импульс приходится ждать довольно долго. :wink:

_________________
iLavr


26 Jun 2016 15:47
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
После консультаций с PVV, допилили мы модель z80(aka K580BM80) драчовым напильником,
так что теперь нужный сигнал /INTE будет выдаваться через вывод /RFSH. :mrgreen:
Всё равно у K580BM80 никакого /RFSH нет в помине даже "в шкуре" z80... :wink:

Так что начал я потихонечку пробовать "собирать" опробованную идею в Протезусе.
Все "грязные трюки", в принципе, сработали как и ожидалось...

 Схема пробы грязных трюков
Attachment:
tst84.gif
tst84.gif [ 30.12 KiB | Viewed 14002 times ]

А то я уж начал опасаться, что Протезус не поймет притяжки шины данных резисторами
то к лог. "1", то к "0", поскольку у него на этот повод "цифровые резисторы" разные:
pull-up и pull-down - соответственно... Но - вроде обошлось... Протезус справился...

Конечно, порешать это всякими костылями в принципе было бы можно, но схему и так уже
начинает распирать от лишнего - всё-таки она конструировалась под K580BM80... 8)
Один только аналог простого двунаправшенного ШФ К580ВА86 чего стОит! :o

_________________
iLavr


Last edited by Lavr on 04 Jul 2016 22:35, edited 1 time in total.



04 Jul 2016 15:22
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
А картинки то нету...

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


04 Jul 2016 21:25
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
А картинки то нету...

Это у тебя какой-то глюк форума - картинка то видна, то не видна... :-?
Она закачана на форум - вот на неё "кривая" ссылка:
http://www.nedopc.org/forum/download/file.php?id=1040
По ссылке - открывается. А под спойлером как-то через раз... :-?


P.S. Ну, поскольку глюк я и сам заметил, то скачал картинку с форума
и залил её под спойлер заново...

_________________
iLavr


04 Jul 2016 22:32
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Теперь видно (а по старой ссылке как не открывалось, так и не открывается)

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


04 Jul 2016 23:05
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Теперь видно (а по старой ссылке как не открывалось, так и не открывается)

Ну вот смотри: нажал я на ссылку постом выше и всё тут же открылось! :wink:
Attachment:
tst85.gif
tst85.gif [ 54.94 KiB | Viewed 14051 times ]

Не будешь же ты мне говорить, что я под спойлер приписал опять "huj" ? :mrgreen:


P.S. Если кому ещё не видно - кликаем следующую ссылку:
http://www.nedopc.org/forum/download/file.php?id=1041
Ну да ладно... пошел я в отпуск!...
:obye:

_________________
iLavr


05 Jul 2016 06:56
Profile
Devil

Joined: 06 Oct 2006 03:17
Posts: 856
Location: г.Лянтор,Сургутского р-на,ХМАО
Reply with quote
Lavr wrote:
Ну да ладно... пошел я в отпуск!...[/i] :obye:

Да ладно. Отпуск не на Луне? в смысле на форум будешь заходить?


06 Jul 2016 07:50
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
fifan wrote:
Да ладно. Отпуск не на Луне?
А с нашим хобби отдыхать полноценно можно только на Луне, причем не брать с собой ноутбука... :mrgreen:
А иначе после нескольких дней неорганизованного безделия тянет что-то сконструировать!... :lol:

Хотя, как говорят в одном моем любимом фильме:"Если проблема не решается, надо отвлечься..." :wink:
А проблема была такая, что не нравился мне в моей конструкции таймер К580ВИ53... :osad:
А делитель частоты на одновибраторе при больших коэффициентах деления (5МГц до 15625 Гц)
будет, похоже что, проскакивать точные нужные значения из-за неизбежного "джиттера"...

И как мне кажется, я нашел удобоваримое нищебродское решение: сделать одновибратор
синхронным с запускающим сигналом.
Attachment:
one_shoot9.gif
one_shoot9.gif [ 32.25 KiB | Viewed 14000 times ]

В этом случае все мелкие неточности длительности "спрячутся" привязкой к фронтам запускающего сигнала.
На картинке я как раз сформировал строчный синхросигнал из сигнала с бОльшей частотой,
меньше, правда, чем 5МГц, чтобы процесс понаблюдать...
Видна аккуратная привязка к синхросигналу.

Попробую теперь "уволить" таймер К580ВИ53 из конструкции...


P.S. В общем-то на двух таких каскадах весьма четко получается строчная частота с импульсом
строчной синхронизации нужной длительности ~4мкс.

Attachment:
one_shoot8.gif
one_shoot8.gif [ 12.08 KiB | Viewed 13995 times ]

Первым каскадом из 5МГц получаем частоту 250кГц (период 4мкс). Коэффициент деления = 20.
Это довольно-таки немного.
Вторым каскадом из 250кГц получаем 15625Гц с длительностью импульса ~4мкс.
Коэффициент деления = 16, что тоже вполне приемлемо...

_________________
iLavr


08 Jul 2016 18:18
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
DimkaM wrote:
теоретически можно настраиваемый размер по вертикали.
если входить в прерывание, допустим, не с 0хс000, а с 0хс020, то будет на одну строку меньше

А вот эта мысль ну оооооочень правильная! Только не с 0хс020, а с 0хс030 и далее - кратно 30Н...
Действительно, похоже на то, что получается ситуация, при которой можно выводить заданное
количество строк на экране.
Сейчас сам так в отладке делаю, чтобы не ждать, когда эмулятор "прокрутит" полное число строк. :wink:
Ибо ждать полное число строк в симуляции довольно долго...

_________________
iLavr


10 Jul 2016 09:05
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Что-то у меня такое нехорошее впечатление складывается, что на этой модели под Протезусом
правильно всё работать не будет... :-?
Image
Растактовки команд, похоже, что отличаются от оригинального К580ВМ80А...
А на обратном ходе по строке у меня там точно посчитано в тактах всё. :osad:


P.S. Кстати говоря, когда я по тактам рассчитывал, пользовался вот этим источником.
 Система команд микропроцессора К580ВМ80А
Attachment:
580BM80_TabCom.gif
580BM80_TabCom.gif [ 96.2 KiB | Viewed 13949 times ]

Но вроде как пара опечаток в этом "полотнище" есть. Поэтому контролировал я сам себя по
следующему он-лайн документу
: http://www.pastraiser.com/cpu/i8080/i8080_opcodes.html
Ошибиться по идее - не должен был...

_________________
iLavr


11 Jul 2016 04:13
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Мы с Shaos-ом посоветовались и решили выделить эту тему из топика
Galaksija, чтобы не мешать его развитию.

Заодно я решил итоговую схему по этой теме: программно-аппаратное
формирование видеосигнала на К580ВМ80А
выложить здесь, поскольку
"причесать" её окончательно руки так и не дошли... :-?

 Аналог Galaksija на 580 (оригинал)
Attachment:
MPS580BM80A.gif
MPS580BM80A.gif [ 68.93 KiB | Viewed 9233 times ]
Lavr wrote:
Я её делал в другом симуляторе, где глюков тоже отбавляй - поэтому пользы от неё,
на мой взгляд, мало - чисто проверка работоспособности идеи.
Часть схемы там просто для "обхода глюков" эмулятора... Поэтому я и не выкладывал
эту схему в пост. Да и "читабельность" схемы оставляет желать лучшего...
Так что к ней больше вопросов возникает, ответы на которые:"здесь убирал глюк"...

Но всё же я над оригиналом схемы поработал значительно и отрисовал вот такой вариант:

 Аналог Galaksija на 580 (схема по ГОСТ)
Attachment:
_580_VID4.gif
_580_VID4.gif [ 79.65 KiB | Viewed 9233 times ]

Насколько этот вариант окончательный и безошибочный, мне сейчас точно сказать уже трудно. :osad:

Под схему было тестовое программное обеспечение:
 Тестовое ПО аналога 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#p135807
http://www.nedopc.org/forum/viewtopic.php?p=135808#p135808
http://www.nedopc.org/forum/viewtopic.php?p=135826#p135826

_________________
iLavr


07 Mar 2019 16:12
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Вот этот момент, собственно, и требует доработки в схеме...
Lavr wrote:
...еще один мешающий фактор всплыл:
в режиме отображения видео-ОЗУ счетчик до 3-х считает непосредственно фронты на адресной
линии А3 процессора
К580ВМ80А, но у Z80 по А3 "шарится" заодно и счетчик регенерации...

Но, как оказалось, сигнал на адресной линии А3 процессора К580ВМ80А "изрезан"...
Attachment:
A3.jpg
A3.jpg [ 26.8 KiB | Viewed 9212 times ]

...и это будет сбивать счетчик до 3-х, который считает непосредственно фронты на адресной
линии А3. :-?


P.S. Да вобщем-то не так уж и масштабно доработать схему, если посмотреть на эту диаграмму:
Image
Состояние адресной линии А3 скорее всего просто надо "защелкивать" перед счетчиком до 3-х,
в D-триггер в привязке к импульсу SYNC. По идее это должно убрать "изрезанность" А3...

_________________
iLavr


08 Mar 2019 01:33
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 115 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8  Next

Who is online

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