|
@@ -3,7 +3,7 @@ MODULE MouseP ( (*NW 7.9.2015*)
|
|
INOUT msclk, msdat: BIT;
|
|
INOUT msclk, msdat: BIT;
|
|
OUT out: [28] BIT);
|
|
OUT out: [28] BIT);
|
|
(* init mouse cmd F4 (start reporting) with start, parity and stop bits added *)
|
|
(* init mouse cmd F4 (start reporting) with start, parity and stop bits added *)
|
|
- CONST InitBuf := 0FFFFFDE8H; (* 1...1 1 0 1111 0100 0 *)
|
|
|
|
|
|
+ CONST InitBuf = 0FFFFFDE8H; (* 1...1 1 0 1111 0100 0 *)
|
|
REG (clk) x, y: [10] BIT; (*counters*)
|
|
REG (clk) x, y: [10] BIT; (*counters*)
|
|
btns: [3] BIT;
|
|
btns: [3] BIT;
|
|
Q0, Q1, run: BIT;
|
|
Q0, Q1, run: BIT;
|
|
@@ -29,3 +29,65 @@ BEGIN TS(msclk, msclk0, 0'1, rst);
|
|
y := ~rst -> 0'10 : endbit -> y + dy : y;
|
|
y := ~rst -> 0'10 : endbit -> y + dy : y;
|
|
btns := ~rst -> 0'3 : endbit -> {shreg.1, shreg.3, shreg.2} : btns
|
|
btns := ~rst -> 0'3 : endbit -> {shreg.1, shreg.3, shreg.2} : btns
|
|
END MouseP.
|
|
END MouseP.
|
|
|
|
+
|
|
|
|
+MODULE MouseP (
|
|
|
|
+ IN clk, rst, msdat: BIT;
|
|
|
|
+ INOUT msclk: BIT;
|
|
|
|
+ OUT out: [28] BIT);
|
|
|
|
+
|
|
|
|
+ CONST InitBuf := 0; (*0FFFFFBE8H; hex*)
|
|
|
|
+ TYPE IOBUF = MODULE (IN I: BIT; OUT O: BIT; INOUT IO: BIT; IN T: BIT) ^;
|
|
|
|
+ REG x, y: [10] BIT; (*counters*)
|
|
|
|
+ btns: [3] BIT;
|
|
|
|
+ Q0, Q1, run: BIT;
|
|
|
|
+ shreg: [32] BIT;
|
|
|
|
+ iobuf: IOBUF;
|
|
|
|
+ VAR shift, endbit, reply, q: BIT;
|
|
|
|
+ dx, dy: [10] BIT;
|
|
|
|
+BEGIN iobuf (0, q msclk, rst);
|
|
|
|
+ shift := Q1 & ~Q0; (*falling edge detector*)
|
|
|
|
+ reply := ~run & ~shreg.11; (*start bit of echoed initBuf, if response*)
|
|
|
|
+ endbit := run & ~shreg.0; (*normal packet received*)
|
|
|
|
+ dx := {shreg.5 !2, shreg.7 -> 0'8 : shreg[19:12]}; (*sign + ovfl*)
|
|
|
|
+ dy := {shreg.6 !2, shreg.8 -> 0'8 : shreg[30:23]}; (*sign + ovfl*)
|
|
|
|
+ out := {run, btns, 0'2, y, 0'2, x};
|
|
|
|
+
|
|
|
|
+ run := rst & (reply | run);
|
|
|
|
+ Q0 := q; Q1 := Q0;
|
|
|
|
+ shreg := ~rst -> InitBuf : (endbit | reply) -> 0FFFFFFFFH'32: shift -> {msdat, shreg[31:1]} : shreg;
|
|
|
|
+ x := ~rst -> 0'10 : endbit -> x + dx : x;
|
|
|
|
+ y := ~rst -> 0'10 : endbit -> y + dy : y;
|
|
|
|
+ btns := ~rst -> 0'3 : endbit -> {shreg.1, shreg.3, shreg.2} : btns
|
|
|
|
+END MouseP.
|
|
|
|
+
|
|
|
|
+MODULE MouseP (
|
|
|
|
+ IN clk, rst: BIT;
|
|
|
|
+ INOUT io: [2] BIT;
|
|
|
|
+ OUT out: [28] BIT);
|
|
|
|
+
|
|
|
|
+ (* init mouse cmd F4 (start reporting) with start, parity and stop bits added *)
|
|
|
|
+ CONST InitBuf := 0FFFFFDE8H; (* 1...1 1 0 1111 0100 0 *)
|
|
|
|
+ TYPE PS2BUF = MODULE (OUT O: [2] BIT; INOUT IO: [2] BIT; IN T: [2] BIT) ^;
|
|
|
|
+ REG x, y: [10] BIT; (*counters*)
|
|
|
|
+ btns: [3] BIT;
|
|
|
|
+ Q0, Q1, run: BIT;
|
|
|
|
+ shreg: [32] BIT;
|
|
|
|
+ VAR shift, endbit, reply: BIT;
|
|
|
|
+ dx, dy: [10] BIT;
|
|
|
|
+ in: [2] BIT;
|
|
|
|
+ ps2buf: PS2BUF;
|
|
|
|
+BEGIN ps2buf(in, io, {run | shreg[0], rst}); (*open-collector wiring*)
|
|
|
|
+ shift := Q1 & ~Q0; (*falling edge detector*)
|
|
|
|
+ reply := ~run & ~shreg.11; (*start bit of echoed initBuf, if response*)
|
|
|
|
+ endbit := run & ~shreg.0; (*normal packet received*)
|
|
|
|
+ dx := {shreg.5 !2, shreg.7 -> 0'8 : shreg[19:12]}; (*sign + ovfl*)
|
|
|
|
+ dy := {shreg.6 !2, shreg.8 -> 0'8 : shreg[30:23]}; (*sign + ovfl*)
|
|
|
|
+ out := {run, btns, 0'2, y, 0'2, x};
|
|
|
|
+
|
|
|
|
+ run := rst & (reply | run);
|
|
|
|
+ Q0 := in[0]; Q1 := Q0;
|
|
|
|
+ shreg := ~rst -> InitBuf : (endbit | reply) -> 0FFFFFFFFH'32: shift -> {in[1], shreg[31:1]} : shreg;
|
|
|
|
+ x := ~rst -> 0'10 : endbit -> x + dx : x;
|
|
|
|
+ y := ~rst -> 0'10 : endbit -> y + dy : y;
|
|
|
|
+ btns := ~rst -> 0'3 : endbit -> {shreg.1, shreg.3, shreg.2} : btns
|
|
|
|
+END MouseP.
|