From 858e4a2a614946f1900f5a80c5c4af6b530bac57 Mon Sep 17 00:00:00 2001 From: Eugene Lozovoy Date: Tue, 24 Sep 2024 23:45:27 +0300 Subject: [PATCH] mouse: add scroll support --- TSConf.sv | 8 +++++--- rtl/periph/kempston_mouse.v | 11 +++++++---- rtl/tsconf.v | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/TSConf.sv b/TSConf.sv index e68db5b..20617a7 100644 --- a/TSConf.sv +++ b/TSConf.sv @@ -166,12 +166,13 @@ wire [7:0] key_code; wire [8:0] mouse_x; wire [8:0] mouse_y; +wire [3:0] mouse_z; wire [7:0] mouse_flags; wire mouse_strobe; -wire mouse_b0 = st_mouseswap? mouse_flags[0] : mouse_flags[1]; -wire mouse_b1 = st_mouseswap? mouse_flags[1] : mouse_flags[0]; -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 mouse_b0 = st_mouseswap? mouse_flags[1] : mouse_flags[0]; +wire mouse_b1 = st_mouseswap? mouse_flags[0] : mouse_flags[1]; +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; 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_y(mouse_y), + .mouse_z(mouse_z), .mouse_flags(mouse_flags), .mouse_strobe(mouse_strobe), diff --git a/rtl/periph/kempston_mouse.v b/rtl/periph/kempston_mouse.v index 32292c6..7cb2876 100644 --- a/rtl/periph/kempston_mouse.v +++ b/rtl/periph/kempston_mouse.v @@ -24,7 +24,7 @@ module kempston_mouse input clk_sys, input reset, - input [24:0] ps2_mouse, + input [28:0] ps2_mouse, input [2:0] addr, output sel, @@ -36,6 +36,7 @@ assign sel = port_sel; reg [11:0] dx; reg [11:0] dy; +reg [3:0] dz; reg [7:0] data; reg port_sel; @@ -44,22 +45,24 @@ always @* begin casex(addr) 3'b011: data = dx[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; endcase end always @(posedge clk_sys) begin reg old_status; - old_status <= ps2_mouse[24]; + old_status <= ps2_mouse[28]; if(reset) begin dx <= 128; // dx != dy for better mouse detection dy <= 0; + dz <= 4'b1111; 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]}; dy <= dy + {{4{ps2_mouse[5]}},ps2_mouse[23:16]}; + dz <= dz - ps2_mouse[27:24]; end end diff --git a/rtl/tsconf.v b/rtl/tsconf.v index ae455e1..cfaba4c 100644 --- a/rtl/tsconf.v +++ b/rtl/tsconf.v @@ -60,7 +60,7 @@ module tsconf // User input input [10:0] PS2_KEY, - input [24:0] PS2_MOUSE, + input [28:0] PS2_MOUSE, input [7:0] JOYSTICK1, input [7:0] JOYSTICK2,