From 8bfe21f53e5cc2e208615a7f492dec1f0dfb998e Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 8 Mar 2018 13:08:24 -0500 Subject: [PATCH] fm7: Eliminate first_screen; correct dynamic screen reconfiguration; use array finder (nw) --- src/mame/drivers/fm7.cpp | 9 +++------ src/mame/includes/fm7.h | 38 +++++--------------------------------- src/mame/video/fm7.cpp | 10 +++++----- 3 files changed, 13 insertions(+), 44 deletions(-) diff --git a/src/mame/drivers/fm7.cpp b/src/mame/drivers/fm7.cpp index 6541b605404..9a17d4f6bb3 100644 --- a/src/mame/drivers/fm7.cpp +++ b/src/mame/drivers/fm7.cpp @@ -1015,10 +1015,7 @@ READ8_MEMBER(fm7_state::fm7_mmr_r) void fm7_state::fm7_update_bank(address_space & space, int bank, uint8_t physical) { - address_map_bank_device* avbank[16] = { m_avbank1, m_avbank2, m_avbank3, m_avbank4, m_avbank5, m_avbank6, m_avbank7 - , m_avbank8, m_avbank9, m_avbank10, m_avbank11, m_avbank12, m_avbank13, m_avbank14, m_avbank15, m_avbank16 }; - - avbank[bank]->set_bank(physical); + m_avbank[bank]->set_bank(physical); /* uint8_t* RAM = memregion("maincpu")->base(); uint16_t size = 0xfff; char bank_name[10]; @@ -1152,7 +1149,7 @@ void fm7_state::fm7_mmr_refresh(address_space& space) } else { - space.install_readwrite_handler(0x7000,0x7fff,read8_delegate(FUNC(address_map_bank_device::read8),(address_map_bank_device*)m_avbank8),write8_delegate(FUNC(address_map_bank_device::write8),(address_map_bank_device*)m_avbank8)); + space.install_readwrite_handler(0x7000,0x7fff,read8_delegate(FUNC(address_map_bank_device::read8),(address_map_bank_device*)m_avbank[7]),write8_delegate(FUNC(address_map_bank_device::write8),(address_map_bank_device*)m_avbank[7])); } if(m_init_rom_en) { @@ -1964,7 +1961,7 @@ void fm7_state::machine_reset() m_subtimer->adjust(attotime::from_msec(20),0,attotime::from_msec(20)); m_keyboard_timer->adjust(attotime::zero,0,attotime::from_msec(10)); if(m_type == SYS_FM77AV || m_type == SYS_FM77AV40EX || m_type == SYS_FM11) - m_fm77av_vsync_timer->adjust(machine().first_screen()->time_until_vblank_end()); + m_fm77av_vsync_timer->adjust(m_screen->time_until_vblank_end()); m_irq_mask = 0x00; m_irq_flags = 0x00; diff --git a/src/mame/includes/fm7.h b/src/mame/includes/fm7.h index d0902bf8ec0..514895585d3 100644 --- a/src/mame/includes/fm7.h +++ b/src/mame/includes/fm7.h @@ -133,6 +133,7 @@ public: m_beeper(*this, "beeper"), m_ym(*this, "ym"), m_psg(*this, "psg"), + m_screen(*this, "screen"), m_centronics(*this, "centronics"), m_cent_data_out(*this, "cent_data_out"), m_fdc(*this, "fdc"), @@ -143,29 +144,14 @@ public: m_rom_ptr(*this, "init"), m_basic_ptr(*this, "fbasic"), m_kanji(*this, "kanji1"), - m_kb_ports(*this, {"key1", "key2", "key3"}), + m_kb_ports(*this, "key%u", 1), m_keymod(*this, "key_modifiers"), m_joy1(*this, "joy1"), m_joy2(*this, "joy2"), m_dsw(*this, "DSW"), m_palette(*this, "palette"), m_av_palette(*this, "av_palette"), - m_avbank1(*this, "av_bank1"), - m_avbank2(*this, "av_bank2"), - m_avbank3(*this, "av_bank3"), - m_avbank4(*this, "av_bank4"), - m_avbank5(*this, "av_bank5"), - m_avbank6(*this, "av_bank6"), - m_avbank7(*this, "av_bank7"), - m_avbank8(*this, "av_bank8"), - m_avbank9(*this, "av_bank9"), - m_avbank10(*this, "av_bank10"), - m_avbank11(*this, "av_bank11"), - m_avbank12(*this, "av_bank12"), - m_avbank13(*this, "av_bank13"), - m_avbank14(*this, "av_bank14"), - m_avbank15(*this, "av_bank15"), - m_avbank16(*this, "av_bank16") + m_avbank(*this, "av_bank%u", 1) { } DECLARE_DRIVER_INIT(fm7); @@ -359,6 +345,7 @@ protected: required_device m_beeper; optional_device m_ym; optional_device m_psg; + required_device m_screen; required_device m_centronics; required_device m_cent_data_out; @@ -406,22 +393,7 @@ protected: required_device m_palette; optional_device m_av_palette; - optional_device m_avbank1; - optional_device m_avbank2; - optional_device m_avbank3; - optional_device m_avbank4; - optional_device m_avbank5; - optional_device m_avbank6; - optional_device m_avbank7; - optional_device m_avbank8; - optional_device m_avbank9; - optional_device m_avbank10; - optional_device m_avbank11; - optional_device m_avbank12; - optional_device m_avbank13; - optional_device m_avbank14; - optional_device m_avbank15; - optional_device m_avbank16; + optional_device_array m_avbank; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/video/fm7.cpp b/src/mame/video/fm7.cpp index 1fb805781ce..234747a4ef8 100644 --- a/src/mame/video/fm7.cpp +++ b/src/mame/video/fm7.cpp @@ -978,7 +978,7 @@ READ8_MEMBER(fm7_state::fm77av_video_flags_r) { uint8_t ret = 0xff; - if(machine().first_screen()->vblank()) + if(m_screen->vblank()) ret &= ~0x80; if(m_alu.busy != 0) @@ -1019,7 +1019,7 @@ READ8_MEMBER(fm7_state::fm77av_sub_modestatus_r) ret |= 0xbc; ret |= (m_video.modestatus & 0x40); - if(!machine().first_screen()->vblank()) + if(!m_screen->vblank()) ret |= 0x02; if(m_video.vsync_flag != 0) @@ -1034,12 +1034,12 @@ WRITE8_MEMBER(fm7_state::fm77av_sub_modestatus_w) if(data & 0x40) { rectangle rect(0, 320-1, 0, 200-1); - machine().first_screen()->configure(320,200,rect,HZ_TO_ATTOSECONDS(60)); + m_screen->configure(512, 262, rect, m_screen->frame_period().as_attoseconds()); } else { rectangle rect(0, 640-1, 0, 200-1); - machine().first_screen()->configure(640,200,rect,HZ_TO_ATTOSECONDS(60)); + m_screen->configure(1024, 262, rect, m_screen->frame_period().as_attoseconds()); } } @@ -1269,7 +1269,7 @@ TIMER_CALLBACK_MEMBER(fm7_state::fm77av_vsync) else { m_video.vsync_flag = 0; - m_fm77av_vsync_timer->adjust(machine().first_screen()->time_until_vblank_end()); + m_fm77av_vsync_timer->adjust(m_screen->time_until_vblank_end()); } }