1
0
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:
Marcel 2020-02-16 11:18:37 +01:00 committed by GitHub
commit dcb7e393b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 286 additions and 231 deletions

View File

@ -1,4 +1,5 @@
Test
*.rom
*.arc
*.ROM
*.ARC

View File

@ -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

View File

@ -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

View File

@ -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)
);

View File

@ -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

View File

@ -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

View File

@ -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)
);

View File

@ -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;

View File

@ -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:
---------------------------------------------------------------------------------

View File

@ -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">

View File

@ -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