// license:BSD-3-Clause
// copyright-holders:David Haywood
#pragma once
#ifndef __SEGACRP2_Z80__
#define __SEGACRP2_Z80__
#define MCFG_SEGAZ80_SET_DECRYPTED_TAG(_tag) \
segacrp2_z80_device::set_decrypted_tag(*device, _tag);
#include "emu.h"
#include "cpu/z80/z80.h"
// base class
class segacrp2_z80_device : public z80_device
{
public:
segacrp2_z80_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
static void set_decrypted_tag(device_t &device, const char* decrypted_tag);
const char* m_decrypted_tag;
protected:
virtual void device_start() override;
virtual void device_reset() override;
virtual void decrypt();
};
// actual encrypted CPUs
class sega_315_5179_device : public segacrp2_z80_device
{
public:
sega_315_5179_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
virtual void decrypt() override;
};
class sega_315_5178_device : public segacrp2_z80_device
{
public:
sega_315_5178_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
virtual void decrypt() override;
};
class sega_315_5177_device : public segacrp2_z80_device
{
public:
sega_315_5177_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
virtual void decrypt() override;
};
class sega_315_5176_device : public segacrp2_z80_device
{
public:
sega_315_5176_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
virtual void decrypt() override;
};
class sega_315_5162_device : public segacrp2_z80_device
{
public:
sega_315_5162_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
virtual void decrypt() override;
};
class sega_317_0004_device : public segacrp2_z80_device
{
public:
sega_317_0004_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
virtual void decrypt() override;
};
class sega_317_0005_device : public segacrp2_z80_device
{
public:
sega_317_0005_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
virtual void decrypt() override;
};
class sega_317_0006_device : public segacrp2_z80_device
{
public:
sega_317_0006_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
virtual void decrypt() override;
};
class sega_317_0007_device : public segacrp2_z80_device
{
public:
sega_317_0007_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
virtual void decrypt() override;
};
extern const device_type SEGACRP2_Z80;
extern const device_type SEGA_315_5179;
extern const device_type SEGA_315_5178;
extern const device_type SEGA_315_5177;
extern const device_type SEGA_315_5176;
extern const device_type SEGA_315_5162;
extern const device_type SEGA_317_0004;
extern const device_type SEGA_317_0005;
extern const device_type SEGA_317_0006;
extern const device_type SEGA_317_0007;
#endif /// __SEGACRP2_Z80__