fm7: Eliminate first_screen; correct dynamic screen reconfiguration; use array finder (nw)

This commit is contained in:
AJR 2018-03-08 13:08:24 -05:00
parent ccef347861
commit 8bfe21f53e
3 changed files with 13 additions and 44 deletions

View File

@ -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;

View File

@ -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<beep_device> m_beeper;
optional_device<ym2203_device> m_ym;
optional_device<ay8910_device> m_psg;
required_device<screen_device> m_screen;
required_device<centronics_device> m_centronics;
required_device<output_latch_device> m_cent_data_out;
@ -406,22 +393,7 @@ protected:
required_device<palette_device> m_palette;
optional_device<palette_device> m_av_palette;
optional_device<address_map_bank_device> m_avbank1;
optional_device<address_map_bank_device> m_avbank2;
optional_device<address_map_bank_device> m_avbank3;
optional_device<address_map_bank_device> m_avbank4;
optional_device<address_map_bank_device> m_avbank5;
optional_device<address_map_bank_device> m_avbank6;
optional_device<address_map_bank_device> m_avbank7;
optional_device<address_map_bank_device> m_avbank8;
optional_device<address_map_bank_device> m_avbank9;
optional_device<address_map_bank_device> m_avbank10;
optional_device<address_map_bank_device> m_avbank11;
optional_device<address_map_bank_device> m_avbank12;
optional_device<address_map_bank_device> m_avbank13;
optional_device<address_map_bank_device> m_avbank14;
optional_device<address_map_bank_device> m_avbank15;
optional_device<address_map_bank_device> m_avbank16;
optional_device_array<address_map_bank_device, 16> m_avbank;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
};

View File

@ -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());
}
}