1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-03-28 10:33:05 +00:00

Merge pull request #73 from gyurco/robotron

Convert more cores to single RBF + MRA/ARC files
This commit is contained in:
Marcel
2020-02-14 21:35:35 +01:00
committed by GitHub
121 changed files with 1730 additions and 5198 deletions

View File

@@ -1 +1,4 @@
Test
*.rom
*.arc

View File

@@ -2,18 +2,12 @@ Traverse USA by Dar (darfpga@aol.fr) (16/03/2019)
Port to MiST
TRAVRUSA.ROM or SHTRIDER.ROM is required at the root of the SD-Card.
Creating in Windows:
copy /B zr1-0.m3 + zr1-5.l3 + zr1-6a.k3 + zr1-7.j3 + mr10.1a + mr10.1a + zippyrac.001 + mr8.3c + mr9.3a + zr1-8.n3 + zr1-9.l3 + zr1-10.k3 + mmi6349.ij + tbp24s10.3 + tbp18s.2 > TRAVRUSA.ROM
copy /B sr01a.bin + sr02a.bin + sr03a.bin + sr04a.bin + sr11a.bin + sr05a.bin + sr06a.bin + sr07a.bin + sr08a.bin + sr09a.bin + sr10b.bin + 1.bpr + 2.bpr + 3.bpr + 4.bpr > SHTRIDER.ROM
Creating in Linux:
cat zr1-0.m3 zr1-5.l3 zr1-6a.k3 zr1-7.j3 mr10.1a mr10.1a zippyrac.001 mr8.3c mr9.3a zr1-8.n3 zr1-9.l3 zr1-10.k3 mmi6349.ij tbp24s10.3 tbp18s.2 > TRAVRUSA.ROM
cat sr01a.bin sr02a.bin sr03a.bin sr04a.bin sr11a.bin sr05a.bin sr06a.bin sr07a.bin sr08a.bin sr09a.bin sr10b.bin 1.bpr 2.bpr 3.bpr 4.bpr > SHTRIDER.ROM
Some ROM files contain different names, like:
zippyrac.000
zippyrac.005
zippyrac.006
zippyrac.007
-- Usage:
-- - Create ROM and ARC files from the MRA files in the meta directory
-- using the MRA utility.
-- Example: mra -A -z /path/to/mame/roms travrusa.mra
-- - Copy the ROM files to the root of the SD Card
-- - Copy the RBF and ARC files to the same folder on the SD Card
--
-- MRA utility: https://github.com/sebdel/mra-tools-c/
--

View File

@@ -0,0 +1,32 @@
<misterromdescription>
<name>Shotrider</name>
<mameversion>0216</mameversion>
<setname>shtrider</setname>
<mratimestamp>201911270000</mratimestamp>
<year>1983</year>
<manufacturer>Irem</manufacturer>
<category>Racing / Motorbike</category>
<rbf>travrusa</rbf>
<rom index="1"><part>1</part></rom>
<rom index="0" zip="shtrider.zip" md5="9e4c8423a33f0c5bf558d475d89e041a" type="merged|nonmerged">
<part name="sr01a.bin"/>
<part name="sr02a.bin"/>
<part name="sr03a.bin"/>
<part name="sr04a.bin"/>
<part name="sr11a.bin"/>
<part name="sr05a.bin"/>
<part name="sr06a.bin"/>
<part name="sr07a.bin"/>
<part name="sr08a.bin"/>
<part name="sr09a.bin"/>
<part name="sr10b.bin"/>
<part name="1.bpr"/>
<part name="2.bpr"/>
<part name="3.bpr"/>
<part name="4.bpr"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,28 @@
<misterromdescription>
<name>Traverse USA - Zippy Race</name>
<mameversion>0216</mameversion>
<setname>travrusa</setname>
<mratimestamp>201911270000</mratimestamp>
<year>1983</year>
<manufacturer>Irem</manufacturer>
<category>Racing / Motorbike</category>
<rbf>travrusa</rbf>
<rom index="1"><part>0</part></rom>
<rom index="0" zip="travrusa.zip" md5="67d6330459d5180670c25842fc3d1d11" type="merged|nonmerged">
<part name="zr1-0.m3"/>
<part name="zr1-5.l3"/>
<part name="zr1-6a.k3"/>
<part name="zr1-7.j3"/>
<part name="mr10.1a"/>
<part name="mr10.1a"/>
<part name="zippyrac.001"/>
<part name="mr8.3c"/>
<part name="mr9.3a"/>
<part name="zr1-8.n3"/>
<part name="zr1-9.l3"/>
<part name="zr1-10.k3"/>
<part name="mmi6349.ij"/>
<part name="tbp24s10.3"/>
<part name="tbp18s.2"/>
</rom>
</misterromdescription>

View File

@@ -50,24 +50,8 @@ module TraverseUSA_MiST(
`include "rtl/build_id.v"
`define CORE_NAME "SHTRIDER"
//`define CORE_NAME "TRAVRUSA"
reg shtrider = 0;
wire [7:0] dip1 = 8'hff;
reg [7:0] dip2;
always @(*) begin
if (`CORE_NAME == "SHTRIDER") begin
shtrider = 1;
// Cocktail(3) / M-Km(1) / Flip(0)
dip2 = { 4'b1111, 2'b11, status[5], 1'b0 };
end else begin
shtrider = 0;
// Diag(7) / Demo(6) / Zippy(5) / Freeze (4) / M-Km(3) / Coin mode (2) / Cocktail(1) / Flip(0)
dip2 = { ~status[9], ~status[8], ~status[7], ~status[6], ~status[5], 3'b110 };
end
end
`define CORE_NAME "TRAVRUSA"
wire [6:0] core_mod;
localparam CONF_STR = {
`CORE_NAME,";;",
@@ -83,6 +67,26 @@ localparam CONF_STR = {
"V,v1.0.",`BUILD_DATE
};
wire rotate = status[2];
wire [1:0] scanlines = status[4:3];
wire blend = status[10];
reg shtrider = 0;
wire [7:0] dip1 = 8'hff;
reg [7:0] dip2;
always @(*) begin
if (core_mod == 7'h1) begin
shtrider = 1;
// Cocktail(3) / M-Km(1) / Flip(0)
dip2 = { 4'b1111, 2'b11, status[5], 1'b0 };
end else begin
shtrider = 0;
// Diag(7) / Demo(6) / Zippy(5) / Freeze (4) / M-Km(3) / Coin mode (2) / Cocktail(1) / Flip(0)
dip2 = { ~status[9], ~status[8], ~status[7], ~status[6], ~status[5], 3'b110 };
end
end
assign LED = 1;
assign AUDIO_R = AUDIO_L;
assign SDRAM_CLK = clk_sys;
@@ -105,13 +109,34 @@ wire [7:0] joystick_0;
wire [7:0] joystick_1;
wire scandoublerD;
wire ypbpr;
wire [10:0] ps2_key;
wire [10:0] audio;
wire hs, vs;
wire blankn;
wire [2:0] g,b;
wire [1:0] r;
wire no_csync;
wire key_pressed;
wire [7:0] key_code;
wire key_strobe;
user_io #(
.STRLEN(($size(CONF_STR)>>3)))
user_io(
.clk_sys (clk_sys ),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.no_csync (no_csync ),
.core_mod (core_mod ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status )
);
wire [14:0] cart_addr;
wire [15:0] sdram_do;
wire cart_rd;
@@ -198,6 +223,11 @@ always @(posedge clk_sys) begin
reset <= status[0] | buttons[1] | ~rom_loaded;
end
wire [10:0] audio;
wire hs, vs;
wire blankn;
wire [2:0] g,b;
wire [1:0] r;
// Traverse_usa
traverse_usa traverse_usa (
@@ -219,19 +249,19 @@ traverse_usa traverse_usa (
.dip_switch_1 ( dip1 ),
.dip_switch_2 ( dip2 ),
.start2 ( btn_two_players ),
.start1 ( btn_one_player ),
.coin1 ( btn_coin ),
.start2 ( m_two_players ),
.start1 ( m_one_player ),
.coin1 ( m_coin1 ),
.right1 ( m_right ),
.left1 ( m_left ),
.brake1 ( m_down ),
.accel1 ( m_up ),
.right2 ( m_right ),
.left2 ( m_left ),
.brake2 ( m_down ),
.accel2 ( m_up ),
.right2 ( m_right2 ),
.left2 ( m_left2 ),
.brake2 ( m_down2 ),
.accel2 ( m_up2 ),
.cpu_rom_addr ( cart_addr ),
.cpu_rom_do ( cart_addr[0] ? sdram_do[15:8] : sdram_do[7:0] ),
@@ -258,33 +288,13 @@ mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
.VGA_B ( VGA_B ),
.VGA_VS ( VGA_VS ),
.VGA_HS ( VGA_HS ),
.rotate ( {1'b1,status[2]} ),
.rotate ( { 1'b1, rotate } ),
.scandoubler_disable( scandoublerD ),
.scanlines ( status[4:3] ),
.scanlines ( scanlines ),
.ypbpr ( ypbpr ),
.no_csync ( no_csync ),
.ce_divider ( 1'b0 ),
.blend ( status[10] )
);
user_io #(
.STRLEN(($size(CONF_STR)>>3)))
user_io(
.clk_sys (clk_sys ),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status )
.blend ( blend )
);
dac #(
@@ -296,43 +306,24 @@ dac(
.dac_o(AUDIO_L)
);
// Rotated Normal
wire m_up = ~status[2] ? btn_left | joystick_0[1] | joystick_1[1] : btn_up | joystick_0[3] | joystick_1[3];
wire m_down = ~status[2] ? btn_right | joystick_0[0] | joystick_1[0] : btn_down | joystick_0[2] | joystick_1[2];
wire m_left = ~status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_left | joystick_0[1] | joystick_1[1];
wire m_right = ~status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_right | joystick_0[0] | joystick_1[0];
wire m_fire = btn_fire1 | joystick_0[4] | joystick_1[4];
wire m_bomb = btn_fire2 | joystick_0[5] | joystick_1[5];
wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF;
wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F;
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
reg btn_one_player = 0;
reg btn_two_players = 0;
reg btn_left = 0;
reg btn_right = 0;
reg btn_down = 0;
reg btn_up = 0;
reg btn_fire1 = 0;
reg btn_fire2 = 0;
reg btn_fire3 = 0;
reg btn_coin = 0;
wire key_pressed;
wire [7:0] key_code;
wire key_strobe;
always @(posedge clk_sys) begin
if(key_strobe) begin
case(key_code)
'h75: btn_up <= key_pressed; // up
'h72: btn_down <= key_pressed; // down
'h6B: btn_left <= key_pressed; // left
'h74: btn_right <= key_pressed; // right
'h76: btn_coin <= key_pressed; // ESC
'h05: btn_one_player <= key_pressed; // F1
'h06: btn_two_players <= key_pressed; // F2
'h14: btn_fire3 <= key_pressed; // ctrl
'h11: btn_fire2 <= key_pressed; // alt
'h29: btn_fire1 <= key_pressed; // Space
endcase
end
end
arcade_inputs inputs (
.clk ( clk_sys ),
.key_strobe ( key_strobe ),
.key_pressed ( key_pressed ),
.key_code ( key_code ),
.joystick_0 ( joystick_0 ),
.joystick_1 ( joystick_1 ),
.rotate ( rotate ),
.orientation ( 2'b11 ),
.joyswap ( 1'b0 ),
.oneplayer ( 1'b1 ),
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
);
endmodule

View File

@@ -1,6 +1,13 @@
-- Arcade: Rush'n Attack (Green Beret) port to MiST by Slingshot
--
-- GBERET.ROM is required on the SD Card
-- Usage:
-- - Create ROM and ARC files from the MRA files in the meta directory
-- using the MRA utility.
-- Example: mra -A -z /path/to/mame/roms gberet.mra
-- - Copy the ROM files to the root of the SD Card
-- - Copy the RBF and ARC files to the same folder on the SD Card
--
-- MRA utility: https://github.com/sebdel/mra-tools-c/
--
-- Keyboard inputs :
--

View File

@@ -0,0 +1,30 @@
<misterromdescription>
<name>Green Beret</name>
<mameversion>0216</mameversion>
<setname>gberet</setname>
<mratimestamp>201911270000</mratimestamp>
<year>1985</year>
<manufacturer>Konami</manufacturer>
<category>Army / Fighter</category>
<rbf>gberet</rbf>
<rom index="1"><part>0</part></rom>
<rom index="0" zip="gberet.zip" md5="886c929e6db35548e44cfdd8d168bdb1" type="merged|nonmerged">
<part name="577l03.10c"/>
<part name="577l02.8c"/>
<part name="577l01.7c"/>
<part name="577l01.7c"/>
<part name="577l06.5e"/>
<part name="577l05.4e"/>
<part name="577l08.4f"/>
<part name="577l04.3e"/>
<part name="577l07.3f"/>
<part name="577h10.5f"/>
<part name="577h11.6f"/>
<part name="577h09.2f"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,26 @@
<misterromdescription>
<name>Mr. Goemon</name>
<mameversion>0216</mameversion>
<setname>mrgoemon</setname>
<mratimestamp>201911270000</mratimestamp>
<year>1985</year>
<manufacturer>Konami</manufacturer>
<category>Army / Fighter</category>
<rbf>gberet</rbf>
<rom index="1"><part>2</part></rom>
<rom index="0" zip="mrgoemon.zip" md5="bb85714cd6fe34f3c812183d6f7ca0a0" type="merged">
<part name="621d01.10c"/>
<part name="621d02.12c"/>
<part name="621d03.4d"/>
<part name="621d04.5d"/>
<part name="621a05.6d"/>
<part name="621a07.6f"/>
<part name="621a08.7f"/>
<part name="621a06.5f"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,27 @@
<misterromdescription>
<name>Rush'n Attack (US)</name>
<mameversion>0216</mameversion>
<setname>rushatck</setname>
<mratimestamp>201911270000</mratimestamp>
<year>1985</year>
<manufacturer>Konami</manufacturer>
<category>Army / Fighter</category>
<rbf>gberet</rbf>
<rom index="1"><part>1</part></rom>
<rom index="0" zip="gberet.zip" md5="77c3e9fb3763204f8e118a7442991c6e" type="merged">
<part name="rushatck/577h03.10c"/>
<part name="rushatck/577h02.8c"/>
<part name="rushatck/577h01.7c"/>
<part name="rushatck/577h01.7c"/>
<part name="577l06.5e"/>
<part name="rushatck/577h05.4e"/>
<part name="577l08.4f"/>
<part name="577l04.3e"/>
<part name="rushatck/577h07.3f"/>
<part name="577h10.5f"/>
<part name="577h11.6f"/>
<part name="577h09.2f"/>
</rom>
</misterromdescription>

View File

@@ -32,13 +32,10 @@ module gberet_mist (
`include "rtl\build_id.v"
//`define CORE_NAME "GBERET"
//`define CORE_NAME "RUSHNA"
`define CORE_NAME "MRGOEMON"
`define CORE_NAME "GBERET"
localparam CONF_STR = {
`CORE_NAME,";ROM;",
`CORE_NAME, ";ROM;",
"O2,Rotate Controls,Off,On;",
"O34,Scandoubler Fx,None,CRT 25%,CRT 50%,CRT 75%;",
"O5,Blend,Off,On;",
@@ -50,16 +47,21 @@ localparam CONF_STR = {
"V,v1.00.",`BUILD_DATE
};
wire rotate = status[2];
wire [1:0] scanlines = status[4:3];
wire blend = status[5];
wire [1:0] dsLives = ~status[9:8];
wire [1:0] dsExtend = ~status[11:10];
wire [1:0] dsDiff = ~status[13:12];
wire dsDemoSnd = ~status[14];
wire [6:0] core_mod;
assign LED = ~ioctl_downl;
assign AUDIO_R = AUDIO_L;
assign SDRAM_CLK = clock_48;
assign SDRAM_CKE = 1;
assign LED = ~ioctl_downl;
assign AUDIO_R = AUDIO_L;
assign SDRAM_CLK = clock_48;
assign SDRAM_CKE = 1;
wire clock_48, pll_locked;
pll pll(
@@ -75,14 +77,32 @@ wire [7:0] joystick_0;
wire [7:0] joystick_1;
wire scandoublerD;
wire ypbpr;
wire [7:0] audio;
wire hs, vs;
wire hb, vb;
wire blankn = ~(hb | vb);
wire [3:0] r, g, b;
wire no_csync;
wire key_strobe;
wire key_pressed;
wire [7:0] key_code;
user_io #(.STRLEN($size(CONF_STR)>>3))user_io(
.clk_sys ( clock_48 ),
.conf_str ( CONF_STR ),
.SPI_CLK ( SPI_SCK ),
.SPI_SS_IO ( CONF_DATA0 ),
.SPI_MISO ( SPI_DO ),
.SPI_MOSI ( SPI_DI ),
.buttons ( buttons ),
.switches ( switches ),
.scandoubler_disable ( scandoublerD ),
.ypbpr ( ypbpr ),
.no_csync ( no_csync ),
.core_mod ( core_mod ),
.key_strobe ( key_strobe ),
.key_pressed ( key_pressed ),
.key_code ( key_code ),
.joystick_0 ( joystick_0 ),
.joystick_1 ( joystick_1 ),
.status ( status )
);
wire [15:0] rom_addr;
wire [15:0] rom_do;
wire [15:1] spr_addr;
@@ -104,7 +124,7 @@ wire [7:0] ioctl_dout;
// 24200 - 2421F - pal - 32b - 2f
data_io data_io(
.clk_sys ( clock_48 ),
.clk_sys ( clock_48 ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS2 ( SPI_SS2 ),
.SPI_DI ( SPI_DI ),
@@ -170,6 +190,11 @@ always @(posedge clock_48) begin
end
//////////////////////////////////////////////
wire [7:0] audio;
wire hs, vs;
wire hb, vb;
wire blankn = ~(hb | vb);
wire [3:0] r, g, b;
wire PCLK;
wire PCLK_EN;
@@ -182,9 +207,9 @@ HVGEN hvgen
.oRGB({b,g,r}),.HBLK(hb),.VBLK(vb),.HSYN(hs),.VSYN(vs)
);
wire [5:0] INP0 = { m_fire2, m_fire1, {m_left, m_down, m_right, m_up} };
wire [5:0] INP1 = { m_fire2, m_fire1, {m_left, m_down, m_right, m_up} };
wire [2:0] INP2 = { m_coin, m_start2, m_start1 };
wire [5:0] INP0 = { m_fireB, m_fireA, m_left, m_down, m_right, m_up };
wire [5:0] INP1 = { m_fire2B, m_fire2A, m_left2, m_down2, m_right2, m_up2 };
wire [2:0] INP2 = { m_coin1 | m_coin2, m_two_players, m_one_player };
wire [7:0] DSW0 = {dsDemoSnd,dsDiff,dsExtend,1'b0,dsLives};
wire [7:0] DSW1 = 8'hFF;
@@ -220,32 +245,14 @@ mist_video #(.COLOR_DEPTH(4), .SD_HCNT_WIDTH(10)) mist_video(
.VGA_B ( VGA_B ),
.VGA_VS ( VGA_VS ),
.VGA_HS ( VGA_HS ),
.rotate ( {1'b1,status[2]} ),
.rotate ( { 1'b1, rotate } ),
.scandoubler_disable( scandoublerD ),
.blend ( status[5] ),
.scanlines ( status[4:3] ),
.blend ( blend ),
.scanlines ( scanlines ),
.no_csync ( no_csync ),
.ypbpr ( ypbpr )
);
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
.clk_sys ( clock_48 ),
.conf_str ( CONF_STR ),
.SPI_CLK ( SPI_SCK ),
.SPI_SS_IO ( CONF_DATA0 ),
.SPI_MISO ( SPI_DO ),
.SPI_MOSI ( SPI_DI ),
.buttons ( buttons ),
.switches ( switches ),
.scandoubler_disable ( scandoublerD ),
.ypbpr ( ypbpr ),
.key_strobe ( key_strobe ),
.key_pressed ( key_pressed ),
.key_code ( key_code ),
.joystick_0 ( joystick_0 ),
.joystick_1 ( joystick_1 ),
.status ( status )
);
dac #(8) dac(
.clk_i(clock_48),
.res_n_i(1),
@@ -253,42 +260,24 @@ dac #(8) dac(
.dac_o(AUDIO_L)
);
// Rotated Normal
wire m_up = status[2] ? btn_right | joystick_0[0] | joystick_1[0] : btn_up | joystick_0[3] | joystick_1[3];
wire m_down = status[2] ? btn_left | joystick_0[1] | joystick_1[1] : btn_down | joystick_0[2] | joystick_1[2];
wire m_left = status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_left | joystick_0[1] | joystick_1[1];
wire m_right = status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_right | joystick_0[0] | joystick_1[0];
wire m_fire1 = btn_fire1 | joystick_0[4] | joystick_1[4];
wire m_fire2 = btn_fire2 | joystick_0[5] | joystick_1[5];
wire m_start1 = btn_one_player;
wire m_start2 = btn_two_players;
wire m_coin = btn_coin;
reg btn_one_player = 0;
reg btn_two_players = 0;
reg btn_left = 0;
reg btn_right = 0;
reg btn_down = 0;
reg btn_up = 0;
reg btn_fire1 = 0;
reg btn_fire2 = 0;
reg btn_coin = 0;
always @(posedge clock_48) begin
if(key_strobe) begin
case(key_code)
'h75: btn_up <= key_pressed; // up
'h72: btn_down <= key_pressed; // down
'h6B: btn_left <= key_pressed; // left
'h74: btn_right <= key_pressed; // right
'h76: btn_coin <= key_pressed; // ESC
'h05: btn_one_player <= key_pressed; // F1
'h06: btn_two_players <= key_pressed; // F2
'h29: btn_fire1 <= key_pressed; // Space
'h11: btn_fire2 <= key_pressed; // Alt
endcase
end
end
wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF;
wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F;
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
arcade_inputs inputs (
.clk ( clock_48 ),
.key_strobe ( key_strobe ),
.key_pressed ( key_pressed ),
.key_code ( key_code ),
.joystick_0 ( joystick_0 ),
.joystick_1 ( joystick_1 ),
.rotate ( rotate ),
.orientation ( 2'b10 ),
.joyswap ( 1'b0 ),
.oneplayer ( 1'b1 ),
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
);
endmodule

View File

@@ -4,8 +4,8 @@
-- 10 November 2017
--
-- Usage:
-- Create ROM and ARC files from MAME ROM zip files using the mra utility and the MRA files.
-- Copy the RBF and the ARC files to the same folder.
-- Create ROM files from MAME ROM zip files using the mra utility and the MRA files.
-- Example: mra -z /path/to/mame/roms scramble.mra
-- Copy the ROM files to the root of the SD Card.
--

View File

@@ -1,4 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=1
CONF=O78,Lives,3,4,5,Unl

View File

@@ -1,5 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=10
CONF=O7,Lives,3,5
CONF=OA,Demo Sounds,Off,On

View File

@@ -1,5 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=5
CONF=O7,Lives,3,5
CONF=OA,Demo Sounds,Off,On

View File

@@ -1,4 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=13
CONF=O7,Lives,3,5

View File

@@ -1,5 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=8
CONF=O7,Lives,3,5
CONF=OA,Demo Sounds,Off,On

View File

@@ -1,4 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=9

View File

@@ -1,4 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=2
CONF=O78,Lives,3,5,7,Unl

View File

@@ -1,5 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=11
CONF=O78,Lives,3,5,Free Play,Invuln.
CONF=OA,Demo Sounds,Off,On

View File

@@ -1,4 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=12
CONF=O7,Lives,3,Unl

View File

@@ -1,5 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=18
CONF=O78,Lives,3,4,5,6
CONF=O9,Infinite Lives,Off,On

View File

@@ -1,7 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=16
CONF=O7,Lives,3,5
CONF=O89,Difficulty,Easy,Medium,Hard,Hardest
CONF=OB,Start Level,1,3
CONF=OA,Demo Sounds,Off,On

View File

@@ -1,4 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=6
CONF=O78,Lives,3,4,5,Unl

View File

@@ -1,7 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=17
CONF=O7,Lives,3,5
CONF=O8,Difficulty,Easy,Hard
CONF=O9,Start Level,1,3
CONF=OA,Demo Sounds,Off,On

View File

@@ -1,4 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=0
CONF=O78,Lives,3,4,5,Unl

View File

@@ -1,5 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=7
CONF=O7,Lives,3,5
CONF=OB,Difficulty,Easy,Hard

View File

@@ -1,4 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=14
CONF=O78,Lives,3,4,5,Unl

View File

@@ -1,5 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=3
CONF=O7,Lives,3,4
CONF=O9,Continue,No,Yes

View File

@@ -1,5 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=4
CONF=O7,Lives,3,5
CONF=OA,Demo Sounds,Off,On

View File

@@ -1,4 +0,0 @@
[ARC]
RBF=SCRAMBLE
MOD=15
CONF=O78,Lives,3,4,5,Unl

View File

@@ -1,6 +1,11 @@
<misterromdescription>
<name>Amidar (Scramble hardware)</name>
<rbf>scramble</rbf>
<mameversion>0209</mameversion>
<switches>
<dip bits="7,8" name="Lives" ids="3,4,5,Unl"/>
</switches>
<rom index="1"><part>1</part></rom>
<rom index="0" zip="amidar.zip" md5="33b3ea63f123eb052e3ca852c2bc9181" type="merged">
<part name="amidars/am2d"/>
<part name="amidars/am2e"/>

View File

@@ -1,6 +1,12 @@
<misterromdescription>
<name>Ant Eater</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,5"/>
<dip bits="10" name="Demo Sounds" ids="Off,On"/>
</switches>
<rom index="1"><part>0A</part></rom>
<rom index="0" zip="anteater.zip" md5="595cb84d7b7be1fab93958caaa9d593b" type="merged">
<part name="ra1-2c"/>
<part name="ra1-2e"/>

View File

@@ -1,6 +1,12 @@
<misterromdescription>
<name>Armored Car</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,5"/>
<dip bits="10" name="Demo Sounds" ids="Off,On"/>
</switches>
<rom index="1"><part>5</part></rom>
<rom index="0" zip="armorcar.zip" md5="0b2be19a5fa28e44cf65e157ee0d880c" type="merged|nonmerged">
<part name="cpu.2c"/>
<part name="cpu.2e"/>

View File

@@ -1,6 +1,10 @@
<misterromdescription>
<name>Battle of Atlantis</name>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,5"/>
</switches>
<rom index="1"><part>0D</part></rom>
<rom index="0" zip="atlantis.zip" md5="91c419f9b09b9552c798526306f81b01" type="merged|nonmerged">
<part name="2c"/>
<part name="2e"/>
@@ -23,7 +27,7 @@
<part name="ot2.5d"/>
<part name="ot3.5e"/>
<part name="ot3.5e"/>
<part name="5h"/>
<part name="5f"/>
<part name="c01s.6e"/>

View File

@@ -1,6 +1,12 @@
<misterromdescription>
<name>Calipso</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,5"/>
<dip bits="10" name="Demo Sounds" ids="Off,On"/>
</switches>
<rom index="1"><part>8</part></rom>
<rom index="0" zip="calipso.zip" md5="7a459dee19c889190e2f570119d0d77b" type="merged">
<part name="calipso.2c"/>
<part name="calipso.2e"/>

View File

@@ -1,6 +1,11 @@
<misterromdescription>
<name>Dark Planet</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,5"/>
</switches>
<rom index="1"><part>9</part></rom>
<rom index="0" zip="darkplnt.zip" md5="3710f6c8b240aab2f11a065023999497" type="merged">
<part name="drkplt2c.dat"/>
<part name="drkplt2e.dat"/>

View File

@@ -1,6 +1,11 @@
<misterromdescription>
<name>Frogger (Sega set 2)</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7,8" name="Lives" ids="3,5,7,Unl"/>
</switches>
<rom index="1"><part>2</part></rom>
<rom index="0" zip="frogger.zip" md5="e4dafd9989624989f0bef5874a7d6b16" type="merged">
<part name="froggers2/epr-1012.ic5"/>
<part name="froggers2/epr-1013a.ic6"/>

View File

@@ -1,6 +1,12 @@
<misterromdescription>
<name>Lost Tomb</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7,8" name="Lives" ids="3,5,Free Play,Invuln."/>
<dip bits="10" name="Demo Sounds" ids="Off,On"/>
</switches>
<rom index="1"><part>0B</part></rom>
<rom index="0" zip="losttomb.zip" md5="c62f4d91a165fe79a921e0c6ec85846b" type="merged">
<part name="2c"/>
<part name="2e"/>

View File

@@ -1,6 +1,10 @@
<misterromdescription>
<name>Mars</name>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,Unl"/>
</switches>
<rom index="1"><part>0C</part></rom>
<rom index="0" zip="mars.zip" md5="d2f92c40c12e61bb0b906d0daeab8eee" type="merged|nonmerged">
<part name="u26.3"/>
<part name="u56.4"/>
@@ -23,7 +27,7 @@
<part name="u51.10"/>
<part name="u78.11"/>
<part name="u78.11"/>
<part name="u101.2"/>
<part name="u72.1"/>
<part name="c01s.6e"/>

View File

@@ -1,7 +1,13 @@
<misterromdescription>
<name>Mighty Monkey</name>
<mameversion>0209</mameversion>
<rom index="0" zip="mimonkey.zip" md5="21de700d16c4f72771621924f0207533" type="merged">
<rbf>scramble</rbf>
<switches>
<dip bits="7,8" name="Lives" ids="3,4,5,6"/>
<dip bits="9" name="Infinite Lives" ids="Off,On"/>
</switches>
<rom index="1"><part>12</part></rom>
<rom index="0" zip="mimonkey.zip" md5="b4b49bd1d6a1b1a4e4d431fc79fc4268" type="merged">
<part name="mimonscr/mm1"/>
<part name="mimonscr/mm2"/>
<part name="mimonscr/mm3"/>

View File

@@ -1,5 +1,13 @@
<misterromdescription>
<name>Minefield</name>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,5"/>
<dip bits="8,9" name="Difficulty" ids="Easy,Medium,Hard,Hardest"/>
<dip bits="11" name="Start Level" ids="1,3"/>
<dip bits="10" name="Demo Sounds" ids="Off,On"/>
</switches>
<rom index="1"><part>10</part></rom>
<mameversion>0209</mameversion>
<rom index="0" zip="minefld.zip" md5="8bc2f7bf551354bb767b4996c91a6e32" type="merged|nonmerged">
<part name="ma22c"/>

View File

@@ -1,6 +1,11 @@
<misterromdescription>
<name>Moonwar</name>
<name>Moon War</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7,8" name="Lives" ids="3,4,5,Unl"/>
</switches>
<rom index="1"><part>6</part></rom>
<rom index="0" zip="moonwar.zip" md5="85ac1993a065a59063bc915270972402" type="merged">
<part name="mw2.2c"/>
<part name="mw2.2e"/>

View File

@@ -1,6 +1,14 @@
<misterromdescription>
<name>Rescue</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,5"/>
<dip bits="8" name="Difficulty" ids="Easy,Hard"/>
<dip bits="9" name="Start Level" ids="1,3"/>
<dip bits="10" name="Demo Sounds" ids="Off,On"/>
</switches>
<rom index="1"><part>11</part></rom>
<rom index="0" zip="rescue.zip" md5="b12c059c5c50f4e7043b10ee3b021b6d" type="merged|nonmerged">
<part name="rb15acpu.bin"/>
<part name="rb15bcpu.bin"/>

View File

@@ -1,6 +1,12 @@
<misterromdescription>
<name>Super Cobra</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,4"/>
<dip bits="9" name="Continue" ids="No,Yes"/>
</switches>
<rom index="1"><part>3</part></rom>
<rom index="0" zip="scobra.zip" md5="0f07fad30514fea4b483d933590ff482" type="merged">
<part name="epr1265.2c"/>
<part name="2e"/>

View File

@@ -1,6 +1,11 @@
<misterromdescription>
<name>Scramble (Stern Electronics set 1)</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7,8" name="Lives" ids="3,4,5,Unl"/>
</switches>
<rom index="1"><part>0</part></rom>
<rom index="0" zip="scramble.zip" md5="cefab5afb2ce5edd0170e96f68759c73" type="merged">
<part name="scrambles/2d"/>
<part name="scrambles/2e"/>

View File

@@ -1,6 +1,12 @@
<misterromdescription>
<name>Speed Coin</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,5"/>
<dip bits="11" name="Difficulty" ids="Easy,Hard"/>
</switches>
<rom index="1"><part>7</part></rom>
<rom index="0" zip="spdcoin.zip" md5="ec50d25a33e7eb34bd53e66648cd65a6" type="merged">
<part name="spdcoin.2c"/>
<part name="spdcoin.2e"/>

View File

@@ -1,6 +1,10 @@
<misterromdescription>
<name>Strategy X</name>
<rbf>scramble</rbf>
<switches>
<dip bits="7,8" name="Lives" ids="3,4,5,Unl"/>
</switches>
<rom index="1"><part>0E</part></rom>
<rom index="0" zip="stratgyx.zip" md5="a9f3ca5ff435d48951108c3d469ac695" type="merged|nonmerged">
<part name="2c_1.bin"/>
<part name="2e_2.bin"/>
@@ -13,7 +17,7 @@
<part name="s1.bin"/>
<part name="s2.bin"/>
<part name="5h_c1.bin"/>
<part name="5f_c2.bin"/>

View File

@@ -1,6 +1,12 @@
<misterromdescription>
<name>Tazmania</name>
<name>Tazzmania</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7" name="Lives" ids="3,5"/>
<dip bits="10" name="Demo Sounds" ids="Off,On"/>
</switches>
<rom index="1"><part>4</part></rom>
<rom index="0" zip="tazmania.zip" md5="843f8ffcc008407fd77958d854c3afba" type="merged|nonmerged">
<part name="2c.cpu"/>
<part name="2e.cpu"/>

View File

@@ -1,6 +1,11 @@
<misterromdescription>
<name>Turtles</name>
<mameversion>0209</mameversion>
<rbf>scramble</rbf>
<switches>
<dip bits="7,8" name="Lives" ids="3,4,5,Unl"/>
</switches>
<rom index="1"><part>0F</part></rom>
<rom index="0" zip="turtles.zip" md5="f0331f77098da57363e1fe323829c875" type="merged|nonmerged">
<part name="turt_vid.2c"/>
<part name="turt_vid.2e"/>

View File

@@ -54,8 +54,11 @@ module ScrambleMist
`include "rtl\build_id.v"
`define CORE_NAME "SCRAMBLE"
wire [6:0] core_mod;
localparam CONF_STR = {
";ROM;",
`CORE_NAME, ";ROM;",
"O2,Rotate Controls,Off,On;",
"O34,Scanlines,Off,25%,50%,75%;",
"O5,Blending,Off,On;",
@@ -66,8 +69,6 @@ localparam CONF_STR = {
};
integer hwsel = 0;
wire [6:0] core_mod;
reg [8*8-1:0] core_name;
reg [7:0] input0;
reg [7:0] input1;
reg [7:0] input2;
@@ -80,144 +81,125 @@ always @(*) begin
input2 = ~{ 1'b1, m_down, 1'b1, m_up, /*cabinet*/1'b1, /*coinage*/2'b11, m_down2 };
case (core_mod)
7'h0:
7'h0: // SCRAMBLE
begin
core_name = "SCRAMBLE";
hwsel = 0;
end
7'h1:
7'h1: // AMIDAR
begin
core_name = "AMIDAR ";
hwsel = 0;
input1[1:0] = ~status[8:7]; // lives345unl
//input2[1] = status[10]; // demo sounds - no effect
end
7'h2:
7'h2: // FROGGER
begin
core_name = "FROGGER ";
hwsel = 1;
end
7'h3:
7'h3: // SCOBRA
begin
core_name = "SCOBRA ";
hwsel = 2;
input1[0] = status[9]; // allow continue
input1[1] = status[7]; // lives34
end
7'h4:
7'h4: // TAZMANIA
begin
core_name = "TAZMANIA";
hwsel = 2;
input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_down, m_up, m_fireA, m_fireB };
input1 = ~{ m_fire2A, m_fire2B, m_left2, m_right2, m_up2, m_down2, /*demosnd*/status[10], /*lives35*/status[7] };
input2 = ~{ 1'b1, m_two_players, 2'b10, 3'b111, m_one_player }; // unknown, start2, 2xunknown, cabinet, 2xcoinage, start1
end
7'h5:
7'h5: // ARMORCAR
begin
core_name = "ARMORCAR";
hwsel = 2;
input1[0] = ~status[7]; //lives35
input1[1] = ~status[10]; // demo sounds
end
7'h6:
7'h6: // MOONWAR
begin
core_name = "MOONWAR ";
hwsel = 2;
input0 = ~{ m_coin1, m_coin2, 1'b0, dial };
input1 = ~{ m_fireA, m_fireB, m_fireC, m_fireD, m_two_players, m_one_player, /*live345*/~status[8:7] };
input2 = ~{ 4'h0, 1'b1, 2'b11, 1'b0 }; // 4xunused, cabinet, coinage, p2fire(cocktail)
end
7'h7:
7'h7: // SPDCOIN
begin
core_name = "SPDCOIN ";
hwsel = 2;
input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_two_players, 1'b0, m_one_player, 1'b0 };
input1 = { 4'hf, 2'b00, 1'b0, 1'b0 }; // 6xunused, freeplay, freeze
input2 = { 4'hf, ~status[7], status[11], 1'b1, 1'b1}; // 4xunused, lives35, difficulty, unknown, unused
end
7'h8:
7'h8: // CALIPSO
begin
core_name = "CALIPSO ";
hwsel = 3;
input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_down, m_up, 1'b1, m_two_players|m_fire2A }; // coin1, coin2, left, right, down, up, unused, start 2p / player2 fire
input1 = ~{ 1'b1, 1'b1, m_left2, m_right2, m_down2, m_up2, status[10], status[7] }; // unused, unused, left, right, down, up, demo sounds, lives 3/5
input2 = ~{ 5'b0, 2'b10, m_fireA | m_one_player }; // unused[7:3], coin dip[2:1], start 1p / player1 fire
end
7'h9:
7'h9: // DARKPLNT
begin
core_name = "DARKPLNT";
hwsel = 4;
input0 = ~{ m_coin1, m_coin2, 3'b000, m_two_players | m_fireB, m_one_player | m_fireA, m_fireC };
input1 = { darkplnt_dial_scrambled, /*lives*/status[7], /*bonus*/1'b0 };
input2 = { /*unk*/4'hf, /*bonus life*/1'b0, /*coinage*/ 2'b10, /*unk*/1'b1 };
end
7'hA:
7'hA: // ANTEATER
begin
core_name = "ANTEATER";
hwsel = 6;
input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_down, m_up, m_fireA, m_fireB };
input1 = ~{ m_fire2A, m_fire2B, m_left2, m_right2, m_up2, m_down2, /*demosdns*/status[10], /*lives35*/status[7] };
input2 = ~{ 1'b1, m_two_players, 2'b10, 3'b111, m_one_player };
end
7'hB:
7'hB: // LOSTTOMB
begin
core_name = "LOSTTOMB";
hwsel = 7;
input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_down, m_up, m_one_player, m_two_players };
input1 = ~{ 1'b0, m_fireA, m_left2, m_right2, m_down2, m_up2, /*lives35/free play/invulnerability*/~(status[8:7]+1'd1) };
input2 = ~{ 4'h0, status[10], 2'b10, 1'b0 }; //4xunused, demo sounds, 2xcoinage, unused
end
7'hC:
7'hC: // MARS
begin
core_name = "MARS ";
hwsel = 10;
input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_left2 | m_fireA, m_right2 | m_fireB, 1'b0, 1'b0 };
input1 = ~{ m_one_player, m_two_players, 4'h0, /*coinage*/2'b11 };
input2 = ~{ m_up2 | m_fireC, m_down, m_down2 | m_fireD, m_up, /*lives*/status[7], /*unk*/1'b0, /*cabinet*/1'b1, 1'b0 };
end
7'hD:
7'hD: // ATLANTIS
begin
core_name = "ATLANTIS";
hwsel = 0;
input1[0] = 1'b0; // upright
input1[1] = ~status[7]; // lives35
end
7'hE:
7'hE: // STRATGYX
begin
core_name = "STRATGYX";
hwsel = 5;
orientation = 2'b10;
input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_fireA, 1'b0, m_fireB, m_up2 };
input1 = ~{ m_one_player, m_two_players, m_left2, m_right2, m_fire2A, m_fire2B, ~status[8:7] };
input2 = ~{ m_fire2C, m_down, m_fireC, m_up, /*upright*/1'b1, /*coinage*/2'b00, m_down2 };
end
7'hF:
7'hF: // TURTLES
begin
core_name = "TURTLES ";
hwsel = 11;
input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_fireA, 1'b0, 1'b0, m_up2 };
input1 = ~{ m_one_player, m_two_players, m_left2, m_right2, m_fire2A, 1'b0, ~status[8:7] };
input2 = ~{ 1'b0, m_down, 1'b0, m_up, /*upright*/1'b1, /*coinage*/2'b00, m_down2 };
end
7'h10:
7'h10: // MINEFLD
begin
core_name = "MINEFLD ";
hwsel = 8;
input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_down, m_up, /*start level*/status[11], m_fireA };
input1 = ~{ /*2xunk*/2'b00, m_left2, m_right2, m_down2, m_up2, /*demosnd*/status[10], /*lives35*/status[7] };
input2 = ~{ /*unk*/1'b0, m_two_players, /*2xunk*/2'b00, /*difficulty*/status[9:8], /*coinage*/1'b0, m_one_player };
end
7'h11:
7'h11: // RESCUE
begin
core_name = "RESCUE ";
hwsel = 9;
input0 = ~{ m_coin1, m_coin2, m_left, m_right, m_down, m_up, /*start level*/status[9], m_fireA };
input1 = ~{ /*2xunk*/2'b00, m_left2, m_right2, m_down2, m_up2, /*demosnd*/status[10], /*lives35*/status[7] };
input2 = ~{ /*unk*/1'b0, m_two_players, /*2xunk*/2'b00, /*difficulty*/~status[8], /*coinage*/2'b11, m_one_player };
end
7'h12:
7'h12: // MIMONKEY
begin
core_name = "MIMONKEY";
hwsel = 12;
input2[5] = status[9]; // infinite lives
end
@@ -225,7 +207,6 @@ always @(*) begin
default:
begin
hwsel = 0;
core_name = "SCRAMBLE";
end
endcase
end
@@ -292,10 +273,10 @@ wire key_pressed;
wire [7:0] key_code;
user_io #(
.STRLEN(8+($size(CONF_STR)>>3)))
.STRLEN($size(CONF_STR)>>3))
user_io(
.clk_sys (clk_sys ),
.conf_str ({core_name, CONF_STR}),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
@@ -462,14 +443,21 @@ spinner spinner (
.strobe(vs),
.spin_angle(darkplnt_dial)
);
wire [5:0] darkplnt_dial_scrambled = {
darkplnt_dial[3],
darkplnt_dial[5],
darkplnt_dial[6],
darkplnt_dial[4],
darkplnt_dial[2:1]
wire [5:0] dp_remap[64] =
'{
6'h03, 6'h02, 6'h00, 6'h01, 6'h21, 6'h20, 6'h22, 6'h23,
6'h33, 6'h32, 6'h30, 6'h31, 6'h11, 6'h10, 6'h12, 6'h13,
6'h17, 6'h16, 6'h14, 6'h15, 6'h35, 6'h34, 6'h36, 6'h37,
6'h3f, 6'h3e, 6'h3c, 6'h3d, 6'h1d, 6'h1c, 6'h1e, 6'h1f,
6'h1b, 6'h1a, 6'h18, 6'h19, 6'h39, 6'h38, 6'h3a, 6'h3b,
6'h2b, 6'h2a, 6'h28, 6'h29, 6'h09, 6'h08, 6'h0a, 6'h0b,
6'h0f, 6'h0e, 6'h0c, 6'h0d, 6'h2d, 6'h2c, 6'h2e, 6'h2f,
6'h27, 6'h26, 6'h24, 6'h25, 6'h05, 6'h04, 6'h06, 6'h07
};
wire [5:0] darkplnt_dial_scrambled = dp_remap[darkplnt_dial[6:1]];
wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF;
wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F;
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;

View File

@@ -585,7 +585,11 @@ begin
if (ENA = '1') then
if (sld_l = '0') then
shell_cnt <= hpla;
if I_HWSEL = I_HWSEL_DARKPLNT then
shell_cnt <= 240 - hpla;
else
shell_cnt <= hpla;
end if;
elsif (cblank_l = '1') then
shell_cnt <= shell_cnt + "1";
else
@@ -781,10 +785,14 @@ begin
video(2)(3) := '0'; -- r
if (vidout_l = '0') then -- cs_l on col rom
video(0)(2 downto 0) := obj_lut_out(7 downto 6) & '0';
video(1)(2 downto 0) := obj_lut_out(5 downto 3);
video(2)(2 downto 0) := obj_lut_out(2 downto 0);
if I_HWSEL = I_HWSEL_DARKPLNT then
video(0) := "00" & obj_lut_out(5 downto 3);
video(2) := "00" & obj_lut_out(2 downto 0);
else
video(0)(2 downto 0) := obj_lut_out(7 downto 6) & '0';
video(1)(2 downto 0) := obj_lut_out(5 downto 3);
video(2)(2 downto 0) := obj_lut_out(2 downto 0);
end if;
else
video(0)(2 downto 0) := "000";
video(1)(2 downto 0) := "000";

View File

@@ -10,6 +10,12 @@
-- Wacko: control Captain Krooz'r with the mouse, shoot with the joystick
-- Kozmik Krooz'r: use the mouse for movement and shoot, rotate the turret with the joystick
-- Create ROM and ARC files from MAME ROM zip files using the mra utility and the MRA files.
-- Copy the RBF and the ARC files to the same folder.
-- Example: mra -z /path/to/mame/roms Tron.mra
-- Copy the ROM files to the root of the SD Card.
--
-- MRA utilty: https://github.com/sebdel/mra-tools-c
---------------------------------------------------------------------------------
-- DE10_lite Top level for Satan Hollow (Midway MCR) by Dar (darfpga@aol.fr) (19/10/2019)
-- http://darfpga.blogspot.fr

View File

@@ -27,4 +27,4 @@ DATE = "13:02:51 November 09, 2019"
# Revisions
PROJECT_REVISION = "SatansHollow"
PROJECT_REVISION = "mcr2"

View File

@@ -25,7 +25,7 @@
# Notes:
#
# 1) The default values for assignments are stored in the file:
# SatansHollow_assignment_defaults.qdf
# mcr2_assignment_defaults.qdf
# If this file doesn't exist, see file:
# assignment_defaults.qdf
#
@@ -158,7 +158,7 @@ set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
# Analysis & Synthesis Assignments
# ================================
set_global_assignment -name FAMILY "Cyclone III"
set_global_assignment -name TOP_LEVEL_ENTITY SatansHollow_MiST
set_global_assignment -name TOP_LEVEL_ENTITY MCR2_MiST
set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144
set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8
set_global_assignment -name DEVICE_FILTER_PACKAGE TQFP
@@ -213,7 +213,7 @@ set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
# end ENTITY(SatansHollow_MiST)
# -----------------------------
set_global_assignment -name SYSTEMVERILOG_FILE rtl/SatansHollow_MiST.sv
set_global_assignment -name SYSTEMVERILOG_FILE rtl/MCR2_MiST.sv
set_global_assignment -name VHDL_FILE rtl/satans_hollow.vhd
set_global_assignment -name VHDL_FILE rtl/satans_hollow_sound_board.vhd
set_global_assignment -name VHDL_FILE rtl/YM2149_linmix_sep.vhd

View File

@@ -0,0 +1,34 @@
<misterromdescription>
<name>Domino Man</name>
<mameversion>0216</mameversion>
<mratimestamp>201912310000</mratimestamp>
<year>1983</year>
<manufacturer>Bally Midway</manufacturer>
<category>Action</category>
<rbf>MCR2</rbf>
<setname>domino</setname>
<switches>
<dip bits="8" name="Music" ids="Off,On"/>
<dip bits="9" name="Skin Color" ids="Light,Dark"/>
</switches>
<rom index="1">
<part>5</part>
</rom>
<rom index="0" zip="domino.zip" md5="112359d5a207884821f6df0f0c1c4d2c" type="merged|nonmerged">
<part crc="3bf3bb1c" name="dmanpg0.bin"/>
<part crc="85cf1d69" name="dmanpg1.bin"/>
<part crc="7dd2177a" name="dmanpg2.bin"/>
<part crc="f2e0aa44" name="dmanpg3.bin"/>
<part repeat="16384">00</part>
<part crc="fa982dcc" name="dm-a7.snd"/>
<part crc="72839019" name="dm-a8.snd"/>
<part crc="ad760da7" name="dm-a9.snd"/>
<part crc="958c7287" name="dm-a10.snd"/>
<part crc="9163007f" name="dmanbg0.bin"/>
<part crc="28615c56" name="dmanbg1.bin"/>
<part crc="0b1f9f9e" name="dmanfg0.bin"/>
<part crc="16aa4b9b" name="dmanfg1.bin"/>
<part crc="4a8e76b8" name="dmanfg2.bin"/>
<part crc="1f39257e" name="dmanfg3.bin"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,31 @@
<misterromdescription>
<name>Kozmik Krooz'r</name>
<mameversion>0216</mameversion>
<mratimestamp>201912310000</mratimestamp>
<year>1983</year>
<manufacturer>Bally Midway</manufacturer>
<category>Action</category>
<rbf>MCR2</rbf>
<setname>kroozr</setname>
<rom index="1">
<part>4</part>
</rom>
<rom index="0" zip="kroozr.zip" md5="0435ff192c0b93107af54d69d7eaf48f" type="merged|nonmerged">
<part crc="61e02045" name="kozmkcpu.2d"/>
<part crc="caabed57" name="kozmkcpu.3d"/>
<part crc="2bc83fc7" name="kozmkcpu.4d"/>
<part crc="a0ec38c1" name="kozmkcpu.5d"/>
<part crc="7044f2b6" name="kozmkcpu.6d"/>
<part repeat="8192">00</part>
<part crc="6736e433" name="kozmksnd.7a"/>
<part crc="ea9cd919" name="kozmksnd.8a"/>
<part crc="9dfa7994" name="kozmksnd.9a"/>
<part repeat="4096">00</part>
<part crc="eda6ed2d" name="kozmkcpu.3g"/>
<part crc="ddde894b" name="kozmkcpu.4g"/>
<part crc="ca60e2cc" name="kozmkvid.1e"/>
<part crc="4e23b35b" name="kozmkvid.1d"/>
<part crc="c6041ba7" name="kozmkvid.1b"/>
<part crc="b57fb0ff" name="kozmkvid.1a"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,31 @@
<misterromdescription>
<name>Satan's Hollow</name>
<mameversion>0216</mameversion>
<mratimestamp>201912310000</mratimestamp>
<year>1983</year>
<manufacturer>Bally Midway</manufacturer>
<category>Action</category>
<rbf>MCR2</rbf>
<setname>shollow</setname>
<rom index="1">
<part>0</part>
</rom>
<rom index="0" zip="shollow.zip" md5="cc2c7141ad992cffa1bd34ee74952152" type="merged|nonmerged">
<part crc="95e2b800" name="sh-pro.00"/>
<part crc="b99f6ff8" name="sh-pro.01"/>
<part crc="1202c7b2" name="sh-pro.02"/>
<part crc="0a64afb9" name="sh-pro.03"/>
<part crc="22fa9175" name="sh-pro.04"/>
<part crc="1716e2bb" name="sh-pro.05"/>
<part crc="55a297cc" name="sh-snd.01"/>
<part crc="46fc31f6" name="sh-snd.02"/>
<part crc="b1f4a6a8" name="sh-snd.03"/>
<part repeat="4096">00</part>
<part crc="3e2b333c" name="sh-bg.00"/>
<part crc="d1d70cc4" name="sh-bg.01"/>
<part crc="33f4554e" name="sh-fg.00"/>
<part crc="ba1a38b4" name="sh-fg.01"/>
<part crc="6b57f6da" name="sh-fg.02"/>
<part crc="37ea9d07" name="sh-fg.03"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,34 @@
<misterromdescription>
<name>Tron</name>
<mameversion>0218</mameversion>
<mratimestamp>202002110000</mratimestamp>
<year>1982</year>
<manufacturer>Bally Midway</manufacturer>
<category>Action</category>
<rbf>MCR2</rbf>
<setname>tron</setname>
<switches>
<dip bits="8" name="Allow Continue" ids="No,Yes"/>
</switches>
<rom index="1">
<part>1</part>
</rom>
<rom index="0" zip="tron.zip" md5="8b232b334aa20263ab1c3a77796f8885" type="merged|nonmerged">
<part crc="0de0471a" name="pro0.d2"/>
<part crc="8ddf8717" name="scpu_pgb.d3"/>
<part crc="4241e3a0" name="scpu_pgc.d4"/>
<part crc="035d2fe7" name="scpu_pgd.d5"/>
<part crc="24c185d8" name="scpu_pgc.d6"/>
<part crc="38c4bbaf" name="scpu_pgd.d7"/>
<part crc="765e6eba" name="ssi_0a.a7"/>
<part crc="1b90ccdd" name="ssi_0b.a8"/>
<part crc="3a4bc629" name="ssi_0c.a9"/>
<part repeat="4096">00</part>
<part crc="1a9ed2f5" name="scpu_bgg.g3"/>
<part crc="3220f974" name="scpu_bgh.g4"/>
<part crc="bc036d1d" name="vga.e1"/>
<part crc="58ee14d3" name="vgb.dc1"/>
<part crc="3329f9d4" name="vgc.cb1"/>
<part crc="9743f873" name="vga.a1"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,47 @@
<misterromdescription>
<name>Two Tigers (Tron conversion)</name>
<mameversion>0218</mameversion>
<mratimestamp>202002110000</mratimestamp>
<year>1984</year>
<manufacturer>Bally Midway</manufacturer>
<category>Shooter</category>
<rbf>MCR2</rbf>
<setname>twotigerc</setname>
<rom index="1">
<part>2</part>
</rom>
<rom index="0" zip="twotiger.zip" md5="fa00775a4b4c94b464bb402b3aa2c1be" type="merged">
<part crc="e77a924b" name="2tgrpg0.bin"/>
<part crc="2699ebdc" name="2tgrpg1.bin"/>
<part crc="b5ca3f17" name="2tgrpg2.bin"/>
<part crc="8aa82049" name="2tgrpg3.bin"/>
<part repeat="16384">00</part>
<part crc="4620d970" name="2tgra7.bin"/>
<part crc="e95d8cfe" name="2tgra8.bin"/>
<part crc="81e6ce0e" name="2tgra9.bin"/>
<part repeat="4096">00</part>
<part crc="52f69068" name="2tgrbg0.bin"/>
<part crc="758d4f7d" name="2tgrbg1.bin"/>
<part crc="4abf3ca0" name="2tgrfg0.bin"/>
<part crc="fbcaffa5" name="2tgrfg1.bin"/>
<part crc="08e3e1a6" name="2tgrfg2.bin"/>
<part crc="9b22697b" name="2tgrfg3.bin"/>
</rom>
<rom index="0" zip="twotigerc.zip" md5="fa00775a4b4c94b464bb402b3aa2c1be" type="nonmerged">
<part crc="e77a924b" name="2tgrpg0.bin"/>
<part crc="2699ebdc" name="2tgrpg1.bin"/>
<part crc="b5ca3f17" name="2tgrpg2.bin"/>
<part crc="8aa82049" name="2tgrpg3.bin"/>
<part repeat="16384">00</part>
<part crc="4620d970" name="2tgra7.bin"/>
<part crc="e95d8cfe" name="2tgra8.bin"/>
<part crc="81e6ce0e" name="2tgra9.bin"/>
<part repeat="4096">00</part>
<part crc="52f69068" name="2tgrbg0.bin"/>
<part crc="758d4f7d" name="2tgrbg1.bin"/>
<part crc="4abf3ca0" name="2tgrfg0.bin"/>
<part crc="fbcaffa5" name="2tgrfg1.bin"/>
<part crc="08e3e1a6" name="2tgrfg2.bin"/>
<part crc="9b22697b" name="2tgrfg3.bin"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,30 @@
<misterromdescription>
<name>Wacko</name>
<mameversion>0216</mameversion>
<mratimestamp>201912310000</mratimestamp>
<year>1983</year>
<manufacturer>Bally Midway</manufacturer>
<category>Action</category>
<rbf>MCR2</rbf>
<setname>wacko</setname>
<rom index="1">
<part>3</part>
</rom>
<rom index="0" zip="wacko.zip" md5="157209d82b536114e346517818a89184" type="merged|nonmerged">
<part crc="c98e29b6" name="wackocpu.2d"/>
<part crc="90b89774" name="wackocpu.3d"/>
<part crc="515edff7" name="wackocpu.4d"/>
<part crc="9b01bf32" name="wackocpu.5d"/>
<part repeat="16384">00</part>
<part crc="1a58763f" name="wackosnd.7a"/>
<part crc="a4e3c771" name="wackosnd.8a"/>
<part crc="155ba3dd" name="wackosnd.9a"/>
<part repeat="4096">00</part>
<part crc="33160eb1" name="wackocpu.3g"/>
<part crc="daf37d7c" name="wackocpu.4g"/>
<part crc="dca59be7" name="wackovid.1e"/>
<part crc="a02f1672" name="wackovid.1d"/>
<part crc="7d899790" name="wackovid.1b"/>
<part crc="080be3ad" name="wackovid.1a"/>
</rom>
</misterromdescription>

View File

@@ -17,15 +17,15 @@
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//============================================================================
module SatansHollow_MiST(
output LED,
module MCR2_MiST(
output LED,
output [5:0] VGA_R,
output [5:0] VGA_G,
output [5:0] VGA_B,
output VGA_HS,
output VGA_VS,
output AUDIO_L,
output AUDIO_R,
output AUDIO_R,
input SPI_SCK,
output SPI_DO,
input SPI_DI,
@@ -48,19 +48,15 @@ module SatansHollow_MiST(
`include "rtl/build_id.v"
// Uncomment one to choose core name/inputs
`define CORE_NAME "SHOLLOW"
//`define CORE_NAME "TRON"
//`define CORE_NAME "TWOTIGER"
//`define CORE_NAME "WACKO"
//`define CORE_NAME "KROOZR"
//`define CORE_NAME "DOMINO"
wire [6:0] core_mod;
localparam CONF_STR = {
`CORE_NAME,";ROM;",
"O2,Rotate Controls,Off,On;",
"O5,Blend,Off,On;",
"O6,Swap Joysticks,Off,On;",
"DIP;",
"O7,Service,Off,On;",
"T0,Reset;",
"V,v2.0.",`BUILD_DATE
@@ -80,49 +76,67 @@ reg [7:0] input_3;
reg [7:0] input_4;
always @(*) begin
input_0 = 8'hFF;
input_1 = 8'hFF;
input_2 = 8'hFF;
input_3 = 8'hFF;
input_4 = 8'hFF;
oneplayer = 1'b1;
orientation = 2'b10;
if (`CORE_NAME == "SHOLLOW") begin
case (core_mod)
7'h0: // SHOLLOW
begin
orientation = 2'b11;
input_0 = ~{ service, 1'b0, m_tilt, 1'b0, m_two_players, m_one_player, m_coin2, m_coin1 };
input_1 = ~{ m_fire2A, m_fire2B, m_right2, m_left2, m_fireA, m_fireB, m_right, m_left };
input_2 = 8'hFF;
input_3 = ~{ 8'b00000010 };
end else if (`CORE_NAME == "TRON") begin
end
7'h1: // TRON
begin
orientation = 2'b11;
oneplayer = 1'b0;
input_0 = ~{ service, 1'b0, m_tilt, m_fireA, m_two_players, m_one_player, m_coin2, m_coin1 };
input_1 = ~{ 1'b0, spin_angle2 };
input_2 = ~{ m_down, m_up, m_right, m_left, m_down, m_up, m_right, m_left };
input_3 = ~{ m_fireA, 7'b00000010 };
input_3 = ~{ m_fireA, 4'b0000,/*allow cont*/status[8], 2'b10 };
input_4 = ~{ 1'b0, spin_angle2 };
end else if (`CORE_NAME == "TWOTIGER") begin
end
7'h2: // TWOTIGER
begin
oneplayer = 1'b0;
input_0 = ~{ service, 1'b0, m_tilt, m_three_players, m_two_players, m_one_player, m_coin2, m_coin1 };
input_1 = ~{ 1'b0, spin_angle1 };
input_2 = ~{ 4'b0000, m_fire2B, m_fire2A, m_fireB, m_fireA };
input_3 = 8'hFF;
input_4 = ~{ 1'b0, spin_angle2 };
end else if (`CORE_NAME == "WACKO") begin
end
7'h3: // WACKO
begin
input_0 = ~{ service, 1'b0, m_tilt, 1'b0, m_two_players, m_one_player, m_coin2, m_coin1 };
input_1 = x_pos[10:3];
input_2 = y_pos[10:3];
input_3 = ~{ 8'b01000000 };
input_4 = ~{ m_up2, m_down2, m_left2, m_right2, m_up, m_down, m_left, m_right };
end else if (`CORE_NAME == "KROOZR") begin
end
7'h4: // KROOZR
begin
input_0 = ~{ service, 1'b0, m_tilt, m_fireA | mouse_btns[0], m_two_players, m_one_player, m_coin2, m_coin1 };
input_1 = ~{ (m_fireB | mouse_btns[1]), spin_angle1[6], 3'b111, spin_angle1[5:3] };
input_2 = { x_pos_kroozr[9], x_pos_kroozr[9], x_pos_kroozr[7:2] };
input_3 = ~{ 8'b01000000 };
input_4 = { y_pos_kroozr[9], y_pos_kroozr[9], y_pos_kroozr[7:2] };
end else if (`CORE_NAME == "DOMINO") begin
end
7'h5: // DOMINO
begin
input_0 = ~{ service, 1'b0, m_tilt, m_fireA, m_two_players, m_one_player, m_coin2, m_coin1 };
input_1 = ~{ 4'b0000, m_down, m_up, m_right, m_left };
input_2 = ~{ 3'b000, m_fire2A, m_down2, m_up2, m_right2, m_left2 };
input_3 = ~{ 8'b01000000 };
input_3 = ~{ 6'b010000,/*skin*/status[9], /*music*/status[8] };
end
default: ;
endcase
end
assign LED = ~ioctl_downl;
@@ -145,10 +159,7 @@ wire [7:0] joystick_0;
wire [7:0] joystick_1;
wire scandoublerD;
wire ypbpr;
wire [15:0] audio_l, audio_r;
wire hs, vs, cs;
wire blankn;
wire [2:0] g, r, b;
wire no_csync;
wire key_pressed;
wire [7:0] key_code;
wire key_strobe;
@@ -157,6 +168,33 @@ wire signed [8:0] mouse_y;
wire mouse_strobe;
reg [7:0] mouse_flags;
user_io #(
.STRLEN(($size(CONF_STR)>>3)))
user_io(
.clk_sys (clk_sys ),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.no_csync (no_csync ),
.core_mod (core_mod ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.mouse_x (mouse_x ),
.mouse_y (mouse_y ),
.mouse_strobe (mouse_strobe ),
.mouse_flags (mouse_flags ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status )
);
wire [15:0] rom_addr;
wire [15:0] rom_do;
wire [13:0] snd_addr;
@@ -238,6 +276,11 @@ always @(posedge clk_sys) begin
reset <= status[0] | buttons[1] | ioctl_downl | ~rom_loaded;
end
wire [15:0] audio_l, audio_r;
wire hs, vs, cs;
wire blankn;
wire [2:0] g, r, b;
satans_hollow satans_hollow(
.clock_40(clk_sys),
.reset(reset),
@@ -271,8 +314,8 @@ satans_hollow satans_hollow(
wire vs_out;
wire hs_out;
assign VGA_VS = scandoublerD | vs_out;
assign VGA_HS = scandoublerD ? cs : hs_out;
assign VGA_HS = ((~no_csync & scandoublerD) || ypbpr)? cs : hs_out;
assign VGA_VS = ((~no_csync & scandoublerD) || ypbpr)? 1'b1 : vs_out;
mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
.clk_sys ( clk_sys ),
@@ -298,31 +341,6 @@ mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
.ypbpr ( ypbpr )
);
user_io #(
.STRLEN(($size(CONF_STR)>>3)))
user_io(
.clk_sys (clk_sys ),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.mouse_x (mouse_x ),
.mouse_y (mouse_y ),
.mouse_strobe (mouse_strobe ),
.mouse_flags (mouse_flags ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status )
);
dac #(
.C_bits(16))
dac_l(

View File

@@ -61,6 +61,8 @@ module sdram (
output reg [15:0] snd_q
);
parameter MHZ = 16'd80; // 80 MHz default clock, set it to proper value to calculate refresh rate
localparam RASCAS_DELAY = 3'd2; // tRCD=20ns -> 2 cycles@<100MHz
localparam BURST_LENGTH = 3'b000; // 000=1, 001=2, 010=4, 011=8
localparam ACCESS_TYPE = 1'b0; // 0=sequential, 1=interleaved
@@ -70,8 +72,8 @@ localparam NO_WRITE_BURST = 1'b1; // 0= write burst enabled, 1=only single acc
localparam MODE = { 3'b000, NO_WRITE_BURST, OP_MODE, CAS_LATENCY, ACCESS_TYPE, BURST_LENGTH};
// 64ms/8192 rows = 7.8us -> 842 cycles@108MHz
localparam RFRSH_CYCLES = 10'd842;
// 64ms/8192 rows = 7.8us
localparam RFRSH_CYCLES = 16'd78*MHZ/4'd10;
// ---------------------------------------------------------------------
// ------------------------ cycle state machine ------------------------

View File

@@ -1,15 +0,0 @@
#!/bin/sh
PROJECTS=" \
SHOLLOW \
TRON \
TWOTIGER \
WACKO \
KROOZR \
DOMINO"
for PROJECT in $PROJECTS; do
echo "Compiling $PROJECT"
sed -i "s/^.define CORE_NAME.*/\`define CORE_NAME \"$PROJECT\"/" rtl/SatansHollow_MiST.sv
quartus_sh --flow compile SatansHollow.qsf && cp output_files/SatansHollow.rbf Releases/$PROJECT.rbf
done

View File

@@ -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
set_global_assignment -name LAST_QUARTUS_VERSION "13.1 SP4.26"
set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl"
# Pin & Location Assignments
@@ -75,6 +75,7 @@ set_location_assignment PIN_88 -to SPI_DI
set_location_assignment PIN_126 -to SPI_SCK
set_location_assignment PIN_127 -to SPI_SS2
set_location_assignment PIN_91 -to SPI_SS3
set_location_assignment PIN_90 -to SPI_SS4
set_location_assignment PIN_13 -to CONF_DATA0
set_location_assignment PIN_49 -to SDRAM_A[0]
set_location_assignment PIN_44 -to SDRAM_A[1]

View File

@@ -0,0 +1,28 @@
<misterromdescription>
<name>Max RPM (ver 2)</name>
<mameversion>0217</mameversion>
<mratimestamp>20200202</mratimestamp>
<year>1986</year>
<manufacturer>Bally Midway</manufacturer>
<category>Action</category>
<rbf>MCR3Mono</rbf>
<setname>maxrpm</setname>
<switches>
<dip bits="8" name="Free Play" ids="On,Off"/>
</switches>
<rom index="1">
<part>03</part>
</rom>
<rom index="0" zip="maxrpm.zip" md5="5db0174a5e50422c027850a810a7b81d" type="merged|nonmerged">
<part crc="3f9ec35f" name="pro.0"/>
<part crc="f628bb30" name="pro.1"/>
<part crc="1d1435c1" name="fg-0"/>
<part crc="e54b7f2a" name="fg-1"/>
<part crc="38be8505" name="fg-2"/>
<part crc="9ae3eb52" name="fg-3"/>
<part crc="e3fb693a" name="bg-0"/>
<part crc="50d1db6c" name="bg-1"/>
<part crc="55c3b759" name="turbskwk.u5"/>
<part crc="31a2da2e" name="turbskwk.u4"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,32 @@
<misterromdescription>
<name>Power Drive</name>
<mameversion>0217</mameversion>
<mratimestamp>20200202</mratimestamp>
<year>1986</year>
<manufacturer>Bally Midway</manufacturer>
<category>Action</category>
<rbf>MCR3Mono</rbf>
<setname>powerdrv</setname>
<switches>
<dip bits="8,9" name="Difficulty" ids="Factory,Easy,Hard,Hardest"/>
<dip bits="10" name="Demo Sounds" ids="On,Off"/>
<dip bits="11" name="Rack Advance (cheat)" ids="On,Off"/>
</switches>
<rom index="1">
<part>02</part>
</rom>
<rom index="0" zip="powerdrv.zip" md5="0300242430d958ef5fdce41bc5c1e722" type="merged|nonmerged">
<part crc="d870b704" name="pdrv3b.bin"/>
<part crc="fa0544ad" name="pdrv5b.bin"/>
<part crc="dd3a2adc" name="pdrv8e.bin"/>
<part crc="1a1f7f81" name="pdrv6e.bin"/>
<part crc="4cb4780e" name="pdrv5e.bin"/>
<part crc="de400335" name="pdrv4e.bin"/>
<part crc="b858b5a8" name="pdrv15a.bin"/>
<part crc="12ee7fc2" name="pdrv14b.bin"/>
<part crc="c41de6e4" name="power_drive_snd_u17.u17"/>
<part crc="cae14c70" name="power_drive_snd_u18.u18"/>
<part crc="78713e78" name="power_drive_snd_u7.u7"/>
<part crc="15714036" name="power_drive_snd_u8.u8"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,32 @@
<misterromdescription>
<name>Rampage (Rev 3)</name>
<mameversion>0217</mameversion>
<mratimestamp>20200202</mratimestamp>
<year>1986</year>
<manufacturer>Bally Midway</manufacturer>
<category>Action</category>
<rbf>MCR3Mono</rbf>
<setname>rampage</setname>
<switches>
<dip bits="8,9" name="Difficulty" ids="Normal,Easy,Hard,Free Play"/>
<dip bits="10" name="Score Opt" ids="Lose,Keep"/>
<dip bits="11" name="Rack Advance (cheat)" ids="Off,On"/>
</switches>
<rom index="1">
<part>00</part>
</rom>
<rom index="0" zip="rampage.zip" md5="c6ccd4ea48d10da950c898c4c2ff60e0" type="merged|nonmerged">
<part crc="2f7ca03c" name="pro-0_3b_rev_3_8-27-86.3b"/>
<part crc="d89bd9a4" name="pro-1_5b_rev_3_8-27-86.5b"/>
<part crc="0974be5d" name="fg-0_8e_6-30-86.8e"/>
<part crc="8728532b" name="fg-1_6e_6-30-86.6e"/>
<part crc="9489f714" name="fg-2_5e_6-30-86.5e"/>
<part crc="81e1de40" name="fg-3_4e_6-30-86.4e"/>
<part crc="c0d8b7a5" name="bg-0_u15_7-23-86.15a"/>
<part crc="2f6e3aa1" name="bg-1_u14_7-23-86.14b"/>
<part crc="e92c596b" name="u-17_rev.2_8-14-86.u17"/>
<part crc="6b8bf5e1" name="u-18_rev.2_8-14-86.u18"/>
<part crc="cffd7fa5" name="u-7_rev.2_8-14-86.u7"/>
<part crc="11f787e4" name="u-8_rev.2_8-14-86.u8"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,30 @@
<misterromdescription>
<name>Sarge</name>
<mameversion>0217</mameversion>
<mratimestamp>20200202</mratimestamp>
<year>1985</year>
<manufacturer>Bally Midway</manufacturer>
<category>Action</category>
<rbf>MCR3Mono</rbf>
<setname>sarge</setname>
<switches>
<dip bits="8" name="Free Play" ids="On,Off"/>
</switches>
<rom index="1">
<part>01</part>
</rom>
<rom index="0" zip="sarge.zip" md5="67acd34124ed8659765bd49683f1fc97" type="merged|nonmerged">
<part crc="da31a58f" name="cpu_3b.bin"/>
<part crc="6800e746" name="cpu_5b.bin"/>
<part crc="93fac29d" name="spr_8e.bin"/>
<part crc="7cc6fb28" name="spr_6e.bin"/>
<part crc="c832375c" name="spr_5e.bin"/>
<part crc="c382267d" name="spr_4e.bin"/>
<part crc="685001b8" repeat="2" name="til_15a.bin"/>
<part crc="8449eb45" repeat="2" name="til_14b.bin"/>
<part crc="a894ef8a" name="tcs_u5.bin"/>
<part crc="6ca6faf3" name="tcs_u4.bin"/>
<part crc="a894ef8a" name="tcs_u5.bin"/>
<part crc="6ca6faf3" name="tcs_u4.bin"/>
</rom>
</misterromdescription>

View File

@@ -27,10 +27,11 @@ module MCR3Mono_MiST(
output AUDIO_L,
output AUDIO_R,
input SPI_SCK,
output SPI_DO,
inout SPI_DO,
input SPI_DI,
input SPI_SS2,
input SPI_SS3,
input SPI_SS4,
input CONF_DATA0,
input CLOCK_27,
output [12:0] SDRAM_A,
@@ -48,11 +49,24 @@ module MCR3Mono_MiST(
`include "rtl/build_id.v"
// Uncomment one to build with game-specific core name/inputs/sound board
//`define CORE_NAME "SARGE"
`define CORE_NAME "MAXRPM"
//`define CORE_NAME "RAMPAGE"
//`define CORE_NAME "POWERDRV"
`define CORE_NAME "RAMPAGE"
wire [6:0] core_mod;
localparam CONF_STR = {
`CORE_NAME,";ROM;",
"O2,Rotate Controls,Off,On;",
"O5,Blend,Off,On;",
"O6,Swap Joystick,Off,On;",
"DIP;",
"O7,Service,Off,On;",
"T0,Reset;",
"V,v1.1.",`BUILD_DATE
};
wire rotate = status[2];
wire blend = status[5];
wire joyswap = status[6];
wire service = status[7];
reg sg; // Sounds Good board
reg [7:0] input0;
@@ -65,8 +79,7 @@ reg [7:0] output6;
// Game specific sound board/DIP/input settings
always @(*) begin
if (`CORE_NAME == "SARGE" ||
`CORE_NAME == "MAXRPM")
if (core_mod == 7'h1 || core_mod == 7'h3)
sg = 0;
else
sg = 1;
@@ -77,44 +90,43 @@ always @(*) begin
input3 = 8'hff;
input4 = 8'hff;
if (`CORE_NAME == "SARGE") begin
// Two stick/player like the original
input0 = ~{2'b00, service, 1'b0, m_two_players, m_one_player, m_coin2, m_coin1};
input1 = ~{m_fireA | m_fireB, m_fireA | m_fireB, m_fire2A | m_fire2B, m_fire2A | m_fire2B, m_down, m_up, m_down, m_up};
input2 = ~{m_fire3A | m_fire3B, m_fire3A | m_fire3B, m_fire4A | m_fire4B, m_fire4A | m_fire4B, m_down3, m_up3, m_down4, m_up4};
end else if (`CORE_NAME == "MAXRPM") begin
input0 = ~{service, 3'b000, m_one_player, m_two_players, m_coin1, m_coin2};
input1 = ~{maxrpm_adc_data};
input2 = ~{maxrpm_gear1, maxrpm_gear2};
end else if (`CORE_NAME == "RAMPAGE") begin
case (core_mod)
7'h0: // RAMPAGE
begin
// normal controls for 3 players
input0 = ~{2'b00, service, 1'b0, 2'b00, m_coin2, m_coin1};
input1 = ~{2'b00, m_fireB, m_fireA, m_left, m_down, m_right, m_up};
input2 = ~{2'b00, m_fire2B, m_fire2A, m_left2, m_down2, m_right2, m_up2};
input3 = ~{/*cheat*/status[11], /*coin B*/3'b000, /*coin A*/1'b0, /*score opt*/status[10], /*difficulty*/status[9:8]};
input4 = ~{2'b00, m_fire3B, m_fire3A, m_left3, m_down3, m_right3, m_up3};
end else if (`CORE_NAME == "POWERDRV") begin
end
7'h1: // SARGE
begin
// Two stick/player like the original
input0 = ~{2'b00, service, 1'b0, m_two_players, m_one_player, m_coin2, m_coin1};
input1 = ~{m_fireA | m_fireB, m_fireA | m_fireB, m_fire2A | m_fire2B, m_fire2A | m_fire2B, m_down, m_up, m_down, m_up};
input2 = ~{m_fire3A | m_fire3B, m_fire3A | m_fire3B, m_fire4A | m_fire4B, m_fire4A | m_fire4B, m_down3, m_up3, m_down4, m_up4};
input3 = ~{2'b00, /*coinage*/2'b00, /*free play*/status[8], 3'b000};
end
7'h2: //POWERDRV
begin
// Controls for 3 players using 4 buttons/joystick
input0 = ~{2'b00, service, 1'b0, 1'b0, m_coin3, m_coin2, m_coin1};
input1 = ~{m_fire2B, m_fire2A, powerdrv_gear[1], m_fire2C, m_fireB, m_fireA, powerdrv_gear[0], m_fireC};
input2 = ~{sndstat[0], 3'b000, m_fire3B, m_fire3A, powerdrv_gear[2], m_fire3C};
input3 = ~{/*cheat*/status[11], /*demosnd*/status[10], /*difficulty*/status[9:8], 1'b0, /*coinage*/2'b00};
end
7'h3: // MAXRPM
begin
input0 = ~{service, 3'b000, m_one_player, m_two_players, m_coin1, m_coin2};
input1 = ~{maxrpm_adc_data};
input2 = ~{maxrpm_gear1, maxrpm_gear2};
input3[0] = ~status[8]; // free play
end
default: ;
endcase
end
localparam CONF_STR = {
`CORE_NAME,";ROM;",
"O2,Rotate Controls,Off,On;",
"O5,Blend,Off,On;",
"O6,Swap Joystick,Off,On;",
"O7,Service,Off,On;",
"T0,Reset;",
"V,v1.1.",`BUILD_DATE
};
wire rotate = status[2];
wire blend = status[5];
wire joyswap = status[6];
wire service = status[7];
assign LED = ~ioctl_downl;
assign SDRAM_CLK = clk_mem;
assign SDRAM_CKE = 1;
@@ -138,14 +150,37 @@ wire [7:0] joystick_2;
wire [7:0] joystick_3;
wire scandoublerD;
wire ypbpr;
wire [9:0] audio;
wire hs, vs, cs;
wire blankn;
wire [2:0] g, r, b;
wire no_csync;
wire key_pressed;
wire [7:0] key_code;
wire key_strobe;
user_io #(
.STRLEN(($size(CONF_STR)>>3)),
.ROM_DIRECT_UPLOAD(1))
user_io(
.clk_sys (clk_sys ),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.no_csync (no_csync ),
.core_mod (core_mod ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.joystick_2 (joystick_2 ),
.joystick_3 (joystick_3 ),
.status (status )
);
wire ioctl_downl;
wire [7:0] ioctl_index;
wire ioctl_wr;
@@ -168,11 +203,13 @@ Rampage, Power Drive (Sounds Good board):
58000- SG 128k
*/
data_io data_io(
data_io #(.ROM_DIRECT_UPLOAD(1)) data_io(
.clk_sys ( clk_sys ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS2 ( SPI_SS2 ),
.SPI_SS4 ( SPI_SS4 ),
.SPI_DI ( SPI_DI ),
.SPI_DO ( SPI_DO ),
.ioctl_download( ioctl_downl ),
.ioctl_index ( ioctl_index ),
.ioctl_wr ( ioctl_wr ),
@@ -278,7 +315,11 @@ always @(posedge clk_sys) begin
reset <= status[0] | buttons[1] | ioctl_downl | ~rom_loaded | (reset_count == 16'h0001);
end
wire [1:0] sndstat;
wire [1:0] sndstat;
wire [9:0] audio;
wire hs, vs, cs;
wire blankn;
wire [2:0] g, r, b;
mcr3mono mcr3mono (
.clock_40(clk_sys),
@@ -318,8 +359,8 @@ mcr3mono mcr3mono (
wire vs_out;
wire hs_out;
assign VGA_VS = scandoublerD | vs_out;
assign VGA_HS = scandoublerD ? cs : hs_out;
assign VGA_HS = ((~no_csync & scandoublerD) || ypbpr)? cs : hs_out;
assign VGA_VS = ((~no_csync & scandoublerD) || ypbpr)? 1'b1 : vs_out;
mist_video #(.COLOR_DEPTH(3)) mist_video(
.clk_sys ( clk_sys ),
@@ -344,29 +385,6 @@ mist_video #(.COLOR_DEPTH(3)) mist_video(
.ypbpr ( ypbpr )
);
user_io #(
.STRLEN(($size(CONF_STR)>>3)))
user_io(
.clk_sys (clk_sys ),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.joystick_2 (joystick_2 ),
.joystick_3 (joystick_3 ),
.status (status )
);
dac #(10) dac(
.clk_i(clk_sys),
.res_n_i(1),

View File

@@ -397,8 +397,8 @@ begin
vcnt >= 1 and vcnt < 241 then video_blankn <= '1';end if;
if hs_cnt = 0 then hsync0 <= '0';
elsif hs_cnt = 47 then hsync0 <= '1';
if hs_cnt = 0 then hsync0 <= '0'; video_hs <= '0';
elsif hs_cnt = 47 then hsync0 <= '1'; video_hs <= '1';
end if;
if hs_cnt = 0 then hsync1 <= '0';

View File

@@ -40,7 +40,7 @@
# Project-Wide Assignments
# ========================
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.0.2
set_global_assignment -name LAST_QUARTUS_VERSION 13.1
set_global_assignment -name LAST_QUARTUS_VERSION "13.1 SP4.26"
set_global_assignment -name PROJECT_CREATION_TIME_DATE "19:48:06 MAY 24,2017"
set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl"
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
@@ -228,9 +228,9 @@ set_global_assignment -name VERILOG_FILE rtl/wsg.v
set_global_assignment -name VERILOG_FILE rtl/ioctrl.v
set_global_assignment -name VERILOG_FILE rtl/hvgen.v
set_global_assignment -name VHDL_FILE rtl/dpram.vhd
set_global_assignment -name VERILOG_FILE rtl/mc6809/mc6809i.v
set_global_assignment -name VERILOG_FILE rtl/mc6809/mc6809.v
set_global_assignment -name VERILOG_FILE rtl/pll.v
set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram.sv
set_global_assignment -name VERILOG_FILE ../../common/CPU/MC6809/mc6809i.v
set_global_assignment -name VERILOG_FILE ../../common/CPU/MC6809/mc6809.v
set_global_assignment -name QIP_FILE ../../common/mist/mist.qip
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

View File

@@ -1,13 +1,15 @@
The Tower of Druaga/Mappy/Motos/DigDug II to Mist FPGA by Slingshot
Appropriate ROMs are required at the root of the SD Card:
DRUAGA.ROM
MAPPY.ROM
MOTOS.ROM
DIGDUG2.ROM
-- Usage:
-- - Create ROM and ARC files from the MRA files in the meta directory
-- using the MRA utility.
-- Example: mra -A -z /path/to/mame/roms motos.mra
-- - Copy the ROM files to the root of the SD Card
-- - Copy the RBF and ARC files to the same folder on the SD Card
--
-- MRA utility: https://github.com/sebdel/mra-tools-c/
--
--
---------------------------------------------------------------------------------
--
-- Arcade: The Tower of Druaga port to MiSTer by MiSTer-X

View File

@@ -0,0 +1,28 @@
<misterromdescription>
<name>Dig Dug 2</name>
<setname>digdug2</setname>
<rbf>Druaga</rbf>
<switches>
<dip bits="19" name="Lives" ids="3,5"/>
<dip bits="20,21" name="Extend" ids="30k/80k,30k/100k,30k/120k,30k/150k"/>
<dip bits="22" name="Level Select" ids="Off,On"/>
</switches>
<rom index="1">
<part>03</part>
</rom>
<rom index="0" zip="digdug2.zip" md5="2e652e5d6a114b7bd21a96e954b7f148">
<part name="d23_3.1d"/>
<part name="d23_1.1b"/>
<part name="d21_6.3m"/>
<part name="d21_7.3n"/>
<part name="d21_4.1k"/>
<part name="d21_5.3b"/>
<part name="d21-7.5k"/>
<part name="d21-7.5k"/>
<part name="d21-7.5k"/>
<part name="d21-7.5k"/>
<part name="d21-6.4c"/>
<part name="d21-3.3m"/>
<part name="d21-5.5b"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,25 @@
<misterromdescription>
<name>The Tower of Druaga</name>
<setname>druaga</setname>
<rbf>Druaga</rbf>
<switches>
<dip bits="8,9" name="Lives" ids="3,2,1,5"/>
</switches>
<rom index="1">
<part>01</part>
</rom>
<rom index="0" zip="todruaga.zip" md5="ef0d64d4d3fc4f594389d2b28c677c20">
<part name="td2_3.1d"/>
<part name="td2_1.1b"/>
<part name="td1_6.3m"/>
<part name="td1_6.3m"/>
<part name="td1_7.3n"/>
<part name="td1_7.3n"/>
<part name="td1_4.1k"/>
<part name="td1_5.3b"/>
<part name="td1-7.5k"/>
<part name="td1-6.4c"/>
<part name="td1-3.3m"/>
<part name="td1-5.5b"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,34 @@
<misterromdescription>
<name>Mappy</name>
<setname>mappy</setname>
<switches>
<dip bits="10,12" name="Rank" ids="A,B,C,D,E,F,G,H"/>
<dip bits="17,18" name="Lives" ids="3,5,1,2"/>
<dip bits="14,16" name="Extend" ids="M1,M2,M3,M4,M5,M6,M7,None"/>
<dip bits="13" name="Demo Sound" ids="On,Off"/>
<dip bits="6" name="Round Progress" ids="Off,On"/>
</switches>
<rbf>Druaga</rbf>
<rom index="1">
<part>02</part>
</rom>
<rom index="0" zip="mappy.zip" md5="b276d97b0dc61ca668d140793fac44bf">
<part name="mpx_3.1d"/>
<part name="mpx_3.1d"/>
<part name="mp1_2.1c"/>
<part name="mpx_1.1b"/>
<part name="mp1_6.3m"/>
<part name="mp1_6.3m"/>
<part name="mp1_7.3n"/>
<part name="mp1_7.3n"/>
<part name="mp1_4.1k"/>
<part name="mp1_5.3b"/>
<part name="mp1-7.5k"/>
<part name="mp1-7.5k"/>
<part name="mp1-7.5k"/>
<part name="mp1-7.5k"/>
<part name="mp1-6.4c"/>
<part name="mp1-3.3m"/>
<part name="mp1-5.5b"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,29 @@
<misterromdescription>
<name>Motos</name>
<setname>motos</setname>
<rbf>Druaga</rbf>
<switches>
<dip bits="24" name="Rank" ids="A,B"/>
<dip bits="23" name="Lives" ids="3,5"/>
<dip bits="25,26" name="Extend" ids="10k/30k/ev.50k,20k/ev.50k,30k/ev.70k,20k/70k"/>
<dip bits="27" name="Demo Sound" ids="On,Off"/>
</switches>
<rom index="1">
<part>04</part>
</rom>
<rom index="0" zip="motos.zip" md5="446203961cff53598233d2c50db390d8">
<part name="mo1_3.1d"/>
<part name="mo1_1.1b"/>
<part name="mo1_6.3m"/>
<part name="mo1_7.3n"/>
<part name="mo1_4.1k"/>
<part name="mo1_5.3b"/>
<part name="mo1-7.5k"/>
<part name="mo1-7.5k"/>
<part name="mo1-7.5k"/>
<part name="mo1-7.5k"/>
<part name="mo1-6.4c"/>
<part name="mo1-3.3m"/>
<part name="mo1-5.5b"/>
</rom>
</misterromdescription>

View File

@@ -28,28 +28,99 @@ module TheTowerofDruaga_mist (
);
// Uncomment one of these to load the default ROM:
`define CORE_NAME "DRUAGA"
//`define CORE_NAME "MAPPY"
//`define CORE_NAME "MOTOS"
//`define CORE_NAME "DIGDUG2"
//`define CORE_NAME "GROBDA"
//`define CORE_NAME "PHOZON"
`include "rtl\build_id.v"
`define CORE_NAME "DRUAGA"
wire [6:0] core_mod;
localparam CONF_STR = {
`CORE_NAME,";ROM;",
`CORE_NAME, ";ROM;",
"O2,Rotate Controls,Off,On;",
"O34,Scanlines,Off,25%,50%,75%;",
"O5,Blend,Off,On;",
"DIP;",
"OU,Service Mode,Off,On;",
"OT,Freeze,Off,On;",
"T0,Reset;",
"V,v1.00.",`BUILD_DATE
};
wire rotate = status[2];
wire [1:0] scanlines = status[4:3];
wire blend = status[5];
wire dcFreeze = status[29];
wire dcService = status[30];
wire dcCabinet = 1'b0; // (upright only)
// The Tower of Druaga [t]
wire [1:0] dtLives = status[9:8];
// Mappy [m]
wire dmRoundP = status[6];
wire [2:0] dmRank = status[12:10];
wire dmDemoSnd = status[13];
wire [2:0] dmExtend = status[16:14];
wire [1:0] dmLives = status[18:17];
// DigDug2 [d]
wire ddLives = status[19];
wire [1:0] ddExtend = status[21:20];
wire ddLevelSel = status[22];
// Motos [o]
wire doLives = status[23];
wire doRank = status[24];
wire [1:0] doExtend = status[26:25];
wire doDemoSnd = status[27];
reg [7:0] DSW0;
reg [7:0] DSW1;
reg [7:0] DSW2;
reg [5:0] INP0;
reg [5:0] INP1;
reg [2:0] INP2;
always @(*) begin
INP0 = { m_fireB, m_fireA, m_left, m_down, m_right, m_up};
INP1 = { m_fire2B, m_fire2A, m_left2, m_down2, m_right2, m_up2 };
INP2 = { m_coin1 | m_coin2, m_two_players, m_one_player };
DSW0 = 0;
DSW1 = 0;
DSW2 = 0;
case (core_mod)
7'h0, 7'h1: // DRUAGA
begin
DSW0 = {2'd0,dtLives,4'd0};
DSW1 = {dcCabinet,6'd0,dcFreeze};
DSW2 = {DSW1[3:0],dcService,3'd0};
end
7'h2: // MAPPY
begin
DSW0 = {dcFreeze,dmRoundP,dmDemoSnd,2'd0,dmRank};
DSW1 = {dmLives,dmExtend,3'd0};
DSW2 = {{2{dcService,dcCabinet,2'd0}}};
end
7'h3: // DIGDUG2
begin
DSW0 = {2'd0,ddLives,5'd0};
DSW1 = {dcCabinet,3'd0,dcFreeze,ddLevelSel,ddExtend};
DSW2 = {DSW1[3:0],dcService,3'd0};
end
7'h4: // MOTOS
begin
DSW0 = {doDemoSnd,doExtend,doRank,doLives,3'd0};
DSW1 = {dcService,dcCabinet,6'd0};
DSW2 = {8'd0};
end
7'h5: ;// GROBDA
7'h6: ;// PHOZON
default: ;
endcase
end
assign LED = ~ioctl_downl;
assign AUDIO_R = AUDIO_L;
assign SDRAM_CLK = clock_48;
@@ -70,24 +141,50 @@ wire [7:0] joystick_0;
wire [7:0] joystick_1;
wire scandoublerD;
wire ypbpr;
wire [7:0] audio;
wire hs, vs;
wire hb, vb;
wire blankn = ~(hb | vb);
wire [2:0] r, g;
wire [1:0] b;
wire [14:0] rom_addr;
wire [15:0] rom_do;
wire [12:0] snd_addr;
wire [15:0] snd_do;
wire no_csync;
wire key_strobe;
wire key_pressed;
wire [7:0] key_code;
user_io #(.STRLEN($size(CONF_STR)>>3))user_io(
.clk_sys (clock_48 ),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.no_csync (no_csync ),
.core_mod (core_mod ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status )
);
wire ioctl_downl;
wire [7:0] ioctl_index;
wire ioctl_wr;
wire [24:0] ioctl_addr;
wire [7:0] ioctl_dout;
wire key_strobe;
wire key_pressed;
wire [7:0] key_code;
/*
ROM map
00000-07FFF cpu0 32k 3.1d+1.1b (+2.1c in Mappy)
08000-0BFFF spchip0 16k 6.3m
0C000-0FFFF spchip1 16k 7.3m
10000-11FFF cpu1 8k 4.1k
12000-12FFF bgchip 4k 5.3b
13000-133FF spclut 1k 7.5k
13400-134FF bgclut 256b 6.4c
13500-135FF wave 256b 3.3m
13600-1361F palet 32b 5.5b
*/
data_io data_io(
.clk_sys ( clock_48 ),
@@ -102,6 +199,11 @@ data_io data_io(
);
reg port1_req, port2_req;
wire [14:0] rom_addr;
wire [15:0] rom_do;
wire [12:0] snd_addr;
wire [15:0] snd_do;
sdram sdram(
.*,
.init_n ( pll_locked ),
@@ -154,17 +256,16 @@ always @(posedge clock_48) begin
reset <= status[0] | buttons[1] | ioctl_downl | ~rom_loaded;
end
wire [7:0] DSW0 = 0;//{2'h0,status[7:6],4'h0};
wire [7:0] DSW1 = 0;
wire [7:0] DSW2 = 0;//{4'h0,status[8],3'h0};
wire [5:0] INP0 = { m_bomb, m_fire, m_left, m_down, m_right, m_up};
wire [5:0] INP1 = { m_bomb, m_fire, m_left, m_down, m_right, m_up};
wire [2:0] INP2 = { btn_coin, btn_two_players, btn_one_player };
wire PCLK, PCLK_EN;
wire [8:0] HPOS,VPOS;
wire [7:0] audio;
wire hs, vs;
wire hb, vb;
wire blankn = ~(hb | vb);
wire [2:0] r, g;
wire [1:0] b;
fpga_druaga fpga_druaga(
.MCLK(clock_48),
.CLKCPUx2(clock_6),
@@ -218,32 +319,13 @@ mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
.VGA_B ( VGA_B ),
.VGA_VS ( VGA_VS ),
.VGA_HS ( VGA_HS ),
.rotate ( {1'b1,status[2]} ),
.rotate ( { 1'b1, rotate } ),
.scandoubler_disable( scandoublerD ),
.scanlines ( status[4:3] ),
.blend ( status[5] ),
.scanlines ( scanlines ),
.blend ( blend ),
.ypbpr ( ypbpr )
);
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
.clk_sys (clock_48 ),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status )
);
dac #(.C_bits(16))dac(
.clk_i(clock_48),
.res_n_i(1),
@@ -251,40 +333,24 @@ dac #(.C_bits(16))dac(
.dac_o(AUDIO_L)
);
// Rotated Normal
wire m_up = ~status[2] ? btn_left | joystick_0[1] | joystick_1[1] : btn_up | joystick_0[3] | joystick_1[3];
wire m_down = ~status[2] ? btn_right | joystick_0[0] | joystick_1[0] : btn_down | joystick_0[2] | joystick_1[2];
wire m_left = ~status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_left | joystick_0[1] | joystick_1[1];
wire m_right = ~status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_right | joystick_0[0] | joystick_1[0];
wire m_fire = btn_fire1 | joystick_0[4] | joystick_1[4];
wire m_bomb = btn_fire2 | joystick_0[5] | joystick_1[5];
wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF;
wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F;
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
reg btn_one_player = 0;
reg btn_two_players = 0;
reg btn_left = 0;
reg btn_right = 0;
reg btn_down = 0;
reg btn_up = 0;
reg btn_fire1 = 0;
reg btn_fire2 = 0;
//reg btn_fire3 = 0;
reg btn_coin = 0;
always @(posedge clock_48) begin
if(key_strobe) begin
case(key_code)
'h75: btn_up <= key_pressed; // up
'h72: btn_down <= key_pressed; // down
'h6B: btn_left <= key_pressed; // left
'h74: btn_right <= key_pressed; // right
'h76: btn_coin <= key_pressed; // ESC
'h05: btn_one_player <= key_pressed; // F1
'h06: btn_two_players <= key_pressed; // F2
// 'h14: btn_fire3 <= key_pressed; // ctrl
'h11: btn_fire2 <= key_pressed; // alt
'h29: btn_fire1 <= key_pressed; // Space
endcase
end
end
arcade_inputs inputs (
.clk ( clock_48 ),
.key_strobe ( key_strobe ),
.key_pressed ( key_pressed ),
.key_code ( key_code ),
.joystick_0 ( joystick_0 ),
.joystick_1 ( joystick_1 ),
.rotate ( rotate ),
.orientation ( 2'b11 ),
.joyswap ( 1'b0 ),
.oneplayer ( 1'b1 ),
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
);
endmodule

View File

@@ -1,40 +1,32 @@
//------------------------------------------
// I/O Chip for "Mappy/Druaga/DigDug2"
//
// Copyright (c) 2007 MiSTer-X
// Copyright (c) 2007,19 MiSTer-X
//------------------------------------------
// TODO: DSW2 = DIPSW[23:16]
case ( mema[4'h8] )
4'h1: begin
mema[4'h0] <= 0;
mema[4'h1] <= 0;
mema[4'h2] <= 0;
mema[4'h3] <= 0;
end
4'h3: begin
4'h1,4'h3: begin
credit_add = 0;
credit_sub = 0;
if ( iCSTART12[2] & ( credits < 99 ) ) begin
credit_add = 8'h01;
credits = credits + 1'd1;
credits = credits + 1;
end
if ( mema[4'h9] == 0 ) begin
if ( ( credits >= 2 ) & iCSTART12[1] ) begin
credit_sub = 8'h02;
credits = credits - 2'd1;
credits = credits - 2;
end else if ( ( credits >= 1 ) & iCSTART12[0] ) begin
credit_sub = 8'h01;
credits = credits - 1'd1;
credits = credits - 1;
end
end
mema[4'h0] <= credit_add;
mema[4'h1] <= credit_sub;
mema[4'h1] <= credit_sub | {7'd0,CSTART12[0]};
mema[4'h2] <= CREDIT_TENS;
mema[4'h3] <= CREDIT_ONES;
mema[4'h4] <= STKTRG12[3:0];
@@ -65,21 +57,14 @@
mema[4'h7] <= 4'hD;
end
default: begin end
default:;
endcase
case ( memb[4'h8] )
4'h1: begin
memb[4'h0] <= 0;
memb[4'h1] <= 0;
memb[4'h2] <= 0;
memb[4'h3] <= 0;
end
4'h3: begin
4'h1,4'h3: begin
memb[4'h0] <= 0;
memb[4'h1] <= 0;
memb[4'h2] <= 0;
@@ -91,15 +76,18 @@
end
4'h4: begin
memb[4'h0] <= DIPSW[11:8];
memb[4'h1] <= DIPSW[3:0];
memb[4'h2] <= DIPSW[7:4];
memb[4'h4] <= DIPSW[15:12];
memb[4'h6] <= DIPSW[7:4];
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;
memb[4'h5] <= { DIPSW[3:2], STKTRG12[ 5], iSTKTRG12[ 5] };
memb[4'h7] <= { 2'b00, STKTRG12[11], iSTKTRG12[11] };
end
4'h5: begin
@@ -113,7 +101,7 @@
memb[4'h7] <= 4'hD;
end
default: begin end
default:;
endcase

View File

@@ -1,17 +1,21 @@
//------------------------------------------
// I/O Chip for "Motos"
//
// Copyright (c) 2007 MiSTer-X
// Copyright (c) 2007,19 MiSTer-X
//------------------------------------------
// TODO: DSW2 = DIPSW[23:16]
case ( mema[4'h8] )
4'h1: begin
mema[4'h0] <= { 3'b00, CSTART12[2] };
mema[4'h0] <= { 3'd0, CSTART12[2] };
mema[4'h1] <= STKTRG12[3:0];
mema[4'h2] <= STKTRG12[9:6];
mema[4'h3] <= { CSTART12[1], CSTART12[0], STKTRG12[10], STKTRG12[4] };
mema[4'h4] <= STKTRG12[9:6];
mema[4'h5] <= STKTRG12[9:6];
mema[4'h6] <= STKTRG12[9:6];
mema[4'h7] <= STKTRG12[9:6];
mema[4'h9] <= 0;
end
4'h8: begin
@@ -19,8 +23,8 @@
mema[4'h1] <= 4'h9;
end
default: begin end
default:;
endcase
@@ -32,17 +36,18 @@
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'h2] <= 0;
memb[4'h3] <= 0;
memb[4'h4] <= 0;
memb[4'h5] <= 0;
memb[4'h6] <= 0;
memb[4'h7] <= 0;
end
default: begin end
default:;
endcase

View File

@@ -1,80 +0,0 @@
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 08:11:34 09/23/2016
// Design Name:
// Module Name: mc6809e
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module mc6809(
input [7:0] D,
output [7:0] DOut,
output [15:0] ADDR,
output RnW,
output E,
output Q,
output BS,
output BA,
input nIRQ,
input nFIRQ,
input nNMI,
input EXTAL,
input XTAL,
input nHALT,
input nRESET,
input MRDY,
input nDMABREQ
, output [111:0] RegData
);
reg [1:0] clk_phase=2'b00;
wire CLK;
assign CLK=EXTAL;
wire LIC;
wire BUSY;
wire AVMA;
reg rE;
reg rQ;
assign E = rE;
assign Q = rQ;
mc6809i cpucore(.D(D), .DOut(DOut), .ADDR(ADDR), .RnW(RnW), .E(E), .Q(Q), .BS(BS), .BA(BA), .nIRQ(nIRQ), .nFIRQ(nFIRQ),
.nNMI(nNMI), .AVMA(AVMA), .BUSY(BUSY), .LIC(LIC), .nHALT(nHALT), .nRESET(nRESET), .nDMABREQ(nDMABREQ)
,.RegData(RegData)
);
always @(negedge CLK)
begin
case (clk_phase)
2'b00:
rE <= 0;
2'b01:
rQ <= 1;
2'b10:
rE <= 1;
2'b11:
rQ <= 0;
endcase
if (MRDY == 1'b1)
clk_phase <= clk_phase + 2'b01;
end
endmodule

File diff suppressed because it is too large Load Diff

View File

@@ -1,102 +0,0 @@
module mems
(
input CPUCLKx2,
output [14:0] rom_addr,
input [7:0] rom_data,
input [15:0] MCPU_ADRS,
input MCPU_VMA,
input MCPU_WE,
input [7:0] MCPU_DO,
output [7:0] MCPU_DI,
output IO_CS,
input [7:0] IO_O,
input [15:0] SCPU_ADRS,
input SCPU_VMA,
input SCPU_WE,
input [7:0] SCPU_DO,
output [7:0] SCPU_DI,
output SCPU_WSG_WE,
input VCLKx4,
input [10:0] vram_a,
output [15:0] vram_d,
input [6:0] spra_a,
output [23:0] spra_d,
input ROMCL, // Downloaded ROM image
input [16:0] ROMAD,
input [7:0] ROMDT,
input ROMEN
);
//wire [7:0] mrom_d;
wire [7:0] srom_d;
assign rom_addr = MCPU_ADRS[14:0];
//assign mrom_d = rom_data;
scpui_rom scpui_rom(
.clk(CPUCLKx2),
.addr(SCPU_ADRS[12:0]),
.data(srom_d)
);
wire mram_cs0 = ( MCPU_ADRS[15:11] == 5'b00000 ) & MCPU_VMA; // $0000-$07FF
wire mram_cs1 = ( MCPU_ADRS[15:11] == 5'b00001 ) & MCPU_VMA; // $0800-$0FFF
wire mram_cs2 = ( MCPU_ADRS[15:11] == 5'b00010 ) & MCPU_VMA; // $1000-$17FF
wire mram_cs3 = ( MCPU_ADRS[15:11] == 5'b00011 ) & MCPU_VMA; // $1800-$1FFF
wire mram_cs4 = ( MCPU_ADRS[15:11] == 5'b00100 ) & MCPU_VMA; // $2000-$27FF
wire mram_cs5 = ( MCPU_ADRS[15:10] == 6'b010000 ) & MCPU_VMA; // $4000-$43FF
assign IO_CS = ( MCPU_ADRS[15:11] == 5'b01001 ) & MCPU_VMA; // $4800-$4FFF
wire mrom_cs = ( MCPU_ADRS[15] ) & MCPU_VMA; // $8000-$FFFF
wire mram_w0 = ( mram_cs0 & MCPU_WE );
wire mram_w1 = ( mram_cs1 & MCPU_WE );
wire mram_w2 = ( mram_cs2 & MCPU_WE );
wire mram_w3 = ( mram_cs3 & MCPU_WE );
wire mram_w4 = ( mram_cs4 & MCPU_WE );
wire mram_w5 = ( mram_cs5 & MCPU_WE );
wire [7:0] mram_o0, mram_o1, mram_o2, mram_o3, mram_o4, mram_o5;
assign MCPU_DI = mram_cs0 ? mram_o0 :
mram_cs1 ? mram_o1 :
mram_cs2 ? mram_o2 :
mram_cs3 ? mram_o3 :
mram_cs4 ? mram_o4 :
mram_cs5 ? mram_o5 :
mrom_cs ? rom_data ://mrom_d :
IO_CS ? IO_O :
8'h0;
wire [10:0] mram_ad = MCPU_ADRS[10:0];
DPRAM_2048V main_ram0( CPUCLKx2, mram_ad, MCPU_DO, mram_o0, mram_w0, VCLKx4, vram_a, vram_d[7:0] );
DPRAM_2048V main_ram1( CPUCLKx2, mram_ad, MCPU_DO, mram_o1, mram_w1, VCLKx4, vram_a, vram_d[15:8] );
DPRAM_2048V main_ram2( CPUCLKx2, mram_ad, MCPU_DO, mram_o2, mram_w2, VCLKx4, { 4'b1111, spra_a }, spra_d[7:0] );
DPRAM_2048V main_ram3( CPUCLKx2, mram_ad, MCPU_DO, mram_o3, mram_w3, VCLKx4, { 4'b1111, spra_a }, spra_d[15:8] );
DPRAM_2048V main_ram4( CPUCLKx2, mram_ad, MCPU_DO, mram_o4, mram_w4, VCLKx4, { 4'b1111, spra_a }, spra_d[23:16] );
// (SCPU ADRS)
wire SCPU_CS_SREG = ( ( SCPU_ADRS[15:13] == 3'b000 ) & ( SCPU_ADRS[9:6] == 4'b0000 ) ) & SCPU_VMA;
wire srom_cs = ( SCPU_ADRS[15:13] == 3'b111 ) & SCPU_VMA; // $E000-$FFFF
wire sram_cs0 = (~SCPU_CS_SREG) & (~srom_cs) & SCPU_VMA; // $0000-$03FF
wire [7:0] sram_o0;
assign SCPU_DI = sram_cs0 ? sram_o0 :
srom_cs ? srom_d :
8'h0;
assign SCPU_WSG_WE = SCPU_CS_SREG & SCPU_WE;
DPRAM_2048 share_ram
(
CPUCLKx2, mram_ad, MCPU_DO, mram_o5, mram_w5,
CPUCLKx2, { 1'b0, SCPU_ADRS[9:0] }, SCPU_DO, sram_o0, sram_cs0 & SCPU_WE
);
endmodule

View File

@@ -1,110 +0,0 @@
module regs
(
input MCPU_CLK,
input RESET,
input VBLANK,
input [15:0] MCPU_ADRS,
input MCPU_VMA,
input MCPU_WE,
input [15:0] SCPU_ADRS,
input SCPU_VMA,
input SCPU_WE,
output reg [7:0] SCROLL,
output MCPU_IRQ,
output reg MCPU_IRQEN,
output SCPU_IRQ,
output reg SCPU_IRQEN,
output SCPU_RESET,
output IO_RESET,
output reg PSG_ENABLE
);
// 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 if ( MCPU_SCRWE ) SCROLL <= MCPU_ADRS[10:3];
end
// MainCPU IRQ Generator
wire MCPU_IRQWE = ( ( MCPU_ADRS[15:1] == 15'b010100000000001 ) & MCPU_VMA & MCPU_WE );
//wire MCPU_IRQWES = ( ( SCPU_ADRS[15:1] == 15'b001000000000001 ) & SCPU_VMA & SCPU_WE );
assign MCPU_IRQ = MCPU_IRQEN & VBLANK;
always @( negedge MCPU_CLK or posedge RESET ) begin
if ( RESET ) begin
MCPU_IRQEN <= 1'b0;
end
else begin
if ( MCPU_IRQWE ) MCPU_IRQEN <= MCPU_ADRS[0];
// if ( MCPU_IRQWES ) MCPU_IRQEN <= SCPU_ADRS[0];
end
end
// SubCPU IRQ Generator
wire SCPU_IRQWE = ( ( MCPU_ADRS[15:1] == 15'b010100000000000 ) & MCPU_VMA & MCPU_WE );
wire SCPU_IRQWES = ( ( SCPU_ADRS[15:1] == 15'b001000000000000 ) & SCPU_VMA & SCPU_WE );
assign SCPU_IRQ = SCPU_IRQEN & VBLANK;
always @( negedge MCPU_CLK or posedge RESET ) begin
if ( RESET ) begin
SCPU_IRQEN <= 1'b0;
end
else begin
if ( SCPU_IRQWE ) SCPU_IRQEN <= MCPU_ADRS[0];
if ( SCPU_IRQWES ) SCPU_IRQEN <= SCPU_ADRS[0];
end
end
// SubCPU RESET Control
reg SCPU_RSTf = 1'b0;
wire SCPU_RSTWE = ( ( MCPU_ADRS[15:1] == 15'b010100000000101 ) & MCPU_VMA & MCPU_WE );
wire SCPU_RSTWES = ( ( SCPU_ADRS[15:1] == 15'b001000000000101 ) & SCPU_VMA & SCPU_WE );
assign SCPU_RESET = ~SCPU_RSTf;
always @( negedge MCPU_CLK or posedge RESET ) begin
if ( RESET ) begin
SCPU_RSTf <= 1'b0;
end
else begin
if ( SCPU_RSTWE ) SCPU_RSTf <= MCPU_ADRS[0];
if ( SCPU_RSTWES ) SCPU_RSTf <= SCPU_ADRS[0];
end
end
// I/O CHIP RESET Control
reg IOCHIP_RSTf = 1'b0;
wire IOCHIP_RSTWE = ( ( MCPU_ADRS[15:1] == 15'b010100000000100 ) & MCPU_VMA & MCPU_WE );
assign IO_RESET = ~IOCHIP_RSTf;
always @( negedge MCPU_CLK or posedge RESET ) begin
if ( RESET ) begin
IOCHIP_RSTf <= 1'b0;
end
else begin
if ( IOCHIP_RSTWE ) IOCHIP_RSTf <= MCPU_ADRS[0];
end
end
// Sound Enable Control
wire PSG_ENAWE = ( ( MCPU_ADRS[15:1] == 15'b010100000000011 ) & MCPU_VMA & MCPU_WE );
wire PSG_ENAWES = ( ( SCPU_ADRS[15:1] == 15'b001000000000011 ) & SCPU_VMA & SCPU_WE );
always @( negedge MCPU_CLK or posedge RESET ) begin
if ( RESET ) begin
PSG_ENABLE <= 1'b0;
end
else begin
if ( PSG_ENAWE ) PSG_ENABLE <= MCPU_ADRS[0];
if ( PSG_ENAWES ) PSG_ENABLE <= SCPU_ADRS[0];
end
end
endmodule

View File

@@ -119,8 +119,8 @@ set_clock_groups -asynchronous -group [get_clocks $sdram_clk] -group [get_clocks
set_multicycle_path -from [get_clocks $game_clk] -to [get_clocks $sdram_clk] -setup 2
set_multicycle_path -from [get_clocks $game_clk] -to [get_clocks $sdram_clk] -hold 1
set_multicycle_path -to {VGA_*[*]} -setup 2
set_multicycle_path -to {VGA_*[*]} -hold 1
set_multicycle_path -to {VGA_*[*]} -setup 3
set_multicycle_path -to {VGA_*[*]} -hold 2
#**************************************************************
# Set Maximum Delay

View File

@@ -3,6 +3,16 @@
-- Arcade: Defender port to MiST by Gehstock
-- 11 June 2019
--
--
-- Usage:
-- - Create ROM and ARC files from the MRA files in the meta directory
-- using the MRA utility.
-- Example: mra -A -z /path/to/mame/roms Defender.mra
-- - Copy the ROM files to the root of the SD Card
-- - Copy the RBF and ARC files to the same folder on the SD Card
--
-- MRA utility: https://github.com/sebdel/mra-tools-c/
--
---------------------------------------------------------------------------------
-- A simulation model of Williams 6809 hardware
-- by Dar (darfpga@aol.fr)

View File

@@ -0,0 +1,33 @@
<misterromdescription>
<name>Colony 7 (set 1)</name>
<mameversion>0216</mameversion>
<setname>colony7</setname>
<mratimestamp>201911270000</mratimestamp>
<year>1981</year>
<manufacturer>Taito</manufacturer>
<category>Space / Shooter</category>
<rbf>defender</rbf>
<rom index="1"><part>1</part></rom>
<switches>
<dip bits="10" name="Lives" ids="2,3"/>
<dip bits="11" name="Bonus" ids="20k/40k(30k/50k),30k/50k(40k/70k)"/>
</switches>
<rom index="0" zip="colony7.zip" md5="a7d3286ded800538d379816ade2c0d12" type="merged|nonmerged">
<part name="cs03.bin"/>
<part name="cs02.bin"/>
<part name="cs01.bin"/>
<part name="cs06.bin"/>
<part name="cs04.bin"/>
<part name="cs07.bin"/>
<part name="cs05.bin"/>
<part name="cs08.bin" repeat="4"/>
<part name="cs10.bin"/>
<part name="decoder.3"/>
<part name="cs11.bin"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,37 @@
<misterromdescription>
<name>Defender (Red label)</name>
<mameversion>0216</mameversion>
<mratimestamp>201911270000</mratimestamp>
<year>1980</year>
<manufacturer>Williams</manufacturer>
<category>Space / Defender</category>
<rbf>defender</rbf>
<rom index="1"><part>0</part></rom>
<switches>
<dip bits="7" name="Auto up" ids="Off,On"/>
<dip bits="8" name="Advance"/>
<dip bits="9" name="HS Reset"/>
</switches>
<rom index="0" zip="defender.zip" md5="2173eef0c95ff44752cd36981c909c6d" type="merged|nonmerged">
<part name="defend.1"/>
<part name="defend.4"/>
<part name="defend.2"/>
<part name="defend.3"/>
<part name="defend.9"/>
<part name="defend.12"/>
<part name="defend.8"/>
<part name="defend.11"/>
<part name="defend.7"/>
<part name="defend.10"/>
<part name="defend.6"/>
<part name="defend.6"/>
<part name="decoder.2"/>
<part name="decoder.3"/>
<part name="defend.snd"/>
</rom>
</misterromdescription>

Some files were not shown because too many files have changed in this diff Show More