Subversion Repositories pentevo

Rev

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