From e8d6729695cd23829917703a59ebf583bc89cf16 Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 17 May 2020 08:52:59 -0400 Subject: [PATCH] i7000.cpp, mmd2.cpp: Simplify handlr signatures; correct 8279 handlers (nw) --- src/mame/drivers/i7000.cpp | 43 ++++++++++++++---------------------- src/mame/drivers/mmd2.cpp | 45 +++++++++++++++++++------------------- 2 files changed, 39 insertions(+), 49 deletions(-) diff --git a/src/mame/drivers/i7000.cpp b/src/mame/drivers/i7000.cpp index 90da718a50e..a4e28481ca1 100644 --- a/src/mame/drivers/i7000.cpp +++ b/src/mame/drivers/i7000.cpp @@ -66,22 +66,23 @@ public: , m_card(*this, "cardslot") , m_gfxdecode(*this, "gfxdecode") , m_videoram(*this, "videoram") + , m_kbd(*this, "X%u", 0U) { } void i7000(machine_config &config); - void init_i7000(); - protected: - void video_start() override; - void machine_start() override; + virtual void video_start() override; + virtual void machine_start() override; private: required_device m_maincpu; required_device m_card; required_device m_gfxdecode; required_shared_ptr m_videoram; - uint32_t screen_update_i7000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + required_ioport_array<8> m_kbd; + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint8_t m_row; tilemap_t *m_bg_tilemap; @@ -90,32 +91,25 @@ private: void i7000_palette(palette_device &palette) const; DECLARE_DEVICE_IMAGE_LOAD_MEMBER(card_load); - DECLARE_READ8_MEMBER(i7000_kbd_r); - DECLARE_WRITE8_MEMBER(i7000_scanlines_w); + uint8_t kbd_r(); + void scanlines_w(uint8_t data); + void i7000_io(address_map &map); void i7000_mem(address_map &map); }; -WRITE8_MEMBER( i7000_state::i7000_scanlines_w ) +void i7000_state::scanlines_w(uint8_t data) { m_row = data; } -READ8_MEMBER( i7000_state::i7000_kbd_r ) +uint8_t i7000_state::kbd_r() { - uint8_t data = 0xff; - for (int i=0; i<40*25; i++){ m_bg_tilemap->mark_tile_dirty(i); } - if (m_row < 8) - { - char kbdrow[6]; - sprintf(kbdrow,"X%X",m_row); - data = ioport(kbdrow)->read(); - } - return data; + return m_kbd[m_row & 7]->read(); } /* Input ports */ @@ -227,9 +221,6 @@ static INPUT_PORTS_START( i7000 ) PORT_DIPSETTING( 0x01, DEF_STR( Yes ) ) INPUT_PORTS_END -void i7000_state::init_i7000() -{ -} void i7000_state::machine_start() { @@ -329,7 +320,7 @@ void i7000_state::video_start() m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(i7000_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 40, 25); } -uint32_t i7000_state::screen_update_i7000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t i7000_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; @@ -354,7 +345,7 @@ void i7000_state::i7000(machine_config &config) screen.set_refresh_hz(60); screen.set_size(320, 200); /* 40x25 8x8 chars */ screen.set_visarea(0, 320-1, 0, 200-1); - screen.set_screen_update(FUNC(i7000_state::screen_update_i7000)); + screen.set_screen_update(FUNC(i7000_state::screen_update)); screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_i7000); @@ -381,8 +372,8 @@ void i7000_state::i7000(machine_config &config) /* Keyboard interface */ i8279_device &kbdc(I8279(config, "i8279", 4000000)); /* guessed value. TODO: verify on PCB */ - kbdc.out_sl_callback().set(FUNC(i7000_state::i7000_scanlines_w)); // scan SL lines - kbdc.in_rl_callback().set(FUNC(i7000_state::i7000_kbd_r)); // kbd RL lines + kbdc.out_sl_callback().set(FUNC(i7000_state::scanlines_w)); // scan SL lines + kbdc.in_rl_callback().set(FUNC(i7000_state::kbd_r)); // kbd RL lines kbdc.in_shift_callback().set_constant(1); // TODO: Shift key kbdc.in_ctrl_callback().set_constant(1); // TODO: Ctrl key @@ -422,4 +413,4 @@ ROM_START( i7000 ) ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1982, i7000, 0, 0, i7000, i7000, i7000_state, init_i7000, "Itautec", "I-7000", MACHINE_NOT_WORKING) +COMP( 1982, i7000, 0, 0, i7000, i7000, i7000_state, empty_init, "Itautec", "I-7000", MACHINE_NOT_WORKING) diff --git a/src/mame/drivers/mmd2.cpp b/src/mame/drivers/mmd2.cpp index be145348304..6f2f8254b01 100644 --- a/src/mame/drivers/mmd2.cpp +++ b/src/mame/drivers/mmd2.cpp @@ -127,20 +127,19 @@ protected: virtual void machine_reset() override; private: - DECLARE_WRITE8_MEMBER(port00_w); - DECLARE_WRITE8_MEMBER(port01_w); - DECLARE_WRITE8_MEMBER(port02_w); - DECLARE_WRITE8_MEMBER(port05_w); - DECLARE_READ8_MEMBER(port01_r); - DECLARE_READ8_MEMBER(port13_r); + void port00_w(uint8_t data); + void port01_w(uint8_t data); + void port02_w(uint8_t data); + void port05_w(uint8_t data); + uint8_t port01_r(); + uint8_t port13_r(); DECLARE_READ8_MEMBER(bank_r); - DECLARE_READ8_MEMBER(keyboard_r); - DECLARE_WRITE8_MEMBER(scanlines_w); - DECLARE_WRITE8_MEMBER(digit_w); - DECLARE_WRITE8_MEMBER(status_callback); + uint8_t keyboard_r(); + void scanlines_w(uint8_t data); + void digit_w(uint8_t data); + void status_callback(uint8_t data); DECLARE_WRITE_LINE_MEMBER(inte_callback); - DECLARE_READ_LINE_MEMBER(si); - DECLARE_WRITE_LINE_MEMBER(so); + void io_map(address_map &map); void mem_map(address_map &map); void reset_banks(); @@ -159,7 +158,7 @@ private: }; -WRITE8_MEMBER( mmd2_state::port00_w ) +void mmd2_state::port00_w(uint8_t data) { m_p[0][7] = BIT(data,7) ? 0 : 1; m_p[0][6] = BIT(data,6) ? 0 : 1; @@ -171,7 +170,7 @@ WRITE8_MEMBER( mmd2_state::port00_w ) m_p[0][0] = BIT(data,0) ? 0 : 1; } -WRITE8_MEMBER( mmd2_state::port01_w ) +void mmd2_state::port01_w(uint8_t data) { m_p[1][7] = BIT(data,7) ? 0 : 1; m_p[1][6] = BIT(data,6) ? 0 : 1; @@ -183,7 +182,7 @@ WRITE8_MEMBER( mmd2_state::port01_w ) m_p[1][0] = BIT(data,0) ? 0 : 1; } -WRITE8_MEMBER( mmd2_state::port02_w ) +void mmd2_state::port02_w(uint8_t data) { m_p[2][7] = BIT(data,7) ? 0 : 1; m_p[2][6] = BIT(data,6) ? 0 : 1; @@ -296,7 +295,7 @@ READ8_MEMBER( mmd2_state::bank_r ) return space.unmap(); } -READ8_MEMBER( mmd2_state::port01_r ) +uint8_t mmd2_state::port01_r() { // need to add ttyin bit 0 uint8_t data = 0x84; @@ -305,34 +304,34 @@ READ8_MEMBER( mmd2_state::port01_r ) return data; } -WRITE8_MEMBER( mmd2_state::port05_w ) +void mmd2_state::port05_w(uint8_t data) { // need to add ttyout bit 0 m_cass->output(BIT(data, 1) ? -1.0 : +1.0); } -WRITE8_MEMBER( mmd2_state::scanlines_w ) +void mmd2_state::scanlines_w(uint8_t data) { m_digit = data; } -WRITE8_MEMBER( mmd2_state::digit_w ) +void mmd2_state::digit_w(uint8_t data) { if (m_digit < 9) m_digits[m_digit] = data; } -READ8_MEMBER( mmd2_state::keyboard_r ) +uint8_t mmd2_state::keyboard_r() { uint8_t data = 0xff; - if (m_digit < 4) - data = m_io_keyboard[m_digit]->read(); + if ((m_digit & 7) < 4) + data = m_io_keyboard[m_digit & 7]->read(); return data; } -WRITE8_MEMBER( mmd2_state::status_callback ) +void mmd2_state::status_callback(uint8_t data) { // operate the HALT LED m_led_halt = ~data & i8080_cpu_device::STATUS_HLTA;