summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/machine/mmboard.cpp
blob: c784c23a736530e61b42c54bce3ed053045362c9 (plain) (tree)
1
2
3
4
5
6
7
8
9



                                                                       
                                                                   



           

                                                                                 




                                                                      
 

                                                                                                              
                                                                                                              
 
                                                   
               

                                                   
                                                                                                                                          


                                                    
                                       
                                                 
                               
 

 
                                                                                                                                        
                                                                                   
 

 
                                                                                                                                        
                                                                                   
 

 
 
                                                   
                      

                                                   
                                                                              
 
                                                        

 
                                                                              
 
                                                        
 
 
                                                                                                      
 




                                                                                
 
 
 





                                                   
                            
 


                       
                               
                                    

                                          

 
 





                                                   
                     
                          
                         
 
 




                                                   
                                                                  
 
                            
                                                                        

 
                                   
 
                       
 
                                   
                                   
                                                       



                    
                                 



                     
                                          

                     
                         

 
                                          
 
                          
                         
 
// license:BSD-3-Clause
// copyright-holders:Sandro Ronco
/**********************************************************************

Hegener + Glaser Mephisto Sensors Board, for modular chesscomputers
- Modular
- Muenchen
- Exclusive

This device can also apply to non-modular boards if I/O is similar
Bavaria board is not emulated here, additional handlers for it are in the driver.

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

#include "emu.h"
#include "mmboard.h"


DEFINE_DEVICE_TYPE(MEPHISTO_SENSORS_BOARD, mephisto_sensors_board_device, "msboard", "Mephisto Sensors Board")
DEFINE_DEVICE_TYPE(MEPHISTO_BUTTONS_BOARD, mephisto_buttons_board_device, "mbboard", "Mephisto Buttons Board")

//-------------------------------------------------
//  constructor
//-------------------------------------------------

mephisto_board_device::mephisto_board_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
	: device_t(mconfig, type, tag, owner, clock)
	, m_board(*this, "board")
	, m_led_pwm(*this, "led_pwm")
	, m_led_out(*this, "led%u", 0U)
	, m_sensordelay(attotime::from_msec(150))
	, m_disable_leds(false)
{
}

mephisto_sensors_board_device::mephisto_sensors_board_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
	: mephisto_board_device(mconfig, MEPHISTO_SENSORS_BOARD, tag, owner, clock)
{
}

mephisto_buttons_board_device::mephisto_buttons_board_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
	: mephisto_board_device(mconfig, MEPHISTO_BUTTONS_BOARD, tag, owner, clock)
{
}


//-------------------------------------------------
//  device_add_mconfig
//-------------------------------------------------

void mephisto_sensors_board_device::device_add_mconfig(machine_config &config)
{
	set_config(config, sensorboard_device::MAGNETS);
}

void mephisto_buttons_board_device::device_add_mconfig(machine_config &config)
{
	set_config(config, sensorboard_device::BUTTONS);
}

void mephisto_board_device::set_config(machine_config &config, sensorboard_device::sb_type board_type)
{
	SENSORBOARD(config, m_board).set_type(board_type);
	m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));

	PWM_DISPLAY(config, m_led_pwm).set_size(8, 8);
	m_led_pwm->output_x().set(FUNC(mephisto_board_device::refresh_leds_w));
}


//-------------------------------------------------
//  device_start - device-specific startup
//-------------------------------------------------

void mephisto_board_device::device_start()
{
	m_led_out.resolve();

	m_mux = 0xff;
	m_led_data = 0;

	save_item(NAME(m_mux));
	save_item(NAME(m_led_data));

	m_board->set_delay(m_sensordelay);
}


//-------------------------------------------------
//  device_reset - device-specific reset
//-------------------------------------------------

void mephisto_board_device::device_reset()
{
	m_mux = 0xff;
	m_led_data = 0x00;
	update_led_pwm();
}


//-------------------------------------------------
//  I/O handlers
//-------------------------------------------------

void mephisto_board_device::refresh_leds_w(offs_t offset, u8 data)
{
	if (!m_disable_leds)
		m_led_out[(offset >> 6 & 7) | (offset & 7) << 3] = data;
}

u8 mephisto_board_device::input_r()
{
	u8 data = 0xff;

	for (int i = 0; i < 8; i++)
		if (!BIT(m_mux, i))
			data &= ~m_board->read_rank(i);

	return data;
}

u8 mephisto_board_device::mux_r()
{
	return m_mux;
}

void mephisto_board_device::mux_w(u8 data)
{
	m_mux = data;
	update_led_pwm();
}

void mephisto_board_device::led_w(u8 data)
{
	m_led_data = data;
	update_led_pwm();
}