mirror of
https://github.com/holub/mame
synced 2025-07-05 18:08:04 +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",
|
MAME_DIR .. "src/devices/machine/genpc.h",
|
||||||
}
|
}
|
||||||
end
|
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["PCI9050"] = true
|
||||||
--MACHINES["TMS1024"] = true
|
--MACHINES["TMS1024"] = true
|
||||||
MACHINES["GENPC"] = true
|
MACHINES["GENPC"] = true
|
||||||
|
MACHINES["GEN_LATCH"] = true
|
||||||
|
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
-- specify available bus cores
|
-- specify available bus cores
|
||||||
|
@ -574,6 +574,7 @@ MACHINES["TMS1024"] = true
|
|||||||
MACHINES["NSC810"] = true
|
MACHINES["NSC810"] = true
|
||||||
MACHINES["VT82C496"] = true
|
MACHINES["VT82C496"] = true
|
||||||
MACHINES["GENPC"] = true
|
MACHINES["GENPC"] = true
|
||||||
|
MACHINES["GEN_LATCH"] = true
|
||||||
|
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
-- specify available bus cores
|
-- 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