mirror of
https://github.com/holub/mame
synced 2025-06-27 22:54:42 +03:00
Converted the Konami System 573 Security Cassettes to use slots. The current setting is no longer saved, so the default cassette is "game". Some games have additional I/O connected via the security cassette, which is now hooked up when the cassette is loaded instead of patched directly into the memory map. If the game has a separate "install" cassette then you need to select this and hard reset (shift+F3 or select reset from the slot menu) before it will let you install from the CD. [smf]
This commit is contained in:
parent
9910ce0ecc
commit
fd4a360e4d
File diff suppressed because it is too large
Load Diff
@ -1,19 +1,517 @@
|
||||
/*
|
||||
* Konami 573 Security Cassette
|
||||
*
|
||||
*/
|
||||
|
||||
#include "k573cass.h"
|
||||
|
||||
const device_type KONAMI573CASSETTE = &device_creator<konami573cassette_device>;
|
||||
|
||||
konami573cassette_device::konami573cassette_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
psxsiodev_device(mconfig, KONAMI573CASSETTE, "KONAMI 573 CASSETTE", tag, owner, clock, "konami573", __FILE__)
|
||||
WRITE_LINE_MEMBER(konami573_cassette_interface::write_line_d0)
|
||||
{
|
||||
}
|
||||
|
||||
void konami573cassette_device::device_start()
|
||||
WRITE_LINE_MEMBER(konami573_cassette_interface::write_line_d4)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_interface::write_line_d5)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_interface::write_line_d6)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_interface::write_line_d7)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_interface::write_line_zs01_sda)
|
||||
{
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_interface::read_line_dsr)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_interface::read_line_ds2401)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_interface::read_line_adc083x_do)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_interface::read_line_adc083x_sars)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
const device_type KONAMI573_CASSETTE_X = &device_creator<konami573_cassette_x_device>;
|
||||
|
||||
konami573_cassette_x_device::konami573_cassette_x_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, KONAMI573_CASSETTE_X, "KONAMI 573 CASSETTE X", tag, owner, clock, "sys573", __FILE__),
|
||||
device_slot_card_interface(mconfig, *this),
|
||||
m_x76f041(*this, "eeprom")
|
||||
{
|
||||
}
|
||||
|
||||
konami573_cassette_x_device::konami573_cassette_x_device(const machine_config &mconfig, const device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
|
||||
device_t(mconfig, type, name, tag, owner, clock, shortname, __FILE__),
|
||||
device_slot_card_interface(mconfig, *this),
|
||||
m_x76f041(*this, "eeprom")
|
||||
{
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( cassx )
|
||||
MCFG_X76F041_ADD( "eeprom" )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor konami573_cassette_x_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( cassx );
|
||||
}
|
||||
|
||||
void konami573_cassette_x_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_x_device::write_line_d0)
|
||||
{
|
||||
m_x76f041->sda_w( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_x_device::write_line_d1)
|
||||
{
|
||||
m_x76f041->scl_w( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_x_device::write_line_d2)
|
||||
{
|
||||
m_x76f041->cs_w( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_x_device::write_line_d3)
|
||||
{
|
||||
m_x76f041->rst_w( state );
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_x_device::read_line_secflash_sda)
|
||||
{
|
||||
return m_x76f041->sda_r();
|
||||
}
|
||||
|
||||
|
||||
const device_type KONAMI573_CASSETTE_XI = &device_creator<konami573_cassette_xi_device>;
|
||||
|
||||
konami573_cassette_xi_device::konami573_cassette_xi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
konami573_cassette_x_device(mconfig, KONAMI573_CASSETTE_XI, "KONAMI 573 CASSETTE XI", tag, owner, clock, "sys573", __FILE__),
|
||||
m_ds2401(*this, "id"),
|
||||
m_adc0838(*this, "adc0838")
|
||||
{
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( cassxi )
|
||||
MCFG_X76F041_ADD( "eeprom" )
|
||||
MCFG_DS2401_ADD( "id" )
|
||||
MCFG_DEVICE_ADD( "adc0838", ADC0838, 0 )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor konami573_cassette_xi_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( cassxi );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_xi_device::write_line_d0)
|
||||
{
|
||||
konami573_cassette_x_device::write_line_d0( state ); // shares line with x76f041 sda
|
||||
|
||||
m_adc0838->cs_write( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_xi_device::write_line_d1)
|
||||
{
|
||||
konami573_cassette_x_device::write_line_d1( state ); // shares line with x76f041 scl
|
||||
|
||||
m_adc0838->clk_write( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_xi_device::write_line_d4)
|
||||
{
|
||||
m_ds2401->write( !state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_xi_device::write_line_d5)
|
||||
{
|
||||
m_adc0838->di_write( state );
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_xi_device::read_line_ds2401)
|
||||
{
|
||||
return m_ds2401->read();
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_xi_device::read_line_adc083x_do)
|
||||
{
|
||||
return m_adc0838->do_read();
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_xi_device::read_line_adc083x_sars)
|
||||
{
|
||||
return m_adc0838->sars_read();
|
||||
}
|
||||
|
||||
|
||||
const device_type KONAMI573_CASSETTE_Y = &device_creator<konami573_cassette_y_device>;
|
||||
|
||||
konami573_cassette_y_device::konami573_cassette_y_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, KONAMI573_CASSETTE_Y, "KONAMI 573 CASSETTE Y", tag, owner, clock, "sys573", __FILE__),
|
||||
device_slot_card_interface(mconfig, *this),
|
||||
m_x76f100(*this, "eeprom"),
|
||||
m_d0_handler(*this),
|
||||
m_d1_handler(*this),
|
||||
m_d2_handler(*this),
|
||||
m_d3_handler(*this),
|
||||
m_d4_handler(*this),
|
||||
m_d5_handler(*this),
|
||||
m_d6_handler(*this),
|
||||
m_d7_handler(*this)
|
||||
{
|
||||
}
|
||||
|
||||
konami573_cassette_y_device::konami573_cassette_y_device(const machine_config &mconfig, const device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
|
||||
device_t(mconfig, type, name, tag, owner, clock, shortname, __FILE__),
|
||||
device_slot_card_interface(mconfig, *this),
|
||||
m_x76f100(*this, "eeprom"),
|
||||
m_d0_handler(*this),
|
||||
m_d1_handler(*this),
|
||||
m_d2_handler(*this),
|
||||
m_d3_handler(*this),
|
||||
m_d4_handler(*this),
|
||||
m_d5_handler(*this),
|
||||
m_d6_handler(*this),
|
||||
m_d7_handler(*this)
|
||||
{
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( cassy )
|
||||
MCFG_X76F100_ADD( "eeprom" )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor konami573_cassette_y_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( cassy );
|
||||
}
|
||||
|
||||
void konami573_cassette_y_device::device_start()
|
||||
{
|
||||
m_d0_handler.resolve_safe();
|
||||
m_d1_handler.resolve_safe();
|
||||
m_d2_handler.resolve_safe();
|
||||
m_d3_handler.resolve_safe();
|
||||
m_d4_handler.resolve_safe();
|
||||
m_d5_handler.resolve_safe();
|
||||
m_d6_handler.resolve_safe();
|
||||
m_d7_handler.resolve_safe();
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_y_device::read_line_secflash_sda)
|
||||
{
|
||||
return m_x76f100->sda_r();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_y_device::write_line_d0)
|
||||
{
|
||||
m_d0_handler( state );
|
||||
m_x76f100->sda_w( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_y_device::write_line_d1)
|
||||
{
|
||||
m_d1_handler( state );
|
||||
m_x76f100->scl_w( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_y_device::write_line_d2)
|
||||
{
|
||||
m_d2_handler( state );
|
||||
m_x76f100->cs_w( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_y_device::write_line_d3)
|
||||
{
|
||||
m_d3_handler( state );
|
||||
m_x76f100->rst_w( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_y_device::write_line_d4)
|
||||
{
|
||||
m_d4_handler( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_y_device::write_line_d5)
|
||||
{
|
||||
m_d5_handler( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_y_device::write_line_d6)
|
||||
{
|
||||
m_d6_handler( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_y_device::write_line_d7)
|
||||
{
|
||||
m_d7_handler( state );
|
||||
}
|
||||
|
||||
|
||||
const device_type KONAMI573_CASSETTE_YI = &device_creator<konami573_cassette_yi_device>;
|
||||
|
||||
konami573_cassette_yi_device::konami573_cassette_yi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
konami573_cassette_y_device(mconfig, KONAMI573_CASSETTE_YI, "KONAMI 573 CASSETTE YI", tag, owner, clock, "sys573", __FILE__),
|
||||
m_ds2401(*this, "id")
|
||||
{
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( cassyi )
|
||||
MCFG_X76F100_ADD( "eeprom" )
|
||||
MCFG_DS2401_ADD( "id" )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor konami573_cassette_yi_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( cassyi );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_yi_device::write_line_d4)
|
||||
{
|
||||
konami573_cassette_y_device::write_line_d4( state );
|
||||
|
||||
m_ds2401->write( !state );
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_yi_device::read_line_ds2401)
|
||||
{
|
||||
return m_ds2401->read();
|
||||
}
|
||||
|
||||
|
||||
const device_type KONAMI573_CASSETTE_ZI = &device_creator<konami573_cassette_zi_device>;
|
||||
|
||||
konami573_cassette_zi_device::konami573_cassette_zi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, KONAMI573_CASSETTE_ZI, "KONAMI 573 CASSETTE ZI", tag, owner, clock, "sys573", __FILE__),
|
||||
device_slot_card_interface(mconfig, *this),
|
||||
m_zs01(*this,"eeprom"),
|
||||
m_ds2401(*this, "id")
|
||||
{
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( casszi )
|
||||
MCFG_ZS01_ADD( "eeprom", "id" )
|
||||
MCFG_DS2401_ADD( "id" )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor konami573_cassette_zi_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( casszi );
|
||||
}
|
||||
|
||||
void konami573_cassette_zi_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_zi_device::write_line_d1)
|
||||
{
|
||||
m_zs01->scl_w( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_zi_device::write_line_d2)
|
||||
{
|
||||
m_zs01->cs_w( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_zi_device::write_line_d3)
|
||||
{
|
||||
m_zs01->rst_w( state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_zi_device::write_line_d4)
|
||||
{
|
||||
m_ds2401->write( !state );
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_zi_device::write_line_zs01_sda)
|
||||
{
|
||||
m_zs01->sda_w( state );
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_zi_device::read_line_ds2401)
|
||||
{
|
||||
return m_ds2401->read();
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_zi_device::read_line_secflash_sda)
|
||||
{
|
||||
return m_zs01->sda_r();
|
||||
}
|
||||
|
||||
|
||||
const device_type KONAMI573_CASSETTE_SLOT_SERIAL = &device_creator<konami573_cassette_slot_serial_device>;
|
||||
|
||||
konami573_cassette_slot_serial_device::konami573_cassette_slot_serial_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
psxsiodev_device(mconfig, KONAMI573_CASSETTE_SLOT, "KONAMI 573 CASSETTE SLOT (SERIAL)", tag, owner, clock, "sys573", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
void konami573_cassette_slot_serial_device::device_start()
|
||||
{
|
||||
psxsiodev_device::device_start();
|
||||
|
||||
data_out( PSX_SIO_IN_DSR, PSX_SIO_IN_DSR );
|
||||
}
|
||||
|
||||
void konami573cassette_device::data_in( int data, int mask )
|
||||
void konami573_cassette_slot_serial_device::_data_out( int data, int mask )
|
||||
{
|
||||
data_out( data, mask );
|
||||
}
|
||||
|
||||
void konami573_cassette_slot_serial_device::data_in( int data, int mask )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
const device_type KONAMI573_CASSETTE_SLOT = &device_creator<konami573_cassette_slot_device>;
|
||||
|
||||
konami573_cassette_slot_device::konami573_cassette_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, KONAMI573_CASSETTE_SLOT, "KONAMI 573 CASSETTE SLOT", tag, owner, clock, "sys573", __FILE__),
|
||||
device_slot_interface(mconfig, *this),
|
||||
m_serial(*this, ":maincpu:sio1:cassette") /// HACK: this shouldn't know where the actual slot is.
|
||||
{
|
||||
}
|
||||
|
||||
void konami573_cassette_slot_device::device_start()
|
||||
{
|
||||
m_cassette = dynamic_cast<konami573_cassette_interface *>(get_card_device());
|
||||
|
||||
if( m_cassette != NULL && m_cassette->read_line_dsr() )
|
||||
{
|
||||
m_serial->_data_out( PSX_SIO_IN_DSR, PSX_SIO_IN_DSR );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_serial->_data_out( PSX_SIO_IN_DSR, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_slot_device::write_line_d0)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
m_cassette->write_line_d0( state );
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_slot_device::write_line_d1)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
m_cassette->write_line_d1( state );
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_slot_device::write_line_d2)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
m_cassette->write_line_d2( state );
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_slot_device::write_line_d3)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
m_cassette->write_line_d3( state );
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_slot_device::write_line_d4)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
m_cassette->write_line_d4( state );
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_slot_device::write_line_d5)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
m_cassette->write_line_d5( state );
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_slot_device::write_line_d6)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
m_cassette->write_line_d6( state );
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_slot_device::write_line_d7)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
m_cassette->write_line_d7( state );
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(konami573_cassette_slot_device::write_line_zs01_sda)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
m_cassette->write_line_zs01_sda( state );
|
||||
}
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_slot_device::read_line_ds2401)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
return m_cassette->read_line_ds2401();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_slot_device::read_line_secflash_sda)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
return m_cassette->read_line_secflash_sda();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_slot_device::read_line_adc083x_do)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
return m_cassette->read_line_adc083x_do();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(konami573_cassette_slot_device::read_line_adc083x_sars)
|
||||
{
|
||||
if( m_cassette )
|
||||
{
|
||||
return m_cassette->read_line_adc083x_sars();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,16 +1,215 @@
|
||||
/*
|
||||
* Konami 573 Security Cassette
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __K573CASS_H__
|
||||
#define __K573CASS_H__
|
||||
|
||||
#include "cpu/psx/siodev.h"
|
||||
#include "machine/adc083x.h"
|
||||
#include "machine/ds2401.h"
|
||||
#include "machine/x76f041.h"
|
||||
#include "machine/x76f100.h"
|
||||
#include "machine/zs01.h"
|
||||
|
||||
extern const device_type KONAMI573CASSETTE;
|
||||
|
||||
class konami573cassette_device : public psxsiodev_device
|
||||
class konami573_cassette_interface
|
||||
{
|
||||
public:
|
||||
konami573cassette_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d0);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d1) = 0;
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d2) = 0;
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d3) = 0;
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d4);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d5);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d6);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d7);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_zs01_sda);
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_ds2401);
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_secflash_sda) = 0;
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_dsr);
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_adc083x_do);
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_adc083x_sars);
|
||||
};
|
||||
|
||||
|
||||
extern const device_type KONAMI573_CASSETTE_X;
|
||||
|
||||
class konami573_cassette_x_device: public device_t,
|
||||
public konami573_cassette_interface,
|
||||
public device_slot_card_interface
|
||||
{
|
||||
public:
|
||||
konami573_cassette_x_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
konami573_cassette_x_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock,const char *shortname = "", const char *source = __FILE__);
|
||||
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_secflash_sda);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d0);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d1);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d2);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d3);
|
||||
|
||||
protected:
|
||||
virtual void device_start();
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
private:
|
||||
required_device<x76f041_device> m_x76f041;
|
||||
};
|
||||
|
||||
|
||||
extern const device_type KONAMI573_CASSETTE_XI;
|
||||
|
||||
class konami573_cassette_xi_device: public konami573_cassette_x_device
|
||||
{
|
||||
public:
|
||||
konami573_cassette_xi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_ds2401);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d4);
|
||||
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d0);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d1);
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_adc083x_do);
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_adc083x_sars);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d5);
|
||||
|
||||
protected:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
private:
|
||||
required_device<ds2401_device> m_ds2401;
|
||||
required_device<adc0838_device> m_adc0838;
|
||||
};
|
||||
|
||||
|
||||
extern const device_type KONAMI573_CASSETTE_Y;
|
||||
|
||||
|
||||
#define MCFG_KONAMI573_CASSETTE_Y_D0_HANDLER(_devcb) \
|
||||
devcb = &konami573_cassette_y_device::set_d0_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_KONAMI573_CASSETTE_Y_D1_HANDLER(_devcb) \
|
||||
devcb = &konami573_cassette_y_device::set_d1_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_KONAMI573_CASSETTE_Y_D2_HANDLER(_devcb) \
|
||||
devcb = &konami573_cassette_y_device::set_d2_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_KONAMI573_CASSETTE_Y_D3_HANDLER(_devcb) \
|
||||
devcb = &konami573_cassette_y_device::set_d3_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_KONAMI573_CASSETTE_Y_D4_HANDLER(_devcb) \
|
||||
devcb = &konami573_cassette_y_device::set_d4_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_KONAMI573_CASSETTE_Y_D5_HANDLER(_devcb) \
|
||||
devcb = &konami573_cassette_y_device::set_d5_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_KONAMI573_CASSETTE_Y_D6_HANDLER(_devcb) \
|
||||
devcb = &konami573_cassette_y_device::set_d6_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_KONAMI573_CASSETTE_Y_D7_HANDLER(_devcb) \
|
||||
devcb = &konami573_cassette_y_device::set_d7_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
class konami573_cassette_y_device: public device_t,
|
||||
public konami573_cassette_interface,
|
||||
public device_slot_card_interface
|
||||
{
|
||||
public:
|
||||
konami573_cassette_y_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
konami573_cassette_y_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock,const char *shortname = "", const char *source = __FILE__);
|
||||
|
||||
// static configuration helpers
|
||||
template<class _Object> static devcb2_base &set_d0_handler(device_t &device, _Object object) { return downcast<konami573_cassette_y_device &>(device).m_d0_handler.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_d1_handler(device_t &device, _Object object) { return downcast<konami573_cassette_y_device &>(device).m_d1_handler.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_d2_handler(device_t &device, _Object object) { return downcast<konami573_cassette_y_device &>(device).m_d2_handler.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_d3_handler(device_t &device, _Object object) { return downcast<konami573_cassette_y_device &>(device).m_d3_handler.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_d4_handler(device_t &device, _Object object) { return downcast<konami573_cassette_y_device &>(device).m_d4_handler.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_d5_handler(device_t &device, _Object object) { return downcast<konami573_cassette_y_device &>(device).m_d5_handler.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_d6_handler(device_t &device, _Object object) { return downcast<konami573_cassette_y_device &>(device).m_d6_handler.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_d7_handler(device_t &device, _Object object) { return downcast<konami573_cassette_y_device &>(device).m_d7_handler.set_callback(object); }
|
||||
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_secflash_sda);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d0);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d1);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d2);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d3);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d4);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d5);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d6);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d7);
|
||||
|
||||
protected:
|
||||
virtual void device_start();
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
private:
|
||||
required_device<x76f100_device> m_x76f100;
|
||||
devcb2_write_line m_d0_handler;
|
||||
devcb2_write_line m_d1_handler;
|
||||
devcb2_write_line m_d2_handler;
|
||||
devcb2_write_line m_d3_handler;
|
||||
devcb2_write_line m_d4_handler;
|
||||
devcb2_write_line m_d5_handler;
|
||||
devcb2_write_line m_d6_handler;
|
||||
devcb2_write_line m_d7_handler;
|
||||
};
|
||||
|
||||
|
||||
extern const device_type KONAMI573_CASSETTE_YI;
|
||||
|
||||
class konami573_cassette_yi_device: public konami573_cassette_y_device
|
||||
{
|
||||
public:
|
||||
konami573_cassette_yi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_ds2401);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d4);
|
||||
|
||||
protected:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
private:
|
||||
required_device<ds2401_device> m_ds2401;
|
||||
};
|
||||
|
||||
|
||||
extern const device_type KONAMI573_CASSETTE_ZI;
|
||||
|
||||
class konami573_cassette_zi_device: public device_t,
|
||||
public konami573_cassette_interface,
|
||||
public device_slot_card_interface
|
||||
{
|
||||
public:
|
||||
konami573_cassette_zi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_ds2401);
|
||||
virtual DECLARE_READ_LINE_MEMBER(read_line_secflash_sda);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d4);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d1);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d2);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_d3);
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(write_line_zs01_sda);
|
||||
|
||||
protected:
|
||||
virtual void device_start();
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
private:
|
||||
required_device<zs01_device> m_zs01;
|
||||
required_device<ds2401_device> m_ds2401;
|
||||
};
|
||||
|
||||
|
||||
extern const device_type KONAMI573_CASSETTE_SLOT_SERIAL;
|
||||
|
||||
class konami573_cassette_slot_serial_device : public psxsiodev_device
|
||||
{
|
||||
public:
|
||||
konami573_cassette_slot_serial_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
void _data_out( int data, int mask );
|
||||
|
||||
protected:
|
||||
virtual void device_start();
|
||||
@ -19,4 +218,36 @@ private:
|
||||
virtual void data_in( int data, int mask );
|
||||
};
|
||||
|
||||
|
||||
extern const device_type KONAMI573_CASSETTE_SLOT;
|
||||
|
||||
class konami573_cassette_slot_device : public device_t,
|
||||
public device_slot_interface
|
||||
{
|
||||
public:
|
||||
konami573_cassette_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(write_line_d0);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_line_d1);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_line_d2);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_line_d3);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_line_d4);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_line_d5);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_line_d6);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_line_d7);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_line_zs01_sda);
|
||||
DECLARE_READ_LINE_MEMBER(read_line_ds2401);
|
||||
DECLARE_READ_LINE_MEMBER(read_line_secflash_sda);
|
||||
DECLARE_READ_LINE_MEMBER(read_line_adc083x_do);
|
||||
DECLARE_READ_LINE_MEMBER(read_line_adc083x_sars);
|
||||
|
||||
protected:
|
||||
virtual void device_start();
|
||||
|
||||
private:
|
||||
required_device<konami573_cassette_slot_serial_device> m_serial;
|
||||
konami573_cassette_interface *m_cassette;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "machine/zs01.h"
|
||||
#include "machine/ds2401.h"
|
||||
|
||||
#define VERBOSE_LEVEL 0
|
||||
|
||||
@ -53,6 +52,12 @@ void zs01_device::device_start()
|
||||
save_item(NAME(response_to_reset));
|
||||
save_item(NAME(command_key));
|
||||
save_item(NAME(data_key));
|
||||
|
||||
m_ds2401 = siblingdevice<ds2401_device>(ds2401_tag);
|
||||
if( m_ds2401 == NULL )
|
||||
{
|
||||
logerror( "ds2401 '%s' not found\n", ds2401_tag );
|
||||
}
|
||||
}
|
||||
|
||||
void zs01_device::device_reset()
|
||||
@ -412,9 +417,9 @@ void zs01_device::scl_1()
|
||||
switch(write_buffer[1]) {
|
||||
case 0xfd: {
|
||||
/* TODO: use read/write to talk to the ds2401, which will require a timer. */
|
||||
ds2401_device *ds2401 = machine().device<ds2401_device>(ds2401_tag);
|
||||
for(int i = 0; i < SIZE_DATA_BUFFER; i++)
|
||||
read_buffer[2+i] = ds2401->direct_read(SIZE_DATA_BUFFER-i-1);
|
||||
if( m_ds2401 != NULL )
|
||||
for(int i = 0; i < SIZE_DATA_BUFFER; i++)
|
||||
read_buffer[2+i] = m_ds2401->direct_read(SIZE_DATA_BUFFER-i-1);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -8,10 +8,12 @@
|
||||
#ifndef __ZS01_H__
|
||||
#define __ZS01_H__
|
||||
|
||||
#include "machine/ds2401.h"
|
||||
#include "machine/secflash.h"
|
||||
|
||||
#define MCFG_ZS01_ADD(_tag, ds2401_tag) \
|
||||
MCFG_DEVICE_ADD(_tag, ZS01, 0) \
|
||||
zs01_device::static_set_ds2401_tag(*device, ds2401_tag);
|
||||
#include "machine/secflash.h"
|
||||
|
||||
class zs01_device : public device_secure_serial_flash
|
||||
{
|
||||
@ -82,6 +84,8 @@ protected:
|
||||
|
||||
private:
|
||||
inline void ATTR_PRINTF(3,4) verboselog(int n_level, const char *s_fmt, ...);
|
||||
|
||||
ds2401_device *m_ds2401;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user