@@ -23,8 +23,10 @@ module iosys_bl616 #(
23
23
input [7 :0 ] overlay_x, // 0-255
24
24
input [7 :0 ] overlay_y, // 0-223
25
25
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
28
30
29
31
// ROM loading interface
30
32
output reg [7 :0 ] rom_loading, // 0-to-1 loading starts, 1-to-0 loading is finished
@@ -87,29 +89,6 @@ async_transmitter #(
87
89
);
88
90
assign tx_ready = ~ tx_busy;
89
91
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
-
113
92
// Command processing state machine
114
93
localparam RECV_IDLE = 0 ; // waiting for command
115
94
localparam RECV_PARAM = 1 ; // receiving parameters
@@ -148,9 +127,10 @@ reg response_ack;
148
127
// 0x06 loading_state[7:0] set loading state (rom_loading)
149
128
// 0x07 len[23:0] <data> load len (MSB-first) bytes of data to rom_do
150
129
// 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
151
131
//
152
132
// 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
154
134
// 0x11 core_id[7:0] send core ID
155
135
// 0x22 <string> send null-terminated core config string
156
136
@@ -179,7 +159,7 @@ always @(posedge clk) begin
179
159
cmd_reg <= rx_data;
180
160
if (rx_data == 1 || rx_data == 2 )
181
161
recv_state <= RECV_RESPONSE_REQ;
182
- else if (rx_data <= 8 )
162
+ else if (rx_data <= 9 )
183
163
recv_state <= RECV_PARAM;
184
164
data_cnt <= 0 ;
185
165
end
@@ -239,6 +219,18 @@ always @(posedge clk) begin
239
219
overlay_reg <= rx_data[0 ];
240
220
recv_state <= RECV_IDLE; // Single byte command
241
221
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
242
234
default :
243
235
recv_state <= RECV_IDLE;
244
236
endcase
0 commit comments