mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
at: create at motherboard device and split pci and ps2 machines into own files [Carl]
This commit is contained in:
parent
0c452da4b2
commit
24ced36677
@ -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",
|
||||
}
|
||||
|
@ -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
136
src/mame/drivers/atpci.cpp
Normal 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 )
|
@ -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
255
src/mame/drivers/ps2.cpp
Normal 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 )
|
@ -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_ */
|
@ -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
95
src/mame/machine/at.h
Normal 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
|
Loading…
Reference in New Issue
Block a user