From 8b76c4d34540e4fbe5a9293d3f58da742bdca2c7 Mon Sep 17 00:00:00 2001 From: cracyc Date: Thu, 12 Sep 2013 21:20:22 +0000 Subject: [PATCH] (mess) at: find a compromise between the at486 and 5170. --- at486 floppies work again and 5170 bios 1 still boots, at586 still fails it's floppy tests --- src/mess/drivers/at.c | 4 ++-- src/mess/includes/at.h | 10 ++++++++++ src/mess/machine/at.c | 28 +++++++++++++++++++++++++--- src/mess/machine/isa_stereo_fx.c | 1 + 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/mess/drivers/at.c b/src/mess/drivers/at.c index e2ea437521a..25d233f82e3 100644 --- a/src/mess/drivers/at.c +++ b/src/mess/drivers/at.c @@ -1402,8 +1402,8 @@ COMP ( 1987, atvga, ibm5170, 0, atvga, atvga, at_state, atvga, COMP ( 1988, at386, ibm5170, 0, at386, atvga, at_state, atvga, "", "PC/AT 386 (VGA, MF2 Keyboard)", GAME_NOT_WORKING ) COMP ( 1988, ct386sx, ibm5170, 0, ct386sx, atvga, at_state, atvga, "", "NEAT 386SX (VGA, MF2 Keyboard)", GAME_NOT_WORKING ) COMP ( 1990, at486, ibm5170, 0, at486, atvga, at_state, atvga, "", "PC/AT 486 (VGA, MF2 Keyboard)", GAME_NOT_WORKING ) -COMP ( 1990, at586, ibm5170, 0, at586, atvga, driver_device, 0, "", "PC/AT 586 (PIIX4)", GAME_NOT_WORKING ) -COMP ( 1990, at586x3, ibm5170, 0, at586x3, atvga, driver_device, 0, "", "PC/AT 586 (PIIX3)", GAME_NOT_WORKING ) +COMP ( 1990, at586, ibm5170, 0, at586, atvga, at_state, at586, "", "PC/AT 586 (PIIX4)", GAME_NOT_WORKING ) +COMP ( 1990, at586x3, ibm5170, 0, at586x3, atvga, at_state, at586, "", "PC/AT 586 (PIIX3)", GAME_NOT_WORKING ) COMP ( 1989, neat, ibm5170, 0, neat, atvga, at_state, atvga, "", "NEAT (VGA, MF2 Keyboard)", GAME_NOT_WORKING ) COMP ( 1993, ec1849, ibm5170, 0, ec1849, atcga, at_state, atcga, "", "EC-1849", GAME_NOT_WORKING ) COMP ( 1993, megapc, ibm5170, 0, megapc, atvga, at_state, atvga, "Amstrad plc", "MegaPC", GAME_NOT_WORKING ) diff --git a/src/mess/includes/at.h b/src/mess/includes/at.h index 323c51b4fc3..bdfb8dd6a3f 100644 --- a/src/mess/includes/at.h +++ b/src/mess/includes/at.h @@ -156,12 +156,22 @@ public: DECLARE_DRIVER_INIT(atcga); DECLARE_DRIVER_INIT(atvga); + DECLARE_DRIVER_INIT(at586); DECLARE_MACHINE_START(at); DECLARE_MACHINE_RESET(at); void pc_set_dma_channel(int channel, int state); IRQ_CALLBACK_MEMBER(at_irq_callback); void init_at_common(); UINT32 at_286_a20(bool state); + + enum { + TYPE_286, + TYPE_386, + TYPE_486, + TYPE_586 + }; + + int m_type; }; diff --git a/src/mess/machine/at.c b/src/mess/machine/at.c index 5eca9a0cd33..1e8c4c0b3dd 100644 --- a/src/mess/machine/at.c +++ b/src/mess/machine/at.c @@ -271,7 +271,10 @@ READ8_MEMBER( at_state::at_portb_r ) /* 0x10 is the dram refresh line bit. The 5170 (bios 1) and 5162 test the cpu clock against it in post. */ if ( --m_poll_delay < 0 ) { - m_poll_delay = m_at_offset1 ? 3 : 2; + if(m_type == TYPE_286) + m_poll_delay = m_at_offset1 ? 3 : 2; + else + m_poll_delay = 3; m_at_offset1 ^= 0x10; } data = (data & ~0x10) | ( m_at_offset1 & 0x10 ); @@ -304,6 +307,13 @@ void at_state::init_at_common() { address_space& space = m_maincpu->space(AS_PROGRAM); + if(!strncmp(m_maincpu->shortname(), "i386", 4)) + m_type = TYPE_386; + else if(!strncmp(m_maincpu->shortname(), "i486", 4)) + m_type = TYPE_486; + else + m_type = TYPE_286; + /* MESS managed RAM */ membank("bank10")->set_base(m_ram->pointer()); @@ -315,7 +325,10 @@ void at_state::init_at_common() membank("bank1")->set_base(m_ram->pointer() + 0xa0000); } - m_at_offset1 = 0; + if(m_type == TYPE_286) + m_at_offset1 = 0; + else + m_at_offset1 = 0xff; } DRIVER_INIT_MEMBER(at_state,atcga) @@ -328,6 +341,12 @@ DRIVER_INIT_MEMBER(at_state,atvga) init_at_common(); } +DRIVER_INIT_MEMBER(at_state,at586) +{ + m_type = TYPE_586; + m_at_offset1 = 0xff; +} + IRQ_CALLBACK_MEMBER(at_state::at_irq_callback) { return m_pic8259_master->inta_r(); @@ -340,7 +359,10 @@ MACHINE_START_MEMBER(at_state,at) MACHINE_RESET_MEMBER(at_state,at) { - m_poll_delay = 3; + if(m_type == TYPE_286) + m_poll_delay = 3; + else + m_poll_delay = 4; m_at_spkrdata = 0; m_at_speaker_input = 0; m_dma_channel = -1; diff --git a/src/mess/machine/isa_stereo_fx.c b/src/mess/machine/isa_stereo_fx.c index 8a916b386f3..f01bcee997a 100644 --- a/src/mess/machine/isa_stereo_fx.c +++ b/src/mess/machine/isa_stereo_fx.c @@ -198,6 +198,7 @@ stereo_fx_device::stereo_fx_device(const machine_config &mconfig, const char *ta void stereo_fx_device::device_start() { ym3812_device *ym3812 = subdevice("ym3812"); + set_isa_device(); m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); m_isa->install_device(0x0226, 0x0227, 0, 0, read8_delegate(FUNC(stereo_fx_device::invalid_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_reset_w), this));