at: create at motherboard device and split pci and ps2 machines into own files [Carl]

This commit is contained in:
cracyc 2016-02-24 10:45:12 -06:00
parent 0c452da4b2
commit 24ced36677
9 changed files with 1186 additions and 1385 deletions

View File

@ -1262,7 +1262,9 @@ files {
createMESSProjects(_target, _subtarget, "at")
files {
MAME_DIR .. "src/mame/drivers/at.cpp",
MAME_DIR .. "src/mame/includes/at.h",
MAME_DIR .. "src/mame/drivers/atpci.cpp",
MAME_DIR .. "src/mame/drivers/ps2.cpp",
MAME_DIR .. "src/mame/machine/at.h",
MAME_DIR .. "src/mame/machine/at.cpp",
MAME_DIR .. "src/mame/drivers/ct486.cpp",
}

View File

@ -165,12 +165,12 @@ void wd7600_device::device_start()
// install video BIOS (we should use the VGA BIOS at the beginning of the system BIOS ROM, but that gives a
// blank display (but still runs))
//m_space->install_rom(0x000c0000, 0x000cffff, m_bios + 0xe0000);
//m_space->install_rom(0x000c0000, 0x000cffff, m_bios);
m_space->install_rom(0x000c0000, 0x000cffff, m_isa);
// install BIOS ROM at cpu inital pc
m_space->install_rom(0x000f0000, 0x000fffff, m_bios + 0xf0000);
m_space->install_rom(0xffff0000, 0xffffffff, m_bios + 0xf0000);
m_space->install_rom(0x000f0000, 0x000fffff, m_bios + 0x10000);
m_space->install_rom(0xffff0000, 0xffffffff, m_bios + 0x10000);
// install i/o accesses
m_space_io->install_readwrite_handler(0x0000, 0x000f, read8_delegate(FUNC(am9517a_device::read), &(*m_dma1)), write8_delegate(FUNC(am9517a_device::write), &(*m_dma1)), 0xffffffff);

File diff suppressed because it is too large Load Diff

136
src/mame/drivers/atpci.cpp Normal file
View File

@ -0,0 +1,136 @@
// license:BSD-3-Clause
// copyright-holders:Wilbert Pol, Miodrag Milanovic, Carl
#include "emu.h"
#include "cpu/i386/i386.h"
#include "bus/lpci/pci.h"
#include "bus/lpci/i82371ab.h"
#include "bus/lpci/i82371sb.h"
#include "bus/lpci/i82439tx.h"
#include "machine/at.h"
#include "bus/pc_kbd/pc_kbdc.h"
#include "bus/pc_kbd/keyboards.h"
class at586_state : public driver_device
{
public:
at586_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu") { }
required_device<cpu_device> m_maincpu;
};
static MACHINE_CONFIG_FRAGMENT( tx_config )
MCFG_I82439TX_CPU( "maincpu" )
MCFG_I82439TX_REGION( "isa" )
MACHINE_CONFIG_END
static SLOT_INTERFACE_START( pci_devices )
SLOT_INTERFACE_INTERNAL("i82439tx", I82439TX)
SLOT_INTERFACE_INTERNAL("i82371ab", I82371AB)
SLOT_INTERFACE_INTERNAL("i82371sb", I82371SB)
SLOT_INTERFACE_END
static ADDRESS_MAP_START( at586_map, AS_PROGRAM, 32, at586_state )
AM_RANGE(0x00000000, 0x0009ffff) AM_RAMBANK("bank10")
AM_RANGE(0x000a0000, 0x000bffff) AM_NOP
AM_RANGE(0x00800000, 0x00800bff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("isa", 0x20000)
ADDRESS_MAP_END
static ADDRESS_MAP_START( at586_io, AS_IO, 32, at586_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_device, read, write)
ADDRESS_MAP_END
static MACHINE_CONFIG_START( at586, at586_state )
MCFG_CPU_ADD("maincpu", PENTIUM, 60000000)
MCFG_CPU_PROGRAM_MAP(at586_map)
MCFG_CPU_IO_MAP(at586_io)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pcibus:1:i82371ab:pic8259_master", pic8259_device, inta_cb)
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("4M")
MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M,128M,256M")
MCFG_PCI_BUS_ADD("pcibus", 0)
MCFG_PCI_BUS_DEVICE("pcibus:0", pci_devices, "i82439tx", true)
MCFG_SLOT_OPTION_MACHINE_CONFIG("i82439tx", tx_config)
MCFG_PCI_BUS_DEVICE("pcibus:1", pci_devices, "i82371ab", true)
MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa1", pc_isa16_cards, "svga_et4k", false)
MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa2", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa3", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa4", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa5", pc_isa16_cards, nullptr, false)
MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
MCFG_FRAGMENT_ADD( at_softlists )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( at586x3, at586_state )
MCFG_CPU_ADD("maincpu", PENTIUM, 60000000)
MCFG_CPU_PROGRAM_MAP(at586_map)
MCFG_CPU_IO_MAP(at586_io)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pcibus:1:i82371sb:pic8259_master", pic8259_device, inta_cb)
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("4M")
MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M,128M,256M")
MCFG_PCI_BUS_ADD("pcibus", 0)
MCFG_PCI_BUS_DEVICE("pcibus:0", pci_devices, "i82439tx", true)
MCFG_SLOT_OPTION_MACHINE_CONFIG("i82439tx", tx_config)
MCFG_PCI_BUS_DEVICE("pcibus:1", pci_devices, "i82371sb", true)
MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa1", pc_isa16_cards, "svga_et4k", false)
MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa2", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa3", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa4", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa5", pc_isa16_cards, nullptr, false)
MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
MCFG_FRAGMENT_ADD( at_softlists )
MACHINE_CONFIG_END
ROM_START( at586 )
ROM_REGION32_LE(0x40000, "isa", 0)
ROM_SYSTEM_BIOS(0, "sptx", "SP-586TX")
ROMX_LOAD("sp586tx.bin", 0x20000, 0x20000, CRC(1003d72c) SHA1(ec9224ff9b0fdfd6e462cb7bbf419875414739d6), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "unisys", "Unisys 586") // probably bad dump due to need of hack in i82439tx to work
ROMX_LOAD("at586.bin", 0x20000, 0x20000, CRC(717037f5) SHA1(1d49d1b7a4a40d07d1a897b7f8c827754d76f824), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "ga586t2", "Gigabyte GA-586T2") // ITE 8679 I/O
ROMX_LOAD("gb_ga586t2.bin", 0x20000, 0x20000, CRC(3a50a6e1) SHA1(dea859b4f1492d0d08aacd260ed1e83e00ebac08), ROM_BIOS(3))
ROM_SYSTEM_BIOS(3, "5tx52", "Acorp 5TX52") // W83877TF I/O
ROMX_LOAD("acorp_5tx52.bin", 0x20000, 0x20000, CRC(04d69419) SHA1(983377674fef05e710c8665c14cc348c99166fb6), ROM_BIOS(4))
ROM_SYSTEM_BIOS(4, "txp4", "ASUS TXP4") // W83977TF-A I/O
ROMX_LOAD("asus_txp4.bin", 0x20000, 0x20000, CRC(a1321bb1) SHA1(92e5f14d8505119f85b148a63510617ac12bcdf3), ROM_BIOS(5))
ROM_END
ROM_START( at586x3 )
ROM_REGION32_LE(0x40000, "isa", 0)
ROM_LOAD("5hx29.bin", 0x20000, 0x20000, CRC(07719a55) SHA1(b63993fd5186cdb4f28c117428a507cd069e1f68))
ROM_END
/* FIC VT-503 (Intel TX chipset, ITE 8679 Super I/O) */
ROM_START( ficvt503 )
ROM_REGION32_LE(0x40000, "isa", 0)
ROM_SYSTEM_BIOS(0, "109gi13", "1.09GI13") /* 1997-10-02 */
ROMX_LOAD("109gi13.bin", 0x20000, 0x20000, CRC(0c32af48) SHA1(2cce40a98598f1ed1f398975f7a90c8be4200667), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "109gi14", "1.09GI14") /* 1997-11-07 */
ROMX_LOAD("109gi14.awd", 0x20000, 0x20000, CRC(588c5cc8) SHA1(710e5405850fd975b362a422bfe9bc6d6c9a36cd), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "109gi15", "1.09GI15") /* 1997-11-07 */
ROMX_LOAD("109gi15.awd", 0x20000, 0x20000, CRC(649a3481) SHA1(e681c6ab55a67cec5978dfffa75fcddc2aa0de4d), ROM_BIOS(3))
ROM_SYSTEM_BIOS(3, "109gi16", "1.09GI16") /* 2000-03-23 */
ROMX_LOAD("109gi16.bin", 0x20000, 0x20000, CRC(a928f271) SHA1(127a83a60752cc33b3ca49774488e511ec7bac55), ROM_BIOS(4))
ROM_SYSTEM_BIOS(4, "115gk140", "1.15GK140") /* 1999-03-03 */
ROMX_LOAD("115gk140.awd", 0x20000, 0x20000, CRC(65e88956) SHA1(f94bb0732e00b5b0f18f4e349db24a289f8379c5), ROM_BIOS(5))
ROM_END
COMP ( 1990, at586, ibm5170, 0, at586, 0, driver_device, 0, "<generic>", "PC/AT 586 (PIIX4)", MACHINE_NOT_WORKING )
COMP ( 1990, at586x3, ibm5170, 0, at586x3, 0, driver_device, 0, "<generic>", "PC/AT 586 (PIIX3)", MACHINE_NOT_WORKING )
COMP ( 1997, ficvt503, ibm5170, 0, at586, 0, driver_device, 0, "FIC", "VT-503", MACHINE_NOT_WORKING )

View File

@ -46,7 +46,6 @@
#include "machine/sgi.h"
#include "machine/pckeybrd.h"
#include "machine/pc_lpt.h"
#include "includes/at.h"
#include "machine/8042kbdc.h"
#include "machine/pit8253.h"
#include "video/newport.h"

255
src/mame/drivers/ps2.cpp Normal file
View File

@ -0,0 +1,255 @@
// license:BSD-3-Clause
// copyright-holders:Wilbert Pol, Miodrag Milanovic, Carl
#include "emu.h"
#include "cpu/i86/i286.h"
#include "cpu/i386/i386.h"
#include "machine/at.h"
#include "machine/ram.h"
#include "bus/isa/isa_cards.h"
#include "bus/pc_kbd/keyboards.h"
class ps2_state : public driver_device
{
public:
ps2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_mb(*this, "mb"),
m_ram(*this, RAM_TAG)
{ }
required_device<cpu_device> m_maincpu;
required_device<at_mb_device> m_mb;
required_device<ram_device> m_ram;
protected:
void machine_start() override;
};
static ADDRESS_MAP_START( ps2_16_map, AS_PROGRAM, 16, ps2_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x09ffff) AM_RAMBANK("bank10")
AM_RANGE(0x0e0000, 0x0fffff) AM_ROM AM_REGION("bios", 0)
AM_RANGE(0xfe0000, 0xffffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ps2_32_map, AS_PROGRAM, 32, ps2_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00000000, 0x0009ffff) AM_RAMBANK("bank10")
AM_RANGE(0x000e0000, 0x000fffff) AM_ROM AM_REGION("bios", 0)
AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(ps2_16_io, AS_IO, 16, ps2_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ps2_32_io, AS_IO, 32, ps2_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x00ff) AM_DEVICE16("mb", at_mb_device, map, 0xfffffffff)
ADDRESS_MAP_END
void ps2_state::machine_start()
{
address_space& space = m_maincpu->space(AS_PROGRAM);
/* MESS managed RAM */
membank("bank10")->set_base(m_ram->pointer());
if (m_ram->size() > 0xa0000)
{
offs_t ram_limit = 0x100000 + m_ram->size() - 0xa0000;
space.install_read_bank(0x100000, ram_limit - 1, "bank1");
space.install_write_bank(0x100000, ram_limit - 1, "bank1");
membank("bank1")->set_base(m_ram->pointer() + 0xa0000);
}
}
static MACHINE_CONFIG_START( ps2m30286, ps2_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", I80286, 10000000)
MCFG_CPU_PROGRAM_MAP(ps2_16_map)
MCFG_CPU_IO_MAP(ps2_16_io)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
MCFG_80286_SHUTDOWN(DEVWRITELINE("mb", at_mb_device, shutdown))
MCFG_DEVICE_ADD("mb", AT_MB, 0)
MCFG_QUANTUM_TIME(attotime::from_hz(60))
MCFG_FRAGMENT_ADD( at_softlists )
MCFG_ISA16_SLOT_ADD("mb:isabus","isa1", pc_isa16_cards, "vga", true)
MCFG_ISA16_SLOT_ADD("mb:isabus","isa2", pc_isa16_cards, "fdc", false)
MCFG_ISA16_SLOT_ADD("mb:isabus","isa3", pc_isa16_cards, "ide", false)
MCFG_ISA16_SLOT_ADD("mb:isabus","isa4", pc_isa16_cards, "comat", false)
MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84)
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("1664K")
MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ps2386, ps2_state )
MCFG_CPU_ADD("maincpu", I386, 12000000)
MCFG_CPU_PROGRAM_MAP(ps2_32_map)
MCFG_CPU_IO_MAP(ps2_32_io)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
MCFG_DEVICE_ADD("mb", AT_MB, 0)
MCFG_QUANTUM_TIME(attotime::from_hz(60))
MCFG_FRAGMENT_ADD( at_softlists )
// on board devices
MCFG_ISA16_SLOT_ADD("mb:isabus","board1", pc_isa16_cards, "fdcsmc", true)
MCFG_ISA16_SLOT_ADD("mb:isabus","board2", pc_isa16_cards, "comat", true)
MCFG_ISA16_SLOT_ADD("mb:isabus","board3", pc_isa16_cards, "ide", true)
MCFG_ISA16_SLOT_ADD("mb:isabus","board4", pc_isa16_cards, "lpt", true)
// ISA cards
MCFG_ISA16_SLOT_ADD("mb:isabus","isa1", pc_isa16_cards, "svga_et4k", false)
MCFG_ISA16_SLOT_ADD("mb:isabus","isa2", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD("mb:isabus","isa3", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD("mb:isabus","isa4", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD("mb:isabus","isa5", pc_isa16_cards, nullptr, false)
MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("1664K")
MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M,16M,32M,64M,128M,256M")
MACHINE_CONFIG_END
ROM_START( i8530286 )
ROM_REGION(0x20000,"bios", 0)
// saved from running machine
ROM_LOAD16_BYTE("ps2m30.0", 0x00000, 0x10000, CRC(9965a634) SHA1(c237b1760f8a4561ec47dc70fe2e9df664e56596))
ROM_LOAD16_BYTE("ps2m30.1", 0x00001, 0x10000, CRC(1448d3cb) SHA1(13fa26d895ce084278cd5ab1208fc16c80115ebe))
ROM_END
/*
8530-H31 (Model 30/286)
======================
P/N Date
33F5381A EC C01446 1990
*/
ROM_START( i8530h31 )
ROM_REGION(0x20000,"bios", 0)
ROM_LOAD( "33f5381a.bin", 0x00000, 0x20000, CRC(ff57057d) SHA1(d7f1777077a8df43c3c14d175b9709bd3969c4b1))
ROM_END
/*
8535-043 (Model 35)
===================
P/N Checksum Date
04G2021 C26C 1991 ODD
04G2022 9B94 1991 EVEN
*/
ROM_START( i8535043 )
ROM_REGION(0x20000,"bios", 0)
ROM_LOAD16_BYTE( "04g2021.bin", 0x00001, 0x10000, CRC(4069b2eb) SHA1(9855c84c81d1f07e1da66b1ca45c1c10c0717a90))
ROM_LOAD16_BYTE( "04g2022.bin", 0x00000, 0x10000, CRC(35c1af65) SHA1(7d2445cc463969c808fdd78e0a27a03db5dfc698))
ROM_END
/*
8550-021 (Model 50)
===================
Code Date Internal
90X7420 4/12/87 --> 90X6815
90X7423 8/12/87 --> 90X6816
90X7426 8/12/87 --> 90X6817
90X7429 18/12/87 --> 90X6818
Same ROMs used by : (According to http://www.ibmmuseum.com/ohlandl/8565/8560.html)
IBM Personal System/2 Model 60 (8560-041 and 8560-071)
IBM Personal System/2 Model 65 SX (8565-061 and 8565-121)
*/
ROM_START( i8550021 )
ROM_REGION(0x20000,"bios", 0)
ROM_LOAD16_BYTE( "90x7423.zm14", 0x00000, 0x8000, CRC(2c1633e0) SHA1(1af7faa526585a7cfb69e71d90a75e1f1c541586))
ROM_LOAD16_BYTE( "90x7426.zm16", 0x00001, 0x8000, CRC(e7c762ce) SHA1(228f67dc915d84519da7fc1a59b7f9254278f3a0))
ROM_LOAD16_BYTE( "90x7420.zm13", 0x10000, 0x8000, CRC(19a57cc1) SHA1(5b31ba66cd3690e651a450619a32b7210769945d))
ROM_LOAD16_BYTE( "90x7429.zm18", 0x10001, 0x8000, CRC(6f0120f6) SHA1(e112c291ac3d9f6507c93ac49ad26f9fd2245fd2))
ROM_REGION( 0x800, "keyboard", 0 )
ROM_LOAD( "72x8455.zm82", 0x000, 0x800, CRC(7da223d3) SHA1(54c52ff6c6a2310f79b2c7e6d1259be9de868f0e) )
ROM_END
/*
8550-061 (Model 50Z)
===================
P/N Date
AMI 8935MKN 15F8365 S63512 1988
AMI 8948MML 15F8366 S63512 1988
http://ps-2.kev009.com:8081/ohlandl/8550/8550z_Planar.html
*/
ROM_START( i8550061 )
ROM_REGION(0x20000,"bios", 0)
ROM_LOAD16_BYTE( "15f8365.zm5", 0x00001, 0x10000, CRC(35aa3ecf) SHA1(a122531092a9cb08600b276da9c9c3ce385aab7b))
ROM_LOAD16_BYTE( "15f8366.zm6", 0x00000, 0x10000, CRC(11bf564d) SHA1(0dda6a7ca9294cfaab5bdf4c05973be13b2766fc))
ROM_END
/*
8555-X61 (Model 55SX)
===================
Code Date Internal
ODD 33F8145 13/03/90 --> 33F8153
EVEN 33F8146 31/01/90 --> 33F8152
8555-081 (Model 55SX)
===================
Code Date Internal
ODD AMI 9205MEN 92F0627 EC32680 88 --> 33F8153
EVEN AMI 9203MGS 92F0626 EC32680 88 --> 33F8152
*/
ROM_START( i8555081 )
ROM_REGION(0x20000,"bios", 0)
ROM_LOAD16_BYTE("33f8145.zm40", 0x00001, 0x10000, CRC(0895894c) SHA1(7cee77828867ad1bdbe0ac223bc25d23c65b28a0))
ROM_LOAD16_BYTE("33f8146.zm41", 0x00000, 0x10000, CRC(c6020680) SHA1(b25a64e4b2dca07c567648401100e04e89bbcddb))
ROM_END
/*
8580-071 (Model 80)
===================
Code Date Internal
AMI 8924MBW 90X8548 1987 --> 72X7551
AMI 8924MBL 90X8549 1987 --> 72X7554
AMI 8924MBG 90X8550 1987 --> 72X7557
AMI 8921MBK 90X8551 1987 --> 72X7560
*/
ROM_START( i8580071 )
ROM_REGION(0x20000,"bios", 0)
ROM_LOAD32_BYTE( "90x8548.bin", 0x00000, 0x8000, CRC(1f13eea5) SHA1(0bf53ad86f47db3825a713ea2e4ef23715cc4f79))
ROM_LOAD32_BYTE( "90x8549.bin", 0x00001, 0x8000, CRC(9e0f4a99) SHA1(b8600f04159ed281a57416274390ba9302be541b))
ROM_LOAD32_BYTE( "90x8550.bin", 0x00002, 0x8000, CRC(cb21df96) SHA1(0c2765f6becfa3f9171c4f13f7b74d19c4c9acc2))
ROM_LOAD32_BYTE( "90x8551.bin", 0x00003, 0x8000, CRC(3d7e9868) SHA1(2928fe0e48a573cc2c0c41bd7f7188a54a908229))
ROM_END
/*
8580-111 (Model 80)
===================
Code Date Internal
AMI 8934MDL 15F6637 1987 --> 15F6597
AMI 8944MDI 15F6639 1987 --> 15F6600
*/
ROM_START( i8580111 )
ROM_REGION(0x20000,"bios", 0)
ROM_LOAD16_BYTE( "15f6637.bin", 0x00000, 0x10000, CRC(76c36d1a) SHA1(c68d52a2e5fbd303225ebb006f91869b29ef700a))
ROM_LOAD16_BYTE( "15f6639.bin", 0x00001, 0x10000, CRC(82cf0f7d) SHA1(13bb39225757b89749af70e881af0228673dbe0c))
ROM_END
COMP ( 1990, i8530h31, ibm5170, 0, ps2m30286, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8530-H31 (Model 30/286)", MACHINE_NOT_WORKING )
COMP ( 1988, i8530286, ibm5170, 0, ps2m30286, 0, driver_device, 0, "International Business Machines", "IBM PS/2 Model 30-286", MACHINE_NOT_WORKING )
COMP ( 198?, i8535043, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8535-043 (Model 35)", MACHINE_NOT_WORKING )
COMP ( 198?, i8550021, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8550-021 (Model 50)", MACHINE_NOT_WORKING )
COMP ( 198?, i8550061, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8550-061 (Model 50Z)", MACHINE_NOT_WORKING )
COMP ( 1989, i8555081, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8550-081 (Model 55SX)", MACHINE_NOT_WORKING )
COMP ( 198?, i8580071, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8580-071 (Model 80)", MACHINE_NOT_WORKING )
COMP ( 198?, i8580111, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8580-111 (Model 80)", MACHINE_NOT_WORKING )

View File

@ -1,198 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Wilbert Pol, Miodrag Milanovic
/*****************************************************************************
*
* includes/at.h
*
* IBM AT Compatibles
*
****************************************************************************/
#ifndef AT_H_
#define AT_H_
#include "emu.h"
#include "cpu/i86/i86.h"
#include "cpu/i86/i286.h"
#include "cpu/i386/i386.h"
#include "machine/ins8250.h"
#include "machine/mc146818.h"
#include "machine/ds128x.h"
#include "machine/pic8259.h"
#include "bus/lpci/i82371ab.h"
#include "bus/lpci/i82371sb.h"
#include "bus/lpci/i82439tx.h"
#include "bus/lpci/vt82c505.h"
#include "machine/vt82c496.h"
#include "machine/cs8221.h"
#include "machine/pit8253.h"
#include "machine/wd7600.h"
#include "machine/idectrl.h"
#include "machine/at_keybc.h"
#include "imagedev/harddriv.h"
#include "machine/am9517a.h"
#include "bus/lpci/pci.h"
#include "sound/dac.h"
#include "sound/speaker.h"
#include "machine/ram.h"
#include "machine/nvram.h"
#include "bus/isa/isa.h"
#include "bus/isa/isa_cards.h"
#include "machine/pc_lpt.h"
#include "bus/pc_kbd/pc_kbdc.h"
class at586_state : public driver_device
{
public:
at586_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu") { }
required_device<cpu_device> m_maincpu;
DECLARE_DRIVER_INIT(at586);
};
class at_state : public driver_device
{
public:
at_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_pic8259_master(*this, "pic8259_master"),
m_pic8259_slave(*this, "pic8259_slave"),
m_dma8237_1(*this, "dma8237_1"),
m_dma8237_2(*this, "dma8237_2"),
m_pit8254(*this, "pit8254"),
m_cs8221(*this, "cs8221"),
m_ide(*this, "ide"),
m_keybc(*this, "keybc"),
m_isabus(*this, "isabus"),
m_speaker(*this, "speaker"),
m_ram(*this, RAM_TAG),
m_mc146818(*this, "rtc"),
m_pc_kbdc(*this, "pc_kbdc")
{ }
required_device<cpu_device> m_maincpu;
optional_device<pic8259_device> m_pic8259_master;
optional_device<pic8259_device> m_pic8259_slave;
optional_device<am9517a_device> m_dma8237_1;
optional_device<am9517a_device> m_dma8237_2;
optional_device<pit8254_device> m_pit8254;
optional_device<cs8221_device> m_cs8221;
optional_device<ide_controller_device> m_ide;
optional_device<at_keyboard_controller_device> m_keybc;
optional_device<isa16_device> m_isabus;
required_device<speaker_sound_device> m_speaker;
optional_device<ram_device> m_ram;
optional_device<mc146818_device> m_mc146818;
optional_device<pc_kbdc_device> m_pc_kbdc;
DECLARE_READ8_MEMBER(at_page8_r);
DECLARE_WRITE8_MEMBER(at_page8_w);
DECLARE_READ8_MEMBER(at_portb_r);
DECLARE_WRITE8_MEMBER(at_portb_w);
DECLARE_READ8_MEMBER(ps2_portb_r);
DECLARE_READ8_MEMBER(get_slave_ack);
DECLARE_WRITE_LINE_MEMBER(at_pit8254_out0_changed);
DECLARE_WRITE_LINE_MEMBER(at_pit8254_out2_changed);
DECLARE_WRITE_LINE_MEMBER(pc_dma_hrq_changed);
DECLARE_READ8_MEMBER(pc_dma8237_0_dack_r);
DECLARE_READ8_MEMBER(pc_dma8237_1_dack_r);
DECLARE_READ8_MEMBER(pc_dma8237_2_dack_r);
DECLARE_READ8_MEMBER(pc_dma8237_3_dack_r);
DECLARE_READ8_MEMBER(pc_dma8237_5_dack_r);
DECLARE_READ8_MEMBER(pc_dma8237_6_dack_r);
DECLARE_READ8_MEMBER(pc_dma8237_7_dack_r);
DECLARE_WRITE8_MEMBER(pc_dma8237_0_dack_w);
DECLARE_WRITE8_MEMBER(pc_dma8237_1_dack_w);
DECLARE_WRITE8_MEMBER(pc_dma8237_2_dack_w);
DECLARE_WRITE8_MEMBER(pc_dma8237_3_dack_w);
DECLARE_WRITE8_MEMBER(pc_dma8237_5_dack_w);
DECLARE_WRITE8_MEMBER(pc_dma8237_6_dack_w);
DECLARE_WRITE8_MEMBER(pc_dma8237_7_dack_w);
DECLARE_WRITE_LINE_MEMBER(at_dma8237_out_eop);
DECLARE_WRITE_LINE_MEMBER(pc_dack0_w);
DECLARE_WRITE_LINE_MEMBER(pc_dack1_w);
DECLARE_WRITE_LINE_MEMBER(pc_dack2_w);
DECLARE_WRITE_LINE_MEMBER(pc_dack3_w);
DECLARE_WRITE_LINE_MEMBER(pc_dack4_w);
DECLARE_WRITE_LINE_MEMBER(pc_dack5_w);
DECLARE_WRITE_LINE_MEMBER(pc_dack6_w);
DECLARE_WRITE_LINE_MEMBER(pc_dack7_w);
DECLARE_READ8_MEMBER(at_dma8237_2_r);
DECLARE_WRITE8_MEMBER(at_dma8237_2_w);
DECLARE_READ8_MEMBER(at_keybc_r);
DECLARE_WRITE8_MEMBER(at_keybc_w);
DECLARE_READ16_MEMBER(neat_chipset_r);
DECLARE_WRITE16_MEMBER(neat_chipset_w);
DECLARE_WRITE_LINE_MEMBER(at_mc146818_irq);
DECLARE_WRITE8_MEMBER(write_rtc);
UINT8 m_at_spkrdata;
UINT8 m_pit_out2;
int m_dma_channel;
bool m_cur_eop;
UINT8 m_dma_offset[2][4];
UINT8 m_at_pages[0x10];
UINT16 m_dma_high_byte;
UINT8 m_at_speaker;
UINT16 m_ps1_reg[2];
DECLARE_READ16_MEMBER(ps1_unk_r);
DECLARE_WRITE16_MEMBER(ps1_unk_w);
DECLARE_READ8_MEMBER(ps1_kbdc_r);
void at_speaker_set_spkrdata(UINT8 data);
DECLARE_WRITE_LINE_MEMBER(at_shutdown);
UINT8 m_channel_check;
UINT8 m_nmi_enabled;
DECLARE_READ8_MEMBER(pc_dma_read_byte);
DECLARE_WRITE8_MEMBER(pc_dma_write_byte);
DECLARE_READ8_MEMBER(pc_dma_read_word);
DECLARE_WRITE8_MEMBER(pc_dma_write_word);
DECLARE_DRIVER_INIT(atcga);
DECLARE_DRIVER_INIT(atvga);
DECLARE_DRIVER_INIT(megapcpla);
DECLARE_DRIVER_INIT(atpci);
DECLARE_MACHINE_START(at);
DECLARE_MACHINE_RESET(at);
void pc_set_dma_channel(int channel, int state);
void init_at_common(int xmsbase);
UINT32 at_286_a20(bool state);
};
class megapc_state : public driver_device
{
public:
megapc_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_wd7600(*this, "wd7600"),
m_isabus(*this, "isabus"),
m_speaker(*this, "speaker")
{ }
public:
required_device<cpu_device> m_maincpu;
required_device<wd7600_device> m_wd7600;
required_device<isa16_device> m_isabus;
required_device<speaker_sound_device> m_speaker;
DECLARE_DRIVER_INIT(megapc);
DECLARE_DRIVER_INIT(megapcpl);
DECLARE_READ16_MEMBER( wd7600_ior );
DECLARE_WRITE16_MEMBER( wd7600_iow );
DECLARE_WRITE_LINE_MEMBER( wd7600_hold );
DECLARE_WRITE8_MEMBER( wd7600_tc ) { m_isabus->eop_w(offset, data); }
DECLARE_WRITE_LINE_MEMBER( wd7600_spkr ) { m_speaker->level_w(state); }
};
#endif /* AT_H_ */

View File

@ -1,21 +1,165 @@
// license:BSD-3-Clause
// copyright-holders:Wilbert Pol, Miodrag Milanovic
// copyright-holders:Wilbert Pol, Miodrag Milanovic, Carl
/***************************************************************************
IBM AT Compatibles
***************************************************************************/
#include "includes/at.h"
#include "machine/at.h"
#include "cpu/i86/i286.h"
#include "cpu/i386/i386.h"
#include "machine/at_keybc.h"
#include "bus/pc_kbd/pc_kbdc.h"
#include "sound/dac.h"
#define LOG_PORT80 0
const device_type AT_MB = &device_creator<at_mb_device>;
at_mb_device::at_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, AT_MB, "PC/AT Motherboard", tag, owner, clock, "at_mb", __FILE__),
m_maincpu(*this, ":maincpu"),
m_isabus(*this, "isabus"),
m_pic8259_slave(*this, "pic8259_slave"),
m_dma8237_1(*this, "dma8237_1"),
m_dma8237_2(*this, "dma8237_2"),
m_pit8254(*this, "pit8254"),
m_speaker(*this, "speaker"),
m_mc146818(*this, "rtc")
{
}
void at_mb_device::device_reset()
{
m_at_spkrdata = 0;
m_pit_out2 = 1;
m_dma_channel = -1;
m_cur_eop = false;
}
void at_mb_device::device_start()
{
if(!strncmp(m_maincpu->shortname(), "i80286", 6))
i80286_cpu_device::static_set_a20_callback(m_maincpu, i80286_cpu_device::a20_cb(FUNC(at_mb_device::a20_286), this));
}
MACHINE_CONFIG_FRAGMENT( at_softlists )
/* software lists */
MCFG_SOFTWARE_LIST_ADD("pc_disk_list","ibm5150")
MCFG_SOFTWARE_LIST_ADD("xt_disk_list","ibm5160_flop")
MCFG_SOFTWARE_LIST_ADD("at_disk_list","ibm5170")
MCFG_SOFTWARE_LIST_ADD("at_cdrom_list","ibm5170_cdrom")
MACHINE_CONFIG_END
static MACHINE_CONFIG_FRAGMENT( at_mb )
MCFG_DEVICE_ADD("pit8254", PIT8254, 0)
MCFG_PIT8253_CLK0(4772720/4) /* heartbeat IRQ */
MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259_master", pic8259_device, ir0_w))
MCFG_PIT8253_CLK1(4772720/4) /* dram refresh */
MCFG_PIT8253_CLK2(4772720/4) /* pio port c pin 4, and speaker polling enough */
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(at_mb_device, pit8254_out2_changed))
MCFG_DEVICE_ADD( "dma8237_1", AM9517A, XTAL_14_31818MHz/3 )
MCFG_I8237_OUT_HREQ_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq0_w))
MCFG_I8237_OUT_EOP_CB(WRITELINE(at_mb_device, dma8237_out_eop))
MCFG_I8237_IN_MEMR_CB(READ8(at_mb_device, dma_read_byte))
MCFG_I8237_OUT_MEMW_CB(WRITE8(at_mb_device, dma_write_byte))
MCFG_I8237_IN_IOR_0_CB(READ8(at_mb_device, dma8237_0_dack_r))
MCFG_I8237_IN_IOR_1_CB(READ8(at_mb_device, dma8237_1_dack_r))
MCFG_I8237_IN_IOR_2_CB(READ8(at_mb_device, dma8237_2_dack_r))
MCFG_I8237_IN_IOR_3_CB(READ8(at_mb_device, dma8237_3_dack_r))
MCFG_I8237_OUT_IOW_0_CB(WRITE8(at_mb_device, dma8237_0_dack_w))
MCFG_I8237_OUT_IOW_1_CB(WRITE8(at_mb_device, dma8237_1_dack_w))
MCFG_I8237_OUT_IOW_2_CB(WRITE8(at_mb_device, dma8237_2_dack_w))
MCFG_I8237_OUT_IOW_3_CB(WRITE8(at_mb_device, dma8237_3_dack_w))
MCFG_I8237_OUT_DACK_0_CB(WRITELINE(at_mb_device, dack0_w))
MCFG_I8237_OUT_DACK_1_CB(WRITELINE(at_mb_device, dack1_w))
MCFG_I8237_OUT_DACK_2_CB(WRITELINE(at_mb_device, dack2_w))
MCFG_I8237_OUT_DACK_3_CB(WRITELINE(at_mb_device, dack3_w))
MCFG_DEVICE_ADD( "dma8237_2", AM9517A, XTAL_14_31818MHz/3 )
MCFG_I8237_OUT_HREQ_CB(WRITELINE(at_mb_device, dma_hrq_changed))
MCFG_I8237_IN_MEMR_CB(READ8(at_mb_device, dma_read_word))
MCFG_I8237_OUT_MEMW_CB(WRITE8(at_mb_device, dma_write_word))
MCFG_I8237_IN_IOR_1_CB(READ8(at_mb_device, dma8237_5_dack_r))
MCFG_I8237_IN_IOR_2_CB(READ8(at_mb_device, dma8237_6_dack_r))
MCFG_I8237_IN_IOR_3_CB(READ8(at_mb_device, dma8237_7_dack_r))
MCFG_I8237_OUT_IOW_1_CB(WRITE8(at_mb_device, dma8237_5_dack_w))
MCFG_I8237_OUT_IOW_2_CB(WRITE8(at_mb_device, dma8237_6_dack_w))
MCFG_I8237_OUT_IOW_3_CB(WRITE8(at_mb_device, dma8237_7_dack_w))
MCFG_I8237_OUT_DACK_0_CB(WRITELINE(at_mb_device, dack4_w))
MCFG_I8237_OUT_DACK_1_CB(WRITELINE(at_mb_device, dack5_w))
MCFG_I8237_OUT_DACK_2_CB(WRITELINE(at_mb_device, dack6_w))
MCFG_I8237_OUT_DACK_3_CB(WRITELINE(at_mb_device, dack7_w))
MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE(":maincpu", 0), VCC, READ8(at_mb_device, get_slave_ack) )
MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir2_w), GND, NULL )
MCFG_DEVICE_ADD("isabus", ISA16, 0)
MCFG_ISA16_CPU(":maincpu")
MCFG_ISA_OUT_IRQ2_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir2_w)) // in place of irq 2 on at irq 9 is used
MCFG_ISA_OUT_IRQ3_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir3_w))
MCFG_ISA_OUT_IRQ4_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir4_w))
MCFG_ISA_OUT_IRQ5_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir5_w))
MCFG_ISA_OUT_IRQ6_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir6_w))
MCFG_ISA_OUT_IRQ7_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir7_w))
MCFG_ISA_OUT_IRQ10_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir3_w))
MCFG_ISA_OUT_IRQ11_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir4_w))
MCFG_ISA_OUT_IRQ12_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir5_w))
MCFG_ISA_OUT_IRQ14_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir6_w))
MCFG_ISA_OUT_IRQ15_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir7_w))
MCFG_ISA_OUT_DRQ0_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq0_w))
MCFG_ISA_OUT_DRQ1_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq1_w))
MCFG_ISA_OUT_DRQ2_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq2_w))
MCFG_ISA_OUT_DRQ3_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq3_w))
MCFG_ISA_OUT_DRQ5_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq1_w))
MCFG_ISA_OUT_DRQ6_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq2_w))
MCFG_ISA_OUT_DRQ7_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq3_w))
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic8259_slave", pic8259_device, ir0_w))
MCFG_MC146818_CENTURY_INDEX(0x32)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL_12MHz)
MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(INPUTLINE(":maincpu", INPUT_LINE_RESET))
MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(INPUTLINE(":maincpu", INPUT_LINE_A20))
MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir1_w))
MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, clock_write_from_mb))
MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, data_write_from_mb))
MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0)
MCFG_PC_KBDC_OUT_CLOCK_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_clock_w))
MCFG_PC_KBDC_OUT_DATA_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_data_w))
MACHINE_CONFIG_END
machine_config_constructor at_mb_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME(at_mb);
}
DEVICE_ADDRESS_MAP_START( map, 16, at_mb_device )
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", am9517a_device, read, write, 0xffff)
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_master", pic8259_device, read, write, 0xffff)
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffff)
AM_RANGE(0x0060, 0x0061) AM_READWRITE8(portb_r, portb_w, 0xff00)
AM_RANGE(0x0060, 0x0061) AM_DEVREADWRITE8("keybc", at_keyboard_controller_device, data_r, data_w, 0x00ff)
AM_RANGE(0x0064, 0x0065) AM_DEVREADWRITE8("keybc", at_keyboard_controller_device, status_r, command_w, 0x00ff)
AM_RANGE(0x0070, 0x007f) AM_DEVREAD8("rtc", mc146818_device, read, 0xffff) AM_WRITE8(write_rtc , 0xffff)
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(page8_r, page8_w, 0xffff)
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_slave", pic8259_device, read, write, 0xffff)
AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE8("dma8237_2", am9517a_device, read, write, 0x00ff)
ADDRESS_MAP_END
/*************************************************************
*
* pic8259 configuration
*
*************************************************************/
READ8_MEMBER( at_state::get_slave_ack )
READ8_MEMBER( at_mb_device::get_slave_ack )
{
if (offset==2) // IRQ = 2
return m_pic8259_slave->acknowledge();
@ -29,7 +173,7 @@ READ8_MEMBER( at_state::get_slave_ack )
*
*************************************************************************/
void at_state::at_speaker_set_spkrdata(UINT8 data)
void at_mb_device::speaker_set_spkrdata(UINT8 data)
{
m_at_spkrdata = data ? 1 : 0;
m_speaker->level_w(m_at_spkrdata & m_pit_out2);
@ -43,13 +187,7 @@ void at_state::at_speaker_set_spkrdata(UINT8 data)
*
*************************************************************/
WRITE_LINE_MEMBER( at_state::at_pit8254_out0_changed )
{
m_pic8259_master->ir0_w(state);
}
WRITE_LINE_MEMBER( at_state::at_pit8254_out2_changed )
WRITE_LINE_MEMBER( at_mb_device::pit8254_out2_changed )
{
m_pit_out2 = state ? 1 : 0;
m_speaker->level_w(m_at_spkrdata & m_pit_out2);
@ -62,7 +200,7 @@ WRITE_LINE_MEMBER( at_state::at_pit8254_out2_changed )
*
*************************************************************************/
READ8_MEMBER( at_state::at_page8_r )
READ8_MEMBER( at_mb_device::page8_r )
{
UINT8 data = m_at_pages[offset % 0x10];
@ -85,7 +223,7 @@ READ8_MEMBER( at_state::at_page8_r )
}
WRITE8_MEMBER( at_state::at_page8_w )
WRITE8_MEMBER( at_mb_device::page8_w )
{
m_at_pages[offset % 0x10] = data;
@ -113,7 +251,7 @@ WRITE8_MEMBER( at_state::at_page8_w )
}
WRITE_LINE_MEMBER( at_state::pc_dma_hrq_changed )
WRITE_LINE_MEMBER( at_mb_device::dma_hrq_changed )
{
m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
@ -121,7 +259,7 @@ WRITE_LINE_MEMBER( at_state::pc_dma_hrq_changed )
m_dma8237_2->hack_w(state);
}
READ8_MEMBER(at_state::pc_dma_read_byte)
READ8_MEMBER(at_mb_device::dma_read_byte)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
if(m_dma_channel == -1)
@ -134,7 +272,7 @@ READ8_MEMBER(at_state::pc_dma_read_byte)
}
WRITE8_MEMBER(at_state::pc_dma_write_byte)
WRITE8_MEMBER(at_mb_device::dma_write_byte)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
if(m_dma_channel == -1)
@ -145,7 +283,7 @@ WRITE8_MEMBER(at_state::pc_dma_write_byte)
}
READ8_MEMBER(at_state::pc_dma_read_word)
READ8_MEMBER(at_mb_device::dma_read_word)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
if(m_dma_channel == -1)
@ -160,7 +298,7 @@ READ8_MEMBER(at_state::pc_dma_read_word)
}
WRITE8_MEMBER(at_state::pc_dma_write_word)
WRITE8_MEMBER(at_mb_device::dma_write_word)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
if(m_dma_channel == -1)
@ -170,31 +308,31 @@ WRITE8_MEMBER(at_state::pc_dma_write_word)
prog_space.write_word(page_offset + ( offset << 1 ), m_dma_high_byte | data);
}
READ8_MEMBER( at_state::pc_dma8237_0_dack_r ) { return m_isabus->dack_r(0); }
READ8_MEMBER( at_state::pc_dma8237_1_dack_r ) { return m_isabus->dack_r(1); }
READ8_MEMBER( at_state::pc_dma8237_2_dack_r ) { return m_isabus->dack_r(2); }
READ8_MEMBER( at_state::pc_dma8237_3_dack_r ) { return m_isabus->dack_r(3); }
READ8_MEMBER( at_state::pc_dma8237_5_dack_r ) { UINT16 ret = m_isabus->dack16_r(5); m_dma_high_byte = ret & 0xff00; return ret; }
READ8_MEMBER( at_state::pc_dma8237_6_dack_r ) { UINT16 ret = m_isabus->dack16_r(6); m_dma_high_byte = ret & 0xff00; return ret; }
READ8_MEMBER( at_state::pc_dma8237_7_dack_r ) { UINT16 ret = m_isabus->dack16_r(7); m_dma_high_byte = ret & 0xff00; return ret; }
READ8_MEMBER( at_mb_device::dma8237_0_dack_r ) { return m_isabus->dack_r(0); }
READ8_MEMBER( at_mb_device::dma8237_1_dack_r ) { return m_isabus->dack_r(1); }
READ8_MEMBER( at_mb_device::dma8237_2_dack_r ) { return m_isabus->dack_r(2); }
READ8_MEMBER( at_mb_device::dma8237_3_dack_r ) { return m_isabus->dack_r(3); }
READ8_MEMBER( at_mb_device::dma8237_5_dack_r ) { UINT16 ret = m_isabus->dack16_r(5); m_dma_high_byte = ret & 0xff00; return ret; }
READ8_MEMBER( at_mb_device::dma8237_6_dack_r ) { UINT16 ret = m_isabus->dack16_r(6); m_dma_high_byte = ret & 0xff00; return ret; }
READ8_MEMBER( at_mb_device::dma8237_7_dack_r ) { UINT16 ret = m_isabus->dack16_r(7); m_dma_high_byte = ret & 0xff00; return ret; }
WRITE8_MEMBER( at_state::pc_dma8237_0_dack_w ){ m_isabus->dack_w(0, data); }
WRITE8_MEMBER( at_state::pc_dma8237_1_dack_w ){ m_isabus->dack_w(1, data); }
WRITE8_MEMBER( at_state::pc_dma8237_2_dack_w ){ m_isabus->dack_w(2, data); }
WRITE8_MEMBER( at_state::pc_dma8237_3_dack_w ){ m_isabus->dack_w(3, data); }
WRITE8_MEMBER( at_state::pc_dma8237_5_dack_w ){ m_isabus->dack16_w(5, m_dma_high_byte | data); }
WRITE8_MEMBER( at_state::pc_dma8237_6_dack_w ){ m_isabus->dack16_w(6, m_dma_high_byte | data); }
WRITE8_MEMBER( at_state::pc_dma8237_7_dack_w ){ m_isabus->dack16_w(7, m_dma_high_byte | data); }
WRITE8_MEMBER( at_mb_device::dma8237_0_dack_w ){ m_isabus->dack_w(0, data); }
WRITE8_MEMBER( at_mb_device::dma8237_1_dack_w ){ m_isabus->dack_w(1, data); }
WRITE8_MEMBER( at_mb_device::dma8237_2_dack_w ){ m_isabus->dack_w(2, data); }
WRITE8_MEMBER( at_mb_device::dma8237_3_dack_w ){ m_isabus->dack_w(3, data); }
WRITE8_MEMBER( at_mb_device::dma8237_5_dack_w ){ m_isabus->dack16_w(5, m_dma_high_byte | data); }
WRITE8_MEMBER( at_mb_device::dma8237_6_dack_w ){ m_isabus->dack16_w(6, m_dma_high_byte | data); }
WRITE8_MEMBER( at_mb_device::dma8237_7_dack_w ){ m_isabus->dack16_w(7, m_dma_high_byte | data); }
WRITE_LINE_MEMBER( at_state::at_dma8237_out_eop )
WRITE_LINE_MEMBER( at_mb_device::dma8237_out_eop )
{
m_cur_eop = state == ASSERT_LINE;
if(m_dma_channel != -1)
m_isabus->eop_w(m_dma_channel, m_cur_eop ? ASSERT_LINE : CLEAR_LINE );
}
void at_state::pc_set_dma_channel(int channel, int state)
void at_mb_device::set_dma_channel(int channel, int state)
{
if(!state) {
m_dma_channel = channel;
@ -208,16 +346,38 @@ void at_state::pc_set_dma_channel(int channel, int state)
}
}
WRITE_LINE_MEMBER( at_state::pc_dack0_w ) { pc_set_dma_channel(0, state); }
WRITE_LINE_MEMBER( at_state::pc_dack1_w ) { pc_set_dma_channel(1, state); }
WRITE_LINE_MEMBER( at_state::pc_dack2_w ) { pc_set_dma_channel(2, state); }
WRITE_LINE_MEMBER( at_state::pc_dack3_w ) { pc_set_dma_channel(3, state); }
WRITE_LINE_MEMBER( at_state::pc_dack4_w ) { m_dma8237_1->hack_w(state ? 0 : 1); } // it's inverted
WRITE_LINE_MEMBER( at_state::pc_dack5_w ) { pc_set_dma_channel(5, state); }
WRITE_LINE_MEMBER( at_state::pc_dack6_w ) { pc_set_dma_channel(6, state); }
WRITE_LINE_MEMBER( at_state::pc_dack7_w ) { pc_set_dma_channel(7, state); }
WRITE8_MEMBER( at_mb_device::write_rtc )
{
if (offset==0) {
m_nmi_enabled = BIT(data,7);
m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
m_mc146818->write(space,0,data);
}
else {
m_mc146818->write(space,offset,data);
}
}
READ8_MEMBER( at_state::at_portb_r )
UINT32 at_mb_device::a20_286(bool state)
{
return (state ? 0xffffff : 0xefffff);
}
WRITE_LINE_MEMBER( at_mb_device::shutdown )
{
if(state)
m_maincpu->reset();
}
WRITE_LINE_MEMBER( at_mb_device::dack0_w ) { set_dma_channel(0, state); }
WRITE_LINE_MEMBER( at_mb_device::dack1_w ) { set_dma_channel(1, state); }
WRITE_LINE_MEMBER( at_mb_device::dack2_w ) { set_dma_channel(2, state); }
WRITE_LINE_MEMBER( at_mb_device::dack3_w ) { set_dma_channel(3, state); }
WRITE_LINE_MEMBER( at_mb_device::dack4_w ) { m_dma8237_1->hack_w(state ? 0 : 1); } // it's inverted
WRITE_LINE_MEMBER( at_mb_device::dack5_w ) { set_dma_channel(5, state); }
WRITE_LINE_MEMBER( at_mb_device::dack6_w ) { set_dma_channel(6, state); }
WRITE_LINE_MEMBER( at_mb_device::dack7_w ) { set_dma_channel(7, state); }
READ8_MEMBER( at_mb_device::portb_r )
{
UINT8 data = m_at_speaker;
data &= ~0xd0; /* AT BIOS don't likes this being set */
@ -233,81 +393,12 @@ READ8_MEMBER( at_state::at_portb_r )
return data;
}
WRITE8_MEMBER( at_state::at_portb_w )
WRITE8_MEMBER( at_mb_device::portb_w )
{
m_at_speaker = data;
m_pit8254->write_gate2(BIT(data, 0));
at_speaker_set_spkrdata( BIT(data, 1));
speaker_set_spkrdata( BIT(data, 1));
m_channel_check = BIT(data, 3);
m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
}
READ8_MEMBER( at_state::ps2_portb_r )
{
UINT8 data = m_at_speaker;
data &= ~0xd0; /* AT BIOS don't likes this being set */
/* 0x10 is the dram refresh line bit, 15.085us. */
data |= (machine().time().as_ticks(66291) & 1) ? 0x10 : 0;
if (m_pit_out2)
data |= 0x20;
else
data &= ~0x20; /* ps2m30 wants this */
return data;
}
/**********************************************************
*
* Init functions
*
**********************************************************/
void at_state::init_at_common(int xmsbase)
{
address_space& space = m_maincpu->space(AS_PROGRAM);
/* MESS managed RAM */
membank("bank10")->set_base(m_ram->pointer());
if (m_ram->size() > xmsbase)
{
offs_t ram_limit = 0x100000 + m_ram->size() - xmsbase;
space.install_read_bank(0x100000, ram_limit - 1, "bank1");
space.install_write_bank(0x100000, ram_limit - 1, "bank1");
membank("bank1")->set_base(m_ram->pointer() + xmsbase);
}
}
DRIVER_INIT_MEMBER(at_state,atcga)
{
init_at_common(0xa0000);
}
DRIVER_INIT_MEMBER(at_state,atvga)
{
init_at_common(0xa0000);
}
DRIVER_INIT_MEMBER(at_state,atpci)
{
init_at_common(0x100000);
}
DRIVER_INIT_MEMBER(at586_state,at586)
{
}
MACHINE_START_MEMBER(at_state,at)
{
}
MACHINE_RESET_MEMBER(at_state,at)
{
m_at_spkrdata = 0;
m_pit_out2 = 1;
m_dma_channel = -1;
m_cur_eop = false;
}

95
src/mame/machine/at.h Normal file
View File

@ -0,0 +1,95 @@
// license:BSD-3-Clause
// copyright-holders:Wilbert Pol, Miodrag Milanovic, Carl
#ifndef _AT_H_
#define _AT_H_
#include "emu.h"
#include "machine/mc146818.h"
#include "machine/pic8259.h"
#include "machine/pit8253.h"
#include "machine/am9517a.h"
#include "bus/pc_kbd/pc_kbdc.h"
#include "bus/isa/isa.h"
#include "sound/speaker.h"
#include "softlist.h"
class at_mb_device : public device_t
{
public:
at_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
DECLARE_ADDRESS_MAP(map, 16);
DECLARE_READ8_MEMBER(page8_r);
DECLARE_WRITE8_MEMBER(page8_w);
DECLARE_READ8_MEMBER(portb_r);
DECLARE_WRITE8_MEMBER(portb_w);
DECLARE_READ8_MEMBER(get_slave_ack);
DECLARE_WRITE_LINE_MEMBER(pit8254_out2_changed);
DECLARE_WRITE_LINE_MEMBER(dma_hrq_changed);
DECLARE_READ8_MEMBER(dma8237_0_dack_r);
DECLARE_READ8_MEMBER(dma8237_1_dack_r);
DECLARE_READ8_MEMBER(dma8237_2_dack_r);
DECLARE_READ8_MEMBER(dma8237_3_dack_r);
DECLARE_READ8_MEMBER(dma8237_5_dack_r);
DECLARE_READ8_MEMBER(dma8237_6_dack_r);
DECLARE_READ8_MEMBER(dma8237_7_dack_r);
DECLARE_WRITE8_MEMBER(dma8237_0_dack_w);
DECLARE_WRITE8_MEMBER(dma8237_1_dack_w);
DECLARE_WRITE8_MEMBER(dma8237_2_dack_w);
DECLARE_WRITE8_MEMBER(dma8237_3_dack_w);
DECLARE_WRITE8_MEMBER(dma8237_5_dack_w);
DECLARE_WRITE8_MEMBER(dma8237_6_dack_w);
DECLARE_WRITE8_MEMBER(dma8237_7_dack_w);
DECLARE_WRITE_LINE_MEMBER(dma8237_out_eop);
DECLARE_WRITE_LINE_MEMBER(dack0_w);
DECLARE_WRITE_LINE_MEMBER(dack1_w);
DECLARE_WRITE_LINE_MEMBER(dack2_w);
DECLARE_WRITE_LINE_MEMBER(dack3_w);
DECLARE_WRITE_LINE_MEMBER(dack4_w);
DECLARE_WRITE_LINE_MEMBER(dack5_w);
DECLARE_WRITE_LINE_MEMBER(dack6_w);
DECLARE_WRITE_LINE_MEMBER(dack7_w);
DECLARE_WRITE8_MEMBER(write_rtc);
DECLARE_WRITE_LINE_MEMBER(shutdown);
DECLARE_READ8_MEMBER(dma_read_byte);
DECLARE_WRITE8_MEMBER(dma_write_byte);
DECLARE_READ8_MEMBER(dma_read_word);
DECLARE_WRITE8_MEMBER(dma_write_word);
UINT32 a20_286(bool state);
protected:
void device_start() override;
void device_reset() override;
virtual machine_config_constructor device_mconfig_additions() const override;
private:
void set_dma_channel(int channel, int state);
void speaker_set_spkrdata(UINT8 data);
required_device<cpu_device> m_maincpu;
required_device<isa16_device> m_isabus;
required_device<pic8259_device> m_pic8259_slave;
required_device<am9517a_device> m_dma8237_1;
required_device<am9517a_device> m_dma8237_2;
required_device<pit8254_device> m_pit8254;
required_device<speaker_sound_device> m_speaker;
required_device<mc146818_device> m_mc146818;
UINT8 m_at_spkrdata;
UINT8 m_pit_out2;
int m_dma_channel;
bool m_cur_eop;
UINT8 m_dma_offset[2][4];
UINT8 m_at_pages[0x10];
UINT16 m_dma_high_byte;
UINT8 m_at_speaker;
UINT8 m_channel_check;
UINT8 m_nmi_enabled;
};
extern const device_type AT_MB;
MACHINE_CONFIG_EXTERN(at_softlists);
#endif