summaryrefslogblamecommitdiffstatshomepage
path: root/src/devices/machine/timekpr.h
blob: c0f7fcdc83aa4d581ace87a1e7494aeda8a497fa (plain) (tree)
1
2
3
4
5
6
7
8
9

                                    
                                                                            
 
             
 
                                                                

                
                

                 
                 
 
                                                                            
 

                              
 
            
 
 
 
 


                                                                            
 
                                           
                                                                                 

                                         
                                                                               
 





                                                                            

                                            
                                                                        
 
       

                                       
                                              

                                                                                                                                        

          


                                                                                                                                       
                                 


                                                                                                       

                                           


                                                          
 



                                                 



                                 
                         











                                                    
 

                                    
          
                         
                              











                             


                                              
                                                                                                       




                                              
                                                                                                       




                                              
                                                                                                       




                                              
                                                                                                       




                                               
                                                                                                        
  
 


                                               
                                                                                                        

  
                         







                                            
// license:BSD-3-Clause
// copyright-holders:Aaron Giles,smf
/***************************************************************************

    timekpr.h

    Various ST Microelectronics timekeeper SRAM implementations:
        - M48T02
        - M48T35
        - M48T37
        - M48T58
        - MK48T08
        - MK48T12

***************************************************************************/

#ifndef MAME_MACHINE_TIMEKPR_H
#define MAME_MACHINE_TIMEKPR_H

#pragma once




//**************************************************************************
//  INTERFACE CONFIGURATION MACROS
//**************************************************************************

#define MCFG_M48T37_RESET_HANDLER(_devcb) \
	downcast<timekeeper_device &>(*device).set_reset_handler(DEVCB_##_devcb);

#define MCFG_M48T37_IRQ_HANDLER(_devcb) \
	downcast<timekeeper_device &>(*device).set_irq_handler(DEVCB_##_devcb);


//**************************************************************************
//  TYPE DEFINITIONS
//**************************************************************************


// ======================> timekeeper_device

class timekeeper_device : public device_t, public device_nvram_interface
{
public:
	DECLARE_WRITE8_MEMBER( write );
	DECLARE_READ8_MEMBER( read );
	DECLARE_WRITE8_MEMBER(watchdog_write);
	template <class Object> devcb_base &set_reset_handler(Object &&cb) { return m_reset_cb.set_callback(std::forward<Object>(cb)); }
	template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_cb.set_callback(std::forward<Object>(cb)); }

protected:
	// construction/destruction
	timekeeper_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int size);

	// device-level overrides
	virtual void device_start() override;
	virtual void device_reset() override;
	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) 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;

	TIMER_CALLBACK_MEMBER(watchdog_callback);
	devcb_write_line m_reset_cb;
	devcb_write_line m_irq_cb;

private:
	void counters_to_ram();
	void counters_from_ram();

	// internal state
	uint8_t m_control;
	uint8_t m_seconds;
	uint8_t m_minutes;
	uint8_t m_hours;
	uint8_t m_day;
	uint8_t m_date;
	uint8_t m_month;
	uint8_t m_year;
	uint8_t m_century;

	std::vector<uint8_t> m_data;
	optional_region_ptr<uint8_t> m_default_data;

	emu_timer* m_watchdog_timer;
	attotime m_watchdog_delay;
protected:
	int const m_size;
	int m_offset_watchdog;
	int m_offset_control;
	int m_offset_seconds;
	int m_offset_minutes;
	int m_offset_hours;
	int m_offset_day;
	int m_offset_date;
	int m_offset_month;
	int m_offset_year;
	int m_offset_century;
	int m_offset_flags;
};

class m48t02_device : public timekeeper_device
{
public:
	m48t02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};

class m48t35_device : public timekeeper_device
{
public:
	m48t35_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};

class m48t37_device : public timekeeper_device
{
public:
	m48t37_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};

class m48t58_device : public timekeeper_device
{
public:
	m48t58_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};

class mk48t08_device : public timekeeper_device
{
public:
	mk48t08_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};

class mk48t12_device : public timekeeper_device
{
public:
	mk48t12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};

// device type definition
DECLARE_DEVICE_TYPE(M48T02,  m48t02_device)
DECLARE_DEVICE_TYPE(M48T35,  m48t35_device)
DECLARE_DEVICE_TYPE(M48T37,  m48t37_device)
DECLARE_DEVICE_TYPE(M48T58,  m48t58_device)
DECLARE_DEVICE_TYPE(MK48T08, mk48t08_device)
DECLARE_DEVICE_TYPE(MK48T12, mk48t12_device)

#endif // MAME_MACHINE_TIMEKPR_H