diff --git a/src/emu/machine/at45dbxx.c b/src/emu/machine/at45dbxx.c index 27d4ca3b72a..869c9fec50d 100644 --- a/src/emu/machine/at45dbxx.c +++ b/src/emu/machine/at45dbxx.c @@ -45,14 +45,16 @@ const device_type AT45DB161 = &device_creator; at45db041_device::at45db041_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, AT45DB041, "AT45DB041", tag, owner, clock, "at45db041", __FILE__), - device_nvram_interface(mconfig, *this) + device_nvram_interface(mconfig, *this), + write_so(*this) { } at45db041_device::at45db041_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) : device_t(mconfig, type, name, tag, owner, clock, shortname, source), - device_nvram_interface(mconfig, *this) + device_nvram_interface(mconfig, *this), + write_so(*this) { } @@ -90,6 +92,8 @@ void at45db041_device::device_start() save_item(NAME(m_pin.wp)); save_item(NAME(m_pin.reset)); save_item(NAME(m_pin.busy)); + + write_so.resolve_safe(); } @@ -369,6 +373,7 @@ WRITE_LINE_MEMBER(at45db041_device::sck_w) } // output (part 2) m_pin.so = (m_so_byte >> m_so_bits) & 1; + write_so(m_pin.so); m_so_bits++; } // save sck diff --git a/src/emu/machine/at45dbxx.h b/src/emu/machine/at45dbxx.h index c90487f6e62..6091a36359f 100644 --- a/src/emu/machine/at45dbxx.h +++ b/src/emu/machine/at45dbxx.h @@ -29,6 +29,9 @@ #define MCFG_AT45DB161_ADD(_tag) \ MCFG_DEVICE_ADD(_tag, AT45DB161, 0) +#define MCFG_AT45DBXXX_SO_CALLBACK(_cb) \ + devcb = &at45db041_device::set_so_cb(*device, DEVCB2_##_cb); + // ======================> at45db041_device @@ -46,6 +49,9 @@ public: UINT8 *get_ptr() { return m_data; } + template static devcb2_base &set_so_cb(device_t &device, _Object object) { return downcast(device).write_so.set_callback(object); } + devcb2_write_line write_so; + protected: // device-level overrides virtual void device_start(); diff --git a/src/mess/drivers/cybiko.c b/src/mess/drivers/cybiko.c index ee7e8acdd6d..2657ad47de6 100644 --- a/src/mess/drivers/cybiko.c +++ b/src/mess/drivers/cybiko.c @@ -94,21 +94,9 @@ static ADDRESS_MAP_START( cybikoxt_mem, AS_PROGRAM, 16, cybiko_state ) AM_RANGE( 0xe00000, 0xefffff ) AM_READ( cybikoxt_key_r ) ADDRESS_MAP_END -READ16_MEMBER(cybiko_state::serflash_r) -{ - if (m_flash1->so_r()) - { - return 0x08; - } - - return 0; -} - WRITE16_MEMBER(cybiko_state::serflash_w) { m_flash1->cs_w ((data & 0x10) ? 0 : 1); - m_flash1->si_w ((data & 0x02) ? 1 : 0); - m_flash1->sck_w((data & 0x20) ? 1 : 0); } READ16_MEMBER(cybiko_state::clock_r) @@ -155,11 +143,11 @@ READ16_MEMBER(cybiko_state::xtpower_r) ////////////////////// static ADDRESS_MAP_START( cybikov1_io, AS_IO, 16, cybiko_state ) - AM_RANGE(h8_device::PORT_3, h8_device::PORT_3) AM_READWRITE(serflash_r, serflash_w) + AM_RANGE(h8_device::PORT_3, h8_device::PORT_3) AM_WRITE(serflash_w) ADDRESS_MAP_END static ADDRESS_MAP_START( cybikov2_io, AS_IO, 16, cybiko_state ) - AM_RANGE(h8_device::PORT_3, h8_device::PORT_3) AM_READWRITE(serflash_r, serflash_w) + AM_RANGE(h8_device::PORT_3, h8_device::PORT_3) AM_WRITE(serflash_w) AM_RANGE(h8_device::PORT_F, h8_device::PORT_F) AM_READWRITE(clock_r, clock_w) ADDRESS_MAP_END @@ -347,6 +335,10 @@ static MACHINE_CONFIG_START( cybikov1, cybiko_state ) MCFG_CPU_PROGRAM_MAP( cybikov1_mem ) MCFG_CPU_IO_MAP( cybikov1_io ) + MCFG_DEVICE_MODIFY("maincpu:sci1") + MCFG_H8_SCI_TX_CALLBACK(DEVWRITELINE("^flash1", at45db041_device, si_w)) + MCFG_H8_SCI_CLK_CALLBACK(DEVWRITELINE("^flash1", at45db041_device, sck_w)) + // screen MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE( 60 ) @@ -365,6 +357,7 @@ static MACHINE_CONFIG_START( cybikov1, cybiko_state ) /* rtc */ MCFG_PCF8593_ADD("rtc") MCFG_AT45DB041_ADD("flash1") + MCFG_AT45DBXXX_SO_CALLBACK(DEVWRITELINE("maincpu:sci1", h8_sci_device, rx_w)) MCFG_NVRAM_ADD_0FILL("nvram") @@ -380,8 +373,12 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( cybikov2, cybikov1) // cpu MCFG_CPU_REPLACE("maincpu", H8S2246, XTAL_11_0592MHz) - MCFG_CPU_PROGRAM_MAP(cybikov2_mem ) - MCFG_CPU_IO_MAP(cybikov2_io ) + MCFG_CPU_PROGRAM_MAP(cybikov2_mem) + MCFG_CPU_IO_MAP(cybikov2_io) + + MCFG_DEVICE_MODIFY("maincpu:sci1") + MCFG_H8_SCI_TX_CALLBACK(DEVWRITELINE("^flash1", at45db041_device, si_w)) + MCFG_H8_SCI_CLK_CALLBACK(DEVWRITELINE("^flash1", at45db041_device, sck_w)) // machine MCFG_SST_39VF020_ADD("flash2")