Project

General

Profile

« Previous | Next » 

Revision 127

Added by markw about 11 years ago

Added scanlines support

View differences:

common/components/scandoubler.vhdl
colour_enable : in std_logic;
doubled_enable : in std_logic;
scanlines_on : in std_logic := '0';
-- GTIA interface
colour_in : in std_logic_vector(7 downto 0);
......
signal vga_hsync_reg : std_logic;
signal vga_hsync_start : std_logic;
signal vga_hsync_end : std_logic;
signal vga_odd_reg : std_logic;
signal vga_odd_next : std_logic;
begin
-- register
......
buffer_select_reg <= '0';
vga_hsync_reg <= '0';
vga_odd_reg <= '0';
elsif (clk'event and clk='1') then
r_reg <= r_next;
g_reg <= g_next;
......
hsync_in_reg <= hsync_in;
vga_hsync_reg <= vga_hsync_next;
vga_odd_reg <= vga_odd_next;
end if;
end process;
......
end process;
-- output
process(vga_hsync_reg,vga_hsync_end,output_address_reg,doubled_enable)
process(vga_hsync_reg,vga_hsync_end,output_address_reg,doubled_enable,vga_odd_reg)
begin
output_address_next <= output_address_reg;
vga_hsync_start<='0';
vga_hsync_next <= vga_hsync_reg;
vga_odd_next <= vga_odd_reg;
if (doubled_enable = '1') then
output_address_next <= std_logic_vector(unsigned(output_address_reg)+1);
......
if (vga_hsync_end = '1') then
vga_hsync_next <= '0';
vga_odd_next <= not(vga_odd_reg);
end if;
end process;
......
port map(clk=>clk,sync_reset=>'0',data_in=>vga_hsync_start,enable=>doubled_enable,reset_n=>reset_n,data_out=>vga_hsync_end);
-- display
process(colour_reg,vsync_reg,vga_hsync_reg,hsync_reg,colour_in,vsync_in,hsync_in,colour_enable,doubled_enable,vga,composite_on_hsync,buffer_select_reg,linea_out,lineb_out)
process(colour_reg,vsync_reg,vga_hsync_reg,hsync_reg,colour_in,vsync_in,hsync_in,colour_enable,doubled_enable,vga,composite_on_hsync,buffer_select_reg,linea_out,lineb_out, scanlines_on, vga_odd_reg)
begin
colour_next <= colour_reg;
vsync_next <= vsync_reg;
......
else
-- vga mode, store all inputs - then play back!
if (buffer_select_reg = '0') then
colour_next <= linea_out; -- todo, smoothly increase/decrease...
if (scanlines_on ='1' and vga_odd_reg='1') then
colour_next(7 downto 4) <= linea_out(7 downto 4);
colour_next(3) <= '0';
colour_next(2 downto 0) <= linea_out(3 downto 1);
else
colour_next <= linea_out;
end if;
else
colour_next <= lineb_out;
if (scanlines_on ='1' and vga_odd_reg='1') then
colour_next(7 downto 4) <= lineb_out(7 downto 4);
colour_next(3) <= '0';
colour_next(2 downto 0) <= lineb_out(3 downto 1);
else
colour_next <= lineb_out;
end if;
end if;
vsync_next <= not(vsync_in);

Also available in: Unified diff