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

                                                                                               
 
                                                          
 
                                                                                                
 



                              
 

 







                                                                            
                                                                   

 
































                                                                    
                                                               




























                                                        



                                                                            
 


                                      
                                                                                                   
 
                                                                
 

                                        

                                         
                                         
 
                                     

                                              
 
          

                                                                                                                     
                                 
                                             
 
                                    
 
                         
                                      
                            
                         
 





                                                       
 

                                              

                 


                                                     

  



                                           
                                                                                                  
 

                                 
                                             

  
 

                                            
 
                                
// license:BSD-3-Clause
// copyright-holders:hap, Couriersud
/**********************************************************************************************

    Texas Instruments TMS6100 Voice Synthesis Memory (VSM)

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

#ifndef MAME_MACHINE_TMS6100_H
#define MAME_MACHINE_TMS6100_H

#pragma once



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

// 4-bit mode (mask option)
// note: in 4-bit mode, use data_r, otherwise use data_line_r

#define MCFG_TMS6100_4BIT_MODE() \
	downcast<tms6100_device &>(*device).enable_4bit_mode(true);


// pinout reference

/*
    TMS6100:
                 +-----------------+
       VDD       |  1           28 |  NC
       NC        |  2           27 |  NC
       DATA/ADD1 |  3           26 |  NC
       DATA/ADD2 |  4           25 |  NC
       DATA/ADD4 |  5           24 |  NC
       DATA/ADD8 |  6           23 |  NC
       CLK       |  7           22 |  NC
       NC        |  8           21 |  NC
       NC        |  9           20 |  NC
       M0        | 10           19 |  NC
       M1        | 11           18 |  NC
       NC        | 12           17 |  NC
       /CS       | 13           16 |  NC
       VSS       | 14           15 |  NC
                 +-----------------+


    TMS6125: two types known

                 +---------+                        +---------+
       DATA/ADD1 | 1    16 |  NC          DATA/ADD1 | 1    16 |  NC
       DATA/ADD2 | 2    15 |  NC          DATA/ADD2 | 2    15 |  NC
       DATA/ADD4 | 3    14 |  NC          DATA/ADD4 | 3    14 |  NC
       RCK       | 4    13 |  NC          DATA/ADD8 | 4    13 |  NC
       CLK       | 5    12 |  VDD         CLK       | 5    12 |  VDD
       DATA/ADD8 | 6    11 |  CS          NC        | 6    11 |  /CS
       NC        | 7    10 |  M1          NC        | 7    10 |  M1
       M0        | 8     9 |  VSS         M0        | 8     9 |  VSS
                 +---------+                        +---------+


    Mitsubishi M58819S EPROM Interface:
    It is a clone of TMS6100, but external EPROM instead

                 +-----------------+
       AD0       |  1           40 |  AD1
       VDDl      |  2           39 |  AD2
       VDD       |  3           38 |  AD3
       A0        |  4           37 |  NC
       NC        |  5           36 |  AD4
       NC        |  6           35 |  AD5
       A1        |  7           34 |  AD6
       A2        |  8           33 |  AD7
       A3/Q      |  9           32 |  AD8
       CLK       | 10           31 |  AD9
       POW       | 11           30 |  AD10
       SL        | 12           29 |  AD11
       C0        | 13           28 |  AD12
       C1        | 14           27 |  AD13
       NC        | 15           26 |  D7
       NC        | 16           25 |  NC
       VSS       | 17           24 |  D6
       D0        | 18           23 |  D5
       D1        | 19           22 |  D4
       D2        | 20           21 |  D3
                 +-----------------+
*/


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

class tms6100_device : public device_t
{
public:
	tms6100_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);

	void enable_4bit_mode(bool mode) { m_4bit_mode = mode; }

	DECLARE_WRITE_LINE_MEMBER(m0_w);
	DECLARE_WRITE_LINE_MEMBER(m1_w);
	DECLARE_WRITE_LINE_MEMBER(rck_w);
	DECLARE_WRITE_LINE_MEMBER(cs_w);
	DECLARE_WRITE_LINE_MEMBER(clk_w);

	DECLARE_WRITE8_MEMBER(add_w);
	DECLARE_READ8_MEMBER(data_r); // 4bit
	DECLARE_READ_LINE_MEMBER(data_line_r);

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

	// device-level overrides
	virtual void device_start() override;

	void handle_command(u8 cmd);

	// internal state
	required_region_ptr<u8> m_rom;
	bool m_reverse_bits;
	bool m_4bit_mode;

	u32 m_rommask;
	u32 m_address; // internal address + chipselect
	u8 m_sa;       // romdata shift register
	u8 m_count;    // TB/LA counter (-> PLA)
	u8 m_prev_cmd; // previous handled command
	u8 m_prev_m;   // previous valid m0/m1 state

	u8 m_add;      // ADD/DATA pins input
	u8 m_data;     // ADD/DATA pins output
	int m_m0;
	int m_m1;
	int m_cs;      // chipselect pin
	int m_clk;     // CLK pin
	int m_rck;     // RCK pin (mask/gate to CLK?)
};


class m58819_device : public tms6100_device
{
public:
	m58819_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);

protected:
	// device-level overrides
	virtual void device_start() override;
};


DECLARE_DEVICE_TYPE(TMS6100, tms6100_device)
DECLARE_DEVICE_TYPE(M58819,  m58819_device)

#endif // MAME_MACHINE_TMS6100_H