diff --git a/Arcade_MiST/Gottlieb Qbert/meta/Argus.mra b/Arcade_MiST/Gottlieb Qbert/meta/Argus.mra
new file mode 100644
index 00000000..40c8a3be
--- /dev/null
+++ b/Arcade_MiST/Gottlieb Qbert/meta/Argus.mra
@@ -0,0 +1,51 @@
+
+
+ Argus
+ 0228
+ argusg
+ 20201231150731
+ 1983
+ Gottlieb
+ Platform
+ qbert
+
+
+
+
+
+
+
+ 7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Arcade_MiST/Gottlieb Qbert/meta/Curve Ball.mra b/Arcade_MiST/Gottlieb Qbert/meta/Curve Ball.mra
index 74d1cfc2..75719df9 100644
--- a/Arcade_MiST/Gottlieb Qbert/meta/Curve Ball.mra
+++ b/Arcade_MiST/Gottlieb Qbert/meta/Curve Ball.mra
@@ -10,9 +10,10 @@
qbert
-
-
-
+
+
+
+
4
diff --git a/Arcade_MiST/Gottlieb Qbert/meta/Insector.mra b/Arcade_MiST/Gottlieb Qbert/meta/Insector.mra
index cbf8ff85..e42d9cfb 100644
--- a/Arcade_MiST/Gottlieb Qbert/meta/Insector.mra
+++ b/Arcade_MiST/Gottlieb Qbert/meta/Insector.mra
@@ -10,7 +10,7 @@
qbert
-
+
diff --git a/Arcade_MiST/Gottlieb Qbert/meta/Knightmare.mra b/Arcade_MiST/Gottlieb Qbert/meta/Knightmare.mra
new file mode 100644
index 00000000..9f39766a
--- /dev/null
+++ b/Arcade_MiST/Gottlieb Qbert/meta/Knightmare.mra
@@ -0,0 +1,73 @@
+
+ Knightmare
+ USA
+ no
+ no
+ Set 1
+
+
+
+ 1982
+ Gottlieb
+ Platform - Climb
+
+ kngtmare
+ qbert
+ 0198
+ qbert
+
+
+ 15kHz
+ vertical (ccw)
+ yes
+
+ 2 (alternating)
+ 4-way diagonal
+
+ 0
+
+
+
+
+
+
+
+ 8
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 20210430005030
+
diff --git a/Arcade_MiST/Gottlieb Qbert/meta/Krull.mra b/Arcade_MiST/Gottlieb Qbert/meta/Krull.mra
index f3e86cfb..55b57ff8 100644
--- a/Arcade_MiST/Gottlieb Qbert/meta/Krull.mra
+++ b/Arcade_MiST/Gottlieb Qbert/meta/Krull.mra
@@ -10,8 +10,11 @@
qbert
-
+
+
+
+
3
diff --git a/Arcade_MiST/Gottlieb Qbert/meta/QBert Qubes.mra b/Arcade_MiST/Gottlieb Qbert/meta/QBert Qubes.mra
index c420c554..e9ed30db 100644
--- a/Arcade_MiST/Gottlieb Qbert/meta/QBert Qubes.mra
+++ b/Arcade_MiST/Gottlieb Qbert/meta/QBert Qubes.mra
@@ -10,11 +10,10 @@
qbert
-
-
-
-
-
+
+
+
+
1
diff --git a/Arcade_MiST/Gottlieb Qbert/rtl/Qbert_MiST.sv b/Arcade_MiST/Gottlieb Qbert/rtl/Qbert_MiST.sv
index 792b51bb..44d9ef96 100644
--- a/Arcade_MiST/Gottlieb Qbert/rtl/Qbert_MiST.sv
+++ b/Arcade_MiST/Gottlieb Qbert/rtl/Qbert_MiST.sv
@@ -55,7 +55,7 @@ wire flip = status[7];
wire service = status[8];
wire diagonal = status[9];
-wire [1:0] orientation = {flip, core_mod != mod_tylz && core_mod != mod_insector};
+wire [1:0] orientation = {flip, core_mod != mod_tylz && core_mod != mod_insector && core_mod != mod_kngtmare && core_mod != mod_argus};
wire [7:0] dip_sw = status[23:16];
assign LED = ~ioctl_downl;
@@ -105,9 +105,12 @@ localparam mod_krull = 3;
localparam mod_curvebal = 4;
localparam mod_tylz = 5;
localparam mod_insector = 6;
+localparam mod_argus = 7;
+localparam mod_kngtmare = 8;
-wire [7:0] spinner_pos;
wire spinner_reset;
+// Mad Planets spinner
+wire [7:0] spinner_pos;
spinner spinner (
.clock_40(clk_sys),
.reset(spinner_reset),
@@ -117,14 +120,36 @@ spinner spinner (
.spin_angle(spinner_pos)
);
+// Argus trackball
+wire [15:0] trackball_pos;
+spinner spinnerX (
+ .clock_40(clk_sys),
+ .reset(spinner_reset),
+ .btn_left(m_left),
+ .btn_right(m_right),
+ .btn_acc(1'b1),
+ .ctc_zc_to_2(vb),
+ .spin_angle(trackball_pos[15:8])
+);
+
+spinner spinnerY (
+ .clock_40(clk_sys),
+ .reset(spinner_reset),
+ .btn_left(m_up),
+ .btn_right(m_down),
+ .btn_acc(1'b1),
+ .ctc_zc_to_2(vb),
+ .spin_angle(trackball_pos[7:0])
+);
+
reg [5:0] OP2720;
reg [7:0] IP1710;
reg [7:0] IP4740;
-reg [7:0] IPA1J2;
+reg [15:0] IPA1J2;
always @(*) begin
- IPA1J2 = 8'd0;
+ IPA1J2 = 16'd0;
IP4740 = 8'd0;
IP1710 = {
@@ -193,7 +218,7 @@ always @(*) begin
m_up
};
- IPA1J2 = spinner_pos;
+ IPA1J2 = {spinner_pos, spinner_pos};
end
mod_krull:
@@ -289,6 +314,48 @@ always @(*) begin
m_up
};
end
+
+ mod_argus:
+ begin
+ IP1710 = { // IN1
+ 4'h0,
+ m_coin2,
+ m_coin1,
+ m_fireA,
+ ~service
+ };
+
+ IP4740 = { // IN4
+ 4'h0,
+ m_fire2A,
+ m_fire2B,
+ m_fireA,
+ m_fireB
+ };
+ IPA1J2 = trackball_pos;
+ end
+
+ mod_kngtmare:
+ begin
+ IP1710 = { // IN1
+ 4'h0,
+ m_coin2,
+ m_coin1,
+ 2'b00
+ };
+
+ IP4740 = { // IN4
+ m_two_players,
+ m_one_player,
+ m_fireB,
+ m_fireA,
+ m_rightB | m_right2,
+ m_left,
+ m_leftB | m_left2,
+ m_right
+ };
+ end
+
default:
begin
end
@@ -465,7 +532,7 @@ mylstar_board mylstar_board
.rom_init_address(ioctl_addr),
.rom_init_data(ioctl_dout),
.nvram_data(ioctl_din),
- .bgram(core_mod == mod_krull),
+ .bgram(core_mod == mod_krull || core_mod == mod_argus),
.vflip(flip),
.hflip(flip),
diff --git a/Arcade_MiST/Gottlieb Qbert/rtl/mylstar_board.v b/Arcade_MiST/Gottlieb Qbert/rtl/mylstar_board.v
index 9bc27385..7e4bb36b 100644
--- a/Arcade_MiST/Gottlieb Qbert/rtl/mylstar_board.v
+++ b/Arcade_MiST/Gottlieb Qbert/rtl/mylstar_board.v
@@ -21,7 +21,7 @@ module mylstar_board
input [7:0] IP1710,
input [7:0] IP4740,
- input [7:0] IPA1J2,
+ input [15:0] IPA1J2,
output [5:0] OP2720,
output [4:0] OP3337,
output [7:0] OP4740,
@@ -129,7 +129,8 @@ end
// CPU/RAM/ROM //
////////////////////////
-wire [7:0] A1J2 = (trackball0_sel | trackball1_sel) ? IPA1J2 : 8'd0;
+wire [7:0] A1J2 = trackball0_sel ? IPA1J2[15:8] :
+ trackball1_sel ? IPA1J2[7:0] : 8'd0;
wire [7:0] ram_dout = C5_Q | C6_Q | C7_Q | C9_10_Q | C8_9_Q | C10_11_Q;
wire [7:0] rom_dout;
diff --git a/Arcade_MiST/Gottlieb Qbert/rtl/spinner.vhd b/Arcade_MiST/Gottlieb Qbert/rtl/spinner.vhd
index bc841af7..cbf6c60a 100644
--- a/Arcade_MiST/Gottlieb Qbert/rtl/spinner.vhd
+++ b/Arcade_MiST/Gottlieb Qbert/rtl/spinner.vhd
@@ -36,8 +36,8 @@ begin
if btn_left = '1' then spin_count <= spin_count - 3; end if; -- left
if btn_right = '1' then spin_count <= spin_count + 3; end if; -- right
else
- if btn_left = '1' then spin_count <= spin_count - 55; end if;
- if btn_right = '1' then spin_count <= spin_count + 55; end if;
+ if btn_left = '1' then spin_count <= spin_count - 15; end if;
+ if btn_right = '1' then spin_count <= spin_count + 15; end if;
end if;
end if;
end if;
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/meta/Grobda.mra b/Arcade_MiST/Namco Super Pacman Hardware/meta/Grobda.mra
index 131de7d2..6d43617e 100644
--- a/Arcade_MiST/Namco Super Pacman Hardware/meta/Grobda.mra
+++ b/Arcade_MiST/Namco Super Pacman Hardware/meta/Grobda.mra
@@ -35,4 +35,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/meta/Pac n Pal.mra b/Arcade_MiST/Namco Super Pacman Hardware/meta/Pac n Pal.mra
index ed332900..3e5b9171 100644
--- a/Arcade_MiST/Namco Super Pacman Hardware/meta/Pac n Pal.mra
+++ b/Arcade_MiST/Namco Super Pacman Hardware/meta/Pac n Pal.mra
@@ -8,7 +8,7 @@
druaga
20210326
- 05
+ 07
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/meta/Pac-Man & Chomp Chomp.mra b/Arcade_MiST/Namco Super Pacman Hardware/meta/Pac-Man & Chomp Chomp.mra
index ea9cf5c9..020f52ab 100644
--- a/Arcade_MiST/Namco Super Pacman Hardware/meta/Pac-Man & Chomp Chomp.mra
+++ b/Arcade_MiST/Namco Super Pacman Hardware/meta/Pac-Man & Chomp Chomp.mra
@@ -8,7 +8,7 @@
druaga
20210326
- 05
+ 07
@@ -44,7 +44,7 @@
-
+
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/TheTowerofDruaga_mist.sv b/Arcade_MiST/Namco Super Pacman Hardware/rtl/TheTowerofDruaga_mist.sv
index f515b416..3da56194 100644
--- a/Arcade_MiST/Namco Super Pacman Hardware/rtl/TheTowerofDruaga_mist.sv
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/TheTowerofDruaga_mist.sv
@@ -66,7 +66,7 @@ always @(*) begin
DSW2 = 0;
case (core_mod)
- 7'h0, 7'h1, 7'h3, 7'h6: // DRUAGA, DIGDUG2, GROBDA
+ 7'h0, 7'h1, 7'h3: // DRUAGA, DIGDUG2
begin
DSW0 = status[15:8];
DSW1 = status[23:16];
@@ -78,6 +78,13 @@ always @(*) begin
DSW1 = status[23:16];
DSW2 = { {2{status[27:24]}} };
end
+ 7'h6: // GROBDA
+ begin
+ DSW0 = status[15:8];
+ DSW1 = {status[23:22], m_fire2B, m_fireB, status[19:16]};
+ DSW2 = status[31:24];
+ end
+
default:
begin
DSW0 = status[15:8];
@@ -113,8 +120,6 @@ wire key_strobe;
wire key_pressed;
wire [7:0] key_code;
-// assign core_mod=7'd5;
-
user_io #(.STRLEN($size(CONF_STR)>>3))user_io(
.clk_sys (clock_48 ),
.conf_str (CONF_STR ),
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/druaga_sprite.v b/Arcade_MiST/Namco Super Pacman Hardware/rtl/druaga_sprite.v
index c3a9c0cc..4372a107 100644
--- a/Arcade_MiST/Namco Super Pacman Hardware/rtl/druaga_sprite.v
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/druaga_sprite.v
@@ -28,8 +28,7 @@ module DRUAGA_SPRITE
input FLIP_SCREEN
);
-parameter [2:0] SUPERPAC=3'd5;
-parameter [2:0] GROBDA=3'd6;
+`include "param.v"
reg [9:0] CLT1_A;
wire [3:0] CLT1_D;
@@ -92,7 +91,7 @@ always @(*) begin
(ox[1:0]==2'b01) ? { pn, SPCO[14], SPCO[10], SPCO[6], SPCO[2] } :
(ox[1:0]==2'b10) ? { pn, SPCO[13], SPCO[ 9], SPCO[5], SPCO[1] } :
{ pn, SPCO[12], SPCO[ 8], SPCO[4], SPCO[0] } ;
- if( MODEL == SUPERPAC || MODEL == GROBDA) begin // 2bpp
+ if( MODEL == SUPERPAC || MODEL == GROBDA || MODEL == PACNPAL) begin // 2bpp
CLT1_A[9:2]= { 2'd0, CLT1_A[9:4] };
end
end
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/druaga_video.v b/Arcade_MiST/Namco Super Pacman Hardware/rtl/druaga_video.v
index 9806e1ec..389c4fa3 100644
--- a/Arcade_MiST/Namco Super Pacman Hardware/rtl/druaga_video.v
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/druaga_video.v
@@ -35,8 +35,7 @@ module DRUAGA_VIDEO
input FLIP_SCREEN
);
-parameter [2:0] SUPERPAC=3'd5;
-parameter [2:0] GROBDA=3'd6;
+`include "param.v"
wire [8:0] HPOS = PH-8'd16;
wire [8:0] VPOS = PV;
@@ -91,11 +90,11 @@ always @ ( posedge VCLKx8 ) begin
end
-assign CLT0_A = BGPN ^ ( (MODEL==SUPERPAC || MODEL==GROBDA) ? 8'h0 : 8'h03 );
-assign VRAM_A = VRAMADRS & ( (MODEL==SUPERPAC || MODEL==GROBDA) ? 11'h3FF : 11'h7FF );
+assign CLT0_A = BGPN ^ ( (MODEL==SUPERPAC || MODEL==GROBDA || MODEL==PACNPAL) ? 8'h0 : 8'h03 );
+assign VRAM_A = VRAMADRS & ( (MODEL==SUPERPAC || MODEL==GROBDA || MODEL==PACNPAL) ? 11'h3FF : 11'h7FF );
wire BGHI = BGH & (CLT0_D!=4'd15);
-wire [4:0] BGCOL = { 1'b1, ((MODEL==SUPERPAC || MODEL==GROBDA) ? ~CLT0_D :CLT0_D) };
+wire [4:0] BGCOL = { 1'b1, ((MODEL==SUPERPAC || MODEL==GROBDA || MODEL==PACNPAL) ? ~CLT0_D :CLT0_D) };
always @(*) begin
COL = HPOS[8:3] ^ {5{FLIP_SCREEN}};
@@ -103,7 +102,7 @@ always @(*) begin
// rather than the original circuit count.
ROW = (VPOS[8:3] + 6'h2) ^ {5{FLIP_SCREEN}};
- if( MODEL==SUPERPAC || MODEL==GROBDA ) begin
+ if( MODEL==SUPERPAC || MODEL==GROBDA || MODEL==PACNPAL) begin
VRAMADRS = { 1'b0,
COL[5] ? {COL[4:0], ROW[4:0]} :
{ROW[4:0], COL[4:0]}
@@ -119,7 +118,7 @@ end
//----------------------------------------
wire [4:0] SPCOL;
-DRUAGA_SPRITE #(.SUPERPAC(SUPERPAC)) spr
+DRUAGA_SPRITE spr
(
VCLKx8, VCLK_EN,
HPOS, VPOS, oHB,
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/fpga_druaga.v b/Arcade_MiST/Namco Super Pacman Hardware/rtl/fpga_druaga.v
index 35468909..e5c5e675 100644
--- a/Arcade_MiST/Namco Super Pacman Hardware/rtl/fpga_druaga.v
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/fpga_druaga.v
@@ -41,8 +41,6 @@ module fpga_druaga
input FLIP_SCREEN
);
-parameter [2:0] SUPERPAC=3'd5;
-
// Clock Generator
reg [4:0] CLKS;
@@ -79,7 +77,7 @@ wire [10:0] vram_a;
wire [15:0] vram_d;
wire [6:0] spra_a;
wire [23:0] spra_d;
-MEMS #(.SUPERPAC(SUPERPAC)) mems
+MEMS mems
(
MCLK,
CLKCPUx2,
@@ -101,7 +99,7 @@ wire SCPU_IRQ, SCPU_IRQEN;
wire SCPU_RESET, IO_RESET;
wire PSG_ENABLE;
-REGS #(.SUPERPAC(SUPERPAC)) regs
+REGS regs
(
CLKCPUx2, RESET, oVB,
MCPU_ADRS, MCPU_VMA, MCPU_WE,
@@ -117,7 +115,7 @@ REGS #(.SUPERPAC(SUPERPAC)) regs
// I/O Controler
wire IsMOTOS;
-IOCTRL #(.SUPERPAC(SUPERPAC)) ioctrl(
+IOCTRL ioctrl(
CLKCPUx2, oVB, IO_RESET, MCPU_CS_IO, MCPU_WE, MCPU_ADRS[5:0],
MCPU_DO,
IO_O,
@@ -241,8 +239,7 @@ module MEMS
input [2:0] MODEL
);
-parameter [2:0] SUPERPAC=3'd5;
-parameter [2:0] GROBDA=3'd6;
+`include "param.v"
wire [7:0] mrom_d, srom_d;
//DLROM #(15,8) mcpui( CPUCLKx2, MCPU_ADRS[14:0], mrom_d, ROMCL,ROMAD[14:0],ROMDT,ROMEN & (ROMAD[16:15]==2'b0_0));
@@ -266,7 +263,7 @@ wire mrom_cs = ( MCPU_ADRS[15] ) & MCPU_VMA; // $8000-$FFFF
always @(*) begin
cram_ad = mram_ad;
- if( MODEL == SUPERPAC || MODEL == GROBDA) begin
+ if( MODEL == SUPERPAC || MODEL == GROBDA || MODEL == PACNPAL) begin
mram_cs0 = ( MCPU_ADRS[15:10] == 6'b000000 ) && MCPU_VMA; // $0000-$03FF
mram_cs1 = ( MCPU_ADRS[15:10] == 6'b000001 ) && MCPU_VMA; // $0400-$07FF
mram_cs2 = ( MCPU_ADRS[15:11] == 5'b00001 ) && MCPU_VMA; // $1000-$17FF
@@ -352,16 +349,14 @@ module REGS
input [2:0] MODEL
);
-parameter [2:0] SUPERPAC=3'd5;
-parameter [2:0] GROBDA=3'd6;
-
+`include "param.v"
// BG Scroll Register
wire MCPU_SCRWE = ( ( MCPU_ADRS[15:11] == 5'b00111 ) & MCPU_VMA & MCPU_WE );
always @ ( negedge MCPU_CLK or posedge RESET ) begin
if ( RESET ) SCROLL <= 8'h0;
else begin
- if( MODEL==SUPERPAC || MODEL==GROBDA)
+ if( MODEL==SUPERPAC || MODEL==GROBDA || MODEL==PACNPAL)
SCROLL <= 8'd0;
else if ( MCPU_SCRWE )
SCROLL <= MCPU_ADRS[10:3];
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl.v b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl.v
index 3314d828..f3016847 100644
--- a/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl.v
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl.v
@@ -42,13 +42,12 @@ reg [9:0] pSTKTRG12;
reg [2:0] pCSTART12;
reg bUpdate;
-reg bIOMode;
-
-parameter [2:0] SUPERPAC=3'd5;
+reg [1:0] bIOMode;
+`include "param.v"
assign OUT = { 4'b1111, outr };
-assign IsMOTOS = bIOMode;
+assign IsMOTOS = bIOMode == 1;
// Detect falling edges:
wire [11:0] iSTKTRG12 = ( STKTRG12 ^ pSTKTRG12 ) & STKTRG12;
@@ -60,13 +59,13 @@ BCDCONV creditsBCD( credits, CREDIT_ONES, CREDIT_TENS );
always @ ( posedge CLK ) begin
if ( ENABLE ) begin
if ( ADRS[5] ) begin
- if ( WR ) memc[ADRS[4:0]] <= IN;
+ if ( WR ) memc[ADRS[4:0]] <= IN[3:0];
outr <= memc[ADRS[4:0]];
end else if ( ADRS[4] ) begin
- if ( WR ) memb[ADRS[3:0]] <= IN;
+ if ( WR ) memb[ADRS[3:0]] <= IN[3:0];
outr <= memb[ADRS[3:0]];
end else begin
- if ( WR ) mema[ADRS[3:0]] <= IN;
+ if ( WR ) mema[ADRS[3:0]] <= IN[3:0];
outr <= mema[ADRS[3:0]];
end
end
@@ -78,14 +77,28 @@ always @ ( posedge CLK ) begin
credits <= 0;
end else begin
if ( UPDATE & (~bUpdate) ) begin
- if ( mema[4'h8] == 4'h8 || MODEL==SUPERPAC )
- bIOMode <= 1'b1; // Is running "Motos" ?
+ if (MODEL == PACNPAL)
+ bIOMode <= 2'd3;
+ else if (MODEL == GROBDA)
+ bIOMode <= 2'd2;
+ else if ( mema[4'h8] == 4'h8 || MODEL==SUPERPAC)
+ bIOMode <= 2'd1; // Is running "Motos" ?
- if ( bIOMode ) begin
- `include "ioctrl_1.v"
+ if ( bIOMode == 3) begin
+ `include "ioctrl_1a.v"
+ `include "ioctrl_2b.v"
+ end
+ else if ( bIOMode == 2) begin
+ `include "ioctrl_0a.v"
+ `include "ioctrl_1b.v"
+ end
+ else if ( bIOMode == 1) begin
+ `include "ioctrl_1a.v"
+ `include "ioctrl_1b.v"
end
else begin
- `include "ioctrl_0.v"
+ `include "ioctrl_0a.v"
+ `include "ioctrl_0b.v"
end
pCSTART12 <= CSTART12;
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_0.v b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_0a.v
similarity index 56%
rename from Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_0.v
rename to Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_0a.v
index f86ec387..d2a60bd7 100644
--- a/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_0.v
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_0a.v
@@ -12,21 +12,21 @@
if ( iCSTART12[2] & ( credits < 99 ) ) begin
credit_add = 8'h01;
- credits = credits + 1;
+ credits = credits + 1'd1;
end
if ( mema[4'h9] == 0 ) begin
if ( ( credits >= 2 ) & iCSTART12[1] ) begin
credit_sub = 8'h02;
- credits = credits - 2;
+ credits = credits - 2'd2;
end else if ( ( credits >= 1 ) & iCSTART12[0] ) begin
credit_sub = 8'h01;
- credits = credits - 1;
+ credits = credits - 1'd1;
end
end
mema[4'h0] <= credit_add;
- mema[4'h1] <= credit_sub | {7'd0,CSTART12[0]};
+ mema[4'h1] <= credit_sub | {3'd0,CSTART12[0]};
mema[4'h2] <= CREDIT_TENS;
mema[4'h3] <= CREDIT_ONES;
mema[4'h4] <= STKTRG12[3:0];
@@ -60,48 +60,3 @@
default:;
endcase
-
-
- case ( memb[4'h8] )
-
- 4'h1,4'h3: begin
- memb[4'h0] <= 0;
- memb[4'h1] <= 0;
- memb[4'h2] <= 0;
- memb[4'h3] <= 0;
- memb[4'h4] <= 0;
- memb[4'h5] <= 0;
- memb[4'h6] <= 0;
- memb[4'h7] <= 0;
- end
-
- 4'h4: begin
- memb[4'h0] <= DIPSW[11: 8]; // (P0) DSW1 Mappy
- memb[4'h1] <= DIPSW[15:12];
-
- memb[4'h2] <= DIPSW[ 3: 0]; // (P1) DSW0
- memb[4'h4] <= DIPSW[ 7: 4];
-
- memb[4'h5] <={DIPSW[15:14],STKTRG12[ 5],iSTKTRG12[ 5]}; // (P2) DSW1 Druaga/DigDug2
- memb[4'h6] <= DIPSW[23:20]; // IsMappy ? DIPSW[19:16] : DIPSW[11:8]
-
- memb[4'h7] <={DIPSW[19:18],STKTRG12[11],iSTKTRG12[11]}; // (P3) DSW2
-
- memb[4'h3] <= 0;
- end
-
- 4'h5: begin
- memb[4'h0] <= 4'h0;
- memb[4'h1] <= 4'h8;
- memb[4'h2] <= 4'h4;
- memb[4'h3] <= 4'h6;
- memb[4'h4] <= 4'hE;
- memb[4'h5] <= 4'hD;
- memb[4'h6] <= 4'h9;
- memb[4'h7] <= 4'hD;
- end
-
- default:;
-
- endcase
-
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_0b.v b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_0b.v
new file mode 100644
index 00000000..2a66fd66
--- /dev/null
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_0b.v
@@ -0,0 +1,49 @@
+//------------------------------------------
+// I/O Chip for "Mappy/Druaga/DigDug2"
+//
+// Copyright (c) 2007,19 MiSTer-X
+//------------------------------------------
+
+ case ( memb[4'h8] )
+
+ 4'h1,4'h3: begin
+ memb[4'h0] <= 0;
+ memb[4'h1] <= 0;
+ memb[4'h2] <= 0;
+ memb[4'h3] <= 0;
+ memb[4'h4] <= 0;
+ memb[4'h5] <= 0;
+ memb[4'h6] <= 0;
+ memb[4'h7] <= 0;
+ end
+
+ 4'h4: begin
+ memb[4'h0] <= DIPSW[11: 8]; // (P0) DSW1 Mappy
+ memb[4'h1] <= DIPSW[15:12];
+
+ memb[4'h2] <= DIPSW[ 3: 0]; // (P1) DSW0
+ memb[4'h4] <= DIPSW[ 7: 4];
+
+ memb[4'h5] <={DIPSW[15:14],STKTRG12[ 5],iSTKTRG12[ 5]}; // (P2) DSW1 Druaga/DigDug2
+ memb[4'h6] <= DIPSW[23:20]; // IsMappy ? DIPSW[19:16] : DIPSW[11:8]
+
+ memb[4'h7] <={DIPSW[19:18],STKTRG12[11],iSTKTRG12[11]}; // (P3) DSW2
+
+ memb[4'h3] <= 0;
+ end
+
+ 4'h5: begin
+ memb[4'h0] <= 4'h0;
+ memb[4'h1] <= 4'h8;
+ memb[4'h2] <= 4'h4;
+ memb[4'h3] <= 4'h6;
+ memb[4'h4] <= 4'hE;
+ memb[4'h5] <= 4'hD;
+ memb[4'h6] <= 4'h9;
+ memb[4'h7] <= 4'hD;
+ end
+
+ default:;
+
+ endcase
+
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_1.v b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_1a.v
similarity index 75%
rename from Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_1.v
rename to Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_1a.v
index 1e78daeb..8f963e69 100644
--- a/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_1.v
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_1a.v
@@ -25,21 +25,21 @@
if ( iCSTART12[2] & ( credits < 99 ) ) begin
credit_add = 8'h01;
- credits = credits + 1;
+ credits = credits + 1'd1;
end
if ( mema[4'h9] == 0 ) begin
if ( ( credits >= 2 ) && iCSTART12[1] ) begin
credit_sub = 8'h02;
- credits = credits - 2;
+ credits = credits - 2'd2;
end else if ( ( credits >= 1 ) && iCSTART12[0] ) begin
credit_sub = 8'h01;
- credits = credits - 1;
+ credits = credits - 1'd1;
end
end
mema[4'h0] <= credit_add;
- mema[4'h1] <= credit_sub | {7'd0,CSTART12[0]};
+ mema[4'h1] <= credit_sub | {3'd0,CSTART12[0]};
mema[4'h2] <= CREDIT_TENS;
mema[4'h3] <= CREDIT_ONES;
mema[4'h4] <= STKTRG12[3:0];
@@ -57,28 +57,3 @@
default:;
endcase
-
-
- case ( memb[4'h8] )
-
- 4'h8: begin
- memb[4'h0] <= 4'h6;
- memb[4'h1] <= 4'h9;
- end
-
- 4'h9: begin
- memb[4'h2] <= DIPSW[3:0];
- memb[4'h4] <= DIPSW[7:4];
- memb[4'h6] <= DIPSW[15:12];
-
- memb[4'h0] <= 0;
- memb[4'h1] <= 0;
- memb[4'h3] <= 0;
- memb[4'h5] <= 0;
- memb[4'h7] <= 0;
- end
-
- default:;
-
- endcase
-
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_1b.v b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_1b.v
new file mode 100644
index 00000000..335048c4
--- /dev/null
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_1b.v
@@ -0,0 +1,29 @@
+//------------------------------------------
+// I/O Chip for "Motos"
+// Namco 56xx
+//
+// Copyright (c) 2007,19 MiSTer-X
+//------------------------------------------
+ case ( memb[4'h8] )
+
+ 4'h8: begin
+ memb[4'h0] <= 4'h6;
+ memb[4'h1] <= 4'h9;
+ end
+
+ 4'h9: begin
+ memb[4'h2] <= DIPSW[3:0];
+ memb[4'h4] <= DIPSW[7:4];
+ memb[4'h6] <= DIPSW[15:12];
+
+ memb[4'h0] <= DIPSW[19:16];
+ memb[4'h1] <= DIPSW[23:20];
+ memb[4'h3] <= 0;
+ memb[4'h5] <= 0;
+ memb[4'h7] <= 0;
+ end
+
+ default:;
+
+ endcase
+
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_2b.v b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_2b.v
new file mode 100644
index 00000000..20db8bc5
--- /dev/null
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/ioctrl_2b.v
@@ -0,0 +1,25 @@
+//------------------------------------------
+// I/O Chip for "Pac & Pal"
+// Namco 59xx
+//
+// Copyright (c) 2007,19 MiSTer-X
+// Copyright (c) 2022 Slingshot
+//------------------------------------------
+ case ( memb[4'h8] )
+
+ 4'h3: begin
+ memb[4'h4] <= DIPSW[3:0]; //0
+ memb[4'h5] <= DIPSW[23:20]; //2
+ memb[4'h6] <= DIPSW[19:16]; //1
+ memb[4'h7] <= DIPSW[15:12]; //3
+
+ memb[4'h0] <= 0;
+ memb[4'h1] <= 0;
+ memb[4'h2] <= 0;
+ memb[4'h3] <= 0;
+ end
+
+ default:;
+
+ endcase
+
diff --git a/Arcade_MiST/Namco Super Pacman Hardware/rtl/param.v b/Arcade_MiST/Namco Super Pacman Hardware/rtl/param.v
new file mode 100644
index 00000000..dd871ffb
--- /dev/null
+++ b/Arcade_MiST/Namco Super Pacman Hardware/rtl/param.v
@@ -0,0 +1,3 @@
+localparam [2:0] SUPERPAC=3'd5;
+localparam [2:0] GROBDA=3'd6;
+localparam [2:0] PACNPAL=3'd7;
\ No newline at end of file
diff --git a/Arcade_MiST/Sega System 1 Hardware/README.txt b/Arcade_MiST/Sega System 1 Hardware/README.txt
index f8755dbe..c02b603f 100644
--- a/Arcade_MiST/Sega System 1 Hardware/README.txt
+++ b/Arcade_MiST/Sega System 1 Hardware/README.txt
@@ -18,7 +18,9 @@
-- Left Ctrl : Trig1
-- Left Alt : Trig2
-- SPACE : Trig3
+--
---------------------------------------------------------------------------------
+-- Original by:
--
-- Arcade: SEGA System 1 for MiSTer by MiSTer-X
-- 07 January 2020
@@ -30,48 +32,50 @@
-- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org)
---------------------------------------------------------------------------------
--
--- Keyboard inputs :
+-- System2 based on the work of Blackwine
--
--- F2 : Coin + Start 2 players
--- F1 : Coin + Start 1 player
--- UP,DOWN,LEFT,RIGHT arrows : Movements
--- SPACE : Trig1
--- CTRL : Trig2
--- ALT : Trig3
--
--- MAME/IPAC/JPAC Style Keyboard inputs:
--- 5 : Coin 1
--- 6 : Coin 2
--- 1 : Start 1 Player
--- 2 : Start 2 Players
--- R,F,D,G : Player 2 Movements
--- A : Player 2 Trig1
--- S : Player 2 Trig2
--- Q : Player 2 Trig3
+-- Games currently supported:
--
--- Joystick support.
+-- SYSTEM1
+-- -------
--
----------------------------------------------------------------------------------
--- 2020/01/08 Impl. Trigger 3 (for SEGA Ninja)
----------------------------------------------------------------------------------
-
- *** Attention ***
-
-ROM is not included. In order to use this arcade, you need to provide a correct ROM file.
-
-Find this zip file somewhere. You need to find the file exactly as required.
-Do not rename other zip files even if they also represent the same game - they are not compatible!
-The name of zip is taken from M.A.M.E. project, so you can get more info about
-hashes and contained files there.
-
-
-How to install:
- 0. Update MiSTer binary to v200106 or later
- 1. copy releases/*.mra to /media/fat/_Arcade
- 2. copy releases/*.rbf to /media/fat/_Arcade/cores
- 3. copy ROM zip files to /media/fat/_Arcade/mame
-
-
-Be sure to use the MRA file in "releases" of this repository.
-It does not guarantee the operation when using other MRA files.
-
+-- 4-D Warriors
+-- Block Gal
+-- Brain
+-- Bullfight
+-- Flicky
+-- Gardia
+-- Heavy Metal
+-- I'm Sorry
+-- Mister Viking
+-- My Hero
+-- Pitfall II
+-- Rafflesia
+-- Regulus
+-- Sega Ninja
+-- Spatter
+-- Star Jacker
+-- SWAT
+-- TeddyBoy Blues
+-- Up'n Down
+-- Water Match
+-- Wonder Boy
+--
+-- SYSTEM2
+-- -------
+--
+-- Choplifter
+-- Toki no Senshi - Chrono Soldier
+-- Ufo Senshi Yohko Chan
+-- Wonder Boy in Monster Land
+--
+--
+-- Currently not supported:
+--
+-- Noboranka / Zippy Bug (bootleg)
+-- DakkoChan House
+-- 119
+-- Senryaku Game Bopeep
+-- Shooting Master
+-- Warball
diff --git a/Arcade_MiST/Sega System 1 Hardware/Segasys1.qsf b/Arcade_MiST/Sega System 1 Hardware/Segasys1.qsf
index 13b26afb..8db10cb4 100644
--- a/Arcade_MiST/Sega System 1 Hardware/Segasys1.qsf
+++ b/Arcade_MiST/Sega System 1 Hardware/Segasys1.qsf
@@ -41,7 +41,7 @@
# ========================
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL
-set_global_assignment -name LAST_QUARTUS_VERSION "13.1 SP4.26"
+set_global_assignment -name LAST_QUARTUS_VERSION 13.1
set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl"
# Pin & Location Assignments
@@ -154,7 +154,7 @@ set_global_assignment -name USE_CONFIGURATION_DEVICE OFF
# SignalTap II Assignments
# ========================
set_global_assignment -name ENABLE_SIGNALTAP OFF
-set_global_assignment -name USE_SIGNALTAP_FILE output_files/dect.stp
+set_global_assignment -name USE_SIGNALTAP_FILE output_files/dect2.stp
# Power Estimation Assignments
# ============================
@@ -224,6 +224,9 @@ set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
# ------------------------
set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS ON
set_global_assignment -name SMART_RECOMPILE ON
+set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON
+set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA ON
+set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA ON
set_global_assignment -name SYSTEMVERILOG_FILE rtl/Segasys1_MiST.sv
set_global_assignment -name VERILOG_FILE rtl/HVGEN.v
set_global_assignment -name VERILOG_FILE rtl/SEGASYS1.v
@@ -233,6 +236,7 @@ set_global_assignment -name VERILOG_FILE rtl/SEGASYS1_SOUND.v
set_global_assignment -name VERILOG_FILE rtl/SEGASYS1_PRGDEC.v
set_global_assignment -name VERILOG_FILE rtl/SEGASYS1_MAIN.v
set_global_assignment -name VERILOG_FILE rtl/parts.v
+set_global_assignment -name VERILOG_FILE rtl/MC8123.v
set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram.sv
set_global_assignment -name VERILOG_FILE rtl/pll_mist.v
set_global_assignment -name VERILOG_FILE rtl/z80ip.v
@@ -244,7 +248,5 @@ set_global_assignment -name QIP_FILE ../../common/mist/mist.qip
set_global_assignment -name SIGNALTAP_FILE output_files/bg.stp
set_global_assignment -name SIGNALTAP_FILE output_files/spr.stp
set_global_assignment -name SIGNALTAP_FILE output_files/dect.stp
-set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON
-set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA ON
-set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA ON
+set_global_assignment -name SIGNALTAP_FILE output_files/dect2.stp
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
\ No newline at end of file
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/4-D Warriors.mra b/Arcade_MiST/Sega System 1 Hardware/meta/4-D Warriors.mra
deleted file mode 100644
index 6fe176fc..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/4-D Warriors.mra
+++ /dev/null
@@ -1,63 +0,0 @@
-
- 4D Warriors
- 0216
- 4dwarrio
- 202001100000
- 1985
- Sega
- Shmup
- segasys1
-
-
-
-
-
-
- 04
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 05
-05 05 05 05 05 05 05 05 05 05 05 05 05 05 05 06
-06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
-07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 08
-08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 09
-09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 0A
-0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0B
-0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0C
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/4D Warriors (315-5162).mra b/Arcade_MiST/Sega System 1 Hardware/meta/4D Warriors (315-5162).mra
new file mode 100644
index 00000000..3a4fd4b4
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/4D Warriors (315-5162).mra
@@ -0,0 +1,113 @@
+
+ 4-D Warriors (315-5162)
+ 4dwarrio
+ segasys1
+ 0229
+ 1985
+ Coreland / Sega
+ 2
+ 8-way
+ horizontal
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+ 04
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+
+ 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 05
+ 05 05 05 05 05 05 05 05 05 05 05 05 05 05 05 06
+ 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+ 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 08
+ 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 09
+ 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 0a
+ 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0b
+ 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0c
+
+
+
+
+ 00 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 D3 00 00 A0 00 20 00 00 C0 17 00 03 00 02
+
+
+ 20210629000000
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Block Gal.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Block Gal.mra
new file mode 100644
index 00000000..8363da82
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Block Gal.mra
@@ -0,0 +1,98 @@
+
+ Block Gal (MC-8123B, 317-0029)
+ blockgal
+ segasys1
+ 0229
+ 1987
+ Sega / Vic Tokai
+ 2
+ 4-way
+ vertical/cw
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+ 00
+
+
+
+
+
+
+ 32
+
+
+
+ 00 00 00 00 00 FF 00 02
+ 00 02 00 01 00 FF 00 00
+ 00 00 C0 62 00 03 00 01
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Brain.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Brain.mra
new file mode 100644
index 00000000..6c0497d9
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Brain.mra
@@ -0,0 +1,70 @@
+
+ Brain
+ 0229
+ brain
+ 20210629000000
+ 1986
+ Coreland / Sega
+ 2
+ 8-way
+ horizontal
+ Shooter
+ segasys1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ff
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Bull Fight (315-5056).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Bull Fight (315-5056).mra
new file mode 100644
index 00000000..931f3c40
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Bull Fight (315-5056).mra
@@ -0,0 +1,120 @@
+
+ Bullfight (315-5065)
+ bullfgt
+ segasys1
+ 0229
+ 1984
+ Coreland / Sega
+ 2
+ 8-way
+ horizontal
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ a0 a8 20 28 80 a0 00 20
+ 20 28 00 08 20 28 00 08
+ a0 a8 20 28 08 28 00 20
+ 88 08 a8 28 88 08 a8 28
+ a0 a8 20 28 20 28 00 08
+ 28 a8 20 a0 20 28 00 08
+ a0 a8 20 28 08 28 00 20
+ 88 08 a8 28 88 08 a8 28
+ 28 a8 20 a0 a0 a8 20 28
+ 88 08 a8 28 80 a0 00 20
+ 28 a8 20 a0 08 28 00 20
+ 28 a8 20 a0 80 a0 00 20
+ 20 28 00 08 20 28 00 08
+ 88 08 a8 28 20 28 00 08
+ 08 28 00 20 80 a0 00 20
+ 08 28 00 20 88 08 a8 28
+
+
+
+ 00
+
+
+
+ 00 00 00 00 00 FF 00 02
+ 00 02 00 01 00 FF 00 00
+ 00 00 D3 00 00 3C 00 49
+ 00 00 C0 14 00 03 00 02
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Bullfight.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Bullfight.mra
deleted file mode 100644
index 5ff2da74..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Bullfight.mra
+++ /dev/null
@@ -1,61 +0,0 @@
-
- Bull Fight (315-5065)
- 0217
- bullfgt
- 202001070000
- 1984
- Coreland / Sega
- Sport
- segasys1
-
-
-
-
-
-
- 00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-a0 a8 20 28 80 a0 00 20 20 28 00 08 20 28 00 08
-a0 a8 20 28 08 28 00 20 88 08 a8 28 88 08 a8 28
-a0 a8 20 28 20 28 00 08 28 a8 20 a0 20 28 00 08
-a0 a8 20 28 08 28 00 20 88 08 a8 28 88 08 a8 28
-28 a8 20 a0 a0 a8 20 28 88 08 a8 28 80 a0 00 20
-28 a8 20 a0 08 28 00 20 28 a8 20 a0 80 a0 00 20
-20 28 00 08 20 28 00 08 88 08 a8 28 20 28 00 08
-08 28 00 20 80 a0 00 20 08 28 00 20 88 08 a8 28
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Choplifter (unprotected).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Choplifter (unprotected).mra
new file mode 100644
index 00000000..73e9e0f3
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Choplifter (unprotected).mra
@@ -0,0 +1,74 @@
+
+ Choplifter (unprotected)
+ 0229
+ chopliftu
+ 20210706000000
+ 1985
+ Sega
+ Shooter
+ segasys1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 41
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Flicky (128k Version, 315-5051).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Flicky (128k Version, 315-5051).mra
new file mode 100644
index 00000000..e2d11438
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Flicky (128k Version, 315-5051).mra
@@ -0,0 +1,114 @@
+
+ Flicky (128k Version, 315-5051)
+ flicky
+ segasys1
+ 0229
+ 1984
+ Sega
+ 2
+ 4-way
+ horizontal
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 08 88 00 80 a0 80 a8 88
+ 80 00 a0 20 88 80 08 00
+ a0 80 a8 88 28 08 20 00
+ 28 08 20 00 a0 80 a8 88
+ 08 88 00 80 80 00 a0 20
+ 80 00 a0 20 88 80 08 00
+ 28 08 20 00 28 08 20 00
+ 28 08 20 00 88 80 08 00
+ 08 88 00 80 a8 88 28 08
+ a8 88 28 08 80 00 a0 20
+ 28 08 20 00 88 80 08 00
+ a8 88 28 08 88 80 08 00
+ 08 88 00 80 80 00 a0 20
+ a8 88 28 08 80 00 a0 20
+ 28 08 20 00 28 08 20 00
+ 08 88 00 80 88 80 08 00
+
+
+
+ 00
+
+
+
+ 00 8F FF FF 00 FF 00 02
+ 00 02 00 01 00 FF 00 00
+ 00 00 E7 00 00 31 00 41
+ 00 00 C0 D5 00 03 00 00
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Flicky.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Flicky.mra
deleted file mode 100644
index 07e5f027..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Flicky.mra
+++ /dev/null
@@ -1,59 +0,0 @@
-
- Flicky (128k Version, 315-5051)
- 0217
- flicky
- 202001070000
- 1984
- Sega
- Maze / Cat and Mouse
- Platform
- segasys1
-
-
-
-
-
-
- 00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-08 88 00 80 a0 80 a8 88 80 00 a0 20 88 80 08 00
-a0 80 a8 88 28 08 20 00 28 08 20 00 a0 80 a8 88
-08 88 00 80 80 00 a0 20 80 00 a0 20 88 80 08 00
-28 08 20 00 28 08 20 00 28 08 20 00 88 80 08 00
-08 88 00 80 a8 88 28 08 a8 88 28 08 80 00 a0 20
-28 08 20 00 88 80 08 00 a8 88 28 08 88 80 08 00
-08 88 00 80 80 00 a0 20 a8 88 28 08 80 00 a0 20
-28 08 20 00 28 08 20 00 08 88 00 80 88 80 08 00
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Gardia (317-0006).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Gardia (317-0006).mra
new file mode 100644
index 00000000..a7296f2a
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Gardia (317-0006).mra
@@ -0,0 +1,89 @@
+
+ Gardia (317-0006)
+ 0229
+ gardia
+ 1986
+ Coreland / Sega
+ 2
+ 8-way
+ vertical
+ Shooter
+ segasys1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 02
+
+
+
+
+ ff
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 44 14 15 15 51 41 41 14 10 50 15 55 54 05 04 41
+ 51 01 05 10 55 51 05 05 54 11 45 05 04 14 10 55
+ 01 41 51 05 55 04 45 41 55 14 45 10 04 45 55 50
+ 40 00 11 45 15 00 01 00 40 00 01 45 11 00 45 00
+ 44 54 40 04 05 15 15 10 15 04 01 05 50 11 00 44
+ 44 04 04 01 50 05 51 00 45 44 50 15 54 40 41 45
+ 40 10 14 15 40 51 50 50 45 00 10 15 05 51 50 44
+ 01 15 40 04 01 44 50 44 50 50 50 10 44 04 40 04
+
+ 0c 01 12 0b 08 17 15 11 00 17 16 00 15 0f 0d 13
+ 15 14 14 0c 0d 0a 14 00 0e 12 06 12 03 05 05 14
+ 14 0d 08 00 14 12 04 0e 08 05 11 06 16 0a 00 15
+ 00 01 06 0b 11 09 11 03 09 15 00 04 10 01 0d 11
+ 15 05 03 07 02 10 12 0d 06 13 0b 17 03 14 03 02
+ 12 0a 12 17 13 17 03 0f 00 0a 05 0c 00 00 0b 16
+ 08 0e 08 06 01 0f 07 0b 02 11 0a 0f 08 15 0a 00
+ 02 06 01 01 03 01 0c 12 10 05 00 0f 11 0f 0a 14
+
+
+ 20210629000000
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Heavy Metal (315-5135).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Heavy Metal (315-5135).mra
new file mode 100644
index 00000000..5690e9a3
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Heavy Metal (315-5135).mra
@@ -0,0 +1,85 @@
+
+ Heavy Metal (315-5135)
+ 0229
+ hvymetal
+ 1985
+ Sega
+ 2
+ 8-way
+ horizontal
+ Shooter
+ segasys1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 88 a8 80 a0 a0 80 a8 88 88 a8 80 a0 88 80 08 00
+ a0 80 a8 88 88 a8 80 a0 88 a8 80 a0 88 80 08 00
+ a0 80 a8 88 88 80 08 00 88 80 08 00 88 80 08 00
+ a0 80 a8 88 88 80 08 00 88 80 08 00 28 08 a8 88
+ a0 20 a8 28 88 a8 80 a0 a0 20 a8 28 88 a8 80 a0
+ a0 20 a8 28 88 a8 80 a0 88 a8 80 a0 28 08 a8 88
+ 28 a8 08 88 a0 20 a8 28 a0 20 a8 28 28 a8 08 88
+ 28 a8 08 88 a0 20 a8 28 28 08 a8 88 28 a8 08 88
+
+
+
+
+ 20210623000000
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/I'm Sorry (US, 315-5110).mra b/Arcade_MiST/Sega System 1 Hardware/meta/I'm Sorry (US, 315-5110).mra
new file mode 100644
index 00000000..0f980ac9
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/I'm Sorry (US, 315-5110).mra
@@ -0,0 +1,122 @@
+
+ I'm Sorry (315-5110, US)
+ USA
+ no
+ no
+ 315-5110
+
+ Sega System 1
+
+ 1985
+ Sega
+ Maze
+
+ imsorry
+ imsorry
+ 0229
+ segasys1
+
+
+ 15kHz
+ horizontal
+
+
+ 2 (alternating)
+ 8-way
+
+ 2
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 88 08 80 00 00 20 80 a0 00 20 80 a0 88 08 80 00
+ 88 08 a8 28 00 20 80 a0 00 20 80 a0 88 08 a8 28
+ 00 20 80 a0 08 00 88 80 00 20 80 a0 20 28 a0 a8
+ 20 28 a0 a8 00 20 80 a0 20 28 a0 a8 88 08 a8 28
+ 88 08 80 00 08 00 88 80 08 00 88 80 88 08 80 00
+ 08 28 00 20 08 28 00 20 88 08 80 00 08 28 00 20
+ 08 28 00 20 08 00 88 80 08 28 00 20 20 28 a0 a8
+ 20 28 a0 a8 08 28 00 20 20 28 a0 a8 08 28 00 20
+
+
+
+
+
+ 00 1F FF FF 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 C0 17 00 03 00 02 00 00 D3 00 00 A0 00 20
+
+
+
+
+
+
+
+
+ 20210430005030
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/I'm Sorry.mra b/Arcade_MiST/Sega System 1 Hardware/meta/I'm Sorry.mra
deleted file mode 100644
index bc1bebe6..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/I'm Sorry.mra
+++ /dev/null
@@ -1,55 +0,0 @@
-
- I'm Sorry (315-5110, US)
- 0217
- imsorry
- 202001070000
- 1985
- Coreland / Sega
- Maze
- segasys1
-
-
-
-
-
-
- 00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-88 08 80 00 00 20 80 a0 00 20 80 a0 88 08 80 00
-88 08 a8 28 00 20 80 a0 00 20 80 a0 88 08 a8 28
-00 20 80 a0 08 00 88 80 00 20 80 a0 20 28 a0 a8
-20 28 a0 a8 00 20 80 a0 20 28 a0 a8 88 08 a8 28
-88 08 80 00 08 00 88 80 08 00 88 80 88 08 80 00
-08 28 00 20 08 28 00 20 88 08 80 00 08 28 00 20
-08 28 00 20 08 00 88 80 08 28 00 20 20 28 a0 a8
-20 28 a0 a8 08 28 00 20 20 28 a0 a8 08 28 00 20
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Mister Viking (315-5041).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Mister Viking (315-5041).mra
new file mode 100644
index 00000000..b7b70872
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Mister Viking (315-5041).mra
@@ -0,0 +1,122 @@
+
+ Mister Viking (315-5041)
+ mrviking
+ segasys1
+ 0229
+ 1984
+ Sega
+ 2
+ 8-way
+ vertical/ccw
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 06
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 28 a8 08 88 88 80 08 00
+ 88 08 80 00 88 80 08 00
+ 28 08 a8 88 28 a8 08 88
+ 88 08 80 00 88 08 80 00
+ 28 08 a8 88 88 80 08 00
+ 88 80 08 00 28 a8 08 88
+ a0 80 a8 88 28 08 a8 88
+ a0 80 a8 88 a0 80 a8 88
+ 88 80 08 00 88 80 08 00
+ 88 08 80 00 88 80 08 00
+ a0 80 20 00 28 08 a8 88
+ a0 80 20 00 88 08 80 00
+ 28 08 a8 88 a0 80 20 00
+ a0 80 20 00 a0 80 20 00
+ a0 80 a8 88 28 08 a8 88
+ a0 80 20 00 a0 80 a8 88
+
+
+
+
+ 00 00 00 FF 00 FF 00 02
+ 00 02 00 01 00 FF 00 00
+ 00 00 D4 2C 00 15 59 47
+ 00 00 D3 00 00 15 00 01
+ 00 00 C0 86 00 03 00 02
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Mister Viking.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Mister Viking.mra
deleted file mode 100644
index 03def992..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Mister Viking.mra
+++ /dev/null
@@ -1,59 +0,0 @@
-
- Mister Viking (315-5041)
- 0217
- mrviking
- 202001070000
- 1984
- Sega
- Fighter / Warriors
- segasys1
-
-
-
-
-
-
-
- 06
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-28 a8 08 88 88 80 08 00 88 08 80 00 88 80 08 00
-28 08 a8 88 28 a8 08 88 88 08 80 00 88 08 80 00
-28 08 a8 88 88 80 08 00 88 80 08 00 28 a8 08 88
-a0 80 a8 88 28 08 a8 88 a0 80 a8 88 a0 80 a8 88
-88 80 08 00 88 80 08 00 88 08 80 00 88 80 08 00
-a0 80 20 00 28 08 a8 88 a0 80 20 00 88 08 80 00
-28 08 a8 88 a0 80 20 00 a0 80 20 00 a0 80 20 00
-a0 80 a8 88 28 08 a8 88 a0 80 20 00 a0 80 a8 88
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/My Hero (US, not Encrypted).mra b/Arcade_MiST/Sega System 1 Hardware/meta/My Hero (US, not Encrypted).mra
new file mode 100644
index 00000000..08341422
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/My Hero (US, not Encrypted).mra
@@ -0,0 +1,116 @@
+
+ My Hero
+ USA
+ no
+ no
+ not Encrypted
+
+ Sega System 1
+
+ 1985
+ Sega
+ Platform
+
+ myhero
+ myhero
+ 0229
+ segasys1
+
+
+ 15kHz
+ horizontal
+
+
+ 2 (alternating)
+ 8-way
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+ 00
+
+
+
+
+ 00 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 D3 00 00 3C 00 49 00 00 C0 17 00 03 00 00
+
+
+
+
+
+
+
+
+ 20210430005030
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/My Hero.mra b/Arcade_MiST/Sega System 1 Hardware/meta/My Hero.mra
deleted file mode 100644
index 83afb56e..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/My Hero.mra
+++ /dev/null
@@ -1,56 +0,0 @@
-
- My Hero (US, not encrypted)
- 0217
- myhero
- 202001060000
- 1985
- Coreland / Sega
- Fighter / Hero
- segasys1
-
-
-
-
-
-
-
- 00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Pitfall II.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Pitfall II.mra
index 540f5875..f2086eff 100644
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Pitfall II.mra
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Pitfall II.mra
@@ -1,57 +1,104 @@
- Pitfall II
- 0216
+ Pitfall II (315-5093)
pitfall2
- 202001100000
+ segasys1
+ 0229
1985
Sega
- Maze / Extra
- segasys1
-
-
-
-
-
-
-
+ 2
+ 8-way
+ horizontal
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ a0 80 a8 88 a0 80 a8 88 08 88 28 a8 28 a8 20 a0
+ a0 80 a8 88 a0 80 a8 88 a0 a8 20 28 a0 a8 20 28
+ a0 80 a8 88 20 00 a0 80 28 a8 20 a0 20 00 a0 80
+ a0 a8 20 28 a0 a8 20 28 28 a8 20 a0 a0 a8 20 28
+ 20 00 a0 80 80 88 a0 a8 80 88 a0 a8 80 88 a0 a8
+ a0 a8 20 28 a0 80 a8 88 80 88 a0 a8 28 a8 20 a0
+ 20 00 a0 80 80 88 a0 a8 80 88 a0 a8 20 00 a0 80
+ a0 a8 20 28 a0 80 a8 88 80 88 a0 a8 28 a8 20 a0
+
+
00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-a0 80 a8 88 a0 80 a8 88 08 88 28 a8 28 a8 20 a0
-a0 80 a8 88 a0 80 a8 88 a0 a8 20 28 a0 a8 20 28
-a0 80 a8 88 20 00 a0 80 28 a8 20 a0 20 00 a0 80
-a0 a8 20 28 a0 a8 20 28 28 a8 20 a0 a0 a8 20 28
-20 00 a0 80 80 88 a0 a8 80 88 a0 a8 80 88 a0 a8
-a0 a8 20 28 a0 80 a8 88 80 88 a0 a8 28 a8 20 a0
-20 00 a0 80 80 88 a0 a8 80 88 a0 a8 20 00 a0 80
-a0 a8 20 28 a0 80 a8 88 80 88 a0 a8 28 a8 20 a0
+ 00 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 D3 00 00 38 00 41 00 00 C0 00 00 04 00 00
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Rafflesia (315-5162).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Rafflesia (315-5162).mra
new file mode 100644
index 00000000..6123a86b
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Rafflesia (315-5162).mra
@@ -0,0 +1,116 @@
+
+ Rafflesia (315-5162)
+ raflesia
+ segasys1
+ 0229
+ 1986
+ Coreland / Sega
+ 2
+ 8-way
+ vertical/ccw
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+ 06
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+ 40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
+
+ 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 05
+ 05 05 05 05 05 05 05 05 05 05 05 05 05 05 05 06
+ 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+ 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 08
+ 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 09
+ 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 0a
+ 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0b
+ 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0c
+
+
+
+
+ 00 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 D3 00 00 50 00 4A 00 00 C0 17 00 03 00 02
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Rafflesia.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Rafflesia.mra
deleted file mode 100644
index d7c643fc..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Rafflesia.mra
+++ /dev/null
@@ -1,63 +0,0 @@
-
- Rafflesia
- 0216
- raflesia
- 202001100000
- 1986
- Sega
- Shmup
- segasys1
-
-
-
-
-
-
- 06
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-40 10 50 04 44 14 54 01 41 11 51 05 45 15 55 00
-04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 05
-05 05 05 05 05 05 05 05 05 05 05 05 05 05 05 06
-06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
-07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 08
-08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 09
-09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 0A
-0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0B
-0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0C
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Regulus (315-5033, Rev A).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Regulus (315-5033, Rev A).mra
new file mode 100644
index 00000000..1164bc3b
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Regulus (315-5033, Rev A).mra
@@ -0,0 +1,114 @@
+
+ Regulus (315-5033, Rev A.)
+ regulus
+ segasys1
+ 0229
+ 1983
+ Sega
+ 2
+ 8-way
+ vertical/ccw
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+ 06
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 28 08 a8 88 88 80 08 00 28 08 a8 88 28 a8 08 88
+ 88 80 08 00 88 08 80 00 88 08 80 00 28 a8 08 88
+ 28 08 a8 88 88 80 08 00 88 80 08 00 88 80 08 00
+ 88 08 80 00 88 08 80 00 a0 80 a8 88 a0 80 a8 88
+ 80 a0 00 20 28 08 a8 88 28 a8 08 88 28 08 a8 88
+ 80 a0 00 20 80 a0 00 20 28 a8 08 88 80 a0 00 20
+ a0 80 a8 88 28 08 a8 88 80 a0 00 20 a0 80 a8 88
+ a0 80 a8 88 80 a0 00 20 a0 80 a8 88 a0 80 a8 88
+
+
+
+
+ 00 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 CE 40 00 1E 41 4A 00 00 C0 E1 00 03 00 00
+ 00 00 CD 01 00 1E 00 00
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Regulus.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Regulus.mra
deleted file mode 100644
index bde38073..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Regulus.mra
+++ /dev/null
@@ -1,57 +0,0 @@
-
- Regulus
- 0216
- regulus
- 202001100000
- 1983
- Sega
- Shmup
- segasys1
-
-
-
-
-
-
- 06
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-28 08 a8 88 88 80 08 00 28 08 a8 88 28 a8 08 88
-88 80 08 00 88 08 80 00 88 08 80 00 28 a8 08 88
-28 08 a8 88 88 80 08 00 88 80 08 00 88 80 08 00
-88 08 80 00 88 08 80 00 a0 80 a8 88 a0 80 a8 88
-80 a0 00 20 28 08 a8 88 28 a8 08 88 28 08 a8 88
-80 a0 00 20 80 a0 00 20 28 a8 08 88 80 a0 00 20
-a0 80 a8 88 28 08 a8 88 80 a0 00 20 a0 80 a8 88
-a0 80 a8 88 80 a0 00 20 a0 80 a8 88 a0 80 a8 88
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Sega Ninja (315-5102).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Sega Ninja (315-5102).mra
new file mode 100644
index 00000000..cfae8712
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Sega Ninja (315-5102).mra
@@ -0,0 +1,117 @@
+
+ Sega Ninja (315-5102)
+ seganinj
+ segasys1
+ 0229
+ 1985
+ Sega
+ 2
+ 8-way
+ horizontal
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 88 a8 80 a0 88 08 80 00
+ 28 a8 08 88 a0 a8 80 88
+ a8 a0 28 20 a8 a0 28 20
+ 28 a8 08 88 a0 a8 80 88
+ 28 08 a8 88 28 08 a8 88
+ 28 a8 08 88 88 08 80 00
+ 28 08 a8 88 28 08 a8 88
+ 28 a8 08 88 a8 a0 28 20
+ 88 08 80 00 88 a8 80 a0
+ a0 a8 80 88 28 a8 08 88
+ a8 a0 28 20 88 a8 80 a0
+ a8 a0 28 20 28 a8 08 88
+ 28 08 a8 88 88 a8 80 a0
+ 28 08 a8 88 28 08 a8 88
+ 88 a8 80 a0 88 a8 80 a0
+ a8 a0 28 20 28 08 a8 88
+
+
+
+
+ 00 00 00 00 00 FF 00 02
+ 00 02 00 01 00 FF 00 00
+ 00 00 EF 00 00 31 00 43
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Sega Ninja.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Sega Ninja.mra
deleted file mode 100644
index 15968bf5..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Sega Ninja.mra
+++ /dev/null
@@ -1,56 +0,0 @@
-
- Sega Ninja (315-5102)
- 0217
- seganinj
- 20200107000000
- 1985
- Sega
- Fighter / Asian
- segasys1
-
-
-
-
-
-
-
-
- 00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-88 a8 80 a0 88 08 80 00 28 a8 08 88 a0 a8 80 88
-a8 a0 28 20 a8 a0 28 20 28 a8 08 88 a0 a8 80 88
-28 08 a8 88 28 08 a8 88 28 a8 08 88 88 08 80 00
-28 08 a8 88 28 08 a8 88 28 a8 08 88 a8 a0 28 20
-88 08 80 00 88 a8 80 a0 a0 a8 80 88 28 a8 08 88
-a8 a0 28 20 88 a8 80 a0 a8 a0 28 20 28 a8 08 88
-28 08 a8 88 88 a8 80 a0 28 08 a8 88 28 08 a8 88
-88 a8 80 a0 88 a8 80 a0 a8 a0 28 20 28 08 a8 88
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Spatter (315-5xxx).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Spatter (315-5xxx).mra
new file mode 100644
index 00000000..e6a12c80
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Spatter (315-5xxx).mra
@@ -0,0 +1,106 @@
+
+ Spatter (315-5xxx)
+ spatter
+ segasys1
+ 0229
+ 1984
+ Sega
+ 2
+ 8-way
+ horizontal
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 04
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 88 08 80 00 00 08 20 28 28 a8 08 88 28 a8 08 88
+ 28 20 a8 a0 28 20 a8 a0 88 08 80 00 88 08 80 00
+ 00 08 20 28 88 08 80 00 a0 80 20 00 80 88 00 08
+ 88 08 80 00 a0 80 20 00 88 08 80 00 28 20 a8 a0
+ 28 a8 08 88 80 88 00 08 80 88 00 08 00 08 20 28
+ 28 20 a8 a0 28 a8 08 88 00 08 20 28 80 a0 88 a8
+ 80 88 00 08 a0 80 20 00 80 a0 88 a8 a0 80 20 00
+ a0 80 20 00 80 a0 88 a8 28 20 a8 a0 00 08 20 28
+
+
+
+
+ 00 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 EF 00 00 31 00 52 00 00 C0 0B 00 03 00 00
+ 00 00 C0 0C 00 01 10 10
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Spatter.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Spatter.mra
deleted file mode 100644
index cddedf5c..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Spatter.mra
+++ /dev/null
@@ -1,56 +0,0 @@
-
- Spatter (315-5xxx)
- 0217
- spatter
- 202001070000
- 1984
- Sega
- Maze / Extra
- segasys1
-
-
-
-
-
-
-
- 04
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-88 08 80 00 00 08 20 28 28 a8 08 88 28 a8 08 88
-28 20 a8 a0 28 20 a8 a0 88 08 80 00 88 08 80 00
-00 08 20 28 88 08 80 00 a0 80 20 00 80 88 00 08
-88 08 80 00 a0 80 20 00 88 08 80 00 28 20 a8 a0
-28 a8 08 88 80 88 00 08 80 88 00 08 00 08 20 28
-28 20 a8 a0 28 a8 08 88 00 08 20 28 80 a0 88 a8
-80 88 00 08 a0 80 20 00 80 a0 88 a8 a0 80 20 00
-a0 80 20 00 80 a0 88 a8 28 20 a8 a0 00 08 20 28
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Star Jacker (alt).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Star Jacker (alt).mra
new file mode 100644
index 00000000..19621531
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Star Jacker (alt).mra
@@ -0,0 +1,126 @@
+
+ Star Jacker
+
+ no
+ no
+ Alt
+ Star Jacker
+ Sega System 1
+
+ 1983
+ Sega
+ Stern
+ Shooter - Vertical
+
+ starjacks
+ starjack
+ 0216
+ segasys1
+
+
+ 15kHz
+ vertical (ccw)
+ no
+
+ 2 (alternating)
+ 8-way
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 06
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+ 00
+
+
+
+
+ 01 0F FF FF 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 C1 02 00 23 00 52 00 00 C0 FB 00 04 00 00
+
+
+
+
+
+
+
+
+ 20210629000000
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Star Jacker.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Star Jacker.mra
new file mode 100644
index 00000000..ced59614
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Star Jacker.mra
@@ -0,0 +1,101 @@
+
+ Star Jacker (Sega)
+ starjack
+ segasys1
+ 0229
+ 1983
+ Sega
+ 2
+ 8-way
+ vertical/ccw
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 06
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+ 00
+
+
+
+ 01 0F FF FF 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 C0 E1 00 1E 00 52 00 00 C0 DB 00 03 00 03
+
+
+
+ 20210629000000
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Starjacker.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Starjacker.mra
deleted file mode 100644
index 09ccf3f9..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Starjacker.mra
+++ /dev/null
@@ -1,60 +0,0 @@
-
- Star Jacker
- 0216
- starjack
- 202001100000
- 1983
- Sega
- Shmup
- segasys1
-
-
-
-
-
-
- 06
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Swat (315-5048).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Swat (315-5048).mra
new file mode 100644
index 00000000..f6703e3a
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Swat (315-5048).mra
@@ -0,0 +1,107 @@
+
+ SWAT (315-5048)
+ swat
+ segasys1
+ 0229
+ 1984
+ Coreland / Sega
+ 2
+ 8-way
+ vertical/ccw
+ World
+
+
+
+
+
+
+
+
+
+
+
+ 06
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 88 08 80 00 a0 a8 80 88 88 08 80 00 88 a8 80 a0
+ a0 80 20 00 88 08 80 00 a0 a8 80 88 88 08 80 00
+ 28 20 a8 a0 a0 a8 80 88 88 a8 80 a0 28 20 a8 a0
+ a0 80 20 00 a0 a8 80 88 28 20 a8 a0 a0 a8 80 88
+ a0 80 20 00 a0 80 20 00 a0 20 80 00 88 a8 80 a0
+ a0 20 80 00 a0 20 80 00 a0 20 80 00 a0 20 80 00
+ a0 80 20 00 a0 80 20 00 88 a8 80 a0 28 20 a8 a0
+ a0 a8 80 88 a0 80 20 00 28 20 a8 a0 a0 a8 80 88
+
+
+
+
+ 00 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 D3 00 00 3C 00 49 00 00 C0 14 00 03 00 02
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Swat.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Swat.mra
deleted file mode 100644
index f301fed4..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Swat.mra
+++ /dev/null
@@ -1,60 +0,0 @@
-
- Swat (315-5048)
- 0217
- swat
- 202001070000
- 1984
- Coreland / Sega
- Shooter
- segasys1
-
-
-
-
-
- 06
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-88 08 80 00 a0 a8 80 88 88 08 80 00 88 a8 80 a0
-a0 80 20 00 88 08 80 00 a0 a8 80 88 88 08 80 00
-28 20 a8 a0 a0 a8 80 88 88 a8 80 a0 28 20 a8 a0
-a0 80 20 00 a0 a8 80 88 28 20 a8 a0 a0 a8 80 88
-a0 80 20 00 a0 80 20 00 a0 20 80 00 88 a8 80 a0
-a0 20 80 00 a0 20 80 00 a0 20 80 00 a0 20 80 00
-a0 80 20 00 a0 80 20 00 88 a8 80 a0 28 20 a8 a0
-a0 a8 80 88 a0 80 20 00 28 20 a8 a0 a0 a8 80 88
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/TeddyBoy Blues (315-5115, New Ver).mra b/Arcade_MiST/Sega System 1 Hardware/meta/TeddyBoy Blues (315-5115, New Ver).mra
new file mode 100644
index 00000000..62631b00
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/TeddyBoy Blues (315-5115, New Ver).mra
@@ -0,0 +1,109 @@
+
+ TeddyBoy Blues (315-5115, New Ver.)
+ teddybb
+ segasys1
+ 0229
+ 1985
+ Sega
+ 2
+ 8-way
+ horizontal
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 20 28 00 08 80 00 a0 20 20 28 00 08 a0 a8 20 28
+ 28 08 a8 88 a0 80 a8 88 a0 a8 20 28 a0 80 a8 88
+ 20 28 00 08 28 08 a8 88 a0 a8 20 28 a0 a8 20 28
+ a0 80 a8 88 28 08 a8 88 a0 a8 20 28 28 08 a8 88
+ 80 00 a0 20 80 00 a0 20 a0 20 a8 28 a0 a8 20 28
+ a0 20 a8 28 a0 80 a8 88 a0 80 a8 88 a0 80 a8 88
+ 80 00 a0 20 20 28 00 08 a0 a8 20 28 a0 20 a8 28
+ 80 00 a0 20 a0 80 a8 88 a0 a8 20 28 a0 20 a8 28
+
+
+
+
+
+
+ 55 00 00 00 00 FF 00 02
+ 00 02 00 01 00 FF 00 00
+ 00 00 C5 78 00 03 00 00
+ 00 00 EF 03 00 31 00 49
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/TeddyBoy Blues.mra b/Arcade_MiST/Sega System 1 Hardware/meta/TeddyBoy Blues.mra
deleted file mode 100644
index b4c337e8..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/TeddyBoy Blues.mra
+++ /dev/null
@@ -1,55 +0,0 @@
-
- TeddyBoy Blues (315-5115, New Ver.)
- 0217
- teddybb
- 202001070000
- 1985
- Sega
- Platform
- segasys1
-
-
-
-
-
-
-
- 00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-20 28 00 08 80 00 a0 20 20 28 00 08 a0 a8 20 28
-28 08 a8 88 a0 80 a8 88 a0 a8 20 28 a0 80 a8 88
-20 28 00 08 28 08 a8 88 a0 a8 20 28 a0 a8 20 28
-a0 80 a8 88 28 08 a8 88 a0 a8 20 28 28 08 a8 88
-80 00 a0 20 80 00 a0 20 a0 20 a8 28 a0 a8 20 28
-a0 20 a8 28 a0 80 a8 88 a0 80 a8 88 a0 80 a8 88
-80 00 a0 20 20 28 00 08 a0 a8 20 28 a0 20 a8 28
-80 00 a0 20 a0 80 a8 88 a0 a8 20 28 a0 20 a8 28
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Toki no Senshi - Chrono Soldier (MC-8123, 317-0040).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Toki no Senshi - Chrono Soldier (MC-8123, 317-0040).mra
new file mode 100644
index 00000000..c42aafb2
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Toki no Senshi - Chrono Soldier (MC-8123, 317-0040).mra
@@ -0,0 +1,61 @@
+
+ Toki no Senshi - Chrono Soldier (MC-8123, 317-0040)
+ 0229
+ tokisens
+ 20210706000000
+ 1985
+ Sega
+ Shooter
+ segasys1
+
+
+
+
+
+
+
+
+
+
+
+ 13
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Ufo Senshi Yohko Chan (MC-8123, 317-0064).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Ufo Senshi Yohko Chan (MC-8123, 317-0064).mra
new file mode 100644
index 00000000..e16a5058
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Ufo Senshi Yohko Chan (MC-8123, 317-0064).mra
@@ -0,0 +1,63 @@
+
+ Ufo Senshi Yohko Chan (MC-8123, 317-0064)
+ 0229
+ ufosensi
+ 20210706000000
+ 1985
+ Sega
+ Shooter
+ segasys1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 01
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Up'n Down.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Up'n Down.mra
index 9a7e9d72..e340e638 100644
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Up'n Down.mra
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Up'n Down.mra
@@ -1,41 +1,64 @@
- Up'n Down
- 0216
+ Up'n Down (315-5030)
upndown
- 202001100000
- 1984
- Sega
- Shmup
segasys1
-
-
-
-
-
-
- 06
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ 0229
+ 1983
+ Sega
+ 2
+ 8-way
+ vertical/ccw
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -43,16 +66,45 @@
-
+
+
+
+
+ 00
+
+
-08 88 00 80 a0 20 80 00 a8 a0 28 20 88 a8 80 a0
-88 80 08 00 28 08 a8 88 88 a8 80 a0 28 08 a8 88
-88 a8 80 a0 a0 20 80 00 a8 a0 28 20 a8 a0 28 20
-88 80 08 00 88 a8 80 a0 88 a8 80 a0 88 a8 80 a0
-a0 20 80 00 a0 20 80 00 08 88 00 80 28 08 a8 88
-88 a8 80 a0 88 80 08 00 88 a8 80 a0 28 08 a8 88
-88 a8 80 a0 88 a8 80 a0 88 a8 80 a0 88 a8 80 a0
-88 80 08 00 88 80 08 00 08 88 00 80 28 08 a8 88
+ 08 88 00 80 a0 20 80 00 a8 a0 28 20 88 a8 80 a0
+ 88 80 08 00 28 08 a8 88 88 a8 80 a0 28 08 a8 88
+ 88 a8 80 a0 a0 20 80 00 a8 a0 28 20 a8 a0 28 20
+ 88 80 08 00 88 a8 80 a0 88 a8 80 a0 88 a8 80 a0
+ a0 20 80 00 a0 20 80 00 08 88 00 80 28 08 a8 88
+ 88 a8 80 a0 88 80 08 00 88 a8 80 a0 28 08 a8 88
+ 88 a8 80 a0 88 a8 80 a0 88 a8 80 a0 88 a8 80 a0
+ 88 80 08 00 88 80 08 00 08 88 00 80 28 08 a8 88
+
+ 06
+
+
+
+ 00 0F FF FF 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 C9 3F 00 3F 01 00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Water Match (315-5064).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Water Match (315-5064).mra
new file mode 100644
index 00000000..917a19b6
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Water Match (315-5064).mra
@@ -0,0 +1,103 @@
+
+ Water Match (315-5064)
+ wmatch
+ segasys1
+ 0229
+ 1984
+ Sega
+ 2
+ 4-way
+ vertical/ccw
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+ 0E
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 88 a8 80 a0 a0 80 20 00 08 88 00 80 88 a8 80 a0
+ 20 00 a0 80 20 28 a0 a8 20 28 a0 a8 a0 80 20 00
+ a8 28 88 08 a8 28 88 08 08 88 00 80 a8 28 88 08
+ a8 28 88 08 20 28 a0 a8 a8 28 88 08 a8 28 88 08
+ 20 28 a0 a8 88 a8 80 a0 88 a8 80 a0 20 28 a0 a8
+ 20 28 a0 a8 a0 80 20 00 20 28 a0 a8 20 28 a0 a8
+ 20 00 a0 80 20 28 a0 a8 a8 28 88 08 a0 80 20 00
+ 20 28 a0 a8 20 28 a0 a8 a8 28 88 08 a8 28 88 08
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Water Match.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Water Match.mra
deleted file mode 100644
index defd43fc..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Water Match.mra
+++ /dev/null
@@ -1,62 +0,0 @@
-
- Water Match (315-5064)
- 0217
- wmatch
- 202001070000
- 1984
- Sega
- Sport
- segasys1
-
-
-
-
-
-
-
- 0E
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-88 a8 80 a0 a0 80 20 00 08 88 00 80 88 a8 80 a0
-20 00 a0 80 20 28 a0 a8 20 28 a0 a8 a0 80 20 00
-a8 28 88 08 a8 28 88 08 08 88 00 80 a8 28 88 08
-a8 28 88 08 20 28 a0 a8 a8 28 88 08 a8 28 88 08
-20 28 a0 a8 88 a8 80 a0 88 a8 80 a0 20 28 a0 a8
-20 28 a0 a8 a0 80 20 00 20 28 a0 a8 20 28 a0 a8
-20 00 a0 80 20 28 a0 a8 a8 28 88 08 a0 80 20 00
-20 28 a0 a8 20 28 a0 a8 a8 28 88 08 a8 28 88 08
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Wonder Boy (Set 1, 315-5177).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Wonder Boy (Set 1, 315-5177).mra
new file mode 100644
index 00000000..e5dfd9b6
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Wonder Boy (Set 1, 315-5177).mra
@@ -0,0 +1,115 @@
+
+ Wonder Boy (set 1, 315-5177)
+ wboy
+ segasys1
+ 0229
+ 1986
+ Escape (Sega license)
+ 2
+ 4-way
+ horizontal
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 04
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+ 04 54 51 15 40 44 01 51 55 10 44 41 05 55 50 14
+ 41 45 00 50 54 11 45 40 04 54 51 15 40 44 01 51
+ 55 10 44 41 05 55 50 14 41 45 00 50 54 11 45 40
+ 04 54 51 15 40 44 01 51 55 10 44 41 05 55 50 14
+ 04 54 51 15 40 44 01 51 55 10 44 41 05 55 50 14
+ 41 45 00 50 54 11 45 40 04 54 51 15 40 44 01 51
+ 55 10 44 41 05 55 50 14 41 45 00 50 54 11 45 40
+ 04 54 51 15 40 44 01 51 55 10 44 41 05 55 50 14
+
+ 00 00 00 00 01 01 01 01 01 02 02 02 02 02 03 03
+ 03 03 04 04 04 04 04 05 05 05 05 05 06 06 06 06
+ 06 07 07 07 07 07 08 08 08 08 09 09 09 09 09 0a
+ 0a 0a 0a 0a 0b 0b 0b 0b 0b 0c 0c 0c 0c 0c 0d 0d
+ 08 08 08 08 09 09 09 09 09 0a 0a 0a 0a 0a 0b 0b
+ 0b 0b 0c 0c 0c 0c 0c 0d 0d 0d 0d 0d 0e 0e 0e 0e
+ 0e 0f 0f 0f 0f 0f 10 10 10 10 11 11 11 11 11 12
+ 12 12 12 12 13 13 13 13 13 14 14 14 14 14 15 15
+
+
+
+
+ 00 0F FF FF 00 FF 00 02 00 02 00 01 00 FF 00 00
+ 00 00 C1 00 01 40 20 20 00 00 E8 56 00 0F 01 10
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043).mra b/Arcade_MiST/Sega System 1 Hardware/meta/Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043).mra
new file mode 100644
index 00000000..e46f883a
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/meta/Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043).mra
@@ -0,0 +1,67 @@
+
+ Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043)
+ wbml
+ segasys1
+ 0229
+ 1986
+ Escape (Sega license)
+ 2
+ 4-way
+ horizontal
+ World
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 05
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 00
+
+
+
+
+
+
diff --git a/Arcade_MiST/Sega System 1 Hardware/meta/Wonder Boy.mra b/Arcade_MiST/Sega System 1 Hardware/meta/Wonder Boy.mra
deleted file mode 100644
index 4c3d8d2b..00000000
--- a/Arcade_MiST/Sega System 1 Hardware/meta/Wonder Boy.mra
+++ /dev/null
@@ -1,63 +0,0 @@
-
- Wonder Boy (set 1, 315-5177)
- 0217
- wboy
- 20200107000000
- 1986
- Escape (Sega license)
- Platform / Extra
- segasys1
-
-
-
-
-
-
-
-
- 00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-04 54 51 15 40 44 01 51 55 10 44 41 05 55 50 14
-41 45 00 50 54 11 45 40 04 54 51 15 40 44 01 51
-55 10 44 41 05 55 50 14 41 45 00 50 54 11 45 40
-04 54 51 15 40 44 01 51 55 10 44 41 05 55 50 14
-04 54 51 15 40 44 01 51 55 10 44 41 05 55 50 14
-41 45 00 50 54 11 45 40 04 54 51 15 40 44 01 51
-55 10 44 41 05 55 50 14 41 45 00 50 54 11 45 40
-04 54 51 15 40 44 01 51 55 10 44 41 05 55 50 14
-00 00 00 00 01 01 01 01 01 02 02 02 02 02 03 03
-03 03 04 04 04 04 04 05 05 05 05 05 06 06 06 06
-06 07 07 07 07 07 08 08 08 08 09 09 09 09 09 0a
-0a 0a 0a 0a 0b 0b 0b 0b 0b 0c 0c 0c 0c 0c 0d 0d
-08 08 08 08 09 09 09 09 09 0a 0a 0a 0a 0a 0b 0b
-0b 0b 0c 0c 0c 0c 0c 0d 0d 0d 0d 0d 0e 0e 0e 0e
-0e 0f 0f 0f 0f 0f 10 10 10 10 11 11 11 11 11 12
-12 12 12 12 13 13 13 13 13 14 14 14 14 14 15 15
-
-
-
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/HVGEN.v b/Arcade_MiST/Sega System 1 Hardware/rtl/HVGEN.v
index 9838a60a..ef15a1b8 100644
--- a/Arcade_MiST/Sega System 1 Hardware/rtl/HVGEN.v
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/HVGEN.v
@@ -6,9 +6,9 @@ module HVGEN
output [8:0] VPOS,
input CLK,
input PCLK_EN,
- input [14:0] iRGB,
+ input [11:0] iRGB,
- output reg [14:0] oRGB,
+ output reg [11:0] oRGB,
output reg HBLK = 1,
output reg VBLK = 1,
output reg HSYN = 1,
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/MC8123.v b/Arcade_MiST/Sega System 1 Hardware/rtl/MC8123.v
new file mode 100644
index 00000000..1e90f527
--- /dev/null
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/MC8123.v
@@ -0,0 +1,327 @@
+// Copyright 2021 by blackwine
+// decryption algorithm based on MAME sources
+
+module MC8123_rom_decrypt
+(
+ input clk,
+
+ // connect to CPU
+ input m1,
+ input [15:0] a,
+ output reg [7:0] d,
+
+ // connect to program ROM
+ input [7:0] prog_d,
+
+ // connect to cpu decryption key ROM
+ output [12:0] key_a,
+ input [7:0] key_d
+);
+
+assign key_a = {~m1,a[15:10],a[8],a[6],a[4],a[2:0]};
+
+wire [7:0] key = ~key_d;
+
+wire [2:0] decrypt_type = {key[4]^key[5],
+ key[0]^key[1]^key[2]^key[4],
+ key[0]^key[2]^~m1};
+
+wire [1:0] swap = {key[2]^key[3],
+ key[0]^key[1]};
+
+wire [3:0] param = {key[1]^key[6]^key[7],
+ key[0]^key[1]^key[6],
+ key[0]^key[2]^key[3],
+ key[0]^~m1};
+
+always @( negedge clk ) begin
+ case (decrypt_type)
+ 0: d <= decrypt_type_0 (prog_d, param, swap);
+ 1: d <= decrypt_type_0 (prog_d, param, swap);
+ 2: d <= decrypt_type_1a(prog_d, param, swap);
+ 3: d <= decrypt_type_1b(prog_d, param, swap);
+ 4: d <= decrypt_type_2a(prog_d, param, swap);
+ 5: d <= decrypt_type_2b(prog_d, param, swap);
+ 6: d <= decrypt_type_3a(prog_d, param, swap);
+ 7: d <= decrypt_type_3b(prog_d, param, swap);
+ endcase
+end
+
+`define bitswap8(a,b,c,d,e,f,g,h) {v[a],v[b],v[c],v[d],v[e],v[f],v[g],v[h]}
+
+reg [7:0] v;
+reg s;
+reg t;
+
+function [7:0] decrypt_type_0;
+ input [7:0] value;
+ input [3:0] p; // param
+ input [1:0] swap;
+
+ v = value;
+ case (swap)
+ 0: v = `bitswap8(7,5,3,1,2,0,6,4);
+ 1: v = `bitswap8(5,3,7,2,1,0,4,6);
+ 2: v = `bitswap8(0,3,4,6,7,1,5,2);
+ 3: v = `bitswap8(0,7,3,2,6,4,1,5);
+ endcase
+
+ s = p[3] & v[7];
+ t = p[2] & v[6];
+
+ v = {
+ v[7] ^ t ^ v[6] ^ p[1],
+ v[6] ^ (p[1] & (v[7] ^ t ^ v[6])) ^ p[1],
+ v[5] ^ s ^ v[2] ^ t ^ p[2] ^ p[0],
+ ~v[4],
+ ~v[3] ^ s,
+ v[2] ^ t ^ p[2],
+ ~v[1] ^ t,
+ v[0] ^ s ^ v[2] ^ t ^ p[2] ^ p[0]
+ };
+
+ decrypt_type_0 = p[0] ? `bitswap8(7,6,5,1,4,3,2,0) : v;
+
+endfunction
+
+// decrypt type 1a
+
+function [7:0] decrypt_type_1a;
+ input [7:0] value;
+ input [3:0] p; // param
+ input [1:0] swap;
+
+ v = value;
+ case (swap)
+ 0: v = `bitswap8(4,2,6,5,3,7,1,0);
+ 1: v = `bitswap8(6,0,5,4,3,2,1,7);
+ 2: v = `bitswap8(2,3,6,1,4,0,7,5);
+ 3: v = `bitswap8(6,5,1,3,2,7,0,4);
+ endcase
+
+ v = p[2] ? `bitswap8(7,6,1,5,3,2,4,0) : v;
+
+ v = {
+ v[7] ^ v[4] ^ p[3],
+ ~v[6] ^ v[7] ^ v[2] ^ v[4] ^ p[1],
+ v[5],
+ v[4] ^ v[7] ^ v[2],
+ ~v[3] ^ v[7] ^ v[6] ^ v[2] ^ p[1],
+ v[2] ^ v[4] ^ p[3],
+ ~v[1] ^ v[2],
+ ~v[0] ^ v[1]
+ };
+
+ decrypt_type_1a = p[0] ? `bitswap8(7,6,1,4,3,2,5,0) : v;
+endfunction
+
+// decrypt type 1b
+
+function [7:0] decrypt_type_1b;
+ input [7:0] value;
+ input [3:0] p; // param
+ input [1:0] swap;
+
+ v = value;
+ case (swap)
+ 0: v = `bitswap8(1,0,3,2,5,6,4,7);
+ 1: v = `bitswap8(2,0,5,1,7,4,6,3);
+ 2: v = `bitswap8(6,4,7,2,0,5,1,3);
+ 3: v = `bitswap8(7,1,3,6,0,2,5,4);
+ endcase
+
+ s = v[2] & v[0];
+ v = {
+ v[7] ^ s ^ v[5] ^ v[3] ^ p[2],
+ ~v[6] ^ v[4] ^ s ^ v[0] ^ v[3] ^ p[2] ^ p[0],
+ v[5] ^ v[4] ^ s ^ v[1],
+ ~v[4] ^ s ^ p[3] ^ p[1],
+ v[3] ^ p[1] ^ p[2],
+ v[2] ^ v[7] ^ s ^ v[5] ^ v[0] ^ v[3] ^ p[0],
+ v[1] ^ v[6] ^ v[0] ^ v[3] ^ p[3] ^ p[0],
+ ~v[0] ^ v[3] ^ p[0] ^ p[2]
+ };
+
+ decrypt_type_1b = v;
+endfunction
+
+// decrypt type 2a
+
+function [7:0] decrypt_type_2a;
+ input [7:0] value;
+ input [3:0] p; // param
+ input [1:0] swap;
+
+ v = value;
+ case (swap)
+ 0: v = `bitswap8(0,1,4,3,5,6,2,7);
+ 1: v = `bitswap8(6,3,0,5,7,4,1,2);
+ 2: v = `bitswap8(1,6,4,5,0,3,7,2);
+ 3: v = `bitswap8(4,6,7,5,2,3,1,0);
+ endcase
+
+ v = (v[3] || (p[1] & v[2])) ? `bitswap8(6,0,7,4,3,2,1,5) : v;
+ v = {
+ ~v[7] ^ v[5],
+ ~v[6] ^ v[0],
+ ~v[5] ^ v[6],
+ ~v[4] ^ p[2],
+ v[3] ^ v[4] ^ p[2],
+ v[2] ^ v[1] ^ p[2],
+ ~v[1] ^ p[2],
+ v[0] ^ v[4] ^ p[2]
+ };
+
+ case({p[3],p[0]})
+ 1: v = `bitswap8(7,6,5,2,1,3,4,0);
+ 2: v = `bitswap8(7,6,5,1,2,4,3,0);
+ 3: v = `bitswap8(7,6,5,3,4,1,2,0);
+ default:;
+ endcase
+
+ decrypt_type_2a = v;
+endfunction
+
+// decrypt type 2b
+
+function [7:0] decrypt_type_2b;
+ input [7:0] value;
+ input [3:0] p; // param
+ input [1:0] swap;
+
+ v = value;
+ case (swap)
+ 0: v = `bitswap8(1,3,4,6,5,7,0,2);
+ 1: v = `bitswap8(0,1,5,4,7,3,2,6);
+ 2: v = `bitswap8(3,5,4,1,6,2,0,7);
+ 3: v = `bitswap8(5,2,3,0,4,7,6,1);
+ endcase
+
+ s = v[7] & v[3];
+ v = {
+ v[7] ^ v[5] ^ s ^ v[4],
+ v[6] ^ s,
+ v[5] ^ v[1] ^ s ^ v[4],
+ v[4] ^ s,
+ v[3] ^ v[5] ^ s ^ v[4],
+ v[2] ^ v[7],
+ v[1] ^ s ^ v[4],
+ v[0] ^ s
+ };
+
+ s = v[5] & (v[7] ^ v[1]);
+ v = {
+ ~v[7] ^ v[6] ^ v[3] ^ p[2] ^ p[1],
+ v[6] ^ v[3] ^ p[3] ^ p[2],
+ v[5] ^ v[6] ^ v[3] ^ p[2] ^ p[0],
+ v[4] ^ s,
+ ~v[3] ^ v[2] ^ p[3] ^ p[2],
+ ~v[2] ^ p[2] ^ p[0],
+ ~v[1] ^ v[3] ^ v[2] ^ p[3] ^ p[2],
+ v[0] ^ s
+ };
+ decrypt_type_2b = v;
+
+endfunction
+
+// decrypt type 3a
+
+function [7:0] decrypt_type_3a;
+ input [7:0] value;
+ input [3:0] p; // param
+ input [1:0] swap;
+
+ v = value;
+ case (swap)
+ 0: v = `bitswap8(5,3,1,7,0,2,6,4);
+ 1: v = `bitswap8(3,1,2,5,4,7,0,6);
+ 2: v = `bitswap8(5,6,1,2,7,0,4,3);
+ 3: v = `bitswap8(5,6,7,0,4,2,1,3);
+ endcase
+
+ v = {
+ v[7] ^ v[2],
+ v[6],
+ v[5] ^ v[2],
+ v[4] ^ v[2],
+ v[3],
+ v[2],
+ v[1],
+ v[0] ^ v[3]
+ };
+
+ v = p[0] ? `bitswap8(7,2,5,4,3,1,0,6) : v;
+
+ v = {
+ v[7],
+ v[6] ^ v[1],
+ v[5],
+ v[4] ^ v[3] ^ p[3],
+ v[3] ^ p[3],
+ v[2] ^ v[3],
+ v[1] ^ v[3],
+ v[0] ^ v[1]
+ };
+
+ v = v[3] ? `bitswap8(5,6,7,4,3,2,1,0) : v;
+
+ v = {
+ v[7] ^ p[2],
+ ~v[6],
+ ~v[5],
+ ~v[4] ^ p[1],
+ ~v[3],
+ v[2] ^ v[5],
+ v[1] ^ v[5],
+ v[0] ^ p[0]
+ };
+ decrypt_type_3a = v;
+endfunction
+
+
+// decrypt type 3b
+
+function [7:0] decrypt_type_3b;
+ input [7:0] value;
+ input [3:0] p; // param
+ input [1:0] swap;
+
+ v = value;
+ case (swap)
+ 0: v = `bitswap8(3,7,5,4,0,6,2,1);
+ 1: v = `bitswap8(7,5,4,6,1,2,0,3);
+ 2: v = `bitswap8(7,4,3,0,5,1,6,2);
+ 3: v = `bitswap8(2,6,4,1,3,7,0,5);
+ endcase
+
+ v = (v[2] ^ v[7]) ? `bitswap8(7,6,3,4,5,2,1,0) : v;
+
+ s = v[2] ^ p[3];
+ t = v[4] ^ v[1];
+ v = {
+ v[7] ^ s ^ p[3],
+ v[6] ^ t,
+ v[5],
+ v[4] ^ v[1],
+ v[3],
+ v[2] ^ v[1],
+ v[1] ^ ((v[7] ^ s) & (v[6] ^ t) ^ v[7] ^ s),
+ v[0] ^ p[2]
+ };
+
+ v = p[3] ? `bitswap8(4,6,3,2,5,0,1,7) : v;
+ v = {
+ v[7] ^ p[1],
+ v[6],
+ ~v[5],
+ v[4] ^ v[5],
+ ~v[3] ^ p[0],
+ ~v[2] ^ v[7],
+ v[1] ^ v[4],
+ v[0]
+ };
+
+ decrypt_type_3b = v;
+endfunction
+
+endmodule
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1.v b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1.v
index 412e54db..7e264802 100644
--- a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1.v
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1.v
@@ -14,19 +14,21 @@ module SEGASYSTEM1
input [7:0] DSW0,
input [7:0] DSW1,
-
+ input SYSTEM2,
+ input SYSTEM2_ROWSCROLL,
+
input [8:0] PH, // PIXEL H
input [8:0] PV, // PIXEL V
output PCLK_EN,
- output [7:0] POUT, // PIXEL OUT
+ output [11:0] POUT, // PIXEL OUT
output [15:0] SOUT, // Sound Out (PCM)
- output [15:0] cpu_rom_addr,
+ output [16:0] cpu_rom_addr,
input [7:0] cpu_rom_do,
- output [12:0] snd_rom_addr,
+ output [14:0] snd_rom_addr,
input [7:0] snd_rom_do,
- output [13:0] tile_rom_addr,
+ output [14:0] tile_rom_addr,
input [31:0] tile_rom_do,
output [17:0] spr_rom_addr,
input [7:0] spr_rom_do,
@@ -39,7 +41,7 @@ module SEGASYSTEM1
// CPU
wire [15:0] CPUAD;
-wire [7:0] CPUDO,VIDDO,SNDNO,VIDMD;
+wire [7:0] CPUDO,VIDDO,SNDNO,VIDMD,SNDCTL;
wire CPUWR,VIDCS,VBLK;
wire SNDRQ;
@@ -47,24 +49,28 @@ SEGASYS1_MAIN Main (
.RESET(reset),
.INP0(INP0),.INP1(INP1),.INP2(INP2),
.DSW0(DSW0),.DSW1(DSW1),
+ .SYSTEM2(SYSTEM2),
.CLK40M(clk40M),
.CPUAD(CPUAD),.CPUDO(CPUDO),.CPUWR(CPUWR),
.VBLK(VBLK),.VIDCS(VIDCS),.VIDDO(VIDDO),
.SNDRQ(SNDRQ),.SNDNO(SNDNO),
- .VIDMD(VIDMD),
+ .VIDMD(VIDMD),.SNDCTL(SNDCTL),
.cpu_rom_addr(cpu_rom_addr),
.cpu_rom_do(cpu_rom_do),
-
+
.ROMCL(ROMCL),.ROMAD(ROMAD),.ROMDT(ROMDT),.ROMEN(ROMEN)
);
// Video
-wire [7:0] OPIX;
+wire [11:0] OPIX;
SEGASYS1_VIDEO Video (
.RESET(reset),.VCLKx8(clk40M),
.PH(PH),.PV(PV),.VFLP(VIDMD[7]),
- .VBLK(VBLK),.PCLK_EN(PCLK_EN),.RGB8(OPIX),.PALDSW(1'b0),
+ .VBLK(VBLK),.PCLK_EN(PCLK_EN),.RGB(OPIX),
+ .VRAM_BANK(SYSTEM2 ? SNDCTL[2:1] : 2'b00),
+ .SYSTEM2(SYSTEM2),.SYSTEM2_ROWSCROLL(SYSTEM2_ROWSCROLL),
+ .PALDSW(1'b0),
.cpu_ad(CPUAD),.cpu_wr(CPUWR),.cpu_dw(CPUDO),
.cpu_rd(VIDCS),.cpu_dr(VIDDO),
@@ -73,7 +79,7 @@ SEGASYS1_VIDEO Video (
.ROMCL(ROMCL),.ROMAD(ROMAD),.ROMDT(ROMDT),.ROMEN(ROMEN)
);
-assign POUT = VIDMD[4] ? 8'd0 : OPIX;
+assign POUT = VIDMD[4] ? 12'd0 : OPIX;
// Sound
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_MAIN.v b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_MAIN.v
index 1b16f393..bc2d6d55 100644
--- a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_MAIN.v
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_MAIN.v
@@ -1,7 +1,8 @@
// Copyright (c) 2017,19 MiSTer-X
-`define EN_MCPU0 (ROMAD[17:15]==3'b00_0 )
-`define EN_MCPU8 (ROMAD[17:14]==4'b00_10)
+`define EN_MCPU0_PRG (ROMAD[18:15]==4'b000_1) // $08000-$0ffff
+`define EN_MCPU8_PRG (ROMAD[18:16]==3'b001) // $10000-$1ffff
+`define EN_KEY (ROMAD[18:13]==6'b110_001) // $62000-$63fff
module SEGASYS1_MAIN
(
@@ -15,6 +16,7 @@ module SEGASYS1_MAIN
input [7:0] DSW0,
input [7:0] DSW1,
+ input SYSTEM2,
input VBLK,
input VIDCS,
@@ -28,8 +30,9 @@ module SEGASYS1_MAIN
output reg [7:0] SNDNO,
output reg [7:0] VIDMD,
+ output reg [7:0] SNDCTL,
- output [15:0] cpu_rom_addr,
+ output [16:0] cpu_rom_addr,
input [7:0] cpu_rom_do,
input ROMCL, // Downloaded ROM image
@@ -84,46 +87,71 @@ SEGASYS1_IPORT port(CPUAD,cpu_iorq, INP0,INP1,INP2, DSW0,DSW1, cpu_cs_port,cpu_r
// Program ROM
-wire cpu_cs_mrom0 = (CPUAD[15] == 1'b0 ) & cpu_mreq;
-wire cpu_cs_mrom1 = (CPUAD[15:14] == 2'b10) & cpu_mreq;
-
-wire [7:0] cpu_rd_mrom0;
-wire [7:0] cpu_rd_mrom1;
+wire cpu_cs_mrom0 = (CPUAD[15] == 1'b0 ) & cpu_mreq;
+wire cpu_cs_mrom8 = (CPUAD[15:14] == 2'b10) & cpu_mreq;
+wire [7:0] cpu_rd_mrom0_prg;
+wire [7:0] cpu_rd_mrom8;
+wire [7:0] cpu_rd_mc8123;
wire [14:0] rad;
wire [7:0] rdt;
+wire [12:0] key_a;
+wire [7:0] key_d;
-SEGASYS1_PRGDEC decr(CLK40M,cpu_m1,CPUAD,cpu_rd_mrom0, rad,rdt, ROMCL,ROMAD,ROMDT,ROMEN);
-
-assign cpu_rom_addr = CPUAD[15] ? CPUAD[15:0] : {1'b0, rad};
+assign cpu_rom_addr = CPUAD[15] ? {3'd2 + cpu_bank, CPUAD[13:0]} : {1'b0, has_mc8123_key ? CPUAD[14:0] : rad};
assign rdt = cpu_rom_do;
-assign cpu_rd_mrom1 = cpu_rom_do;
+assign cpu_rd_mrom8 = cpu_rom_do;
-//DLROM #(15,8) rom0(AXSCL, rad, rdt, ROMCL,ROMAD,ROMDT,ROMEN & `EN_MCPU0); // ($0000-$7FFF encrypted)
-//DLROM #(14,8) rom1(CPUCLn,CPUAD,cpu_rd_mrom1, ROMCL,ROMAD,ROMDT,ROMEN & `EN_MCPU8); // ($8000-$BFFF non-encrypted)
+// CPU Region $0000-$7fff ROM
+//DLROM #(15,8) rom0_prg(CLK40M, has_mc8123_key ? CPUAD : rad, rdt, ROMCL,ROMAD,ROMDT,ROMEN & `EN_MCPU0_PRG);
+// CPU Region $8000-$bfff, 4 ROM banks
+// No BRAM for separate opcode memory banks, they may be not needed though
+wire [1:0] cpu_bank = {SYSTEM2 ? VIDMD[3] : VIDMD[6], VIDMD[2]};
+//DLROM #(16,8) rom8_prg(CLK40M, {cpu_bank,CPUAD[13:0]}, cpu_rd_mrom8, ROMCL,ROMAD,ROMDT,ROMEN & `EN_MCPU8_PRG);
+
+// 315-5xxx CPU decryption for selected SEGA System 1 titles
+SEGASYS1_PRGDEC decr(CLK40M,cpu_m1,CPUAD,cpu_rd_mrom0_prg, rad,rdt, ROMCL,ROMAD,ROMDT,ROMEN);
+
+// MC-8123 CPU decryption for selected SEGA System 2 titles
+MC8123_rom_decrypt mc8123_decrypt(CLK40M, cpu_m1, CPUAD, cpu_rd_mc8123,
+ !CPUAD[15] ? rdt : cpu_rd_mrom8, key_a, key_d);
+DLROM #(13,8) rom_keys(CLK40M, key_a, key_d,
+ ROMCL, ROMAD, ROMDT, ROMEN & `EN_KEY);
+
+// Detect if we have mc8123 keys or opcode roms
+//reg has_opcode_roms = 0;
+reg has_mc8123_key = 0;
+always @(posedge CLK40M) begin
+ if (ROMEN & `EN_KEY)
+ has_mc8123_key <= has_mc8123_key | ~(!ROMDT);
+end
// Work RAM
-wire [7:0] cpu_rd_mram;
-wire cpu_cs_mram = (CPUAD[15:12] == 4'b1100) & cpu_mreq;
+wire [7:0] cpu_rd_mram;
+wire cpu_cs_mram = (CPUAD[15:12] == 4'b1100) & cpu_mreq;
SRAM_4096 mainram(CLK40M, CPUAD[11:0], cpu_rd_mram, cpu_cs_mram & CPUWR, CPUDO );
// Video mode latch & Sound Request
wire cpu_cs_sreq = ((CPUAD[7:0] == 8'h14)|(CPUAD[7:0] == 8'h18)) & cpu_iorq;
wire cpu_cs_vidm = ((CPUAD[7:0] == 8'h15)|(CPUAD[7:0] == 8'h19)) & cpu_iorq;
+wire cpu_cs_sctl = (CPUAD[7:0] == 8'h16) & cpu_iorq;
wire cpu_wr_sreq = cpu_cs_sreq & _cpu_wr;
wire cpu_wr_vidm = cpu_cs_vidm & _cpu_wr;
+wire cpu_wr_sctl = cpu_cs_sctl & _cpu_wr;
always @(posedge CLK40M or posedge RESET) begin
if (RESET) begin
VIDMD <= 0;
SNDRQ <= 0;
SNDNO <= 0;
+ SNDCTL <= 0;
end
else begin
if (cpu_wr_vidm) VIDMD <= CPUDO;
+ if (cpu_wr_sctl) SNDCTL <= CPUDO;
if (cpu_wr_sreq) begin SNDNO <= CPUDO; SNDRQ <= 1'b1; end else SNDRQ <= 1'b0;
end
end
@@ -132,10 +160,11 @@ end
// CPU data selector
assign CPUDI = (VIDCS & cpu_mreq) ? VIDDO :
cpu_cs_vidm ? VIDMD :
+ cpu_cs_sctl ? SNDCTL :
cpu_cs_port ? cpu_rd_port :
cpu_cs_mram ? cpu_rd_mram :
- cpu_cs_mrom0 ? cpu_rd_mrom0 :
- cpu_cs_mrom1 ? cpu_rd_mrom1 : 8'hFF;
+ cpu_cs_mrom0 ? (has_mc8123_key ? cpu_rd_mc8123 : cpu_rd_mrom0_prg) :
+ cpu_cs_mrom8 ? (has_mc8123_key ? cpu_rd_mc8123 : cpu_rd_mrom8) : 8'hFF;
endmodule
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_PRGDEC.v b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_PRGDEC.v
index d895b8b2..331ced05 100644
--- a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_PRGDEC.v
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_PRGDEC.v
@@ -1,11 +1,11 @@
// Copyright (c) 2017,19 MiSTer-X
-`define DECTBLADRS (25'h30100)
+`define DECTBLADRS (25'h60400)
-`define EN_DEC1TBL (ROMAD[17:7]==11'b11_0000_0001_0) // $30100
+`define EN_DEC1TBL (ROMAD[18:7]==12'b110_0000_0100_0) // $60400
-`define EN_DEC2XOR (ROMAD[17:7]==11'b11_0000_0001_0) // $30100
-`define EN_DEC2SWP (ROMAD[17:7]==11'b11_0000_0001_1) // $30180
+`define EN_DEC2XOR (ROMAD[18:7]==12'b110_0000_0100_0) // $60400
+`define EN_DEC2SWP (ROMAD[18:7]==12'b110_0000_0100_1) // $60480
module SEGASYS1_PRGDEC
@@ -45,7 +45,6 @@ always @(posedge ROMCL) begin
end
end
end
-
assign mrom_dt = (cnt0>=128) ? rdt : (cnt2>=128) ? od1 : od0;
endmodule
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_SOUND.v b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_SOUND.v
index 87dc0693..dab6b7cb 100644
--- a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_SOUND.v
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_SOUND.v
@@ -1,6 +1,6 @@
// Copyright (c) 2017,19 MiSTer-X
-`define EN_SCPU (ROMAD[17:13]==5'b00_110) // $0C000-$0DFFF
+`define EN_SCPU (ROMAD[18:15]==4'b000_0) // $0-$7fff
module SEGASYS1_SOUND
(
@@ -12,7 +12,7 @@ module SEGASYS1_SOUND
output [15:0] sndout,
- output [12:0] snd_rom_addr,
+ output [14:0] snd_rom_addr,
input [7:0] snd_rom_do
);
@@ -24,7 +24,7 @@ wire clk8M_en,clk4M_en,clk2M_en;
SndClkGen clkgen(clk40M,clk8M_en,clk4M_en,clk2M_en);
//----------------------------------
-// Z80 (1.5625MHz)
+// Z80 (4MHz)
//----------------------------------
wire [15:0] cpu_ad;
wire [7:0] cpu_di, cpu_do;
@@ -59,7 +59,7 @@ wire [7:0] rom_dt; // ROM
wire [7:0] ram_do; // RAM
wire [7:0] comlatch; // Sound Command Latch
-assign snd_rom_addr = cpu_ad[12:0];
+assign snd_rom_addr = cpu_ad[14:0];
assign rom_dt = snd_rom_do;
//DLROM #(13,8) subir( cpuclkx2, cpu_ad[12:0], rom_dt, ROMCL,ROMAD,ROMDT,ROMEN & `EN_SCPU );
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_SPRITE.v b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_SPRITE.v
index 6775b2d4..376c1cf4 100644
--- a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_SPRITE.v
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_SPRITE.v
@@ -8,6 +8,8 @@ module SEGASYS1_SPRITE
input VCLKx4_EN,
input VCLK_EN,
+ input SYSTEM2,
+
input [8:0] PH,
input [8:0] PV,
@@ -147,7 +149,7 @@ always @ ( posedge VCLKx8 ) if (VCLKx4_EN) begin
// get yofs/xpos/bank
2: begin
yofs <= hitsprvps[hitr];
- xpos <= ((sprdt[8:0]+1)>>1) + 8'd14;
+ xpos <= ((sprdt[8:0]+1)>>1) + (SYSTEM2 ? 8'd22 : 8'd14);
bank <= { sprdt[13], sprdt[14], sprdt[15] };
spr_ofs <= 2;
phaseHD <= 3;
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_VIDEO.v b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_VIDEO.v
index 51f0ea74..bb8ee49d 100644
--- a/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_VIDEO.v
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/SEGASYS1_VIDEO.v
@@ -1,15 +1,15 @@
// Copyright (c) 2017,19 MiSTer-X
-`define EN_SPRITE (ROMAD[17:16]==2'b01) // $10000-$1FFFF
+`define EN_SPRITE (ROMAD[18:17]==2'b01) // $20000-$3FFFF
-`define EN_TILE00 (ROMAD[17:13]==5'b10_000) // $20000-$21FFF
-`define EN_TILE01 (ROMAD[17:13]==5'b10_001) // $22000-$23FFF
-`define EN_TILE02 (ROMAD[17:13]==5'b10_010) // $24000-$25FFF
-`define EN_TILE10 (ROMAD[17:13]==5'b10_100) // $28000-$29FFF
-`define EN_TILE11 (ROMAD[17:13]==5'b10_101) // $2A000-$2BFFF
-`define EN_TILE12 (ROMAD[17:13]==5'b10_110) // $2C000-$2DFFF
+`define EN_TILE00 (ROMAD[18:14]==6'b100_00) // $40000-$43FFF
+`define EN_TILE10 (ROMAD[18:14]==6'b100_01) // $44000-$47FFF
+`define EN_TILE01 (ROMAD[18:14]==6'b100_10) // $48000-$4bFFF
+`define EN_TILE11 (ROMAD[18:14]==6'b100_11) // $4c000-$4fFFF
+`define EN_TILE02 (ROMAD[18:14]==6'b101_00) // $50000-$53FFF
+`define EN_TILE12 (ROMAD[18:14]==6'b101_01) // $54000-$57FFF
-`define EN_CLUT (ROMAD[17:8]==10'b11_0000_0000) // $30000-$300FF
+`define EN_CLUT (ROMAD[18:8]==11'b110_0000_0000) // $60000-$600FF
module SEGASYS1_VIDEO
@@ -25,7 +25,11 @@ module SEGASYS1_VIDEO
output VBLK,
output PCLK,
output PCLK_EN,
- output [7:0] RGB8,
+ output [11:0] RGB,
+
+ input [1:0] VRAM_BANK,
+ input SYSTEM2,
+ input SYSTEM2_ROWSCROLL,
input PALDSW,
@@ -35,7 +39,7 @@ module SEGASYS1_VIDEO
output cpu_rd,
output [7:0] cpu_dr,
- output reg [13:0] tile_rom_addr,
+ output reg [14:0] tile_rom_addr,
input [31:0] tile_rom_do,
output [17:0] spr_rom_addr,
input [7:0] spr_rom_do,
@@ -63,9 +67,9 @@ wire [7:0] palout;
wire [9:0] sprad;
wire [15:0] sprdt;
-wire [9:0] vram0ad;
+wire [12:0] vram0ad;
wire [15:0] vram0dt;
-wire [9:0] vram1ad;
+wire [12:0] vram1ad;
wire [15:0] vram1dt;
wire [5:0] mixcoll_ad;
@@ -75,11 +79,13 @@ wire sprcoll;
wire [15:0] scrx;
wire [7:0] scry;
+wire [11:0] bg_pages;
VIDCPUINTF intf(
RESET,
VCLKx8,
+ PH, PV,
cpu_ad, cpu_wr, cpu_dw,
cpu_rd, cpu_dr,
@@ -87,9 +93,12 @@ VIDCPUINTF intf(
sprad, sprdt,
vram0ad, vram0dt,
vram1ad, vram1dt,
+ VRAM_BANK,
mixcoll_ad, mixcoll,
sprcoll_ad, sprcoll,
- scrx, scry
+ scrx, scry,
+ SYSTEM2, SYSTEM2_ROWSCROLL,
+ bg_pages
);
@@ -98,6 +107,7 @@ wire [8:0] HPOS, VPOS;
wire [8:0] BG0HP, BG0VP;
wire [8:0] BG1HP, BG1VP;
VIDHVGEN hv(
+ SYSTEM2,
PH, PV,
scrx, scry,
HPOS, VPOS,
@@ -119,6 +129,7 @@ SEGASYS1_SPRITE sprite(
.VCLKx8(VCLKx8),
.VCLKx4(VCLKx4),.VCLK(VCLK),
.VCLKx4_EN(VCLKx4_EN), .VCLK_EN(VCLK_EN),
+ .SYSTEM2(SYSTEM2),
.PH(HPOS),.PV(VPOS),
.sprad(sprad),.sprdt(sprdt),
.sprchad(sprchad),.sprchdt(sprchdt),
@@ -129,40 +140,73 @@ SEGASYS1_SPRITE sprite(
// BG Scanline Generator
wire [10:0] BG0PX, BG1PX;
-wire [13:0] tile0ad, tile1ad, tilead;
-reg [23:0] tile0dt, tile1dt, tile0dt_r;
+wire [14:0] tile0ad, tile1ad;
+wire [14:0] tilead_fg = SYSTEM2 ? tile0ad : tile1ad;
+wire [14:0] tilead_bg = SYSTEM2 ? tile1ad : tile0ad;
+reg [14:0] tilead;
+reg [23:0] tiledt_fg, tiledt_bg, tiledt_r;
+wire [23:0] tile0dt = SYSTEM2 ? tiledt_fg : tiledt_bg;
+wire [23:0] tile1dt = SYSTEM2 ? tiledt_bg : tiledt_fg;
always @(posedge VCLKx8) begin
if (VCLK_EN) begin
if (HPOS[2:0] == 3'b000) begin
- tile_rom_addr <= tile0ad;
- tile1dt <= tile_rom_do[23:0];
- tile0dt <= tile0dt_r;
+ tile_rom_addr <= tilead_bg;
+ tiledt_fg <= tile_rom_do[23:0];
+ tiledt_bg <= tiledt_r;
end
if (HPOS[2:0] == 3'b100) begin
- tile_rom_addr <= tile1ad;
- tile0dt_r <= tile_rom_do[23:0];
+ tile_rom_addr <= tilead_fg;
+ tiledt_r <= tile_rom_do[23:0];
end
end
end
-BGGEN bg0(VCLKx8,VCLK_EN,BG0HP,BG0VP,vram0ad,vram0dt,tile0ad,tile0dt,BG0PX);
-BGGEN bg1(VCLKx8,VCLK_EN,BG1HP,BG1VP,vram1ad,vram1dt,tile1ad,tile1dt,BG1PX);
-
+wire [11:0] pages = !SYSTEM2 ? 12'b001001001001 : bg_pages;
+BGGEN bg0(VCLKx8,VCLK_EN,BG0HP,BG0VP,0, vram0ad,vram0dt,tile0ad,tile0dt,BG0PX);
+BGGEN bg1(VCLKx8,VCLK_EN,BG1HP,BG1VP,pages,vram1ad,vram1dt,tile1ad,tile1dt,BG1PX);
// Color Mixer & RGB Output
wire [7:0] cltidx,cltval;
+wire [7:0] color;
+
DLROM #(8,8) clut(VCLKx8, cltidx, cltval, ROMCL,ROMAD,ROMDT,ROMEN & `EN_CLUT );
COLMIX cmix(
VCLKx8, VCLK_EN,
- BG0PX, BG1PX, SPRPX,
+ SYSTEM2 ? BG1PX : BG0PX,
+ SYSTEM2 ? BG0PX : BG1PX,
+ SPRPX,
PALDSW, HPOS, VPOS,
cltidx, cltval,
mixcoll, mixcoll_ad,
palno, palout,
- RGB8
+ color
);
+// Palette
+`define EN_PALR (ROMAD[18:8]==11'b110_0000_0001) // $60100
+`define EN_PALG (ROMAD[18:8]==11'b110_0000_0010) // $60200
+`define EN_PALB (ROMAD[18:8]==11'b110_0000_0011) // $60300
+
+wire [3:0] r,g,b;
+
+DLROM #(8,8) pal_r(VCLKx8, color, r, ROMCL,ROMAD,ROMDT,ROMEN & `EN_PALR );
+DLROM #(8,8) pal_g(VCLKx8, color, g, ROMCL,ROMAD,ROMDT,ROMEN & `EN_PALG );
+DLROM #(8,8) pal_b(VCLKx8, color, b, ROMCL,ROMAD,ROMDT,ROMEN & `EN_PALB );
+
+// detect color proms while transfering them
+reg has_color_prom = 0;
+always @(posedge ROMCL)
+ if (ROMEN)
+ if(`EN_PALR | `EN_PALG | `EN_PALB)
+ has_color_prom <= has_color_prom | ~(!ROMDT);
+
+assign RGB = has_color_prom ? {b,g,r} :
+ {color[7:6], color[7:6],
+ color[5:3], color[5],
+ color[2:0], color[2]};
+
+
endmodule
@@ -174,6 +218,8 @@ module VIDCPUINTF
input RESET,
input clk,
+ input [8:0] PH,
+ input [8:0] PV,
input [15:0] cpu_ad,
input cpu_wr,
input [7:0] cpu_dw,
@@ -186,12 +232,14 @@ module VIDCPUINTF
input [9:0] sprad,
output [15:0] sprdt,
- input [9:0] vram0ad,
+ input [12:0] vram0ad,
output [15:0] vram0dt,
- input [9:0] vram1ad,
+ input [12:0] vram1ad,
output [15:0] vram1dt,
+ input [1:0] vram_bank,
+
input [5:0] mixcoll_ad,
input mixcoll,
@@ -199,7 +247,10 @@ module VIDCPUINTF
input sprcoll,
output reg [15:0] scrx,
- output reg [7:0] scry
+ output reg [7:0] scry,
+ input SYSTEM2,
+ input SYSTEM2_ROWSCROLL,
+ output [11:0] bg_pages
);
// CPU Address Decoders
@@ -207,8 +258,7 @@ wire cpu_cs_palram;
wire cpu_cs_spram;
wire cpu_cs_mixcoll;
wire cpu_cs_sprcoll;
-wire cpu_cs_vram0;
-wire cpu_cs_vram1;
+wire cpu_cs_vram;
wire cpu_wr_palram;
wire cpu_wr_spram;
@@ -216,9 +266,10 @@ wire cpu_wr_mixcoll;
wire cpu_wr_mixcollclr;
wire cpu_wr_sprcoll;
wire cpu_wr_sprcollclr;
-wire cpu_wr_vram0;
-wire cpu_wr_vram1;
-wire cpu_wr_scrreg;
+wire cpu_wr_vram;
+wire cpu_wr_scrreg1;
+wire cpu_wr_scrreg0;
+wire cpu_wr_bgpage;
VIDADEC adecs(
cpu_ad,
@@ -228,8 +279,7 @@ VIDADEC adecs(
cpu_cs_spram,
cpu_cs_mixcoll,
cpu_cs_sprcoll,
- cpu_cs_vram0,
- cpu_cs_vram1,
+ cpu_cs_vram,
cpu_wr_palram,
cpu_wr_spram,
@@ -237,27 +287,47 @@ VIDADEC adecs(
cpu_wr_mixcollclr,
cpu_wr_sprcoll,
cpu_wr_sprcollclr,
- cpu_wr_vram0,
- cpu_wr_vram1,
- cpu_wr_scrreg,
+ cpu_wr_vram,
+ cpu_wr_scrreg0,
+ cpu_wr_scrreg1,
+ cpu_wr_bgpage,
cpu_rd
);
-// Scroll Register
+reg [7:0] scrx_row[64];
+reg [2:0] bg_page[4];
+assign bg_pages = {bg_page[3],bg_page[2],bg_page[1],bg_page[0]};
+
+// Scroll and background plane registers
always @ ( posedge clk or posedge RESET) begin
if (RESET) begin
scrx <= 0;
scry <= 0;
end
else begin
- if (cpu_wr_scrreg) begin
- case(cpu_ad[7:0])
- 8'hBD: scry <= cpu_dw;
- 8'hFC: scrx[ 7:0] <= cpu_dw;
- 8'hFD: scrx[15:8] <= cpu_dw;
- default:;
- endcase
+ if (SYSTEM2) begin
+ if (cpu_wr_bgpage & !vram_bank)
+ bg_page[cpu_ad[2:1]] <= cpu_dw[2:0];
+ else if (cpu_wr_scrreg0 & !vram_bank) begin
+ if (cpu_ad[6])
+ scrx_row[cpu_ad[5:0]] <= cpu_dw;
+ else if (cpu_ad[7:0] == 8'hba)
+ scry <= cpu_dw;
+ end
+ if (SYSTEM2_ROWSCROLL)
+ scrx <= {scrx_row[{PV[7:3],1'b1}],scrx_row[{PV[7:3],1'b0}]};
+ else
+ scrx <= {scrx_row[1],scrx_row[0]};
+ end else begin
+ if (cpu_wr_scrreg1) begin
+ case(cpu_ad[7:0])
+ 8'hBD: scry <= cpu_dw;
+ 8'hFC: scrx[ 7:0] <= cpu_dw;
+ 8'hFD: scrx[15:8] <= cpu_dw;
+ default:;
+ endcase
+ end
end
end
end
@@ -290,21 +360,15 @@ COLLRAM_S sprc(
);
// VRAM
-wire [7:0] cpu_rd_vram0, cpu_rd_vram1;
-VRAM vram0(
- clk, cpu_ad[10:0], cpu_rd_vram0, cpu_dw, cpu_wr_vram0,
- clk, vram0ad, vram0dt
+wire [7:0] cpu_rd_vram;
+VRAM vram(
+ clk, {vram_bank, cpu_ad[11:0]}, cpu_rd_vram, cpu_dw, cpu_wr_vram,
+ vram0ad, vram0dt, vram1ad, vram1dt
);
-VRAM vram1(
- clk, cpu_ad[10:0], cpu_rd_vram1, cpu_dw, cpu_wr_vram1,
- clk, vram1ad, vram1dt
-);
-
// CPU Read Data Selector
assign cpu_dr = cpu_cs_palram ? cpu_rd_palram :
- cpu_cs_vram0 ? cpu_rd_vram0 :
- cpu_cs_vram1 ? cpu_rd_vram1 :
+ cpu_cs_vram ? cpu_rd_vram :
cpu_cs_spram ? cpu_rd_spram :
cpu_cs_sprcoll ? cpu_rd_sprcoll :
cpu_cs_mixcoll ? cpu_rd_mixcoll : 8'hFF;
@@ -316,6 +380,7 @@ endmodule
//----------------------------------
module VIDHVGEN
(
+ input SYSTEM2,
input [8:0] PH,
input [8:0] PV,
@@ -339,14 +404,14 @@ assign VBLK = (PV == 9'd224) & (PH <= 9'd64);
assign HPOS = PH+1'd1;
assign VPOS = PV;
-wire [7:0] BGHSCR = scrx[9:1]+4'd14;
+wire [7:0] BGHSCR = scrx[8:1];
wire [7:0] BGVSCR = scry;
-assign BG0HP = (HPOS-BGHSCR)+8'd3;
-assign BG0VP = (VPOS+BGVSCR);
+assign BG0HP = SYSTEM2 ? HPOS : (HPOS-BGHSCR-4'd14)+4'd3;
+assign BG0VP = SYSTEM2 ? VPOS : (VPOS+BGVSCR);
-assign BG1HP = HPOS+8'd3;
-assign BG1VP = VPOS;
+assign BG1HP = SYSTEM2 ? HPOS-BGHSCR-4'd4 : HPOS+4'd3;
+assign BG1VP = SYSTEM2 ? (VPOS+BGVSCR) : VPOS;
endmodule
@@ -356,57 +421,56 @@ endmodule
//----------------------------------
module VIDADEC
(
- input [15:0] cpu_ad,
- input cpu_wr,
+ input [15:0] cpu_ad,
+ input cpu_wr,
- output cpu_cs_palram,
- output cpu_cs_spram,
- output cpu_cs_mixcoll,
- output cpu_cs_sprcoll,
- output cpu_cs_vram0,
- output cpu_cs_vram1,
-
- output cpu_wr_palram,
- output cpu_wr_spram,
- output cpu_wr_mixcoll,
- output cpu_wr_mixcollclr,
- output cpu_wr_sprcoll,
- output cpu_wr_sprcollclr,
- output cpu_wr_vram0,
- output cpu_wr_vram1,
- output cpu_wr_scrreg,
+ output cpu_cs_palram,
+ output cpu_cs_spram,
+ output cpu_cs_mixcoll,
+ output cpu_cs_sprcoll,
+ output cpu_cs_vram,
- output cpu_rd
+ output cpu_wr_palram,
+ output cpu_wr_spram,
+ output cpu_wr_mixcoll,
+ output cpu_wr_mixcollclr,
+ output cpu_wr_sprcoll,
+ output cpu_wr_sprcollclr,
+ output cpu_wr_vram,
+ output cpu_wr_scrreg0,
+ output cpu_wr_scrreg1,
+ output cpu_wr_bgpage,
+
+ output cpu_rd
);
-assign cpu_cs_palram = (cpu_ad[15:11] == 5'b1101_1 );
-assign cpu_cs_spram = (cpu_ad[15:11] == 5'b1101_0 );
-assign cpu_cs_mixcoll = (cpu_ad[15:10] == 6'b1111_00 );
-wire cpu_cs_mixcollclr = (cpu_ad[15:10] == 6'b1111_01 );
-assign cpu_cs_sprcoll = (cpu_ad[15:10] == 6'b1111_10 );
-wire cpu_cs_sprcollclr = (cpu_ad[15:10] == 6'b1111_11 );
-assign cpu_cs_vram0 = (cpu_ad[15:11] == 5'b1110_0 );
-assign cpu_cs_vram1 = (cpu_ad[15:11] == 5'b1110_1 );
-wire cpu_cs_scrreg = (cpu_ad[15: 8] == 8'b1110_1111);
+assign cpu_cs_palram = (cpu_ad[15:11] == 5'b1101_1);
+assign cpu_cs_spram = (cpu_ad[15:11] == 5'b1101_0);
+assign cpu_cs_mixcoll = (cpu_ad[15:10] == 6'b1111_00);
+wire cpu_cs_mixcollclr = (cpu_ad[15:10] == 6'b1111_01);
+assign cpu_cs_sprcoll = (cpu_ad[15:10] == 6'b1111_10);
+wire cpu_cs_sprcollclr = (cpu_ad[15:10] == 6'b1111_11);
+assign cpu_cs_vram = (cpu_ad[15:12] == 4'b1110);
+wire cpu_cs_scrreg0 = (cpu_ad[15: 7] == 9'b1110_0111_1);
+wire cpu_cs_scrreg1 = (cpu_ad[15: 8] == 8'b1110_1111);
+wire cpu_cs_bgpage = (cpu_ad[15: 3] == 13'b1110_0111_0100_0) & !cpu_ad[0];
-
-assign cpu_wr_palram = cpu_cs_palram & cpu_wr;
-assign cpu_wr_spram = cpu_cs_spram & cpu_wr;
+assign cpu_wr_palram = cpu_cs_palram & cpu_wr;
+assign cpu_wr_spram = cpu_cs_spram & cpu_wr;
assign cpu_wr_mixcoll = cpu_cs_mixcoll & cpu_wr;
assign cpu_wr_mixcollclr = cpu_cs_mixcollclr & cpu_wr;
assign cpu_wr_sprcoll = cpu_cs_sprcoll & cpu_wr;
assign cpu_wr_sprcollclr = cpu_cs_sprcollclr & cpu_wr;
-assign cpu_wr_vram0 = cpu_cs_vram0 & cpu_wr;
-assign cpu_wr_vram1 = cpu_cs_vram1 & cpu_wr;
-assign cpu_wr_scrreg = cpu_cs_scrreg & cpu_wr;
-
+assign cpu_wr_scrreg0 = cpu_cs_scrreg0 & cpu_wr;
+assign cpu_wr_scrreg1 = cpu_cs_scrreg1 & cpu_wr;
+assign cpu_wr_bgpage = cpu_cs_bgpage & cpu_wr;
+assign cpu_wr_vram = cpu_cs_vram & cpu_wr;
assign cpu_rd = cpu_cs_palram |
- cpu_cs_vram0 |
- cpu_cs_vram1 |
- cpu_cs_spram |
- cpu_cs_sprcoll |
- cpu_cs_mixcoll ;
+ cpu_cs_vram |
+ cpu_cs_spram |
+ cpu_cs_sprcoll |
+ cpu_cs_mixcoll;
endmodule
@@ -421,17 +485,21 @@ module BGGEN
input [8:0] HP,
input [8:0] VP,
+ input [11:0] BG_PAGES,
- output [9:0] VRAMAD,
- input [15:0] VRAMDT,
+ output [12:0] VRAMAD,
+ input [15:0] VRAMDT,
- output [13:0] TILEAD,
- input [23:0] TILEDT,
+ output [14:0] TILEAD,
+ input [23:0] TILEDT,
output [10:0] OPIX
);
-assign VRAMAD = { VP[7:3], HP[7:3] };
+assign VRAMAD = {VP[8] ? (HP[8] ? BG_PAGES[8:6] : BG_PAGES[11:9])
+ : (HP[8] ? BG_PAGES[2:0] : BG_PAGES[5:3]),
+ VP[7:3], HP[7:3]};
+
assign TILEAD = { VRAMDT[15], VRAMDT[10:0], VP[2:0] };
reg [31:0] BGREG;
@@ -482,7 +550,7 @@ module COLMIX
output [10:0] palno,
input [7:0] palout,
- output reg [7:0] RGB8
+ output reg [7:0] color
);
assign cltidx = { 1'b0,
@@ -504,7 +572,7 @@ wire [10:0] palno_d = {HPOS[7],VPOS[7:2],HPOS[6:3]};
assign palno = PALDSW ? palno_d : palno_i;
-always @(posedge CLK ) if (VCLK_EN) RGB8 <= palout;
+always @(posedge CLK ) if (VCLK_EN) color <= palout;
endmodule
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/Segasys1_MiST.sv b/Arcade_MiST/Sega System 1 Hardware/rtl/Segasys1_MiST.sv
index 51985ae8..2aac66f2 100644
--- a/Arcade_MiST/Sega System 1 Hardware/rtl/Segasys1_MiST.sv
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/Segasys1_MiST.sv
@@ -32,6 +32,7 @@ module Segasys1_MiST(
`include "rtl/build_id.v"
`define CORE_NAME "FLICKY"
+
localparam CONF_STR = {
`CORE_NAME,";ROM;",
"O2,Rotate Controls,Off,On;",
@@ -51,6 +52,12 @@ always @(*) begin
INP0 = ~{m_left, m_right,m_up, m_down,1'b0,m_fireB,m_fireA,m_fireC};
INP1 = ~{m_left2,m_right2,m_up2, m_down2,1'b0,m_fire2B,m_fire2A,m_fire2C};
INP2 = ~{2'b00,m_two_players, m_one_player,3'b000, m_coin1};
+ if (core_mod[5]) begin
+ // Block Gal
+ INP0 = ~spin[8:1];
+ INP1 = ~spin[8:1];
+ INP2 = ~{m_fire2A | |mouse_flags[2:0], m_fireA | |mouse_flags[2:0], m_two_players, m_one_player, 2'b00, m_coin2, m_coin1};
+ end else
if (core_mod[3]) begin
//WaterMatch
INP0 = ~{m_left, m_right, m_up, m_down, m_left2,m_right2,m_up2,m_down2};
@@ -59,11 +66,22 @@ always @(*) begin
end
end
+wire signed [8:0] spin;
+wire signed [8:0] spin_next = spin + mouse_x;
+always @(posedge clk_sys) begin
+ if (mouse_strobe) begin
+ if (spin[8] != mouse_x[8] || spin[8] == spin_next[8])
+ spin <= spin_next;
+ else
+ spin <= {spin[8], {8{~spin[8]}}};
+ end
+end
+
wire [7:0] DSW0 = status[15: 8];
wire [7:0] DSW1 = status[23:16];
-wire [6:0] core_mod; // [0]=SYS1/SYS2,[1]=H/V,[2]=H256/H240,[3]=4controllers
-wire [1:0] orientation = { 1'b0, core_mod[1] };
+wire [6:0] core_mod; // [0]=SYS1/SYS2,[1]=H/V,[2]=H256/H240,[3]=4controllers,[4]=CW/CCW,[5]=spinner,[6]=SYS2 rowscroll,
+wire [1:0] orientation = { core_mod[4], core_mod[1] };
assign LED = ~ioctl_downl;
assign SDRAM_CLK = sdram_clk;
@@ -89,6 +107,10 @@ wire [7:0] joystick_3;
wire key_pressed;
wire key_strobe;
wire [7:0] key_code;
+wire signed [8:0] mouse_x;
+wire signed [8:0] mouse_y;
+wire [7:0] mouse_flags;
+wire mouse_strobe;
wire scandoublerD;
wire ypbpr;
wire no_csync;
@@ -111,19 +133,23 @@ user_io(
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
+ .mouse_strobe (mouse_strobe ),
+ .mouse_x (mouse_x ),
+ .mouse_y (mouse_y ),
+ .mouse_flags (mouse_flags ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status )
);
wire [15:0] audio;
-wire [15:0] rom_addr;
-wire [15:0] rom_do;
-wire [15:0] spr_rom_addr;
+wire [16:0] cpu_rom_addr;
+wire [15:0] cpu_rom_do;
+wire [16:0] spr_rom_addr;
wire [15:0] spr_rom_do;
-wire [12:0] snd_rom_addr;
+wire [14:0] snd_rom_addr;
wire [15:0] snd_rom_do;
-wire [13:0] tile_rom_addr;
+wire [15:0] tile_rom_addr;
wire [23:0] tile_rom_do;
wire ioctl_downl;
wire [7:0] ioctl_index;
@@ -144,7 +170,7 @@ data_io data_io(
);
reg port1_req, port2_req;
-wire [24:0] tl_ioctl_addr = ioctl_addr - 18'h20000;
+wire [24:0] tl_ioctl_addr = ioctl_addr - 20'h40000;
sdram #(80) sdram(
.*,
.init_n ( pll_locked ),
@@ -159,11 +185,11 @@ sdram #(80) sdram(
.port1_d ( {ioctl_dout, ioctl_dout} ),
.port1_q ( ),
- .cpu1_addr ( ioctl_downl ? 16'hffff : {1'b0, rom_addr[15:1]}), // offset 0
- .cpu1_q ( rom_do ),
- .cpu2_addr ( ioctl_downl ? 16'hffff : (16'h6000 + snd_rom_addr[12:1]) ), // offset c000
+ .cpu1_addr ( ioctl_downl ? 17'h1ffff : (17'h4000 + cpu_rom_addr[16:1]) ), // offset 8000h
+ .cpu1_q ( cpu_rom_do ),
+ .cpu2_addr ( ioctl_downl ? 17'h1ffff : snd_rom_addr[14:1] ), // offset 0
.cpu2_q ( snd_rom_do ),
- .cpu3_addr ( ioctl_downl ? 16'hffff : (16'h8000 + spr_rom_addr[15:1]) ), // offset 10000
+ .cpu3_addr ( ioctl_downl ? 17'h1ffff : (17'h10000 + spr_rom_addr[16:1]) ), // offset 20000h
.cpu3_q ( spr_rom_do ),
// port2 for backround tiles
@@ -175,7 +201,7 @@ sdram #(80) sdram(
.port2_d ( {ioctl_dout, ioctl_dout} ),
.port2_q ( ),
- .sp_addr ( ioctl_downl ? 15'h7fff : tile_rom_addr ),
+ .sp_addr ( ioctl_downl ? 16'hffff : tile_rom_addr ),
.sp_q ( tile_rom_do )
);
@@ -210,13 +236,17 @@ SEGASYSTEM1 System1_Top(
.DSW0(DSW0),
.DSW1(DSW1),
+
+ .SYSTEM2(core_mod[0]),
+ .SYSTEM2_ROWSCROLL(core_mod[6]),
+
.PH(HPOS),
.PV(VPOS),
.PCLK_EN(PCLK_EN),
.POUT(POUT),
- .cpu_rom_addr(rom_addr),
- .cpu_rom_do( rom_addr[0] ? rom_do[15:8] : rom_do[7:0] ),
+ .cpu_rom_addr(cpu_rom_addr),
+ .cpu_rom_do(cpu_rom_addr[0] ? cpu_rom_do[15:8] : cpu_rom_do[7:0] ),
.snd_rom_addr(snd_rom_addr),
.snd_rom_do(snd_rom_addr[0] ? snd_rom_do[15:8] : snd_rom_do[7:0] ),
@@ -228,20 +258,19 @@ SEGASYSTEM1 System1_Top(
.tile_rom_do(tile_rom_do),
.ROMCL(clk_sys),
- .ROMAD(ioctl_addr[17:0]),
- .ROMDT( ioctl_dout ),
- .ROMEN( ioctl_wr ),
+ .ROMAD(ioctl_addr),
+ .ROMDT(ioctl_dout),
+ .ROMEN(ioctl_wr),
.SOUT(audio)
);
wire PCLK_EN;
wire [8:0] HPOS,VPOS;
-wire [7:0] POUT;
+wire [11:0] POUT;
wire [7:0] HOFFS = 8'd2;
wire [7:0] VOFFS = 8'd2;
wire hs, vs;
-wire [2:0] g, r;
-wire [1:0] b;
+wire [3:0] b, g, r;
HVGEN hvgen
(
@@ -250,14 +279,14 @@ HVGEN hvgen
.H240(core_mod[2]),.HOFFS(HOFFS),.VOFFS(VOFFS)
);
-mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
+mist_video #(.COLOR_DEPTH(4), .SD_HCNT_WIDTH(10)) mist_video(
.clk_sys ( clk_sys ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS3 ( SPI_SS3 ),
.SPI_DI ( SPI_DI ),
.R ( r ),
.G ( g ),
- .B ( {b, b[1]} ),
+ .B ( b ),
.HSync ( hs ),
.VSync ( vs ),
.VGA_R ( VGA_R ),
@@ -267,7 +296,7 @@ mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
.VGA_HS ( VGA_HS ),
.ce_divider ( 1'b0 ),
.blend ( blend ),
- .rotate ( {1'b0, rotate} ),
+ .rotate ( {core_mod[4], rotate} ),
.scandoubler_disable(scandoublerD ),
.scanlines ( scanlines ),
.ypbpr ( ypbpr ),
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/parts.v b/Arcade_MiST/Sega System 1 Hardware/rtl/parts.v
index a420f669..5a5000e9 100644
--- a/Arcade_MiST/Sega System 1 Hardware/rtl/parts.v
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/parts.v
@@ -155,52 +155,66 @@ endmodule
//----------------------------------
module VRAMs
(
- input clk0,
- input [9:0] adr0,
- output reg [7:0] dat0,
- input [7:0] dtw0,
- input wen0,
+ input clk,
+ input [12:0] adr0,
+ output reg [7:0] dat0,
+ input [7:0] dtw0,
+ input wen0,
- input clk1,
- input [9:0] adr1,
- output reg [7:0] dat1
+ input [12:0] adr1,
+ output reg [7:0] dat1,
+
+ input [12:0] adr2,
+ output reg [7:0] dat2
);
-reg [7:0] core [0:1023];
+reg [7:0] core ['h2000];
-always @( posedge clk0 ) begin
+reg sel;
+reg [12:0] adr;
+reg [7:0] dat;
+
+always @( posedge clk ) begin
if (wen0) core[adr0] <= dtw0;
- else dat0 <= core[adr0];
+ dat0 <= core[adr0];
+
+ adr <= sel ? adr1 : adr2;
+ dat <= core[adr];
end
-always @( posedge clk1 ) begin
- dat1 <= core[adr1];
+always @( posedge clk ) begin
+ sel <= ~sel;
+ if (sel) dat1 <= dat; else dat2 <= dat;
end
endmodule
module VRAM
(
- input clk0,
- input [10:0] adr0,
- output [7:0] dat0,
- input [7:0] dtw0,
- input wen0,
+ input clk,
+ input [13:0] adr0,
+ output [7:0] dat0,
+ input [7:0] dtw0,
+ input wen0,
- input clk1,
- input [9:0] adr1,
- output [15:0] dat1
+ input [12:0] adr1,
+ output [15:0] dat1,
+ input [12:0] adr2,
+ output [15:0] dat2
);
wire even = ~adr0[0];
wire odd = adr0[0];
-wire [7:0] do00, do01, do10, do11;
-VRAMs ram0( clk0, adr0[10:1], do00, dtw0, wen0 & even, clk1, adr1, do10 );
-VRAMs ram1( clk0, adr0[10:1], do01, dtw0, wen0 & odd, clk1, adr1, do11 );
+wire [7:0] do00, do01, do10, do11, do20, do21;
+VRAMs ram0(clk, adr0[13:1], do00, dtw0, wen0 & even,
+ adr1, do10, adr2, do20);
+VRAMs ram1(clk, adr0[13:1], do01, dtw0, wen0 & odd,
+ adr1, do11, adr2, do21);
-assign dat0 = adr0[0] ? do01 : do00;
+assign dat0 = odd ? do01 : do00;
assign dat1 = { do11, do10 };
+assign dat2 = { do21, do20 };
endmodule
diff --git a/Arcade_MiST/Sega System 1 Hardware/rtl/sdram.sv b/Arcade_MiST/Sega System 1 Hardware/rtl/sdram.sv
index 7fa4a0a2..b8f56f02 100644
--- a/Arcade_MiST/Sega System 1 Hardware/rtl/sdram.sv
+++ b/Arcade_MiST/Sega System 1 Hardware/rtl/sdram.sv
@@ -46,11 +46,11 @@ module sdram (
input [15:0] port1_d,
output reg [15:0] port1_q,
- input [16:1] cpu1_addr,
+ input [17:1] cpu1_addr,
output reg [15:0] cpu1_q,
- input [16:1] cpu2_addr,
+ input [17:1] cpu2_addr,
output reg [15:0] cpu2_q,
- input [16:1] cpu3_addr,
+ input [17:1] cpu3_addr,
output reg [15:0] cpu3_q,
input port2_req,
@@ -61,7 +61,7 @@ module sdram (
input [15:0] port2_d,
output reg [31:0] port2_q,
- input [16:2] sp_addr,
+ input [17:2] sp_addr,
output reg [31:0] sp_q
);
@@ -156,8 +156,8 @@ assign SDRAM_nWE = sd_cmd[0];
reg [24:1] addr_latch[3];
reg [24:1] addr_latch_next[2];
-reg [16:1] addr_last[4];
-reg [16:2] addr_last2[2];
+reg [17:1] addr_last[4];
+reg [17:2] addr_last2[2];
reg [15:0] din_latch[2];
reg [1:0] oe_latch;
reg [1:0] we_latch;
@@ -190,13 +190,13 @@ always @(*) begin
addr_latch_next[0] = { 1'b0, port1_a };
end else if (cpu1_addr != addr_last[PORT_CPU1]) begin
next_port[0] = PORT_CPU1;
- addr_latch_next[0] = { 8'd0, cpu1_addr };
+ addr_latch_next[0] = { 7'd0, cpu1_addr };
end else if (cpu2_addr != addr_last[PORT_CPU2]) begin
next_port[0] = PORT_CPU2;
- addr_latch_next[0] = { 8'd0, cpu2_addr };
+ addr_latch_next[0] = { 7'd0, cpu2_addr };
end else if (cpu3_addr != addr_last[PORT_CPU3]) begin
next_port[0] = PORT_CPU3;
- addr_latch_next[0] = { 8'd0, cpu3_addr };
+ addr_latch_next[0] = { 7'd0, cpu3_addr };
end else begin
next_port[0] = PORT_NONE;
addr_latch_next[0] = addr_latch[0];
@@ -210,7 +210,7 @@ always @(*) begin
addr_latch_next[1] = { 1'b1, port2_a };
end else if (sp_addr != addr_last2[PORT_SP]) begin
next_port[1] = PORT_SP;
- addr_latch_next[1] = { 1'b1, 7'd0, sp_addr, 1'b0 };
+ addr_latch_next[1] = { 1'b1, 6'd0, sp_addr, 1'b0 };
end else begin
next_port[1] = PORT_NONE;
addr_latch_next[1] = addr_latch[1];
@@ -257,7 +257,7 @@ always @(posedge clk) begin
sd_cmd <= CMD_ACTIVE;
SDRAM_A <= addr_latch_next[0][22:10];
SDRAM_BA <= addr_latch_next[0][24:23];
- addr_last[next_port[0]] <= addr_latch_next[0][16:1];
+ addr_last[next_port[0]] <= addr_latch_next[0][17:1];
if (next_port[0] == PORT_REQ) begin
{ oe_latch[0], we_latch[0] } <= { ~port1_we, port1_we };
ds[0] <= port1_ds;
@@ -281,7 +281,7 @@ always @(posedge clk) begin
sd_cmd <= CMD_ACTIVE;
SDRAM_A <= addr_latch_next[1][22:10];
SDRAM_BA <= addr_latch_next[1][24:23];
- addr_last2[next_port[1]] <= addr_latch_next[1][16:2];
+ addr_last2[next_port[1]] <= addr_latch_next[1][17:2];
if (next_port[1] == PORT_REQ) begin
{ oe_latch[1], we_latch[1] } <= { ~port1_we, port1_we };
ds[1] <= port2_ds;
diff --git a/Arcade_MiST/Universal MrDo/MrDo.qsf b/Arcade_MiST/Universal MrDo/MrDo.qsf
index afc21e15..4a010507 100644
--- a/Arcade_MiST/Universal MrDo/MrDo.qsf
+++ b/Arcade_MiST/Universal MrDo/MrDo.qsf
@@ -41,7 +41,7 @@
# ========================
set_global_assignment -name ORIGINAL_QUARTUS_VERSION "12.1 SP1"
set_global_assignment -name PROJECT_CREATION_TIME_DATE "09:07:52 FEBRUARY 01, 2013"
-set_global_assignment -name LAST_QUARTUS_VERSION "13.1 SP4.26"
+set_global_assignment -name LAST_QUARTUS_VERSION 13.1
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name SMART_RECOMPILE ON
set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl"
@@ -222,6 +222,7 @@ set_global_assignment -name ENABLE_SIGNALTAP OFF
set_global_assignment -name USE_SIGNALTAP_FILE output_files/mrdo.stp
set_global_assignment -name SYSTEMVERILOG_FILE rtl/MrDo_mist.sv
set_global_assignment -name SYSTEMVERILOG_FILE rtl/MrDo_top.sv
+set_global_assignment -name VERILOG_FILE rtl/secret_pal.v
set_global_assignment -name VERILOG_FILE rtl/video_timing.v
set_global_assignment -name VERILOG_FILE rtl/ram_dp_1k.v
set_global_assignment -name VERILOG_FILE rtl/cpu_ram.v
diff --git a/Arcade_MiST/Universal MrDo/meta/Mr.Do.Fixed.mra b/Arcade_MiST/Universal MrDo/meta/Mr.Do.Fixed.mra
index 6076be72..395ad154 100644
--- a/Arcade_MiST/Universal MrDo/meta/Mr.Do.Fixed.mra
+++ b/Arcade_MiST/Universal MrDo/meta/Mr.Do.Fixed.mra
@@ -37,6 +37,5 @@
- 00
\ No newline at end of file
diff --git a/Arcade_MiST/Universal MrDo/meta/Mr.Do.mra b/Arcade_MiST/Universal MrDo/meta/Mr.Do.mra
index f079226e..078433ed 100644
--- a/Arcade_MiST/Universal MrDo/meta/Mr.Do.mra
+++ b/Arcade_MiST/Universal MrDo/meta/Mr.Do.mra
@@ -37,6 +37,5 @@
- 00
diff --git a/Arcade_MiST/Universal MrDo/rtl/MrDo_top.sv b/Arcade_MiST/Universal MrDo/rtl/MrDo_top.sv
index 7526d763..08e928db 100644
--- a/Arcade_MiST/Universal MrDo/rtl/MrDo_top.sv
+++ b/Arcade_MiST/Universal MrDo/rtl/MrDo_top.sv
@@ -678,13 +678,8 @@ reg [15:0] unhandled_addr ;
always @ (posedge clk_20M ) begin
if ( rd_n == 0 ) begin
- // read program rom
- if (cpu_addr == 16'h049a ) begin
- // patch rom to bypass "secret" pal protection
- // cpu tries to read val from 0x9803 which is state machine pal
- // written to on all tile ram access. should try converting pal logic to verilog.
- cpu_din <= 0;
- end else if ( cpu_addr >= 16'h0000 && cpu_addr < 16'h8000 ) begin
+ // read program rom
+ if ( cpu_addr >= 16'h0000 && cpu_addr < 16'h8000 ) begin
cpu_din <= rom_do; // 0x0000
end else if ( cpu_addr >= 16'h8000 && cpu_addr < 16'h8400 ) begin
cpu_din <= bg_ram0_data;
@@ -695,7 +690,7 @@ always @ (posedge clk_20M ) begin
end else if ( cpu_addr >= 16'h8c00 && cpu_addr < 16'h9000 ) begin
cpu_din <= fg_ram1_data;
end else if ( cpu_addr == 16'h9803 ) begin
- cpu_din <= 0;
+ cpu_din <= u001_dout;
end else if ( cpu_addr == 16'ha000 ) begin
cpu_din <= p1;
end else if ( cpu_addr == 16'ha001 ) begin
@@ -755,6 +750,24 @@ always @ (posedge clk_20M ) begin
end
end
+// u001 "secret" pal protection
+// cpu tries to read val from 0x9803 which is state machine pal
+// written to on all tile ram access..
+
+wire [7:0] u001_dout ;
+
+reg gfx_ram_wr_old;
+always @(posedge clk_20M) gfx_ram_wr_old <= gfx_fg_ram0_wr | gfx_fg_ram1_wr;
+wire secret_pal_clk_en = ~gfx_ram_wr_old & (gfx_fg_ram0_wr | gfx_fg_ram1_wr);
+
+secret_pal u001
+(
+ .clk( clk_20M ),
+ .clk_en( secret_pal_clk_en ),
+ .din( cpu_dout ),
+ .dout( u001_dout )
+);
+
// first 256 bytes are attribute data
// bit 7 of attr == MSB of tile
// bit 6 tile flip
diff --git a/Arcade_MiST/Universal MrDo/rtl/secret_pal.v b/Arcade_MiST/Universal MrDo/rtl/secret_pal.v
new file mode 100644
index 00000000..36c8355d
--- /dev/null
+++ b/Arcade_MiST/Universal MrDo/rtl/secret_pal.v
@@ -0,0 +1,79 @@
+
+// PAL16R6 (IC U001)
+
+// no feedback used so a 128 byte lookup table could work too.
+
+module secret_pal
+(
+ input clk,
+ input clk_en,
+ input [7:0] din,
+ output [7:0] dout
+);
+
+wire [9:2] i ;
+reg [19:12] r ;
+
+// data bus d7 (msb) is pin 2 so reverse input bit order
+assign i = {din[0],din[1],din[2],din[3],din[4],din[5],din[6],din[7]};
+
+assign dout = r ;
+
+wire t1 = i[2] & ~i[3] & i[4] & ~i[5] & ~i[6] & ~i[8] & i[9] ;
+wire t2 = ~i[2] & ~i[3] & i[4] & i[5] & ~i[6] & i[8] & ~i[9] ;
+wire t3 = i[2] & i[3] & ~i[4] & ~i[5] & i[6] & ~i[8] & i[9] ;
+wire t4 = ~i[2] & i[3] & i[4] & ~i[5] & i[6] & i[8] & i[9] ;
+
+
+always @(posedge clk) begin
+
+ if (clk_en) begin
+ // pal output is registered clocked by pin 1 connected to (TRAM WE) $8800-$8fff
+ // pal OE is enabled by reading address $9803 (SECRE)
+
+ r[12] <= 0;
+
+ // /rf13 := i2 & /i3 & i4 & /i5 & /i6 & /i8 & i9
+ r[13] <= ~ ( t1 );
+
+ // /rf14 := /i2 & /i3 & i4 & i5 & /i6 & i8 & /i9 + i2 & /i3 & i4 & /i5 & /i6 & /i8 & i9
+ r[14] <= ~ ( t2 | t1 );
+
+ // /rf15 := i2 & i3 & /i4 & /i5 & i6 & /i8 & i9 + i2 & /i3 & i4 & /i5 & /i6 & /i8 & i9
+ r[15] <= ~ ( t3 | t1 );
+
+ // /rf16 := i2 & /i3 & i4 & /i5 & /i6 & /i8 & i9
+ r[16] <= ~ ( t1 );
+
+ // /rf17 := i2 & i3 & /i4 & /i5 & i6 & /i8 & i9 + i2 & /i3 & i4 & /i5 & /i6 & /i8 & i9
+ r[17] <= ~ ( t3 | t1 );
+
+ // /rf18 := /i2 & i3 & i4 & /i5 & i6 & i8 & i9 + i2 & i3 & /i4 & /i5 & i6 & /i8 & i9
+ r[18] <= ~ ( t4 | t3 );
+
+ r[19] <= 0;
+ end
+end
+
+endmodule
+/*
+
+/rf13 := i2 & /i3 & i4 & /i5 & /i6 & /i8 & i9
+rf13.oe = OE
+
+/rf14 := /i2 & /i3 & i4 & i5 & /i6 & i8 & /i9 + i2 & /i3 & i4 & /i5 & /i6 & /i8 & i9
+rf14.oe = OE
+
+/rf15 := i2 & i3 & /i4 & /i5 & i6 & /i8 & i9 + i2 & /i3 & i4 & /i5 & /i6 & /i8 & i9
+rf15.oe = OE
+
+/rf16 := i2 & /i3 & i4 & /i5 & /i6 & /i8 & i9
+rf16.oe = OE
+
+/rf17 := i2 & i3 & /i4 & /i5 & i6 & /i8 & i9 + i2 & /i3 & i4 & /i5 & /i6 & /i8 & i9
+rf17.oe = OE
+
+/rf18 := /i2 & i3 & i4 & /i5 & i6 & i8 & i9 + i2 & i3 & /i4 & /i5 & i6 & /i8 & i9
+rf18.oe = OE
+
+*/
\ No newline at end of file