src/mess/machine/isa_ide.c
| r14013 | r14014 | |
| 22 | 22 | static void ide_interrupt(device_t *device, int state) |
| 23 | 23 | { |
| 24 | 24 | isa16_ide_device *ide = downcast<isa16_ide_device *>(device->owner()); |
| 25 | | ide->m_isa->irq14_w(state); |
| 25 | if (ide->is_primary()) { |
| 26 | ide->m_isa->irq14_w(state); |
| 27 | } else { |
| 28 | ide->m_isa->irq15_w(state); |
| 29 | } |
| 26 | 30 | } |
| 27 | 31 | |
| 28 | 32 | |
| r14013 | r14014 | |
| 34 | 38 | MCFG_IDE_CONTROLLER_REGIONS("harddisk1", "harddisk2") |
| 35 | 39 | MACHINE_CONFIG_END |
| 36 | 40 | |
| 41 | static INPUT_PORTS_START( ide ) |
| 42 | PORT_START("DSW") |
| 43 | PORT_DIPNAME( 0x01, 0x00, "IDE Configuration") |
| 44 | PORT_DIPSETTING( 0x00, "Primary" ) |
| 45 | PORT_DIPSETTING( 0x01, "Secondary" ) |
| 46 | INPUT_PORTS_END |
| 47 | |
| 37 | 48 | //************************************************************************** |
| 38 | 49 | // GLOBAL VARIABLES |
| 39 | 50 | //************************************************************************** |
| r14013 | r14014 | |
| 50 | 61 | return MACHINE_CONFIG_NAME( ide ); |
| 51 | 62 | } |
| 52 | 63 | |
| 64 | //------------------------------------------------- |
| 65 | // input_ports - device-specific input ports |
| 66 | //------------------------------------------------- |
| 67 | |
| 68 | ioport_constructor isa16_ide_device::device_input_ports() const |
| 69 | { |
| 70 | return INPUT_PORTS_NAME( ide ); |
| 71 | } |
| 72 | |
| 53 | 73 | //************************************************************************** |
| 54 | 74 | // LIVE DEVICE |
| 55 | 75 | //************************************************************************** |
| r14013 | r14014 | |
| 60 | 80 | |
| 61 | 81 | isa16_ide_device::isa16_ide_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 62 | 82 | : device_t(mconfig, ISA16_IDE, "ISA16_IDE", tag, owner, clock), |
| 63 | | device_isa16_card_interface( mconfig, *this ) |
| 83 | device_isa16_card_interface( mconfig, *this ), |
| 84 | m_is_primary(true) |
| 64 | 85 | { |
| 65 | 86 | } |
| 66 | 87 | |
| r14013 | r14014 | |
| 71 | 92 | void isa16_ide_device::device_start() |
| 72 | 93 | { |
| 73 | 94 | set_isa_device(); |
| 74 | | m_isa->install16_device(subdevice("ide"), 0x01f0, 0x01f7, 0, 0, FUNC(ide16_r), FUNC(ide16_w) ); |
| 75 | 95 | } |
| 76 | 96 | |
| 77 | 97 | //------------------------------------------------- |
| r14013 | r14014 | |
| 79 | 99 | //------------------------------------------------- |
| 80 | 100 | |
| 81 | 101 | void isa16_ide_device::device_reset() |
| 82 | | { |
| 102 | { |
| 103 | m_is_primary = (input_port_read(this, "DSW") & 1) ? false : true; |
| 104 | if (m_is_primary) { |
| 105 | m_isa->install16_device(subdevice("ide"), 0x01f0, 0x01f7, 0, 0, FUNC(ide16_r), FUNC(ide16_w) ); |
| 106 | } else { |
| 107 | m_isa->install16_device(subdevice("ide"), 0x0170, 0x0177, 0, 0, FUNC(ide16_r), FUNC(ide16_w) ); |
| 108 | } |
| 83 | 109 | } |
src/mess/drivers/at.c
| r14013 | r14014 | |
| 13 | 13 | |
| 14 | 14 | #include "includes/at.h" |
| 15 | 15 | |
| 16 | | READ32_MEMBER( at_state::ide_r ) |
| 17 | | { |
| 18 | | return ide_controller32_r(m_ide, 0x1f0/4 + offset, mem_mask); |
| 19 | | } |
| 20 | | |
| 21 | | WRITE32_MEMBER( at_state::ide_w ) |
| 22 | | { |
| 23 | | ide_controller32_w(m_ide, 0x1f0/4 + offset, data, mem_mask); |
| 24 | | } |
| 25 | | |
| 26 | 16 | static ADDRESS_MAP_START( at16_map, AS_PROGRAM, 16, at_state ) |
| 27 | 17 | AM_RANGE(0x000000, 0x09ffff) AM_MIRROR(0xff000000) AM_RAMBANK("bank10") |
| 28 | 18 | AM_RANGE(0x0c0000, 0x0c7fff) AM_ROM |
| r14013 | r14014 | |
| 152 | 142 | AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff) |
| 153 | 143 | AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_slave", pic8259_r, pic8259_w, 0xffffffff) |
| 154 | 144 | AM_RANGE(0x00c0, 0x00df) AM_READWRITE8(at_dma8237_2_r, at_dma8237_2_w, 0xffffffff) |
| 155 | | AM_RANGE(0x01f0, 0x01f7) AM_READWRITE(ide_r, ide_w) |
| 156 | 145 | ADDRESS_MAP_END |
| 157 | 146 | |
| 158 | 147 | |
| r14013 | r14014 | |
| 195 | 184 | AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff) |
| 196 | 185 | AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_slave", pic8259_r, pic8259_w, 0xffffffff) |
| 197 | 186 | AM_RANGE(0x00c0, 0x00df) AM_READWRITE8(at_dma8237_2_r, at_dma8237_2_w, 0xffffffff) |
| 198 | | AM_RANGE(0x01f0, 0x01f7) AM_READWRITE(ide_r, ide_w) |
| 199 | 187 | ADDRESS_MAP_END |
| 200 | 188 | |
| 201 | 189 | |
| r14013 | r14014 | |
| 210 | 198 | AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_slave", pic8259_r, pic8259_w, 0xffffffff) |
| 211 | 199 | AM_RANGE(0x00c0, 0x00df) AM_READWRITE8(at_dma8237_2_r, at_dma8237_2_w, 0xffffffff) |
| 212 | 200 | AM_RANGE(0x00e0, 0x00ef) AM_NOP // used for timing? |
| 213 | | AM_RANGE(0x01f0, 0x01f7) AM_READWRITE(ide_r, ide_w) |
| 214 | 201 | AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE_LEGACY("pcibus", pci_32le_r, pci_32le_w) |
| 215 | 202 | ADDRESS_MAP_END |
| 216 | 203 | |
| r14013 | r14014 | |
| 317 | 304 | DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_data_w) |
| 318 | 305 | }; |
| 319 | 306 | |
| 320 | | static void ide_interrupt(device_t *device, int state) |
| 321 | | { |
| 322 | | pic8259_ir6_w(device->machine().device("pic8259_slave"),state); |
| 323 | | } |
| 324 | | |
| 325 | 307 | WRITE_LINE_MEMBER( at_state::at_mc146818_irq ) |
| 326 | 308 | { |
| 327 | 309 | pic8259_ir0_w(m_pic8259_slave, (state) ? 0 : 1); |
| r14013 | r14014 | |
| 559 | 541 | MCFG_ISA16_BUS_ADD("isabus", "maincpu", isabus_intf) |
| 560 | 542 | MCFG_ISA_ONBOARD_ADD("isabus", "fdc", ISA8_FDC, NULL) |
| 561 | 543 | MCFG_ISA_ONBOARD_ADD("isabus", "com", ISA8_COM_AT, NULL) |
| 544 | MCFG_ISA_ONBOARD_ADD("isabus", "ide", ISA16_IDE, NULL) |
| 562 | 545 | MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, NULL, NULL) |
| 563 | 546 | MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, NULL, NULL) |
| 564 | 547 | MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, NULL, NULL) |
| r14013 | r14014 | |
| 566 | 549 | |
| 567 | 550 | MCFG_FRAGMENT_ADD( pcvideo_vga ) |
| 568 | 551 | |
| 569 | | /* harddisk */ |
| 570 | | MCFG_HARDDISK_ADD("harddisk1") |
| 571 | | MCFG_HARDDISK_ADD("harddisk2") |
| 572 | | MCFG_IDE_CONTROLLER_ADD("ide", ide_interrupt) |
| 573 | | MCFG_IDE_CONTROLLER_REGIONS("harddisk1", "harddisk2") |
| 574 | | |
| 575 | 552 | /* internal ram */ |
| 576 | 553 | MCFG_RAM_ADD(RAM_TAG) |
| 577 | 554 | MCFG_RAM_DEFAULT_SIZE("1664K") |
| r14013 | r14014 | |
| 600 | 577 | MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M") |
| 601 | 578 | MACHINE_CONFIG_END |
| 602 | 579 | |
| 580 | //------------------------------------------------- |
| 581 | // DEVICE_INPUT_DEFAULTS( ide_2nd) |
| 582 | //------------------------------------------------- |
| 603 | 583 | |
| 584 | static DEVICE_INPUT_DEFAULTS_START( ide_2nd ) |
| 585 | DEVICE_INPUT_DEFAULTS("DSW", 0x01, 0x01) |
| 586 | DEVICE_INPUT_DEFAULTS_END |
| 587 | |
| 588 | |
| 604 | 589 | static MACHINE_CONFIG_DERIVED( at586, at386 ) |
| 605 | 590 | MCFG_CPU_REPLACE("maincpu", PENTIUM, 60000000) |
| 606 | 591 | MCFG_CPU_PROGRAM_MAP(at586_map) |
| r14013 | r14014 | |
| 613 | 598 | MCFG_PCI_BUS_DEVICE(0, "i82439tx", i82439tx_pci_read, i82439tx_pci_write) |
| 614 | 599 | MCFG_PCI_BUS_DEVICE(1, "i82371ab", i82371ab_pci_read, i82371ab_pci_write) |
| 615 | 600 | |
| 601 | MCFG_ISA16_SLOT_ADD("isabus","isa5", pc_isa16_cards, "ide", ide_2nd) //2nd-ary IDE |
| 602 | |
| 616 | 603 | MCFG_DEVICE_REMOVE(RAM_TAG) |
| 617 | 604 | MCFG_RAM_ADD(RAM_TAG) |
| 618 | 605 | MCFG_RAM_DEFAULT_SIZE("4M") |