diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Amidar.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Amidar.arc index 33b941da..26925577 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Amidar.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Amidar.arc @@ -1 +1,4 @@ -SCRAMBLE=1 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=1 +CONF=O78,Lives,3,4,5,Unl diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Anteater.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Anteater.arc index 517aba5a..c16e46b4 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Anteater.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Anteater.arc @@ -1 +1,5 @@ -SCRAMBLE=10 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=10 +CONF=O7,Lives,3,5 +CONF=OA,Demo Sounds,Off,On diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Armored Car.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Armored Car.arc index 8449bf9f..5d7ffe9b 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Armored Car.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Armored Car.arc @@ -1 +1,5 @@ -SCRAMBLE=5 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=5 +CONF=O7,Lives,3,5 +CONF=OA,Demo Sounds,Off,On diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Calipso.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Calipso.arc index d5301684..0a7a0cd5 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Calipso.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Calipso.arc @@ -1 +1,5 @@ -SCRAMBLE=8 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=8 +CONF=O7,Lives,3,5 +CONF=OA,Demo Sounds,Off,On diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Frogger.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Frogger.arc index 7c1855d9..e9d2fc09 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Frogger.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Frogger.arc @@ -1 +1,4 @@ -SCRAMBLE=2 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=2 +CONF=O78,Lives,3,5,7,Unl diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Lost Tomb.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Lost Tomb.arc index 6b047f94..bda920e2 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Lost Tomb.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Lost Tomb.arc @@ -1 +1,4 @@ -SCRAMBLE=11 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=11 +CONF=OA,Demo Sounds,Off,On diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Moon War.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Moon War.arc index f16b22c1..6e04cc34 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Moon War.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Moon War.arc @@ -1 +1,4 @@ -SCRAMBLE=6 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=6 +CONF=O78,Lives,3,4,5,Unl diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Scramble.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Scramble.arc index 6d8ab04d..f30fa498 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Scramble.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Scramble.arc @@ -1 +1,4 @@ -SCRAMBLE=0 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=0 +CONF=O78,Lives,3,4,5,Unl diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Speed Coin.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Speed Coin.arc index c42e5744..5895d772 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Speed Coin.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Speed Coin.arc @@ -1 +1,5 @@ -SCRAMBLE=7 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=7 +CONF=O7,Lives,3,5 +CONF=OB,Difficulty,Easy,Hard diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Super Cobra.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Super Cobra.arc index e4bdfd3c..d2b6ac93 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Super Cobra.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Super Cobra.arc @@ -1 +1,5 @@ -SCRAMBLE=3 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=3 +CONF=O7,Lives,3,4 +CONF=O9,Continue,No,Yes diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Tazzmania.arc b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Tazzmania.arc index 393220db..40cb853c 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Tazzmania.arc +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/meta/Tazzmania.arc @@ -1 +1,5 @@ -SCRAMBLE=4 \ No newline at end of file +[ARC] +RBF=SCRAMBLE +MOD=4 +CONF=O7,Lives,3,5 +CONF=OA,Demo Sounds,Off,On diff --git a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/rtl/ScrambleMist.sv b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/rtl/ScrambleMist.sv index cbd84e75..fa03e1cc 100644 --- a/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/rtl/ScrambleMist.sv +++ b/Arcade_MiST/Konami Scramble Hardware/Scramble_MiST/rtl/ScrambleMist.sv @@ -51,6 +51,17 @@ module ScrambleMist `include "rtl\build_id.v" +localparam CONF_STR = { + ";ROM;", + "O2,Rotate Controls,Off,On;", + "O34,Scanlines,Off,25%,50%,75%;", + "O5,Blending,Off,On;", + "O6,Joystick Swap,Off,On;", + "DIP;", + "T0,Reset;", + "V,v1.20.",`BUILD_DATE +}; + integer hwsel = 0; wire [6:0] core_mod; reg [8*8-1:0] core_name; @@ -59,9 +70,9 @@ reg [7:0] input1; reg [7:0] input2; always @(*) begin - input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_fireA, 1'b0, m_fireB, m_up2 }; - input1 = ~{ m_one_player, m_two_players, m_left2, m_right2, m_fire2A, m_fire2B, 2'b10 }; - input2 = ~{ 1'b1, m_down, 1'b1, m_up, 3'b111, m_down2 }; + input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_fireA, /*service*/1'b0, m_fireB, m_up2 }; + input1 = ~{ m_one_player, m_two_players, m_left2, m_right2, m_fire2A, m_fire2B, /*lives*/~status[8:7] }; + input2 = ~{ 1'b1, m_down, 1'b1, m_up, /*cabinet*/1'b1, /*coinage*/2'b11, m_down2 }; case (core_mod) 6'h0: @@ -73,6 +84,8 @@ always @(*) begin begin core_name = "AMIDAR "; hwsel = 0; + input1[1:0] = ~status[8:7]; // lives345unl + //input2[1] = status[10]; // demo sounds - no effect end 6'h2: begin @@ -83,27 +96,31 @@ always @(*) begin begin core_name = "SCOBRA "; hwsel = 2; + input1[0] = status[9]; // allow continue + input1[1] = status[7]; // lives34 end 6'h4: begin core_name = "TAZMANIA"; hwsel = 2; input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_down, m_up, m_fireA, m_fireB }; - input1 = ~{ m_fire2A, m_fire2B, m_left2, m_right2, m_up2, m_down2, 2'b11 }; - input2 = ~{ 1'b1, m_two_players, 2'b10, 3'b111, m_one_player }; + input1 = ~{ m_fire2A, m_fire2B, m_left2, m_right2, m_up2, m_down2, /*demosnd*/status[10], /*lives35*/status[7] }; + input2 = ~{ 1'b1, m_two_players, 2'b10, 3'b111, m_one_player }; // unknown, start2, 2xunknown, cabinet, 2xcoinage, start1 end 6'h5: begin core_name = "ARMORCAR"; hwsel = 2; + input1[0] = ~status[7]; //lives35 + input1[1] = ~status[10]; // demo sounds end 6'h6: begin - core_name = "MOONWAR"; + core_name = "MOONWAR "; hwsel = 2; input0 = ~{ m_coin1, m_coin2, 1'b0, dial }; - input1 = ~{ m_fireA, m_fireB, m_fireC, m_fireD, m_two_players, m_one_player, 2'b01 }; // lives - input2 = ~{ 4'h0, 1'b1, 2'b11, 1'b0 }; // 4xunused, cabinet, coinage, p2fire(cocktail) + input1 = ~{ m_fireA, m_fireB, m_fireC, m_fireD, m_two_players, m_one_player, /*live345*/~status[8:7] }; + input2 = ~{ 4'h0, 1'b1, 2'b11, 1'b0 }; // 4xunused, cabinet, coinage, p2fire(cocktail) end 6'h7: begin @@ -111,14 +128,14 @@ always @(*) begin hwsel = 2; input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_two_players, 1'b0, m_one_player, 1'b0 }; input1 = { 4'hf, 2'b00, 1'b0, 1'b0 }; // 6xunused, freeplay, freeze - input2 = { 4'hf, 1'b0, 1'b0, 1'b1, 1'b1}; // 4xunused, lives, difficulty, unknown, unused + input2 = { 4'hf, ~status[7], status[11], 1'b1, 1'b1}; // 4xunused, lives35, difficulty, unknown, unused end 6'h8: begin core_name = "CALIPSO "; hwsel = 3; input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_down, m_up, 1'b1, m_two_players|m_fire2A }; // coin1, coin2, left, right, down, up, unused, start 2p / player2 fire - input1 = ~{ 1'b1, 1'b1, m_left2, m_right2, m_down2, m_up2, 1'b1, 1'b1 }; // unused, unused, left, right, down, up, demo sounds, lives 3/5 + input1 = ~{ 1'b1, 1'b1, m_left2, m_right2, m_down2, m_up2, status[10], status[7] }; // unused, unused, left, right, down, up, demo sounds, lives 3/5 input2 = ~{ 5'b0, 2'b10, m_fireA | m_one_player }; // unused[7:3], coin dip[2:1], start 1p / player1 fire end 6'h9: @@ -135,7 +152,7 @@ always @(*) begin core_name = "ANTEATER"; hwsel = 5; input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_down, m_up, m_fireA, m_fireB }; - input1 = ~{ m_fire2A, m_fire2B, m_left2, m_right2, m_up2, m_down2, 2'b11 }; + input1 = ~{ m_fire2A, m_fire2B, m_left2, m_right2, m_up2, m_down2, /*demosdns*/status[10], /*lives35*/status[7] }; input2 = ~{ 1'b1, m_two_players, 2'b10, 3'b111, m_one_player }; end 6'hB: @@ -144,7 +161,7 @@ always @(*) begin hwsel = 6; input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_down, m_up, m_one_player, m_two_players }; input1 = ~{ 1'b0, m_fireA, m_left2, m_right2, m_down2, m_up2, 2'b01 }; - input2 = ~{ 4'h0, 1'b0, 2'b10, 1'b0 }; //4xunused, demo sounds, 2xcoinage, unused + input2 = ~{ 4'h0, status[10], 2'b10, 1'b0 }; //4xunused, demo sounds, 2xcoinage, unused end default: begin @@ -154,17 +171,6 @@ always @(*) begin endcase end -localparam CONF_STR = { -// `CORE_NAME,";ROM;", - ";ROM;", - "O2,Rotate Controls,Off,On;", - "O34,Scanlines,Off,25%,50%,75%;", - "O5,Blending,Off,On;", - "06,Joystick Swap,Off,On;", - "T0,Reset;", - "V,v1.20.",`BUILD_DATE -}; - wire rotate = status[2]; wire [1:0] scanlines = status[4:3]; wire blend = status[5]; @@ -214,7 +220,7 @@ wire key_pressed; wire [7:0] key_code; user_io #( - .STRLEN(((8*8+$size(CONF_STR))>>3))) + .STRLEN(8+($size(CONF_STR)>>3))) user_io( .clk_sys (clk_sys ), .conf_str ({core_name, CONF_STR}), @@ -224,7 +230,7 @@ user_io( .SPI_MOSI (SPI_DI ), .buttons (buttons ), .switches (switches ), - .scandoubler_disable (scandoublerD ), + .scandoubler_disable (scandoublerD ), .ypbpr (ypbpr ), .no_csync (no_csync ), .core_mod (core_mod ), diff --git a/common/mist/user_io.v b/common/mist/user_io.v index 794bc7a8..0969900b 100644 --- a/common/mist/user_io.v +++ b/common/mist/user_io.v @@ -24,6 +24,8 @@ module user_io #(parameter STRLEN=0, parameter PS2DIV=100, parameter ROM_DIRECT_UPLOAD=0) ( input [(8*STRLEN)-1:0] conf_str, + output [9:0] conf_addr, // RAM address for config string, if STRLEN=0 + input [7:0] conf_chr, input clk_sys, // clock for system-related messages (kbd, joy, etc...) input clk_sd, // clock for SD-card related messages @@ -101,6 +103,8 @@ assign scandoubler_disable = but_sw[4]; assign ypbpr = but_sw[5]; assign no_csync = but_sw[6]; +assign conf_addr = byte_cnt; + // this variant of user_io is for 8 bit cores (type == a4) only // bit 4 indicates ROM direct upload capability wire [7:0] core_type = ROM_DIRECT_UPLOAD ? 8'hb4 : 8'ha4; @@ -335,7 +339,8 @@ always@(posedge spi_sck or posedge SPI_SS_IO) begin spi_byte_out <= 0; case({(!byte_cnt) ? {sbuf, SPI_MOSI} : cmd}) // reading config string - 8'h14: if(byte_cnt < STRLEN) spi_byte_out <= conf_str[(STRLEN - byte_cnt - 1)<<3 +:8]; + 8'h14: if (STRLEN == 0) spi_byte_out <= conf_chr; else + if(byte_cnt < STRLEN) spi_byte_out <= conf_str[(STRLEN - byte_cnt - 1)<<3 +:8]; // reading sd card status 8'h16: if(byte_cnt == 0) begin