summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2017-04-09 22:07:38 -0500
committer cracyc <cracyc@users.noreply.github.com>2017-04-09 22:07:38 -0500
commitabedbd9c68a5031fa1636eb5147c086d3a888d45 (patch)
treec0b7f93de9929be41f7eb3ce5c25552d7e46ba06
parentaea3c790428052d093bc621365ffb6e40f781a14 (diff)
mtouchxl: stuff (nw)
-rw-r--r--src/mame/drivers/mtouchxl.cpp120
1 files changed, 63 insertions, 57 deletions
diff --git a/src/mame/drivers/mtouchxl.cpp b/src/mame/drivers/mtouchxl.cpp
index af3ad4c572f..097bfdd9c30 100644
--- a/src/mame/drivers/mtouchxl.cpp
+++ b/src/mame/drivers/mtouchxl.cpp
@@ -15,23 +15,15 @@
***************************************************************************/
-/* mingw-gcc defines this */
-#ifdef i386
-#undef i386
-#endif /* i386 */
-
#include "emu.h"
#include "bus/isa/isa_cards.h"
-#include "bus/pc_kbd/keyboards.h"
#include "cpu/i386/i386.h"
-#include "cpu/i86/i286.h"
#include "machine/at.h"
-#include "machine/cs8221.h"
-#include "machine/ds128x.h"
-#include "machine/nvram.h"
#include "machine/ram.h"
-#include "machine/vt82c496.h"
-#include "machine/wd7600.h"
+#include "machine/8042kbdc.h"
+#include "machine/nvram.h"
+#include "machine/ins8250.h"
+#include "machine/microtch.h"
#include "speaker.h"
class mt6k_state : public driver_device
@@ -41,38 +33,27 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_mb(*this, "mb"),
- m_ram(*this, RAM_TAG)
+ m_ram(*this, RAM_TAG),
+ m_rombank(*this, "rombank")
{ }
required_device<cpu_device> m_maincpu;
required_device<at_mb_device> m_mb;
required_device<ram_device> m_ram;
- DECLARE_DRIVER_INIT(at);
-
- void init_at_common(int xmsbase);
+ required_memory_bank m_rombank;
+ void machine_start();
+ void machine_reset();
+ DECLARE_WRITE8_MEMBER(bank_w);
};
-class megapc_state : public driver_device
+WRITE8_MEMBER(mt6k_state::bank_w)
{
-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;
-};
+ m_rombank->set_entry(data & 0xf);
+}
static ADDRESS_MAP_START( at32_map, AS_PROGRAM, 32, mt6k_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00000000, 0x0009ffff) AM_RAMBANK("bank10")
- AM_RANGE(0x000d0000, 0x000dffff) AM_ROM AM_REGION("ioboard", 0)
+ AM_RANGE(0x000d0000, 0x000dffff) AM_ROMBANK("rombank")
AM_RANGE(0x000e0000, 0x000fffff) AM_ROM AM_REGION("bios", 0)
AM_RANGE(0x00800000, 0x00800bff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("bios", 0)
@@ -80,36 +61,57 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( at32_io, AS_IO, 32, mt6k_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0x00ff) AM_DEVICE16("mb", at_mb_device, map, 0xffffffff)
+ AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("mb:dma8237_1", am9517a_device, read, write, 0xffffffff)
+ AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("mb:pic8259_master", pic8259_device, read, write, 0xffffffff)
+ AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("mb:pit8254", pit8254_device, read, write, 0xffffffff)
+ AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("mb", at_mb_device, portb_r, portb_w, 0x0000ff00)
+ AM_RANGE(0x0060, 0x0067) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
+ AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("mb:rtc", mc146818_device, read, write, 0xffffffff)
+ AM_RANGE(0x0080, 0x009f) AM_DEVREADWRITE8("mb", at_mb_device, page8_r, page8_w, 0xffffffff)
+ AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("mb:pic8259_slave", pic8259_device, read, write, 0xffffffff)
+ AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE8("mb:dma8237_2", am9517a_device, read, write, 0x00ff00ff)
+ AM_RANGE(0x022c, 0x022f) AM_WRITE8(bank_w, 0xff000000)
+ AM_RANGE(0x03f8, 0x03ff) AM_DEVREADWRITE8("ns16550", ns16550_device, ins8250_r, ins8250_w, 0xffffffff)
ADDRESS_MAP_END
/**********************************************************
*
* Init functions
*
- **********************************************************/
+ *********************************************************/
-void mt6k_state::init_at_common(int xmsbase)
+void mt6k_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() > xmsbase)
+ if (m_ram->size() > 0xa0000)
{
- offs_t ram_limit = 0x100000 + m_ram->size() - xmsbase;
+ 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() + xmsbase);
+ membank("bank1")->set_base(m_ram->pointer() + 0xa0000);
}
+ m_rombank->configure_entries(0, 16, memregion("ioboard")->base(), 0x10000);
}
-DRIVER_INIT_MEMBER(mt6k_state,at)
+void mt6k_state::machine_reset()
{
- init_at_common(0xa0000);
+ m_rombank->set_entry(0);
}
+
+static MACHINE_CONFIG_FRAGMENT(cdrom)
+ MCFG_DEVICE_MODIFY("ide:0")
+ MCFG_SLOT_DEFAULT_OPTION("cdrom")
+ MCFG_SLOT_FIXED(true)
+ MCFG_DEVICE_MODIFY("ide:1")
+ MCFG_SLOT_DEFAULT_OPTION("")
+ MCFG_SLOT_FIXED(true)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_START( at486, mt6k_state )
MCFG_CPU_ADD("maincpu", I486, 25000000)
MCFG_CPU_PROGRAM_MAP(at32_map)
@@ -117,22 +119,26 @@ static MACHINE_CONFIG_START( at486, mt6k_state )
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)
MCFG_NVRAM_ADD_0FILL("nvram")
// 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, "vga", 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)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board1", pc_isa16_cards, "ide", true)
+ MCFG_SLOT_OPTION_MACHINE_CONFIG("ide", cdrom)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa1", pc_isa16_cards, "vga", true)
+
+ MCFG_DEVICE_ADD("ns16550", NS16550, XTAL_1_8432MHz)
+ MCFG_INS8250_OUT_TX_CB(DEVWRITELINE("microtouch", microtouch_device, rx))
+ MCFG_INS8250_OUT_INT_CB(DEVWRITELINE("mb:pic8259_master", pic8259_device, ir4_w))
+ MCFG_MICROTOUCH_ADD("microtouch", 9600, DEVWRITELINE("ns16550", ins8250_uart_device, rx_w))
+
+ // remove the keyboard controller and use the HLE one which allow keys to be unmapped
+ MCFG_DEVICE_REMOVE("mb:keybc");
+ MCFG_DEVICE_REMOVE("mb:pc_kbdc");
+ MCFG_DEVICE_ADD("kbdc", KBDC8042, 0)
+ MCFG_KBDC8042_KEYBOARD_TYPE(KBDC8042_AT386)
+ MCFG_KBDC8042_SYSTEM_RESET_CB(INPUTLINE("maincpu", INPUT_LINE_RESET))
+ MCFG_KBDC8042_GATE_A20_CB(INPUTLINE("maincpu", INPUT_LINE_A20))
+ MCFG_KBDC8042_INPUT_BUFFER_FULL_CB(DEVWRITELINE("mb:pic8259_master", pic8259_device, ir1_w))
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
@@ -142,12 +148,12 @@ MACHINE_CONFIG_END
ROM_START( mtchxl6k )
ROM_REGION(0x20000, "bios", 0)
- ROM_LOAD("at486.bin", 0x10000, 0x10000, CRC(31214616) SHA1(51b41fa44d92151025fc9ad06e518e906935e689))
+ ROM_LOAD("prom.mb", 0x10000, 0x10000, BAD_DUMP CRC(e44bfd3c) SHA1(c07ec94e11efa30e001f39560010112f73cc0016) ) // isn't the original bios
ROM_REGION(0x100000, "ioboard", 0)
ROM_LOAD( "sa3014-04_u12-r00.u12", 0x000000, 0x100000, CRC(2a6fbca4) SHA1(186eb052cb9b77ffe6ee4cb50c1b580532fd8f47) )
- DISK_REGION("board3:ide:ide:0:cdrom:image")
+ DISK_REGION("board1:ide:ide:0:cdrom:image")
DISK_IMAGE_READONLY("r02", 0, SHA1(eaaf26d2b700f16138090de7f372b40b93e8dba9))
ROM_END
@@ -158,4 +164,4 @@ ROM_END
***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-COMP ( 1990, mtchxl6k, 0, 0, at486, 0, mt6k_state, at, "Merit Industries", "MegaTouch XL 6000", MACHINE_NOT_WORKING )
+COMP ( 1990, mtchxl6k, 0, 0, at486, at_keyboard, driver_device, 0, "Merit Industries", "MegaTouch XL 6000", MACHINE_NOT_WORKING )