1
0
mirror of https://github.com/mist-devel/mist-board.git synced 2026-02-17 20:56:55 +00:00
Files
mist-devel.mist-board/cores/nes/mist/keyboard.v
Sebastien Delestaing 836db491ca Added Powerpad support
2016-09-22 11:17:18 +02:00

90 lines
2.0 KiB
Verilog

module keyboard
(
input clk,
input reset,
input ps2_kbd_clk,
input ps2_kbd_data,
output [7:0] joystick_0,
output [7:0] joystick_1,
output reg [11:0] powerpad
);
reg pressed;
reg e0;
wire [7:0] keyb_data;
wire keyb_valid;
// PS/2 interface
ps2_intf ps2(
clk,
!reset,
ps2_kbd_clk,
ps2_kbd_data,
// Byte-wide data interface - only valid for one clock
// so must be latched externally if required
keyb_data,
keyb_valid
);
reg joy_num;
reg [7:0] buttons;
assign joystick_0 = joy_num ? 7'b0 : buttons;
assign joystick_1 = joy_num ? buttons : 7'b0;
always @(posedge reset or posedge clk) begin
if(reset) begin
pressed <= 1'b0;
e0 <= 1'b0;
joy_num <= 1'b0;
buttons <= 8'd0;
end else begin
if (keyb_valid) begin
if (keyb_data == 8'HE0)
e0 <=1'b1;
else if (keyb_data == 8'HF0)
pressed <= 1'b0;
else begin
case({e0, keyb_data})
9'H016: if(pressed) joy_num <= 1'b0; // 1
9'H01E: if(pressed) joy_num <= 1'b1; // 2
9'H175: buttons[4] <= pressed; // arrow up
9'H172: buttons[5] <= pressed; // arrow down
9'H16B: buttons[6] <= pressed; // arrow left
9'H174: buttons[7] <= pressed; // arrow right
9'H029: buttons[0] <= pressed; // Space
9'H011: buttons[1] <= pressed; // Left Alt
9'H00d: buttons[2] <= pressed; // Tab
9'H076: buttons[3] <= pressed; // Escape
9'H024: powerpad[0] <= pressed; // E
9'H02D: powerpad[1] <= pressed; // R
9'H02C: powerpad[2] <= pressed; // T
9'H035: powerpad[3] <= pressed; // Y
9'H023: powerpad[4] <= pressed; // D
9'H02B: powerpad[5] <= pressed; // F
9'H034: powerpad[6] <= pressed; // G
9'H033: powerpad[7] <= pressed; // H
9'H021: powerpad[8] <= pressed; // C
9'H02A: powerpad[9] <= pressed; // V
9'H032: powerpad[10] <= pressed; // B
9'H031: powerpad[11] <= pressed; // N
endcase;
pressed <= 1'b1;
e0 <= 1'b0;
end
end
end
end
endmodule