mirror of
https://github.com/Gehstock/Mist_FPGA.git
synced 2026-01-20 01:34:38 +00:00
Mappy HW: single RBF + MRA + common CPU
This commit is contained in:
parent
a224f2554f
commit
174c2644a0
@ -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
|
||||
@ -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
|
||||
|
||||
28
Arcade_MiST/Namco Mappy Hardware/meta/digdug2.mra
Normal file
28
Arcade_MiST/Namco Mappy Hardware/meta/digdug2.mra
Normal 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>
|
||||
25
Arcade_MiST/Namco Mappy Hardware/meta/druaga.mra
Normal file
25
Arcade_MiST/Namco Mappy Hardware/meta/druaga.mra
Normal 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>
|
||||
34
Arcade_MiST/Namco Mappy Hardware/meta/mappy.mra
Normal file
34
Arcade_MiST/Namco Mappy Hardware/meta/mappy.mra
Normal 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>
|
||||
29
Arcade_MiST/Namco Mappy Hardware/meta/motos.mra
Normal file
29
Arcade_MiST/Namco Mappy Hardware/meta/motos.mra
Normal 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>
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
@ -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
|
||||
@ -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
|
||||
Loading…
x
Reference in New Issue
Block a user