Skip to content

Commit b657bd9

Browse files
committed
receive HID from firmware
1 parent 40e000c commit b657bd9

File tree

2 files changed

+23
-28
lines changed

2 files changed

+23
-28
lines changed

src/gbatang_top.sv

+4-1
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,8 @@ controller_ds2 ds2 (
425425
wire [11:0] joy_btns_gba = joy_btns;
426426
`endif
427427

428+
wire [11:0] hid1, hid2;
429+
428430
gba_joypad joypad (
429431
.mclk(clk16), /*.fclk(clk33),*/ `GB_BUS_PORTS_INST, .IRP_Joypad(IRP_Joypad),
430432
.KeyA(joy_btns_gba[8]), .KeyB(joy_btns_gba[0]), .KeySelect(joy_btns_gba[2]), .KeyStart(joy_btns_gba[3]),
@@ -444,7 +446,7 @@ wire overlay;
444446
wire [10:0] overlay_x;
445447
wire [14:0] overlay_color;
446448
wire [9:0] overlay_y;
447-
assign joy_btns_gba = overlay ? 0 : joy_btns;
449+
assign joy_btns_gba = overlay ? 0 : joy_btns | hid1 | hid2;
448450

449451
gba2hdmi video (
450452
.clk(clk50), .resetn(resetn),
@@ -473,6 +475,7 @@ iosys_bl616 #(.CORE_ID(3), .COLOR_LOGO(15'b01111_01100_10101), .FREQ(16_650_000)
473475

474476
.overlay(overlay), .overlay_x(overlay_x), .overlay_y(overlay_y), .overlay_color(overlay_color),
475477
.joy1(joy_btns), .joy2(12'b0),
478+
.hid1(hid1), .hid2(hid2),
476479

477480
`ifdef TEST_LOADER
478481
.rom_loading(), .rom_do(), .rom_do_valid(),

src/iosys/iosys_bl616.v

+19-27
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ module iosys_bl616 #(
2323
input [7:0] overlay_x, // 0-255
2424
input [7:0] overlay_y, // 0-223
2525
output [14:0] overlay_color, // BGR5
26-
input [11:0] joy1, // joystick 1: (R L X A RT LT DN UP START SELECT Y B)
27-
input [11:0] joy2, // joystick 2
26+
input [11:0] joy1, // DS2/SNES joystick 1: (R L X A RT LT DN UP START SELECT Y B)
27+
input [11:0] joy2, // DS2/SNES joystick 2
28+
output reg [15:0] hid1, // USB HID joystick 1
29+
output reg [15:0] hid2, // USB HID joystick 2
2830

2931
// ROM loading interface
3032
output reg [7:0] rom_loading, // 0-to-1 loading starts, 1-to-0 loading is finished
@@ -87,29 +89,6 @@ async_transmitter #(
8789
);
8890
assign tx_ready = ~tx_busy;
8991

90-
// uart_rx_fractional #(
91-
// .DIV_NUM(CLK_FREQ/1000),
92-
// .DIV_DEN(BAUD_RATE/1000)
93-
// ) uart_receiver (
94-
// .clk(clk),
95-
// .resetn(resetn),
96-
// .rx(uart_rx),
97-
// .data(rx_data),
98-
// .valid(rx_valid)
99-
// );
100-
101-
// uart_tx_fractional #(
102-
// .DIV_NUM(CLK_FREQ/1000),
103-
// .DIV_DEN(BAUD_RATE/1000)
104-
// ) uart_transmitter (
105-
// .clk(clk),
106-
// .resetn(resetn),
107-
// .tx(uart_tx),
108-
// .data(tx_data),
109-
// .valid(tx_valid),
110-
// .ready(tx_ready)
111-
// );
112-
11392
// Command processing state machine
11493
localparam RECV_IDLE = 0; // waiting for command
11594
localparam RECV_PARAM = 1; // receiving parameters
@@ -148,9 +127,10 @@ reg response_ack;
148127
// 0x06 loading_state[7:0] set loading state (rom_loading)
149128
// 0x07 len[23:0] <data> load len (MSB-first) bytes of data to rom_do
150129
// 0x08 x[7:0] turn overlay on/off
130+
// 0x09 hid1[7:0] hid1[15:8] hid2[7:0] hid2[15:8] Send USB HID state to FPGA
151131
//
152132
// Messages from FPGA to BL616:
153-
// 0x01 joy1[7:0] joy1[15:8] joy2[7:0] joy2[15:8] Every 20ms, send joypad state
133+
// 0x01 joy1[7:0] joy1[15:8] joy2[7:0] joy2[15:8] Every 20ms, send DS2/SNES joypad state to BL616
154134
// 0x11 core_id[7:0] send core ID
155135
// 0x22 <string> send null-terminated core config string
156136

@@ -179,7 +159,7 @@ always @(posedge clk) begin
179159
cmd_reg <= rx_data;
180160
if (rx_data == 1 || rx_data == 2)
181161
recv_state <= RECV_RESPONSE_REQ;
182-
else if (rx_data <= 8)
162+
else if (rx_data <= 9)
183163
recv_state <= RECV_PARAM;
184164
data_cnt <= 0;
185165
end
@@ -239,6 +219,18 @@ always @(posedge clk) begin
239219
overlay_reg <= rx_data[0];
240220
recv_state <= RECV_IDLE; // Single byte command
241221
end
222+
9: begin
223+
case (data_cnt)
224+
0: hid1[7:0] <= rx_data;
225+
1: hid1[15:8] <= rx_data;
226+
2: hid2[7:0] <= rx_data;
227+
3: begin
228+
hid2[15:8] <= rx_data;
229+
recv_state <= RECV_IDLE;
230+
end
231+
default: recv_state <= RECV_IDLE;
232+
endcase
233+
end
242234
default:
243235
recv_state <= RECV_IDLE;
244236
endcase

0 commit comments

Comments
 (0)