diff --git a/src/mess/drivers/cybiko.c b/src/mess/drivers/cybiko.c index 71c1895c6c7..8ba6231c714 100644 --- a/src/mess/drivers/cybiko.c +++ b/src/mess/drivers/cybiko.c @@ -94,21 +94,59 @@ 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; +} + +READ16_MEMBER(cybiko_state::clock_r) +{ + if (m_rtc->sda_r()) + { + return (0x01|0x04); + } + + return 0x04; +} + +READ16_MEMBER(cybiko_state::xtclock_r) +{ + if (m_rtc->sda_r()) + { + return 0x40; + } + + return 0; +} + +READ16_MEMBER(cybiko_state::xtpower_r) +{ + // bit 7 = on/off button + // bit 6 = battery charged if "1" + return 0xc0c0; +} + ////////////////////// // ADDRESS MAP - IO // ////////////////////// static ADDRESS_MAP_START( cybikov1_io, AS_IO, 16, cybiko_state ) - AM_RANGE( 0xfffe40, 0xffffff ) AM_READWRITE( cybikov1_io_reg_r, cybikov1_io_reg_w ) + AM_RANGE(h8_device::PORT_3, h8_device::PORT_3) AM_READ(serflash_r) ADDRESS_MAP_END static ADDRESS_MAP_START( cybikov2_io, AS_IO, 16, cybiko_state ) - AM_RANGE( 0xfffe40, 0xffffff ) AM_READWRITE( cybikov2_io_reg_r, cybikov2_io_reg_w ) + AM_RANGE(h8_device::PORT_3, h8_device::PORT_3) AM_READ(serflash_r) ADDRESS_MAP_END static ADDRESS_MAP_START( cybikoxt_io, AS_IO, 16, cybiko_state ) - AM_RANGE( 0xfffe40, 0xffffff ) AM_READWRITE( cybikoxt_io_reg_r, cybikoxt_io_reg_w ) -ADDRESS_MAP_END + AM_RANGE(h8_device::PORT_A, h8_device::PORT_A) AM_READ(xtpower_r) + AM_RANGE(h8_device::PORT_F, h8_device::PORT_F) AM_READ(xtclock_r) +ADDRESS_MAP_END ///////////////// // INPUT PORTS // @@ -340,10 +378,6 @@ static MACHINE_CONFIG_DERIVED( cybikoxt, cybikov1) MCFG_CPU_PROGRAM_MAP(cybikoxt_mem ) MCFG_CPU_IO_MAP(cybikoxt_io ) - // setup loopback - MCFG_DEVICE_MODIFY("maincpu:sci1") - MCFG_H8_SCI_TX_CALLBACK(DEVWRITELINE("sci1", h8_sci_device, rx_w)); - // machine MCFG_DEVICE_REMOVE("flash1") MCFG_SST_39VF400A_ADD("flashxt") diff --git a/src/mess/includes/cybiko.h b/src/mess/includes/cybiko.h index 5468633ee96..4d05639a281 100644 --- a/src/mess/includes/cybiko.h +++ b/src/mess/includes/cybiko.h @@ -58,6 +58,11 @@ public: m_nvram(*this, "nvram") { } + DECLARE_READ16_MEMBER(serflash_r); + DECLARE_READ16_MEMBER(clock_r); + DECLARE_READ16_MEMBER(xtclock_r); + DECLARE_READ16_MEMBER(xtpower_r); + CYBIKO_RS232 m_rs232; DECLARE_READ16_MEMBER(cybiko_lcd_r); DECLARE_WRITE16_MEMBER(cybiko_lcd_w); @@ -65,12 +70,6 @@ public: DECLARE_READ16_MEMBER(cybikov2_key_r); DECLARE_READ16_MEMBER(cybikoxt_key_r); DECLARE_WRITE16_MEMBER(cybiko_usb_w); - DECLARE_READ16_MEMBER(cybikov1_io_reg_r); - DECLARE_READ16_MEMBER(cybikov2_io_reg_r); - DECLARE_READ16_MEMBER(cybikoxt_io_reg_r); - DECLARE_WRITE16_MEMBER(cybikov1_io_reg_w); - DECLARE_WRITE16_MEMBER(cybikov2_io_reg_w); - DECLARE_WRITE16_MEMBER(cybikoxt_io_reg_w); int cybiko_key_r( offs_t offset, int mem_mask); void cybiko_rs232_write_byte(int data); void cybiko_rs232_pin_sck(int data); diff --git a/src/mess/machine/cybiko.c b/src/mess/machine/cybiko.c index 577a64124c0..58a18f26e22 100644 --- a/src/mess/machine/cybiko.c +++ b/src/mess/machine/cybiko.c @@ -65,7 +65,15 @@ void cybiko_state::machine_start() cybiko_rs232_init(); // other machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(cybiko_state::machine_stop_cybiko),this)); - m_nvram->set_base(m_ram->pointer(), RAMDISK_SIZE); + + int nvram_size = RAMDISK_SIZE; + + if (m_ram->size() < nvram_size) + { + nvram_size = m_ram->size(); + } + + m_nvram->set_base(m_ram->pointer(), nvram_size); } /////////////////// @@ -213,6 +221,7 @@ READ16_MEMBER( cybiko_state::cybikoxt_key_r ) return cybiko_key_r(offset, mem_mask); } +#if 0 READ16_MEMBER( cybiko_state::cybikov1_io_reg_r ) { UINT16 data = 0; @@ -469,6 +478,7 @@ WRITE16_MEMBER( cybiko_state::cybikoxt_io_reg_w ) } #endif } +#endif // Cybiko Xtreme writes following byte pairs to 0x200003/0x200000 // 00/01, 00/C0, 0F/32, 0D/03, 0B/03, 09/50, 07/D6, 05/00, 04/00, 20/00, 23/08, 27/01, 2F/08, 2C/02, 2B/08, 28/01