diff options
Diffstat (limited to 'src/mame/konami/xmen.cpp')
| -rw-r--r-- | src/mame/konami/xmen.cpp | 68 |
1 files changed, 24 insertions, 44 deletions
diff --git a/src/mame/konami/xmen.cpp b/src/mame/konami/xmen.cpp index 4117f1a0cc4..95565a90810 100644 --- a/src/mame/konami/xmen.cpp +++ b/src/mame/konami/xmen.cpp @@ -151,7 +151,7 @@ protected: virtual void video_start() override ATTR_COLD; private: - std::unique_ptr<bitmap_ind16> m_screen_bitmap[2]; // 0 left screen, 1 right screen + bitmap_ind16 m_screen_bitmap[2]; // 0 left screen, 1 right screen required_shared_ptr_array<uint16_t, 2> m_spriteram; required_shared_ptr_array<uint16_t, 4> m_tilemap; uint16_t *m_k053247_ram; @@ -212,11 +212,8 @@ void xmen6p_state::video_start() { m_k053246->k053247_get_ram(&m_k053247_ram); - m_screen_bitmap[0] = std::make_unique<bitmap_ind16>(64 * 8, 32 * 8); - m_screen_bitmap[1] = std::make_unique<bitmap_ind16>(64 * 8, 32 * 8); - - save_item(NAME(*m_screen_bitmap[0])); - save_item(NAME(*m_screen_bitmap[1])); + m_screen->register_screen_bitmap(m_screen_bitmap[0]); + m_screen->register_screen_bitmap(m_screen_bitmap[1]); } @@ -271,12 +268,12 @@ uint32_t xmen_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, template <uint8_t Which> uint32_t xmen6p_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - for (int y = 0; y < 32 * 8; y++) + for (int y = 0; y < m_screen->height(); y++) { uint16_t *const line_dest = &bitmap.pix(y); - uint16_t const *const line_src = &m_screen_bitmap[Which]->pix(y); + uint16_t const *const line_src = &m_screen_bitmap[Which].pix(y); - for (int x = 12 * 8; x < 52 * 8; x++) + for (int x = 0; x < m_screen->width(); x++) line_dest[x] = line_src[x]; } @@ -289,14 +286,9 @@ void xmen6p_state::screen_vblank(int state) // rising edge if (state) { - rectangle cliprect; - - // const rectangle *visarea = m_screen->visible_area(); - // cliprect = *visarea; - cliprect.set(0, 64 * 8 - 1, 2 * 8, 30 * 8 - 1); - int index = m_screen->frame_number() & 1; - bitmap_ind16 *renderbitmap = m_screen_bitmap[index].get(); + bitmap_ind16 &renderbitmap = m_screen_bitmap[index]; + rectangle cliprect = m_screen->cliprect(); // copy the desired spritelist to the chip memcpy(m_k053247_ram, m_spriteram[index], 0x1000); @@ -340,14 +332,14 @@ void xmen6p_state::screen_vblank(int state) m_screen->priority().fill(0, cliprect); // note the '+1' in the background color!!! - renderbitmap->fill(16 * bg_colorbase + 1, cliprect); - m_k052109->tilemap_draw(*m_screen, *renderbitmap, cliprect, layer[0], 0, 1); - m_k052109->tilemap_draw(*m_screen, *renderbitmap, cliprect, layer[1], 0, 2); - m_k052109->tilemap_draw(*m_screen, *renderbitmap, cliprect, layer[2], 0, 4); + renderbitmap.fill(16 * bg_colorbase + 1, cliprect); + m_k052109->tilemap_draw(*m_screen, renderbitmap, cliprect, layer[0], 0, 1); + m_k052109->tilemap_draw(*m_screen, renderbitmap, cliprect, layer[1], 0, 2); + m_k052109->tilemap_draw(*m_screen, renderbitmap, cliprect, layer[2], 0, 4); /* this isn't supported anymore and it is unsure if still needed; keeping here for reference pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */ - m_k053246->k053247_sprites_draw(*renderbitmap, cliprect); + m_k053246->k053247_sprites_draw(renderbitmap, cliprect); } } @@ -419,7 +411,7 @@ void xmen_state::base_main_map(address_map &map) map(0x10a002, 0x10a003).portr("P1_P3"); map(0x10a004, 0x10a005).portr("EEPROM"); map(0x10a00c, 0x10a00d).r(m_k053246, FUNC(k053247_device::k053246_r)); - map(0x110000, 0x113fff).ram(); // main RAM + map(0x110000, 0x113fff).ram(); map(0x18c000, 0x197fff).rw(m_k052109, FUNC(k052109_device::read), FUNC(k052109_device::write)).umask16(0x00ff); map(0x18fa00, 0x18fa01).w(FUNC(xmen_state::_18fa00_w)); } @@ -658,7 +650,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(xmen_state::scanline) void xmen_state::sound_hardware(machine_config &config) { - Z80(config, m_audiocpu, XTAL(16'000'000) / 2); // verified on PCB + Z80(config, m_audiocpu, 16_MHz_XTAL / 2); // verified on PCB m_audiocpu->set_addrmap(AS_PROGRAM, &xmen_state::sound_map); // sound hardware @@ -666,9 +658,11 @@ void xmen_state::sound_hardware(machine_config &config) K054321(config, "k054321", "speaker"); - YM2151(config, "ymsnd", XTAL(16'000'000) / 4).add_route(0, "speaker", 0.20, 1).add_route(1, "speaker", 0.20, 0); // verified on PCB + ym2151_device &ymsnd(YM2151(config, "ymsnd", 16_MHz_XTAL / 4)); // verified on PCB + ymsnd.add_route(0, "speaker", 0.20, 1); + ymsnd.add_route(1, "speaker", 0.20, 0); - k054539_device &k054539(K054539(config, "k054539", XTAL(18'432'000))); + k054539_device &k054539(K054539(config, "k054539", 18.432_MHz_XTAL)); k054539.add_route(0, "speaker", 1.00, 1); k054539.add_route(1, "speaker", 1.00, 0); } @@ -686,7 +680,7 @@ void xmen_state::bootleg_sound_hardware(machine_config &config) void xmen_state::base(machine_config &config) { // basic machine hardware - M68000(config, m_maincpu, XTAL(16'000'000)); // verified on PCB + M68000(config, m_maincpu, 16_MHz_XTAL); // verified on PCB m_maincpu->set_addrmap(AS_PROGRAM, &xmen_state::main_map); TIMER(config, "scantimer").configure_scanline(FUNC(xmen_state::scanline), "screen", 0, 1); @@ -697,10 +691,7 @@ void xmen_state::base(machine_config &config) // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(59.17); // verified on PCB - m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); - m_screen->set_size(64*8, 32*8); - m_screen->set_visarea(13*8, (64-13)*8-1, 2*8, 30*8-1 ); // correct, same issue of tmnt2 + m_screen->set_raw(24_MHz_XTAL / 4, 384, 0+8, 320-8, 264, 16, 240); // correct, same issue as tmnt2 m_screen->set_screen_update(FUNC(xmen_state::screen_update)); m_screen->set_palette("palette"); @@ -713,7 +704,7 @@ void xmen_state::base(machine_config &config) K053246(config, m_k053246, 0); m_k053246->set_sprite_callback(FUNC(xmen_state::sprite_callback)); - m_k053246->set_config(NORMAL_PLANE_ORDER, 53, -2); + m_k053246->set_config(NORMAL_PLANE_ORDER, -43, -2); m_k053246->set_palette("palette"); K053251(config, m_k053251, 0); @@ -745,22 +736,11 @@ void xmen6p_state::xmen6p(machine_config &config) // video hardware config.set_default_layout(layout_dualhsxs); - // TODO: why doesn't just changing m_screen parameters work? nor config.replace()? - config.device_remove("screen"); - - SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(60); - m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); - m_screen->set_size(64*8, 32*8); - m_screen->set_visarea(12*8, 48*8-1, 2*8, 30*8-1); + m_screen->set_raw(24_MHz_XTAL / 4, 384, 0, 320-32, 264, 16, 240); m_screen->set_screen_update(FUNC(xmen6p_state::screen_update<0>)); - m_screen->set_palette("palette"); screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_RASTER)); - screen2.set_refresh_hz(60); - screen2.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen2.set_size(64*8, 32*8); - screen2.set_visarea(16*8, 52*8-1, 2*8, 30*8-1); + screen2.set_raw(24_MHz_XTAL / 4, 384, 0+32, 320, 264, 16, 240); screen2.set_screen_update(FUNC(xmen6p_state::screen_update<1>)); screen2.screen_vblank().set(FUNC(xmen6p_state::screen_vblank)); screen2.set_palette("palette"); |
