1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-01-15 15:56:41 +00:00

Update Ninjakun, add MRA

This commit is contained in:
Gyorgy Szombathelyi 2021-06-12 19:24:41 +02:00
parent ff870c29b2
commit 426ea2e809
2 changed files with 115 additions and 54 deletions

View File

@ -0,0 +1,78 @@
<misterromdescription>
<name>Ninjakun Majou no Bouken</name>
<region></region>
<homebrew>no</homebrew>
<bootleg>no</bootleg>
<version></version>
<alternative></alternative>
<platform></platform>
<series></series>
<year>1984</year>
<manufacturer>UPL</manufacturer>
<manufacturer>Taito</manufacturer>
<category>Platform - Climb</category>
<setname>ninjakun</setname>
<parent>ninjakun</parent>
<mameversion>0220</mameversion>
<rbf>ninjakun</rbf>
<about author="MrX-8B" source="https://github.com/MiSTer-devel/Arcade-NinjaKun_MiSTer" twitter="@MrX_8B" webpage="https://patreon.com/MrX_8B"></about>
<resolution>15kHz</resolution>
<rotation>horizontal</rotation>
<flip></flip>
<players>2 (alternating)</players>
<joystick>2-way horizontal</joystick>
<special_controls></special_controls>
<num_buttons>2</num_buttons>
<button_names></button_names>
<switches default="FC,C7" base="8" page_id="1" page_name="Switches">
<dip bits="0" name="Cabinet" ids="Upright,Cocktail"/>
<dip bits="1,2" name="Lives" ids="5,2,3,4"/>
<dip bits="3" name="First Bonus" ids="40000,30000"/>
<dip bits="4,5" name="Second Bonus" ids="No Bonus,Every 90000,Every 70000,Every 50000"/>
<dip bits="6" name="Demo Sounds" ids="Yes,No"/>
<dip bits="7" name="Difficulty" ids="Hard,Normal"/>
<dip bits="11" name="High Score Names" ids="3 Letters,8 Letters"/>
<dip bits="12" name="Allow Continue" ids="Yes,No"/>
<dip bits="14" name="Free Play" ids="Yes,No"/>
<dip bits="15" name="Infinite Lives" ids="Yes,No"/>
</switches>
<rom index="1"></rom>
<rom index="0" zip="ninjakun.zip" md5="99e80f22f7a77cf1d574ce89486b385f">
<part crc="a74c4297" name="ninja-6.7n"/>
<part crc="53a72039" name="ninja-7.7p"/>
<part crc="4a99d857" name="ninja-8.7s"/>
<part crc="dede49e4" name="ninja-9.7t"/>
<part crc="0d55664a" name="ninja-10.2c"/>
<part crc="12ff9597" name="ninja-11.2d"/>
<part crc="e9b75807" name="ninja-12.4c"/>
<part crc="1760ed2c" name="ninja-13.4d"/>
<part crc="1c1dc141" name="ninja-1.7a"/>
<part crc="39cc7d37" name="ninja-2.7b"/>
<part crc="d542bfe3" name="ninja-3.7d"/>
<part crc="a57385c6" name="ninja-4.7e"/>
<part crc="164a42c4" name="ninja-5.7h"/>
<part crc="39cc7d37" name="ninja-2.7b"/>
<part crc="d542bfe3" name="ninja-3.7d"/>
<part crc="a57385c6" name="ninja-4.7e"/>
</rom>
<rom index="2"></rom>
<rom index="3" md5="none">
<part>
17 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00
00 00 E0 A3 00 37 00 20
00 00 C0 8C 00 07 22 10
</part>
</rom>
<rom index="4"></rom>
<nvram index="4" size="62"/>
<remark></remark>
<mratimestamp>20210430005030</mratimestamp>
</misterromdescription>

View File

@ -30,19 +30,11 @@ module NinjaKun_MiST (
`include "rtl\build_id.v"
localparam CONF_STR = {
"NINJAKUN;ROM;",
"NINJAKUN;;",
"O2,Rotate Controls,Off,On;",
"O34,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;",
"O34,Scandoubler Fx,None,CRT 25%,CRT 50%,CRT 75%;",
"O5,Blend,Off,On;",
"O8,Difficulty,Normal,Hard;",
"O9A,Lives,4,3,2,5;",
"OB,1st Extra,30000,40000;",
"OCD,2nd Extra (Every),50000,70000,90000,None;",
"OF,Allow Continue,No,Yes;",
"OG,Free Play,No,Yes;",
"OH,Endless(If Free Play),No,Yes;",
"OE,Demo Sound,Off,On;",
"OI,Name Letters,8,3;",
"DIP;",
"T0,Reset;",
"V,v1.00.",`BUILD_DATE
};
@ -52,6 +44,10 @@ assign AUDIO_R = AUDIO_L;
assign SDRAM_CLK = CLOCK_48;
assign SDRAM_CKE = 1;
wire rotate = status[2];
wire [1:0] scanlines = status[4:3];
wire blend = status[5];
wire CLOCK_48, pll_locked;
pll pll(
.inclk0(CLOCK_27),
@ -66,6 +62,7 @@ wire [7:0] joystick_0;
wire [7:0] joystick_1;
wire scandoublerD;
wire ypbpr;
wire no_csync;
wire [15:0] audio;
wire hs, vs;
wire [3:0] r, g, b;
@ -178,10 +175,10 @@ wire [11:0] POUT;
ninjakun_top ninjakun_top(
.RESET(reset),
.MCLK(CLOCK_48),
.CTR1(~{2'b11, btn_one_player, 1'b0, m_fire, m_bomb, m_right, m_left }),
.CTR2(~{~btn_coin, 1'b1, btn_two_players, 1'b0, m_fire, m_bomb, m_right, m_left }),
.DSW1({~status[8], ~status[14], ~status[13:12], ~status[11], ~status[10:9], 1'b0}),
.DSW2({~status[17], ~status[16], 1'b0, ~status[15], ~status[18], 3'b111}),
.CTR1(~{2'b11, m_one_player, 1'b0, m_fireA, m_fireB, m_right, m_left }),
.CTR2(~{~(m_coin1 | m_coin2), 1'b1, m_two_players, 1'b0, m_fireB, m_fire2B, m_right2, m_left2 }),
.DSW1(status[15:8]),
.DSW2(status[23:16]),
.PH(HPOS),
.PV(VPOS),
.PCLK_EN(PCLK_EN),
@ -229,12 +226,13 @@ mist_video #(.COLOR_DEPTH(4), .SD_HCNT_WIDTH(11)) mist_video(
.VGA_B ( VGA_B ),
.VGA_VS ( VGA_VS ),
.VGA_HS ( VGA_HS ),
.rotate ( {1'b1,status[2]} ),
.ce_divider ( 1'b1 ),
.blend ( status[5] ),
.rotate ( { 1'b1, rotate } ),
.ce_divider ( 1'b1 ),
.blend ( blend ),
.scandoubler_disable( scandoublerD ),
.scanlines ( status[4:3] ),
.ypbpr ( ypbpr )
.scanlines ( scanlines ),
.ypbpr ( ypbpr ),
.no_csync ( no_csync )
);
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
@ -248,6 +246,7 @@ user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.no_csync (no_csync ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
@ -262,41 +261,25 @@ dac #(.C_bits(16))dac(
.dac_i(audio),
.dac_o(AUDIO_L)
);
// Rotated Normal
//wire m_up = ~status[2] ? btn_left | joystick_0[1] | joystick_1[1] : btn_up | joystick_0[3] | joystick_1[3];
//wire m_down = ~status[2] ? btn_right | joystick_0[0] | joystick_1[0] : btn_down | joystick_0[2] | joystick_1[2];
wire m_left = status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_left | joystick_0[1] | joystick_1[1];
wire m_right = status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_right | joystick_0[0] | joystick_1[0];
wire m_fire = btn_fire1 | joystick_0[4] | joystick_1[4];
wire m_bomb = btn_fire2 | joystick_0[5] | joystick_1[5];
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;
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
// 'h14: btn_fire3 <= key_pressed; // ctrl
'h11: btn_fire2 <= key_pressed; // alt
'h29: btn_fire1 <= key_pressed; // Space
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