(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
This commit is contained in:
cracyc 2013-09-12 21:20:22 +00:00
parent 4d64202ef1
commit 8b76c4d345
4 changed files with 38 additions and 5 deletions

View File

@ -1402,8 +1402,8 @@ COMP ( 1987, atvga, ibm5170, 0, atvga, atvga, at_state, atvga,
COMP ( 1988, at386, ibm5170, 0, at386, atvga, at_state, atvga, "<generic>", "PC/AT 386 (VGA, MF2 Keyboard)", GAME_NOT_WORKING )
COMP ( 1988, ct386sx, ibm5170, 0, ct386sx, atvga, at_state, atvga, "<generic>", "NEAT 386SX (VGA, MF2 Keyboard)", GAME_NOT_WORKING )
COMP ( 1990, at486, ibm5170, 0, at486, atvga, at_state, atvga, "<generic>", "PC/AT 486 (VGA, MF2 Keyboard)", GAME_NOT_WORKING )
COMP ( 1990, at586, ibm5170, 0, at586, atvga, driver_device, 0, "<generic>", "PC/AT 586 (PIIX4)", GAME_NOT_WORKING )
COMP ( 1990, at586x3, ibm5170, 0, at586x3, atvga, driver_device, 0, "<generic>", "PC/AT 586 (PIIX3)", GAME_NOT_WORKING )
COMP ( 1990, at586, ibm5170, 0, at586, atvga, at_state, at586, "<generic>", "PC/AT 586 (PIIX4)", GAME_NOT_WORKING )
COMP ( 1990, at586x3, ibm5170, 0, at586x3, atvga, at_state, at586, "<generic>", "PC/AT 586 (PIIX3)", GAME_NOT_WORKING )
COMP ( 1989, neat, ibm5170, 0, neat, atvga, at_state, atvga, "<generic>", "NEAT (VGA, MF2 Keyboard)", GAME_NOT_WORKING )
COMP ( 1993, ec1849, ibm5170, 0, ec1849, atcga, at_state, atcga, "<unknown>", "EC-1849", GAME_NOT_WORKING )
COMP ( 1993, megapc, ibm5170, 0, megapc, atvga, at_state, atvga, "Amstrad plc", "MegaPC", GAME_NOT_WORKING )

View File

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

View File

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

View File

@ -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_device>("ym3812");
set_isa_device();
m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("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));