mouse: add scroll support

This commit is contained in:
Eugene Lozovoy
2024-09-24 23:45:27 +03:00
parent e4554d1e58
commit 858e4a2a61
3 changed files with 13 additions and 8 deletions

View File

@ -166,12 +166,13 @@ wire [7:0] key_code;
wire [8:0] mouse_x; wire [8:0] mouse_x;
wire [8:0] mouse_y; wire [8:0] mouse_y;
wire [3:0] mouse_z;
wire [7:0] mouse_flags; wire [7:0] mouse_flags;
wire mouse_strobe; wire mouse_strobe;
wire mouse_b0 = st_mouseswap? mouse_flags[0] : mouse_flags[1]; wire mouse_b0 = st_mouseswap? mouse_flags[1] : mouse_flags[0];
wire mouse_b1 = st_mouseswap? mouse_flags[1] : mouse_flags[0]; wire mouse_b1 = st_mouseswap? mouse_flags[0] : mouse_flags[1];
wire [24:0] ps2_mouse = { mouse_strobe_level, mouse_y[7:0], mouse_x[7:0], mouse_flags[7:2], mouse_b1, mouse_b0 }; wire [28:0] ps2_mouse = { mouse_strobe_level, mouse_z, mouse_y[7:0], mouse_x[7:0], mouse_flags[7:2], mouse_b1, mouse_b0 };
reg mouse_strobe_level; reg mouse_strobe_level;
always @(posedge clk_sys) if (mouse_strobe) mouse_strobe_level <= ~mouse_strobe_level; always @(posedge clk_sys) if (mouse_strobe) mouse_strobe_level <= ~mouse_strobe_level;
@ -207,6 +208,7 @@ user_io #(.STRLEN($size(CONF_STR)>>3), .SD_IMAGES(2), .FEATURES(32'h0 | (BIG_OSD
.mouse_x(mouse_x), .mouse_x(mouse_x),
.mouse_y(mouse_y), .mouse_y(mouse_y),
.mouse_z(mouse_z),
.mouse_flags(mouse_flags), .mouse_flags(mouse_flags),
.mouse_strobe(mouse_strobe), .mouse_strobe(mouse_strobe),

View File

@ -24,7 +24,7 @@ module kempston_mouse
input clk_sys, input clk_sys,
input reset, input reset,
input [24:0] ps2_mouse, input [28:0] ps2_mouse,
input [2:0] addr, input [2:0] addr,
output sel, output sel,
@ -36,6 +36,7 @@ assign sel = port_sel;
reg [11:0] dx; reg [11:0] dx;
reg [11:0] dy; reg [11:0] dy;
reg [3:0] dz;
reg [7:0] data; reg [7:0] data;
reg port_sel; reg port_sel;
@ -44,22 +45,24 @@ always @* begin
casex(addr) casex(addr)
3'b011: data = dx[7:0]; 3'b011: data = dx[7:0];
3'b111: data = dy[7:0]; 3'b111: data = dy[7:0];
3'bX10: data = ~{5'b00000,ps2_mouse[2], ps2_mouse[0], ps2_mouse[1]} ; 3'bX10: data = {dz, 1'b1, ~ps2_mouse[2:0]};
default: {port_sel,data} = 8'hFF; default: {port_sel,data} = 8'hFF;
endcase endcase
end end
always @(posedge clk_sys) begin always @(posedge clk_sys) begin
reg old_status; reg old_status;
old_status <= ps2_mouse[24]; old_status <= ps2_mouse[28];
if(reset) begin if(reset) begin
dx <= 128; // dx != dy for better mouse detection dx <= 128; // dx != dy for better mouse detection
dy <= 0; dy <= 0;
dz <= 4'b1111;
end end
else if(old_status != ps2_mouse[24]) begin else if(old_status != ps2_mouse[28]) begin
dx <= dx + {{4{ps2_mouse[4]}},ps2_mouse[15:8]}; dx <= dx + {{4{ps2_mouse[4]}},ps2_mouse[15:8]};
dy <= dy + {{4{ps2_mouse[5]}},ps2_mouse[23:16]}; dy <= dy + {{4{ps2_mouse[5]}},ps2_mouse[23:16]};
dz <= dz - ps2_mouse[27:24];
end end
end end

View File

@ -60,7 +60,7 @@ module tsconf
// User input // User input
input [10:0] PS2_KEY, input [10:0] PS2_KEY,
input [24:0] PS2_MOUSE, input [28:0] PS2_MOUSE,
input [7:0] JOYSTICK1, input [7:0] JOYSTICK1,
input [7:0] JOYSTICK2, input [7:0] JOYSTICK2,