mirror of
https://github.com/Gehstock/Mist_FPGA.git
synced 2026-01-20 01:34:38 +00:00
Merge pull request #75 from gyurco/mcrcontrols
Some controls update, fix Pooyan, add DIP switches to Konami Classic
This commit is contained in:
commit
dcb7e393b7
3
Arcade_MiST/.gitignore
vendored
3
Arcade_MiST/.gitignore
vendored
@ -1,4 +1,5 @@
|
||||
Test
|
||||
*.rom
|
||||
*.arc
|
||||
|
||||
*.ROM
|
||||
*.ARC
|
||||
|
||||
@ -41,6 +41,11 @@ localparam CONF_STR = {
|
||||
"V,v1.0.",`BUILD_DATE
|
||||
};
|
||||
|
||||
wire [1:0] scanlines = status[4:3];
|
||||
wire joyswap = status[6];
|
||||
wire rotate = 0;
|
||||
wire blend = status[5];
|
||||
|
||||
assign LED = ~ioctl_downl;
|
||||
assign SDRAM_CLK = clk_sd;
|
||||
assign SDRAM_CKE = 1;
|
||||
@ -59,15 +64,37 @@ pll_mist pll(
|
||||
wire [31:0] status;
|
||||
wire [1:0] buttons;
|
||||
wire [1:0] switches;
|
||||
wire [7:0] joy_0;
|
||||
wire [7:0] joy_1;
|
||||
wire [7:0] joystick_0;
|
||||
wire [7:0] joystick_1;
|
||||
wire scandoublerD;
|
||||
wire ypbpr;
|
||||
wire [15:0] audio;
|
||||
wire hs, vs, hb, vb;
|
||||
wire blankn = ~(hb | vb);
|
||||
wire [2:0] g, r;
|
||||
wire [1:0] b;
|
||||
wire no_csync;
|
||||
wire key_pressed;
|
||||
wire [7:0] key_code;
|
||||
wire key_strobe;
|
||||
|
||||
user_io #(
|
||||
.STRLEN(($size(CONF_STR)>>3)))
|
||||
user_io(
|
||||
.clk_sys (clk_sys ),
|
||||
.conf_str (CONF_STR ),
|
||||
.SPI_CLK (SPI_SCK ),
|
||||
.SPI_SS_IO (CONF_DATA0 ),
|
||||
.SPI_MISO (SPI_DO ),
|
||||
.SPI_MOSI (SPI_DI ),
|
||||
.buttons (buttons ),
|
||||
.switches (switches ),
|
||||
.scandoubler_disable (scandoublerD ),
|
||||
.ypbpr (ypbpr ),
|
||||
.no_csync (no_csync ),
|
||||
.key_strobe (key_strobe ),
|
||||
.key_pressed (key_pressed ),
|
||||
.key_code (key_code ),
|
||||
.joystick_0 (joystick_0 ),
|
||||
.joystick_1 (joystick_1 ),
|
||||
.status (status )
|
||||
);
|
||||
|
||||
wire [15:0] rom_addr;
|
||||
wire [15:0] rom_do;
|
||||
wire [15:0] gfx_addr;
|
||||
@ -144,7 +171,12 @@ always @(posedge clk_sd) begin
|
||||
reset <= status[0] | buttons[1] | ~rom_loaded;
|
||||
end
|
||||
|
||||
wire [10:0] INP = ~{status[2],1'b1, btn_coin, m_left2, m_right2, m_down2, m_fire2, m_left1, m_right1, m_down1, m_fire1};
|
||||
wire [10:0] INP = ~{status[2],1'b1, m_coin1 | m_coin2, m_left2, m_right2, m_down2, m_fire2A, m_left, m_right, m_down, m_fireA};
|
||||
wire [15:0] audio;
|
||||
wire hs, vs, hb, vb;
|
||||
wire blankn = ~(hb | vb);
|
||||
wire [2:0] g, r;
|
||||
wire [1:0] b;
|
||||
|
||||
FPGA_ATetris FPGA_ATetris(
|
||||
.MCLK(clk_sys), // 14.318MHz
|
||||
@ -200,33 +232,13 @@ mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
|
||||
.VGA_VS ( VGA_VS ),
|
||||
.VGA_HS ( VGA_HS ),
|
||||
.ce_divider ( 1'b1 ),
|
||||
.blend ( status[5] ),
|
||||
.blend ( blend ),
|
||||
.no_csync ( no_csync ),
|
||||
.scandoubler_disable(scandoublerD ),
|
||||
.scanlines ( status[4:3] ),
|
||||
.scanlines ( scanlines ),
|
||||
.ypbpr ( ypbpr )
|
||||
);
|
||||
|
||||
user_io #(
|
||||
.STRLEN(($size(CONF_STR)>>3)))
|
||||
user_io(
|
||||
.clk_sys (clk_sys ),
|
||||
.conf_str (CONF_STR ),
|
||||
.SPI_CLK (SPI_SCK ),
|
||||
.SPI_SS_IO (CONF_DATA0 ),
|
||||
.SPI_MISO (SPI_DO ),
|
||||
.SPI_MOSI (SPI_DI ),
|
||||
.buttons (buttons ),
|
||||
.switches (switches ),
|
||||
.scandoubler_disable (scandoublerD ),
|
||||
.ypbpr (ypbpr ),
|
||||
.key_strobe (key_strobe ),
|
||||
.key_pressed (key_pressed ),
|
||||
.key_code (key_code ),
|
||||
.joystick_0 (joy_0 ),
|
||||
.joystick_1 (joy_1 ),
|
||||
.status (status )
|
||||
);
|
||||
|
||||
dac #(
|
||||
.C_bits(16))
|
||||
dac_l(
|
||||
@ -236,49 +248,24 @@ dac_l(
|
||||
.dac_o(AUDIO_L)
|
||||
);
|
||||
|
||||
wire [7:0] joystick_0 = status[6] ? joy_1 : joy_0;
|
||||
wire [7:0] joystick_1 = status[6] ? joy_0 : joy_1;
|
||||
wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD;
|
||||
wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D;
|
||||
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
|
||||
|
||||
wire m_down1 = btn_down | joystick_0[2];
|
||||
wire m_left1 = btn_left | joystick_0[1];
|
||||
wire m_right1 = btn_right | joystick_0[0];
|
||||
wire m_fire1 = btn_fire1 | joystick_0[4];
|
||||
|
||||
wire m_down2 = joystick_1[2];
|
||||
wire m_left2 = joystick_1[1];
|
||||
wire m_right2 = joystick_1[0];
|
||||
wire m_fire2 = joystick_1[4];
|
||||
|
||||
|
||||
//reg btn_one_player = 0;
|
||||
//reg btn_two_players = 0;
|
||||
reg btn_left = 0;
|
||||
reg btn_right = 0;
|
||||
reg btn_down = 0;
|
||||
//reg btn_up = 0;
|
||||
reg btn_fire1 = 0;
|
||||
//reg btn_fire2 = 0;
|
||||
//reg btn_fire3 = 0;
|
||||
reg btn_coin = 0;
|
||||
wire key_pressed;
|
||||
wire [7:0] key_code;
|
||||
wire key_strobe;
|
||||
|
||||
always @(posedge clk_sys) begin
|
||||
if(key_strobe) begin
|
||||
case(key_code)
|
||||
// 'h75: btn_up <= key_pressed; // up
|
||||
'h72: btn_down <= key_pressed; // down
|
||||
'h6B: btn_left <= key_pressed; // left
|
||||
'h74: btn_right <= key_pressed; // right
|
||||
'h76: btn_coin <= key_pressed; // ESC
|
||||
// 'h05: btn_one_player <= key_pressed; // F1
|
||||
// 'h06: btn_two_players <= key_pressed; // F2
|
||||
// 'h14: btn_fire3 <= key_pressed; // ctrl
|
||||
// 'h11: btn_fire2 <= key_pressed; // alt
|
||||
'h29: btn_fire1 <= key_pressed; // Space
|
||||
endcase
|
||||
end
|
||||
end
|
||||
arcade_inputs inputs (
|
||||
.clk ( clk_sys ),
|
||||
.key_strobe ( key_strobe ),
|
||||
.key_pressed ( key_pressed ),
|
||||
.key_code ( key_code ),
|
||||
.joystick_0 ( joystick_0 ),
|
||||
.joystick_1 ( joystick_1 ),
|
||||
.rotate ( rotate ),
|
||||
.orientation ( 2'b10 ),
|
||||
.joyswap ( joyswap ),
|
||||
.oneplayer ( 1'b0 ),
|
||||
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
|
||||
.player1 ( {m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
|
||||
.player2 ( {m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
|
||||
);
|
||||
|
||||
endmodule
|
||||
|
||||
@ -35,6 +35,10 @@ localparam CONF_STR = {
|
||||
"O2,Rotate Controls,Off,On;",
|
||||
"O34,Scanlines,Off,25%,50%,75%;",
|
||||
"O5,Blend,Off,On;",
|
||||
"O67,Lives,3,4,5,Unl.;",
|
||||
"O8,Bonus Life,50K 80K+,30K 70K+;",
|
||||
"O9B,Difficulty,1,2,3,4,5,6,7,8;",
|
||||
"OC,Demo Sounds,Off,On;",
|
||||
"T0,Reset;",
|
||||
"V,v1.15.",`BUILD_DATE
|
||||
};
|
||||
@ -42,6 +46,10 @@ localparam CONF_STR = {
|
||||
wire rotate = status[2];
|
||||
wire [1:0] scanlines = status[4:3];
|
||||
wire blend = status[5];
|
||||
wire [1:0] lives = status[7:6];
|
||||
wire bonus = status[8];
|
||||
wire [2:0] difficulty = status[11:9];
|
||||
wire demosnd = status[12];
|
||||
|
||||
assign LED = 1;
|
||||
assign AUDIO_R = AUDIO_L;
|
||||
@ -60,16 +68,35 @@ pll pll(
|
||||
wire [31:0] status;
|
||||
wire [1:0] buttons;
|
||||
wire [1:0] switches;
|
||||
wire [11:0] kbjoy;
|
||||
wire [7:0] joystick_0;
|
||||
wire [7:0] joystick_1;
|
||||
wire scandoublerD;
|
||||
wire ypbpr;
|
||||
wire [10:0] audio;
|
||||
wire hs, vs;
|
||||
wire blankn;
|
||||
wire [2:0] r,g;
|
||||
wire [1:0] b;
|
||||
wire no_csync;
|
||||
wire key_strobe;
|
||||
wire key_pressed;
|
||||
wire [7:0] key_code;
|
||||
|
||||
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
|
||||
.clk_sys (clock_12 ),
|
||||
.conf_str (CONF_STR ),
|
||||
.SPI_CLK (SPI_SCK ),
|
||||
.SPI_SS_IO (CONF_DATA0 ),
|
||||
.SPI_MISO (SPI_DO ),
|
||||
.SPI_MOSI (SPI_DI ),
|
||||
.buttons (buttons ),
|
||||
.switches (switches ),
|
||||
.scandoubler_disable (scandoublerD ),
|
||||
.ypbpr (ypbpr ),
|
||||
.no_csync (no_csync ),
|
||||
.key_strobe (key_strobe ),
|
||||
.key_pressed (key_pressed ),
|
||||
.key_code (key_code ),
|
||||
.joystick_0 (joystick_0 ),
|
||||
.joystick_1 (joystick_1 ),
|
||||
.status (status )
|
||||
);
|
||||
|
||||
wire [14:0] rom_addr;
|
||||
wire [15:0] rom_do;
|
||||
wire rom_rd;
|
||||
@ -78,12 +105,9 @@ wire [7:0] ioctl_index;
|
||||
wire ioctl_wr;
|
||||
wire [24:0] ioctl_addr;
|
||||
wire [7:0] ioctl_dout;
|
||||
wire key_strobe;
|
||||
wire key_pressed;
|
||||
wire [7:0] key_code;
|
||||
|
||||
data_io data_io(
|
||||
.clk_sys ( clock_48 ),
|
||||
.clk_sys ( clock_48 ),
|
||||
.SPI_SCK ( SPI_SCK ),
|
||||
.SPI_SS2 ( SPI_SS2 ),
|
||||
.SPI_DI ( SPI_DI ),
|
||||
@ -93,7 +117,7 @@ data_io data_io(
|
||||
.ioctl_addr ( ioctl_addr ),
|
||||
.ioctl_dout ( ioctl_dout )
|
||||
);
|
||||
|
||||
|
||||
sdram rom(
|
||||
.*,
|
||||
.init ( ~pll_locked ),
|
||||
@ -117,6 +141,12 @@ always @(posedge clock_12) begin
|
||||
reset <= status[0] | buttons[1] | ~rom_loaded;
|
||||
end
|
||||
|
||||
wire [10:0] audio;
|
||||
wire hs, vs;
|
||||
wire blankn;
|
||||
wire [2:0] r,g;
|
||||
wire [1:0] b;
|
||||
|
||||
pooyan pooyan(
|
||||
.clock_6(clock_6),
|
||||
.clock_12(clock_12),
|
||||
@ -132,8 +162,8 @@ pooyan pooyan(
|
||||
.roms_addr ( rom_addr ),
|
||||
.roms_do ( rom_do[7:0] ),
|
||||
.roms_rd ( rom_rd ),
|
||||
.dip_switch_1("11111111"),// Coinage_B / Coinage_A
|
||||
.dip_switch_2("11111011"),// Sound(8)/Difficulty(7-5)/Bonus(4)/Cocktail(3)/lives(2-1)
|
||||
.dip_switch_1(8'b11111111),// Coinage_B / Coinage_A
|
||||
.dip_switch_2(~{demosnd, difficulty, bonus, 1'b1, lives}),// Sound(8)/Difficulty(7-5)/Bonus(4)/Cocktail(3)/lives(2-1)
|
||||
.start2(m_two_players),
|
||||
.start1(m_one_player),
|
||||
.coin1(m_coin1),
|
||||
@ -149,8 +179,7 @@ pooyan pooyan(
|
||||
.up2(m_up2)
|
||||
);
|
||||
|
||||
|
||||
mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(//Wrong Colors have no Idea
|
||||
mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
|
||||
.clk_sys ( clock_48 ),
|
||||
.SPI_SCK ( SPI_SCK ),
|
||||
.SPI_SS3 ( SPI_SS3 ),
|
||||
@ -169,32 +198,14 @@ mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(//Wrong Colors have
|
||||
.scandoubler_disable( scandoublerD ),
|
||||
.blend ( blend ),
|
||||
.scanlines ( scanlines ),
|
||||
.ypbpr ( ypbpr )
|
||||
.ypbpr ( ypbpr ),
|
||||
.no_csync ( no_csync )
|
||||
);
|
||||
|
||||
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
|
||||
.clk_sys (clock_12 ),
|
||||
.conf_str (CONF_STR ),
|
||||
.SPI_CLK (SPI_SCK ),
|
||||
.SPI_SS_IO (CONF_DATA0 ),
|
||||
.SPI_MISO (SPI_DO ),
|
||||
.SPI_MOSI (SPI_DI ),
|
||||
.buttons (buttons ),
|
||||
.switches (switches ),
|
||||
.scandoubler_disable (scandoublerD ),
|
||||
.ypbpr (ypbpr ),
|
||||
.key_strobe (key_strobe ),
|
||||
.key_pressed (key_pressed ),
|
||||
.key_code (key_code ),
|
||||
.joystick_0 (joystick_0 ),
|
||||
.joystick_1 (joystick_1 ),
|
||||
.status (status )
|
||||
);
|
||||
|
||||
dac #(.C_bits(16))dac(
|
||||
dac #(.C_bits(11))dac(
|
||||
.clk_i(clock_14),
|
||||
.res_n_i(1),
|
||||
.dac_i({audio, 5'b00000}),
|
||||
.dac_i(audio),
|
||||
.dac_o(AUDIO_L)
|
||||
);
|
||||
|
||||
@ -204,19 +215,19 @@ wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D,
|
||||
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
|
||||
|
||||
arcade_inputs inputs (
|
||||
.clk ( clock_12 ),
|
||||
.key_strobe ( key_strobe ),
|
||||
.key_pressed ( key_pressed ),
|
||||
.key_code ( key_code ),
|
||||
.joystick_0 ( joystick_0 ),
|
||||
.joystick_1 ( joystick_1 ),
|
||||
.rotate ( rotate ),
|
||||
.orientation ( 2'b11 ),
|
||||
.joyswap ( 1'b0 ),
|
||||
.oneplayer ( 1'b1 ),
|
||||
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
|
||||
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
|
||||
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
|
||||
.clk ( clock_12 ),
|
||||
.key_strobe ( key_strobe ),
|
||||
.key_pressed ( key_pressed ),
|
||||
.key_code ( key_code ),
|
||||
.joystick_0 ( joystick_0 ),
|
||||
.joystick_1 ( joystick_1 ),
|
||||
.rotate ( rotate ),
|
||||
.orientation ( 2'b11 ),
|
||||
.joyswap ( 1'b0 ),
|
||||
.oneplayer ( 1'b1 ),
|
||||
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
|
||||
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
|
||||
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
|
||||
);
|
||||
|
||||
endmodule
|
||||
|
||||
@ -59,6 +59,9 @@ localparam CONF_STR = {
|
||||
"O2,Rotate Controls,Off,On;",
|
||||
"O34,Scanlines,Off,25%,50%,75%;",
|
||||
"O5,Blend,Off,On;",
|
||||
"O6,Initial Energy,4,6;",
|
||||
"O78,Lives,3,4,5,6;",
|
||||
"O9,Stop at Junctions,Off,On;",
|
||||
"T0,Reset;",
|
||||
"V,v1.15.",`BUILD_DATE
|
||||
};
|
||||
@ -66,6 +69,9 @@ localparam CONF_STR = {
|
||||
wire rotate = status[2];
|
||||
wire [1:0] scanlines = status[4:3];
|
||||
wire blend = status[5];
|
||||
wire energy = status[6];
|
||||
wire [1:0] lives = ~status[8:7];
|
||||
wire stpatjunct = ~status[9];
|
||||
|
||||
assign LED = 1;
|
||||
assign AUDIO_R = AUDIO_L;
|
||||
@ -88,12 +94,31 @@ wire [7:0] joystick_0;
|
||||
wire [7:0] joystick_1;
|
||||
wire scandoublerD;
|
||||
wire ypbpr;
|
||||
reg [10:0] audio;
|
||||
wire hb, vb;
|
||||
wire blankn = ~(hb | vb);
|
||||
wire ce_vid;
|
||||
wire hs, vs;
|
||||
wire [4:0] r,g,b;
|
||||
wire no_csync;
|
||||
wire key_strobe;
|
||||
wire key_pressed;
|
||||
wire [7:0] key_code;
|
||||
|
||||
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
|
||||
.clk_sys (clock_12 ),
|
||||
.conf_str (CONF_STR ),
|
||||
.SPI_CLK (SPI_SCK ),
|
||||
.SPI_SS_IO (CONF_DATA0 ),
|
||||
.SPI_MISO (SPI_DO ),
|
||||
.SPI_MOSI (SPI_DI ),
|
||||
.buttons (buttons ),
|
||||
.switches (switches ),
|
||||
.scandoubler_disable (scandoublerD ),
|
||||
.ypbpr (ypbpr ),
|
||||
.no_csync (no_csync ),
|
||||
.key_strobe (key_strobe ),
|
||||
.key_pressed (key_pressed ),
|
||||
.key_code (key_code ),
|
||||
.joystick_0 (joystick_0 ),
|
||||
.joystick_1 (joystick_1 ),
|
||||
.status (status )
|
||||
);
|
||||
|
||||
wire [14:0] rom_addr;
|
||||
wire [15:0] rom_do;
|
||||
wire rom_rd;
|
||||
@ -102,12 +127,9 @@ wire [7:0] ioctl_index;
|
||||
wire ioctl_wr;
|
||||
wire [24:0] ioctl_addr;
|
||||
wire [7:0] ioctl_dout;
|
||||
wire key_strobe;
|
||||
wire key_pressed;
|
||||
wire [7:0] key_code;
|
||||
|
||||
data_io data_io(
|
||||
.clk_sys ( clock_48 ),
|
||||
.clk_sys ( clock_48 ),
|
||||
.SPI_SCK ( SPI_SCK ),
|
||||
.SPI_SS2 ( SPI_SS2 ),
|
||||
.SPI_DI ( SPI_DI ),
|
||||
@ -140,6 +162,13 @@ always @(posedge clock_12) begin
|
||||
reset <= status[0] | buttons[1] | ~rom_loaded;
|
||||
end
|
||||
|
||||
reg [10:0] audio;
|
||||
wire hb, vb;
|
||||
wire blankn = ~(hb | vb);
|
||||
wire ce_vid;
|
||||
wire hs, vs;
|
||||
wire [4:0] r,g,b;
|
||||
|
||||
power_surge power_surge(
|
||||
.clock_6(clock_6),
|
||||
.clock_12(clock_12),
|
||||
@ -156,12 +185,12 @@ power_surge power_surge(
|
||||
.roms_addr(rom_addr),
|
||||
.roms_do(rom_do[7:0]),
|
||||
.roms_rd(rom_rd),
|
||||
.dip_switch_1(8'b0111_1000), // Cabinet Unknown Lives Lives Initial_Energy Unknown Unknown Unknown
|
||||
.dip_switch_2(8'b1110_0000), // Stop_at_Junctions, Unknown, Unknown, Cheat, Coin_B Coin_B Coin_A Coin_A
|
||||
.dip_switch_1({2'b11,lives,energy,3'b000}), // Cabinet Unknown Lives Lives Initial_Energy Unknown Unknown Unknown
|
||||
.dip_switch_2({stpatjunct,7'b110_1111}), // Stop_at_Junctions, Unknown, Unknown, Cheat, Coin_B Coin_B Coin_A Coin_A
|
||||
.start2(m_two_players),
|
||||
.start1(m_one_player),
|
||||
.coin1(m_coin1),
|
||||
|
||||
|
||||
.fire1(m_fireA),
|
||||
.right1(m_right),
|
||||
.left1(m_left),
|
||||
@ -174,7 +203,7 @@ power_surge power_surge(
|
||||
.up2(m_up2)
|
||||
);
|
||||
|
||||
mist_video #(.COLOR_DEPTH(5), .SD_HCNT_WIDTH(10)) mist_video(//Wrong Colors have no Idea
|
||||
mist_video #(.COLOR_DEPTH(5), .SD_HCNT_WIDTH(10)) mist_video(
|
||||
.clk_sys ( clock_48 ),
|
||||
.SPI_SCK ( SPI_SCK ),
|
||||
.SPI_SS3 ( SPI_SS3 ),
|
||||
@ -193,32 +222,14 @@ mist_video #(.COLOR_DEPTH(5), .SD_HCNT_WIDTH(10)) mist_video(//Wrong Colors have
|
||||
.scandoubler_disable( scandoublerD ),
|
||||
.scanlines ( scanlines ),
|
||||
.blend ( blend ),
|
||||
.ypbpr ( ypbpr )
|
||||
.ypbpr ( ypbpr ),
|
||||
.no_csync ( no_csync )
|
||||
);
|
||||
|
||||
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
|
||||
.clk_sys (clock_12 ),
|
||||
.conf_str (CONF_STR ),
|
||||
.SPI_CLK (SPI_SCK ),
|
||||
.SPI_SS_IO (CONF_DATA0 ),
|
||||
.SPI_MISO (SPI_DO ),
|
||||
.SPI_MOSI (SPI_DI ),
|
||||
.buttons (buttons ),
|
||||
.switches (switches ),
|
||||
.scandoubler_disable (scandoublerD ),
|
||||
.ypbpr (ypbpr ),
|
||||
.key_strobe (key_strobe ),
|
||||
.key_pressed (key_pressed ),
|
||||
.key_code (key_code ),
|
||||
.joystick_0 (joystick_0 ),
|
||||
.joystick_1 (joystick_1 ),
|
||||
.status (status )
|
||||
);
|
||||
|
||||
dac #(.C_bits(16))dac(
|
||||
dac #(.C_bits(11))dac(
|
||||
.clk_i(clock_14),
|
||||
.res_n_i(1),
|
||||
.dac_i({audio, 5'b00000}),
|
||||
.dac_i(audio),
|
||||
.dac_o(AUDIO_L)
|
||||
);
|
||||
|
||||
|
||||
@ -59,6 +59,10 @@ localparam CONF_STR = {
|
||||
"O2,Rotate Controls,Off,On;",
|
||||
"O34,Scanlines,Off,25%,50%,75%;",
|
||||
"O5,Blend,Off,On;",
|
||||
"O67,Lives,3,4,5,Unl.;",
|
||||
"O8,Bonus Life,10K 50k,20K 60K;",
|
||||
"O9B,Difficulty,1,2,3,4,5,6,7,8;",
|
||||
"OC,Demo Sounds,Off,On;",
|
||||
"T0,Reset;",
|
||||
"V,v1.15.",`BUILD_DATE
|
||||
};
|
||||
@ -66,6 +70,10 @@ localparam CONF_STR = {
|
||||
wire rotate = status[2];
|
||||
wire [1:0] scanlines = status[4:3];
|
||||
wire blend = status[5];
|
||||
wire [1:0] lives = status[7:6];
|
||||
wire bonus = status[8];
|
||||
wire [2:0] difficulty = status[11:9];
|
||||
wire demosnd = status[12];
|
||||
|
||||
assign LED = 1;
|
||||
assign AUDIO_R = AUDIO_L;
|
||||
@ -88,9 +96,31 @@ wire [7:0] joystick_0;
|
||||
wire [7:0] joystick_1;
|
||||
wire scandoublerD;
|
||||
wire ypbpr;
|
||||
reg [10:0] audio;
|
||||
wire hs, vs;
|
||||
wire [4:0] r,g,b;
|
||||
wire no_csync;
|
||||
wire key_strobe;
|
||||
wire key_pressed;
|
||||
wire [7:0] key_code;
|
||||
|
||||
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
|
||||
.clk_sys (clock_12 ),
|
||||
.conf_str (CONF_STR ),
|
||||
.SPI_CLK (SPI_SCK ),
|
||||
.SPI_SS_IO (CONF_DATA0 ),
|
||||
.SPI_MISO (SPI_DO ),
|
||||
.SPI_MOSI (SPI_DI ),
|
||||
.buttons (buttons ),
|
||||
.switches (switches ),
|
||||
.scandoubler_disable (scandoublerD ),
|
||||
.ypbpr (ypbpr ),
|
||||
.no_csync (no_csync ),
|
||||
.key_strobe (key_strobe ),
|
||||
.key_pressed (key_pressed ),
|
||||
.key_code (key_code ),
|
||||
.joystick_0 (joystick_0 ),
|
||||
.joystick_1 (joystick_1 ),
|
||||
.status (status )
|
||||
);
|
||||
|
||||
wire [14:0] rom_addr;
|
||||
wire [15:0] rom_do;
|
||||
wire rom_rd;
|
||||
@ -99,9 +129,6 @@ wire [7:0] ioctl_index;
|
||||
wire ioctl_wr;
|
||||
wire [24:0] ioctl_addr;
|
||||
wire [7:0] ioctl_dout;
|
||||
wire key_strobe;
|
||||
wire key_pressed;
|
||||
wire [7:0] key_code;
|
||||
|
||||
data_io data_io(
|
||||
.clk_sys ( clock_48 ),
|
||||
@ -138,6 +165,10 @@ always @(posedge clock_12) begin
|
||||
reset <= status[0] | buttons[1] | ~rom_loaded;
|
||||
end
|
||||
|
||||
reg [10:0] audio;
|
||||
wire hs, vs;
|
||||
wire [4:0] r,g,b;
|
||||
|
||||
time_pilot time_pilot(
|
||||
.clock_6(clock_6),
|
||||
.clock_12(clock_12),
|
||||
@ -152,8 +183,8 @@ time_pilot time_pilot(
|
||||
.roms_addr(rom_addr),
|
||||
.roms_do(rom_do[7:0]),
|
||||
.roms_rd(rom_rd),
|
||||
.dip_switch_1(8'hFF), // Coinage_B / Coinage_A
|
||||
.dip_switch_2(8'h4B), // Sound(8)/Difficulty(7-5)/Bonus(4)/Cocktail(3)/lives(2-1)
|
||||
.dip_switch_1(8'b11111111),// Coinage_B / Coinage_A
|
||||
.dip_switch_2(~{demosnd, difficulty, bonus, 1'b1, lives}),// Sound(8)/Difficulty(7-5)/Bonus(4)/Cocktail(3)/lives(2-1)
|
||||
.start2(m_two_players),
|
||||
.start1(m_one_player),
|
||||
.coin1(m_coin1),
|
||||
@ -189,32 +220,14 @@ mist_video #(.COLOR_DEPTH(5), .SD_HCNT_WIDTH(10)) mist_video(
|
||||
.scandoubler_disable( scandoublerD ),
|
||||
.scanlines ( scanlines ),
|
||||
.blend ( blend ),
|
||||
.ypbpr ( ypbpr )
|
||||
.ypbpr ( ypbpr ),
|
||||
.no_csync ( no_csync )
|
||||
);
|
||||
|
||||
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
|
||||
.clk_sys (clock_12 ),
|
||||
.conf_str (CONF_STR ),
|
||||
.SPI_CLK (SPI_SCK ),
|
||||
.SPI_SS_IO (CONF_DATA0 ),
|
||||
.SPI_MISO (SPI_DO ),
|
||||
.SPI_MOSI (SPI_DI ),
|
||||
.buttons (buttons ),
|
||||
.switches (switches ),
|
||||
.scandoubler_disable (scandoublerD ),
|
||||
.ypbpr (ypbpr ),
|
||||
.key_strobe (key_strobe ),
|
||||
.key_pressed (key_pressed ),
|
||||
.key_code (key_code ),
|
||||
.joystick_0 (joystick_0 ),
|
||||
.joystick_1 (joystick_1 ),
|
||||
.status (status )
|
||||
);
|
||||
|
||||
dac #(.C_bits(16))dac(
|
||||
dac #(.C_bits(11))dac(
|
||||
.clk_i(clock_14),
|
||||
.res_n_i(1),
|
||||
.dac_i({audio, 5'b00000}),
|
||||
.dac_i(audio),
|
||||
.dac_o(AUDIO_L)
|
||||
);
|
||||
|
||||
@ -224,19 +237,19 @@ wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D,
|
||||
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
|
||||
|
||||
arcade_inputs inputs (
|
||||
.clk ( clock_12 ),
|
||||
.key_strobe ( key_strobe ),
|
||||
.key_pressed ( key_pressed ),
|
||||
.key_code ( key_code ),
|
||||
.joystick_0 ( joystick_0 ),
|
||||
.joystick_1 ( joystick_1 ),
|
||||
.rotate ( rotate ),
|
||||
.orientation ( 2'b11 ),
|
||||
.joyswap ( 1'b0 ),
|
||||
.oneplayer ( 1'b1 ),
|
||||
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
|
||||
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
|
||||
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
|
||||
.clk ( clock_12 ),
|
||||
.key_strobe ( key_strobe ),
|
||||
.key_pressed ( key_pressed ),
|
||||
.key_code ( key_code ),
|
||||
.joystick_0 ( joystick_0 ),
|
||||
.joystick_1 ( joystick_1 ),
|
||||
.rotate ( rotate ),
|
||||
.orientation ( 2'b11 ),
|
||||
.joyswap ( 1'b0 ),
|
||||
.oneplayer ( 1'b1 ),
|
||||
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
|
||||
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
|
||||
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
|
||||
);
|
||||
|
||||
endmodule
|
||||
@ -6,7 +6,7 @@
|
||||
-- Coin: ESC, 5, 6
|
||||
-- Start: F1, F2, 1, 2
|
||||
|
||||
-- Tron: Joystick 1 for movement, Joystick 2 (MAME keys: D, G) for turret
|
||||
-- Tron: Joystick 1 for movement, Joystick 2 (MAME keys: D, G) or Buttons B and C for turret
|
||||
-- Wacko: control Captain Krooz'r with the mouse, shoot with the joystick
|
||||
-- Kozmik Krooz'r: use the mouse for movement and shoot, rotate the turret with the joystick
|
||||
|
||||
|
||||
@ -56,6 +56,7 @@ localparam CONF_STR = {
|
||||
"O2,Rotate Controls,Off,On;",
|
||||
"O5,Blend,Off,On;",
|
||||
"O6,Swap Joysticks,Off,On;",
|
||||
"O4,Spinner speed,Low,High;",
|
||||
"DIP;",
|
||||
"O7,Service,Off,On;",
|
||||
"T0,Reset;",
|
||||
@ -66,6 +67,7 @@ wire rotate = status[2];
|
||||
wire blend = status[5];
|
||||
wire joyswap = status[6];
|
||||
wire service = status[7];
|
||||
wire spinspd = status[4];
|
||||
|
||||
reg oneplayer;
|
||||
reg [1:0] orientation; //left/right / portrait/landscape
|
||||
@ -397,7 +399,7 @@ wire [6:0] spin_angle1;
|
||||
spinner spinner1 (
|
||||
.clock_40(clk_sys),
|
||||
.reset(reset),
|
||||
.btn_acc(1),
|
||||
.btn_acc(spinspd),
|
||||
.btn_left(m_left | m_up),
|
||||
.btn_right(m_right | m_down),
|
||||
.ctc_zc_to_2(vs),
|
||||
@ -408,9 +410,9 @@ wire [6:0] spin_angle2;
|
||||
spinner spinner2 (
|
||||
.clock_40(clk_sys),
|
||||
.reset(reset),
|
||||
.btn_acc(1),
|
||||
.btn_left(m_left2 | m_up2),
|
||||
.btn_right(m_right2 | m_down2),
|
||||
.btn_acc(spinspd),
|
||||
.btn_left(m_left2 | m_up2 | (core_mod == 7'h1 && m_fireB)), // fireB for Tron
|
||||
.btn_right(m_right2 | m_down2 | (core_mod == 7'h1 && m_fireC)), // fireC for Tron
|
||||
.ctc_zc_to_2(vs),
|
||||
.spin_angle(spin_angle2)
|
||||
);
|
||||
|
||||
@ -36,8 +36,8 @@ begin
|
||||
if btn_left = '1' then spin_count <= spin_count - 20; end if; -- left
|
||||
if btn_right = '1' then spin_count <= spin_count + 20; end if; -- right
|
||||
else
|
||||
if btn_left = '1' then spin_count <= spin_count - 55; end if;
|
||||
if btn_right = '1' then spin_count <= spin_count + 55; end if;
|
||||
if btn_left = '1' then spin_count <= spin_count - 40; end if;
|
||||
if btn_right = '1' then spin_count <= spin_count + 40; end if;
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
|
||||
@ -11,11 +11,8 @@ Supported games:
|
||||
Sarge
|
||||
=====
|
||||
Controls:
|
||||
Player 1: joystick 1 and joystick 2
|
||||
Player 2: joystick 3 and joystick 4
|
||||
|
||||
Creating SARGE.ROM on Linux:
|
||||
cat cpu_3b.bin cpu_5b.bin spr_8e.bin spr_6e.bin spr_5e.bin spr_4e.bin til_15a.bin til_15a.bin til_14b.bin til_14b.bin tcs_u5.bin tcs_u4.bin tcs_u5.bin tcs_u4.bin > SARGE.ROM
|
||||
Player 1: joystick 1 and joystick 2 (two sticks mode), joystick1 only(one stick mode)
|
||||
Player 2: joystick 3 and joystick 4 (two sticks mode), joystick2 only(one stick mode)
|
||||
|
||||
Max RPM
|
||||
=======
|
||||
@ -24,19 +21,10 @@ Gear : Button1/Button2
|
||||
Steering: Left/Right
|
||||
Throttle/Brake: Up/Down
|
||||
|
||||
Creating MAXRPM.ROM on Linux:
|
||||
cat pro.0 pro.1 fg-0 fg-1 fg-2 fg-3 bg-0 bg-1 turbskwk.u5 turbskwk.u4 > MAXRPM.ROM
|
||||
|
||||
Rampage
|
||||
=======
|
||||
Normal controls for maximum of 3 players.
|
||||
|
||||
Creating RAMPAGE.ROM on Linux:
|
||||
cat pro-0_3b_rev_3_8-27-86.3b pro-1_5b_rev_3_8-27-86.5b \
|
||||
fg-0_8e_6-30-86.8e fg-1_6e_6-30-86.6e fg-2_5e_6-30-86.5e fg-3_4e_6-30-86.4e \
|
||||
bg-0_u15_7-23-86.15a bg-1_u14_7-23-86.14b \
|
||||
u-17_rev.2_8-14-86.u17 u-18_rev.2_8-14-86.u18 u-7_rev.2_8-14-86.u7 u-8_rev.2_8-14-86.u8 > RAMPAGE.ROM
|
||||
|
||||
Power Drive
|
||||
===========
|
||||
3 players support
|
||||
@ -44,10 +32,15 @@ Buttons 1,2 - Gas
|
||||
Button 3 - Wheelie
|
||||
Button 4 - Shift
|
||||
|
||||
Creating POWERDRV.ROM on Linux:
|
||||
cat pdrv3b.bin pdrv5b.bin pdrv8e.bin pdrv6e.bin pdrv5e.bin pdrv4e.bin \
|
||||
pdrv15a.bin pdrv14b.bin \
|
||||
power_drive_snd_u17.u17 power_drive_snd_u18.u18 power_drive_snd_u7.u7 power_drive_snd_u8.u8 > POWERDRV.ROM
|
||||
Usage:
|
||||
======
|
||||
|
||||
Create ROM and ARC files from MAME ROM zip files using the mra utility and the MRA files.
|
||||
Copy the RBF and the ARC files to the same folder.
|
||||
Example: mra -z /path/to/mame/roms Tron.mra
|
||||
Copy the ROM files to the root of the SD Card.
|
||||
|
||||
MRA utilty: https://github.com/sebdel/mra-tools-c
|
||||
|
||||
Based on Darfpga's work:
|
||||
---------------------------------------------------------------------------------
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
<rbf>MCR3Mono</rbf>
|
||||
<setname>sarge</setname>
|
||||
<switches>
|
||||
<dip bits="9" name="Controls" ids="2 sticks, 1 stick"/>
|
||||
<dip bits="8" name="Free Play" ids="On,Off"/>
|
||||
</switches>
|
||||
<rom index="1">
|
||||
|
||||
@ -104,8 +104,8 @@ always @(*) begin
|
||||
begin
|
||||
// Two stick/player like the original
|
||||
input0 = ~{2'b00, service, 1'b0, m_two_players, m_one_player, m_coin2, m_coin1};
|
||||
input1 = ~{m_fireA | m_fireB, m_fireA | m_fireB, m_fire2A | m_fire2B, m_fire2A | m_fire2B, m_down, m_up, m_down, m_up};
|
||||
input2 = ~{m_fire3A | m_fire3B, m_fire3A | m_fire3B, m_fire4A | m_fire4B, m_fire4A | m_fire4B, m_down3, m_up3, m_down4, m_up4};
|
||||
input1 = ~{{2{sarge_fire1B}}, {2{sarge_fire1A}}, sarge_down2, sarge_up2, sarge_down1, sarge_up1};
|
||||
input2 = ~{{2{sarge_fire2B}}, {2{sarge_fire2A}}, sarge_down3, sarge_up3, sarge_down4, sarge_up4};
|
||||
input3 = ~{2'b00, /*coinage*/2'b00, /*free play*/status[8], 3'b000};
|
||||
end
|
||||
7'h2: //POWERDRV
|
||||
@ -393,6 +393,42 @@ dac #(10) dac(
|
||||
);
|
||||
assign AUDIO_R = AUDIO_L;
|
||||
|
||||
// Sarge controls
|
||||
wire onestick = status[9];
|
||||
wire sarge_up1, sarge_up2, sarge_up3, sarge_up4;
|
||||
wire sarge_down1, sarge_down2, sarge_down3, sarge_down4;
|
||||
wire sarge_fire1A, sarge_fire1B, sarge_fire2A, sarge_fire2B;
|
||||
|
||||
always @(*) begin
|
||||
if (~onestick) begin
|
||||
sarge_up1 = m_up;
|
||||
sarge_up2 = m_up2;
|
||||
sarge_up3 = m_up3;
|
||||
sarge_up4 = m_up4;
|
||||
sarge_down1 = m_down;
|
||||
sarge_down2 = m_down2;
|
||||
sarge_down3 = m_down3;
|
||||
sarge_down4 = m_down4;
|
||||
sarge_fire1A = m_fireA | m_fire2A;
|
||||
sarge_fire1B = m_fireB | m_fire2B;
|
||||
sarge_fire2A = m_fire3A | m_fire4A;
|
||||
sarge_fire2B = m_fire3B | m_fire4B;
|
||||
end else begin
|
||||
sarge_up1 = (m_up & ~m_left) | (m_right & ~m_down);
|
||||
sarge_up2 = (m_up & ~m_right) | (m_left & ~m_down);
|
||||
sarge_down1 = (m_down & ~m_right) | (m_left & ~m_up);
|
||||
sarge_down2 = (m_down & ~m_left) | (m_right & ~m_up);
|
||||
sarge_up3 = (m_up2 & ~m_left2) | (m_right2 & ~m_down2);
|
||||
sarge_up4 = (m_up2 & ~m_right2) | (m_left2 & ~m_down2);
|
||||
sarge_down3 = (m_down2 & ~m_right2) | (m_left2 & ~m_up2);
|
||||
sarge_down4 = (m_down2 & ~m_left2) | (m_right2 & ~m_up2);
|
||||
sarge_fire1A = m_fireA;
|
||||
sarge_fire1B = m_fireB;
|
||||
sarge_fire2A = m_fire2A;
|
||||
sarge_fire2B = m_fire2B;
|
||||
end
|
||||
end
|
||||
|
||||
// Power Drive gear
|
||||
reg [2:0] powerdrv_gear;
|
||||
always @(posedge clk_sys) begin
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user