1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-05-28 23:41:32 +00:00

paddles.v

This commit is contained in:
Steven Hugg 2018-06-03 19:01:40 -07:00
parent 0ee201b9e8
commit e0e3e0bf61
3 changed files with 60 additions and 10 deletions

51
presets/verilog/paddles.v Normal file
View 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

View File

@ -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

View File

@ -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'},