mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
Added ICM7170 real-time clock device. [R. Belmont]
This commit is contained in:
parent
246b64ad0b
commit
8434fd6213
@ -1443,6 +1443,18 @@ if (MACHINES["I80130"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/icm7170.h,MACHINES["ICM7170"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (MACHINES["ICM7170"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/machine/icm7170.cpp",
|
||||
MAME_DIR .. "src/devices/machine/icm7170.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/idectrl.h,MACHINES["IDECTRL"] = true
|
||||
|
@ -511,6 +511,7 @@ MACHINES["I8271"] = true
|
||||
MACHINES["I8279"] = true
|
||||
MACHINES["I8291A"] = true
|
||||
MACHINES["I8355"] = true
|
||||
MACHINES["ICM7170"] = true
|
||||
MACHINES["IDECTRL"] = true
|
||||
MACHINES["IE15"] = true
|
||||
MACHINES["IM6402"] = true
|
||||
|
149
src/devices/machine/icm7170.cpp
Normal file
149
src/devices/machine/icm7170.cpp
Normal file
@ -0,0 +1,149 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:R. Belmont
|
||||
/**********************************************************************
|
||||
|
||||
Intersil/Renesas ICM7170 Real Time Clock
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "icm7170.h"
|
||||
#include "coreutil.h"
|
||||
|
||||
#define VERBOSE (1)
|
||||
#include "logmacro.h"
|
||||
|
||||
DEFINE_DEVICE_TYPE(ICM7170, icm7170_device, "icm7170", "Intersil/Renesas ICM7170 Real Time Clock")
|
||||
|
||||
// internal registers
|
||||
enum
|
||||
{
|
||||
REG_CNT_100TH_SEC = 0,
|
||||
REG_CNT_HOURS,
|
||||
REG_CNT_MINUTES,
|
||||
REG_CNT_SECONDS,
|
||||
REG_CNT_MONTH,
|
||||
REG_CNT_DAY,
|
||||
REG_CNT_YEAR,
|
||||
REG_CNT_DAY_OF_WEEK,
|
||||
REG_RAM_100TH_SEC,
|
||||
REG_RAM_HOURS,
|
||||
REG_RAM_MINUTES,
|
||||
REG_RAM_SECONDS,
|
||||
REG_RAM_MONTH,
|
||||
REG_RAM_DAY,
|
||||
REG_RAM_YEAR,
|
||||
REG_RAM_DAY_OF_WEEK,
|
||||
REG_INT_STATUS_MASK,
|
||||
REG_COMMAND
|
||||
};
|
||||
|
||||
static constexpr int ICM7170_TIMER_ID = 0;
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// icm7170_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
icm7170_device::icm7170_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, ICM7170, tag, owner, clock),
|
||||
device_rtc_interface(mconfig, *this),
|
||||
device_nvram_interface(mconfig, *this),
|
||||
m_out_irq_cb(*this)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void icm7170_device::device_start()
|
||||
{
|
||||
// resolve callbacks
|
||||
m_out_irq_cb.resolve_safe();
|
||||
|
||||
m_timer = timer_alloc(ICM7170_TIMER_ID);
|
||||
m_timer->adjust(attotime::never);
|
||||
|
||||
save_item(NAME(m_regs));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_timer - handles timer events
|
||||
//-------------------------------------------------
|
||||
|
||||
void icm7170_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rtc_clock_updated - called when the host time changes
|
||||
//-------------------------------------------------
|
||||
|
||||
void icm7170_device::rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// nvram_default - called to initialize NVRAM to
|
||||
// its default state
|
||||
//-------------------------------------------------
|
||||
|
||||
void icm7170_device::nvram_default()
|
||||
{
|
||||
memset(m_regs, 0, 0x20);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// nvram_read - called to read NVRAM from the
|
||||
// .nv file
|
||||
//-------------------------------------------------
|
||||
|
||||
void icm7170_device::nvram_read(emu_file &file)
|
||||
{
|
||||
file.read(m_regs, 0x20);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// nvram_write - called to write NVRAM to the
|
||||
// .nv file
|
||||
//-------------------------------------------------
|
||||
|
||||
void icm7170_device::nvram_write(emu_file &file)
|
||||
{
|
||||
file.write(m_regs, 0x20);
|
||||
}
|
||||
|
||||
// non-inherited device functions
|
||||
READ8_MEMBER( icm7170_device::read )
|
||||
{
|
||||
uint8_t data = m_regs[offset & 0x1f];
|
||||
|
||||
LOG("ICM7170 Register %d Read %02x\n", offset, data);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( icm7170_device::write )
|
||||
{
|
||||
switch (offset & 0x1f)
|
||||
{
|
||||
default:
|
||||
m_regs[offset & 0x1f] = data;
|
||||
LOG("ICM7170 Register %d Write %02x\n", offset & 0x1f, data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void icm7170_device::recalc_irqs()
|
||||
{
|
||||
}
|
||||
|
85
src/devices/machine/icm7170.h
Normal file
85
src/devices/machine/icm7170.h
Normal file
@ -0,0 +1,85 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:R. Belmont
|
||||
/**********************************************************************
|
||||
|
||||
Intersil/Renesas ICM7170 Real Time Clock
|
||||
|
||||
**********************************************************************
|
||||
PDIP package:
|
||||
_____ _____
|
||||
_WR 1 | \_/ | 24 _RD
|
||||
ALE 2 | | 23 VDD
|
||||
_CS 3 | | 22 D7
|
||||
A4 4 | ICM7170 | 21 D6
|
||||
A3 5 | | 20 D5
|
||||
A2 6 | | 19 D4
|
||||
A1 7 | | 18 D3
|
||||
A0 8 | | 17 D2
|
||||
OSC OUT 9 | | 16 D1
|
||||
OSC IN 10 | | 15 D0
|
||||
INT SOURCE 11 | | 14 VBACKUP
|
||||
/INTERRUPT 12 |_____________| 13 VSS (GND)
|
||||
|
||||
SOIC package:
|
||||
_____ _____
|
||||
A1 1 | \_/ | 24 A2
|
||||
A0 2 | | 23 A3
|
||||
OSC OUT 3 | | 22 A4
|
||||
OSC IN 4 | ICM7170 | 21 _CS
|
||||
INT SOURCE 5 | | 20 ALE
|
||||
/INTERRUPT 6 | | 19 _WR
|
||||
VSS 7 | | 18 _RD
|
||||
VBACKUP 8 | | 17 VDD
|
||||
D0 9 | | 16 D7
|
||||
D1 10 | | 15 D6
|
||||
D2 11 | | 14 D5
|
||||
D3 12 |_____________| 13 D4
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef MAME_MACHINE_ICM7170_H
|
||||
#define MAME_MACHINE_ICM7170_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "dirtc.h"
|
||||
|
||||
class icm7170_device : public device_t,
|
||||
public device_rtc_interface,
|
||||
public device_nvram_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
icm7170_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
auto irq() { return m_out_irq_cb.bind(); }
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
// device_rtc_interface overrides
|
||||
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
|
||||
|
||||
// device_nvram_interface overrides
|
||||
virtual void nvram_default() override;
|
||||
virtual void nvram_read(emu_file &file) override;
|
||||
virtual void nvram_write(emu_file &file) override;
|
||||
|
||||
private:
|
||||
void recalc_irqs();
|
||||
|
||||
devcb_write_line m_out_irq_cb;
|
||||
|
||||
uint8_t m_regs[0x20];
|
||||
|
||||
emu_timer *m_timer;
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(ICM7170, icm7170_device)
|
||||
|
||||
#endif // MAME_MACHINE_ICM7170_H
|
@ -59,6 +59,7 @@
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/mcs51/mcs51.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/icm7170.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/timer.h"
|
||||
#include "video/bt47x.h"
|
||||
@ -78,7 +79,8 @@ public:
|
||||
m_iocpu(*this, "iocpu"),
|
||||
m_mainram(*this, "extram"),
|
||||
m_extram(*this, "extram"),
|
||||
m_vram(*this, "vram")
|
||||
m_vram(*this, "vram"),
|
||||
m_rtc(*this, "rtc")
|
||||
{ }
|
||||
|
||||
void wxstar4k(machine_config &config);
|
||||
@ -102,6 +104,7 @@ private:
|
||||
optional_device<m68010_device> m_maincpu, m_gfxcpu;
|
||||
optional_device<mcs51_cpu_device> m_gfxsubcpu, m_datacpu, m_iocpu;
|
||||
optional_shared_ptr<uint16_t> m_mainram, m_extram, m_vram;
|
||||
required_device<icm7170_device> m_rtc;
|
||||
|
||||
DECLARE_READ16_MEMBER(buserr_r)
|
||||
{
|
||||
@ -255,6 +258,8 @@ void wxstar4k_state::wxstar4k(machine_config &config)
|
||||
screen.set_palette("palette");
|
||||
|
||||
PALETTE(config, "palette").set_format(palette_device::xBGR_888, 256);
|
||||
|
||||
ICM7170(config, m_rtc, XTAL(32'768));
|
||||
}
|
||||
|
||||
ROM_START( wxstar4k )
|
||||
|
Loading…
Reference in New Issue
Block a user