1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-01-20 09:44:38 +00:00

Green Beret HW: use single RBF + MRA

This commit is contained in:
Gyorgy Szombathelyi 2020-02-12 20:48:52 +01:00
parent bde4d8fd78
commit a224f2554f
5 changed files with 156 additions and 77 deletions

View File

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

View File

@ -0,0 +1,30 @@
<misterromdescription>
<name>Green Beret</name>
<mameversion>0216</mameversion>
<setname>gberet</setname>
<mratimestamp>201911270000</mratimestamp>
<year>1985</year>
<manufacturer>Konami</manufacturer>
<category>Army / Fighter</category>
<rbf>gberet</rbf>
<rom index="1"><part>0</part></rom>
<rom index="0" zip="gberet.zip" md5="886c929e6db35548e44cfdd8d168bdb1" type="merged|nonmerged">
<part name="577l03.10c"/>
<part name="577l02.8c"/>
<part name="577l01.7c"/>
<part name="577l01.7c"/>
<part name="577l06.5e"/>
<part name="577l05.4e"/>
<part name="577l08.4f"/>
<part name="577l04.3e"/>
<part name="577l07.3f"/>
<part name="577h10.5f"/>
<part name="577h11.6f"/>
<part name="577h09.2f"/>
</rom>
</misterromdescription>

View File

@ -0,0 +1,26 @@
<misterromdescription>
<name>Mr. Goemon</name>
<mameversion>0216</mameversion>
<setname>mrgoemon</setname>
<mratimestamp>201911270000</mratimestamp>
<year>1985</year>
<manufacturer>Konami</manufacturer>
<category>Army / Fighter</category>
<rbf>gberet</rbf>
<rom index="1"><part>2</part></rom>
<rom index="0" zip="mrgoemon.zip" md5="bb85714cd6fe34f3c812183d6f7ca0a0" type="merged">
<part name="621d01.10c"/>
<part name="621d02.12c"/>
<part name="621d03.4d"/>
<part name="621d04.5d"/>
<part name="621a05.6d"/>
<part name="621a07.6f"/>
<part name="621a08.7f"/>
<part name="621a06.5f"/>
</rom>
</misterromdescription>

View File

@ -0,0 +1,27 @@
<misterromdescription>
<name>Rush'n Attack (US)</name>
<mameversion>0216</mameversion>
<setname>rushatck</setname>
<mratimestamp>201911270000</mratimestamp>
<year>1985</year>
<manufacturer>Konami</manufacturer>
<category>Army / Fighter</category>
<rbf>gberet</rbf>
<rom index="1"><part>1</part></rom>
<rom index="0" zip="gberet.zip" md5="77c3e9fb3763204f8e118a7442991c6e" type="merged">
<part name="rushatck/577h03.10c"/>
<part name="rushatck/577h02.8c"/>
<part name="rushatck/577h01.7c"/>
<part name="rushatck/577h01.7c"/>
<part name="577l06.5e"/>
<part name="rushatck/577h05.4e"/>
<part name="577l08.4f"/>
<part name="577l04.3e"/>
<part name="rushatck/577h07.3f"/>
<part name="577h10.5f"/>
<part name="577h11.6f"/>
<part name="577h09.2f"/>
</rom>
</misterromdescription>

View File

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