fix(ps2): 鼠标 dy 方向取负(PS/2 正 dy = 上,软件正 dy = 下);键盘补 W/A/S/D 别名
上板实测:鼠标已能操作(说明“奇校验 + 帧按位的下标对齐”那个修复就是根因),
但上下是反的、左右正确 —— 这是两套约定的差异,不是解码错:
* PS/2 鼠标原生约定:dx 正 = 右、**dy 正 = 上**
* saolei.c 的约定:正 dx = 列 +1、**正 dy = 行 +1(向下)**,和 cpu21_pointer 的
BTND = +8 一致
所以 cpu21_ps2_mouse 在拼包时把 dy 取负(dx 不动),三种事件源(板载按键 / PS/2 鼠标 /
PS/2 键盘)方向统一。
键盘:另加 W/A/S/D = 方向键(与 tools/play_saolei.tcl 里的别名保持一致),这样用普通
字母键也能测。
自测同步更新(都 ALL PASS):
* tb_ps2_mouse:改发“鼠标向上”的 dy=+8,事件里必须得到 dy=-8;向下 dy=-5 -> +5
* tb_ps2_kbd:新增 W(1D) -> dy=-8 用例
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
//
|
||||
// 发 → 键(E0 74)应产生 dx=+8;发 ↑(E0 75)应产生 dy=-8;
|
||||
// 发 Enter(5A)应产生 btn=1(开格);发 左Shift(12)应产生 btn=2(插旗);
|
||||
// 发 W(1D)应产生 dy=-8(W/A/S/D 别名);
|
||||
// 松开码(F0 xx)不应产生事件;校验位错的帧应被整帧丢掉。
|
||||
//
|
||||
// PS/2 键盘发扫描码(集 2):0xF0 前缀 = 下一个码是"松开",0xE0 前缀 = 扩展键,
|
||||
@@ -152,8 +153,13 @@ module tb_ps2_kbd;
|
||||
send_byte(8'h12);
|
||||
#(100_000);
|
||||
|
||||
$display("[kbd] W 键(1D)期望 dy=-8(W/A/S/D 是方向键别名)");
|
||||
exp_dx = 0; exp_dy = -8; exp_btn = 0;
|
||||
send_byte(8'h1D);
|
||||
#(100_000);
|
||||
|
||||
$display("[kbd] rx_count=%0d events=%0d", rx_count, n_ev);
|
||||
if ((ok == 0) || (n_ev != 4))
|
||||
if ((ok == 0) || (n_ev != 5))
|
||||
$display("[kbd] === FAIL ===");
|
||||
else
|
||||
$display("[kbd] === ALL PASS ===");
|
||||
|
||||
Reference in New Issue
Block a user