From 131132ced64f461f6224cb4af95e7a3e89fd32d2 Mon Sep 17 00:00:00 2001 From: sorgelig Date: Tue, 30 Jun 2020 08:20:11 +0800 Subject: [PATCH] Support mouse wheel. --- hps_ext.v | 5 +++++ rtl/userio.v | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/hps_ext.v b/hps_ext.v index f6d106aa..8f7ee976 100644 --- a/hps_ext.v +++ b/hps_ext.v @@ -109,6 +109,11 @@ always@(posedge clk_sys) begin // third byte contains the buttons mouse_buttons <= io_din[2:0]; end + 4: begin + // wheel + kbd_mouse_data <= io_din[7:0]; + kbd_mouse_level <= ~kbd_mouse_level; + end endcase UIO_KEYBOARD: diff --git a/rtl/userio.v b/rtl/userio.v index 18f4ff16..dc7a8528 100644 --- a/rtl/userio.v +++ b/rtl/userio.v @@ -98,7 +98,6 @@ reg [15:0] _sjoy2; // synchronized joystick 2 signals reg [15:0] _djoy2; // synchronized joystick 2 signals reg [15:0] potreg; // POTGO write wire [15:0] mouse0dat; // mouse counters -wire [7:0] mouse0scr = 0; // mouse scroller reg [15:0] dmouse0dat; // docking mouse counters reg [15:0] dmouse1dat; // docking mouse counters wire _mleft; // left mouse button @@ -285,22 +284,33 @@ assign test_data = data_in[15:0]; //// mouse //// reg [ 7:0] xcount; reg [ 7:0] ycount; +reg [ 7:0] mouse0scr; // mouse counters always @(posedge clk) begin reg old_level; + reg wheel; old_level <= kms_level; if(reset) begin xcount <= 0; ycount <= 0; + mouse0scr <= 0; + wheel <= 0; end else if (test_load && clk7_en) begin ycount[7:2] <= test_data[15:10]; xcount[7:2] <= test_data[7:2]; end else if (old_level ^ kms_level) begin - if(kbd_mouse_type == 0) xcount[7:0] <= xcount[7:0] + kbd_mouse_data; - if(kbd_mouse_type == 1) ycount[7:0] <= ycount[7:0] + kbd_mouse_data; + if(kbd_mouse_type == 0) begin + wheel <= 0; + xcount[7:0] <= xcount[7:0] + kbd_mouse_data; + end + if(kbd_mouse_type == 1) begin + wheel <= 1; + if(wheel) mouse0scr <= mouse0scr + kbd_mouse_data; + else ycount[7:0] <= ycount[7:0] + kbd_mouse_data; + end end end