From 576482abe0fd2320f8a19f04be538e4841136a14 Mon Sep 17 00:00:00 2001 From: cam900 Date: Thu, 25 Jul 2019 21:14:51 +0900 Subject: vamphalf.cpp : Updates Make don't change screen size / fps when flipscreen state is changed, Make sprite drawing routine related to cliprect, Reduce duplicates, Unnecessary lines, Simplify handlers, Fix spacings, Add notes --- src/mame/drivers/vamphalf.cpp | 422 ++++++++++++++++++++---------------------- 1 file 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 m_maincpu; - optional_shared_ptr m_wram; - optional_shared_ptr m_wram32; + optional_shared_ptr m_wram; + optional_shared_ptr 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 m_palette; @@ -169,20 +170,19 @@ protected: private: required_device m_gfxdecode; - optional_shared_ptr m_tiles; - optional_shared_ptr m_tiles32; + optional_shared_ptr 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 m_nvram; - uint16_t m_finalgdr_backupram_bank; - std::unique_ptr 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 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(0x80*0x100); + m_finalgdr_backupram = std::make_unique(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(0x80*0x100); + m_finalgdr_backupram = std::make_unique(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; } -- cgit v1.2.3