mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
m68000: Add overrideable method to signal RESET instruction to internal peripherals (nw)
This commit is contained in:
parent
a905dffd08
commit
2d149e21c9
@ -349,6 +349,8 @@ protected:
|
||||
#include "m68kops.h"
|
||||
#include "m68kfpu.hxx"
|
||||
#include "m68kmmu.h"
|
||||
|
||||
virtual void m68k_reset_peripherals() { }
|
||||
};
|
||||
|
||||
|
||||
|
@ -262,3 +262,12 @@ void m68340_cpu_device::device_start()
|
||||
|
||||
m_int_ack_callback = device_irq_acknowledge_delegate(FUNC(m68340_cpu_device::int_ack), this);
|
||||
}
|
||||
|
||||
void m68340_cpu_device::m68k_reset_peripherals()
|
||||
{
|
||||
m_m68340SIM->module_reset();
|
||||
m_m68340DMA->module_reset();
|
||||
m_serial->module_reset();
|
||||
m_timer[0]->module_reset();
|
||||
m_timer[1]->module_reset();
|
||||
}
|
||||
|
@ -49,6 +49,8 @@ protected:
|
||||
virtual void device_reset() override;
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
virtual void m68k_reset_peripherals() override;
|
||||
|
||||
private:
|
||||
required_device<mc68340_serial_module_device> m_serial;
|
||||
required_device_array<mc68340_timer_module_device, 2> m_timer;
|
||||
|
@ -25,5 +25,10 @@ WRITE32_MEMBER( m68340_cpu_device::m68340_internal_dma_w )
|
||||
}
|
||||
|
||||
void m68340_dma::reset()
|
||||
{
|
||||
module_reset();
|
||||
}
|
||||
|
||||
void m68340_dma::module_reset()
|
||||
{
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ class m68340_dma
|
||||
{
|
||||
public:
|
||||
void reset();
|
||||
void module_reset();
|
||||
};
|
||||
|
||||
#endif // MAME_MACHINE_68340DMA_H
|
||||
|
@ -157,4 +157,9 @@ mc68340_serial_module_device::mc68340_serial_module_device(const machine_config
|
||||
{
|
||||
}
|
||||
|
||||
void mc68340_serial_module_device::module_reset()
|
||||
{
|
||||
mc68340_duart_device::device_reset();
|
||||
}
|
||||
|
||||
DEFINE_DEVICE_TYPE(MC68340_SERIAL_MODULE, mc68340_serial_module_device, "mc68340sermod", "MC68340 Serial Module")
|
||||
|
@ -27,6 +27,8 @@ public:
|
||||
uint8_t irq_vector() const { return m_ivr; }
|
||||
uint8_t arbitrate(uint8_t level) const { return (irq_level() == level) ? (m_mcrl & REG_MCRL_ARBLV) : 0; }
|
||||
|
||||
void module_reset();
|
||||
|
||||
protected:
|
||||
m68340_cpu_device *m_cpu;
|
||||
|
||||
|
@ -493,6 +493,12 @@ void m68340_sim::reset()
|
||||
m_pit_irq = false;
|
||||
}
|
||||
|
||||
void m68340_sim::module_reset()
|
||||
{
|
||||
// SYS set in RSR, nothing else happens
|
||||
m_avr_rsr = (m_avr_rsr & 0xff00) | 0x02;
|
||||
}
|
||||
|
||||
/* do_tick_pit works on whole clock cycles, no flank support */
|
||||
void m68340_cpu_device::do_tick_pit()
|
||||
{
|
||||
|
@ -35,6 +35,7 @@ public:
|
||||
bool m_pit_irq;
|
||||
|
||||
void reset();
|
||||
void module_reset();
|
||||
|
||||
enum {
|
||||
REG_MCR = 0x00,
|
||||
|
@ -308,6 +308,16 @@ void mc68340_timer_module_device::device_start()
|
||||
m_tin_in_cb.resolve_safe();
|
||||
}
|
||||
|
||||
void mc68340_timer_module_device::device_reset()
|
||||
{
|
||||
module_reset();
|
||||
}
|
||||
|
||||
void mc68340_timer_module_device::module_reset()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void mc68340_timer_module_device::do_timer_irq()
|
||||
{
|
||||
assert((m_sr & (REG_SR_TO | REG_SR_TG | REG_SR_TC)) != 0);
|
||||
|
@ -14,9 +14,6 @@ class mc68340_timer_module_device : public device_t
|
||||
public:
|
||||
mc68340_timer_module_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
READ16_MEMBER( read );
|
||||
WRITE16_MEMBER( write );
|
||||
DECLARE_WRITE_LINE_MEMBER( tin_w );
|
||||
@ -26,7 +23,13 @@ public:
|
||||
uint8_t irq_vector() const { return m_ir & REG_IR_INTVEC; }
|
||||
uint8_t arbitrate(uint8_t level) const { return (irq_level() == level) ? (m_mcr & REG_MCR_ARBLV) : 0; }
|
||||
|
||||
protected:
|
||||
void module_reset();
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
m68340_cpu_device *m_cpu;
|
||||
|
||||
uint16_t m_mcr;
|
||||
|
Loading…
Reference in New Issue
Block a user