// https://ru.wikipedia.org/wiki/Скан-код
module ps2at2ascii
(
    input  wire [7:0] at,
    output reg  [7:0] xt
);

always @(*) begin

    case (at)

        /* A   */ 8'h1C: xt = 8'h41;
        /* B   */ 8'h32: xt = 8'h42;
        /* C   */ 8'h21: xt = 8'h43;
        /* D   */ 8'h23: xt = 8'h44;
        /* E   */ 8'h24: xt = 8'h45;
        /* F   */ 8'h2B: xt = 8'h46;
        /* G   */ 8'h34: xt = 8'h47;
        /* H   */ 8'h33: xt = 8'h48;
        /* I   */ 8'h43: xt = 8'h49;
        /* J   */ 8'h3B: xt = 8'h4A;
        /* K   */ 8'h42: xt = 8'h4B;
        /* L   */ 8'h4B: xt = 8'h4C;
        /* M   */ 8'h3A: xt = 8'h4D;
        /* N   */ 8'h31: xt = 8'h4E;
        /* O   */ 8'h44: xt = 8'h4F;
        /* P   */ 8'h4D: xt = 8'h50;
        /* Q   */ 8'h15: xt = 8'h51;
        /* R   */ 8'h2D: xt = 8'h52;
        /* S   */ 8'h1B: xt = 8'h53;
        /* T   */ 8'h2C: xt = 8'h54;
        /* U   */ 8'h3C: xt = 8'h55;
        /* V   */ 8'h2A: xt = 8'h56;
        /* W   */ 8'h1D: xt = 8'h57;
        /* X   */ 8'h22: xt = 8'h58;
        /* Y   */ 8'h35: xt = 8'h59;
        /* Z   */ 8'h1A: xt = 8'h5A;

        /* 0   */ 8'h45: xt = 8'h30;
        /* 1   */ 8'h16: xt = 8'h31;
        /* 2   */ 8'h1E: xt = 8'h32;
        /* 3   */ 8'h26: xt = 8'h33;
        /* 4   */ 8'h25: xt = 8'h34;
        /* 5   */ 8'h2E: xt = 8'h35;
        /* 6   */ 8'h36: xt = 8'h36;
        /* 7   */ 8'h3D: xt = 8'h37;
        /* 8   */ 8'h3E: xt = 8'h38;
        /* 9   */ 8'h46: xt = 8'h39;

        /* `   */ 8'h0E: xt = 8'h60;
        /* -   */ 8'h4E: xt = 8'h2D;
        /* =   */ 8'h55: xt = 8'h3D;
        /* \   */ 8'h5D: xt = 8'h5C;
        /* [   */ 8'h54: xt = 8'h5B;
        /* ]   */ 8'h5B: xt = 8'h5D;
        /* ;   */ 8'h4C: xt = 8'h3B;
        /* '   */ 8'h52: xt = 8'h27;
        /* ,   */ 8'h41: xt = 8'h2C;
        /* .   */ 8'h49: xt = 8'h2E;
        /* /   */ 8'h4A: xt = 8'h2F;
        /* SPC */ 8'h29: xt = 8'h20; /* SPACE */

        // Специальные кнопки
        /* F1  */ 8'h05: xt = 8'h01;
        /* F2  */ 8'h06: xt = 8'h02;
        /* F3  */ 8'h04: xt = 8'h03;
        /* F4  */ 8'h0C: xt = 8'h04;
        /* F5  */ 8'h03: xt = 8'h05;
        /* F6  */ 8'h0B: xt = 8'h06;
        /* F7  */ 8'h83: xt = 8'h07;
        /* BS  */ 8'h66: xt = 8'h08; /* BACKSPACE */
        /* TAB */ 8'h0D: xt = 8'h09; /* TAB */
        /* F8  */ 8'h0A: xt = 8'h0A;
        /* F9  */ 8'h01: xt = 8'h0B;
        /* F10 */ 8'h09: xt = 8'h0C;
        /* ENT */ 8'h5A: xt = 8'h0D; /* ENTER */
        /* F11 */ 8'h78: xt = 8'h0E;
        /* F12 */ 8'h07: xt = 8'h0F;

        /* CAP */ 8'h58: xt = 8'h10; /* CAPS LOCK */
        /* LSH */ 8'h12: xt = 8'h11; /* LEFT SHIFT */
        /* LCT */ 8'h14: xt = 8'h12; /* LEFT CTRL */
        /* LAT */ 8'h11: xt = 8'h13; /* LEFT ALT */
        /* LWI */ 8'h1F: xt = 8'h14; /* LEFT WIN */
        /* RSH */ 8'h59: xt = 8'h15; /* RIGHT SHIFT */
        /* RWI */ 8'h27: xt = 8'h16; /* RIGHT WIN */
        /* MNU */ 8'h2F: xt = 8'h17; /* MENU */
        /* SCL */ 8'h7E: xt = 8'h18; /* SCROLL LOCK */
        /* NUM */ 8'h77: xt = 8'h19;
        /* ESC */ 8'h76: xt = 8'h1B;

        /* Цифровая клавиатура */
        /* *   */ 8'h7C: xt = 8'h2A;
        /* -   */ 8'h7B: xt = 8'h2D;
        /* +   */ 8'h79: xt = 8'h2B;
        /* .   */ 8'h71: xt = 8'h2E; /* Del */
        /* 0   */ 8'h70: xt = 8'h30; /* Ins */
        /* 1   */ 8'h69: xt = 8'h31; /* End */
        /* 2   */ 8'h72: xt = 8'h32;
        /* 3   */ 8'h7A: xt = 8'h33; /* PgDn */
        /* 4   */ 8'h6B: xt = 8'h34;
        /* 5   */ 8'h73: xt = 8'h35;
        /* 6   */ 8'h74: xt = 8'h36;
        /* 7   */ 8'h6C: xt = 8'h37; /* Home */
        /* 8   */ 8'h75: xt = 8'h38;
        /* 9   */ 8'h7D: xt = 8'h39; /* PgUp */

        /* F0 (Unpressed Signal), E0, E1, ... */
        default: xt = at;

    endcase

end

endmodule
11 авг, 2020
© 2007-2022 Правда в том, что Нифёдов закусывает над землей