From a224f2554f1e553632eccc3a7431e657b57aea24 Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Wed, 12 Feb 2020 20:48:52 +0100 Subject: [PATCH] Green Beret HW: use single RBF + MRA --- .../Konami Green Beret Hardware/README.txt | 9 +- .../meta/gberet.mra | 30 ++++ .../meta/mrgoemon.mra | 26 ++++ .../meta/rushatck.mra | 27 ++++ .../rtl/gberet_mist.sv | 141 ++++++++---------- 5 files changed, 156 insertions(+), 77 deletions(-) create mode 100644 Arcade_MiST/Konami Green Beret Hardware/meta/gberet.mra create mode 100644 Arcade_MiST/Konami Green Beret Hardware/meta/mrgoemon.mra create mode 100644 Arcade_MiST/Konami Green Beret Hardware/meta/rushatck.mra diff --git a/Arcade_MiST/Konami Green Beret Hardware/README.txt b/Arcade_MiST/Konami Green Beret Hardware/README.txt index 30dc4750..9ca4a4d0 100644 --- a/Arcade_MiST/Konami Green Beret Hardware/README.txt +++ b/Arcade_MiST/Konami Green Beret Hardware/README.txt @@ -1,6 +1,13 @@ -- Arcade: Rush'n Attack (Green Beret) port to MiST by Slingshot -- --- GBERET.ROM is required on the SD Card +-- Usage: +-- - Create ROM and ARC files from the MRA files in the meta directory +-- using the MRA utility. +-- Example: mra -A -z /path/to/mame/roms gberet.mra +-- - Copy the ROM files to the root of the SD Card +-- - Copy the RBF and ARC files to the same folder on the SD Card +-- +-- MRA utility: https://github.com/sebdel/mra-tools-c/ -- -- Keyboard inputs : -- diff --git a/Arcade_MiST/Konami Green Beret Hardware/meta/gberet.mra b/Arcade_MiST/Konami Green Beret Hardware/meta/gberet.mra new file mode 100644 index 00000000..d08e94df --- /dev/null +++ b/Arcade_MiST/Konami Green Beret Hardware/meta/gberet.mra @@ -0,0 +1,30 @@ + + Green Beret + 0216 + gberet + 201911270000 + 1985 + Konami + Army / Fighter + gberet + + 0 + + + + + + + + + + + + + + + + + + + diff --git a/Arcade_MiST/Konami Green Beret Hardware/meta/mrgoemon.mra b/Arcade_MiST/Konami Green Beret Hardware/meta/mrgoemon.mra new file mode 100644 index 00000000..53baa131 --- /dev/null +++ b/Arcade_MiST/Konami Green Beret Hardware/meta/mrgoemon.mra @@ -0,0 +1,26 @@ + + Mr. Goemon + 0216 + mrgoemon + 201911270000 + 1985 + Konami + Army / Fighter + gberet + + 2 + + + + + + + + + + + + + + + diff --git a/Arcade_MiST/Konami Green Beret Hardware/meta/rushatck.mra b/Arcade_MiST/Konami Green Beret Hardware/meta/rushatck.mra new file mode 100644 index 00000000..09c5f0b9 --- /dev/null +++ b/Arcade_MiST/Konami Green Beret Hardware/meta/rushatck.mra @@ -0,0 +1,27 @@ + + Rush'n Attack (US) + 0216 + rushatck + 201911270000 + 1985 + Konami + Army / Fighter + gberet + + 1 + + + + + + + + + + + + + + + + diff --git a/Arcade_MiST/Konami Green Beret Hardware/rtl/gberet_mist.sv b/Arcade_MiST/Konami Green Beret Hardware/rtl/gberet_mist.sv index 3bf22938..e08e3279 100644 --- a/Arcade_MiST/Konami Green Beret Hardware/rtl/gberet_mist.sv +++ b/Arcade_MiST/Konami Green Beret Hardware/rtl/gberet_mist.sv @@ -32,13 +32,10 @@ module gberet_mist ( `include "rtl\build_id.v" -//`define CORE_NAME "GBERET" -//`define CORE_NAME "RUSHNA" -`define CORE_NAME "MRGOEMON" - +`define CORE_NAME "GBERET" localparam CONF_STR = { - `CORE_NAME,";ROM;", + `CORE_NAME, ";ROM;", "O2,Rotate Controls,Off,On;", "O34,Scandoubler Fx,None,CRT 25%,CRT 50%,CRT 75%;", "O5,Blend,Off,On;", @@ -50,16 +47,21 @@ localparam CONF_STR = { "V,v1.00.",`BUILD_DATE }; +wire rotate = status[2]; +wire [1:0] scanlines = status[4:3]; +wire blend = status[5]; + wire [1:0] dsLives = ~status[9:8]; wire [1:0] dsExtend = ~status[11:10]; wire [1:0] dsDiff = ~status[13:12]; wire dsDemoSnd = ~status[14]; +wire [6:0] core_mod; -assign LED = ~ioctl_downl; -assign AUDIO_R = AUDIO_L; -assign SDRAM_CLK = clock_48; -assign SDRAM_CKE = 1; +assign LED = ~ioctl_downl; +assign AUDIO_R = AUDIO_L; +assign SDRAM_CLK = clock_48; +assign SDRAM_CKE = 1; wire clock_48, pll_locked; pll pll( @@ -75,14 +77,32 @@ wire [7:0] joystick_0; wire [7:0] joystick_1; wire scandoublerD; wire ypbpr; -wire [7:0] audio; -wire hs, vs; -wire hb, vb; -wire blankn = ~(hb | vb); -wire [3: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_48 ), + .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 ), + .core_mod ( core_mod ), + .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:1] spr_addr; @@ -104,7 +124,7 @@ wire [7:0] ioctl_dout; // 24200 - 2421F - pal - 32b - 2f data_io data_io( - .clk_sys ( clock_48 ), + .clk_sys ( clock_48 ), .SPI_SCK ( SPI_SCK ), .SPI_SS2 ( SPI_SS2 ), .SPI_DI ( SPI_DI ), @@ -170,6 +190,11 @@ always @(posedge clock_48) begin end ////////////////////////////////////////////// +wire [7:0] audio; +wire hs, vs; +wire hb, vb; +wire blankn = ~(hb | vb); +wire [3:0] r, g, b; wire PCLK; wire PCLK_EN; @@ -182,9 +207,9 @@ HVGEN hvgen .oRGB({b,g,r}),.HBLK(hb),.VBLK(vb),.HSYN(hs),.VSYN(vs) ); -wire [5:0] INP0 = { m_fire2, m_fire1, {m_left, m_down, m_right, m_up} }; -wire [5:0] INP1 = { m_fire2, m_fire1, {m_left, m_down, m_right, m_up} }; -wire [2:0] INP2 = { m_coin, m_start2, m_start1 }; +wire [5:0] INP0 = { m_fireB, m_fireA, m_left, m_down, m_right, m_up }; +wire [5:0] INP1 = { m_fire2B, m_fire2A, m_left2, m_down2, m_right2, m_up2 }; +wire [2:0] INP2 = { m_coin1 | m_coin2, m_two_players, m_one_player }; wire [7:0] DSW0 = {dsDemoSnd,dsDiff,dsExtend,1'b0,dsLives}; wire [7:0] DSW1 = 8'hFF; @@ -220,32 +245,14 @@ mist_video #(.COLOR_DEPTH(4), .SD_HCNT_WIDTH(10)) mist_video( .VGA_B ( VGA_B ), .VGA_VS ( VGA_VS ), .VGA_HS ( VGA_HS ), - .rotate ( {1'b1,status[2]} ), + .rotate ( { 1'b1, rotate } ), .scandoubler_disable( scandoublerD ), - .blend ( status[5] ), - .scanlines ( status[4:3] ), + .blend ( blend ), + .scanlines ( scanlines ), + .no_csync ( no_csync ), .ypbpr ( ypbpr ) ); -user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io( - .clk_sys ( clock_48 ), - .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 #(8) dac( .clk_i(clock_48), .res_n_i(1), @@ -253,42 +260,24 @@ dac #(8) dac( .dac_o(AUDIO_L) ); -// Rotated Normal -wire m_up = status[2] ? btn_right | joystick_0[0] | joystick_1[0] : btn_up | joystick_0[3] | joystick_1[3]; -wire m_down = status[2] ? btn_left | joystick_0[1] | joystick_1[1] : btn_down | joystick_0[2] | joystick_1[2]; -wire m_left = status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_left | joystick_0[1] | joystick_1[1]; -wire m_right = status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_right | joystick_0[0] | joystick_1[0]; -wire m_fire1 = btn_fire1 | joystick_0[4] | joystick_1[4]; -wire m_fire2 = btn_fire2 | joystick_0[5] | joystick_1[5]; -wire m_start1 = btn_one_player; -wire m_start2 = btn_two_players; -wire m_coin = btn_coin; - -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_coin = 0; - -always @(posedge clock_48) 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 - 'h29: btn_fire1 <= key_pressed; // Space - 'h11: btn_fire2 <= key_pressed; // Alt - endcase - end -end +wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF; +wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F; +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_48 ), + .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 ( 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