summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/vamphalf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/vamphalf.cpp')
-rw-r--r--src/mame/drivers/vamphalf.cpp422
1 files changed, 200 insertions, 222 deletions
diff --git a/src/mame/drivers/vamphalf.cpp b/src/mame/drivers/vamphalf.cpp
index 14f0ac8753e..f7c09126065 100644
--- a/src/mame/drivers/vamphalf.cpp
+++ b/src/mame/drivers/vamphalf.cpp
@@ -85,11 +85,10 @@ public:
, m_soundlatch(*this, "soundlatch")
, m_eeprom(*this, "eeprom")
, m_gfxdecode(*this, "gfxdecode")
- , m_tiles(*this,"tiles")
- , m_tiles32(*this,"tiles32")
+ , m_tiles(*this,"tiles", 0U)
, m_okiregion(*this, "oki%u", 1)
, m_photosensors(*this, "PHOTO_SENSORS")
- , m_has_extra_gfx(0)
+ , m_has_extra_gfx(false)
{
}
@@ -133,12 +132,14 @@ public:
DECLARE_CUSTOM_INPUT_MEMBER(boonggab_photo_sensors_r);
- DECLARE_READ16_MEMBER(eeprom_r);
- DECLARE_READ32_MEMBER(eeprom32_r);
- DECLARE_WRITE16_MEMBER(eeprom_w);
- DECLARE_WRITE32_MEMBER(eeprom32_w);
- DECLARE_WRITE16_MEMBER(flipscreen_w);
- DECLARE_WRITE32_MEMBER(flipscreen32_w);
+ u16 eeprom_r(offs_t offset);
+ u32 eeprom32_r();
+ void eeprom_w(offs_t offset, u16 data);
+ void eeprom32_w(u32 data);
+ void flipscreen_w(offs_t offset, u16 data);
+ void flipscreen32_w(u32 data);
+ u16 vram_r(offs_t offset) { return m_tiles[offset]; }
+ void vram_w(offs_t offset, u16 data, u16 mem_mask = ~0) { COMBINE_DATA(&m_tiles[offset]); }
void banked_oki(int chip);
@@ -148,18 +149,18 @@ public:
protected:
virtual void video_start() override;
- int m_flip_bit;
- int m_palshift;
+ u32 m_flip_bit;
+ u8 m_palshift;
required_device<cpu_device> m_maincpu;
- optional_shared_ptr<uint16_t> m_wram;
- optional_shared_ptr<uint32_t> m_wram32;
+ optional_shared_ptr<u16> m_wram;
+ optional_shared_ptr<u32> m_wram32;
- uint16_t m_semicom_prot_data[2];
+ u16 m_semicom_prot_data[2];
int m_semicom_prot_idx;
int m_semicom_prot_which;
- int irq_active();
+ bool irq_active();
optional_memory_bank m_okibank;
required_device<palette_device> m_palette;
@@ -169,20 +170,19 @@ protected:
private:
required_device<gfxdecode_device> m_gfxdecode;
- optional_shared_ptr<uint16_t> m_tiles;
- optional_shared_ptr<uint32_t> m_tiles32;
+ optional_shared_ptr<u16> m_tiles;
optional_memory_region_array<2> m_okiregion;
optional_ioport m_photosensors;
// driver init configuration
- int m_has_extra_gfx;
- int m_flipscreen;
+ bool m_has_extra_gfx;
+ bool m_flipscreen;
- DECLARE_WRITE16_MEMBER(jmpbreak_flipscreen_w);
- DECLARE_WRITE16_MEMBER(boonggab_prize_w);
- DECLARE_WRITE16_MEMBER(boonggab_lamps_w);
+ void jmpbreak_flipscreen_w(u16 data);
+ void boonggab_prize_w(offs_t offset, u16 data);
+ void boonggab_lamps_w(offs_t offset, u16 data);
DECLARE_READ16_MEMBER(vamphalf_speedup_r);
DECLARE_READ16_MEMBER(vamphalfr1_speedup_r);
@@ -207,15 +207,15 @@ private:
DECLARE_READ16_MEMBER(toyland_speedup_r);
DECLARE_READ16_MEMBER(boonggab_speedup_r);
- DECLARE_WRITE32_MEMBER(aoh_oki_bank_w);
- DECLARE_WRITE16_MEMBER(boonggab_oki_bank_w);
- DECLARE_WRITE16_MEMBER(mrkicker_oki_bank_w);
- DECLARE_WRITE8_MEMBER(qs1000_p3_w);
+ void aoh_oki_bank_w(u32 data);
+ void boonggab_oki_bank_w(offs_t offset, u16 data);
+ void mrkicker_oki_bank_w(u16 data);
+ void qs1000_p3_w(u8 data);
- uint32_t screen_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_aoh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap);
- void draw_sprites_aoh(screen_device &screen, bitmap_ind16 &bitmap);
+ u32 screen_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update_aoh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void draw_sprites_aoh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void handle_flipped_visible_area(screen_device &screen);
void aoh_io(address_map &map);
void aoh_map(address_map &map);
@@ -256,8 +256,8 @@ private:
DECLARE_READ32_MEMBER(wyvernwg_speedup_r);
DECLARE_READ32_MEMBER(wyvernwga_speedup_r);
- DECLARE_READ32_MEMBER(wyvernwg_prot_r);
- DECLARE_WRITE32_MEMBER(wyvernwg_prot_w);
+ u32 wyvernwg_prot_r();
+ void wyvernwg_prot_w(u32 data);
void yorijori_32bit_map(address_map &map);
void yorijori_io(address_map &map);
@@ -287,40 +287,40 @@ private:
required_device<nvram_device> m_nvram;
- uint16_t m_finalgdr_backupram_bank;
- std::unique_ptr<uint8_t[]> m_finalgdr_backupram;
- DECLARE_WRITE32_MEMBER(finalgdr_backupram_bank_w);
- DECLARE_READ32_MEMBER(finalgdr_backupram_r);
- DECLARE_WRITE32_MEMBER(finalgdr_backupram_w);
+ u16 m_finalgdr_backupram_bank;
+ std::unique_ptr<u8[]> m_finalgdr_backupram;
+ void finalgdr_backupram_bank_w(u32 data);
+ u32 finalgdr_backupram_r(offs_t offset);
+ void finalgdr_backupram_w(offs_t offset, u32 data);
- DECLARE_READ32_MEMBER(finalgdr_prot_r);
- DECLARE_WRITE32_MEMBER(finalgdr_prot_w);
+ u32 finalgdr_prot_r();
+ void finalgdr_prot_w(u32 data);
DECLARE_READ32_MEMBER(finalgdr_speedup_r);
DECLARE_READ32_MEMBER(mrkickera_speedup_r);
- DECLARE_WRITE32_MEMBER(finalgdr_prize_w);
- DECLARE_WRITE32_MEMBER(finalgdr_oki_bank_w);
+ void finalgdr_prize_w(u32 data);
+ void finalgdr_oki_bank_w(u32 data);
- DECLARE_WRITE32_MEMBER(finalgdr_eeprom_w);
+ void finalgdr_eeprom_w(u32 data);
};
-READ16_MEMBER(vamphalf_state::eeprom_r)
+u16 vamphalf_state::eeprom_r(offs_t offset)
{
- if(offset)
+ if (offset)
return m_eeprom->do_read();
else
return 0;
}
-READ32_MEMBER(vamphalf_state::eeprom32_r)
+u32 vamphalf_state::eeprom32_r()
{
return m_eeprom->do_read();
}
-WRITE16_MEMBER(vamphalf_state::eeprom_w)
+void vamphalf_state::eeprom_w(offs_t offset, u16 data)
{
- if(offset)
+ if (offset)
{
m_eeprom->di_write(data & 0x01);
m_eeprom->cs_write((data & 0x04) ? ASSERT_LINE : CLEAR_LINE );
@@ -330,59 +330,60 @@ WRITE16_MEMBER(vamphalf_state::eeprom_w)
}
}
-WRITE32_MEMBER(vamphalf_state::eeprom32_w)
+void vamphalf_state::eeprom32_w(u32 data)
{
m_eeprom->di_write(data & 0x01);
m_eeprom->cs_write((data & 0x04) ? ASSERT_LINE : CLEAR_LINE );
m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE );
}
-WRITE32_MEMBER(vamphalf_nvram_state::finalgdr_eeprom_w)
+void vamphalf_nvram_state::finalgdr_eeprom_w(u32 data)
{
m_eeprom->di_write((data & 0x4000) >> 14);
m_eeprom->cs_write((data & 0x1000) ? ASSERT_LINE : CLEAR_LINE );
m_eeprom->clk_write((data & 0x2000) ? ASSERT_LINE : CLEAR_LINE );
}
-WRITE16_MEMBER(vamphalf_state::flipscreen_w)
+void vamphalf_state::flipscreen_w(offs_t offset, u16 data)
{
- if(offset)
+ if (offset)
{
m_flipscreen = data & m_flip_bit;
}
}
-WRITE32_MEMBER(vamphalf_state::flipscreen32_w)
+void vamphalf_state::flipscreen32_w(u32 data)
{
m_flipscreen = data & m_flip_bit;
}
-WRITE16_MEMBER(vamphalf_state::jmpbreak_flipscreen_w)
+void vamphalf_state::jmpbreak_flipscreen_w(u16 data)
{
m_flipscreen = data & 0x8000;
}
-
-READ32_MEMBER(vamphalf_qdsp_state::wyvernwg_prot_r)
+u32 vamphalf_qdsp_state::wyvernwg_prot_r()
{
- m_semicom_prot_idx--;
+ if (!machine().side_effects_disabled())
+ m_semicom_prot_idx--;
return (m_semicom_prot_data[m_semicom_prot_which] & (1 << m_semicom_prot_idx)) >> m_semicom_prot_idx;
}
-WRITE32_MEMBER(vamphalf_qdsp_state::wyvernwg_prot_w)
+void vamphalf_qdsp_state::wyvernwg_prot_w(u32 data)
{
m_semicom_prot_which = data & 1;
m_semicom_prot_idx = 8;
}
-READ32_MEMBER(vamphalf_nvram_state::finalgdr_prot_r)
+u32 vamphalf_nvram_state::finalgdr_prot_r()
{
- m_semicom_prot_idx--;
+ if (!machine().side_effects_disabled())
+ m_semicom_prot_idx--;
return (m_semicom_prot_data[m_semicom_prot_which] & (1 << m_semicom_prot_idx)) ? 0x8000 : 0;
}
-WRITE32_MEMBER(vamphalf_nvram_state::finalgdr_prot_w)
+void vamphalf_nvram_state::finalgdr_prot_w(u32 data)
{
/*
41C6
@@ -390,72 +391,72 @@ WRITE32_MEMBER(vamphalf_nvram_state::finalgdr_prot_w)
446B
F94B
*/
- if(data == 0x41c6 || data == 0x446b)
+ if (data == 0x41c6 || data == 0x446b)
m_semicom_prot_which = 0;
else
- m_semicom_prot_which = 1;
+ m_semicom_prot_which = 1;
m_semicom_prot_idx = 8;
}
-WRITE32_MEMBER(vamphalf_nvram_state::finalgdr_oki_bank_w)
+void vamphalf_nvram_state::finalgdr_oki_bank_w(u32 data)
{
m_okibank->set_entry((data & 0x300) >> 8);
}
-WRITE32_MEMBER(vamphalf_nvram_state::finalgdr_backupram_bank_w)
+void vamphalf_nvram_state::finalgdr_backupram_bank_w(u32 data)
{
m_finalgdr_backupram_bank = (data & 0xff000000) >> 24;
}
-READ32_MEMBER(vamphalf_nvram_state::finalgdr_backupram_r)
+u32 vamphalf_nvram_state::finalgdr_backupram_r(offs_t offset)
{
return m_finalgdr_backupram[offset + m_finalgdr_backupram_bank * 0x80] << 24;
}
-WRITE32_MEMBER(vamphalf_nvram_state::finalgdr_backupram_w)
+void vamphalf_nvram_state::finalgdr_backupram_w(offs_t offset, u32 data)
{
m_finalgdr_backupram[offset + m_finalgdr_backupram_bank * 0x80] = data >> 24;
}
-WRITE32_MEMBER(vamphalf_nvram_state::finalgdr_prize_w)
+void vamphalf_nvram_state::finalgdr_prize_w(u32 data)
{
- if(data & 0x1000000)
+ if (data & 0x1000000)
{
// prize 1
}
- if(data & 0x2000000)
+ if (data & 0x2000000)
{
// prize 2
}
- if(data & 0x4000000)
+ if (data & 0x4000000)
{
// prize 3
}
}
-WRITE32_MEMBER(vamphalf_state::aoh_oki_bank_w)
+void vamphalf_state::aoh_oki_bank_w(u32 data)
{
m_okibank->set_entry(data & 0x3);
}
-WRITE16_MEMBER(vamphalf_state::boonggab_oki_bank_w)
+void vamphalf_state::boonggab_oki_bank_w(offs_t offset, u16 data)
{
- if(offset)
+ if (offset)
m_okibank->set_entry(data & 0x7);
}
-WRITE16_MEMBER(vamphalf_state::mrkicker_oki_bank_w)
+void vamphalf_state::mrkicker_oki_bank_w(u16 data)
{
m_okibank->set_entry(data & 0x3);
}
-WRITE16_MEMBER(vamphalf_state::boonggab_prize_w)
+void vamphalf_state::boonggab_prize_w(offs_t offset, u16 data)
{
- if(offset)
+ if (offset)
{
// data & 0x01 == motor 1 on
// data & 0x02 == motor 2 on
@@ -467,9 +468,9 @@ WRITE16_MEMBER(vamphalf_state::boonggab_prize_w)
}
}
-WRITE16_MEMBER(vamphalf_state::boonggab_lamps_w)
+void vamphalf_state::boonggab_lamps_w(offs_t offset, u16 data)
{
- if(offset == 1)
+ if (offset == 1)
{
// data & 0x0001 == lamp 7 on (why is data & 0x8000 set too?)
// data & 0x0002 == lamp 8 on
@@ -479,7 +480,7 @@ WRITE16_MEMBER(vamphalf_state::boonggab_lamps_w)
// data & 0x0020 == lamp 12 on
// data & 0x0040 == lamp 13 on
}
- else if(offset == 3)
+ else if (offset == 3)
{
// data & 0x0100 == lamp 0 on
// data & 0x0200 == lamp 1 on
@@ -492,7 +493,7 @@ WRITE16_MEMBER(vamphalf_state::boonggab_lamps_w)
}
-WRITE8_MEMBER( vamphalf_state::qs1000_p3_w )
+void vamphalf_state::qs1000_p3_w(u8 data)
{
if (!BIT(data, 5))
m_soundlatch->acknowledge_w();
@@ -512,7 +513,7 @@ void vamphalf_state::common_map(address_map &map)
void vamphalf_state::common_32bit_map(address_map &map)
{
map(0x00000000, 0x001fffff).ram().share("wram32");
- map(0x40000000, 0x4003ffff).ram().share("tiles32");
+ map(0x40000000, 0x4003ffff).rw(FUNC(vamphalf_state::vram_r), FUNC(vamphalf_state::vram_w)).share("tiles");
map(0x80000000, 0x8000ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
map(0xfff00000, 0xffffffff).rom().region("maincpu", 0);
}
@@ -520,7 +521,7 @@ void vamphalf_state::common_32bit_map(address_map &map)
void vamphalf_qdsp_state::yorijori_32bit_map(address_map &map)
{
map(0x00000000, 0x001fffff).ram().share("wram32");
- map(0x40000000, 0x4003ffff).ram().share("tiles32");
+ map(0x40000000, 0x4003ffff).rw(FUNC(vamphalf_state::vram_r), FUNC(vamphalf_state::vram_w)).share("tiles");
map(0x80000000, 0x8000ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
map(0xffe00000, 0xffffffff).rom().region("maincpu", 0);
}
@@ -603,7 +604,7 @@ void vamphalf_nvram_state::finalgdr_io(address_map &map)
map(0x6000, 0x6003).nopr(); //?
map(0x6000, 0x6003).w(FUNC(vamphalf_nvram_state::finalgdr_eeprom_w));
map(0x6040, 0x6043).w(FUNC(vamphalf_nvram_state::finalgdr_prot_w));
- //AM_RANGE(0x6080, 0x6083) AM_WRITE(flipscreen32_w) //?
+ //map(0x6080, 0x6083).w(FUNC(vamphalf_nvram_state::flipscreen32_w)); //?
map(0x6060, 0x6063).w(FUNC(vamphalf_nvram_state::finalgdr_prize_w));
map(0x60a0, 0x60a3).w(FUNC(vamphalf_nvram_state::finalgdr_oki_bank_w));
}
@@ -664,7 +665,7 @@ void vamphalf_state::mrdig_io(address_map &map)
void vamphalf_state::aoh_map(address_map &map)
{
map(0x00000000, 0x003fffff).ram().share("wram32");
- map(0x40000000, 0x4003ffff).ram().share("tiles32");
+ map(0x40000000, 0x4003ffff).rw(FUNC(vamphalf_state::vram_r), FUNC(vamphalf_state::vram_w)).share("tiles");
map(0x80000000, 0x8000ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
map(0x80210000, 0x80210003).portr("SYSTEM");
map(0x80220000, 0x80220003).portr("P1_P2");
@@ -733,78 +734,53 @@ void vamphalf_state::video_start()
save_item(NAME(m_flipscreen));
}
-void vamphalf_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap)
+void vamphalf_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
gfx_element *gfx = m_gfxdecode->gfx(0);
- uint32_t cnt;
- int block, offs;
- int code,color,x,y,fx,fy;
- rectangle clip;
-
- clip.min_x = screen.visible_area().min_x;
- clip.max_x = screen.visible_area().max_x;
+ rectangle clip = cliprect;
+ int block;
- for (block=0; block<0x8000; block+=0x800)
+ for (int y = (cliprect.min_y & ~15); y <= (cliprect.max_y | 15); y += 16)
{
- if(m_flipscreen)
+ clip.min_y = y;
+ clip.max_y = y + 15;
+ if (m_flipscreen)
{
- clip.min_y = 256 - (16-(block/0x800))*16;
- clip.max_y = 256 - ((16-(block/0x800))*16)+15;
+ block = (y / 16) * 0x800;
}
else
{
- clip.min_y = (16-(block/0x800))*16;
- clip.max_y = ((16-(block/0x800))*16)+15;
+ block = (16 - (y / 16)) * 0x800;
}
- if (clip.min_y < screen.visible_area().min_y)
- clip.min_y = screen.visible_area().min_y;
+ if (clip.min_y < cliprect.min_y)
+ clip.min_y = cliprect.min_y;
- if (clip.max_y > screen.visible_area().max_y)
- clip.max_y = screen.visible_area().max_y;
+ if (clip.max_y > cliprect.max_y)
+ clip.max_y = cliprect.max_y;
- for (cnt=0; cnt<0x800; cnt+=8)
+ for (u32 cnt = 0; cnt < 0x800; cnt += 8)
{
- offs = (block + cnt) / 2;
-
- // 16bit version
- if(m_tiles != nullptr)
- {
- if(m_tiles[offs] & 0x0100) continue;
-
- code = m_tiles[offs+1];
- color = (m_tiles[offs+2] >> m_palshift) & 0x7f;
+ const int offs = (block + cnt) / 2;
- // boonggab
- if(m_has_extra_gfx)
- {
- code |= ((m_tiles[offs+2] & 0x100) << 8);
- }
+ if (m_tiles[offs] & 0x0100) continue;
- x = m_tiles[offs+3] & 0x01ff;
- y = 256 - (m_tiles[offs] & 0x00ff);
+ u32 code = m_tiles[offs+1];
+ const u32 color = (m_tiles[offs+2] >> m_palshift) & 0x7f;
- fx = m_tiles[offs] & 0x8000;
- fy = m_tiles[offs] & 0x4000;
- }
- // 32bit version
- else
+ // boonggab
+ if (m_has_extra_gfx)
{
- offs /= 2;
-
- if(m_tiles32[offs] & 0x01000000) continue;
-
- code = m_tiles32[offs] & 0xffff;
- color = ((m_tiles32[offs+1] >> m_palshift) & 0x7f0000) >> 16;
+ code |= ((m_tiles[offs+2] & 0x100) << 8);
+ }
- x = m_tiles32[offs+1] & 0x01ff;
- y = 256 - ((m_tiles32[offs] & 0x00ff0000) >> 16);
+ int x = m_tiles[offs+3] & 0x01ff;
+ int y = 256 - (m_tiles[offs] & 0x00ff);
- fx = m_tiles32[offs] & 0x80000000;
- fy = m_tiles32[offs] & 0x40000000;
- }
+ int fx = m_tiles[offs] & 0x8000;
+ int fy = m_tiles[offs] & 0x4000;
- if(m_flipscreen)
+ if (m_flipscreen)
{
fx = !fx;
fy = !fy;
@@ -818,53 +794,65 @@ void vamphalf_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap)
}
}
-void vamphalf_state::draw_sprites_aoh(screen_device &screen, bitmap_ind16 &bitmap)
+/*
+Sprite list:
+
+Offset+0
+-------- xxxxxxxx Y offs
+------xx -------- Sprite number hi bits
+-----x-- -------- Flip X
+----x--- -------- Flip Y?
+
+Offset+1
+xxxxxxxx xxxxxxxx Sprite number
+
+Offset+2
+-------- -xxxxxxx Color
+or
+-xxxxxxx -------- Color
+
+Offset+3
+-------x xxxxxxxx X offs
+*/
+
+void vamphalf_state::draw_sprites_aoh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
gfx_element *gfx = m_gfxdecode->gfx(0);
- uint32_t cnt;
- int block, offs;
- int code,color,x,y,fx,fy;
- rectangle clip;
+ rectangle clip = cliprect;
+ int block;
- clip.min_x = screen.visible_area().min_x;
- clip.max_x = screen.visible_area().max_x;
-
- for (block=0; block<0x8000; block+=0x800)
+ for (int y = (cliprect.min_y & ~15); y <= (cliprect.max_y | 15); y += 16)
{
- if(m_flipscreen)
+ clip.min_y = y;
+ clip.max_y = y + 15;
+ if (m_flipscreen)
{
- clip.min_y = 256 - (16-(block/0x800))*16;
- clip.max_y = 256 - ((16-(block/0x800))*16)+15;
+ block = (y / 16) * 0x800;
}
else
{
- clip.min_y = (16-(block/0x800))*16;
- clip.max_y = ((16-(block/0x800))*16)+15;
+ block = (16 - (y / 16)) * 0x800;
}
- if (clip.min_y < screen.visible_area().min_y)
- clip.min_y = screen.visible_area().min_y;
-
- if (clip.max_y > screen.visible_area().max_y)
- clip.max_y = screen.visible_area().max_y;
+ if (clip.min_y < cliprect.min_y)
+ clip.min_y = cliprect.min_y;
+ if (clip.max_y > cliprect.max_y)
+ clip.max_y = cliprect.max_y;
- for (cnt=0; cnt<0x800; cnt+=8)
+ for (u32 cnt = 0; cnt < 0x800; cnt += 8)
{
- offs = (block + cnt) / 2;
- {
- offs /= 2;
- code = (m_tiles32[offs] & 0xffff) | ((m_tiles32[offs] & 0x3000000) >> 8);
- color = ((m_tiles32[offs+1] >> m_palshift) & 0x7f0000) >> 16;
+ const int offs = (block + cnt) / 2;
+ const u32 code = (m_tiles[offs+1] & 0xffff) | ((m_tiles[offs] & 0x300) << 8);
+ const u32 color = (m_tiles[offs+2] >> m_palshift) & 0x7f;
- x = m_tiles32[offs+1] & 0x01ff;
- y = 256 - ((m_tiles32[offs] & 0x00ff0000) >> 16);
+ int x = m_tiles[offs+3] & 0x01ff;
+ int y = 256 - (m_tiles[offs] & 0x00ff);
- fx = m_tiles32[offs] & 0x4000000;
- fy = 0; // not used ? or it's m_tiles32[offs] & 0x8000000?
- }
+ int fx = m_tiles[offs] & 0x400;
+ int fy = 0; // not used ? or it's m_tiles[offs] & 0x800?
- if(m_flipscreen)
+ if (m_flipscreen)
{
fx = !fx;
fy = !fy;
@@ -879,44 +867,44 @@ void vamphalf_state::draw_sprites_aoh(screen_device &screen, bitmap_ind16 &bitma
}
-void vamphalf_state::handle_flipped_visible_area( screen_device &screen )
+void vamphalf_state::handle_flipped_visible_area(screen_device &screen)
{
// are there actually registers to handle this?
- if(!m_flipscreen)
+ if (!m_flipscreen)
{
rectangle visarea;
visarea.set(31, 350, 16, 251);
- screen.configure(512, 256, visarea, HZ_TO_ATTOSECONDS(60));
+ screen.configure(screen.width(), screen.height(), visarea, screen.refresh_attoseconds());
}
else
{
rectangle visarea;
visarea.set(31, 350, 20, 255);
- screen.configure(512, 256, visarea, HZ_TO_ATTOSECONDS(60));
+ screen.configure(screen.width(), screen.height(), visarea, screen.refresh_attoseconds());
}
}
-uint32_t vamphalf_state::screen_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 vamphalf_state::screen_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
handle_flipped_visible_area(screen);
bitmap.fill(0, cliprect);
- draw_sprites(screen, bitmap);
+ draw_sprites(screen, bitmap, cliprect);
return 0;
}
-uint32_t vamphalf_state::screen_update_aoh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 vamphalf_state::screen_update_aoh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// handle_flipped_visible_area(screen); // not on this?
bitmap.fill(0, cliprect);
- draw_sprites_aoh(screen, bitmap);
+ draw_sprites_aoh(screen, bitmap, cliprect);
return 0;
}
CUSTOM_INPUT_MEMBER(vamphalf_state::boonggab_photo_sensors_r)
{
- static const uint16_t photo_sensors_table[8] = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
- uint8_t res = m_photosensors->read();
+ static const u16 photo_sensors_table[8] = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+ u8 res = m_photosensors->read();
switch(res)
{
@@ -1009,13 +997,13 @@ INPUT_PORTS_END
static INPUT_PORTS_START( aoh )
PORT_START("P1_P2")
- PORT_BIT( 0x000000001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
- PORT_BIT( 0x000000002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
- PORT_BIT( 0x000000004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
- PORT_BIT( 0x000000008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
- PORT_BIT( 0x000000010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x000000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x000000040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x0000ff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
@@ -1087,19 +1075,8 @@ static INPUT_PORTS_START( boonggab )
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_PLAYER(1)
INPUT_PORTS_END
-static const gfx_layout sprites_layout =
-{
- 16,16,
- RGN_FRAC(1,1),
- 8,
- { STEP8(0,1) },
- { STEP16(0,8) },
- { STEP16(0,8*16) },
- 16*16*8,
-};
-
static GFXDECODE_START( gfx_vamphalf )
- GFXDECODE_ENTRY( "gfx", 0, sprites_layout, 0, 0x80 )
+ GFXDECODE_ENTRY( "gfx", 0, gfx_16x16x8_raw, 0, 0x80 )
GFXDECODE_END
void vamphalf_state::common(machine_config &config)
@@ -1115,6 +1092,7 @@ void vamphalf_state::common(machine_config &config)
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ // 28MHz
screen.set_refresh_hz(59);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(512, 256);
@@ -1214,6 +1192,7 @@ void vamphalf_state::suplup(machine_config &config)
common(config);
m_maincpu->set_addrmap(AS_IO, &vamphalf_state::suplup_io);
+ // 14.31818MHz instead 28MHz
sound_suplup(config);
}
@@ -1293,7 +1272,7 @@ void vamphalf_nvram_state::mrkickera(machine_config &config)
void vamphalf_state::aoh(machine_config &config)
{
- E132XN(config, m_maincpu, XTAL(20'000'000)*4); /* 4x internal multiplier */
+ E132XN(config, m_maincpu, XTAL(20'000'000) * 4); /* 4x internal multiplier */
m_maincpu->set_addrmap(AS_PROGRAM, &vamphalf_state::aoh_map);
m_maincpu->set_addrmap(AS_IO, &vamphalf_state::aoh_io);
m_maincpu->set_vblank_int("screen", FUNC(vamphalf_state::irq1_line_hold));
@@ -1302,6 +1281,7 @@ void vamphalf_state::aoh(machine_config &config)
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ // 32MHz
screen.set_refresh_hz(59.185);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(512, 512);
@@ -1344,6 +1324,7 @@ void vamphalf_qdsp_state::yorijori(machine_config &config)
m_maincpu->set_addrmap(AS_IO, &vamphalf_qdsp_state::yorijori_io);
m_maincpu->set_vblank_int("screen", FUNC(vamphalf_state::irq1_line_hold));
+ // 27MHz instead 28MHz
sound_qs1000(config);
}
@@ -2885,22 +2866,22 @@ ROM_START( boonggab )
ROM_LOAD( "4.vrom2", 0x80000, 0x80000, CRC(305c2b16) SHA1(fa199c4cd4ebb952d934e3863fca8740eeba9294) )
ROM_END
-int vamphalf_state::irq_active()
+bool vamphalf_state::irq_active()
{
- uint32_t FCR = m_maincpu->state_int(E132XS_FCR);
- if( !(FCR&(1<<29)) ) // int 2 (irq 4)
- return 1;
+ const u32 FCR = m_maincpu->state_int(E132XS_FCR);
+ if (!(FCR & (1 << 29))) // int 2 (irq 4)
+ return true;
else
- return 0;
+ return false;
}
void vamphalf_state::banked_oki(int chip)
{
assert((m_okiregion[chip].found()) && (m_okibank.found()));
- uint8_t *ROM = m_okiregion[chip]->base();
- uint32_t size = m_okiregion[chip]->bytes();
+ u8 *ROM = m_okiregion[chip]->base();
+ const u32 size = m_okiregion[chip]->bytes();
if (size > 0x40000)
- m_okibank->configure_entries(0, size/0x20000, &ROM[0], 0x20000);
+ m_okibank->configure_entries(0, size / 0x20000, &ROM[0], 0x20000);
else
m_okibank->set_base(&ROM[0x20000]);
}
@@ -3268,9 +3249,9 @@ READ16_MEMBER(vamphalf_state::toyland_speedup_r)
READ16_MEMBER(vamphalf_state::boonggab_speedup_r)
{
- if(m_maincpu->pc() == 0x131a6)
+ if (m_maincpu->pc() == 0x131a6)
{
- if(irq_active())
+ if (irq_active())
m_maincpu->spin_until_interrupt();
else
m_maincpu->eat_cycles(50);
@@ -3312,7 +3293,7 @@ void vamphalf_qdsp_state::init_misncrft()
// Configure the QS1000 ROM banking. Care must be taken not to overlap the 256b internal RAM
m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, "data");
- membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base()+0x100, 0x8000-0x100);
+ membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100);
}
void vamphalf_state::init_coolmini()
@@ -3395,7 +3376,7 @@ void vamphalf_qdsp_state::init_wyvernwg()
// Configure the QS1000 ROM banking. Care must be taken not to overlap the 256b internal RAM
m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, "data");
- membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base()+0x100, 0x8000-0x100);
+ membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100);
save_item(NAME(m_semicom_prot_idx));
save_item(NAME(m_semicom_prot_which));
@@ -3412,21 +3393,21 @@ void vamphalf_qdsp_state::init_yorijori()
m_semicom_prot_data[0] = 2;
m_semicom_prot_data[1] = 1;
-// uint8_t *romx = (uint8_t *)memregion("maincpu")->base();
+// u8 *romx = (u8 *)memregion("maincpu")->base();
// prevent code dying after a trap 33 by patching it out, why?
// romx[BYTE4_XOR_BE(0x8ff0)] = 3;
// romx[BYTE4_XOR_BE(0x8ff1)] = 0;
// Configure the QS1000 ROM banking. Care must be taken not to overlap the 256b internal RAM
m_qdsp_cpu->space(AS_IO).install_read_bank(0x0100, 0xffff, "data");
- membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base()+0x100, 0x8000-0x100);
+ membank("qs1000:data")->configure_entries(0, 16, memregion("qs1000:cpu")->base() + 0x100, 0x8000-0x100);
}
void vamphalf_nvram_state::init_finalgdr()
{
banked_oki(0);
m_finalgdr_backupram_bank = 1;
- m_finalgdr_backupram = std::make_unique<uint8_t[]>(0x80*0x100);
+ m_finalgdr_backupram = std::make_unique<u8[]>(0x80*0x100);
m_maincpu->space(AS_PROGRAM).install_read_handler(0x005e870, 0x005e873, read32_delegate(FUNC(vamphalf_nvram_state::finalgdr_speedup_r), this));
m_nvram->set_base(m_finalgdr_backupram.get(), 0x80*0x100);
@@ -3448,7 +3429,7 @@ void vamphalf_nvram_state::init_mrkickera()
banked_oki(0);
// backup ram isn't used
m_finalgdr_backupram_bank = 1;
- m_finalgdr_backupram = std::make_unique<uint8_t[]>(0x80*0x100);
+ m_finalgdr_backupram = std::make_unique<u8[]>(0x80*0x100);
m_maincpu->space(AS_PROGRAM).install_read_handler(0x00701a0, 0x00701a3, read32_delegate(FUNC(vamphalf_nvram_state::mrkickera_speedup_r), this));
m_nvram->set_base(m_finalgdr_backupram.get(), 0x80*0x100);
@@ -3501,7 +3482,7 @@ void vamphalf_state::init_aoh()
void vamphalf_state::init_jmpbreak()
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0x00906f4, 0x00906f5, read16_delegate(FUNC(vamphalf_state::jmpbreak_speedup_r), this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0xe0000000, 0xe0000003, write16_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), this));
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0xe0000000, 0xe0000003, write16smo_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), this));
m_palshift = 0;
}
@@ -3509,7 +3490,7 @@ void vamphalf_state::init_jmpbreak()
void vamphalf_state::init_mrdig()
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0x0e0768, 0x0e0769, read16_delegate(FUNC(vamphalf_state::mrdig_speedup_r), this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0xe0000000, 0xe0000003, write16_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), this));
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0xe0000000, 0xe0000003, write16smo_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), this));
m_palshift = 0;
}
@@ -3517,7 +3498,7 @@ void vamphalf_state::init_mrdig()
void vamphalf_state::init_poosho()
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0x0c8b58, 0x0c8b59, read16_delegate(FUNC(vamphalf_state::poosho_speedup_r), this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0xe0000000, 0xe0000003, write16_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), this));
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0xe0000000, 0xe0000003, write16smo_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), this));
m_palshift = 0;
}
@@ -3525,7 +3506,7 @@ void vamphalf_state::init_poosho()
void vamphalf_state::init_newxpang()
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0x061218, 0x061219, read16_delegate(FUNC(vamphalf_state::newxpang_speedup_r), this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0xe0000000, 0xe0000003, write16_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), this));
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0xe0000000, 0xe0000003, write16smo_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), this));
m_palshift = 0;
}
@@ -3533,21 +3514,18 @@ void vamphalf_state::init_newxpang()
void vamphalf_state::init_worldadv()
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0x0c5e78, 0x0c5e79, read16_delegate(FUNC(vamphalf_state::worldadv_speedup_r), this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0xe0000000, 0xe0000003, write16_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), this));
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0xe0000000, 0xe0000003, write16smo_delegate(FUNC(vamphalf_state::jmpbreak_flipscreen_w), this));
m_palshift = 0;
}
-
-
-
void vamphalf_state::init_boonggab()
{
banked_oki(0);
m_maincpu->space(AS_PROGRAM).install_read_handler(0x000f1b74, 0x000f1b75, read16_delegate(FUNC(vamphalf_state::boonggab_speedup_r), this));
m_palshift = 0;
- m_has_extra_gfx = 1;
+ m_has_extra_gfx = true;
m_flip_bit = 1;
}