mirror of
https://github.com/holub/mame
synced 2025-05-05 13:54:42 +03:00
firefox.cpp : Cleanups, Add output finders/object finders, Reduce runtime tag lookups
This commit is contained in:
parent
0f8fa8a30d
commit
6d6a23f637
@ -59,7 +59,12 @@ public:
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette"),
|
||||
m_soundlatch(*this, "soundlatch"),
|
||||
m_soundlatch2(*this, "soundlatch2")
|
||||
m_soundlatch2(*this, "soundlatch2"),
|
||||
m_tms(*this, "tms"),
|
||||
m_mainbank(*this, "mainbank"),
|
||||
m_pitch_io(*this, "PITCH"),
|
||||
m_yaw_io(*this, "YAW"),
|
||||
m_leds(*this, "led%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(mainflag_r);
|
||||
@ -80,11 +85,7 @@ protected:
|
||||
DECLARE_WRITE8_MEMBER(tile_palette_w);
|
||||
DECLARE_WRITE8_MEMBER(sprite_palette_w);
|
||||
DECLARE_WRITE8_MEMBER(firefox_objram_bank_w);
|
||||
DECLARE_READ8_MEMBER(sound_to_main_r);
|
||||
DECLARE_WRITE8_MEMBER(main_to_sound_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(sound_reset_w);
|
||||
DECLARE_READ8_MEMBER(main_to_sound_r);
|
||||
DECLARE_WRITE8_MEMBER(sound_to_main_w);
|
||||
DECLARE_READ8_MEMBER(adc_r);
|
||||
DECLARE_WRITE8_MEMBER(adc_select_w);
|
||||
DECLARE_WRITE8_MEMBER(nvram_w);
|
||||
@ -101,7 +102,6 @@ protected:
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
|
||||
DECLARE_READ8_MEMBER(riot_porta_r);
|
||||
DECLARE_WRITE8_MEMBER(riot_porta_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(riot_irq);
|
||||
TILE_GET_INFO_MEMBER(bgtile_get_info);
|
||||
uint32_t screen_update_firefox(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(video_timer_callback);
|
||||
@ -127,6 +127,14 @@ private:
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_device<generic_latch_8_device> m_soundlatch2;
|
||||
required_device<tms5220_device> m_tms;
|
||||
|
||||
required_memory_bank m_mainbank;
|
||||
|
||||
required_ioport m_pitch_io;
|
||||
required_ioport m_yaw_io;
|
||||
|
||||
output_finder<4> m_leds;
|
||||
|
||||
int m_n_disc_lock;
|
||||
int m_n_disc_data;
|
||||
@ -135,8 +143,6 @@ private:
|
||||
x2212_device *m_nvram_1d;
|
||||
tilemap_t *m_bgtiles;
|
||||
int m_control_num;
|
||||
uint8_t m_sound_to_main_flag;
|
||||
uint8_t m_main_to_sound_flag;
|
||||
int m_sprite_bank;
|
||||
};
|
||||
|
||||
@ -330,7 +336,6 @@ WRITE8_MEMBER(firefox_state::firefox_objram_bank_w)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Main <-> sound communication
|
||||
@ -339,47 +344,24 @@ WRITE8_MEMBER(firefox_state::firefox_objram_bank_w)
|
||||
|
||||
CUSTOM_INPUT_MEMBER(firefox_state::mainflag_r)
|
||||
{
|
||||
return m_main_to_sound_flag;
|
||||
return m_soundlatch->pending_r() ? 1 : 0;
|
||||
}
|
||||
|
||||
CUSTOM_INPUT_MEMBER(firefox_state::soundflag_r)
|
||||
{
|
||||
return m_sound_to_main_flag;
|
||||
}
|
||||
|
||||
READ8_MEMBER(firefox_state::sound_to_main_r)
|
||||
{
|
||||
m_sound_to_main_flag = 0;
|
||||
return m_soundlatch2->read(space, 0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::main_to_sound_w)
|
||||
{
|
||||
m_main_to_sound_flag = 1;
|
||||
m_soundlatch->write(space, 0, data);
|
||||
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
return m_soundlatch2->pending_r() ? 1 : 0;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::sound_reset_w)
|
||||
{
|
||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
if (state != 0)
|
||||
m_sound_to_main_flag = m_main_to_sound_flag = 0;
|
||||
{
|
||||
m_soundlatch->reset();
|
||||
m_soundlatch2->reset();
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(firefox_state::main_to_sound_r)
|
||||
{
|
||||
m_main_to_sound_flag = 0;
|
||||
return m_soundlatch->read(space, 0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::sound_to_main_w)
|
||||
{
|
||||
m_sound_to_main_flag = 1;
|
||||
m_soundlatch2->write(space, 0, data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -389,8 +371,6 @@ WRITE8_MEMBER(firefox_state::sound_to_main_w)
|
||||
|
||||
READ8_MEMBER(firefox_state::riot_porta_r)
|
||||
{
|
||||
tms5220_device *tms5220 = machine().device<tms5220_device>("tms");
|
||||
|
||||
/* bit 7 = MAINFLAG */
|
||||
/* bit 6 = SOUNDFLAG */
|
||||
/* bit 5 = PA5 */
|
||||
@ -400,26 +380,18 @@ READ8_MEMBER(firefox_state::riot_porta_r)
|
||||
/* bit 1 = TMS /read */
|
||||
/* bit 0 = TMS /write */
|
||||
|
||||
return (m_main_to_sound_flag << 7) | (m_sound_to_main_flag << 6) | 0x10 | (tms5220->readyq_r() << 2);
|
||||
return (m_soundlatch->pending_r() ? 0x80 : 0x00) | (m_soundlatch2->pending_r() ? 0x40 : 0x00) | 0x10 | (m_tms->readyq_r() << 2);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::riot_porta_w)
|
||||
{
|
||||
tms5220_device *tms5220 = machine().device<tms5220_device>("tms");
|
||||
|
||||
/* handle 5220 read */
|
||||
tms5220->rsq_w((data>>1) & 1);
|
||||
m_tms->rsq_w((data>>1) & 1);
|
||||
|
||||
/* handle 5220 write */
|
||||
tms5220->wsq_w(data & 1);
|
||||
m_tms->wsq_w(data & 1);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::riot_irq)
|
||||
{
|
||||
m_audiocpu->set_input_line(M6502_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -431,10 +403,10 @@ READ8_MEMBER(firefox_state::adc_r)
|
||||
{
|
||||
if( m_control_num == 0 )
|
||||
{
|
||||
return ioport( "PITCH" )->read();
|
||||
return m_pitch_io->read();
|
||||
}
|
||||
|
||||
return ioport( "YAW" )->read();
|
||||
return m_yaw_io->read();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::adc_select_w)
|
||||
@ -443,7 +415,6 @@ WRITE8_MEMBER(firefox_state::adc_select_w)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Non-Volatile RAM (NOVRAM)
|
||||
@ -462,7 +433,6 @@ READ8_MEMBER(firefox_state::nvram_r)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Main cpu
|
||||
@ -471,7 +441,7 @@ READ8_MEMBER(firefox_state::nvram_r)
|
||||
|
||||
WRITE8_MEMBER(firefox_state::rom_bank_w)
|
||||
{
|
||||
membank("bank1")->set_entry(data & 0x1f);
|
||||
m_mainbank->set_entry(data & 0x1f);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::main_irq_clear_w)
|
||||
@ -490,7 +460,6 @@ WRITE8_MEMBER(firefox_state::self_reset_w)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* I/O
|
||||
@ -499,22 +468,22 @@ WRITE8_MEMBER(firefox_state::self_reset_w)
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::led0_w)
|
||||
{
|
||||
output().set_led_value(0, !state);
|
||||
m_leds[0] = !state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::led1_w)
|
||||
{
|
||||
output().set_led_value(1, !state);
|
||||
m_leds[1] = !state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::led2_w)
|
||||
{
|
||||
output().set_led_value(2, !state);
|
||||
m_leds[2] = !state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::led3_w)
|
||||
{
|
||||
output().set_led_value(3, !state);
|
||||
m_leds[3] = !state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::coin_counter_right_w)
|
||||
@ -528,7 +497,6 @@ WRITE_LINE_MEMBER(firefox_state::coin_counter_left_w)
|
||||
}
|
||||
|
||||
|
||||
|
||||
void firefox_state::firq_gen(phillips_22vp931_device &laserdisc, int state)
|
||||
{
|
||||
if (state)
|
||||
@ -538,7 +506,9 @@ void firefox_state::firq_gen(phillips_22vp931_device &laserdisc, int state)
|
||||
|
||||
void firefox_state::machine_start()
|
||||
{
|
||||
membank("bank1")->configure_entries(0, 32, memregion("maincpu")->base() + 0x10000, 0x1000);
|
||||
m_leds.resolve();
|
||||
|
||||
m_mainbank->configure_entries(0, 32, memregion("maincpu")->base() + 0x10000, 0x1000);
|
||||
m_nvram_1c = machine().device<x2212_device>("nvram_1c");
|
||||
m_nvram_1d = machine().device<x2212_device>("nvram_1d");
|
||||
|
||||
@ -563,7 +533,7 @@ void firefox_state::main_map(address_map &map)
|
||||
map(0x2800, 0x2aff).ram().w(this, FUNC(firefox_state::sprite_palette_w)).share("sprite_palette");
|
||||
map(0x2b00, 0x2b00).mirror(0x04ff).w(this, FUNC(firefox_state::firefox_objram_bank_w));
|
||||
map(0x2c00, 0x2eff).ram().w(this, FUNC(firefox_state::tile_palette_w)).share("tile_palette");
|
||||
map(0x3000, 0x3fff).bankr("bank1");
|
||||
map(0x3000, 0x3fff).bankr("mainbank");
|
||||
map(0x4000, 0x40ff).rw(this, FUNC(firefox_state::nvram_r), FUNC(firefox_state::nvram_w)); /* NOVRAM */
|
||||
map(0x4100, 0x4100).mirror(0x00f8).portr("rdin0"); /* RDIN0 */
|
||||
map(0x4101, 0x4101).mirror(0x00f8).portr("rdin1"); /* RDIN1 */
|
||||
@ -571,7 +541,7 @@ void firefox_state::main_map(address_map &map)
|
||||
map(0x4103, 0x4103).mirror(0x00f8).portr("opt0"); /* OPT0 */
|
||||
map(0x4104, 0x4104).mirror(0x00f8).portr("opt1"); /* OPT1 */
|
||||
map(0x4105, 0x4105).mirror(0x00f8).r(this, FUNC(firefox_state::firefox_disc_data_r)); /* DREAD */
|
||||
map(0x4106, 0x4106).mirror(0x00f8).r(this, FUNC(firefox_state::sound_to_main_r)); /* RDSOUND */
|
||||
map(0x4106, 0x4106).mirror(0x00f8).r(m_soundlatch2, FUNC(generic_latch_8_device::read)); /* RDSOUND */
|
||||
map(0x4107, 0x4107).mirror(0x00f8).r(this, FUNC(firefox_state::adc_r)); /* ADC */
|
||||
map(0x4200, 0x4200).mirror(0x0047).w(this, FUNC(firefox_state::main_irq_clear_w)); /* RSTIRQ */
|
||||
map(0x4208, 0x4208).mirror(0x0047).w(this, FUNC(firefox_state::main_firq_clear_w)); /* RSTFIRQ */
|
||||
@ -582,7 +552,7 @@ void firefox_state::main_map(address_map &map)
|
||||
map(0x4280, 0x4287).mirror(0x0040).w("latch0", FUNC(ls259_device::write_d7));
|
||||
map(0x4288, 0x428f).mirror(0x0040).w("latch1", FUNC(ls259_device::write_d7));
|
||||
map(0x4290, 0x4290).mirror(0x0047).w(this, FUNC(firefox_state::rom_bank_w)); /* WRTREG */
|
||||
map(0x4298, 0x4298).mirror(0x0047).w(this, FUNC(firefox_state::main_to_sound_w)); /* WRSOUND */
|
||||
map(0x4298, 0x4298).mirror(0x0047).w(m_soundlatch, FUNC(generic_latch_8_device::write)); /* WRSOUND */
|
||||
map(0x42a0, 0x42a0).mirror(0x0047).w(this, FUNC(firefox_state::firefox_disc_data_w)); /* DSKLATCH */
|
||||
map(0x4400, 0xffff).rom();
|
||||
}
|
||||
@ -600,8 +570,8 @@ void firefox_state::audio_map(address_map &map)
|
||||
map(0x0000, 0x07ff).ram();
|
||||
map(0x0800, 0x087f).mirror(0x0700).ram(); /* RIOT ram */
|
||||
map(0x0880, 0x089f).mirror(0x0760).rw("riot", FUNC(riot6532_device::read), FUNC(riot6532_device::write));
|
||||
map(0x1000, 0x1000).r(this, FUNC(firefox_state::main_to_sound_r));
|
||||
map(0x1800, 0x1800).w(this, FUNC(firefox_state::sound_to_main_w));
|
||||
map(0x1000, 0x1000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
|
||||
map(0x1800, 0x1800).w(m_soundlatch2, FUNC(generic_latch_8_device::write));
|
||||
map(0x2000, 0x200f).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write));
|
||||
map(0x2800, 0x280f).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write));
|
||||
map(0x3000, 0x300f).rw("pokey3", FUNC(pokey_device::read), FUNC(pokey_device::write));
|
||||
@ -789,12 +759,14 @@ MACHINE_CONFIG_START(firefox_state::firefox)
|
||||
MCFG_RIOT6532_OUT_PA_CB(WRITE8(firefox_state, riot_porta_w))
|
||||
MCFG_RIOT6532_IN_PB_CB(DEVREAD8("tms", tms5220_device, status_r))
|
||||
MCFG_RIOT6532_OUT_PB_CB(DEVWRITE8("tms", tms5220_device, data_w))
|
||||
MCFG_RIOT6532_IRQ_CB(WRITELINE(firefox_state, riot_irq))
|
||||
MCFG_RIOT6532_IRQ_CB(INPUTLINE("audiocpu", M6502_IRQ_LINE))
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI))
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
|
||||
|
||||
MCFG_SOUND_ADD("pokey1", POKEY, MASTER_XTAL/8)
|
||||
|
Loading…
Reference in New Issue
Block a user