kr03: define native keyboard layout (partially fixes MT05818)

This commit is contained in:
Sergey Svishchev 2018-06-18 23:19:36 +03:00 committed by Vas Crabb
parent 27a3154549
commit 614507ce14
3 changed files with 161 additions and 52 deletions

View File

@ -202,6 +202,117 @@ INPUT_PORTS_START( radio86 )
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Rus/Lat") PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT)
INPUT_PORTS_END
// layout from http://retropc.org/Elektronika_KR-02_s_67.html
INPUT_PORTS_START( kr03 )
PORT_START("LINE0")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR(0xA4)
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_START("LINE1")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) // xxx
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J')
PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[')
PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']')
PORT_START("LINE2")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_UNUSED)
1ORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL)
PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U')
PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K')
PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P')
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N')
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G')
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L')
PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
PORT_START("LINE3")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Rus") PORT_CODE(KEYCODE_LALT)
PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W')
PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I')
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R')
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O')
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('@')
PORT_START("LINE4")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lat") PORT_CODE(KEYCODE_RALT)
PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S')
PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M')
PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T')
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Back") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_START("LINE5")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('>') PORT_CHAR('.')
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\')
PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
PORT_START("LINE6")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) // xxx
PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))
PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_UNUSED) // _
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H')
PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
PORT_START("LINE7")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Str")
PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PS (LF)")
PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=') // xxx
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(':') PORT_CHAR('*')
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_START("LINE8")
PORT_BIT(0x00, IP_ACTIVE_LOW, IPT_UNUSED)
INPUT_PORTS_END
INPUT_PORTS_START( ms7007 )
PORT_START("LINE0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR(' ') PORT_CHAR('0')
@ -396,6 +507,17 @@ MACHINE_CONFIG_START(radio86_state::radio86)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(radio86_state::kr03)
radio86(config);
/* basic machine hardware */
MCFG_DEVICE_MODIFY("ppi8255_1")
MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, radio86_state, radio86_8255_porta_w2))
MCFG_I8255_IN_PORTB_CB(READ8(*this, radio86_state, kr03_8255_portb_r2))
MCFG_I8255_IN_PORTC_CB(READ8(*this, radio86_state, radio86_8255_portc_r2))
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, radio86_state, radio86_8255_portc_w2))
MACHINE_CONFIG_END
MACHINE_CONFIG_START(radio86_state::radio16)
radio86(config);
/* basic machine hardware */
@ -569,7 +691,7 @@ ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1986, radio86, 0, 0, radio86, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK", 0 )
COMP( 1986, radio16, radio86, 0, radio16, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK (16K RAM)", 0 )
COMP( 1986, kr03, radio86, 0, radio86, radio86, radio86_state, init_radio86, "Elektronika", "KR-03", 0 )
COMP( 1986, kr03, radio86, 0, kr03, kr03, radio86_state, init_radio86, "Elektronika", "KR-03", 0 )
COMP( 1986, radio4k, radio86, 0, radio86, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK (4K ROM)", 0 )
COMP( 1986, radiorom, radio86, 0, radiorom, radio86, radio86_state, init_radio86, "<unknown>", "Radio-86RK (ROM-Disk)", 0 )
COMP( 1986, radioram, radio86, 0, radioram, radio86, radio86_state, init_radioram, "<unknown>", "Radio-86RK (ROM/RAM Disk)", 0 )

View File

@ -36,23 +36,8 @@ public:
m_ppi8255_2(*this, "ppi8255_2"),
m_region_maincpu(*this, "maincpu"),
m_bank1(*this, "bank1"),
m_io_line0(*this, "LINE0"),
m_io_line1(*this, "LINE1"),
m_io_line2(*this, "LINE2"),
m_io_line3(*this, "LINE3"),
m_io_line4(*this, "LINE4"),
m_io_line5(*this, "LINE5"),
m_io_line6(*this, "LINE6"),
m_io_line7(*this, "LINE7"),
m_io_line8(*this, "LINE8"),
m_io_cline0(*this, "CLINE0"),
m_io_cline1(*this, "CLINE1"),
m_io_cline2(*this, "CLINE2"),
m_io_cline3(*this, "CLINE3"),
m_io_cline4(*this, "CLINE4"),
m_io_cline5(*this, "CLINE5"),
m_io_cline6(*this, "CLINE6"),
m_io_cline7(*this, "CLINE7"),
m_io_line(*this, "LINE%u", 0),
m_io_cline(*this, "CLINE%u", 0),
m_palette(*this, "palette") { }
virtual void video_start() override;
@ -78,6 +63,7 @@ public:
DECLARE_WRITE8_MEMBER(radio86_8255_porta_w2);
DECLARE_WRITE8_MEMBER(radio86_8255_portc_w2);
DECLARE_READ8_MEMBER(rk7007_8255_portc_r);
DECLARE_READ8_MEMBER(kr03_8255_portb_r2);
DECLARE_WRITE_LINE_MEMBER(hrq_w);
DECLARE_READ8_MEMBER(radio86rom_romdisk_porta_r);
DECLARE_READ8_MEMBER(radio86ram_romdisk_porta_r);
@ -97,6 +83,7 @@ public:
void radio86(machine_config &config);
void radio16(machine_config &config);
void radioram(machine_config &config);
void kr03(machine_config &config);
void impuls03_mem(address_map &map);
void mikron2_mem(address_map &map);
void radio86_16_mem(address_map &map);
@ -113,23 +100,8 @@ protected:
optional_device<i8255_device> m_ppi8255_2;
required_memory_region m_region_maincpu;
required_memory_bank m_bank1;
required_ioport m_io_line0;
required_ioport m_io_line1;
required_ioport m_io_line2;
required_ioport m_io_line3;
required_ioport m_io_line4;
required_ioport m_io_line5;
required_ioport m_io_line6;
required_ioport m_io_line7;
required_ioport m_io_line8;
optional_ioport m_io_cline0;
optional_ioport m_io_cline1;
optional_ioport m_io_cline2;
optional_ioport m_io_cline3;
optional_ioport m_io_cline4;
optional_ioport m_io_cline5;
optional_ioport m_io_cline6;
optional_ioport m_io_cline7;
required_ioport_array<9> m_io_line;
optional_ioport_array<8> m_io_cline;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
void radio86_init_keyboard();

View File

@ -39,24 +39,41 @@ void radio86_state::init_radioram()
m_radio_ram_disk = std::make_unique<uint8_t[]>(0x20000);
memset(m_radio_ram_disk.get(),0,0x20000);
}
READ8_MEMBER(radio86_state::radio86_8255_portb_r2)
{
uint8_t key = 0xff;
if ((m_keyboard_mask & 0x01)!=0) { key &= m_io_line0->read(); }
if ((m_keyboard_mask & 0x02)!=0) { key &= m_io_line1->read(); }
if ((m_keyboard_mask & 0x04)!=0) { key &= m_io_line2->read(); }
if ((m_keyboard_mask & 0x08)!=0) { key &= m_io_line3->read(); }
if ((m_keyboard_mask & 0x10)!=0) { key &= m_io_line4->read(); }
if ((m_keyboard_mask & 0x20)!=0) { key &= m_io_line5->read(); }
if ((m_keyboard_mask & 0x40)!=0) { key &= m_io_line6->read(); }
if ((m_keyboard_mask & 0x80)!=0) { key &= m_io_line7->read(); }
for (int i = 0; i < 8; i++)
{
if (BIT(m_keyboard_mask, i)) {
key &= m_io_line[i]->read();
}
}
return key;
}
READ8_MEMBER(radio86_state::kr03_8255_portb_r2)
{
uint8_t key = 0xff;
uint16_t data;
for (int i = 0; i < 8; i++)
{
if (BIT(m_keyboard_mask, i))
{
data = m_io_line[i]->read();
if (!BIT(data, 8)) data &= ~3;
if (!BIT(data, 9)) data &= ~5;
if (!BIT(data, 10)) data &= ~7;
key &= data;
}
}
return key;
}
READ8_MEMBER(radio86_state::radio86_8255_portc_r2)
{
double level = m_cassette->input();
uint8_t dat = m_io_line8->read();
uint8_t dat = m_io_line[8]->read();
if (level < 0) {
dat ^= m_tape_value;
}
@ -78,14 +95,12 @@ READ8_MEMBER(radio86_state::rk7007_8255_portc_r)
{
double level = m_cassette->input();
uint8_t key = 0xff;
if ((m_keyboard_mask & 0x01)!=0) { key &= m_io_cline0->read(); }
if ((m_keyboard_mask & 0x02)!=0) { key &= m_io_cline1->read(); }
if ((m_keyboard_mask & 0x04)!=0) { key &= m_io_cline2->read(); }
if ((m_keyboard_mask & 0x08)!=0) { key &= m_io_cline3->read(); }
if ((m_keyboard_mask & 0x10)!=0) { key &= m_io_cline4->read(); }
if ((m_keyboard_mask & 0x20)!=0) { key &= m_io_cline5->read(); }
if ((m_keyboard_mask & 0x40)!=0) { key &= m_io_cline6->read(); }
if ((m_keyboard_mask & 0x80)!=0) { key &= m_io_cline7->read(); }
for (int i = 0; i < 8; i++)
{
if ((m_keyboard_mask & (1 << i))!=0) {
key &= m_io_cline[i]->read();
}
}
key &= 0xe0;
if (level < 0) {
key ^= m_tape_value;