mirror of
https://github.com/holub/mame
synced 2025-05-10 08:12:13 +03:00
tmp68301: Merge on-chip peripheral emulation with CPU device
This commit is contained in:
parent
8708e5a7a8
commit
ff8c8701de
@ -23,7 +23,8 @@ DEFINE_DEVICE_TYPE(TMP68301, tmp68301_device, "tmp68301", "Toshiba TMP68301")
|
||||
|
||||
void tmp68301_device::tmp68301_regs(address_map &map)
|
||||
{
|
||||
// AM_RANGE(0x000,0x3ff) AM_RAM
|
||||
map(0x000, 0x3ff).rw(FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w));
|
||||
|
||||
map(0x080, 0x093).rw(FUNC(tmp68301_device::icr_r), FUNC(tmp68301_device::icr_w)).umask16(0x00ff);
|
||||
|
||||
map(0x094, 0x095).rw(FUNC(tmp68301_device::imr_r), FUNC(tmp68301_device::imr_w));
|
||||
@ -134,9 +135,7 @@ WRITE8_MEMBER(tmp68301_device::icr_w)
|
||||
}
|
||||
|
||||
tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, TMP68301, tag, owner, clock),
|
||||
device_memory_interface(mconfig, *this),
|
||||
m_cpu(*this, finder_base::DUMMY_TAG),
|
||||
: m68000_device(mconfig, TMP68301, tag, owner, clock),
|
||||
m_in_parallel_cb(*this),
|
||||
m_out_parallel_cb(*this),
|
||||
m_ipl(0),
|
||||
@ -145,8 +144,7 @@ tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag,
|
||||
m_iisr(0),
|
||||
m_scr(0),
|
||||
m_pdir(0),
|
||||
m_pdr(0),
|
||||
m_space_config("regs", ENDIANNESS_LITTLE, 16, 10, 0, address_map_constructor(FUNC(tmp68301_device::tmp68301_regs), this))
|
||||
m_pdr(0)
|
||||
{
|
||||
memset(m_regs, 0, sizeof(m_regs));
|
||||
memset(m_icr, 0, sizeof(m_icr));
|
||||
@ -159,13 +157,17 @@ tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag,
|
||||
|
||||
void tmp68301_device::device_start()
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 3; i++)
|
||||
m68000_device::device_start();
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
m_tmp68301_timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tmp68301_device::timer_callback), this));
|
||||
|
||||
m_in_parallel_cb.resolve_safe(0);
|
||||
m_out_parallel_cb.resolve_safe();
|
||||
|
||||
m_program->install_device(0xfffc00, 0xffffff, *this, &tmp68301_device::tmp68301_regs);
|
||||
m_int_ack_callback = device_irq_acknowledge_delegate(FUNC(tmp68301_device::irq_callback), this);
|
||||
|
||||
save_item(NAME(m_regs));
|
||||
save_item(NAME(m_icr));
|
||||
save_item(NAME(m_ipl));
|
||||
@ -183,6 +185,8 @@ void tmp68301_device::device_start()
|
||||
|
||||
void tmp68301_device::device_reset()
|
||||
{
|
||||
m68000_device::device_reset();
|
||||
|
||||
m_ipr = 0;
|
||||
m_iisr = 0;
|
||||
m_imr = 0x7f7; // mask all irqs
|
||||
@ -190,40 +194,10 @@ void tmp68301_device::device_reset()
|
||||
update_ipl();
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// memory_space_config - return a description of
|
||||
// any address spaces owned by this device
|
||||
//-------------------------------------------------
|
||||
|
||||
device_memory_interface::space_config_vector tmp68301_device::memory_space_config() const
|
||||
{
|
||||
return space_config_vector {
|
||||
std::make_pair(0, &m_space_config)
|
||||
};
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// INLINE HELPERS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// read_byte - read a byte at the given address
|
||||
//-------------------------------------------------
|
||||
|
||||
inline uint16_t tmp68301_device::read_word(offs_t address)
|
||||
{
|
||||
return space(0).read_word(address << 1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write_byte - write a byte at the given address
|
||||
//-------------------------------------------------
|
||||
|
||||
inline void tmp68301_device::write_word(offs_t address, uint16_t data)
|
||||
{
|
||||
space(0).write_word(address << 1, data);
|
||||
}
|
||||
|
||||
IRQ_CALLBACK_MEMBER(tmp68301_device::irq_callback)
|
||||
{
|
||||
uint8_t IVNR = m_regs[0x9a/2] & 0xe0; // Interrupt Vector Number Register (IVNR)
|
||||
@ -312,7 +286,7 @@ void tmp68301_device::update_timer(int i)
|
||||
{
|
||||
int scale = (TCR & 0x3c00)>>10; // P4..1
|
||||
if (scale > 8) scale = 8;
|
||||
duration = attotime::from_hz(m_cpu->unscaled_clock()) * ((1 << scale) * max);
|
||||
duration = attotime::from_hz(unscaled_clock()) * ((1 << scale) * max);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -343,9 +317,9 @@ void tmp68301_device::update_ipl()
|
||||
if (new_ipl != m_ipl)
|
||||
{
|
||||
if (m_ipl != 0)
|
||||
m_cpu->set_input_line(m_ipl, CLEAR_LINE);
|
||||
set_input_line(m_ipl, CLEAR_LINE);
|
||||
if (new_ipl != 0)
|
||||
m_cpu->set_input_line(new_ipl, ASSERT_LINE);
|
||||
set_input_line(new_ipl, ASSERT_LINE);
|
||||
|
||||
m_ipl = new_ipl;
|
||||
}
|
||||
@ -366,18 +340,16 @@ uint8_t tmp68301_device::serial_interrupt_cause(int channel)
|
||||
|
||||
READ16_MEMBER( tmp68301_device::regs_r )
|
||||
{
|
||||
return read_word(offset);
|
||||
return m_regs[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( tmp68301_device::regs_w )
|
||||
{
|
||||
COMBINE_DATA(&m_regs[offset]);
|
||||
|
||||
write_word(offset,m_regs[offset]);
|
||||
|
||||
if (!ACCESSING_BITS_0_7) return;
|
||||
|
||||
// logerror("CPU #0 PC %06X: TMP68301 Reg %04X<-%04X & %04X\n", m_cpu->pc(),offset*2,data,mem_mask^0xffff);
|
||||
// logerror("CPU #0 PC %06X: TMP68301 Reg %04X<-%04X & %04X\n", >pc(),offset*2,data,mem_mask^0xffff);
|
||||
|
||||
switch( offset * 2 )
|
||||
{
|
||||
|
@ -16,27 +16,19 @@
|
||||
|
||||
|
||||
|
||||
class tmp68301_device : public device_t,
|
||||
public device_memory_interface
|
||||
class tmp68301_device : public m68000_device
|
||||
{
|
||||
public:
|
||||
tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
template <typename T> void set_cputag(T &&tag) { m_cpu.set_tag(std::forward<T>(tag)); } // FIXME: M68000 ought to be a parent class, not an external object
|
||||
auto in_parallel_callback() { return m_in_parallel_cb.bind(); }
|
||||
auto out_parallel_callback() { return m_out_parallel_cb.bind(); }
|
||||
|
||||
// Hardware Registers
|
||||
DECLARE_READ16_MEMBER( regs_r );
|
||||
DECLARE_WRITE16_MEMBER( regs_w );
|
||||
|
||||
// Interrupts
|
||||
void external_interrupt_0();
|
||||
void external_interrupt_1();
|
||||
void external_interrupt_2();
|
||||
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
|
||||
private:
|
||||
DECLARE_READ16_MEMBER(imr_r);
|
||||
DECLARE_WRITE16_MEMBER(imr_w);
|
||||
@ -53,13 +45,18 @@ private:
|
||||
DECLARE_READ8_MEMBER(icr_r);
|
||||
DECLARE_WRITE8_MEMBER(icr_w);
|
||||
|
||||
// Hardware Registers
|
||||
DECLARE_READ16_MEMBER( regs_r );
|
||||
DECLARE_WRITE16_MEMBER( regs_w );
|
||||
|
||||
void tmp68301_regs(address_map &map);
|
||||
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual space_config_vector memory_space_config() const override;
|
||||
|
||||
private:
|
||||
TIMER_CALLBACK_MEMBER(timer_callback);
|
||||
@ -78,11 +75,6 @@ private:
|
||||
static constexpr uint16_t TIMER1_IRQ = 1 << 9;
|
||||
static constexpr uint16_t TIMER2_IRQ = 1 << 10;
|
||||
|
||||
inline uint16_t read_word(offs_t address);
|
||||
inline void write_word(offs_t address, uint16_t data);
|
||||
|
||||
required_device<m68000_base_device> m_cpu;
|
||||
|
||||
devcb_read16 m_in_parallel_cb;
|
||||
devcb_write16 m_out_parallel_cb;
|
||||
|
||||
@ -100,8 +92,6 @@ private:
|
||||
uint16_t m_pdir;
|
||||
uint16_t m_pdr;
|
||||
uint8_t m_icr[10];
|
||||
|
||||
const address_space_config m_space_config;
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(TMP68301, tmp68301_device)
|
||||
|
@ -82,7 +82,6 @@ void bingowav_state::bingowav_main_map(address_map &map)
|
||||
map(0x140000, 0x140001).nopr();
|
||||
map(0x150001, 0x150001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
|
||||
map(0x150003, 0x150003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
|
||||
map(0xfffc00, 0xffffff).rw("maintmp", FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w));
|
||||
}
|
||||
|
||||
void bingowav_state::bingowav_audio_map(address_map &map)
|
||||
@ -114,12 +113,9 @@ INPUT_PORTS_END
|
||||
|
||||
void bingowav_state::bingowav(machine_config &config)
|
||||
{
|
||||
M68000(config, m_maincpu, 12000000); // actually TMP63803F-16
|
||||
TMP68301(config, m_maincpu, 12000000); // actually TMP63803F-16
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &bingowav_state::bingowav_main_map);
|
||||
|
||||
tmp68301_device &tmp68301(TMP68301(config, "maintmp", 0)); // wrong
|
||||
tmp68301.set_cputag(m_maincpu);
|
||||
|
||||
te7750_device &mainioh(TE7750(config, "mainioh"));
|
||||
mainioh.ios_cb().set_constant(5);
|
||||
|
||||
|
@ -49,14 +49,12 @@ public:
|
||||
csplayh5_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_tmp68301(*this, "tmp68301"),
|
||||
m_nichisnd(*this, "nichisnd"),
|
||||
m_key(*this, "KEY.%u", 0),
|
||||
m_region_maincpu(*this, "maincpu")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<tmp68301_device> m_tmp68301;
|
||||
required_device<tmp68301_device> m_maincpu;
|
||||
required_device<nichisnd_device> m_nichisnd;
|
||||
required_ioport_array<5> m_key;
|
||||
required_memory_region m_region_maincpu;
|
||||
@ -142,8 +140,6 @@ void csplayh5_state::csplayh5_map(address_map &map)
|
||||
map(0x800000, 0xbfffff).rom().region("blit_gfx", 0); // GFX ROM routes here
|
||||
|
||||
map(0xc00000, 0xc7ffff).ram().share("nvram").mirror(0x380000); // work RAM
|
||||
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
#if USE_H8
|
||||
@ -330,7 +326,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(csplayh5_state::csplayh5_irq)
|
||||
int scanline = param;
|
||||
|
||||
if(scanline == 212*2)
|
||||
m_tmp68301->external_interrupt_0();
|
||||
m_maincpu->external_interrupt_0();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(csplayh5_state::csplayh5_vdp0_interrupt)
|
||||
@ -361,16 +357,12 @@ WRITE16_MEMBER(csplayh5_state::tmp68301_parallel_port_w)
|
||||
void csplayh5_state::csplayh5(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, 16000000); /* TMP68301-16 */
|
||||
TMP68301(config, m_maincpu, 16000000); /* TMP68301-16 */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &csplayh5_state::csplayh5_map);
|
||||
m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
|
||||
m_maincpu->out_parallel_callback().set(FUNC(csplayh5_state::tmp68301_parallel_port_w));
|
||||
|
||||
TIMER(config, "scantimer", 0).configure_scanline(timer_device::expired_delegate(FUNC(csplayh5_state::csplayh5_irq), this), "screen", 0, 1);
|
||||
|
||||
TMP68301(config, m_tmp68301, 0);
|
||||
m_tmp68301->set_cputag(m_maincpu);
|
||||
m_tmp68301->out_parallel_callback().set(FUNC(csplayh5_state::tmp68301_parallel_port_w));
|
||||
|
||||
#if USE_H8
|
||||
h830002_device &subcpu(H83002(config, "subcpu", DVD_CLOCK/2)); /* unknown divider */
|
||||
subcpu.set_addrmap(AS_PROGRAM, &csplayh5_state::csplayh5_sub_map);
|
||||
|
@ -106,7 +106,6 @@ public:
|
||||
joystand_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_tmp68301(*this, "tmp68301"),
|
||||
m_palette(*this, "palette"),
|
||||
m_bg15_palette(*this, "bg15_palette"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
@ -142,8 +141,7 @@ protected:
|
||||
|
||||
private:
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<tmp68301_device> m_tmp68301;
|
||||
required_device<tmp68301_device> m_maincpu;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<palette_device> m_bg15_palette;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
@ -479,8 +477,6 @@ void joystand_state::joystand_map(address_map &map)
|
||||
map(0xe00020, 0xe00021).r(FUNC(joystand_state::e00020_r)); // master slot
|
||||
|
||||
map(0xe80040, 0xe8005f).rw("rtc", FUNC(msm6242_device::read), FUNC(msm6242_device::write)).umask16(0x00ff);
|
||||
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -584,21 +580,17 @@ void joystand_state::machine_reset()
|
||||
INTERRUPT_GEN_MEMBER(joystand_state::joystand_interrupt)
|
||||
{
|
||||
// VBlank is connected to INT1 (external interrupts pin 1)
|
||||
m_tmp68301->external_interrupt_1();
|
||||
m_maincpu->external_interrupt_1();
|
||||
}
|
||||
|
||||
void joystand_state::joystand(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
M68000(config, m_maincpu, XTAL(16'000'000)); // !! TMP68301 !!
|
||||
TMP68301(config, m_maincpu, XTAL(16'000'000));
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &joystand_state::joystand_map);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(joystand_state::joystand_interrupt));
|
||||
m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
|
||||
|
||||
TMP68301(config, m_tmp68301, 0);
|
||||
m_tmp68301->set_cputag(m_maincpu);
|
||||
m_tmp68301->in_parallel_callback().set(FUNC(joystand_state::eeprom_r));
|
||||
m_tmp68301->out_parallel_callback().set(FUNC(joystand_state::eeprom_w));
|
||||
m_maincpu->in_parallel_callback().set(FUNC(joystand_state::eeprom_r));
|
||||
m_maincpu->out_parallel_callback().set(FUNC(joystand_state::eeprom_w));
|
||||
|
||||
// video hardware
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
|
@ -65,17 +65,12 @@ void k2000_state::k2000_map(address_map &map)
|
||||
map(0x000000, 0x0fffff).rom().region("maincpu", 0);
|
||||
map(0x100000, 0x11ffff).ram(); // is this area banked between RAM (write of 0x20 to 7e0001) vs setup/SU ROM (write of 0x30 to 7e0001) ?
|
||||
// byte writes to 7e0000-7e0001 - unknown, possibly banking or status?
|
||||
map(0xfffc00, 0xffffff).rw("tmp68301", FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
void k2000_state::k2000(machine_config &config)
|
||||
{
|
||||
M68301(config, m_maincpu, XTAL(12'000'000));
|
||||
TMP68301(config, m_maincpu, XTAL(12'000'000));
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &k2000_state::k2000_map);
|
||||
m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
|
||||
|
||||
tmp68301_device &tmp68301(TMP68301(config, "tmp68301", 0));
|
||||
tmp68301.set_cputag(m_maincpu);
|
||||
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
|
@ -154,8 +154,6 @@ void niyanpai_state::niyanpai_map(address_map &map)
|
||||
map(0x240a01, 0x240a01).w(FUNC(niyanpai_state::clutsel_0_w));
|
||||
map(0x240c01, 0x240c01).w(FUNC(niyanpai_state::clutsel_1_w));
|
||||
map(0x240e01, 0x240e01).w(FUNC(niyanpai_state::clutsel_2_w));
|
||||
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
void niyanpai_state::musobana_map(address_map &map)
|
||||
@ -193,8 +191,6 @@ void niyanpai_state::musobana_map(address_map &map)
|
||||
map(0x280000, 0x280001).r(FUNC(niyanpai_state::dipsw_r));
|
||||
map(0x280200, 0x280201).r(FUNC(niyanpai_state::musobana_inputport_0_r));
|
||||
map(0x280400, 0x280401).portr("SYSTEM");
|
||||
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
void niyanpai_state::mhhonban_map(address_map &map)
|
||||
@ -234,8 +230,6 @@ void niyanpai_state::mhhonban_map(address_map &map)
|
||||
map(0x280000, 0x280001).r(FUNC(niyanpai_state::dipsw_r));
|
||||
map(0x280200, 0x280201).r(FUNC(niyanpai_state::musobana_inputport_0_r));
|
||||
map(0x280400, 0x280401).portr("SYSTEM");
|
||||
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
void niyanpai_state::zokumahj_map(address_map &map)
|
||||
@ -274,8 +268,6 @@ void niyanpai_state::zokumahj_map(address_map &map)
|
||||
map(0x280000, 0x280001).r(FUNC(niyanpai_state::dipsw_r));
|
||||
map(0x280200, 0x280201).r(FUNC(niyanpai_state::musobana_inputport_0_r));
|
||||
map(0x280400, 0x280401).portr("SYSTEM");
|
||||
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -687,20 +679,16 @@ INPUT_PORTS_END
|
||||
WRITE_LINE_MEMBER(niyanpai_state::vblank_irq)
|
||||
{
|
||||
if (state)
|
||||
m_tmp68301->external_interrupt_0();
|
||||
m_maincpu->external_interrupt_0();
|
||||
}
|
||||
|
||||
|
||||
void niyanpai_state::niyanpai(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, 12288000/2); /* TMP68301, 6.144 MHz */
|
||||
TMP68301(config, m_maincpu, 12288000/2); /* TMP68301, 6.144 MHz */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &niyanpai_state::niyanpai_map);
|
||||
m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
|
||||
|
||||
TMP68301(config, m_tmp68301, 0);
|
||||
m_tmp68301->set_cputag(m_maincpu);
|
||||
m_tmp68301->out_parallel_callback().set(FUNC(niyanpai_state::tmp68301_parallel_port_w));
|
||||
m_maincpu->out_parallel_callback().set(FUNC(niyanpai_state::tmp68301_parallel_port_w));
|
||||
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||
|
||||
|
@ -174,7 +174,6 @@ void realbrk_state::base_mem(address_map &map)
|
||||
map(0x606000, 0x60600f).ram().w(FUNC(realbrk_state::vregs_w)).share("vregs"); // Scroll + Video Regs
|
||||
map(0x800000, 0x800003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0xff00); // YMZ280
|
||||
map(0xfe0000, 0xfeffff).ram(); // RAM
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
/*realbrk specific memory map*/
|
||||
@ -764,19 +763,15 @@ WRITE_LINE_MEMBER(realbrk_state::vblank_irq)
|
||||
{
|
||||
/* VBlank is connected to INT1 (external interrupts pin 1) */
|
||||
if (state)
|
||||
m_tmp68301->external_interrupt_1();
|
||||
m_maincpu->external_interrupt_1();
|
||||
}
|
||||
|
||||
void realbrk_state::realbrk(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, XTAL(32'000'000) / 2); /* !! TMP68301 !! */
|
||||
TMP68301(config, m_maincpu, XTAL(32'000'000) / 2);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::realbrk_mem);
|
||||
m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
|
||||
|
||||
TMP68301(config, m_tmp68301, 0);
|
||||
m_tmp68301->set_cputag(m_maincpu);
|
||||
m_tmp68301->out_parallel_callback().set(FUNC(realbrk_state::realbrk_flipscreen_w));
|
||||
m_maincpu->out_parallel_callback().set(FUNC(realbrk_state::realbrk_flipscreen_w));
|
||||
|
||||
/* video hardware */
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
@ -809,8 +804,7 @@ void realbrk_state::pkgnsh(machine_config &config)
|
||||
realbrk(config);
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::pkgnsh_mem);
|
||||
|
||||
m_tmp68301->out_parallel_callback().set_nop();
|
||||
m_maincpu->out_parallel_callback().set_nop();
|
||||
}
|
||||
|
||||
void realbrk_state::pkgnshdx(machine_config &config)
|
||||
|
@ -2923,7 +2923,6 @@ void kiwame_state::kiwame_map(address_map &map)
|
||||
map(0xc00000, 0xc03fff).rw(m_x1, FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
|
||||
map(0xd00000, 0xd00009).r(FUNC(kiwame_state::input_r)); // mahjong panel
|
||||
map(0xe00000, 0xe00003).r(FUNC(kiwame_state::seta_dsw_r)); // DSW
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w));
|
||||
}
|
||||
|
||||
|
||||
@ -9275,19 +9274,15 @@ void seta_state::triplfun(machine_config &config)
|
||||
WRITE_LINE_MEMBER(kiwame_state::kiwame_vblank)
|
||||
{
|
||||
if (state)
|
||||
m_tmp68301->external_interrupt_0();
|
||||
m_maincpu->external_interrupt_0();
|
||||
}
|
||||
|
||||
void kiwame_state::kiwame(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, 16000000); /* 16 MHz */
|
||||
TMP68301(config, m_maincpu, 16000000); /* 16 MHz */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &kiwame_state::kiwame_map);
|
||||
m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
|
||||
|
||||
tmp68301_device &tmp68301(TMP68301(config, "tmp68301", 0));
|
||||
tmp68301.set_cputag(m_maincpu);
|
||||
tmp68301.out_parallel_callback().set(FUNC(kiwame_state::row_select_w));
|
||||
m_maincpu->out_parallel_callback().set(FUNC(kiwame_state::row_select_w));
|
||||
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||
|
||||
|
@ -196,7 +196,6 @@ void seta2_state::grdians_map(address_map &map)
|
||||
map(0xc50000, 0xc5ffff).ram(); // cleared
|
||||
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
|
||||
map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
@ -235,7 +234,6 @@ void seta2_state::gundamex_map(address_map &map)
|
||||
map(0xc50000, 0xc5ffff).ram(); // cleared
|
||||
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
|
||||
map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -292,7 +290,6 @@ void seta2_state::mj4simai_map(address_map &map)
|
||||
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
|
||||
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
|
||||
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -316,7 +313,6 @@ void seta2_state::myangel_map(address_map &map)
|
||||
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
|
||||
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
|
||||
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -340,7 +336,6 @@ void seta2_state::myangel2_map(address_map &map)
|
||||
map(0xd00000, 0xd3ffff).ram().share("spriteram"); // Sprites
|
||||
map(0xd40000, 0xd4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
|
||||
map(0xd60000, 0xd6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -383,7 +378,6 @@ void seta2_state::pzlbowl_map(address_map &map)
|
||||
map(0x840000, 0x84ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
|
||||
map(0x860000, 0x86003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
|
||||
map(0x900000, 0x903fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -416,7 +410,6 @@ void seta2_state::penbros_map(address_map &map)
|
||||
map(0x500302, 0x500303).portr("DSW2");
|
||||
map(0x500300, 0x50030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff);
|
||||
map(0xb60000, 0xb6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs");
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w));
|
||||
}
|
||||
|
||||
void seta2_state::ablastb_map(address_map &map)
|
||||
@ -482,7 +475,6 @@ void seta2_state::reelquak_map(address_map &map)
|
||||
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
|
||||
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
|
||||
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -497,7 +489,6 @@ void seta2_state::namcostr_map(address_map &map)
|
||||
map(0x200000, 0x20ffff).ram(); // RAM
|
||||
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
|
||||
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -540,8 +531,6 @@ void seta2_state::samshoot_map(address_map &map)
|
||||
map(0x860000, 0x86003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
|
||||
|
||||
map(0x900000, 0x903fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
|
||||
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -635,7 +624,6 @@ void staraudi_state::staraudi_map(address_map &map)
|
||||
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
|
||||
map(0xc50000, 0xc5ffff).ram(); // cleared
|
||||
map(0xc60000, 0xc6003f).ram().w(FUNC(staraudi_state::vregs_w)).share("vregs"); // Video Registers
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -694,7 +682,6 @@ void seta2_state::telpacfl_map(address_map &map)
|
||||
map(0xd00006, 0xd00007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
|
||||
// AM_RANGE(0xe00000, 0xe00001) AM_WRITE
|
||||
map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
|
||||
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
|
||||
}
|
||||
|
||||
|
||||
@ -2301,23 +2288,19 @@ GFXDECODE_END
|
||||
INTERRUPT_GEN_MEMBER(seta2_state::seta2_interrupt)
|
||||
{
|
||||
/* VBlank is connected to INT0 (external interrupts pin 0) */
|
||||
m_tmp68301->external_interrupt_0();
|
||||
downcast<tmp68301_device &>(*m_maincpu).external_interrupt_0();
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(seta2_state::samshoot_interrupt)
|
||||
{
|
||||
m_tmp68301->external_interrupt_2(); // to do: hook up x1-10 interrupts
|
||||
downcast<tmp68301_device &>(*m_maincpu).external_interrupt_2(); // to do: hook up x1-10 interrupts
|
||||
}
|
||||
|
||||
void seta2_state::seta2(machine_config &config)
|
||||
{
|
||||
M68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
|
||||
TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::mj4simai_map);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::seta2_interrupt));
|
||||
m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
|
||||
|
||||
TMP68301(config, m_tmp68301, 0);
|
||||
m_tmp68301->set_cputag(m_maincpu);
|
||||
|
||||
WATCHDOG_TIMER(config, "watchdog");
|
||||
|
||||
@ -2349,8 +2332,8 @@ void seta2_state::gundamex(machine_config &config)
|
||||
seta2(config);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::gundamex_map);
|
||||
|
||||
m_tmp68301->in_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_r));
|
||||
m_tmp68301->out_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_w));
|
||||
downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_r));
|
||||
downcast<tmp68301_device &>(*m_maincpu).out_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_w));
|
||||
|
||||
EEPROM_93C46_16BIT(config, "eeprom");
|
||||
|
||||
@ -2414,8 +2397,6 @@ void seta2_state::ablastb(machine_config &config)
|
||||
M68000(config.replace(), m_maincpu, XTAL(16'000'000)); // TMP68HC000P-16
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::ablastb_map);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::irq2_line_hold));
|
||||
|
||||
config.device_remove("tmp68301");
|
||||
}
|
||||
|
||||
void seta2_state::reelquak(machine_config &config)
|
||||
@ -2423,7 +2404,7 @@ void seta2_state::reelquak(machine_config &config)
|
||||
seta2(config);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::reelquak_map);
|
||||
|
||||
m_tmp68301->out_parallel_callback().set(FUNC(seta2_state::reelquak_leds_w));
|
||||
downcast<tmp68301_device &>(*m_maincpu).out_parallel_callback().set(FUNC(seta2_state::reelquak_leds_w));
|
||||
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||
TICKET_DISPENSER(config, m_dispenser, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
|
||||
@ -2438,7 +2419,7 @@ void seta2_state::samshoot(machine_config &config)
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::samshoot_map);
|
||||
m_maincpu->set_periodic_int(FUNC(seta2_state::samshoot_interrupt), attotime::from_hz(60));
|
||||
|
||||
m_tmp68301->in_parallel_callback().set_ioport("DSW2");
|
||||
downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set_ioport("DSW2");
|
||||
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||
|
||||
@ -2467,7 +2448,7 @@ void seta2_state::telpacfl(machine_config &config)
|
||||
seta2(config);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::telpacfl_map);
|
||||
|
||||
m_tmp68301->in_parallel_callback().set_ioport("KNOB");
|
||||
downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set_ioport("KNOB");
|
||||
|
||||
EEPROM_93C46_16BIT(config, "eeprom"); // not hooked up, seems unused
|
||||
|
||||
@ -2570,13 +2551,10 @@ void funcube_state::funcube3(machine_config &config)
|
||||
|
||||
void seta2_state::namcostr(machine_config &config)
|
||||
{
|
||||
M68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
|
||||
TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::namcostr_map);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::seta2_interrupt));
|
||||
m_maincpu->set_irq_acknowledge_callback("tmp68301", FUNC(tmp68301_device::irq_callback));
|
||||
|
||||
TMP68301(config, m_tmp68301, 0); // does this have a ticket dispenser?
|
||||
m_tmp68301->set_cputag(m_maincpu);
|
||||
// does this have a ticket dispenser?
|
||||
|
||||
// video hardware
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
|
@ -15,7 +15,6 @@ public:
|
||||
niyanpai_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag) ,
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_tmp68301(*this, "tmp68301"),
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette") { }
|
||||
|
||||
@ -34,8 +33,7 @@ private:
|
||||
TIMER_BLITTER
|
||||
};
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<tmp68301_device> m_tmp68301;
|
||||
required_device<tmp68301_device> m_maincpu;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
|
@ -15,7 +15,6 @@ public:
|
||||
realbrk_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_tmp68301(*this, "tmp68301"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette"),
|
||||
@ -37,8 +36,7 @@ public:
|
||||
void pkgnshdx(machine_config &config);
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<tmp68301_device> m_tmp68301;
|
||||
required_device<tmp68301_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
|
@ -364,7 +364,7 @@ class kiwame_state : public seta_state
|
||||
public:
|
||||
kiwame_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
seta_state(mconfig, type, tag),
|
||||
m_tmp68301(*this, "tmp68301"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_key(*this, "KEY%u", 0U)
|
||||
{ }
|
||||
|
||||
@ -377,7 +377,7 @@ private:
|
||||
|
||||
void kiwame_map(address_map &map);
|
||||
|
||||
required_device<tmp68301_device> m_tmp68301;
|
||||
required_device<tmp68301_device> m_maincpu;
|
||||
required_ioport_array<5> m_key;
|
||||
|
||||
uint16_t m_kiwame_row_select;
|
||||
|
@ -28,7 +28,6 @@ public:
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette"),
|
||||
|
||||
m_tmp68301(*this, "tmp68301"),
|
||||
m_oki(*this, "oki"),
|
||||
m_eeprom(*this, "eeprom"),
|
||||
m_flash(*this, "flash"),
|
||||
@ -119,7 +118,6 @@ protected:
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
optional_device<tmp68301_device> m_tmp68301;
|
||||
optional_device<okim9810_device> m_oki;
|
||||
optional_device<eeprom_serial_93cxx_device> m_eeprom;
|
||||
optional_device<intelfsh16_device> m_flash;
|
||||
|
@ -621,11 +621,12 @@ void seta2_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
|
||||
TIMER_CALLBACK_MEMBER(seta2_state::raster_timer_done)
|
||||
{
|
||||
if (m_tmp68301)
|
||||
auto *tmp68301 = dynamic_cast<tmp68301_device *>(m_maincpu.target());
|
||||
if (tmp68301)
|
||||
{
|
||||
if (m_rasterenabled & 1)
|
||||
{
|
||||
m_tmp68301->external_interrupt_1();
|
||||
tmp68301->external_interrupt_1();
|
||||
logerror("external int (vpos is %d)\n", m_screen->vpos());
|
||||
m_screen->update_partial(m_screen->vpos() - 1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user