summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/metlfrzr.cpp
diff options
context:
space:
mode:
author angelosa <salese_corp_ltd@email.it>2016-05-19 20:24:48 +0200
committer angelosa <salese_corp_ltd@email.it>2016-05-19 20:24:48 +0200
commit732eef6e0ec14155b2b24bc8e91ff4acd70a6db9 (patch)
tree641340445bf8dd4725a2bce64597c8b2a7558466 /src/mame/drivers/metlfrzr.cpp
parent0199433d449937a5045c9eae9c7a03022aa0635a (diff)
Added base sprites. Also added STEP2_INV / STEP4_INV, nw
Diffstat (limited to 'src/mame/drivers/metlfrzr.cpp')
-rw-r--r--src/mame/drivers/metlfrzr.cpp71
1 files changed, 46 insertions, 25 deletions
diff --git a/src/mame/drivers/metlfrzr.cpp b/src/mame/drivers/metlfrzr.cpp
index 414a0970f76..863f5e3db19 100644
--- a/src/mame/drivers/metlfrzr.cpp
+++ b/src/mame/drivers/metlfrzr.cpp
@@ -28,6 +28,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_decrypted_opcodes(*this, "decrypted_opcodes"),
+ m_work_ram(*this, "wram"),
m_vram(*this, "vram"),
m_palette(*this, "palette"),
m_gfxdecode(*this, "gfxdecode")
@@ -36,10 +37,13 @@ public:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
- void legacy_fg_draw(bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void legacy_bg_draw(bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void legacy_obj_draw(bitmap_ind16 &bitmap, const rectangle &cliprect);
+
UINT32 screen_update_metlfrzr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
required_shared_ptr<UINT8> m_decrypted_opcodes;
+ required_shared_ptr<UINT8> m_work_ram;
required_shared_ptr<UINT8> m_vram;
required_device<palette_device> m_palette;
required_device<gfxdecode_device> m_gfxdecode;
@@ -55,9 +59,9 @@ void metlfrzr_state::video_start()
{
}
-void metlfrzr_state::legacy_fg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
+void metlfrzr_state::legacy_bg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
{
- gfx_element *gfx_0 = m_gfxdecode->gfx(m_fg_tilebank);
+ gfx_element *gfx = m_gfxdecode->gfx(m_fg_tilebank);
int count;
for (count=0;count<32*32;count++)
@@ -68,28 +72,48 @@ void metlfrzr_state::legacy_fg_draw(bitmap_ind16 &bitmap,const rectangle &clipre
UINT16 tile = m_vram[count*2+0] + ((m_vram[count*2+1] & 0xf0) << 4);
UINT8 color = m_vram[count*2+1] & 0xf;
- gfx_0->transpen(bitmap,cliprect,tile,color,0,0,x*8,y*8,0xf);
+ gfx->transpen(bitmap,cliprect,tile,color,0,0,x*8,y*8,0xf);
}
}
+void metlfrzr_state::legacy_obj_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
+{
+ gfx_element *gfx = m_gfxdecode->gfx(3);
+ int count;
+ UINT8 *base_spriteram = m_work_ram + 0xe00;
+
+ for(count=0;count<0x200;count+=4)
+ {
+ UINT8 tile_bank = 0;//base_spriteram[count+1] & 3;
+ UINT16 tile = base_spriteram[count] | (tile_bank << 8);
+ UINT8 color = base_spriteram[count+1] & 0xf;
+ int y = base_spriteram[count+2];
+ int x = base_spriteram[count+3];
+
+ gfx->transpen(bitmap,cliprect,tile,color,0,0,x,y,0xf);
+ }
+}
+
UINT32 metlfrzr_state::screen_update_metlfrzr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->black_pen(), cliprect);
- legacy_fg_draw(bitmap,cliprect);
+ legacy_bg_draw(bitmap,cliprect);
+ legacy_obj_draw(bitmap,cliprect);
return 0;
}
WRITE8_MEMBER(metlfrzr_state::output_w)
{
// bit 7: flip screen
+ // bit 5: on title screen after coin is inserted
// bit 1-0: unknown purpose, both 1s too generally
m_fg_tilebank = (data & 0x10) >> 4;
membank("bank1")->set_entry((data & 0xc) >> 2);
popmessage("%02x",data & 3);
- if(data & 0x63)
+ if(data & 0x60)
printf("%02x\n",data);
}
@@ -234,44 +258,41 @@ void metlfrzr_state::machine_reset()
}
-static const gfx_layout tiles8x8_layout =
+static const gfx_layout tile_layout =
{
8,8,
RGN_FRAC(1,1),
4,
- { 0, 4, 8, 12 },
- { 19, 18,17,16,3,2,1,0 },
-// { 19, 18, 17, 16, 3, 2, 1, 0 }, // maybe display is flipped?
-// { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
- { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
+ { STEP4(0,4) },
+ { STEP4_INV(16,1), STEP4_INV(0,1) },
+ { STEP8(0,32) },
32*8
};
-static const gfx_layout tiles16x16_layout =
+static const gfx_layout sprite_layout =
{
16, 16,
- RGN_FRAC(1, 1),
- 4,
- { 0, 4, 8, 12 },
- // { 0, 1, 2, 3, 16, 17, 18, 19, 64*8+0, 64*8+1, 64*8+2, 64*8+3, 64*8+16, 64*8+17, 64*8+18, 64*8+19 },
- { 64 * 8 + 19, 64 * 8 + 18, 64 * 8 + 17, 64 * 8 + 16, 64 * 8 + 3, 64 * 8 + 2, 64 * 8 + 1, 64 * 8 + 0, 19, 18, 17, 16, 3, 2, 1, 0 },
- // { 0*32,1*32,2*32,3*32,4*32,5*32,6*32,7*32, 8*32, 9*32, 10*32, 11*32, 12*32, 13*32, 14*32, 15*32 },
- { 15 * 32,14 * 32,13 * 32,12 * 32,11 * 32,10 * 32,9 * 32,8 * 32, 7 * 32, 6 * 32, 5 * 32, 4 * 32, 3 * 32, 2 * 32, 1 * 32, 0 * 32 },
- 128 * 8
+ RGN_FRAC(1, 1),
+ 4,
+ { STEP4(0,4) },
+ { STEP4(0,1), STEP4(16,1), STEP4(64*8,1), STEP4(64*8+16,1) },
+ { STEP16(0,32) },
+ 128 * 8
};
static GFXDECODE_START(metlfrzr)
- GFXDECODE_ENTRY("gfx1", 0, tiles8x8_layout, 0x100, 16)
- GFXDECODE_ENTRY("gfx2", 0, tiles8x8_layout, 0x100, 16)
- GFXDECODE_ENTRY("gfx3", 0, tiles16x16_layout, 0, 16)
- GFXDECODE_ENTRY("gfx4", 0, tiles16x16_layout, 0, 16)
+ GFXDECODE_ENTRY("gfx1", 0, tile_layout, 0x100, 16)
+ GFXDECODE_ENTRY("gfx2", 0, tile_layout, 0x100, 16)
+ GFXDECODE_ENTRY("gfx3", 0, sprite_layout, 0, 16)
+ GFXDECODE_ENTRY("gfx4", 0, sprite_layout, 0, 16)
GFXDECODE_END
TIMER_DEVICE_CALLBACK_MEMBER(metlfrzr_state::scanline)
{
int scanline = param;
+
if(scanline == 240) // vblank-out irq
m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0x10); /* RST 10h */