mirror of
https://github.com/Gehstock/Mist_FPGA.git
synced 2026-01-18 09:02:08 +00:00
Scramble HW: add DIP switches
This commit is contained in:
parent
05170088f7
commit
dd73e5ce11
@ -1 +1,4 @@
|
||||
SCRAMBLE=1
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=1
|
||||
CONF=O78,Lives,3,4,5,Unl
|
||||
|
||||
@ -1 +1,5 @@
|
||||
SCRAMBLE=10
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=10
|
||||
CONF=O7,Lives,3,5
|
||||
CONF=OA,Demo Sounds,Off,On
|
||||
|
||||
@ -1 +1,5 @@
|
||||
SCRAMBLE=5
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=5
|
||||
CONF=O7,Lives,3,5
|
||||
CONF=OA,Demo Sounds,Off,On
|
||||
|
||||
@ -1 +1,5 @@
|
||||
SCRAMBLE=8
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=8
|
||||
CONF=O7,Lives,3,5
|
||||
CONF=OA,Demo Sounds,Off,On
|
||||
|
||||
@ -1 +1,4 @@
|
||||
SCRAMBLE=2
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=2
|
||||
CONF=O78,Lives,3,5,7,Unl
|
||||
|
||||
@ -1 +1,4 @@
|
||||
SCRAMBLE=11
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=11
|
||||
CONF=OA,Demo Sounds,Off,On
|
||||
|
||||
@ -1 +1,4 @@
|
||||
SCRAMBLE=6
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=6
|
||||
CONF=O78,Lives,3,4,5,Unl
|
||||
|
||||
@ -1 +1,4 @@
|
||||
SCRAMBLE=0
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=0
|
||||
CONF=O78,Lives,3,4,5,Unl
|
||||
|
||||
@ -1 +1,5 @@
|
||||
SCRAMBLE=7
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=7
|
||||
CONF=O7,Lives,3,5
|
||||
CONF=OB,Difficulty,Easy,Hard
|
||||
|
||||
@ -1 +1,5 @@
|
||||
SCRAMBLE=3
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=3
|
||||
CONF=O7,Lives,3,4
|
||||
CONF=O9,Continue,No,Yes
|
||||
|
||||
@ -1 +1,5 @@
|
||||
SCRAMBLE=4
|
||||
[ARC]
|
||||
RBF=SCRAMBLE
|
||||
MOD=4
|
||||
CONF=O7,Lives,3,5
|
||||
CONF=OA,Demo Sounds,Off,On
|
||||
|
||||
@ -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 ),
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user