//------------------------------------------------------------------- // // PLAYSTATION CONTROLLER-FPGA ARCADE GAME INTERFACE TOP // // Version : 2.01 // // Copyright(c) 2003 - 2004 Katsumi Degawa , All rights reserved // // Important ! // // This program is freeware for non-commercial use. // An author does no guarantee about this program. // You can use this under your own risk. // // 2004-4-29 fpga mooncrst use k .degawa //------------------------------------------------------------------- `timescale 100ps/10ps `include "src/mc_conf.v" module fpga_arcade_if( CLK_18M432, I_RSTn, psCLK, psSEL, psTXD, psRXD, ps_PSW, I_VIB_SW ); input CLK_18M432,I_RSTn; input I_VIB_SW; input psRXD; output psCLK,psSEL,psTXD; output [8:0]ps_PSW; reg [5:0]clk_reg; wire CLK_288K; assign CLK_288K = clk_reg[5]; always@(posedge CLK_18M432) clk_reg <= clk_reg+1; wire [7:0]RX_DATA_1,RX_DATA_2; wire [7:0]RX_DATA_3,RX_DATA_4; //wire [7:0]RX_DATA_5,RX_DATA_6; reg [1:0]XY_pos; assign ps_PSW[0] = 1'b1; // UP assign ps_PSW[1] = 1'b1; // DOWN assign ps_PSW[2] = XY_pos[0]; // LEFT assign ps_PSW[3] = XY_pos[1]; // RIGHT assign ps_PSW[4] = RX_DATA_2[5]; // CREDIT1 (MARU-BOTAN) assign ps_PSW[5] = RX_DATA_2[4]; // CREDIT2 (SANKAKU-BOTAN) assign ps_PSW[6] = RX_DATA_1[3]; // START 1P (START-BOTAN) assign ps_PSW[7] = RX_DATA_1[0]; // START 2P (SELCT-BOTAN) assign ps_PSW[8] = RX_DATA_1[6]; always@(posedge CLK_288K) begin if(RX_DATA_3<=8'h5F&&RX_DATA_3>=8'h00) XY_pos <= 2'b10; else if(RX_DATA_3<=8'hFF&&RX_DATA_3>=8'hA0) XY_pos <= 2'b01; else XY_pos <= 2'b11; end // Dualshock `ifdef Dualshock psPAD_top pspad( .I_CLK250K(CLK_288K), .I_RSTn(I_RSTn), .I_VIB_SW({I_VIB_SW,1'b0}), .O_psCLK(psCLK), .O_psSEL(psSEL), .O_psTXD(psTXD), .I_psRXD(psRXD), .O_RXD_1(RX_DATA_1), .O_RXD_2(RX_DATA_2), .O_RXD_3(RX_DATA_3), .O_RXD_4(RX_DATA_4), .O_RXD_5(), .O_RXD_6(), .I_CONF_SW(), .I_MODE_SW(), .I_MODE_EN(), .I_VIB_DAT(8'hFF) ); `else psPAD_top pspad( .I_CLK250K(CLK_288K), .I_RSTn(I_RSTn), .I_VIB_SW(I_VIB_SW), .O_psCLK(psCLK), .O_psSEL(psSEL), .O_psTXD(psTXD), .I_psRXD(psRXD), .O_RXD_1(RX_DATA_1), .O_RXD_2(RX_DATA_2), .O_RXD_3(RX_DATA_3), .O_RXD_4(RX_DATA_4), .O_RXD_5(), .O_RXD_6(), .I_CONF_SW(), .I_MODE_SW(), .I_MODE_EN(), .I_VIB_DAT() ); `endif endmodule