From 7cb65adc4b21e99482b020c934b9dc39d24d6391 Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Sat, 15 Feb 2020 15:35:53 +0100 Subject: [PATCH 1/5] Midway MCR2: adjust spinner controls, add button B+C for Tron's spinner --- Arcade_MiST/Midway MCR 2/MCR2/README.txt | 2 +- Arcade_MiST/Midway MCR 2/MCR2/rtl/MCR2_MiST.sv | 10 ++++++---- Arcade_MiST/Midway MCR 2/MCR2/rtl/spinner.vhd | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) 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; From e590671819a691dde2f1b0bf35d76e4ba48db084 Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Sat, 15 Feb 2020 19:51:48 +0100 Subject: [PATCH 2/5] Midway MCR3 Mono: Sarge one joystick mode --- Arcade_MiST/Midway MCR 3 Monoboard/README.txt | 29 +++++--------- .../Midway MCR 3 Monoboard/meta/Sarge.mra | 1 + .../rtl/MCR3Mono_MiST.sv | 40 ++++++++++++++++++- 3 files changed, 50 insertions(+), 20 deletions(-) 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 From 7f0806fa0dc99d069f4b4f9c8959a34ca8ddc58d Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Sat, 15 Feb 2020 20:29:01 +0100 Subject: [PATCH 3/5] Add ROM, ARC --- Arcade_MiST/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 From a77d05c3d0c3f5e8b1b21d6aca3e66cef7e90477 Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Sat, 15 Feb 2020 20:29:22 +0100 Subject: [PATCH 4/5] ATetris: use common input code --- Arcade_MiST/Atari Tetris/rtl/Tetris_MiST.sv | 135 +++++++++----------- 1 file changed, 61 insertions(+), 74 deletions(-) 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 From 1d0e7a5009440d04c986579b30e49d55cc13e03c Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Sat, 15 Feb 2020 22:21:05 +0100 Subject: [PATCH 5/5] Konami Classic: fix Pooyan freezing at death, add DIP switches --- .../Pooyan_MiST/rtl/pooyan_mist.sv | 111 ++++++++++-------- .../Power_Surge_MiST/rtl/Power_Surge_MiST.sv | 83 +++++++------ .../Time_Pilot_MiST/rtl/TimePilot_MiST.sv | 99 +++++++++------- 3 files changed, 164 insertions(+), 129 deletions(-) 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