Зверинецъ
Специалист (был когда-то "совсем стандарт") - 1988-2023
Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
Ленинград2 + CF карта
Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
БК0010-01 стоковый[свернуть]
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Дошли сегодня руки припаять и прошить то, что накодилось в посте #9. Пребываю в состоянии легкого офигения - потому что посчитанные тогда по экрану на глаз ~17 знакомест запаздывания КС, которые равны 68 тактам процессора, а также момент начала следующего INTа и его длительность с первого раза попали в точку.
Галерея того, что имеем сейчас:
На данный момент только изменено включение счетчиков D4 и D5 для 320 пентагоновских строк и 71680 тактов на кадр, а также добавлен тот самый генератор INT. Ничего не делал с КС, и даже не инвертировал пока /IOWR.
Да, бордюрные линии слегка "квадратиш", но они все на своем месте.
Схема того, что сейчас в ПЛИСке
spec128.zip
сорс модуля int_gen был в посте выше.
Можно поделить исходную частоту вдвое или вчетверо, сэкономив одну-две макроячейки, можно получить частоту H2 из уже имеющейся H1 и сэкономить ногу... но вроде без надобности.
На очереди - доработка бордюрных сигналов перед КП13 по схеме П321, только пока не придумал, на чем собирать. На мелкоте это делать уже лениво, придется еще одну 3032 туда вкрячить )
Upd:
Для понимания кучки констант решил прокомментировать, как это работает:
весь экран выводится за 71680 тактов;
/nKS (кадровый синхроимпульс, его начало, т.е. СПАД) в ленинграде задержан на 68 тактов относительно начала первой скан-строки;
длина КСИ равна 3584 такта;
счетчик же формирователя INT у нас запускается по концу КСИ, то есть по ПЕРЕДНЕМУ ФРОНТУ /nKS, это на (68+3584) такте после начала первой скан-строки;
активируем INT (прямой) в начале первой скан-строки СЛЕДУЮЩЕГО кадра, это через 71680 - (68 + 3584) = 68028 тактов после конца КСИ
деактивируем INT через 36 тактов, это 71680 - (68 + 3584) + 36 = 68064 после конца КСИ.
/nKS берем с 6DD40, H0 берем c 1DD13, INT (прямой) подаем на 13DD1 (а на 12DD1 формируется /INT для процессора)
сорс упомянутыми константами
Код:library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity INT_GEN is port ( CLK : in std_logic; nKS : in std_logic; INT : out std_logic ); end INT_GEN; architecture RTL of INT_GEN is signal COUNTER : integer range 0 to 71680; begin -- весь экран выводится за 71680 тактов -- /nKS (кадровый синхроимпульс, его начало, т.е. СПАД) в ленинграде задержан на 68 тактов относительно начала первой скан-строки -- длина КСИ равна 3584 такта -- счетчик же формирователя INT у нас запускается по концу КСИ, то есть по ПЕРЕДНЕМУ ФРОНТУ /nKS, -- это на (68+3584) такте после начала первой скан-строки. -- активируем INT (прямой) в начале первой скан-строки СЛЕДУЮЩЕГО кадра, это через 71680 - (68 + 3584) = 68028 тактов после конца КСИ -- деактивируем INT через 36 тактов, это 71680 - (68 + 3584) + 36 = 68064 после конца КСИ. -- /nKS берем с 6DD40, H0 берем c 1DD13, INT (прямой) подаем на 13DD1 (а на 12DD1 формируется /INT для процессора) process (CLK, nKS) begin if (rising_edge(CLK)) then if (COUNTER < 71680) then COUNTER <= COUNTER + 1; end if; if (COUNTER = 71680 - 68 - 3584) then INT <= '1'; end if; if (COUNTER = 71680 - 68 - 3584 + 36) then INT <= '0'; end if; if (nKS = '0') then COUNTER <= 0; end if; end if; end process; end architecture;
Последний раз редактировалось valerium; 13.03.2021 в 09:56.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)