kroszkanorber Napisano Luty 9, 2024 Udostępnij Napisano Luty 9, 2024 (edytowany) WItam. W projekcie za pomocą klawiatury PS2 można wpisywać znaki do wewnętrznej pamięci FPGA bram i wyświetlać je na monitorze VGA. By nie komplikować i tak już dość złożonego projektu wyświetlacz znaków jest monochromatyczny. Znaki są zaimplementowane w komórce pamięci 8X8 pikseli. Dopisałem też polskie znaki. Przyciski funkcyjne i klawiatura numeryczna nie jest zaimplementowana. Znaki zapisałem w pamięci CGROM wzorując się na tabeli poniżej. Przycisk CAPS SCHIFT TAB ENTER DEL ALT są zaimplementowane . Maksymalna ilość znaków na wyświetlaczu 80X60 = 4800 znaków. Zdjęcie z uruchomionego programu: Dla ciekawych kody zamieściłem poniżej Pzdrawiam. Program sprzęgający moduły: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity DOTMATRIX_VGA640X480 is Port ( Clk : in STD_LOGIC; Reset : in STD_LOGIC; PS21_D : inout STD_LOGIC; PS21_C : inout STD_LOGIC; HS : out STD_LOGIC; VS : out STD_LOGIC; RGB : out STD_LOGIC_VECTOR (7 downto 0) ); end DOTMATRIX_VGA640X480; architecture Behavioral of DOTMATRIX_VGA640X480 is COMPONENT VGA640X480 PORT( Clk : IN std_logic; RGBIN : IN std_logic_vector(7 downto 0); Cnt25 : INOUT std_logic_vector(1 downto 0); CntV : INOUT std_logic_vector(9 downto 0); CntH : INOUT std_logic_vector(9 downto 0); RGB : OUT std_logic_vector(7 downto 0); HS : OUT std_logic; VS : OUT std_logic ); END COMPONENT; signal Cnt25 : std_logic_vector (1 downto 0); signal CntH : std_logic_vector (9 downto 0); signal CntV : std_logic_vector (9 downto 0); signal RGBIN : std_logic_vector (7 downto 0); COMPONENT KURSOR PORT( Clk : IN std_logic; Reset : IN std_logic; KursorH : OUT std_logic_vector(6 downto 0); KursorV : OUT std_logic_vector(5 downto 0); CntH : IN std_logic_vector(6 downto 0); CntV : IN std_logic_vector(5 downto 0); KbD : IN std_logic_vector(7 downto 0); KbWE : IN std_logic; VRAM_WR_EN : IN std_logic; VRAM_WR_DEL : OUT std_logic; Kurs : OUT std_logic ); END COMPONENT; signal Kurs : std_logic; signal VRAM_WR_DEL : std_logic; signal KursorH : std_logic_vector(6 downto 0); signal KursorV : std_logic_vector(5 downto 0); COMPONENT KEYBOARD PORT( Clk : IN std_logic; Reset : IN std_logic; PS2_D : INOUT std_logic; PS2_C : INOUT std_logic; KbWE : OUT std_logic; VRAM_WR_EN : OUT std_logic; VRAM_WR_DEL : IN std_logic; KbD : OUT std_logic_vector(7 downto 0) ); END COMPONENT; signal KbWE : std_logic; signal VRAM_WR_EN : std_logic; signal KbD : std_logic_vector(7 downto 0); COMPONENT CG_RAM PORT( Clk : IN std_logic; CntH : IN std_logic_vector(9 downto 0); CntV : IN std_logic_vector(8 downto 0); KbWE : IN std_logic; KbD : IN std_logic_vector(7 downto 0); CG_DO : OUT std_logic_vector(7 downto 0); KursorH : IN std_logic_vector(6 downto 0); KursorV : IN std_logic_vector(5 downto 0); CG : OUT std_logic ); END COMPONENT; signal CG : std_logic; begin RGBIN <= "00111000" when ((Kurs = '1') or (CG = '1')) else "00000000"; Inst_VGA640X480: VGA640X480 PORT MAP( Clk => Clk, Cnt25 => Cnt25, CntV => CntV, CntH => CntH, RGBIN => RGBIN, RGB => RGB, HS => HS, VS => VS ); Inst_KURSOR: KURSOR PORT MAP( Kurs => Kurs, Clk => Clk, Reset => Reset, KursorH => KursorH, KursorV => KursorV, CntH => CntH(9 downto 3), CntV => CntV(8 downto 3), KbD => KbD, VRAM_WR_EN => VRAM_WR_EN, VRAM_WR_DEL => VRAM_WR_DEL, KbWE => KbWE ); Inst_KEYBOARD: KEYBOARD PORT MAP( Clk => Clk, Reset => Reset, PS2_D => PS21_D, PS2_C => PS21_C, KbWE => KbWE, VRAM_WR_EN => VRAM_WR_EN, VRAM_WR_DEL => VRAM_WR_DEL, KbD => KbD ); Inst_CG_RAM: CG_RAM PORT MAP( Clk => Clk, CntH => CntH, CntV => CntV(8 downto 0), CG => CG, CG_DO => open, KbWE => VRAM_WR_EN, KbD => KbD, KursorH => KursorH, KursorV => KursorV ); end Behavioral; Moduł VGA: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity VGA640X480 is Port ( Clk : in STD_LOGIC; --100MHz Cnt25 : inout STD_LOGIC_VECTOR (1 downto 0) := "00"; CntV : inout STD_LOGIC_VECTOR (9 downto 0) := "0000000000"; CntH : inout STD_LOGIC_VECTOR (9 downto 0) := "0000000000"; RGBIN : in STD_LOGIC_VECTOR (7 downto 0); RGB : out STD_LOGIC_VECTOR (7 downto 0); HS : out STD_LOGIC; VS : out STD_LOGIC ); end VGA640X480; architecture Behavioral of VGA640X480 is signal BL : std_logic; begin process(Clk) begin if Clk'event and Clk = '0' then Cnt25 <= Cnt25 + 1; --dzielnik częstotliwości if Cnt25 = "11" then if CntH = 799 then --licznik pixeli CntH <= (others => '0'); else CntH <= CntH + 1; end if; if CntH = 799 then if CntV = 524 then --licznik linji CntV <= (others => '0'); else CntV <= CntV + 1; end if; end if; end if; end if; end process; BL <= '1' when ((CntH < 640) and (CntV < 525)) else '0'; --dekoder obszaru obrazy wyświetlanego (aktywny = 1) HS <= '0' when ((CntH > 655) and (CntH < 753)) else '1'; --dekoder synchronizacji poziomej (aktywny = 0) VS <= '0' when ((CntV > 488) and (CntV < 491)) else '1'; --dekoder synchronizacji pionowej (aktywny = 0) RGB <= RGBIN when BL = '1' else (others => '0'); --wyświetlanie obrazu na monitorze (aktywny = 1) end Behavioral; Moduł kursor: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity KURSOR is Port ( Kurs : out STD_LOGIC; Clk : in STD_LOGIC; Reset : in STD_LOGIC; KursorH : out STD_LOGIC_VECTOR (6 downto 0); KursorV : out STD_LOGIC_VECTOR (5 downto 0); CntH : in STD_LOGIC_VECTOR (6 downto 0); CntV : in STD_LOGIC_VECTOR (5 downto 0); KbD : in STD_LOGIC_VECTOR (7 downto 0); VRAM_WR_EN : in STD_LOGIC; VRAM_WR_DEL : out STD_LOGIC; KbWE : in STD_LOGIC ); end KURSOR; architecture Behavioral of KURSOR is signal Cnt : std_logic_vector (5 downto 0); signal RegH : std_logic_vector (6 downto 0); signal RegH1 : std_logic_vector (6 downto 0); signal RegV : std_logic_vector (5 downto 0); signal RegV1 : std_logic_vector (5 downto 0); signal Sel : std_logic_vector (2 downto 0); begin Kurs <= '1' when ((CntH = RegH) and (CntV = RegV) and (Cnt(5) = '0')) else '0'; KursorH <= RegH1 when ((KbD = X"66") and (KbWE = '1')) else RegH; RegH1 <= "1001111" when ((KbD = X"66") and (KbWE = '1') and (RegH = 0)) else (RegH - 1); KursorV <= RegV1 when ((KbD = X"66") and (KbWE = '1')) else RegV; RegV1 <= (RegV - 1) when ((KbD = X"66") and (KbWE = '1') and (RegH = 0)) else RegV; process(CntV(5)) begin if CntV(5)'event and CntV(5) = '0' then Cnt <= Cnt + 1; end if; end process; process(KbD, KbWE, Clk, Reset, VRAM_WR_EN) begin if Reset = '0' then VRAM_WR_DEL <= '0'; RegH <= (others => '0'); RegV <= (others => '0'); Sel <= (others => '0'); else if Clk'event and Clk = '0' then if KbWE = '1' then if KbD = X"75" then --U_ARROW Sel <= "001"; elsif KbD = X"72" then --D_ARROW Sel <= "010"; elsif KbD = X"74" then --R_ARROW Sel <= "011"; elsif KbD = X"6B" then --L_ARROW Sel <= "100"; elsif KbD = X"66" then --BKSP Sel <= "100"; elsif KbD = X"5A" then --ENTER Sel <= "101"; elsif KbD = X"0D" then --TAB Sel <= "110"; elsif KbD = X"00" then --DEL RegH <= (others => '0'); RegV <= (others => '0'); VRAM_WR_DEL <= '1'; Sel <= "111"; elsif VRAM_WR_EN = '1' then Sel <= "011"; end if; else if Sel = "001" then if RegV = 0 then null; Sel <= "000"; else RegV <= RegV - 1; Sel <= "000"; end if; elsif Sel = "010" then if RegV = 59 then null; Sel <= "000"; else RegV <= RegV + 1; Sel <= "000"; end if; elsif Sel = "100" then if RegH = 0 then RegH <= "1001111"; Sel <= "001"; else RegH <= RegH - 1; Sel <= "000"; end if; elsif Sel = "011" then if RegH = 79 then RegH <= "0000000"; Sel <= "010"; else RegH <= RegH + 1; Sel <= "000"; end if; elsif Sel = "101" then RegH <= "0000000"; Sel <= "010"; elsif Sel = "110" then if RegH(6 downto 2) = "10011" then RegH <= "0000000"; Sel <= "010"; else RegH(6 downto 2) <= RegH(6 downto 2) + 1; RegH(1 downto 0) <= "00"; Sel <= "000"; end if; elsif Sel = "111" then if ((RegH = "1111111") and (RegV = "111111")) then VRAM_WR_DEL <= '0'; RegH <= "0000000"; RegV <= "000000"; Sel <= "000"; else RegH <= RegH + 1; if RegH = "1111111" then RegV <= RegV + 1; end if; end if; end if; end if; end if; end if; end process; end Behavioral; Moduł klawiatura: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity KEYBOARD is Port ( Clk : in STD_LOGIC; Reset : in STD_LOGIC; PS2_D : inout STD_LOGIC; PS2_C : inout STD_LOGIC; VRAM_WR_EN : out STD_LOGIC; VRAM_WR_DEL : in STD_LOGIC; KbWE : inout STD_LOGIC; KbD : out STD_LOGIC_VECTOR (7 downto 0) ); end KEYBOARD; architecture Behavioral of KEYBOARD is signal D : std_logic_vector (9 downto 0) ; signal Din : std_logic_vector (7 downto 0) ; signal Del : std_logic_vector (7 downto 0) ; signal Din1 : std_logic_vector (7 downto 0) ; signal Din2 : std_logic_vector (7 downto 0) ; signal Cnt : std_logic_vector (7 downto 0) ; signal Cnt1 : std_logic_vector (13 downto 0) ; signal Clk1 : std_logic; signal PS2_Cin : std_logic; signal PS2_Cout : std_logic; signal PS2_Dout : std_logic; signal Brake : std_logic; signal Caps : std_logic; signal Caps_EN : std_logic; signal Num : std_logic; signal Scroll : std_logic; signal Ack : std_logic; signal Shift_L : std_logic; signal Shift_R : std_logic; signal Shift : std_logic; signal Shift_EN : std_logic; signal Space_EN : std_logic; signal Alt : std_logic; signal Alt_EN : std_logic; signal ParityGen : std_logic_vector (6 downto 0); signal Parity : std_logic; type PS2State_type is (idle, datain, sel, we, we1, rts, rts1, rts2, dataout); signal PS2State : PS2State_type; begin process(Clk, PS2_C) --oczekiwanie na stabilny sygnał zegarowy z klawiatury begin if PS2_C = '1' then Cnt <= (others => '0'); PS2_Cin <= '1'; else if Clk'event and Clk = '0' then if PS2_C = '0' then if Cnt = "11111111" then PS2_Cin <= '0'; else Cnt <= Cnt + 1; end if; end if; end if; end if; end process; with PS2State select Clk1 <= Clk when rts, Clk when rts1, Clk when sel, Clk when we, Clk when we1, PS2_Cin when others; with PS2State select PS2_Dout <= '0' when rts1, '0' when rts2, D(0) when dataout, '1' when others; with PS2State select PS2_Cout <= '0' when rts, '0' when rts1, '1' when others; process(Clk1, Reset, PS2State, PS2_D) --wysłanie, odbieranie danych z klawiatury w maszynie stanów begin if Reset = '0' then D <= "1000000000"; Din <= "00000000"; KbD <= "00000000"; KbWE <= '0'; Shift_L <= '0'; Shift_R <= '0'; Cnt1 <= (others => '0'); PS2State <= idle; else if Clk1'event and Clk1 = '0' then case PS2State is when idle => D <= "1000000000"; PS2State <= datain; when datain => if D(0) = '1' then D <= "1000000000"; Din <= D(8 downto 1); PS2State <= sel; else D <= PS2_D & D(9 downto 1); end if; when sel => if Din = X"F0" then Brake <= '1'; PS2State <= idle; elsif ((Din = X"58") and (Brake <= '0') and (Ack = '0')) then Din <= X"ED"; Caps <= not Caps; PS2State <= rts; elsif ((Din = X"77") and (Brake <= '0') and (Ack = '0')) then Din <= X"ED"; Num <= not Num; PS2State <= rts; elsif ((Din = X"7E") and (Brake <= '0') and (Ack = '0')) then Din <= X"ED"; Scroll <= not Scroll; PS2State <= rts; elsif ((Din = X"FA") and (Brake = '0') and (Ack = '0')) then Din <= "00000" & Caps & Num & Scroll; Ack <= '1'; PS2State <= rts; elsif ((Din = X"12") and (Brake = '0')) then Shift_L <= '1'; PS2State <= idle; elsif ((Din = X"12") and (Brake = '1')) then Brake <= '0'; Shift_L <= '0'; PS2State <= idle; elsif ((Din = X"59") and (Brake = '0')) then Shift_R <= '1'; PS2State <= idle; elsif ((Din = X"59") and (Brake = '1')) then Brake <= '0'; Shift_R <= '0'; PS2State <= idle; elsif ((Din = X"11") and (Brake = '0')) then Alt <= '1'; PS2State <= idle; elsif ((Din = X"11") and (Brake = '1')) then Brake <= '0'; Alt <= '0'; PS2State <= idle; elsif Brake = '1' then Brake <= '0'; PS2State <= idle; elsif Ack = '1' then Ack <= '0'; PS2State <= idle; else KbD <= (Din2 + (Shift & "0000000")) and Del; PS2State <= we; end if; when we => KbWE <= '1'; PS2State <= we1; when we1 => KbWE <= '0'; PS2State <= idle; when rts => --reqest to send if Cnt1 = "11111100000000" then Cnt1 <= (others => '0'); PS2State <= rts1; else Cnt1 <= Cnt1 + 1; end if; when rts1 => --reqest to send if Cnt1 = "00000100000000" then Cnt1 <= (others => '0'); PS2State <= rts2; else Cnt1 <= Cnt1 + 1; end if; when rts2 => --reqest to send D <= '1' & Parity & Din; PS2State <= dataout; when dataout => --przesył danych do klawiatury if D = "0000000001" then PS2State <= idle; else D <= '0' & D(9 downto 1); end if; end case; end if; end if; end process; ParityGen(0) <= Din(0) xor Din(1); --generator parztstości ParityGen(1) <= Din(2) xor Din(3); ParityGen(2) <= Din(4) xor Din(5); ParityGen(3) <= Din(6) xor Din(7); ParityGen(4) <= ParityGen(0) xor ParityGen(1); ParityGen(5) <= ParityGen(2) xor ParityGen(3); ParityGen(6) <= ParityGen(4) xor ParityGen(5); Parity <= not ParityGen(6); Shift <= (((Shift_L or Shift_R) and (Shift_EN or Caps_EN)) or (Caps and Caps_EN)); VRAM_WR_EN <= (KbWE and (Caps_EN or Shift_EN or Space_EN)) or VRAM_WR_DEL; Del <= "00000000" when Din = X"71" else "11111111"; with Din select Caps_EN <= '1' when X"15", --Q '1' when X"1D", --W '1' when X"24", --E '1' when X"2D", --R '1' when X"2C", --T '1' when X"35", --Y '1' when X"3C", --U '1' when X"43", --I '1' when X"44", --O '1' when X"4D", --P '1' when X"1C", --A '1' when X"1B", --S '1' when X"23", --D '1' when X"2B", --F '1' when X"34", --G '1' when X"33", --H '1' when X"3B", --J '1' when X"42", --K '1' when X"4B", --L '1' when X"1A", --Z '1' when X"22", --X '1' when X"21", --C '1' when X"2A", --V '1' when X"32", --B '1' when X"31", --N '1' when X"3A", --M '0' when others; -- with Din select Shift_EN <= '1' when X"0E", --` '1' when X"16", --1 '1' when X"1E", --2 '1' when X"26", --3 '1' when X"25", --4 '1' when X"2E", --5 '1' when X"36", --6 '1' when X"3D", --7 '1' when X"3E", --8 '1' when X"46", --9 '1' when X"45", --0 '1' when X"4E", --- '1' when X"55", --= '1' when X"54", --[ '1' when X"5B", --] '1' when X"5D", --\ '1' when X"4C", --; '1' when X"52", --' '1' when X"41", --, '1' when X"49", --. '1' when X"4A", --/ '0' when others; -- with Din select Space_EN <= '1' when X"29", --SPACE '1' when X"66", --PKSP '0' when others; -- Din2 <= Din1 when ((Alt_EN = '1') and (Alt = '1')) else Din; with Din select Alt_EN <= '1' when X"1C", --A '1' when X"21", --C '1' when X"24", --E '1' when X"4B", --L '1' when X"31", --N '1' when X"44", --O '1' when X"1B", --S '1' when X"1A", --Z '1' when X"22", --X '0' when others; -- with Din select Din1 <= X"0C" when X"1C", --A X"01" when X"21", --C X"04" when X"24", --E X"03" when X"4B", --L X"07" when X"31", --N X"05" when X"44", --O X"0B" when X"1B", --S X"0A" when X"1A", --Z X"02" when X"22", --X Din when others; -- PS2_C <= 'Z' when PS2_Cout = '1' else '0'; --zmiana portów komunikacyjnych klawiatury z wejściowych na wyjściowe PS2_D <= 'Z' when PS2_Dout = '1' else '0'; end Behavioral; Moduł sprzęgający pamięć VRAM i CGROM: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity CG_RAM is Port ( Clk : in STD_LOGIC; CntH : in STD_LOGIC_VECTOR (9 downto 0); CntV : in STD_LOGIC_VECTOR (8 downto 0); CG : out STD_LOGIC; KbWE : in STD_LOGIC; KbD : in STD_LOGIC_VECTOR (7 downto 0); CG_DO : out STD_LOGIC_VECTOR (7 downto 0); KursorH : in STD_LOGIC_VECTOR (6 downto 0); KursorV : in STD_LOGIC_VECTOR (5 downto 0)); end CG_RAM; architecture Behavioral of CG_RAM is COMPONENT ROM_8x8_256 PORT( ROM_ADDR : IN std_logic_vector(10 downto 0); ROM_DI : IN std_logic_vector(7 downto 0); ROM_WE : IN std_logic; Clk : IN std_logic; ROM_DO : OUT std_logic_vector(7 downto 0) ); END COMPONENT; signal ROM_DO : std_logic_vector (7 downto 0); signal ROM_ADDR : std_logic_vector (10 downto 0); COMPONENT RAM_2048x8 PORT( Clk : IN std_logic; WE : IN std_logic; ADDR_WE : IN std_logic_vector(10 downto 0); ADDR_RD : IN std_logic_vector(10 downto 0); DI : IN std_logic_vector(7 downto 0); DO : OUT std_logic_vector(7 downto 0) ); END COMPONENT; signal ADDR_WE : std_logic_vector (10 downto 0); signal ADDR_RD : std_logic_vector (10 downto 0); signal RAM_DO : std_logic_vector (7 downto 0); signal RAM_DO1 : std_logic_vector (7 downto 0); signal RAM_DO2 : std_logic_vector (7 downto 0); signal RAM_DO3 : std_logic_vector (7 downto 0); signal WE1 : std_logic; signal WE2 : std_logic; signal WE3 : std_logic; begin with CntH(2 downto 0) select CG <= ROM_DO(7) when "000", ROM_DO(6) when "001", ROM_DO(5) when "010", ROM_DO(4) when "011", ROM_DO(3) when "100", ROM_DO(2) when "101", ROM_DO(1) when "110", ROM_DO(0) when others; ROM_ADDR <= (RAM_DO & CntV(2 downto 0)); Inst_ROM_8x8_256: ROM_8x8_256 PORT MAP( ROM_ADDR => ROM_ADDR, ROM_DO => ROM_DO, ROM_DI => "00000000", ROM_WE => '0', Clk => Clk ); WE1 <= '1' when ((KursorH(6 downto 5) = "00") and (KbWE = '1')) else '0'; WE2 <= '1' when ((KursorH(6 downto 5) = "01") and (KbWE = '1')) else '0'; WE3 <= '1' when ((KursorH(6 downto 5) = "10") and (KbWE = '1')) else '0'; with CntH(9 downto 8) select RAM_DO <= RAM_DO1 when "00", RAM_DO2 when "01", RAM_DO3 when others; ADDR_WE <= (KursorV(5 downto 0) & KursorH(4 downto 0)); ADDR_RD <= (CntV(8 downto 3) & CntH(7 downto 3)); CG_DO <= RAM_DO; Inst1_RAM_2048x8: RAM_2048x8 PORT MAP( Clk => Clk, WE => WE1, ADDR_WE => ADDR_WE, ADDR_RD => ADDR_RD, DI => KbD, DO => RAM_DO1 ); Inst2_RAM_2048x8: RAM_2048x8 PORT MAP( Clk => Clk, WE => WE2, ADDR_WE => ADDR_WE, ADDR_RD => ADDR_RD, DI => KbD, DO => RAM_DO2 ); Inst3_RAM_2048x8: RAM_2048x8 PORT MAP( Clk => Clk, WE => WE3, ADDR_WE => ADDR_WE, ADDR_RD => ADDR_RD, DI => KbD, DO => RAM_DO3 ); end Behavioral; Moduł CGROM z zapisanymi informacjami o znakach: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ROM_8x8_256 is Port ( ROM_ADDR : in STD_LOGIC_VECTOR (10 downto 0); ROM_DO : out STD_LOGIC_VECTOR (7 downto 0); ROM_DI : in STD_LOGIC_VECTOR (7 downto 0); ROM_WE : in STD_LOGIC; Clk : in STD_LOGIC ); end ROM_8x8_256; architecture Behavioral of ROM_8x8_256 is ---------------------------------------------------------------------------- type rom_type is array (0 to 2047) of std_logic_vector (7 downto 0); signal ROM : rom_type:= (X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --01 X"04", X"08", X"1C", X"20", X"20", X"22", X"1C", X"00", --ć --02 X"04", X"08", X"3E", X"04", X"08", X"10", X"3E", X"00", --ź --03 X"18", X"08", X"0E", X"38", X"08", X"08", X"1E", X"00", --ł --04 X"00", X"00", X"1C", X"22", X"3E", X"20", X"1C", X"04", --ę --05 X"04", X"08", X"1C", X"22", X"22", X"22", X"1C", X"00", --ó --06 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --07 X"04", X"08", X"2C", X"32", X"22", X"22", X"22", X"00", --ń --08 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --09 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --0A X"08", X"00", X"3E", X"04", X"08", X"10", X"3E", X"00", --ż --0B X"04", X"08", X"1E", X"20", X"1C", X"02", X"3C", X"00", --ś --0C X"00", X"00", X"1C", X"02", X"1E", X"22", X"1E", X"04", --ą --0D X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --0E X"10", X"08", X"04", X"00", X"00", X"00", X"00", X"00", -- ` --0F X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --10 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --11 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --12 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --13 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --14 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --15 X"00", X"00", X"1A", X"26", X"22", X"1E", X"02", X"02", --q --16 X"08", X"18", X"08", X"08", X"08", X"08", X"1C", X"00", --1 --17 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --18 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --19 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --1A X"00", X"00", X"3E", X"04", X"08", X"10", X"3E", X"00", --z --1B X"00", X"00", X"1E", X"20", X"1C", X"02", X"3C", X"00", --s --1C X"00", X"00", X"1C", X"02", X"1E", X"22", X"1E", X"00", --a --1D X"00", X"00", X"22", X"22", X"2A", X"2A", X"14", X"00", --w --1E X"1C", X"22", X"02", X"04", X"08", X"10", X"3E", X"00", --2 --1F X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --20 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --21 X"00", X"00", X"1C", X"20", X"20", X"22", X"1C", X"00", --c --22 X"00", X"00", X"22", X"14", X"08", X"14", X"22", X"00", --x --23 X"02", X"02", X"1A", X"26", X"22", X"22", X"1E", X"00", --d --24 X"00", X"00", X"1C", X"22", X"3E", X"20", X"1C", X"00", --e --25 X"04", X"0C", X"14", X"24", X"3E", X"04", X"04", X"00", --4 --26 X"3E", X"04", X"08", X"04", X"02", X"22", X"1C", X"00", --3 --27 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --28 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --29 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --2A X"00", X"00", X"22", X"22", X"22", X"14", X"08", X"00", --v --2B X"0C", X"10", X"10", X"38", X"10", X"10", X"10", X"00", --f --2C X"10", X"10", X"38", X"10", X"10", X"12", X"0C", X"00", --t --2D X"00", X"00", X"2C", X"32", X"20", X"20", X"20", X"00", --r --2E X"3E", X"20", X"3C", X"02", X"02", X"22", X"1C", X"00", --5 --2F X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --30 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --31 X"00", X"00", X"2C", X"32", X"22", X"22", X"22", X"00", --n --32 X"20", X"20", X"2C", X"32", X"22", X"22", X"3C", X"00", --b --33 X"20", X"20", X"2C", X"32", X"22", X"22", X"22", X"00", --h --34 X"00", X"00", X"1E", X"22", X"22", X"1E", X"02", X"1C", --g --35 X"00", X"00", X"22", X"22", X"22", X"1E", X"02", X"1C", --y --36 X"0C", X"10", X"20", X"3C", X"22", X"22", X"1C", X"00", --6 --37 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --38 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --39 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --3A X"00", X"00", X"34", X"2A", X"2A", X"2A", X"2A", X"00", --m --3B X"04", X"00", X"0C", X"04", X"04", X"04", X"24", X"18", --j --3C X"00", X"00", X"22", X"22", X"22", X"26", X"1A", X"00", --u --3D X"3E", X"22", X"04", X"08", X"10", X"10", X"10", X"00", --7 --3E X"1C", X"22", X"22", X"1C", X"22", X"22", X"1C", X"00", --8 --3F X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --40 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --41 X"00", X"00", X"00", X"00", X"18", X"18", X"08", X"10", -- , --42 X"20", X"20", X"24", X"28", X"30", X"28", X"24", X"00", --k --43 X"08", X"00", X"18", X"08", X"08", X"08", X"1C", X"00", --i --44 X"00", X"00", X"1C", X"22", X"22", X"22", X"1C", X"00", --o --45 X"1C", X"22", X"26", X"2A", X"32", X"22", X"1C", X"00", --0 --46 X"1C", X"22", X"22", X"1E", X"02", X"22", X"1C", X"00", --9 --47 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --48 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --49 X"00", X"00", X"00", X"00", X"00", X"18", X"18", X"00", -- . --4A X"00", X"02", X"04", X"08", X"10", X"20", X"00", X"00", -- / --4B X"18", X"08", X"08", X"08", X"08", X"08", X"1C", X"00", --l --4C X"00", X"00", X"18", X"18", X"00", X"18", X"08", X"10", -- ; --4D X"00", X"00", X"3C", X"22", X"22", X"3C", X"20", X"20", --p --4E X"00", X"00", X"00", X"3E", X"00", X"00", X"00", X"00", -- - --4F X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --50 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --51 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --52 X"18", X"08", X"08", X"00", X"00", X"00", X"00", X"00", -- ' --53 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --54 X"1C", X"10", X"10", X"10", X"10", X"10", X"1C", X"00", -- [ --55 X"00", X"00", X"3E", X"00", X"3E", X"00", X"00", X"00", -- = --56 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --57 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --58 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --59 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --5A X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --5B X"1C", X"04", X"04", X"04", X"04", X"04", X"1C", X"00", -- ] --5C X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --5D X"00", X"20", X"10", X"08", X"04", X"02", X"00", X"00", -- \ --5E X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --5F X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --60 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --61 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --62 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --63 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --64 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --65 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --66 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --67 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --68 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --69 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --6A X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --6B X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --6C X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --6D X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --6E X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --6F X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --70 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --71 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --72 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --73 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --74 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --75 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --76 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --77 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --78 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --79 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --7A X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --7B X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --7C X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --7D X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --7E X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --7F X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --80 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --81 X"04", X"1C", X"22", X"20", X"20", X"22", X"1C", X"00", --Ć --82 X"04", X"3E", X"04", X"08", X"10", X"20", X"3E", X"00", --Ź --83 X"20", X"20", X"2C", X"30", X"20", X"20", X"3E", X"00", --Ł --84 X"3E", X"20", X"20", X"3C", X"20", X"20", X"3E", X"02", --Ę --85 X"04", X"1C", X"22", X"22", X"22", X"22", X"1C", X"00", --Ó --86 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --87 X"04", X"2A", X"32", X"32", X"2A", X"26", X"22", X"00", --Ń --88 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --89 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --8A X"08", X"3E", X"04", X"08", X"10", X"20", X"3E", X"00", --Ż --8B X"04", X"1E", X"20", X"1C", X"02", X"02", X"3C", X"00", --Ś --8C X"1C", X"22", X"22", X"22", X"3E", X"22", X"24", X"02", --Ą --8D X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --8E X"00", X"00", X"10", X"2A", X"04", X"00", X"00", X"00", -- ~~ --8F X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --90 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --91 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --92 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --93 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --94 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --95 X"1C", X"22", X"22", X"22", X"2A", X"24", X"1A", X"00", --Q --96 X"08", X"08", X"08", X"08", X"08", X"00", X"08", X"00", --! --97 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --98 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --99 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --9A X"3E", X"02", X"04", X"08", X"10", X"20", X"3E", X"00", --Z --9B X"1E", X"20", X"20", X"1C", X"02", X"02", X"3C", X"00", --S --9C X"1C", X"22", X"22", X"22", X"3E", X"22", X"22", X"00", --A --9D X"22", X"22", X"22", X"2A", X"2A", X"2A", X"14", X"00", --W --9E X"1C", X"22", X"02", X"1A", X"2A", X"2A", X"1C", X"00", --@ --9F X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --A0 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --A1 X"1C", X"22", X"20", X"20", X"20", X"22", X"1C", X"00", --C --A2 X"22", X"22", X"14", X"08", X"14", X"22", X"22", X"00", --X --A3 X"38", X"24", X"22", X"22", X"22", X"24", X"38", X"00", --D --A4 X"3E", X"20", X"20", X"3C", X"20", X"20", X"3E", X"00", --E --A5 X"08", X"1E", X"28", X"1C", X"0A", X"3C", X"08", X"00", --$ --A6 X"14", X"14", X"3E", X"14", X"3E", X"14", X"14", X"00", --# --A7 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --A8 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --A9 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --AA X"22", X"22", X"22", X"22", X"22", X"14", X"08", X"00", --V --AB X"3E", X"20", X"20", X"3C", X"20", X"20", X"20", X"00", --F --AC X"3E", X"08", X"08", X"08", X"08", X"08", X"08", X"00", --T --AD X"3C", X"22", X"22", X"3E", X"28", X"24", X"22", X"00", --R --AE X"30", X"32", X"04", X"08", X"10", X"26", X"05", X"00", --% --AF X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --B0 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --B1 X"22", X"22", X"32", X"2A", X"26", X"22", X"22", X"00", --N --B2 X"3C", X"22", X"22", X"3C", X"22", X"22", X"3C", X"00", --B --B3 X"22", X"22", X"22", X"3E", X"22", X"22", X"22", X"00", --H --B4 X"1C", X"22", X"20", X"2E", X"22", X"22", X"1E", X"00", --G --B5 X"22", X"22", X"22", X"14", X"08", X"08", X"08", X"00", --Y --B6 X"08", X"14", X"22", X"00", X"00", X"00", X"00", X"00", --^ --B7 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --B8 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --B9 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --BA X"22", X"36", X"2A", X"22", X"22", X"22", X"22", X"00", --M --BB X"1C", X"04", X"04", X"04", X"04", X"24", X"18", X"00", --J --BC X"22", X"22", X"22", X"22", X"22", X"22", X"1C", X"00", --U --BD X"18", X"24", X"28", X"10", X"2A", X"24", X"1A", X"00", --& --BE X"00", X"2A", X"1C", X"3E", X"1C", X"2A", X"00", X"00", --* --BF X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --C0 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --C1 X"04", X"08", X"10", X"20", X"10", X"08", X"04", X"00", -- < --C2 X"22", X"24", X"28", X"30", X"28", X"24", X"22", X"00", --K --C3 X"1C", X"08", X"08", X"08", X"08", X"08", X"1C", X"00", --I --C4 X"1C", X"22", X"22", X"22", X"22", X"22", X"1C", X"00", --O --C5 X"10", X"08", X"04", X"04", X"04", X"08", X"10", X"00", --) --C6 X"04", X"08", X"10", X"10", X"10", X"08", X"04", X"00", --( --C7 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --C8 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --C9 X"10", X"08", X"04", X"02", X"04", X"08", X"10", X"00", -- > --CA X"1C", X"22", X"02", X"04", X"08", X"00", X"08", X"00", -- ? --CB X"20", X"20", X"20", X"20", X"20", X"20", X"3E", X"00", --L --CC X"00", X"00", X"18", X"18", X"00", X"18", X"18", X"00", -- : --CD X"3C", X"22", X"22", X"3C", X"20", X"20", X"20", X"00", --P --CE X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"3E", -- _ --CF X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --D0 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --D1 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --D2 X"14", X"14", X"14", X"00", X"00", X"00", X"00", X"00", -- " --D3 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --D4 X"04", X"08", X"08", X"10", X"08", X"08", X"04", X"00", -- { --D5 X"00", X"08", X"08", X"3E", X"08", X"08", X"00", X"00", -- + --D6 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --D7 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --D8 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --D9 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --DA X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --DB X"10", X"08", X"08", X"04", X"08", X"08", X"10", X"00", -- } --DC X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --DD X"08", X"08", X"08", X"08", X"08", X"08", X"08", X"00", -- | --DE X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --DF X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --E0 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --E1 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --E2 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --E3 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --E4 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --E5 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --E6 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --E7 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --E8 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --E9 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --EA X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --EB X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --EC X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --ED X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --EE X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --EF X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --F0 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --F1 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --F2 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --F3 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --F4 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --F5 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --F6 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --F7 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --F8 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --F9 X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --FA X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --FB X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --FC X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --FD X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --FE X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00", --FF X"00", X"00", X"00", X"00", X"00", X"00", X"00", X"00" ); ---------------------------------------------------------------------------- begin ---------------------------------------------------------------------------- process(Clk) begin if Clk'event and Clk = '0' then if ROM_WE = '1' then ROM(conv_integer(ROM_ADDR)) <= ROM_DI; else ROM_DO <= ROM(conv_integer(ROM_ADDR)); end if; end if; end process; end Behavioral; Moduł pamięci VRAM: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity RAM_2048x8 is port (Clk : in std_logic; WE : in std_logic; ADDR_WE : in std_logic_vector(10 downto 0); ADDR_RD : in std_logic_vector(10 downto 0); DI : in std_logic_vector(7 downto 0); DO : out std_logic_vector(7 downto 0) ); end RAM_2048x8; architecture Behavioral of RAM_2048x8 is type ram_type is array (2047 downto 0) of std_logic_vector (7 downto 0); signal RAM: ram_type; begin process (CLK) begin if CLK'event and CLK = '0' then if WE = '1' then RAM(conv_integer(ADDR_WE)) <= DI; end if; DO <= RAM(conv_integer(ADDR_RD)) ; end if; end process; end Behavioral; Plik UCF w puste miejsca po literze 'p' należy wpisać numer portu układu FPGA: #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments VCCAUX = 3.3 ; #-------------------------- #--Clk = 100MHz NET "Clk" LOC = "p " ; NET "Reset" LOC = "p " ; #-------------------------- NET "PS21_D" LOC = "p " ; NET "PS21_C" LOC = "p " ; #-------------------------- NET "HS" LOC = "p " ; NET "VS" LOC = "p " ; #-------------------------- NET "RGB<0>" LOC = "p " ; NET "RGB<1>" LOC = "p " ; NET "RGB<2>" LOC = "p " ; NET "RGB<3>" LOC = "p " ; NET "RGB<4>" LOC = "p " ; NET "RGB<5>" LOC = "p " ; NET "RGB<6>" LOC = "p " ; NET "RGB<7>" LOC = "p " ; #-------------------------- #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE Edytowano Luty 9, 2024 przez kroszkanorber 2
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »