OpenCores
URL https://opencores.org/ocsvn/z80soc/z80soc/trunk

Subversion Repositories z80soc

[/] [z80soc/] [tags/] [z80soc05b/] [rtl/] [VHDL/] [PS2/] [ps2bkd.vhd] - Blame information for rev 33

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 rrred
library IEEE;
2
use IEEE.std_logic_1164.all;
3
 
4
entity  ps2kbd is
5
        PORT (
6
                        keyboard_clk    : inout std_logic;
7
                        keyboard_data   : inout std_logic;
8
                        clock                   : in std_logic;
9
                        reset                   : in std_logic;
10
                        read                    : in std_logic;
11
                        scan_ready              : out std_logic;
12
                        ps2_ascii_code  : out std_logic_vector(7 downto 0));
13
end ps2kbd;
14
 
15
architecture rtl of ps2kbd is
16
 
17 6 rrred
signal scan_code_sig            : std_logic_vector(7 downto 0);
18
signal scode_shf_sig            : std_logic_vector(11 downto 0);
19 2 rrred
 
20
begin
21
 
22 6 rrred
scode_shf_sig <= "0000" & scan_code_sig;
23
 
24
ps2_ascii_decode : process(scode_shf_sig)
25 2 rrred
begin
26 6 rrred
  case scode_shf_sig is
27
    when x"066" => ps2_ascii_code <= x"08";  -- Backspace ("backspace" key)
28
    when x"00d" => ps2_ascii_code <= x"09";  -- Horizontal Tab
29
    when x"05a" => ps2_ascii_code <= x"0d";  -- Carriage return ("enter" key)
30
    when x"076" => ps2_ascii_code <= x"1b";  -- Escape ("esc" key)
31
    when x"029" => ps2_ascii_code <= x"20";  -- Space
32
    when x"116" => ps2_ascii_code <= x"21";  -- !
33
    when x"152" => ps2_ascii_code <= x"22";  -- "
34
    when x"126" => ps2_ascii_code <= x"23";  -- #
35
    when x"125" => ps2_ascii_code <= x"24";  -- $
36
    when x"12e" => ps2_ascii_code <= x"25";  --
37
    when x"13d" => ps2_ascii_code <= x"26";  --
38
    when x"052" => ps2_ascii_code <= x"27";  --
39
    when x"146" => ps2_ascii_code <= x"28";  --
40
    when x"145" => ps2_ascii_code <= x"29";  --
41
    when x"13e" => ps2_ascii_code <= x"2a";  -- *
42
    when x"155" => ps2_ascii_code <= x"2b";  -- +
43
    when x"041" => ps2_ascii_code <= x"2c";  -- ,
44
    when x"04e" => ps2_ascii_code <= x"2d";  -- -
45
    when x"049" => ps2_ascii_code <= x"2e";  -- .
46
    when x"04a" => ps2_ascii_code <= x"2f";  -- /
47
    when x"045" => ps2_ascii_code <= x"30";  -- 0
48
    when x"016" => ps2_ascii_code <= x"31";  -- 1
49
    when x"01e" => ps2_ascii_code <= x"32";  -- 2
50
    when x"026" => ps2_ascii_code <= x"33";  -- 3
51
    when x"025" => ps2_ascii_code <= x"34";  -- 4
52
    when x"02e" => ps2_ascii_code <= x"35";  -- 5
53
    when x"036" => ps2_ascii_code <= x"36";  -- 6
54
    when x"03d" => ps2_ascii_code <= x"37";  -- 7
55
    when x"03e" => ps2_ascii_code <= x"38";  -- 8
56
    when x"046" => ps2_ascii_code <= x"39";  -- 9
57
    when x"14c" => ps2_ascii_code <= x"3a";  -- :
58
    when x"04c" => ps2_ascii_code <= x"3b";  -- ;
59
    when x"141" => ps2_ascii_code <= x"3c";  -- <
60
    when x"055" => ps2_ascii_code <= x"3d";  -- =
61
    when x"149" => ps2_ascii_code <= x"3e";  -- >
62
    when x"14a" => ps2_ascii_code <= x"3f";  -- ?
63
    when x"11e" => ps2_ascii_code <= x"40";  -- @
64
    when x"01c" => ps2_ascii_code <= x"41";  -- A
65
    when x"032" => ps2_ascii_code <= x"42";  -- B
66
    when x"021" => ps2_ascii_code <= x"43";  -- C
67
    when x"023" => ps2_ascii_code <= x"44";  -- D
68
    when x"024" => ps2_ascii_code <= x"45";  -- E
69
    when x"02b" => ps2_ascii_code <= x"46";  -- F
70
    when x"034" => ps2_ascii_code <= x"47";  -- G
71
    when x"033" => ps2_ascii_code <= x"48";  -- H
72
    when x"043" => ps2_ascii_code <= x"49";  -- I
73
    when x"03b" => ps2_ascii_code <= x"4a";  -- J
74
    when x"042" => ps2_ascii_code <= x"4b";  -- K
75
    when x"04b" => ps2_ascii_code <= x"4c";  -- L
76
    when x"03a" => ps2_ascii_code <= x"4d";  -- M
77
    when x"031" => ps2_ascii_code <= x"4e";  -- N
78
    when x"044" => ps2_ascii_code <= x"4f";  -- O
79
    when x"04d" => ps2_ascii_code <= x"50";  -- P
80
    when x"015" => ps2_ascii_code <= x"51";  -- Q
81
    when x"02d" => ps2_ascii_code <= x"52";  -- R
82
    when x"01b" => ps2_ascii_code <= x"53";  -- S
83
    when x"02c" => ps2_ascii_code <= x"54";  -- T
84
    when x"03c" => ps2_ascii_code <= x"55";  -- U
85
    when x"02a" => ps2_ascii_code <= x"56";  -- V
86
    when x"01d" => ps2_ascii_code <= x"57";  -- W
87
    when x"022" => ps2_ascii_code <= x"58";  -- X
88
    when x"035" => ps2_ascii_code <= x"59";  -- Y
89
    when x"01a" => ps2_ascii_code <= x"5a";  -- Z
90
    when x"054" => ps2_ascii_code <= x"5b";  -- [
91
    when x"05d" => ps2_ascii_code <= x"5c";  -- \
92
    when x"05b" => ps2_ascii_code <= x"5d";  -- ]
93
    when x"136" => ps2_ascii_code <= x"5e";  -- ^
94
    when x"14e" => ps2_ascii_code <= x"5f";  -- _    
95
    when x"00e" => ps2_ascii_code <= x"60";  -- `
96
    when x"11c" => ps2_ascii_code <= x"61";  -- a
97
    when x"132" => ps2_ascii_code <= x"62";  -- b
98
    when x"121" => ps2_ascii_code <= x"63";  -- c
99
    when x"123" => ps2_ascii_code <= x"64";  -- d
100
    when x"124" => ps2_ascii_code <= x"65";  -- e
101
    when x"12b" => ps2_ascii_code <= x"66";  -- f
102
    when x"134" => ps2_ascii_code <= x"67";  -- g
103
    when x"133" => ps2_ascii_code <= x"68";  -- h
104
    when x"143" => ps2_ascii_code <= x"69";  -- i
105
    when x"13b" => ps2_ascii_code <= x"6a";  -- j
106
    when x"142" => ps2_ascii_code <= x"6b";  -- k
107
    when x"14b" => ps2_ascii_code <= x"6c";  -- l
108
    when x"13a" => ps2_ascii_code <= x"6d";  -- m
109
    when x"131" => ps2_ascii_code <= x"6e";  -- n
110
    when x"144" => ps2_ascii_code <= x"6f";  -- o
111
    when x"14d" => ps2_ascii_code <= x"70";  -- p
112
    when x"115" => ps2_ascii_code <= x"71";  -- q
113
    when x"12d" => ps2_ascii_code <= x"72";  -- r
114
    when x"11b" => ps2_ascii_code <= x"73";  -- s
115
    when x"12c" => ps2_ascii_code <= x"74";  -- t
116
    when x"13c" => ps2_ascii_code <= x"75";  -- u
117
    when x"12a" => ps2_ascii_code <= x"76";  -- v
118
    when x"11d" => ps2_ascii_code <= x"77";  -- w
119
    when x"122" => ps2_ascii_code <= x"78";  -- x
120
    when x"135" => ps2_ascii_code <= x"79";  -- y
121
    when x"11a" => ps2_ascii_code <= x"7a";  -- z
122
    when x"154" => ps2_ascii_code <= x"7b";  -- {
123
    when x"15d" => ps2_ascii_code <= x"7c";  -- |
124
    when x"15b" => ps2_ascii_code <= x"7d";  -- }
125
    when x"10e" => ps2_ascii_code <= x"7e";  -- ~
126
    when x"071" => ps2_ascii_code <= x"7f";  -- (Delete OR DEL on numeric keypad)
127
    when x"171" => ps2_ascii_code <= x"7f";  -- (Delete OR DEL on numeric keypad)
128 2 rrred
    when others => ps2_ascii_code <= x"FF";  -- keys not mapped
129
  end case;
130
end process;
131
 
132
kbd_inst: work.keyboard port map (
133
        keyboard_clk    => keyboard_clk,
134
        keyboard_data   => keyboard_data,
135
        clock                   => clock,
136
        reset                   => reset,
137
        read                    => read,
138
        scan_ready              => scan_ready,
139 6 rrred
        scan_code               => scan_code_sig
140 2 rrred
);
141
 
142
end;
143
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.