mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
Replace driver_device::generic_pulse_irq_line with device_execute_interface::pulse_input_line (nw)
This commit is contained in:
parent
eff0a95e89
commit
50637d602b
@ -695,6 +695,48 @@ TIMER_CALLBACK_MEMBER(device_execute_interface::trigger_periodic_interrupt)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// irq_pulse_clear - clear a "pulsed" input line
|
||||
//-------------------------------------------------
|
||||
|
||||
TIMER_CALLBACK_MEMBER(device_execute_interface::irq_pulse_clear)
|
||||
{
|
||||
int irqline = param;
|
||||
set_input_line(irqline, CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// pulse_input_line - "pulse" an input line by
|
||||
// asserting it and then clearing it later
|
||||
//-------------------------------------------------
|
||||
|
||||
void device_execute_interface::pulse_input_line(int irqline, const attotime &duration)
|
||||
{
|
||||
assert(duration > attotime::zero);
|
||||
set_input_line(irqline, ASSERT_LINE);
|
||||
|
||||
attotime target_time = local_time() + duration;
|
||||
m_scheduler->timer_set(target_time - m_scheduler->time(), timer_expired_delegate(FUNC(device_execute_interface::irq_pulse_clear), this), irqline);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// pulse_input_line_and_vector - "pulse" an
|
||||
// input line by asserting it and then clearing it
|
||||
// later, specifying a vector
|
||||
//-------------------------------------------------
|
||||
|
||||
void device_execute_interface::pulse_input_line_and_vector(int irqline, int vector, const attotime &duration)
|
||||
{
|
||||
assert(duration > attotime::zero);
|
||||
set_input_line_and_vector(irqline, ASSERT_LINE, vector);
|
||||
|
||||
attotime target_time = local_time() + duration;
|
||||
m_scheduler->timer_set(target_time - m_scheduler->time(), timer_expired_delegate(FUNC(device_execute_interface::irq_pulse_clear), this), irqline);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE INPUT
|
||||
|
@ -162,6 +162,10 @@ public:
|
||||
void set_input_line_vector(int linenum, int vector) { m_input[linenum].set_vector(vector); }
|
||||
void set_input_line_and_vector(int linenum, int state, int vector) { m_input[linenum].set_state_synced(state, vector); }
|
||||
int input_state(int linenum) const { return m_input[linenum].m_curstate; }
|
||||
void pulse_input_line(int irqline, const attotime &duration);
|
||||
void pulse_input_line_and_vector(int irqline, int vector, const attotime &duration);
|
||||
void pulse_input_line(int irqline, int cycles) { pulse_input_line(irqline, cycles_to_attotime(cycles * min_cycles())); }
|
||||
void pulse_input_line_and_vector(int irqline, int vector, int cycles) { pulse_input_line_and_vector(irqline, vector, cycles_to_attotime(cycles * min_cycles())); }
|
||||
|
||||
// suspend/resume
|
||||
void suspend(u32 reason, bool eatcycles);
|
||||
@ -292,6 +296,7 @@ private:
|
||||
void on_vblank(screen_device &screen, bool vblank_state);
|
||||
|
||||
TIMER_CALLBACK_MEMBER(trigger_periodic_interrupt);
|
||||
TIMER_CALLBACK_MEMBER(irq_pulse_clear);
|
||||
void suspend_resume_changed();
|
||||
|
||||
attoseconds_t minimum_quantum() const;
|
||||
|
@ -259,55 +259,6 @@ void driver_device::device_reset_after_children()
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERRUPT ENABLE AND VECTOR HELPERS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// irq_pulse_clear - clear a "pulsed" IRQ line
|
||||
//-------------------------------------------------
|
||||
|
||||
void driver_device::irq_pulse_clear(void *ptr, s32 param)
|
||||
{
|
||||
device_execute_interface *exec = reinterpret_cast<device_execute_interface *>(ptr);
|
||||
int irqline = param;
|
||||
exec->set_input_line(irqline, CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// generic_pulse_irq_line - "pulse" an IRQ line by
|
||||
// asserting it and then clearing it x cycle(s)
|
||||
// later
|
||||
//-------------------------------------------------
|
||||
|
||||
void driver_device::generic_pulse_irq_line(device_execute_interface &exec, int irqline, int cycles)
|
||||
{
|
||||
assert(irqline != INPUT_LINE_NMI && irqline != INPUT_LINE_RESET && cycles > 0);
|
||||
exec.set_input_line(irqline, ASSERT_LINE);
|
||||
|
||||
attotime target_time = exec.local_time() + exec.cycles_to_attotime(cycles * exec.min_cycles());
|
||||
machine().scheduler().timer_set(target_time - machine().time(), timer_expired_delegate(FUNC(driver_device::irq_pulse_clear), this), irqline, (void *)&exec);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// generic_pulse_irq_line_and_vector - "pulse" an
|
||||
// IRQ line by asserting it and then clearing it
|
||||
// x cycle(s) later, specifying a vector
|
||||
//-------------------------------------------------
|
||||
|
||||
void driver_device::generic_pulse_irq_line_and_vector(device_execute_interface &exec, int irqline, int vector, int cycles)
|
||||
{
|
||||
assert(irqline != INPUT_LINE_NMI && irqline != INPUT_LINE_RESET && cycles > 0);
|
||||
exec.set_input_line_and_vector(irqline, ASSERT_LINE, vector);
|
||||
|
||||
attotime target_time = exec.local_time() + exec.cycles_to_attotime(cycles * exec.min_cycles());
|
||||
machine().scheduler().timer_set(target_time - machine().time(), timer_expired_delegate(FUNC(driver_device::irq_pulse_clear), this), irqline, (void *)&exec);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERRUPT GENERATION CALLBACK HELPERS
|
||||
//**************************************************************************
|
||||
|
@ -130,10 +130,6 @@ public:
|
||||
// output heler
|
||||
output_manager &output() const { return machine().output(); }
|
||||
|
||||
// generic interrupt generators
|
||||
void generic_pulse_irq_line(device_execute_interface &exec, int irqline, int cycles);
|
||||
void generic_pulse_irq_line_and_vector(device_execute_interface &exec, int irqline, int vector, int cycles);
|
||||
|
||||
INTERRUPT_GEN_MEMBER( nmi_line_pulse );
|
||||
INTERRUPT_GEN_MEMBER( nmi_line_assert );
|
||||
|
||||
@ -196,7 +192,6 @@ protected:
|
||||
|
||||
private:
|
||||
// helpers
|
||||
void irq_pulse_clear(void *ptr, s32 param);
|
||||
void updateflip();
|
||||
|
||||
// internal state
|
||||
|
@ -1962,7 +1962,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( dcs_audio_device::dcs_irq )
|
||||
/* generate the (internal, thats why the pulse) irq */
|
||||
if (LOG_DCS_IO)
|
||||
logerror("dcs_irq: Genrating interrupt\n");
|
||||
m_cpu->machine().driver_data()->generic_pulse_irq_line(*m_cpu, ADSP2105_IRQ1, 1);
|
||||
m_cpu->pulse_input_line(ADSP2105_IRQ1, 1);
|
||||
}
|
||||
|
||||
/* store it */
|
||||
|
@ -227,7 +227,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( acclaim_rax_device::dma_timer_callback )
|
||||
if (m_control_regs[BDMA_CONTROL_REG] & 8)
|
||||
m_cpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
|
||||
else
|
||||
m_cpu->machine().driver_data()->generic_pulse_irq_line(*m_cpu, ADSP2181_BDMA, 1);
|
||||
m_cpu->pulse_input_line(ADSP2181_BDMA, 1);
|
||||
|
||||
timer.adjust(attotime::never);
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ TIMER_CALLBACK_MEMBER(cball_state::interrupt_callback)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
generic_pulse_irq_line(*m_maincpu, 0, 1);
|
||||
m_maincpu->pulse_input_line(0, 1);
|
||||
|
||||
scanline = scanline + 32;
|
||||
|
||||
|
@ -352,7 +352,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(changela_state::changela_scanline)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(changela_state::chl_mcu_irq)
|
||||
{
|
||||
generic_pulse_irq_line(*m_mcu, 0, 1);
|
||||
m_mcu->pulse_input_line(0, 1);
|
||||
}
|
||||
|
||||
void changela_state::machine_start()
|
||||
|
@ -227,8 +227,7 @@ WRITE8_MEMBER(cvs_state::cvs_s2636_2_or_character_ram_w)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(cvs_state::cvs_main_cpu_interrupt)
|
||||
{
|
||||
device.execute().set_input_line_vector(0, 0x03);
|
||||
generic_pulse_irq_line(device.execute(), 0, 1);
|
||||
device.execute().pulse_input_line_and_vector(0, 0x03, 1);
|
||||
|
||||
cvs_scroll_stars();
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ public:
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(dotrikun_state::interrupt)
|
||||
{
|
||||
generic_pulse_irq_line(*m_maincpu, 0, 1);
|
||||
m_maincpu->pulse_input_line(0, 1);
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(dotrikun_state::scanline_off)
|
||||
|
@ -416,7 +416,7 @@ WRITE8_MEMBER(equites_state::equites_c0f8_w)
|
||||
|
||||
case 1: // c0f9: RST75 trigger (written by NMI handler)
|
||||
// Note: solder pad CP3 on the pcb would allow to disable this
|
||||
generic_pulse_irq_line(*m_audiocpu, I8085_RST75_LINE, 1);
|
||||
m_audiocpu->pulse_input_line(I8085_RST75_LINE, 1);
|
||||
break;
|
||||
|
||||
case 2: // c0fa: INTR trigger (written by NMI handler)
|
||||
|
@ -58,7 +58,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(firetrk_state::firetrk_scanline)
|
||||
|
||||
// periodic IRQs are generated by inverse 16V signal
|
||||
if ((scanline & 0x1f) == 0)
|
||||
generic_pulse_irq_line(*m_maincpu, 0, 1);
|
||||
m_maincpu->pulse_input_line(0, 1);
|
||||
|
||||
// vblank interrupt
|
||||
// NMIs are disabled during service mode
|
||||
|
@ -258,7 +258,7 @@ WRITE8_MEMBER(fitfight_state::snd_portc_w)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(fitfight_state::snd_irq)
|
||||
{
|
||||
generic_pulse_irq_line(device.execute(), UPD7810_INTF2, 1);
|
||||
device.execute().pulse_input_line(UPD7810_INTF2, 1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -561,7 +561,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(gaelco3d_state::adsp_autobuffer_irq)
|
||||
reg = m_adsp_ireg_base;
|
||||
|
||||
/* generate the (internal, thats why the pulse) irq */
|
||||
generic_pulse_irq_line(*m_adsp, ADSP2105_IRQ1, 1);
|
||||
m_adsp->pulse_input_line(ADSP2105_IRQ1, 1);
|
||||
}
|
||||
|
||||
/* store it */
|
||||
|
@ -253,7 +253,7 @@ INTERRUPT_GEN_MEMBER(homedata_state::homedata_irq)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(homedata_state::upd7807_irq)
|
||||
{
|
||||
generic_pulse_irq_line(device.execute(), UPD7810_INTF1, 1);
|
||||
device.execute().pulse_input_line(UPD7810_INTF1, 1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -329,7 +329,7 @@ INPUT_PORTS_END
|
||||
|
||||
INTERRUPT_GEN_MEMBER(igs_m027_state::igs_majhong_interrupt)
|
||||
{
|
||||
generic_pulse_irq_line(device.execute(), ARM7_FIRQ_LINE, 1);
|
||||
device.execute().pulse_input_line(ARM7_FIRQ_LINE, 1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -699,7 +699,7 @@ INTERRUPT_GEN_MEMBER(m90_state::bomblord_fake_nmi)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(m90_state::m90_interrupt)
|
||||
{
|
||||
generic_pulse_irq_line(device.execute(), NEC_INPUT_LINE_INTP0, 1);
|
||||
device.execute().pulse_input_line(NEC_INPUT_LINE_INTP0, 1);
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(m90_state::dynablsb_interrupt)
|
||||
|
@ -164,7 +164,7 @@ uint32_t meyc8088_state::screen_update_meyc8088(screen_device &screen, bitmap_in
|
||||
WRITE_LINE_MEMBER(meyc8088_state::screen_vblank_meyc8088)
|
||||
{
|
||||
// INTR on LC255 (pulses at start and end of vblank), INTA hardwired to $20
|
||||
generic_pulse_irq_line_and_vector(*m_maincpu, 0, 0x20, 1);
|
||||
m_maincpu->pulse_input_line_and_vector(0, 0x20, 1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -159,7 +159,7 @@ TIMER_CALLBACK_MEMBER(mgolf_state::interrupt_callback)
|
||||
|
||||
update_plunger();
|
||||
|
||||
generic_pulse_irq_line(*m_maincpu, 0, 1);
|
||||
m_maincpu->pulse_input_line(0, 1);
|
||||
|
||||
scanline = scanline + 32;
|
||||
|
||||
|
@ -322,7 +322,7 @@ INTERRUPT_GEN_MEMBER(namcond1_state::mcu_interrupt)
|
||||
{
|
||||
if( m_h8_irq5_enabled )
|
||||
{
|
||||
generic_pulse_irq_line(device.execute(), 5, 1);
|
||||
device.execute().pulse_input_line(5, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2978,7 +2978,7 @@ ADDRESS_MAP_END
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_interrupt)
|
||||
{
|
||||
generic_pulse_irq_line(*m_mcu, M37710_LINE_TIMERA3TICK, 1);
|
||||
m_mcu->pulse_input_line(M37710_LINE_TIMERA3TICK, 1);
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_update)
|
||||
@ -3013,7 +3013,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_update)
|
||||
|
||||
TIMER_CALLBACK_MEMBER(namcos22_state::adillor_trackball_interrupt)
|
||||
{
|
||||
generic_pulse_irq_line(*m_mcu, param ? M37710_LINE_TIMERA2TICK : M37710_LINE_TIMERA3TICK, 1);
|
||||
m_mcu->pulse_input_line(param ? M37710_LINE_TIMERA2TICK : M37710_LINE_TIMERA3TICK, 1);
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::adillor_trackball_update)
|
||||
|
@ -284,7 +284,7 @@ INPUT_CHANGED_MEMBER(pntnpuzl_state::coin_inserted)
|
||||
{
|
||||
/* TODO: change this! */
|
||||
if(newval)
|
||||
generic_pulse_irq_line(*m_maincpu, (uint8_t)(uintptr_t)param, 1);
|
||||
m_maincpu->pulse_input_line((uint8_t)(uintptr_t)param, 1);
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( pntnpuzl )
|
||||
|
@ -589,7 +589,7 @@ TIMER_CALLBACK_MEMBER(riscpc_state::IOMD_timer0_callback)
|
||||
m_IRQ_status_A|=0x20;
|
||||
if(m_IRQ_mask_A&0x20)
|
||||
{
|
||||
generic_pulse_irq_line(*m_maincpu, ARM7_IRQ_LINE,1);
|
||||
m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -598,7 +598,7 @@ TIMER_CALLBACK_MEMBER(riscpc_state::IOMD_timer1_callback)
|
||||
m_IRQ_status_A|=0x40;
|
||||
if(m_IRQ_mask_A&0x40)
|
||||
{
|
||||
generic_pulse_irq_line(*m_maincpu, ARM7_IRQ_LINE,1);
|
||||
m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -607,7 +607,7 @@ TIMER_CALLBACK_MEMBER(riscpc_state::flyback_timer_callback)
|
||||
m_IRQ_status_A|=0x08;
|
||||
if(m_IRQ_mask_A&0x08)
|
||||
{
|
||||
generic_pulse_irq_line(*m_maincpu, ARM7_IRQ_LINE,1);
|
||||
m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1);
|
||||
}
|
||||
|
||||
m_flyback_timer->adjust(machine().first_screen()->time_until_pos(m_vidc20_vert_reg[VDER]));
|
||||
|
@ -339,7 +339,7 @@ TIMER_CALLBACK_MEMBER(ssfindo_state::PS7500_Timer0_callback)
|
||||
m_PS7500_IO[IRQSTA]|=0x20;
|
||||
if(m_PS7500_IO[IRQMSKA]&0x20)
|
||||
{
|
||||
generic_pulse_irq_line(*m_maincpu, ARM7_IRQ_LINE, 1);
|
||||
m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -358,7 +358,7 @@ TIMER_CALLBACK_MEMBER(ssfindo_state::PS7500_Timer1_callback)
|
||||
m_PS7500_IO[IRQSTA]|=0x40;
|
||||
if(m_PS7500_IO[IRQMSKA]&0x40)
|
||||
{
|
||||
generic_pulse_irq_line(*m_maincpu, ARM7_IRQ_LINE, 1);
|
||||
m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -376,7 +376,7 @@ INTERRUPT_GEN_MEMBER(ssfindo_state::interrupt)
|
||||
m_PS7500_IO[IRQSTA]|=0x08;
|
||||
if(m_PS7500_IO[IRQMSKA]&0x08)
|
||||
{
|
||||
generic_pulse_irq_line(device.execute(), ARM7_IRQ_LINE, 1);
|
||||
device.execute().pulse_input_line(ARM7_IRQ_LINE, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@ Atari Starship 1 driver
|
||||
INTERRUPT_GEN_MEMBER(starshp1_state::starshp1_interrupt)
|
||||
{
|
||||
if ((ioport("SYSTEM")->read() & 0x90) != 0x90)
|
||||
generic_pulse_irq_line(device.execute(), 0, 1);
|
||||
device.execute().pulse_input_line(0, 1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -185,7 +185,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(zac_2_state::zac_2_inttimer)
|
||||
{
|
||||
// a pulse is sent via a capacitor (similar to what one finds at a reset pin)
|
||||
if (m_t_c > 0x80)
|
||||
generic_pulse_irq_line_and_vector(*m_maincpu, INPUT_LINE_IRQ0, 0xbf, 2);
|
||||
m_maincpu->pulse_input_line_and_vector(INPUT_LINE_IRQ0, 0xbf, 2);
|
||||
else
|
||||
m_t_c++;
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ void _3do_state::m_3do_request_fiq(uint32_t irq_req, uint8_t type)
|
||||
if((m_clio.irq0 & m_clio.irq0_enable) || (m_clio.irq1 & m_clio.irq1_enable))
|
||||
{
|
||||
//printf("Go irq %08x & %08x %08x & %08x\n",m_clio.irq0, m_clio.irq0_enable, m_clio.irq1, m_clio.irq1_enable);
|
||||
generic_pulse_irq_line(*m_maincpu, ARM7_FIRQ_LINE, 1);
|
||||
m_maincpu->pulse_input_line(ARM7_FIRQ_LINE, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ void archimedes_state::archimedes_request_fiq(int mask)
|
||||
|
||||
if (m_ioc_regs[FIQ_STATUS] & m_ioc_regs[FIQ_MASK])
|
||||
{
|
||||
generic_pulse_irq_line(*m_maincpu, ARM_FIRQ_LINE, 1);
|
||||
m_maincpu->pulse_input_line(ARM_FIRQ_LINE, 1);
|
||||
|
||||
//m_maincpu->set_input_line(ARM_FIRQ_LINE, CLEAR_LINE);
|
||||
//m_maincpu->set_input_line(ARM_FIRQ_LINE, ASSERT_LINE);
|
||||
|
@ -171,7 +171,7 @@ DRIVER_INIT_MEMBER(galaxold_state,4in1)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(galaxold_state::hunchbks_vh_interrupt)
|
||||
{
|
||||
generic_pulse_irq_line_and_vector(device.execute(),0,0x03,1);
|
||||
device.execute().pulse_input_line_and_vector(0, 0x03, 1);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(galaxold_state,bullsdrtg)
|
||||
|
@ -504,7 +504,7 @@ WRITE8_MEMBER( namcos2_shared_state::namcos2_mcu_analog_ctrl_w )
|
||||
/* If the interrupt enable bit is set trigger an A/D IRQ */
|
||||
if(data & 0x20)
|
||||
{
|
||||
generic_pulse_irq_line(*m_mcu, HD63705_INT_ADCONV, 1);
|
||||
m_mcu->pulse_input_line(HD63705_INT_ADCONV, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ READ16_MEMBER(pgm_arm_type3_state::svg_68k_nmi_r )
|
||||
|
||||
WRITE16_MEMBER(pgm_arm_type3_state::svg_68k_nmi_w )
|
||||
{
|
||||
generic_pulse_irq_line(*m_prot, ARM7_FIRQ_LINE, 1);
|
||||
m_prot->pulse_input_line(ARM7_FIRQ_LINE, 1);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(pgm_arm_type3_state::svg_latch_68k_w )
|
||||
|
Loading…
Reference in New Issue
Block a user