diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/meta/Ninjakun.mra b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/meta/Ninjakun.mra new file mode 100644 index 00000000..bec6c7dc --- /dev/null +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/meta/Ninjakun.mra @@ -0,0 +1,78 @@ + + Ninjakun Majou no Bouken + + no + no + + + + + 1984 + UPL + Taito + Platform - Climb + + ninjakun + ninjakun + 0220 + ninjakun + + + 15kHz + horizontal + + + 2 (alternating) + 2-way horizontal + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + + + + + 20210430005030 + \ No newline at end of file diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv index c3e3287e..4555f25b 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv @@ -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