diff options
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 |
commit | abedbd9c68a5031fa1636eb5147c086d3a888d45 (patch) | |
tree | c0b7f93de9929be41f7eb3ce5c25552d7e46ba06 | |
parent | aea3c790428052d093bc621365ffb6e40f781a14 (diff) |
mtouchxl: stuff (nw)
-rw-r--r-- | src/mame/drivers/mtouchxl.cpp | 120 |
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 ) |