diff --git a/Arcade_MiST/.gitignore b/Arcade_MiST/.gitignore
index dae1c893..6024e206 100644
--- a/Arcade_MiST/.gitignore
+++ b/Arcade_MiST/.gitignore
@@ -1,4 +1,5 @@
Test
*.rom
*.arc
-
+*.ROM
+*.ARC
diff --git a/Arcade_MiST/Atari Tetris/rtl/Tetris_MiST.sv b/Arcade_MiST/Atari Tetris/rtl/Tetris_MiST.sv
index f9ef58de..0c359596 100644
--- a/Arcade_MiST/Atari Tetris/rtl/Tetris_MiST.sv
+++ b/Arcade_MiST/Atari Tetris/rtl/Tetris_MiST.sv
@@ -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
diff --git a/Arcade_MiST/Konami Classic/Pooyan_MiST/rtl/pooyan_mist.sv b/Arcade_MiST/Konami Classic/Pooyan_MiST/rtl/pooyan_mist.sv
index da7f3e12..9653e07f 100644
--- a/Arcade_MiST/Konami Classic/Pooyan_MiST/rtl/pooyan_mist.sv
+++ b/Arcade_MiST/Konami Classic/Pooyan_MiST/rtl/pooyan_mist.sv
@@ -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
diff --git a/Arcade_MiST/Konami Classic/Power_Surge_MiST/rtl/Power_Surge_MiST.sv b/Arcade_MiST/Konami Classic/Power_Surge_MiST/rtl/Power_Surge_MiST.sv
index cff34b2d..74b4e3a2 100644
--- a/Arcade_MiST/Konami Classic/Power_Surge_MiST/rtl/Power_Surge_MiST.sv
+++ b/Arcade_MiST/Konami Classic/Power_Surge_MiST/rtl/Power_Surge_MiST.sv
@@ -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)
);
diff --git a/Arcade_MiST/Konami Classic/Time_Pilot_MiST/rtl/TimePilot_MiST.sv b/Arcade_MiST/Konami Classic/Time_Pilot_MiST/rtl/TimePilot_MiST.sv
index fdb79b6a..81b36989 100644
--- a/Arcade_MiST/Konami Classic/Time_Pilot_MiST/rtl/TimePilot_MiST.sv
+++ b/Arcade_MiST/Konami Classic/Time_Pilot_MiST/rtl/TimePilot_MiST.sv
@@ -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
\ No newline at end of file
diff --git a/Arcade_MiST/Midway MCR 2/MCR2/README.txt b/Arcade_MiST/Midway MCR 2/MCR2/README.txt
index 8de83f73..f88027f5 100644
--- a/Arcade_MiST/Midway MCR 2/MCR2/README.txt
+++ b/Arcade_MiST/Midway MCR 2/MCR2/README.txt
@@ -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
diff --git a/Arcade_MiST/Midway MCR 2/MCR2/rtl/MCR2_MiST.sv b/Arcade_MiST/Midway MCR 2/MCR2/rtl/MCR2_MiST.sv
index 9a1a3961..6015e8f8 100644
--- a/Arcade_MiST/Midway MCR 2/MCR2/rtl/MCR2_MiST.sv
+++ b/Arcade_MiST/Midway MCR 2/MCR2/rtl/MCR2_MiST.sv
@@ -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)
);
diff --git a/Arcade_MiST/Midway MCR 2/MCR2/rtl/spinner.vhd b/Arcade_MiST/Midway MCR 2/MCR2/rtl/spinner.vhd
index c20016f8..0bf503e0 100644
--- a/Arcade_MiST/Midway MCR 2/MCR2/rtl/spinner.vhd
+++ b/Arcade_MiST/Midway MCR 2/MCR2/rtl/spinner.vhd
@@ -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;
diff --git a/Arcade_MiST/Midway MCR 3 Monoboard/README.txt b/Arcade_MiST/Midway MCR 3 Monoboard/README.txt
index e6d5a84d..25e26804 100644
--- a/Arcade_MiST/Midway MCR 3 Monoboard/README.txt
+++ b/Arcade_MiST/Midway MCR 3 Monoboard/README.txt
@@ -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:
---------------------------------------------------------------------------------
diff --git a/Arcade_MiST/Midway MCR 3 Monoboard/meta/Sarge.mra b/Arcade_MiST/Midway MCR 3 Monoboard/meta/Sarge.mra
index 865d3491..d26781b2 100644
--- a/Arcade_MiST/Midway MCR 3 Monoboard/meta/Sarge.mra
+++ b/Arcade_MiST/Midway MCR 3 Monoboard/meta/Sarge.mra
@@ -8,6 +8,7 @@
MCR3Mono
sarge
+
diff --git a/Arcade_MiST/Midway MCR 3 Monoboard/rtl/MCR3Mono_MiST.sv b/Arcade_MiST/Midway MCR 3 Monoboard/rtl/MCR3Mono_MiST.sv
index 57eaadcb..e0d8a643 100644
--- a/Arcade_MiST/Midway MCR 3 Monoboard/rtl/MCR3Mono_MiST.sv
+++ b/Arcade_MiST/Midway MCR 3 Monoboard/rtl/MCR3Mono_MiST.sv
@@ -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