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