summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/smpc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/smpc.h')
-rw-r--r--src/devices/machine/smpc.h88
1 files changed, 41 insertions, 47 deletions
diff --git a/src/devices/machine/smpc.h b/src/devices/machine/smpc.h
index e832cdd2558..dfe8d541be5 100644
--- a/src/devices/machine/smpc.h
+++ b/src/devices/machine/smpc.h
@@ -1,19 +1,20 @@
// license:LGPL-2.1+
// copyright-holders:Angelo Salese, R. Belmont
// TODO: make separate device when code is decoupled better
-//DECLARE_WRITE8_MEMBER( stv_SMPC_w );
-//DECLARE_READ8_MEMBER( stv_SMPC_r );
-//DECLARE_WRITE8_MEMBER( saturn_SMPC_w );
-//DECLARE_READ8_MEMBER( saturn_SMPC_r );
+//void stv_SMPC_w(offs_t offset, uint8_t data);
+//uint8_t stv_SMPC_r(offs_t offset);
+//void saturn_SMPC_w(offs_t offset, uint8_t data);
+//uint8_t saturn_SMPC_r(offs_t offset);
-#ifndef MAME_MACHINE_SMPC_HLE_H
-#define MAME_MACHINE_SMPC_HLE_H
+#ifndef MAME_MACHINE_SMPC_H
+#define MAME_MACHINE_SMPC_H
#pragma once
#include "screen.h"
#include "bus/sat_ctrl/ctrl.h"
#include "machine/nvram.h"
+#include "dirtc.h"
//**************************************************************************
@@ -23,16 +24,17 @@
// ======================> smpc_hle_device
class smpc_hle_device : public device_t,
- public device_memory_interface
+ public device_memory_interface,
+ public device_rtc_interface
{
public:
// construction/destruction
smpc_hle_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// I/O operations
-// void io_map(address_map &map);
- DECLARE_READ8_MEMBER( read );
- DECLARE_WRITE8_MEMBER( write );
+// void io_map(address_map &map) ATTR_COLD;
+ uint8_t read(offs_t offset);
+ void write(offs_t offset, uint8_t data);
DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi_r );
@@ -83,21 +85,19 @@ public:
protected:
// device-level overrides
// virtual void device_validity_check(validity_checker &valid) const override;
- virtual void device_add_mconfig(machine_config &config) override;
- 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;
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
virtual space_config_vector memory_space_config() const override;
+ // device_rtc_interface overrides
+ virtual bool rtc_feature_y2k() const override { return true; }
+ virtual bool rtc_feature_leap_year() const override { return true; }
+ virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
+
private:
const address_space_config m_space_config;
- enum {
- COMMAND_ID = 1,
- RTC_ID,
- INTBACK_ID,
- SNDRES_ID
- };
emu_timer *m_cmd_timer;
emu_timer *m_rtc_timer;
@@ -142,8 +142,10 @@ private:
void irq_request();
void resolve_intback();
- void intback_continue_request();
- void handle_rtc_increment();
+ TIMER_CALLBACK_MEMBER(intback_continue_request);
+ TIMER_CALLBACK_MEMBER(handle_rtc_increment);
+ TIMER_CALLBACK_MEMBER(sound_reset);
+ TIMER_CALLBACK_MEMBER(handle_command);
void read_saturn_ports();
void sr_set(uint8_t data);
@@ -175,34 +177,26 @@ private:
required_device<screen_device> m_screen;
- void smpc_regs(address_map &map);
-
- DECLARE_WRITE8_MEMBER( ireg_w );
- DECLARE_WRITE8_MEMBER( command_register_w );
- DECLARE_READ8_MEMBER( oreg_r );
- DECLARE_READ8_MEMBER( status_register_r );
- DECLARE_WRITE8_MEMBER( status_flag_w );
- DECLARE_READ8_MEMBER( status_flag_r );
- DECLARE_READ8_MEMBER( pdr1_r );
- DECLARE_READ8_MEMBER( pdr2_r );
- DECLARE_WRITE8_MEMBER( pdr1_w );
- DECLARE_WRITE8_MEMBER( pdr2_w );
- DECLARE_WRITE8_MEMBER( ddr1_w );
- DECLARE_WRITE8_MEMBER( ddr2_w );
- DECLARE_WRITE8_MEMBER( iosel_w );
- DECLARE_WRITE8_MEMBER( exle_w );
+ void smpc_regs(address_map &map) ATTR_COLD;
+
+ void ireg_w(offs_t offset, uint8_t data);
+ void command_register_w(uint8_t data);
+ uint8_t oreg_r(offs_t offset);
+ uint8_t status_register_r();
+ void status_flag_w(uint8_t data);
+ uint8_t status_flag_r();
+ uint8_t pdr1_r();
+ uint8_t pdr2_r();
+ void pdr1_w(uint8_t data);
+ void pdr2_w(uint8_t data);
+ void ddr1_w(uint8_t data);
+ void ddr2_w(uint8_t data);
+ void iosel_w(uint8_t data);
+ void exle_w(uint8_t data);
};
// device type definition
DECLARE_DEVICE_TYPE(SMPC_HLE, smpc_hle_device)
-
-
-//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
-
-#endif // MAME_MACHINE_SMPC_HLE_H
-
+#endif // MAME_MACHINE_SMPC_H