mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-05-28 23:41:32 +00:00
paddles.v
This commit is contained in:
parent
0ee201b9e8
commit
e0e3e0bf61
51
presets/verilog/paddles.v
Normal file
51
presets/verilog/paddles.v
Normal file
|
@ -0,0 +1,51 @@
|
|||
`include "hvsync_generator.v"
|
||||
|
||||
module top(clk, reset, hsync, vsync, hpaddle, vpaddle, rgb);
|
||||
|
||||
input clk, reset;
|
||||
input hpaddle, vpaddle;
|
||||
output hsync, vsync;
|
||||
output [2:0] rgb;
|
||||
wire display_on;
|
||||
wire [8:0] hpos;
|
||||
wire [8:0] vpos;
|
||||
|
||||
reg [7:0] player_x;
|
||||
reg [7:0] player_y;
|
||||
|
||||
reg [7:0] paddle_x;
|
||||
reg [7:0] paddle_y;
|
||||
|
||||
// read horizontal paddle
|
||||
always @(posedge hpaddle)
|
||||
paddle_x <= vpos[7:0];
|
||||
|
||||
// read vertical paddle
|
||||
always @(posedge vpaddle)
|
||||
paddle_y <= vpos[7:0];
|
||||
|
||||
// update player_x and player_y
|
||||
always @(posedge vsync)
|
||||
begin
|
||||
player_x <= paddle_x;
|
||||
player_y <= paddle_y;
|
||||
end
|
||||
|
||||
hvsync_generator hvsync_gen(
|
||||
.clk(clk),
|
||||
.reset(reset),
|
||||
.hsync(hsync),
|
||||
.vsync(vsync),
|
||||
.display_on(display_on),
|
||||
.hpos(hpos),
|
||||
.vpos(vpos)
|
||||
);
|
||||
|
||||
// display paddle positions on screen
|
||||
|
||||
wire h = hpos[7:0] >= paddle_x;
|
||||
wire v = vpos[7:0] >= paddle_y;
|
||||
|
||||
assign rgb = {1'b0, display_on && h, display_on && v};
|
||||
|
||||
endmodule
|
|
@ -76,7 +76,7 @@ module sprite_scanline_renderer(clk, reset, hpos, vpos, rgb,
|
|||
reg [7:0] out_attr;
|
||||
|
||||
// which sprite are we currently reading?
|
||||
wire [NB-1:0] load_index = hpos[NB+1:2];
|
||||
wire [NB-1:0] load_index = hpos[NB:1];
|
||||
|
||||
// RGB dual scanline buffer
|
||||
reg [3:0] scanline[0:511];
|
||||
|
@ -105,20 +105,18 @@ module sprite_scanline_renderer(clk, reset, hpos, vpos, rgb,
|
|||
// load sprites from RAM on line 260
|
||||
// 8 cycles per sprite
|
||||
// do first sprite twice b/c CPU might still be busy
|
||||
if (vpos == 260 && hpos < N*4+8) begin
|
||||
if (vpos == 260 && hpos < N*2+8) begin
|
||||
ram_busy <= 1;
|
||||
case (hpos[1:0])
|
||||
case (hpos[0])
|
||||
0: begin
|
||||
ram_addr <= {load_index, 1'b0};
|
||||
end
|
||||
1: begin
|
||||
ram_addr <= {load_index, 1'b1};
|
||||
end
|
||||
2: begin
|
||||
// load X and Y position (2 cycles ago)
|
||||
sprite_xpos[load_index] <= ram_data[7:0];
|
||||
sprite_ypos[load_index] <= ram_data[15:8];
|
||||
end
|
||||
3: begin
|
||||
1: begin
|
||||
ram_addr <= {load_index, 1'b1};
|
||||
// load attribute (2 cycles ago)
|
||||
sprite_attr[load_index] <= ram_data[7:0];
|
||||
end
|
||||
endcase
|
||||
|
|
|
@ -9,16 +9,17 @@ var VERILOG_PRESETS = [
|
|||
{id:'scoreboard.v', name:'Scoreboard'},
|
||||
{id:'ball_absolute.v', name:'Ball Motion (absolute position)'},
|
||||
{id:'ball_slip_counter.v', name:'Ball Motion (slipping counter)'},
|
||||
{id:'paddles.v', name:'Paddle Inputs'},
|
||||
{id:'ball_paddle.v', name:'Brick Smash Game'},
|
||||
{id:'ram1.v', name:'RAM Text Display'},
|
||||
{id:'sprite_bitmap.v', name:'Sprite Bitmaps'},
|
||||
{id:'sprite_renderer.v', name:'Sprite Rendering'},
|
||||
{id:'racing_game.v', name:'Racing Game'},
|
||||
{id:'sprite_rotation.v', name:'Sprite Rotation'},
|
||||
{id:'tank.v', name:'Tank Game'},
|
||||
{id:'sound_generator.v', name:'Sound Generator'},
|
||||
{id:'lfsr.v', name:'Linear Feedback Shift Register'},
|
||||
{id:'starfield.v', name:'Scrolling Starfield'},
|
||||
{id:'racing_game.v', name:'Racing Game'},
|
||||
{id:'cpu8.v', name:'Simple 8-Bit CPU'},
|
||||
{id:'racing_game_cpu.v', name:'Racing Game with CPU'},
|
||||
{id:'framebuffer.v', name:'Frame Buffer'},
|
||||
|
|
Loading…
Reference in New Issue
Block a user