// ZX-Evo Base Configuration (c) NedoPC 2008,2009,2010,2011,2012,2013,2014
 
//
 
// generates horizontal vga sync, double the rate of TV horizontal sync
 
 
 
/*
 
    This file is part of ZX-Evo Base Configuration firmware.
 
 
 
    ZX-Evo Base Configuration firmware is free software:
 
    you can redistribute it and/or modify it under the terms of
 
    the GNU General Public License as published by
 
    the Free Software Foundation, either version 3 of the License, or
 
    (at your option) any later version.
 
 
 
    ZX-Evo Base Configuration firmware is distributed in the hope that
 
    it will be useful, but WITHOUT ANY WARRANTY; without even
 
    the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
    See the GNU General Public License for more details.
 
 
 
    You should have received a copy of the GNU General Public License
 
    along with ZX-Evo Base Configuration firmware.
 
    If not, see <http://www.gnu.org/licenses/>.
 
*/
 
 
 
`include "../include/tune.v"
 
 
 
module video_vga_sync_h(
 
 
 
        input  wire clk,
 
 
 
        input  wire [1:0] modes_raster,
 
 
 
        output reg  vga_hsync,
 
 
 
        output reg  scanout_start,
 
 
 
        input  wire hsync_start
 
);
 
 
 
        localparam HSYNC_END    = 10'd106;
 
        localparam SCANOUT_BEG  = 10'd156;
 
 
 
        localparam HPERIOD_224 = 10'd896;
 
        localparam HPERIOD_228 = 10'd912;
 
 
 
 
 
 
 
        reg [9:0] hcount;
 
 
 
        initial
 
        begin
 
                hcount = 9'd0;
 
                vga_hsync = 1'b0;
 
        end
 
 
 
 
 
 
 
        always @(posedge clk)
 
        begin
 
                        if( hsync_start )
 
                                hcount <= 10'd2;
 
                        else if ( hcount==( (modes_raster==2'b11) ? (HPERIOD_228-10'd1) : (HPERIOD_224-10'd1) ) )
 
                                hcount <= 10'd0;
 
                        else
 
                                hcount <= hcount + 9'd1;
 
        end
 
 
 
 
 
        always @(posedge clk)
 
        begin
 
                if( !hcount )
 
                        vga_hsync <= 1'b1;
 
                else if( hcount==HSYNC_END )
 
                        vga_hsync <= 1'b0;
 
        end
 
 
 
 
 
        always @(posedge clk)
 
        begin
 
                if( hcount==SCANOUT_BEG )
 
                        scanout_start <= 1'b1;
 
                else
 
                        scanout_start <= 1'b0;
 
        end
 
 
 
 
 
endmodule