mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
Added generic latch to replace soundlatch in driver_device (nw)
This commit is contained in:
parent
8a07dafbaf
commit
c47bd3a937
@ -2750,3 +2750,15 @@ if (MACHINES["GENPC"]~=null) then
|
||||
MAME_DIR .. "src/devices/machine/genpc.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/gen_latch.h,MACHINES["GEN_LATCH] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (MACHINES["GEN_LATCH"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/machine/gen_latch.cpp",
|
||||
MAME_DIR .. "src/devices/machine/gen_latch.h",
|
||||
}
|
||||
end
|
||||
|
@ -566,6 +566,7 @@ MACHINES["STEPPERS"] = true
|
||||
MACHINES["PCI9050"] = true
|
||||
--MACHINES["TMS1024"] = true
|
||||
MACHINES["GENPC"] = true
|
||||
MACHINES["GEN_LATCH"] = true
|
||||
|
||||
--------------------------------------------------
|
||||
-- specify available bus cores
|
||||
|
@ -574,6 +574,7 @@ MACHINES["TMS1024"] = true
|
||||
MACHINES["NSC810"] = true
|
||||
MACHINES["VT82C496"] = true
|
||||
MACHINES["GENPC"] = true
|
||||
MACHINES["GEN_LATCH"] = true
|
||||
|
||||
--------------------------------------------------
|
||||
-- specify available bus cores
|
||||
|
155
src/devices/machine/gen_latch.cpp
Normal file
155
src/devices/machine/gen_latch.cpp
Normal file
@ -0,0 +1,155 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Miodrag Milanovic
|
||||
/***************************************************************************
|
||||
|
||||
Generic 8bit and 16 bit latch devices
|
||||
|
||||
***************************************************************************/
|
||||
#include "emu.h"
|
||||
#include "gen_latch.h"
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type GENERIC_LATCH_8 = &device_creator<generic_latch_8_device>;
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// generic_latch_8_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
generic_latch_8_device::generic_latch_8_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, GENERIC_LATCH_8, "Generic 8-bit latch", tag, owner, clock, "generic_latch_8", __FILE__),
|
||||
m_latched_value(0),
|
||||
m_latch_read(0)
|
||||
{
|
||||
}
|
||||
|
||||
READ8_MEMBER( generic_latch_8_device::read )
|
||||
{
|
||||
m_latch_read = 1;
|
||||
return m_latched_value;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( generic_latch_8_device::write )
|
||||
{
|
||||
machine().scheduler().synchronize(timer_expired_delegate(FUNC(generic_latch_8_device::sync_callback), this), data);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( generic_latch_8_device::preset_w )
|
||||
{
|
||||
m_latched_value = 0xff;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( generic_latch_8_device::clear_w )
|
||||
{
|
||||
m_latched_value = 0x00;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// soundlatch_sync_callback - time-delayed
|
||||
// callback to set a latch value
|
||||
//-------------------------------------------------
|
||||
|
||||
void generic_latch_8_device::sync_callback(void *ptr, INT32 param)
|
||||
{
|
||||
UINT8 value = param;
|
||||
|
||||
// if the latch hasn't been read and the value is changed, log a warning
|
||||
if (!m_latch_read && m_latched_value != value)
|
||||
logerror("Warning: latch %s written before being read. Previous: %02x, new: %02x\n", tag(), m_latched_value, value);
|
||||
|
||||
// store the new value and mark it not read
|
||||
m_latched_value = value;
|
||||
m_latch_read = 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void generic_latch_8_device::device_start()
|
||||
{
|
||||
// register for state saving
|
||||
save_item(NAME(m_latched_value));
|
||||
save_item(NAME(m_latch_read));
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type GENERIC_LATCH_16 = &device_creator<generic_latch_16_device>;
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// generic_latch_16_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
generic_latch_16_device::generic_latch_16_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, GENERIC_LATCH_16, "Generic 16-bit latch", tag, owner, clock, "generic_latch_16", __FILE__),
|
||||
m_latched_value(0),
|
||||
m_latch_read(0)
|
||||
{
|
||||
}
|
||||
|
||||
READ16_MEMBER( generic_latch_16_device::read )
|
||||
{
|
||||
m_latch_read = 1;
|
||||
return m_latched_value;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( generic_latch_16_device::write )
|
||||
{
|
||||
machine().scheduler().synchronize(timer_expired_delegate(FUNC(generic_latch_16_device::sync_callback), this), data);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( generic_latch_16_device::preset_w )
|
||||
{
|
||||
m_latched_value = 0xffff;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( generic_latch_16_device::clear_w )
|
||||
{
|
||||
m_latched_value = 0x0000;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// soundlatch_sync_callback - time-delayed
|
||||
// callback to set a latch value
|
||||
//-------------------------------------------------
|
||||
|
||||
void generic_latch_16_device::sync_callback(void *ptr, INT32 param)
|
||||
{
|
||||
UINT16 value = param;
|
||||
|
||||
// if the latch hasn't been read and the value is changed, log a warning
|
||||
if (!m_latch_read && m_latched_value != value)
|
||||
logerror("Warning: latch %s written before being read. Previous: %02x, new: %02x\n", tag(), m_latched_value, value);
|
||||
|
||||
// store the new value and mark it not read
|
||||
m_latched_value = value;
|
||||
m_latch_read = 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void generic_latch_16_device::device_start()
|
||||
{
|
||||
// register for state saving
|
||||
save_item(NAME(m_latched_value));
|
||||
save_item(NAME(m_latch_read));
|
||||
}
|
||||
|
||||
|
80
src/devices/machine/gen_latch.h
Normal file
80
src/devices/machine/gen_latch.h
Normal file
@ -0,0 +1,80 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Miodrag Milanovic
|
||||
/***************************************************************************
|
||||
|
||||
Generic 8bit and 16 bit latch devices
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __GEN_LATCH_H__
|
||||
#define __GEN_LATCH_H__
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_GENERIC_LATCH_8_ADD(_tag) \
|
||||
MCFG_DEVICE_ADD(_tag, GENERIC_LATCH_8, 0)
|
||||
|
||||
#define MCFG_GENERIC_LATCH_16_ADD(_tag) \
|
||||
MCFG_DEVICE_ADD(_tag, GENERIC_LATCH_16, 0)
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> generic_latch_8_device
|
||||
|
||||
class generic_latch_8_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
generic_latch_8_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
DECLARE_WRITE_LINE_MEMBER( preset_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( clear_w );
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
|
||||
void sync_callback(void *ptr, INT32 param);
|
||||
private:
|
||||
UINT16 m_latched_value;
|
||||
UINT8 m_latch_read;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
extern const device_type GENERIC_LATCH_8;
|
||||
|
||||
|
||||
// ======================> generic_latch_16_device
|
||||
|
||||
class generic_latch_16_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
generic_latch_16_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
DECLARE_READ16_MEMBER( read );
|
||||
DECLARE_WRITE16_MEMBER( write );
|
||||
DECLARE_WRITE_LINE_MEMBER( preset_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( clear_w );
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
|
||||
void sync_callback(void *ptr, INT32 param);
|
||||
private:
|
||||
UINT16 m_latched_value;
|
||||
UINT8 m_latch_read;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
extern const device_type GENERIC_LATCH_16;
|
||||
|
||||
|
||||
#endif /* __GEN_LATCH_H__ */
|
Loading…
Reference in New Issue
Block a user