diff options
Diffstat (limited to 'src/devices/machine/genpc.cpp')
-rw-r--r-- | src/devices/machine/genpc.cpp | 254 |
1 files changed, 133 insertions, 121 deletions
diff --git a/src/devices/machine/genpc.cpp b/src/devices/machine/genpc.cpp index 50528d17aa7..b0e57789932 100644 --- a/src/devices/machine/genpc.cpp +++ b/src/devices/machine/genpc.cpp @@ -4,11 +4,10 @@ machine/genpc.cpp - ***************************************************************************/ #include "emu.h" -#include "machine/genpc.h" +#include "genpc.h" #include "imagedev/cassette.h" #include "machine/i8255.h" @@ -16,6 +15,7 @@ #include "machine/pit8253.h" #include "machine/ram.h" #include "sound/spkrdev.h" + #include "speaker.h" @@ -38,7 +38,7 @@ * *************************************************************************/ -WRITE8_MEMBER( ibm5160_mb_device::pc_page_w) +void ibm5160_mb_device::pc_page_w(offs_t offset, uint8_t data) { switch(offset % 4) { @@ -55,7 +55,7 @@ WRITE8_MEMBER( ibm5160_mb_device::pc_page_w) } -WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dma_hrq_changed ) +void ibm5160_mb_device::pc_dma_hrq_changed(int state) { m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE); @@ -64,7 +64,7 @@ WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dma_hrq_changed ) } -READ8_MEMBER( ibm5160_mb_device::pc_dma_read_byte ) +uint8_t ibm5160_mb_device::pc_dma_read_byte(offs_t offset) { if(m_dma_channel == -1) return 0xff; @@ -74,7 +74,7 @@ READ8_MEMBER( ibm5160_mb_device::pc_dma_read_byte ) } -WRITE8_MEMBER( ibm5160_mb_device::pc_dma_write_byte ) +void ibm5160_mb_device::pc_dma_write_byte(offs_t offset, uint8_t data) { if(m_dma_channel == -1) return; @@ -85,51 +85,51 @@ WRITE8_MEMBER( ibm5160_mb_device::pc_dma_write_byte ) } -READ8_MEMBER( ibm5160_mb_device::pc_dma8237_1_dack_r ) +uint8_t ibm5160_mb_device::pc_dma8237_1_dack_r() { return m_isabus->dack_r(1); } -READ8_MEMBER( ibm5160_mb_device::pc_dma8237_2_dack_r ) +uint8_t ibm5160_mb_device::pc_dma8237_2_dack_r() { return m_isabus->dack_r(2); } -READ8_MEMBER( ibm5160_mb_device::pc_dma8237_3_dack_r ) +uint8_t ibm5160_mb_device::pc_dma8237_3_dack_r() { return m_isabus->dack_r(3); } -WRITE8_MEMBER( ibm5160_mb_device::pc_dma8237_1_dack_w ) +void ibm5160_mb_device::pc_dma8237_1_dack_w(uint8_t data) { m_isabus->dack_w(1,data); } -WRITE8_MEMBER( ibm5160_mb_device::pc_dma8237_2_dack_w ) +void ibm5160_mb_device::pc_dma8237_2_dack_w(uint8_t data) { m_isabus->dack_w(2,data); } -WRITE8_MEMBER( ibm5160_mb_device::pc_dma8237_3_dack_w ) +void ibm5160_mb_device::pc_dma8237_3_dack_w(uint8_t data) { m_isabus->dack_w(3,data); } -WRITE8_MEMBER( ibm5160_mb_device::pc_dma8237_0_dack_w ) +void ibm5160_mb_device::pc_dma8237_0_dack_w(uint8_t data) { m_u73_q2 = 0; m_dma8237->dreq0_w( m_u73_q2 ); } -WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dma8237_out_eop ) +void ibm5160_mb_device::pc_dma8237_out_eop(int state) { m_cur_eop = state == ASSERT_LINE; - if(m_dma_channel != -1 && m_cur_eop) + if(m_dma_channel != -1) m_isabus->eop_w(m_dma_channel, m_cur_eop ? ASSERT_LINE : CLEAR_LINE ); } @@ -149,10 +149,10 @@ void ibm5160_mb_device::pc_select_dma_channel(int channel, bool state) } } -WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dack0_w ) { pc_select_dma_channel(0, state); } -WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dack1_w ) { pc_select_dma_channel(1, state); } -WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dack2_w ) { pc_select_dma_channel(2, state); } -WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dack3_w ) { pc_select_dma_channel(3, state); } +void ibm5160_mb_device::pc_dack0_w(int state) { pc_select_dma_channel(0, state); } +void ibm5160_mb_device::pc_dack1_w(int state) { pc_select_dma_channel(1, state); } +void ibm5160_mb_device::pc_dack2_w(int state) { pc_select_dma_channel(2, state); } +void ibm5160_mb_device::pc_dack3_w(int state) { pc_select_dma_channel(3, state); } /************************************************************* * @@ -160,15 +160,15 @@ WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dack3_w ) { pc_select_dma_channel(3, st * *************************************************************/ -WRITE_LINE_MEMBER(ibm5160_mb_device::pc_speaker_set_spkrdata) +void ibm5160_mb_device::pc_speaker_set_spkrdata(int state) { m_pc_spkrdata = state ? 1 : 0; m_speaker->level_w(m_pc_spkrdata & m_pit_out2); } -WRITE_LINE_MEMBER(ibm5160_mb_device::pic_int_w) +void ibm5160_mb_device::pic_int_w(int state) { - m_maincpu->set_input_line(0, state); + m_int_callback(state); } @@ -178,7 +178,7 @@ WRITE_LINE_MEMBER(ibm5160_mb_device::pic_int_w) * *************************************************************/ -WRITE_LINE_MEMBER( ibm5160_mb_device::pc_pit8253_out1_changed ) +void ibm5160_mb_device::pc_pit8253_out1_changed(int state) { /* Trigger DMA channel #0 */ if ( m_out1 == 0 && state == 1 && m_u73_q2 == 0 ) @@ -190,13 +190,13 @@ WRITE_LINE_MEMBER( ibm5160_mb_device::pc_pit8253_out1_changed ) } -WRITE_LINE_MEMBER( ibm5160_mb_device::pc_pit8253_out2_changed ) +void ibm5160_mb_device::pc_pit8253_out2_changed(int state) { m_pit_out2 = state ? 1 : 0; m_speaker->level_w(m_pc_spkrdata & m_pit_out2); } -WRITE_LINE_MEMBER( ibm5150_mb_device::pc_pit8253_out2_changed ) +void ibm5150_mb_device::pc_pit8253_out2_changed(int state) { ibm5160_mb_device::pc_pit8253_out2_changed(state); m_cassette->output(m_pit_out2 ? 1.0 : -1.0); @@ -258,7 +258,7 @@ WRITE_LINE_MEMBER( ibm5150_mb_device::pc_pit8253_out2_changed ) * ON ON - one disk drive * **********************************************************/ -WRITE_LINE_MEMBER( ibm5150_mb_device::keyboard_clock_w ) +void ibm5150_mb_device::keyboard_clock_w(int state) { if (!m_ppi_keyboard_clear && !state && !m_ppi_shift_enable) { @@ -268,11 +268,11 @@ WRITE_LINE_MEMBER( ibm5150_mb_device::keyboard_clock_w ) m_ppi_shift_register |= m_ppi_data_signal << 7; m_pic8259->ir1_w(m_ppi_shift_enable); - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); } } -WRITE_LINE_MEMBER( ec1841_mb_device::keyboard_clock_w ) +void ec1841_mb_device::keyboard_clock_w(int state) { if (!m_ppi_keyboard_clear && !state && !m_ppi_shift_enable) { @@ -282,11 +282,11 @@ WRITE_LINE_MEMBER( ec1841_mb_device::keyboard_clock_w ) m_ppi_shift_register |= m_ppi_data_signal << 7; m_pic8259->ir1_w(m_ppi_shift_enable); - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); } } -WRITE_LINE_MEMBER( ibm5160_mb_device::keyboard_clock_w ) +void ibm5160_mb_device::keyboard_clock_w(int state) { if (!m_ppi_keyboard_clear && !state && !m_ppi_shift_enable) { @@ -296,17 +296,17 @@ WRITE_LINE_MEMBER( ibm5160_mb_device::keyboard_clock_w ) m_ppi_shift_register |= m_ppi_data_signal << 7; m_pic8259->ir1_w(m_ppi_shift_enable); - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); } } -WRITE_LINE_MEMBER( ibm5160_mb_device::keyboard_data_w ) +void ibm5160_mb_device::keyboard_data_w(int state) { m_ppi_data_signal = state; } -READ8_MEMBER (ibm5160_mb_device::pc_ppi_porta_r) +uint8_t ibm5160_mb_device::pc_ppi_porta_r() { int data = 0xFF; /* KB port A */ @@ -332,7 +332,7 @@ READ8_MEMBER (ibm5160_mb_device::pc_ppi_porta_r) } -READ8_MEMBER ( ibm5160_mb_device::pc_ppi_portc_r ) +uint8_t ibm5160_mb_device::pc_ppi_portc_r() { int data=0xff; @@ -362,7 +362,7 @@ READ8_MEMBER ( ibm5160_mb_device::pc_ppi_portc_r ) } -WRITE8_MEMBER( ibm5160_mb_device::pc_ppi_portb_w ) +void ibm5160_mb_device::pc_ppi_portb_w(uint8_t data) { /* PPI controller port B*/ m_ppi_portb = data; @@ -380,9 +380,9 @@ WRITE8_MEMBER( ibm5160_mb_device::pc_ppi_portb_w ) m_pic8259->ir1_w(m_ppi_shift_enable); } - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); m_ppi_clock_signal = ( m_ppi_keyb_clock ) ? 1 : 0; - m_pc_kbdc->clock_write_from_mb(m_ppi_clock_signal); + m_kbdclk_callback(m_ppi_clock_signal); } @@ -392,17 +392,17 @@ WRITE8_MEMBER( ibm5160_mb_device::pc_ppi_portb_w ) * **********************************************************/ -WRITE8_MEMBER( ibm5160_mb_device::nmi_enable_w ) +void ibm5160_mb_device::nmi_enable_w(uint8_t data) { m_nmi_enabled = BIT(data,7); if (!m_nmi_enabled) - m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + m_nmi_callback(CLEAR_LINE); } -WRITE_LINE_MEMBER( ibm5160_mb_device::iochck_w ) +void ibm5160_mb_device::iochck_w(int state) { if (m_nmi_enabled && !state) - m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + m_nmi_callback(ASSERT_LINE); } //************************************************************************** @@ -450,7 +450,7 @@ void ibm5160_mb_device::device_add_mconfig(machine_config &config) PIC8259(config, m_pic8259); m_pic8259->out_int_callback().set(FUNC(ibm5160_mb_device::pic_int_w)); - I8255A(config, m_ppi8255, 0); + I8255A(config, m_ppi8255); m_ppi8255->in_pa_callback().set(FUNC(ibm5160_mb_device::pc_ppi_porta_r)); m_ppi8255->out_pb_callback().set(FUNC(ibm5160_mb_device::pc_ppi_portb_w)); m_ppi8255->in_pc_callback().set(FUNC(ibm5160_mb_device::pc_ppi_portc_r)); @@ -469,10 +469,6 @@ void ibm5160_mb_device::device_add_mconfig(machine_config &config) m_isabus->drq3_callback().set(m_dma8237, FUNC(am9517a_device::dreq3_w)); m_isabus->iochck_callback().set(FUNC(ibm5160_mb_device::iochck_w)); - PC_KBDC(config, m_pc_kbdc, 0); - m_pc_kbdc->out_clock_cb().set(FUNC(ibm5160_mb_device::keyboard_clock_w)); - m_pc_kbdc->out_data_cb().set(FUNC(ibm5160_mb_device::keyboard_data_w)); - /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00); @@ -481,25 +477,25 @@ void ibm5160_mb_device::device_add_mconfig(machine_config &config) static INPUT_PORTS_START( ibm5160_mb ) PORT_START("DSW0") /* IN1 */ - PORT_DIPNAME( 0xc0, 0x40, "Number of floppy drives") + PORT_DIPNAME( 0xc0, 0x40, "Number of floppy drives") PORT_DIPLOCATION("SW1:7,8") PORT_DIPSETTING( 0x00, "1" ) PORT_DIPSETTING( 0x40, "2" ) PORT_DIPSETTING( 0x80, "3" ) PORT_DIPSETTING( 0xc0, "4" ) - PORT_DIPNAME( 0x30, 0x30, "Graphics adapter") + PORT_DIPNAME( 0x30, 0x30, "Graphics adapter") PORT_DIPLOCATION("SW1:5,6") PORT_DIPSETTING( 0x00, "EGA/VGA" ) PORT_DIPSETTING( 0x10, "Color 40x25" ) PORT_DIPSETTING( 0x20, "Color 80x25" ) PORT_DIPSETTING( 0x30, "Monochrome" ) - PORT_DIPNAME( 0x0c, 0x0c, "RAM banks") + PORT_DIPNAME( 0x0c, 0x0c, "RAM banks") PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, "1 - 16/ 64/256K" ) PORT_DIPSETTING( 0x04, "2 - 32/128/512K" ) PORT_DIPSETTING( 0x08, "3 - 48/192/576K" ) PORT_DIPSETTING( 0x0c, "4 - 64/256/640K" ) - PORT_DIPNAME( 0x02, 0x00, "8087 installed") + PORT_DIPNAME( 0x02, 0x00, "8087 installed") PORT_DIPLOCATION("SW1:2") PORT_DIPSETTING( 0x00, DEF_STR(No) ) PORT_DIPSETTING( 0x02, DEF_STR(Yes) ) - PORT_DIPNAME( 0x01, 0x01, "Boot from floppy") + PORT_DIPNAME( 0x01, 0x01, "Boot from floppy") PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x01, DEF_STR(Yes) ) PORT_DIPSETTING( 0x00, DEF_STR(No) ) INPUT_PORTS_END @@ -540,8 +536,11 @@ ibm5160_mb_device::ibm5160_mb_device( , m_ppi8255(*this, "ppi8255") , m_speaker(*this, "speaker") , m_isabus(*this, "isa") - , m_pc_kbdc(*this, "pc_kbdc") , m_ram(*this, ":" RAM_TAG) + , m_int_callback(*this) + , m_nmi_callback(*this) + , m_kbdclk_callback(*this) + , m_kbddata_callback(*this) { } @@ -555,6 +554,7 @@ void ibm5160_mb_device::map(address_map &map) map(0x00a0, 0x00a1).w(FUNC(ibm5160_mb_device::nmi_enable_w)); } + //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -612,13 +612,66 @@ void ibm5150_mb_device::device_add_mconfig(machine_config &config) { ibm5160_mb_device::device_add_mconfig(config); - subdevice<pc_kbdc_device>("pc_kbdc")->out_clock_cb().set(FUNC(ibm5150_mb_device::keyboard_clock_w)); - m_ppi8255->out_pb_callback().set(FUNC(ibm5150_mb_device::pc_ppi_portb_w)); m_ppi8255->in_pc_callback().set(FUNC(ibm5150_mb_device::pc_ppi_portc_r)); CASSETTE(config, m_cassette); m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED); + m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05); + m_cassette->set_interface("ibm5150_cass"); +} + +static INPUT_PORTS_START( ibm5150_mb ) + PORT_START("DSW0") + PORT_DIPNAME( 0xc0, 0x40, "Number of floppy drives") PORT_DIPLOCATION("SW1:7,8") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x40, "2" ) + PORT_DIPSETTING( 0x80, "3" ) + PORT_DIPSETTING( 0xc0, "4" ) + PORT_DIPNAME( 0x30, 0x30, "Graphics adapter") PORT_DIPLOCATION("SW1:5,6") + PORT_DIPSETTING( 0x00, "EGA/VGA" ) + PORT_DIPSETTING( 0x10, "Color 40x25" ) + PORT_DIPSETTING( 0x20, "Color 80x25" ) + PORT_DIPSETTING( 0x30, "Monochrome" ) + PORT_DIPNAME( 0x0c, 0x0c, "Base RAM size") PORT_DIPLOCATION("SW1:3,4") + PORT_DIPSETTING( 0x00, "16K" ) + PORT_DIPSETTING( 0x04, "32K" ) + PORT_DIPSETTING( 0x08, "48K" ) + PORT_DIPSETTING( 0x0c, "64K" ) + PORT_DIPNAME( 0x02, 0x00, "8087 installed") PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING( 0x00, DEF_STR(No) ) + PORT_DIPSETTING( 0x02, DEF_STR(Yes) ) + PORT_DIPNAME( 0x01, 0x01, "Boot from floppy") PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x01, DEF_STR(Yes) ) + PORT_DIPSETTING( 0x00, DEF_STR(No) ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x1f, 0x12, "Extra RAM size") PORT_DIPLOCATION("SW2:1,2,3,4,5") + PORT_DIPSETTING( 0x00, "None" ) + PORT_DIPSETTING( 0x01, "32K" ) + PORT_DIPSETTING( 0x02, "64K" ) + PORT_DIPSETTING( 0x03, "96K" ) + PORT_DIPSETTING( 0x04, "128K" ) + PORT_DIPSETTING( 0x05, "160K" ) + PORT_DIPSETTING( 0x06, "192K" ) + PORT_DIPSETTING( 0x07, "224K" ) + PORT_DIPSETTING( 0x08, "256K" ) + PORT_DIPSETTING( 0x09, "288K" ) + PORT_DIPSETTING( 0x0a, "320K" ) + PORT_DIPSETTING( 0x0b, "352K" ) + PORT_DIPSETTING( 0x0c, "384K" ) + PORT_DIPSETTING( 0x0d, "416K" ) + PORT_DIPSETTING( 0x0e, "448K" ) + PORT_DIPSETTING( 0x0f, "480K" ) + PORT_DIPSETTING( 0x10, "512K" ) + PORT_DIPSETTING( 0x11, "544K" ) + PORT_DIPSETTING( 0x12, "576K" ) + PORT_DIPUNUSED_DIPLOC( 0xe0, 0x00, "SW2:6,7,8" ) +INPUT_PORTS_END + +ioport_constructor ibm5150_mb_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( ibm5150_mb ); } //************************************************************************** @@ -640,37 +693,13 @@ ibm5150_mb_device::ibm5150_mb_device(const machine_config &mconfig, device_type { } -READ8_MEMBER (ibm5150_mb_device::pc_ppi_porta_r) +uint8_t ibm5150_mb_device::pc_ppi_porta_r() { int data = 0xFF; /* KB port A */ if (m_ppi_keyboard_clear) { - /* 0 0 - no floppy drives - * 1 Not used - * 2-3 The number of memory banks on the system board - * 4-5 Display mode - * 11 = monochrome - * 10 - color 80x25 - * 01 - color 40x25 - * 6-7 The number of floppy disk drives - */ - data = ioport("DSW0")->read() & 0xF3; - switch ( m_ram->size() ) - { - case 16 * 1024: - data |= 0x00; - break; - case 32 * 1024: /* Need to verify if this is correct */ - data |= 0x04; - break; - case 48 * 1024: /* Need to verify if this is correct */ - data |= 0x08; - break; - default: - data |= 0x0C; - break; - } + data = ioport("DSW0")->read(); } else { @@ -681,7 +710,7 @@ READ8_MEMBER (ibm5150_mb_device::pc_ppi_porta_r) } -READ8_MEMBER ( ibm5150_mb_device::pc_ppi_portc_r ) +uint8_t ibm5150_mb_device::pc_ppi_portc_r() { int data=0xff; @@ -690,37 +719,11 @@ READ8_MEMBER ( ibm5150_mb_device::pc_ppi_portc_r ) /* KB port C: equipment flags */ if (m_ppi_portc_switch_high) { - /* read hi nibble of SW2 */ - data = data & 0xf0; - - switch ( m_ram->size() - 64 * 1024 ) - { - case 64 * 1024: data |= 0x00; break; - case 128 * 1024: data |= 0x02; break; - case 192 * 1024: data |= 0x04; break; - case 256 * 1024: data |= 0x06; break; - case 320 * 1024: data |= 0x08; break; - case 384 * 1024: data |= 0x0A; break; - case 448 * 1024: data |= 0x0C; break; - case 512 * 1024: data |= 0x0E; break; - case 576 * 1024: data |= 0x01; break; - case 640 * 1024: data |= 0x03; break; - case 704 * 1024: data |= 0x05; break; - case 768 * 1024: data |= 0x07; break; - case 832 * 1024: data |= 0x09; break; - case 896 * 1024: data |= 0x0B; break; - case 960 * 1024: data |= 0x0D; break; - } - if ( m_ram->size() > 960 * 1024 ) - data |= 0x0D; - - PIO_LOG(1,"PIO_C_r (hi)",("$%02x\n", data)); + data = (data & 0xf0) | ioport("DSW1")->read(); } else { - /* read lo nibble of S2 */ - data = (data & 0xf0) | (ioport("DSW0")->read() & 0x0f); - PIO_LOG(1,"PIO_C_r (lo)",("$%02x\n", data)); + data = (data & 0xf0) | (ioport("DSW1")->read() >> 4); } if ( ! ( m_ppi_portb & 0x08 ) ) @@ -749,11 +752,11 @@ READ8_MEMBER ( ibm5150_mb_device::pc_ppi_portc_r ) } -WRITE8_MEMBER( ibm5150_mb_device::pc_ppi_portb_w ) +void ibm5150_mb_device::pc_ppi_portb_w(uint8_t data) { /* KB controller port B */ m_ppi_portb = data; - m_ppi_portc_switch_high = data & 0x08; + m_ppi_portc_switch_high = data & 0x04; m_ppi_keyboard_clear = data & 0x80; m_ppi_keyb_clock = data & 0x40; m_pit8253->write_gate2(BIT(data, 0)); @@ -769,9 +772,9 @@ WRITE8_MEMBER( ibm5150_mb_device::pc_ppi_portb_w ) m_pic8259->ir1_w(m_ppi_shift_enable); } - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); m_ppi_clock_signal = ( m_ppi_keyb_clock ) ? 1 : 0; - m_pc_kbdc->clock_write_from_mb(m_ppi_clock_signal); + m_kbdclk_callback(m_ppi_clock_signal); } //************************************************************************** @@ -849,7 +852,7 @@ void ec1840_mb_device::device_start() { } -READ8_MEMBER( ec1840_mb_device::pc_ppi_portc_r ) +uint8_t ec1840_mb_device::pc_ppi_portc_r() { int data = 0xff; @@ -902,8 +905,6 @@ void ec1841_mb_device::device_add_mconfig(machine_config &config) m_ppi8255->out_pb_callback().set(FUNC(ec1841_mb_device::pc_ppi_portb_w)); m_ppi8255->in_pc_callback().set(FUNC(ec1841_mb_device::pc_ppi_portc_r)); - - subdevice<pc_kbdc_device>("pc_kbdc")->out_clock_cb().set(FUNC(ec1841_mb_device::keyboard_clock_w)); } static INPUT_PORTS_START( ec1841_mb ) @@ -969,7 +970,7 @@ void ec1841_mb_device::device_start() } // kbd interface is 5150-like but PB2 controls access to second bank of DIP switches (SA2). -WRITE8_MEMBER( ec1841_mb_device::pc_ppi_portb_w ) +void ec1841_mb_device::pc_ppi_portb_w(uint8_t data) { /* KB controller port B */ m_ppi_portb = data; @@ -987,12 +988,12 @@ WRITE8_MEMBER( ec1841_mb_device::pc_ppi_portb_w ) m_pic8259->ir1_w(m_ppi_shift_enable); } - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); m_ppi_clock_signal = ( m_ppi_keyb_clock ) ? 1 : 0; - m_pc_kbdc->clock_write_from_mb(m_ppi_clock_signal); + m_kbdclk_callback(m_ppi_clock_signal); } -READ8_MEMBER( ec1841_mb_device::pc_ppi_portc_r ) +uint8_t ec1841_mb_device::pc_ppi_portc_r() { int data=0xff; @@ -1032,7 +1033,6 @@ void pc_noppi_mb_device::device_add_mconfig(machine_config &config) { ibm5160_mb_device::device_add_mconfig(config); - config.device_remove("pc_kbdc"); config.device_remove("ppi8255"); } @@ -1044,11 +1044,23 @@ ioport_constructor pc_noppi_mb_device::device_input_ports() const return INPUT_PORTS_NAME( pc_noppi_mb ); } +uint8_t pc_noppi_mb_device::pc_ppi_porta_r() +{ + return m_ppi_shift_register; +} + +uint8_t pc_noppi_mb_device::pc_ppi_portb_r() +{ + return m_ppi_portb; +} + void pc_noppi_mb_device::map(address_map &map) { map(0x0000, 0x000f).rw("dma8237", FUNC(am9517a_device::read), FUNC(am9517a_device::write)); map(0x0020, 0x002f).rw("pic8259", FUNC(pic8259_device::read), FUNC(pic8259_device::write)); map(0x0040, 0x004f).rw("pit8253", FUNC(pit8253_device::read), FUNC(pit8253_device::write)); + map(0x0060, 0x0060).r(FUNC(pc_noppi_mb_device::pc_ppi_porta_r)); + map(0x0061, 0x0061).rw(FUNC(pc_noppi_mb_device::pc_ppi_portb_r), FUNC(pc_noppi_mb_device::pc_ppi_portb_w)); map(0x0080, 0x008f).w(FUNC(pc_noppi_mb_device::pc_page_w)); map(0x00a0, 0x00a1).w(FUNC(pc_noppi_mb_device::nmi_enable_w)); } |