mirror of
https://github.com/Gehstock/Mist_FPGA.git
synced 2026-01-20 09:44:38 +00:00
IremM62: add Battle Road (second bg layer is missing)
This commit is contained in:
parent
b129cc313f
commit
ced0510dd2
138
Arcade_MiST/IremM62 Hardware/meta/Battle Road.mra
Normal file
138
Arcade_MiST/IremM62 Hardware/meta/Battle Road.mra
Normal file
@ -0,0 +1,138 @@
|
||||
<misterromdescription>
|
||||
<name>Battle Road</name>
|
||||
<mameversion>0216</mameversion>
|
||||
<setname>battroad</setname>
|
||||
<manufacturer>Irem</manufacturer>
|
||||
<rbf>iremm62</rbf>
|
||||
<rom index="1"><part>5</part></rom>
|
||||
<rom index="0" zip="battroad.zip" md5="e4dd9d396dd574a11189c2183cf4cead" type="merged|nonmerged">
|
||||
<!-- CPU1, 128k -->
|
||||
<part name="br-a-4e.b"/>
|
||||
<part name="br-a-4d.b"/>
|
||||
<part name="br-a-4b.b"/>
|
||||
<part name="br-a-4a"/>
|
||||
<part repeat="0x8000">FF</part>
|
||||
|
||||
<part name="br-c-7c"/>
|
||||
<part name="br-c-7l"/>
|
||||
<part name="br-c-7d"/>
|
||||
<part name="br-c-7b"/>
|
||||
<part name="br-c-7a"/>
|
||||
<part name="br-c-7k"/>
|
||||
<part name="br-c-7k"/>
|
||||
<part repeat="0x2000">FF</part>
|
||||
|
||||
<!-- SND CPU2, 64k -->
|
||||
<part repeat="0xa000">FF</part>
|
||||
<part name="br-a-3e"/>
|
||||
<part name="br-a-3f"/>
|
||||
<part name="br-a-3h"/>
|
||||
|
||||
<!-- GFX1, 128k -->
|
||||
<group width="32">
|
||||
<part name="br-c-6h"/>
|
||||
<part name="br-c-6n"/>
|
||||
<part name="br-c-6k"/>
|
||||
<part name="br-c-6k"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-c-6h"/>
|
||||
<part name="br-c-6n"/>
|
||||
<part name="br-c-6k"/>
|
||||
<part name="br-c-6k"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-c-6h"/>
|
||||
<part name="br-c-6n"/>
|
||||
<part name="br-c-6k"/>
|
||||
<part name="br-c-6k"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-c-6h"/>
|
||||
<part name="br-c-6n"/>
|
||||
<part name="br-c-6k"/>
|
||||
<part name="br-c-6k"/>
|
||||
</group>
|
||||
|
||||
<!-- GFX2, 256k -->
|
||||
<group width="32">
|
||||
<part name="br-b-4k.a"/>
|
||||
<part name="br-b-3n.a"/>
|
||||
<part name="br-b-4c.a"/>
|
||||
<part name="br-b-4c.a"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-b-4f.a"/>
|
||||
<part name="br-b-4n.a"/>
|
||||
<part name="br-b-4e.a"/>
|
||||
<part name="br-b-4e.a"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-b-4k.a"/>
|
||||
<part name="br-b-3n.a"/>
|
||||
<part name="br-b-4c.a"/>
|
||||
<part name="br-b-4c.a"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-b-4f.a"/>
|
||||
<part name="br-b-4n.a"/>
|
||||
<part name="br-b-4e.a"/>
|
||||
<part name="br-b-4e.a"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-b-4k.a"/>
|
||||
<part name="br-b-3n.a"/>
|
||||
<part name="br-b-4c.a"/>
|
||||
<part name="br-b-4c.a"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-b-4f.a"/>
|
||||
<part name="br-b-4n.a"/>
|
||||
<part name="br-b-4e.a"/>
|
||||
<part name="br-b-4e.a"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-b-4k.a"/>
|
||||
<part name="br-b-3n.a"/>
|
||||
<part name="br-b-4c.a"/>
|
||||
<part name="br-b-4c.a"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-b-4f.a"/>
|
||||
<part name="br-b-4n.a"/>
|
||||
<part name="br-b-4e.a"/>
|
||||
<part name="br-b-4e.a"/>
|
||||
</group>
|
||||
|
||||
<!-- GFX3, 64k -->
|
||||
<group width="32">
|
||||
<part name="br-c-1b"/>
|
||||
<part name="br-c-1c"/>
|
||||
<part name="br-c-1b"/>
|
||||
<part name="br-c-1c"/>
|
||||
</group>
|
||||
<group width="32">
|
||||
<part name="br-c-1b"/>
|
||||
<part name="br-c-1c"/>
|
||||
<part name="br-c-1b"/>
|
||||
<part name="br-c-1c"/>
|
||||
</group>
|
||||
|
||||
<!-- spr_color_proms, 3*256b -->
|
||||
<part name="br-b-1m"/>
|
||||
<part name="br-b-1n"/>
|
||||
<part name="br-b-1l"/>
|
||||
|
||||
<!-- chr_color_proms, 3*256b -->
|
||||
<part name="br-c-3j"/>
|
||||
<part name="br-c-3l"/>
|
||||
<part name="br-c-3k"/>
|
||||
|
||||
<!-- fg_color_proms, 3*256b br-c-1j -->
|
||||
<part repeat="0x300">FF</part>
|
||||
|
||||
<!-- spr_height_prom -->
|
||||
<part name="br-b-5p"/>
|
||||
|
||||
</rom>
|
||||
</misterromdescription>
|
||||
@ -109,6 +109,11 @@ architecture SYN of platform is
|
||||
signal cram_wr : std_logic;
|
||||
signal cram_d_o : std_logic_vector(7 downto 0);
|
||||
signal sprite_cs : std_logic;
|
||||
|
||||
-- text RAM
|
||||
signal textram_cs : std_logic;
|
||||
signal textram_wr : std_logic;
|
||||
signal textram_d_o : std_logic_vector(7 downto 0);
|
||||
|
||||
-- misc signals
|
||||
signal in_cs : std_logic;
|
||||
@ -134,6 +139,9 @@ architecture SYN of platform is
|
||||
signal ld3_prot5_cs : std_logic;
|
||||
signal ld3_prot7_cs : std_logic;
|
||||
|
||||
-- Kidniki, Battle Road
|
||||
signal kidniki_bank : std_logic_vector(3 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- handle special keys
|
||||
@ -174,15 +182,19 @@ begin
|
||||
-- ROM $0000-$7FFF
|
||||
-- $0000-$9FFF - LDRUN2
|
||||
-- $0000-$BFFF - LDRUN3,4, HORIZON
|
||||
-- $A000-$BFFF - BATTROAD
|
||||
rom_cs <= '1' when STD_MATCH(cpu_a, "0---------------") else
|
||||
'1' when hwsel = HW_LDRUN2 and cpu_a(15 downto 13) = "100" else
|
||||
'1' when (hwsel = HW_LDRUN3 or hwsel = HW_LDRUN4 or hwsel = HW_HORIZON) and cpu_a(15 downto 14) = "10" else
|
||||
'1' when hwsel = HW_BATTROAD and cpu_a(15 downto 13) = "101" else
|
||||
'0';
|
||||
|
||||
-- SPRITE $C000-$C0FF
|
||||
-- $C000-$C1FF - HORIZON
|
||||
sprite_cs <= '1' when cpu_a(15 downto 8) = x"C0" else
|
||||
'1' when cpu_a(15 downto 9) = x"C"&"000" and hwsel = HW_HORIZON else
|
||||
'0';
|
||||
|
||||
-- VRAM/CRAM $D000-$DFFF
|
||||
vram_cs <= '1' when hwsel = HW_KUNGFUM and
|
||||
STD_MATCH(cpu_a, X"D"&"0-----------") else
|
||||
@ -194,6 +206,12 @@ begin
|
||||
'1' when hwsel /= HW_KUNGFUM and
|
||||
STD_MATCH(cpu_a, X"D"&"-----------1") else
|
||||
'0';
|
||||
|
||||
-- Text RAM $C800-$CFFF
|
||||
textram_cs <= '1' when hwsel = HW_BATTROAD and
|
||||
cpu_a(15 downto 11) = x"C"&'1' else
|
||||
'0';
|
||||
|
||||
-- RAM $E000-$EFFF
|
||||
wram_cs <= '1' when STD_MATCH(cpu_a, X"E"&"------------") else '0';
|
||||
|
||||
@ -227,12 +245,14 @@ begin
|
||||
vram_d_o when vram_cs = '1' else
|
||||
cram_d_o when cram_cs = '1' else
|
||||
wram_d_o when wram_cs = '1' else
|
||||
textram_d_o when textram_cs = '1' else
|
||||
(others => '1');
|
||||
|
||||
|
||||
-- memory block write signals
|
||||
vram_wr <= vram_cs and cpu_mem_wr;
|
||||
cram_wr <= cram_cs and cpu_mem_wr;
|
||||
wram_wr <= wram_cs and cpu_mem_wr;
|
||||
textram_wr <= textram_cs and cpu_mem_wr;
|
||||
|
||||
-- sprite registers
|
||||
sprite_reg_o.clk <= clk_sys;
|
||||
@ -290,6 +310,7 @@ begin
|
||||
cpu_rom_addr <=
|
||||
'0' & "10" & ld24_bank & cpu_a(12 downto 0) when hwsel = HW_LDRUN2 and cpu_a(15) = '1' else
|
||||
'0' & '1' & ld24_bank & cpu_a(13 downto 0) when hwsel = HW_LDRUN4 and cpu_a(15) = '1' else
|
||||
'1' & kidniki_bank(2 downto 0) & cpu_a(12 downto 0) when hwsel = HW_BATTROAD and cpu_a(15 downto 13) = "101" else
|
||||
'0' & cpu_a(15 downto 0);
|
||||
|
||||
-- Lode Runner 2 bank switching - some kind of protection, only the level number is used to select bank 0 or 1 at $8000
|
||||
@ -302,11 +323,13 @@ begin
|
||||
ld2_bankr1 <= (others => '0');
|
||||
ld2_bankr2 <= (others => '0');
|
||||
ld24_bank <= '0';
|
||||
kidniki_bank <= (others => '0');
|
||||
elsif rising_edge(clk_sys) then
|
||||
if cpu_clk_en = '1' and cpu_io_wr = '1' then
|
||||
case cpu_a(7 downto 0) is
|
||||
when X"80" => ld2_bankr1 <= cpu_d_o(5 downto 0);
|
||||
when X"81" => ld2_bankr2 <= cpu_d_o;
|
||||
when X"83" => if hwsel = HW_BATTROAD then kidniki_bank <= cpu_d_o(3 downto 0); end if;
|
||||
when others => null;
|
||||
end case;
|
||||
end if;
|
||||
@ -433,16 +456,18 @@ begin
|
||||
end if; -- cpu_wr
|
||||
|
||||
if cpu_clk_en = '1' and cpu_io_wr = '1' then
|
||||
if hwsel = HW_LDRUN3 and cpu_a(7 downto 0) = x"80" then
|
||||
if (hwsel = HW_LDRUN3 or hwsel = HW_BATTROAD) and cpu_a(7 downto 0) = x"80" then
|
||||
m62_vscroll(7 downto 0) <= cpu_d_o;
|
||||
end if;
|
||||
if hwsel = HW_LDRUN3 and cpu_a(7 downto 0) = x"81" then
|
||||
m62_topbottom_mask <= cpu_d_o(0);
|
||||
end if;
|
||||
if hwsel = HW_LDRUN4 and cpu_a(7 downto 0) = x"82" then
|
||||
if (hwsel = HW_LDRUN4 and cpu_a(7 downto 0) = x"82") or
|
||||
(hwsel = HW_BATTROAD and cpu_a(7 downto 0) = x"81") then
|
||||
m62_hscroll(15 downto 8) <= cpu_d_o;
|
||||
end if;
|
||||
if hwsel = HW_LDRUN4 and cpu_a(7 downto 0) = x"83" then
|
||||
if (hwsel = HW_LDRUN4 and cpu_a(7 downto 0) = x"83") or
|
||||
(hwsel = HW_BATTROAD and cpu_a(7 downto 0) = x"82") then
|
||||
m62_hscroll(7 downto 0) <= cpu_d_o;
|
||||
end if;
|
||||
|
||||
@ -581,6 +606,27 @@ begin
|
||||
);
|
||||
tilemap_o(1).attr_d(15 downto 8) <= (others => '0');
|
||||
|
||||
textram_inst : entity work.dpram
|
||||
generic map
|
||||
(
|
||||
init_file => "",
|
||||
widthad_a => 11,
|
||||
widthad_b => 11
|
||||
)
|
||||
port map
|
||||
(
|
||||
clock_b => clk_sys,
|
||||
address_b => cpu_a(10 downto 0),
|
||||
wren_b => textram_wr,
|
||||
data_b => cpu_d_o,
|
||||
q_b => textram_d_o,
|
||||
|
||||
clock_a => clk_video,
|
||||
address_a => (others => '0'),
|
||||
wren_a => '0',
|
||||
data_a => (others => 'X'),
|
||||
q_a => open
|
||||
);
|
||||
end block BLK_VRAM;
|
||||
|
||||
wram_inst : entity work.spram
|
||||
|
||||
@ -93,11 +93,15 @@ begin
|
||||
else
|
||||
ctl_o.tile_a(13) <= '0';
|
||||
end if;
|
||||
ctl_o.tile_a(12 downto 11) <= ctl_i.attr_d(7 downto 6);
|
||||
if hwsel = HW_BATTROAD then
|
||||
ctl_o.tile_a(12 downto 11) <= ctl_i.attr_d(6) & ctl_i.attr_d(4);
|
||||
else
|
||||
ctl_o.tile_a(12 downto 11) <= ctl_i.attr_d(7 downto 6);
|
||||
end if;
|
||||
ctl_o.tile_a(10 downto 3) <= ctl_i.map_d(7 downto 0);
|
||||
ctl_o.tile_a(2 downto 0) <= y(2 downto 0);
|
||||
end if;
|
||||
|
||||
|
||||
-- 3rd stage of pipeline
|
||||
-- - read tile, attribute data from ROM
|
||||
if x(2 downto 0) = "100" then
|
||||
@ -109,7 +113,11 @@ begin
|
||||
|
||||
-- extract R,G,B from colour palette
|
||||
pel := tile_d_r(tile_d_r'left-16) & tile_d_r(tile_d_r'left-8) & tile_d_r(tile_d_r'left);
|
||||
ctl_o.pal_a <= attr_d_r(4 downto 0) & pel;
|
||||
if hwsel = HW_BATTROAD then
|
||||
ctl_o.pal_a <= '0' & attr_d_r(3 downto 0) & pel;
|
||||
else
|
||||
ctl_o.pal_a <= attr_d_r(4 downto 0) & pel;
|
||||
end if;
|
||||
ctl_o.set <= '0'; -- default
|
||||
-- if pel /= "000" then
|
||||
-- pal_rgb(0)(7 downto 5) /= "000" or
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user