Eski 8bit bilgisayarlar nasıl görüntü oluşturuyor konusunda döküman arayışı

Başlatan MC_Skywalker, 18 Kasım 2018, 19:46:19

MC_Skywalker

Z80, 6502 CPU ile yapılmış eski bilgisayar ve oyun konsollarına baktığımda görüntü oluşturmak için PLA, PAL ve Gate Aray kullanıldığını gördüm. çok daha eski bir sitemde mono crome görüntü için shift register ile çözüm üretilmiş.

görüntü olşturma hakkında google emmi de düzgün döküman bulamadım veya yanlış anahtar kelimeyle arma yaptığımda sonuç alamadım.


bu konuda yardımcı olabilecek var mı?

devrecii

Bir tırik var ama ne  :D

Şu adamı izlemeni tavsiye ederim  dandik atmega  gpio ile nasıl görüntüler oluşturmuş ??



bu da tevizyon video çıkış


MC_Skywalker

zamanında BASYS3 ile vga ekran dikey çubuk çıkartmıştım. Şimdi Z80 CPU'nun video RAM'a yazdıklarını vga ekrana çıkartmak amacım.  onun için kaynak arıyorum.

Google emmi ile yaptığım aramada bulduğum bir sitede Adamın biri 3 GAL ile yapmış ama detay vermemiş. Nasıl yapıldığını öğrenip VHDL kullanıp CPLD ile yapayım niyetindeyim.

Kabil ATICI

doğrudan video sinyalleri üzerinden gitseniz daha iyi olur. H-senk, V senk, ve 3 adet RGB sinyali. Her birinin kendisi için ayrılmış zamanlamalar var. Ve RGB için her biri maksimum 1V. Yani hızlı bir dac.
Yapmanız gereken bu sinyalleri sağlamak.

sanırım comoder bilgisayarda, bu iş için ayrı özel bir çip vardı. Bu Z80 tarafından üretilen bilgiyi TV'nin kullanabileceği sinyale dönüştürüyordu. Karakter rom, vs kendi içinde barındırıyordu.

(2015) @muuzoo ve @alicavuslu , FPGA konusunda İstanbul'a kurs için gelen arkadaşlar FPGA ile bu konuyu gerçekleştirmişlerdi. Bir monitöre takarak demosunu gösterdiler. Hatta programını da.
Hatırladığım kadar arkadaşların FPGA konusunda kitapları da vardı.


ambar7

muuzoo

@Kabil ATICI hocam iyi hatırladınız gerçekten :)

@MC_Skywalker Hocam ekte örnek VHDL kodunu veriyorum. Belki işinize yarar.
http://www.epanorama.net/faq/vga2rgb/calc.html

Aslında mesele pixel clock üretebilmekte. Eğer her bir pikseli sürmek istemiyorum derseniz pic ile bile ekran sürebilirsiniz. Bu durumda piksel bloklarını sürmüş olursunuz.

library IEEE;
use IEEE.STD_LOGIC_1164.all;
 
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
use IEEE.NUMERIC_STD.all;
 
-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
 
entity vga_core is
  generic (
    COLOR_BIT : integer := 4);
  port (
    clk     : in  std_logic;
    rst     : in  std_logic;
    vgaData : in  unsigned(3*COLOR_BIT-1 downto 0);
    pos_x   : out integer range 0 to 2047;
    pos_y   : out integer range 0 to 2047;
    data_r  : out unsigned(COLOR_BIT-1 downto 0);
    data_g  : out unsigned(COLOR_BIT-1 downto 0);
    data_b  : out unsigned(COLOR_BIT-1 downto 0);
    hs_out  : out std_logic;
    vs_out  : out std_logic
    );
end vga_core;
 
-------------------------------------------------------------------------------
-- VGA (640 x 480 @ 60Hz) Design. Required Clock Frequency = 25.125 MHz
-------------------------------------------------------------------------------
architecture VGA of vga_core is
-------------------------------------------------------------------------------
-- 640 x 480 @ 60Hz VGA Parameters
-------------------------------------------------------------------------------
  constant RES_H         : integer := 640;
  constant RES_V         : integer := 480;
  constant H_FRONT_PORCH : integer := 16;  
  constant H_SYNC_TIME   : integer := 96;
  constant H_BACK_PORCH  : integer := 48;
  constant V_FRONT_PORCH : integer := 11;  
  constant V_SYNC_TIME   : integer := 2;
  constant V_BACK_PORCH  : integer := 31;
  constant TOTAL_H       : integer := RES_H+H_FRONT_PORCH+H_SYNC_TIME+H_BACK_PORCH;
  constant TOTAL_V       : integer := RES_V+V_FRONT_PORCH+V_SYNC_TIME+V_BACK_PORCH;  
 
-------------------------------------------------------------------------------
-- Internal Signal Definiations
-------------------------------------------------------------------------------
  signal COUNTER_H : integer range 0 to TOTAL_H := 0;
  signal COUNTER_V : integer range 0 to TOTAL_V := 0;
  signal NEW_LINE  : std_logic;
  signal h_visible : std_logic;
  signal v_visible : std_logic;
  signal visible   : std_logic;
begin
 
  CNT_H : process (clk, rst) is
  begin  -- process CNT_H
    if rst = '0' then
      COUNTER_H <= 0;
      NEW_LINE  <= '0';
    elsif clk'event and clk = '1' then
      if (COUNTER_H = TOTAL_H-1) then
        COUNTER_H <= 0;
        NEW_LINE  <= '1';
      else
        COUNTER_H <= COUNTER_H + 1;
        NEW_LINE  <= '0';        
      end if;
    end if;
  end process CNT_H;
 
  CNT_V : process (clk, rst) is
  begin  -- process CNT_V
    if rst = '0' then
      COUNTER_V <= 0;
    elsif clk'event and clk = '1' then
      if (NEW_LINE = '1') then
        if (COUNTER_V = TOTAL_V-1) then
          COUNTER_V <= 0;          
        else
          COUNTER_V <= COUNTER_V + 1;
        end if;
      end if;
    end if;
  end process CNT_V;
 
  SYNC_H : process (clk, rst) is
  begin  -- process SYNC_H
    if rst = '0' then
      hs_out <= '0';
    elsif clk'event and clk = '1' then
      if (COUNTER_H < H_SYNC_TIME) then
        hs_out <= '0';
      else
        hs_out <= '1';
      end if;
    end if;
  end process SYNC_H;
 
  SYNC_V : process (clk, rst) is
  begin  -- process SYNC_V
    if rst = '0' then
      vs_out <= '0';
    elsif clk'event and clk = '1' then
      if (COUNTER_V < V_SYNC_TIME) then
        vs_out <= '0';
      else
        vs_out <= '1';
      end if;
    end if;
  end process SYNC_V;
 
  AREA_H : process (clk, rst) is
  begin  -- process AREA_H
    if rst = '0' then
      h_visible <= '0';
    elsif clk'event and clk = '1' then
      if (COUNTER_H > H_SYNC_TIME + H_BACK_PORCH-1) and (COUNTER_H < TOTAL_H - H_FRONT_PORCH) then
        h_visible <= '1';
        pos_x     <= COUNTER_H - (H_SYNC_TIME + H_BACK_PORCH);
      else
        h_visible <= '0';
      end if;
    end if;
  end process AREA_H;
 
  AREA_V : process (clk, rst) is
  begin  -- process AREA_V
    if rst = '0' then
      v_visible <= '0';
    elsif clk'event and clk = '1' then
      if (COUNTER_V > V_SYNC_TIME + V_BACK_PORCH-1) and (COUNTER_V < TOTAL_V - V_FRONT_PORCH) then
        v_visible <= '1';
        pos_y     <= COUNTER_V - (V_SYNC_TIME + V_BACK_PORCH);
      else
        v_visible <= '0';
      end if;
    end if;
  end process AREA_V;
 
  visible <= h_visible and v_visible;
 
  SHOW : process (clk, rst) is
  begin  -- process SHOW
    if rst = '0' then
      data_r <= (others => '0');
      data_g <= (others => '0');
      data_b <= (others => '0');
    elsif clk'event and clk = '1' then
      if (visible = '1') then
        data_r <= vgaData(3*COLOR_BIT-1 downto 2*COLOR_BIT);
        data_g <= vgaData(2*COLOR_BIT-1 downto COLOR_BIT);
        data_b <= vgaData(COLOR_BIT-1 downto 0);
      else
        data_r <= (others => '0');
        data_g <= (others => '0');
        data_b <= (others => '0');
      end if;
    end if;
  end process SHOW;
 
end VGA;
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

OptimusPrime

Ben pek amacini anlayamadim. Niyetin z80 e grafik karti tasarlamak mi yoksa z80 grafik kartindan ilham alip birseyler yapmak mi?
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

MC_Skywalker

Elimde bir avuç retro chip var onları değerlendirmke niyetindeyim.

Commodore video ve ses için kendi ASIC lerini kullanıyor. C64 ve VIC20 de video = VID, ses =SID amiga da ise Denis ve Paula. Sxpexturm ise ASIC yerine ULA adında FERANTI firmasının ürettiği Gate aray çözümünü kullanıyor.

Commodore VID chip görünyü üretip doğrudan RGB ve TV için video çıkışı veriyor. Diğer markalar Gate aray ile RGBI üretip bir modülatör chiple (TEA2000 vb.)video çözüm alıyor.

Consol tarafında ise Sega kendi PPU (ASIC)ünitesini kullanıyor, Nintendo ise kendi Soc ve ASIC çözümünü kullanıyor.

Dün gece araştırıken http://www.zxdesign.info/thebeginning.shtml adersi buldum ve The ZX Spectrum ULA: How to design a microcomputer kitabı aldım.

@muuzoo VGA örneği için teşekürler. Elimde 5V toleranslı küçük CPLD'ler (EPM3032ATC44-10) var onlara fit olurmu bakayım olmazsa 3.3 likler (EPM570T100C5N) ile sinyal uydurma çözümüyle.

fahri-


MC_Skywalker


mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

RaMu

MC_Skywalker soruya cevap değil ama
zaman zaman videolarını izlediğim bir youtube kanalı var,
yazdıklarınla alakalı güzel videoları oluyor paylaşmak istedim.
The 8 Bit guy
https://m.youtube.com/channel/UC8uT9cgJorJPWu7ITLGo9Ww
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

MC_Skywalker


mufitsozen

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mufitsozen

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

MC_Skywalker

@mufitsozen hocam sağol. hemen bakıyorum. 

EK:
Design Recipes for FPGAs Using Verilog and VHDL arşivimde bu pdf kitap varmış. onda da VGA konusu işleniyor.