summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/machine/segacrpt_device.h
blob: 1c31d6a01161659e8a96b02eeb90c36c15040449 (plain) (tree)
1
2
3
4
5
6
7
8
9


                                  


                                       

            
                        


                                               
                                                                         

                                               
                                                                         

                                       
                                                                 

                                               
                                                                         

                                               
                                                                         

 



                                             




                                                                                              
 









                                                                                                                               
                                            

                                 


                          
 

                               






                                                       
                                                                                                        






                                                       
                                                                                                        






                                                       
                                                                                                        






                                                       
                                                                                                        






                                                       
                                                                                                        






                                                       
                                                                                                        






                                                       
                                                                                                        






                                                       
                                                                                                        







                                                       
                                                                                                        







                                                       
                                                                                                        






                                                       
                                                                                                        






                                                       
                                                                                                        

                                                                                                                                






                                                       
                                                                                                        






                                                       
                                                                                                        






                                                       
                                                                                                        






                                                       
                                                                                                        




                                        
                                                        

       
                                                                                                        

  
                                                       

       
                                                                                                        



                                        
                                                       

       
                                                                                                        



                                        
                                                       

       
                                                                                                        



                                        

 
                                                       

       
                                                                                                        



                                        
                                                       

       
                                                                                                        



                                        
 



                                                           
                                                                                                            



                                        
                                                       

       
                                                                                                        



                                        
                                                       

       
                                                                                                        




                                        























                                                                
                                                            


                                         
// license:BSD-3-Clause
// copyright-holders:David Haywood

#ifndef MAME_MACHINE_SEGACRYPT_DEVICE_H
#define MAME_MACHINE_SEGACRYPT_DEVICE_H

#pragma once

#include "cpu/z80/z80.h"


#define MCFG_SEGACRPT_SET_DECRYPTED_TAG(_tag) \
	downcast<segacrpt_z80_device &>(*device).set_decrypted_tag(_tag);

#define MCFG_SEGACRPT_SET_DECRYPTED_PTR(_tag) \
	downcast<segacrpt_z80_device &>(*device).set_decrypted_ptr(_ptr);

#define MCFG_SEGACRPT_SET_SIZE(_size) \
	downcast<segacrpt_z80_device &>(*device).set_size(_size);

#define MCFG_SEGACRPT_SET_NUMBANKS(_numbanks) \
	downcast<segacrpt_z80_device &>(*device).set_numbanks(_numbanks);

#define MCFG_SEGACRPT_SET_BANKSIZE(_banksize) \
	downcast<segacrpt_z80_device &>(*device).set_banksize(_banksize);


// base class
class segacrpt_z80_device : public z80_device
{
public:
	void set_decrypted_tag(const char* decrypted_tag) { m_decrypted_tag = decrypted_tag; }
	void set_decrypted_ptr(uint8_t* ptr) { m_decrypted_ptr = ptr; } // toprollr
	void set_size(int size) { m_decode_size = size; }
	void set_numbanks(int numbanks) { m_numbanks = numbanks; }
	void set_banksize(int banksize) { m_banksize = banksize; }

	void set_decrypted_p(uint8_t* ptr);
	void set_region_p(uint8_t* ptr);

protected:
	segacrpt_z80_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);

	virtual void device_start() override;
	virtual void device_reset() override;
	virtual void decrypt() = 0;

	const char*         m_decrypted_tag;
	uint8_t* m_decrypted_ptr;
	uint8_t* m_region_ptr;
	int m_decode_size;
	int m_numbanks;
	int m_banksize;

private:
	bool m_decryption_done;
};


// actual encrypted CPUs
class sega_315_5132_device : public segacrpt_z80_device
{
public:
	sega_315_5132_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5155_device : public segacrpt_z80_device
{
public:
	sega_315_5155_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5110_device : public segacrpt_z80_device
{
public:
	sega_315_5110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5135_device : public segacrpt_z80_device
{
public:
	sega_315_5135_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5051_device : public segacrpt_z80_device
{
public:
	sega_315_5051_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5098_device : public segacrpt_z80_device
{
public:
	sega_315_5098_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5102_device : public segacrpt_z80_device
{
public:
	sega_315_5102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5065_device : public segacrpt_z80_device
{
public:
	sega_315_5065_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};


class sega_315_5064_device : public segacrpt_z80_device
{
public:
	sega_315_5064_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};


class sega_315_5033_device : public segacrpt_z80_device
{
public:
	sega_315_5033_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5041_device : public segacrpt_z80_device
{
public:
	sega_315_5041_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5048_device : public segacrpt_z80_device
{
public:
	sega_315_5048_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
	sega_315_5048_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);

protected:
	virtual void decrypt() override;
};

class sega_315_5093_device : public segacrpt_z80_device
{
public:
	sega_315_5093_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5099_device : public segacrpt_z80_device
{
public:
	sega_315_5099_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_spat_device : public segacrpt_z80_device
{
public:
	sega_315_spat_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5015_device : public segacrpt_z80_device
{
public:
	sega_315_5015_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};


class sega_315_5133_device : public sega_315_5048_device
{
public:
	sega_315_5133_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
};

class sega_315_5014_device : public segacrpt_z80_device
{
public:
	sega_315_5014_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5013_device : public segacrpt_z80_device
{
public:
	sega_315_5013_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5061_device : public segacrpt_z80_device
{
public:
	sega_315_5061_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};



class sega_315_5018_device : public segacrpt_z80_device
{
public:
	sega_315_5018_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5010_device : public segacrpt_z80_device
{
public:
	sega_315_5010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};



class sega_cpu_pbactio4_device : public segacrpt_z80_device
{
public:
	sega_cpu_pbactio4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5028_device : public segacrpt_z80_device
{
public:
	sega_315_5028_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};

class sega_315_5084_device : public segacrpt_z80_device
{
public:
	sega_315_5084_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t);
protected:
	virtual void decrypt() override;
};


DECLARE_DEVICE_TYPE(SEGA_315_5132,     sega_315_5132_device)
DECLARE_DEVICE_TYPE(SEGA_315_5155,     sega_315_5155_device)
DECLARE_DEVICE_TYPE(SEGA_315_5110,     sega_315_5110_device)
DECLARE_DEVICE_TYPE(SEGA_315_5135,     sega_315_5135_device)
DECLARE_DEVICE_TYPE(SEGA_315_5051,     sega_315_5051_device)
DECLARE_DEVICE_TYPE(SEGA_315_5098,     sega_315_5098_device)
DECLARE_DEVICE_TYPE(SEGA_315_5102,     sega_315_5102_device)
DECLARE_DEVICE_TYPE(SEGA_315_5065,     sega_315_5065_device)
DECLARE_DEVICE_TYPE(SEGA_315_5064,     sega_315_5064_device)
DECLARE_DEVICE_TYPE(SEGA_315_5033,     sega_315_5033_device)
DECLARE_DEVICE_TYPE(SEGA_315_5041,     sega_315_5041_device)
DECLARE_DEVICE_TYPE(SEGA_315_5048,     sega_315_5048_device)
DECLARE_DEVICE_TYPE(SEGA_315_5093,     sega_315_5093_device)
DECLARE_DEVICE_TYPE(SEGA_315_5099,     sega_315_5099_device)
DECLARE_DEVICE_TYPE(SEGA_315_SPAT,     sega_315_spat_device)
DECLARE_DEVICE_TYPE(SEGA_315_5015,     sega_315_5015_device)
DECLARE_DEVICE_TYPE(SEGA_315_5133,     sega_315_5133_device)
DECLARE_DEVICE_TYPE(SEGA_315_5014,     sega_315_5014_device)
DECLARE_DEVICE_TYPE(SEGA_315_5013,     sega_315_5013_device)
DECLARE_DEVICE_TYPE(SEGA_315_5061,     sega_315_5061_device)
DECLARE_DEVICE_TYPE(SEGA_315_5018,     sega_315_5018_device)
DECLARE_DEVICE_TYPE(SEGA_315_5010,     sega_315_5010_device)
DECLARE_DEVICE_TYPE(SEGA_CPU_PBACTIO4, sega_cpu_pbactio4_device)
DECLARE_DEVICE_TYPE(SEGA_315_5028,     sega_315_5028_device)
DECLARE_DEVICE_TYPE(SEGA_315_5084,     sega_315_5084_device)


#endif // MAME_MACHINE_SEGACRYPT_DEVICE_H