Rev 200 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
668 | lvd | 1 | // ZX-Evo Base Configuration (c) NedoPC 2008,2009,2010,2011,2012,2013,2014 |
67 | lvd | 2 | // |
3 | // MUXes mouse and kbd data in two single databusses for zports |
||
4 | |||
668 | lvd | 5 | /* |
6 | This file is part of ZX-Evo Base Configuration firmware. |
||
7 | |||
8 | ZX-Evo Base Configuration firmware is free software: |
||
9 | you can redistribute it and/or modify it under the terms of |
||
10 | the GNU General Public License as published by |
||
11 | the Free Software Foundation, either version 3 of the License, or |
||
12 | (at your option) any later version. |
||
13 | |||
14 | ZX-Evo Base Configuration firmware is distributed in the hope that |
||
15 | it will be useful, but WITHOUT ANY WARRANTY; without even |
||
16 | the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||
17 | See the GNU General Public License for more details. |
||
18 | |||
19 | You should have received a copy of the GNU General Public License |
||
20 | along with ZX-Evo Base Configuration firmware. |
||
21 | If not, see <http://www.gnu.org/licenses/>. |
||
22 | */ |
||
23 | |||
200 | lvd | 24 | `include "../include/tune.v" |
25 | |||
67 | lvd | 26 | module zkbdmus( |
27 | |||
28 | input wire fclk, |
||
29 | input wire rst_n, |
||
30 | |||
31 | |||
32 | input wire [39:0] kbd_in, // key bits |
||
33 | input wire kbd_stb, // and strobe |
||
34 | |||
35 | input wire [ 7:0] mus_in, |
||
36 | input wire mus_xstb, |
||
37 | input wire mus_ystb, |
||
38 | input wire mus_btnstb, |
||
110 | lvd | 39 | input wire kj_stb, |
67 | lvd | 40 | |
41 | |||
70 | lvd | 42 | input wire [7:0] zah, |
67 | lvd | 43 | |
44 | output wire [ 4:0] kbd_data, |
||
110 | lvd | 45 | output wire [ 7:0] mus_data, |
46 | output reg [ 4:0] kj_data |
||
67 | lvd | 47 | ); |
48 | |||
49 | reg [39:0] kbd; |
||
50 | reg [ 7:0] musx,musy,musbtn; |
||
51 | |||
52 | wire [4:0] keys [0:7]; // key matrix |
||
53 | |||
70 | lvd | 54 | reg [4:0] kout; // wire AND |
67 | lvd | 55 | |
56 | |||
200 | lvd | 57 | `ifdef SIMULATE |
58 | initial |
||
59 | begin |
||
60 | // force kbd_data = 5'b11111; |
||
61 | force mus_data = 8'hFF; |
||
62 | force kj_data = 5'b00000; |
||
67 | lvd | 63 | |
200 | lvd | 64 | kbd = 40'd0; |
65 | end |
||
66 | `endif |
||
67 | |||
68 | |||
67 | lvd | 69 | // store data from slavespi |
70 | // |
||
71 | always @(posedge fclk) |
||
72 | begin |
||
73 | if( kbd_stb ) |
||
74 | kbd <= kbd_in; |
||
75 | |||
76 | if( mus_xstb ) |
||
77 | musx <= mus_in; |
||
78 | |||
79 | if( mus_ystb ) |
||
80 | musy <= mus_in; |
||
81 | |||
82 | if( mus_btnstb ) |
||
83 | musbtn <= mus_in; |
||
110 | lvd | 84 | |
85 | if( kj_stb ) |
||
86 | kj_data <= mus_in[4:0]; |
||
67 | lvd | 87 | end |
88 | |||
89 | |||
90 | // make keys |
||
91 | // |
||
200 | lvd | 92 | assign keys[0]={kbd[00],kbd[08],kbd[16],kbd[24],kbd[32]};// v c x z CS |
93 | assign keys[1]={kbd[01],kbd[09],kbd[17],kbd[25],kbd[33]};// g f d s a |
||
94 | assign keys[2]={kbd[02],kbd[10],kbd[18],kbd[26],kbd[34]};// t r e w q |
||
95 | assign keys[3]={kbd[03],kbd[11],kbd[19],kbd[27],kbd[35]};// 5 4 3 2 1 |
||
96 | assign keys[4]={kbd[04],kbd[12],kbd[20],kbd[28],kbd[36]};// 6 7 8 9 0 |
||
97 | assign keys[5]={kbd[05],kbd[13],kbd[21],kbd[29],kbd[37]};// y u i o p |
||
98 | assign keys[6]={kbd[06],kbd[14],kbd[22],kbd[30],kbd[38]};// h j k l EN |
||
99 | assign keys[7]={kbd[07],kbd[15],kbd[23],kbd[31],kbd[39]};// b n m SS SP |
||
67 | lvd | 100 | // |
70 | lvd | 101 | always @* |
102 | begin |
||
103 | kout = 5'b11111; |
||
104 | |||
105 | kout = kout & ({5{zah[0]}} | (~keys[0])); |
||
106 | kout = kout & ({5{zah[1]}} | (~keys[1])); |
||
107 | kout = kout & ({5{zah[2]}} | (~keys[2])); |
||
108 | kout = kout & ({5{zah[3]}} | (~keys[3])); |
||
109 | kout = kout & ({5{zah[4]}} | (~keys[4])); |
||
110 | kout = kout & ({5{zah[5]}} | (~keys[5])); |
||
111 | kout = kout & ({5{zah[6]}} | (~keys[6])); |
||
112 | kout = kout & ({5{zah[7]}} | (~keys[7])); |
||
113 | end |
||
67 | lvd | 114 | // |
115 | assign kbd_data = kout; |
||
116 | |||
117 | // make mouse |
||
110 | lvd | 118 | // FADF - buttons, FBDF - x, FFDF - y |
67 | lvd | 119 | // |
70 | lvd | 120 | assign mus_data = zah[0] ? ( zah[2] ? musy : musx ) : musbtn; |
67 | lvd | 121 | |
122 | |||
123 | |||
124 | endmodule |
||
125 |