i7000.cpp, mmd2.cpp: Simplify handlr signatures; correct 8279 handlers (nw)

This commit is contained in:
AJR 2020-05-17 08:52:59 -04:00
parent 79746e1e2f
commit e8d6729695
2 changed files with 39 additions and 49 deletions

View File

@ -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<cpu_device> m_maincpu;
required_device<generic_slot_device> m_card;
required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<uint8_t> 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)

View File

@ -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;