diff --git a/src/mame/drivers/kyocera.cpp b/src/mame/drivers/kyocera.cpp index ce927ee9c62..725f75b3859 100644 --- a/src/mame/drivers/kyocera.cpp +++ b/src/mame/drivers/kyocera.cpp @@ -65,7 +65,7 @@ /* Read/Write Handlers */ -READ8_MEMBER( pc8201_state::bank_r ) +uint8_t pc8201_state::bank_r() { /* @@ -144,7 +144,7 @@ void pc8201_state::bankswitch(uint8_t data) membank("bank2")->set_entry(ram_bank); } -WRITE8_MEMBER( pc8201_state::bank_w ) +void pc8201_state::bank_w(uint8_t data) { /* @@ -164,7 +164,7 @@ printf("bank %02x\n",data); bankswitch(data); } -WRITE8_MEMBER( pc8201_state::scp_w ) +void pc8201_state::scp_w(uint8_t data) { /* @@ -194,7 +194,18 @@ WRITE8_MEMBER( pc8201_state::scp_w ) m_iosel = data >> 5; } -WRITE8_MEMBER( kc85_state::uart_ctrl_w ) +uint8_t kc85_state::uart_r() +{ + if (!machine().side_effects_disabled()) + { + m_uart->drr_w(0); + m_uart->drr_w(1); + } + + return m_uart->read(machine().dummy_space(), 0); +} + +void kc85_state::uart_ctrl_w(uint8_t data) { /* @@ -220,7 +231,7 @@ WRITE8_MEMBER( kc85_state::uart_ctrl_w ) m_uart->crl_w(1); } -READ8_MEMBER( kc85_state::uart_status_r ) +uint8_t kc85_state::uart_status_r() { /* @@ -263,7 +274,7 @@ READ8_MEMBER( kc85_state::uart_status_r ) return data; } -READ8_MEMBER( pc8201_state::uart_status_r ) +uint8_t pc8201_state::uart_status_r() { /* @@ -306,7 +317,7 @@ READ8_MEMBER( pc8201_state::uart_status_r ) return data; } -WRITE8_MEMBER( pc8201_state::romah_w ) +void pc8201_state::romah_w(uint8_t data) { /* @@ -330,7 +341,7 @@ WRITE8_MEMBER( pc8201_state::romah_w ) m_rom_sel = BIT(data, 1); } -WRITE8_MEMBER( pc8201_state::romal_w ) +void pc8201_state::romal_w(uint8_t data) { /* @@ -350,7 +361,7 @@ WRITE8_MEMBER( pc8201_state::romal_w ) m_rom_addr = (m_rom_addr & 0x1ff00) | data; } -WRITE8_MEMBER( pc8201_state::romam_w ) +void pc8201_state::romam_w(uint8_t data) { /* @@ -370,7 +381,7 @@ WRITE8_MEMBER( pc8201_state::romam_w ) m_rom_addr = (m_rom_addr & 0x100ff) | (data << 8); } -READ8_MEMBER( pc8201_state::romrd_r ) +uint8_t pc8201_state::romrd_r() { uint8_t data = 0xff; @@ -380,7 +391,7 @@ READ8_MEMBER( pc8201_state::romrd_r ) return data; } -WRITE8_MEMBER( kc85_state::modem_w ) +void kc85_state::modem_w(uint8_t data) { /* @@ -400,7 +411,7 @@ WRITE8_MEMBER( kc85_state::modem_w ) //m_modem->en_w(BIT(data, 1)); } -WRITE8_MEMBER( kc85_state::ctrl_w ) +void kc85_state::ctrl_w(uint8_t data) { /* @@ -430,7 +441,7 @@ WRITE8_MEMBER( kc85_state::ctrl_w ) m_cassette->change_state(BIT(data,3) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR); } -READ8_MEMBER( kc85_state::keyboard_r ) +uint8_t kc85_state::keyboard_r() { uint8_t data = 0xff; @@ -475,17 +486,17 @@ void tandy200_state::bankswitch(uint8_t data) } } -READ8_MEMBER( tandy200_state::bank_r ) +uint8_t tandy200_state::bank_r() { return m_bank; } -WRITE8_MEMBER( tandy200_state::bank_w ) +void tandy200_state::bank_w(uint8_t data) { bankswitch(data); } -READ8_MEMBER( tandy200_state::stbk_r ) +uint8_t tandy200_state::stbk_r() { uint8_t data = 0xff; @@ -497,7 +508,7 @@ READ8_MEMBER( tandy200_state::stbk_r ) return data; } -WRITE8_MEMBER( tandy200_state::stbk_w ) +void tandy200_state::stbk_w(uint8_t data) { /* @@ -521,8 +532,9 @@ WRITE8_MEMBER( tandy200_state::stbk_w ) m_cassette->change_state(BIT(data,1) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR); } -READ8_MEMBER( kc85_state::lcd_r ) +uint8_t kc85_state::lcd_r(offs_t offset) { + address_space &space = machine().dummy_space(); uint8_t data = 0; for (uint8_t i = 0; i < 10; i++) @@ -531,8 +543,10 @@ READ8_MEMBER( kc85_state::lcd_r ) return data; } -WRITE8_MEMBER( kc85_state::lcd_w ) +void kc85_state::lcd_w(offs_t offset, uint8_t data) { + address_space &space = machine().dummy_space(); + for (uint8_t i = 0; i < 10; i++) m_lcdc[i]->write(space, offset, data); } @@ -569,7 +583,7 @@ void kc85_state::kc85_io(address_map &map) // map(0x90, 0x90).mirror(0x0f); optional answering telephone unit // map(0xa0, 0xa0).mirror(0x0f); optional modem map(0xb0, 0xb7).mirror(0x08).rw(I8155_TAG, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w)); - map(0xc0, 0xc0).mirror(0x0f).rw(m_uart, FUNC(im6402_device::read), FUNC(im6402_device::write)); + map(0xc0, 0xc0).mirror(0x0f).r(FUNC(kc85_state::uart_r)).w(m_uart, FUNC(im6402_device::write)); map(0xd0, 0xd0).mirror(0x0f).rw(FUNC(kc85_state::uart_status_r), FUNC(kc85_state::uart_ctrl_w)); map(0xe0, 0xe0).mirror(0x0f).rw(FUNC(kc85_state::keyboard_r), FUNC(kc85_state::ctrl_w)); map(0xf0, 0xf1).mirror(0x0e).rw(FUNC(kc85_state::lcd_r), FUNC(kc85_state::lcd_w)); @@ -592,7 +606,7 @@ void pc8201_state::pc8201_io(address_map &map) map(0x90, 0x90).mirror(0x0f).w(FUNC(pc8201_state::scp_w)); map(0xa0, 0xa0).mirror(0x0f).rw(FUNC(pc8201_state::bank_r), FUNC(pc8201_state::bank_w)); map(0xb0, 0xb7).mirror(0x08).rw(I8155_TAG, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w)); - map(0xc0, 0xc0).mirror(0x0f).rw(m_uart, FUNC(im6402_device::read), FUNC(im6402_device::write)); + map(0xc0, 0xc0).mirror(0x0f).r(FUNC(pc8201_state::uart_r)).w(m_uart, FUNC(im6402_device::write)); map(0xd0, 0xd0).mirror(0x0f).r(FUNC(pc8201_state::uart_status_r)).w(FUNC(pc8201_state::uart_ctrl_w)); map(0xe0, 0xe0).mirror(0x0f).r(FUNC(pc8201_state::keyboard_r)); map(0xf0, 0xf1).mirror(0x0e).rw(FUNC(pc8201_state::lcd_r), FUNC(pc8201_state::lcd_w)); @@ -918,7 +932,7 @@ INPUT_PORTS_END /* 8155 Interface */ -WRITE8_MEMBER( kc85_state::i8155_pa_w ) +void kc85_state::i8155_pa_w(uint8_t data) { /* @@ -950,7 +964,7 @@ WRITE8_MEMBER( kc85_state::i8155_pa_w ) m_rtc->data_in_w(BIT(data, 4)); } -WRITE8_MEMBER( kc85_state::i8155_pb_w ) +void kc85_state::i8155_pb_w(uint8_t data) { /* @@ -995,7 +1009,7 @@ WRITE_LINE_MEMBER( kc85_state::write_centronics_select ) m_centronics_select = state; } -READ8_MEMBER( kc85_state::i8155_pc_r ) +uint8_t kc85_state::i8155_pc_r() { /* @@ -1037,7 +1051,7 @@ WRITE_LINE_MEMBER( kc85_state::i8155_to_w ) m_uart->rrc_w(state); } -WRITE8_MEMBER( tandy200_state::i8155_pa_w ) +void tandy200_state::i8155_pa_w(uint8_t data) { /* @@ -1059,7 +1073,7 @@ WRITE8_MEMBER( tandy200_state::i8155_pa_w ) m_keylatch = (m_keylatch & 0x100) | data; } -WRITE8_MEMBER( tandy200_state::i8155_pb_w ) +void tandy200_state::i8155_pb_w(uint8_t data) { /* @@ -1096,7 +1110,7 @@ WRITE_LINE_MEMBER( tandy200_state::write_centronics_select ) m_centronics_select = state; } -READ8_MEMBER( tandy200_state::i8155_pc_r ) +uint8_t tandy200_state::i8155_pc_r() { /* @@ -1343,6 +1357,7 @@ void kc85_state::kc85(machine_config &config) IM6402(config, m_uart, 0, 0); m_uart->tro_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); + m_uart->dr_callback().set_inputline(m_maincpu, I8085_RST65_LINE); rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr)); rs232.rxd_handler().set(m_uart, FUNC(im6402_device::write_rri)); @@ -1392,6 +1407,7 @@ void pc8201_state::pc8201(machine_config &config) IM6402(config, m_uart, 0, 0); m_uart->tro_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); + m_uart->dr_callback().set_inputline(m_maincpu, I8085_RST65_LINE); rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr)); rs232.rxd_handler().set(m_uart, FUNC(im6402_device::write_rri)); @@ -1450,6 +1466,7 @@ void trsm100_state::trsm100(machine_config &config) IM6402(config, m_uart, 0, 0); m_uart->tro_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); + m_uart->dr_callback().set_inputline(m_maincpu, I8085_RST65_LINE); rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr)); rs232.rxd_handler().set(m_uart, FUNC(im6402_device::write_rri)); @@ -1508,10 +1525,11 @@ void tandy200_state::tandy200(machine_config &config) RP5C01(config, m_rtc, XTAL(32'768)); - i8251_device &i8251(I8251(config, I8251_TAG, 0)); /*XTAL(4'915'200)/2,*/ + i8251_device &i8251(I8251(config, I8251_TAG, XTAL(4'915'200)/2)); i8251.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); i8251.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr)); i8251.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts)); + i8251.rxrdy_handler().set_inputline(m_maincpu, I8085_RST65_LINE); rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr)); rs232.rxd_handler().set(I8251_TAG, FUNC(i8251_device::write_rxd)); @@ -1574,7 +1592,7 @@ ROM_END ROM_START( m10 ) // 3256C02-4B3/I Italian - ROM_REGION( 0x8010, I8085_TAG, 0 ) + ROM_REGION( 0x8000, I8085_TAG, 0 ) ROM_LOAD( "m10rom.m12", 0x0000, 0x8000, CRC(f0e8447a) SHA1(d58867276213116a79f7074109b7d7ce02e8a3af) ) ROM_END diff --git a/src/mame/includes/kyocera.h b/src/mame/includes/kyocera.h index b3fa4afa3bc..5aff2b37e85 100644 --- a/src/mame/includes/kyocera.h +++ b/src/mame/includes/kyocera.h @@ -71,9 +71,9 @@ public: DECLARE_WRITE_LINE_MEMBER(kc85_sod_w); DECLARE_READ_LINE_MEMBER(kc85_sid_r); - DECLARE_WRITE8_MEMBER( i8155_pa_w ); - DECLARE_WRITE8_MEMBER( i8155_pb_w ); - DECLARE_READ8_MEMBER( i8155_pc_r ); + void i8155_pa_w(uint8_t data); + void i8155_pb_w(uint8_t data); + uint8_t i8155_pc_r(); DECLARE_WRITE_LINE_MEMBER( i8155_to_w ); DECLARE_WRITE_LINE_MEMBER( write_centronics_busy ); @@ -99,13 +99,14 @@ protected: uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_READ8_MEMBER( uart_status_r ); - DECLARE_WRITE8_MEMBER( uart_ctrl_w ); - DECLARE_WRITE8_MEMBER( modem_w ); - DECLARE_WRITE8_MEMBER( ctrl_w ); - DECLARE_READ8_MEMBER( keyboard_r ); - DECLARE_READ8_MEMBER( lcd_r ); - DECLARE_WRITE8_MEMBER( lcd_w ); + uint8_t uart_r(); + uint8_t uart_status_r(); + void uart_ctrl_w(uint8_t data); + void modem_w(uint8_t data); + void ctrl_w(uint8_t data); + uint8_t keyboard_r(); + uint8_t lcd_r(offs_t offset); + void lcd_w(offs_t offset, uint8_t data); /* memory state */ uint8_t m_bank; /* memory bank selection */ @@ -149,14 +150,14 @@ public: virtual void machine_start() override; required_device m_cas_cart; - DECLARE_READ8_MEMBER( bank_r ); - DECLARE_WRITE8_MEMBER( bank_w ); - DECLARE_WRITE8_MEMBER( scp_w ); - DECLARE_READ8_MEMBER( uart_status_r ); - DECLARE_WRITE8_MEMBER( romah_w ); - DECLARE_WRITE8_MEMBER( romal_w ); - DECLARE_WRITE8_MEMBER( romam_w ); - DECLARE_READ8_MEMBER( romrd_r ); + uint8_t bank_r(); + void bank_w(uint8_t data); + void scp_w(uint8_t data); + uint8_t uart_status_r(); + void romah_w(uint8_t data); + void romal_w(uint8_t data); + void romam_w(uint8_t data); + uint8_t romrd_r(); void bankswitch(uint8_t data); @@ -209,13 +210,13 @@ public: uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_READ8_MEMBER( bank_r ); - DECLARE_WRITE8_MEMBER( bank_w ); - DECLARE_READ8_MEMBER( stbk_r ); - DECLARE_WRITE8_MEMBER( stbk_w ); - DECLARE_WRITE8_MEMBER( i8155_pa_w ); - DECLARE_WRITE8_MEMBER( i8155_pb_w ); - DECLARE_READ8_MEMBER( i8155_pc_r ); + uint8_t bank_r(); + void bank_w(uint8_t data); + uint8_t stbk_r(); + void stbk_w(uint8_t data); + void i8155_pa_w(uint8_t data); + void i8155_pb_w(uint8_t data); + uint8_t i8155_pc_r(); DECLARE_WRITE_LINE_MEMBER( i8155_to_w ); DECLARE_WRITE_LINE_MEMBER(kc85_sod_w); DECLARE_READ_LINE_MEMBER(kc85_sid_r);