Previous 199869 Revisions Next

r23568 Sunday 9th June, 2013 at 15:44:43 UTC by smf
created a new device for the bus master ide controller, but the implementation is still in the ide controller. (nw)
[src/emu/machine]idectrl.c idectrl.h
[src/mame/drivers]chihiro.c seattle.c vegas.c

trunk/src/mame/drivers/chihiro.c
r23567r23568
410410   struct chihiro_devices {
411411      pic8259_device    *pic8259_1;
412412      pic8259_device    *pic8259_2;
413      ide_controller_device *ide;
413      bus_master_ide_controller_device *ide;
414414   } chihiro_devs;
415415
416416   nv2a_renderer *nvidia_nv2a;
r23567r23568
29452945   AM_RANGE(0x0020, 0x0023) AM_DEVREADWRITE8("pic8259_1", pic8259_device, read, write, 0xffffffff)
29462946   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffffffff)
29472947   AM_RANGE(0x00a0, 0x00a3) AM_DEVREADWRITE8("pic8259_2", pic8259_device, read, write, 0xffffffff)
2948   AM_RANGE(0x01f0, 0x01f7) AM_DEVREADWRITE16("ide", ide_controller_device, read_cs0_pc, write_cs0_pc, 0xffffffff)
2948   AM_RANGE(0x01f0, 0x01f7) AM_DEVREADWRITE16("ide", bus_master_ide_controller_device, read_cs0_pc, write_cs0_pc, 0xffffffff)
29492949   AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_legacy_device, read, write)
29502950   AM_RANGE(0x8000, 0x80ff) AM_READWRITE(dummy_r, dummy_w)
29512951   AM_RANGE(0xc000, 0xc0ff) AM_READWRITE(smbus_r, smbus_w)
2952   AM_RANGE(0xff60, 0xff67) AM_DEVREADWRITE("ide", ide_controller_device, ide_bus_master32_r, ide_bus_master32_w)
2952   AM_RANGE(0xff60, 0xff67) AM_DEVREADWRITE("ide", bus_master_ide_controller_device, ide_bus_master32_r, ide_bus_master32_w)
29532953ADDRESS_MAP_END
29542954
29552955static INPUT_PORTS_START( chihiro )
r23567r23568
29672967   m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(chihiro_state::irq_callback),this));
29682968   chihiro_devs.pic8259_1 = machine().device<pic8259_device>( "pic8259_1" );
29692969   chihiro_devs.pic8259_2 = machine().device<pic8259_device>( "pic8259_2" );
2970   chihiro_devs.ide = machine().device<ide_controller_device>( "ide" );
2970   chihiro_devs.ide = machine().device<bus_master_ide_controller_device>( "ide" );
29712971   if (machine().debug_flags & DEBUG_FLAG_ENABLED)
29722972      debug_console_register_command(machine(),"chihiro",CMDFLAG_NONE,0,1,4,chihiro_debug_commands);
29732973}
r23567r23568
29972997   MCFG_PIC8259_ADD( "pic8259_1", WRITELINE(chihiro_state, chihiro_pic8259_1_set_int_line), VCC, READ8(chihiro_state,get_slave_ack) )
29982998   MCFG_PIC8259_ADD( "pic8259_2", DEVWRITELINE("pic8259_1", pic8259_device, ir2_w), GND, NULL )
29992999   MCFG_PIT8254_ADD( "pit8254", chihiro_pit8254_config )
3000   MCFG_IDE_CONTROLLER_ADD( "ide", ide_baseboard, NULL, "bb", true)
3000   MCFG_BUS_MASTER_IDE_CONTROLLER_ADD( "ide", ide_baseboard, NULL, "bb", true)
30013001   MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w))
3002   MCFG_IDE_CONTROLLER_BUS_MASTER("maincpu", AS_PROGRAM)
3002   MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE("maincpu", AS_PROGRAM)
30033003
30043004   /* video hardware */
30053005   MCFG_SCREEN_ADD("screen", RASTER)
trunk/src/mame/drivers/seattle.c
r23567r23568
518518   void update_widget_irq();
519519   void init_common(int ioasic, int serialnum, int yearoffs, int config);
520520   required_device<cpu_device> m_maincpu;
521   required_device<ide_controller_device> m_ide;
521   required_device<bus_master_ide_controller_device> m_ide;
522522};
523523
524524/*************************************
r23567r23568
17851785   ADDRESS_MAP_UNMAP_HIGH
17861786   AM_RANGE(0x00000000, 0x007fffff) AM_RAM AM_SHARE("rambase") // wg3dh only has 4MB; sfrush, blitz99 8MB
17871787   AM_RANGE(0x08000000, 0x08ffffff) AM_DEVREAD_LEGACY("voodoo", voodoo_r) AM_WRITE(seattle_voodoo_w)
1788   AM_RANGE(0x0a0001f0, 0x0a0001f7) AM_DEVREADWRITE16("ide", ide_controller_device, read_cs0_pc, write_cs0_pc, 0xffffffff)
1789   AM_RANGE(0x0a0003f0, 0x0a0003f7) AM_READ16(seattle_ide_r, 0xffffffff) AM_DEVWRITE16("ide", ide_controller_device, write_cs1_pc, 0xffffffff)
1788   AM_RANGE(0x0a0001f0, 0x0a0001f7) AM_DEVREADWRITE16("ide", bus_master_ide_controller_device, read_cs0_pc, write_cs0_pc, 0xffffffff)
1789   AM_RANGE(0x0a0003f0, 0x0a0003f7) AM_READ16(seattle_ide_r, 0xffffffff) AM_DEVWRITE16("ide", bus_master_ide_controller_device, write_cs1_pc, 0xffffffff)
17901790   AM_RANGE(0x0a00040c, 0x0a00040f) AM_NOP                     // IDE-related, but annoying
1791   AM_RANGE(0x0a000f00, 0x0a000f07) AM_DEVREADWRITE("ide", ide_controller_device, ide_bus_master32_r, ide_bus_master32_w)
1791   AM_RANGE(0x0a000f00, 0x0a000f07) AM_DEVREADWRITE("ide", bus_master_ide_controller_device, ide_bus_master32_r, ide_bus_master32_w)
17921792   AM_RANGE(0x0c000000, 0x0c000fff) AM_READWRITE(galileo_r, galileo_w)
17931793   AM_RANGE(0x13000000, 0x13000003) AM_WRITE(asic_fifo_w)
17941794   AM_RANGE(0x16000000, 0x1600003f) AM_READWRITE_LEGACY(midway_ioasic_r, midway_ioasic_w)
r23567r23568
25352535
25362536   MCFG_NVRAM_ADD_1FILL("nvram")
25372537
2538   MCFG_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true)
2538   MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true)
25392539   MCFG_IDE_CONTROLLER_IRQ_HANDLER(WRITELINE(seattle_state, ide_interrupt))
2540   MCFG_IDE_CONTROLLER_BUS_MASTER("maincpu", AS_PROGRAM)
2540   MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE("maincpu", AS_PROGRAM)
25412541
25422542   MCFG_3DFX_VOODOO_1_ADD("voodoo", STD_VOODOO_1_CLOCK, voodoo_intf)
25432543
trunk/src/mame/drivers/vegas.c
r23567r23568
14581458
14591459static READ32_DEVICE_HANDLER( ide_main_r )
14601460{
1461   ide_controller_device *ide = (ide_controller_device *) device;
1461   bus_master_ide_controller_device *ide = (bus_master_ide_controller_device *) device;
14621462
14631463   UINT32 data = 0;
14641464   if (ACCESSING_BITS_0_15)
r23567r23568
14721472
14731473static WRITE32_DEVICE_HANDLER( ide_main_w )
14741474{
1475   ide_controller_device *ide = (ide_controller_device *) device;
1475   bus_master_ide_controller_device *ide = (bus_master_ide_controller_device *) device;
14761476
14771477   if (ACCESSING_BITS_0_15)
14781478      ide->write_cs0_pc(space, offset * 2, data, mem_mask);
r23567r23568
14831483
14841484static READ32_DEVICE_HANDLER( ide_alt_r )
14851485{
1486   ide_controller_device *ide = (ide_controller_device *) device;
1486   bus_master_ide_controller_device *ide = (bus_master_ide_controller_device *) device;
14871487
14881488   UINT32 data = 0;
14891489   if (ACCESSING_BITS_0_15)
r23567r23568
14971497
14981498static WRITE32_DEVICE_HANDLER( ide_alt_w )
14991499{
1500   ide_controller_device *ide = (ide_controller_device *) device;
1500   bus_master_ide_controller_device *ide = (bus_master_ide_controller_device *) device;
15011501
15021502   if (ACCESSING_BITS_0_15)
15031503      ide->write_cs1_pc(space, 6/2 + offset * 2, data, mem_mask);
r23567r23568
15081508
15091509static READ32_DEVICE_HANDLER( ide_bus_master32_r )
15101510{
1511   ide_controller_device *ide = (ide_controller_device *) device;
1511   bus_master_ide_controller_device *ide = (bus_master_ide_controller_device *) device;
15121512   return ide->ide_bus_master32_r(space, offset, mem_mask);
15131513}
15141514
15151515
15161516static WRITE32_DEVICE_HANDLER( ide_bus_master32_w )
15171517{
1518   ide_controller_device *ide = (ide_controller_device *) device;
1518   bus_master_ide_controller_device *ide = (bus_master_ide_controller_device *) device;
15191519   ide->ide_bus_master32_w(space, offset, data, mem_mask);
15201520}
15211521
r23567r23568
22792279
22802280   MCFG_M48T37_ADD("timekeeper")
22812281
2282   MCFG_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true)
2282   MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true)
22832283   MCFG_IDE_CONTROLLER_IRQ_HANDLER(WRITELINE(vegas_state, ide_interrupt))
2284   MCFG_IDE_CONTROLLER_BUS_MASTER("maincpu", AS_PROGRAM)
2284   MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE("maincpu", AS_PROGRAM)
22852285
22862286   MCFG_SMC91C94_ADD("ethernet", ethernet_intf)
22872287
trunk/src/emu/machine/idectrl.c
r23567r23568
190190
191191/*************************************
192192 *
193 *  Convert offset/mem_mask to offset
194 *  and size
195 *
196 *************************************/
197
198INLINE int convert_to_offset_and_size32(offs_t *offset, UINT32 mem_mask)
199{
200   int size = 4;
201
202   /* determine which real offset */
203   if (!ACCESSING_BITS_0_7)
204   {
205      (*offset)++, size = 3;
206      if (!ACCESSING_BITS_8_15)
207      {
208         (*offset)++, size = 2;
209         if (!ACCESSING_BITS_16_23)
210            (*offset)++, size = 1;
211      }
212   }
213
214   /* determine the real size */
215   if (ACCESSING_BITS_24_31)
216      return size;
217   size--;
218   if (ACCESSING_BITS_16_23)
219      return size;
220   size--;
221   if (ACCESSING_BITS_8_15)
222      return size;
223   size--;
224   return size;
225}
226
227
228
229/*************************************
230 *
231193 *  Advance to the next sector
232194 *
233195 *************************************/
r23567r23568
13871349 *
13881350 *************************************/
13891351
1390UINT32 ide_controller_device::ide_bus_master_read(offs_t offset, int size)
1352READ32_MEMBER( bus_master_ide_controller_device::ide_bus_master32_r )
13911353{
1392   LOG(("%s:ide_bus_master_read(%d, %d)\n", machine().describe_context(), offset, size));
1354   LOG(("%s:ide_bus_master32_r(%d, %08x)\n", machine().describe_context(), offset, mem_mask));
13931355
1394   /* command register */
1395   if (offset == 0)
1356   switch( offset )
1357   {
1358   case 0:
1359      /* command register/status register */
13961360      return bus_master_command | (bus_master_status << 16);
13971361
1398   /* status register */
1399   if (offset == 2)
1400      return bus_master_status;
1401
1402   /* descriptor table register */
1403   if (offset == 4)
1362   case 1:
1363      /* descriptor table register */
14041364      return bus_master_descriptor;
1365   }
14051366
14061367   return 0xffffffff;
14071368}
r23567r23568
14141375 *
14151376 *************************************/
14161377
1417void ide_controller_device::ide_bus_master_write(offs_t offset, int size, UINT32 data)
1378WRITE32_MEMBER( bus_master_ide_controller_device::ide_bus_master32_w )
14181379{
1419   LOG(("%s:ide_bus_master_write(%d, %d, %08X)\n", machine().describe_context(), offset, size, data));
1380   LOG(("%s:ide_bus_master32_w(%d, %08x, %08X)\n", machine().describe_context(), offset, mem_mask, data));
14201381
1421   /* command register */
1422   if (offset == 0)
1382   switch( offset )
14231383   {
1424      UINT8 old = bus_master_command;
1425      UINT8 val = data & 0xff;
1426
1427      /* save the read/write bit and the start/stop bit */
1428      bus_master_command = (old & 0xf6) | (val & 0x09);
1429      bus_master_status = (bus_master_status & ~IDE_BUSMASTER_STATUS_ACTIVE) | (val & 0x01);
1430
1431      /* handle starting a transfer */
1432      if (!(old & 1) && (val & 1))
1384   case 0:
1385      if( ACCESSING_BITS_0_7 )
14331386      {
1434         /* reset all the DMA data */
1435         dma_bytes_left = 0;
1436         dma_last_buffer = 0;
1437         dma_descriptor = bus_master_descriptor;
1387         /* command register */
1388         UINT8 old = bus_master_command;
1389         UINT8 val = data & 0xff;
14381390
1439         /* if we're going live, start the pending read/write */
1440         if (dma_active)
1391         /* save the read/write bit and the start/stop bit */
1392         bus_master_command = (old & 0xf6) | (val & 0x09);
1393         bus_master_status = (bus_master_status & ~IDE_BUSMASTER_STATUS_ACTIVE) | (val & 0x01);
1394
1395         /* handle starting a transfer */
1396         if (!(old & 1) && (val & 1))
14411397         {
1442            if (bus_master_command & 8)
1443               read_next_sector();
1444            else
1398            /* reset all the DMA data */
1399            dma_bytes_left = 0;
1400            dma_last_buffer = 0;
1401            dma_descriptor = bus_master_descriptor;
1402
1403            /* if we're going live, start the pending read/write */
1404            if (dma_active)
14451405            {
1446               read_buffer_from_dma();
1447               continue_write();
1406               if (bus_master_command & 8)
1407                  read_next_sector();
1408               else
1409               {
1410                  read_buffer_from_dma();
1411                  continue_write();
1412               }
14481413            }
14491414         }
14501415      }
1451   }
14521416
1453   /* status register */
1454   if (offset <= 2 && offset + size > 2)
1455   {
1456      UINT8 old = bus_master_status;
1457      UINT8 val = data >> (8 * (2 - offset));
1417      if( ACCESSING_BITS_16_23 )
1418      {
1419         /* status register */
1420         UINT8 old = bus_master_status;
1421         UINT8 val = (data >> 16) & 0xff;
14581422
1459      /* save the DMA capable bits */
1460      bus_master_status = (old & 0x9f) | (val & 0x60);
1423         /* save the DMA capable bits */
1424         bus_master_status = (old & 0x9f) | (val & 0x60);
14611425
1462      /* clear interrupt and error bits */
1463      if (val & IDE_BUSMASTER_STATUS_IRQ)
1464         bus_master_status &= ~IDE_BUSMASTER_STATUS_IRQ;
1465      if (val & IDE_BUSMASTER_STATUS_ERROR)
1466         bus_master_status &= ~IDE_BUSMASTER_STATUS_ERROR;
1467   }
1426         /* clear interrupt and error bits */
1427         if (val & IDE_BUSMASTER_STATUS_IRQ)
1428            bus_master_status &= ~IDE_BUSMASTER_STATUS_IRQ;
1429         if (val & IDE_BUSMASTER_STATUS_ERROR)
1430            bus_master_status &= ~IDE_BUSMASTER_STATUS_ERROR;
1431      }
1432      break;
14681433
1469   /* descriptor table register */
1470   if (offset == 4)
1434   case 1:
1435      /* descriptor table register */
14711436      bus_master_descriptor = data & 0xfffffffc;
1437      break;
1438   }
14721439}
14731440
1474READ32_MEMBER( ide_controller_device::ide_bus_master32_r )
1475{
1476   int size;
14771441
1478   offset *= 4;
1479   size = convert_to_offset_and_size32(&offset, mem_mask);
1480
1481   return ide_bus_master_read(offset, size) << ((offset & 3) * 8);
1482}
1483
1484
1485WRITE32_MEMBER( ide_controller_device::ide_bus_master32_w )
1486{
1487   int size;
1488
1489   offset *= 4;
1490   size = convert_to_offset_and_size32(&offset, mem_mask);
1491
1492   ide_bus_master_write(offset, size, data >> ((offset & 3) * 8));
1493}
1494
1495
14961442SLOT_INTERFACE_START(ide_devices)
14971443   SLOT_INTERFACE("hdd", IDE_HARDDISK)
14981444SLOT_INTERFACE_END
14991445
1500const device_type IDE_CONTROLLER = &device_creator<ide_controller_device>;
1501
1502ide_controller_device::ide_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
1503   device_t(mconfig, IDE_CONTROLLER, "IDE Controller", tag, owner, clock),
1446ide_controller_device::ide_controller_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) :
1447   device_t(mconfig, type, name, tag, owner, clock),
15041448   status(0),
1449   bmcpu(NULL),
1450   bmspace(0),
1451   dma_space(NULL),
1452   dma_active(0),
1453   dma_address_xor(0),
1454   dma_last_buffer(0),
1455   dma_address(0),
1456   dma_descriptor(0),
1457   dma_bytes_left(0),
1458   bus_master_command(0),
1459   bus_master_status(0),
1460   bus_master_descriptor(0),
15051461   adapter_control(0),
15061462   error(0),
15071463   command(0),
r23567r23568
15121468   block_count(0),
15131469   sectors_until_int(0),
15141470   verify_only(0),
1515   dma_active(0),
1471   config_unknown(0),
1472   config_register_num(0),
1473   master_password_enable(0),
1474   user_password_enable(0),
1475   master_password(NULL),
1476   user_password(NULL),
1477   gnetreadlock(0),
1478   cur_drive(0),
1479   m_irq_handler(*this)
1480{
1481}
1482
1483
1484const device_type IDE_CONTROLLER = &device_creator<ide_controller_device>;
1485
1486ide_controller_device::ide_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
1487   device_t(mconfig, IDE_CONTROLLER, "IDE Controller", tag, owner, clock),
1488   bmcpu(NULL),
1489   bmspace(0),
15161490   dma_space(NULL),
1491   dma_active(0),
15171492   dma_address_xor(0),
15181493   dma_last_buffer(0),
15191494   dma_address(0),
r23567r23568
15221497   bus_master_command(0),
15231498   bus_master_status(0),
15241499   bus_master_descriptor(0),
1500   adapter_control(0),
1501   error(0),
1502   command(0),
1503   interrupt_pending(0),
1504   precomp_offset(0),
1505   buffer_offset(0),
1506   sector_count(0),
1507   block_count(0),
1508   sectors_until_int(0),
1509   verify_only(0),
15251510   config_unknown(0),
15261511   config_register_num(0),
15271512   master_password_enable(0),
r23567r23568
15301515   user_password(NULL),
15311516   gnetreadlock(0),
15321517   cur_drive(0),
1533   m_irq_handler(*this),
1534   bmcpu(NULL),
1535   bmspace(0)
1518   m_irq_handler(*this)
15361519{
15371520}
15381521
1522const device_type BUS_MASTER_IDE_CONTROLLER = &device_creator<bus_master_ide_controller_device>;
1523
1524bus_master_ide_controller_device::bus_master_ide_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
1525   ide_controller_device(mconfig, BUS_MASTER_IDE_CONTROLLER, "Bus Master IDE Controller", tag, owner, clock)
1526{
1527}
1528
15391529//-------------------------------------------------
15401530//  device_start - device-specific startup
15411531//-------------------------------------------------
trunk/src/emu/machine/idectrl.h
r23567r23568
4949#define MCFG_IDE_CONTROLLER_IRQ_HANDLER(_devcb) \
5050   devcb = &ide_controller_device::set_irq_handler(*device, DEVCB2_##_devcb);
5151
52#define MCFG_IDE_CONTROLLER_BUS_MASTER(bmcpu, bmspace) \
53   ide_controller_device::set_bus_master(*device, bmcpu, bmspace);
54
5552SLOT_INTERFACE_EXTERN(ide_devices);
5653SLOT_INTERFACE_EXTERN(ide_devices);
5754
r23567r23568
8077{
8178public:
8279   ide_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
80   ide_controller_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
8381
8482   // static configuration helpers
8583   template<class _Object> static devcb2_base &set_irq_handler(device_t &device, _Object object) { return downcast<ide_controller_device &>(device).m_irq_handler.set_callback(object); }
86   static void set_bus_master(device_t &device, const char *bmcpu, UINT32 bmspace) {ide_controller_device &ide = downcast<ide_controller_device &>(device); ide.bmcpu = bmcpu; ide.bmspace = bmspace; }
8784
8885   UINT8 *ide_get_features(int drive);
8986   void ide_set_gnet_readlock(const UINT8 onoff);
r23567r23568
10299   DECLARE_WRITE16_MEMBER(write_cs0_pc);
103100   DECLARE_WRITE16_MEMBER(write_cs1_pc);
104101   
105   DECLARE_READ32_MEMBER( ide_bus_master32_r );
106   DECLARE_WRITE32_MEMBER( ide_bus_master32_w );
107
108   UINT32 ide_bus_master_read(offs_t offset, int size);
109   void ide_bus_master_write(offs_t offset, int size, UINT32 data);
110102   void signal_interrupt();
111103   void clear_interrupt();
112104   void read_sector_done();
r23567r23568
119111   virtual void device_start();
120112   virtual void device_reset();
121113
114   const char *bmcpu;
115   UINT32 bmspace;
116   address_space * dma_space;
117   UINT8           dma_active;
118   UINT8           dma_address_xor;
119   UINT8           dma_last_buffer;
120   offs_t          dma_address;
121   offs_t          dma_descriptor;
122   UINT32          dma_bytes_left;
123   UINT8           bus_master_command;
124   UINT8           bus_master_status;
125   UINT32          bus_master_descriptor;
126
127   void read_next_sector();
128   void read_buffer_from_dma();
129   void continue_write();
130
122131private:
123132   void signal_delayed_interrupt(attotime time, int buffer_ready);
124133   void next_sector();
r23567r23568
126135   void continue_read();
127136   void write_buffer_to_dma();
128137   void read_first_sector();
129   void read_next_sector();
130   void read_buffer_from_dma();
131138   void handle_command(UINT8 _command);
132   void continue_write();
133139
134140   UINT8           adapter_control;
135141   UINT8           error;
r23567r23568
145151   UINT16          sectors_until_int;
146152   UINT8           verify_only;
147153
148   UINT8           dma_active;
149   address_space *dma_space;
150   UINT8           dma_address_xor;
151   UINT8           dma_last_buffer;
152   offs_t          dma_address;
153   offs_t          dma_descriptor;
154   UINT32          dma_bytes_left;
155
156   UINT8           bus_master_command;
157   UINT8           bus_master_status;
158   UINT32          bus_master_descriptor;
159
160154   UINT8           config_unknown;
161155   UINT8           config_register[IDE_CONFIG_REGISTERS];
162156   UINT8           config_register_num;
r23567r23568
175169   ide_slot_device *slot[2];
176170
177171   devcb2_write_line m_irq_handler;
178   const char *bmcpu;
179   UINT32 bmspace;
180172};
181173
182174extern const device_type IDE_CONTROLLER;
183175
176
177#define MCFG_BUS_MASTER_IDE_CONTROLLER_ADD(_tag, _slotintf, _master, _slave, _fixed) \
178   MCFG_IDE_SLOT_ADD("drive_0", _slotintf, _master, _fixed) \
179   MCFG_IDE_SLOT_ADD("drive_1", _slotintf, _slave, _fixed) \
180   MCFG_DEVICE_ADD(_tag, BUS_MASTER_IDE_CONTROLLER, 0)
181
182#define MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE(bmcpu, bmspace) \
183   bus_master_ide_controller_device::set_bus_master_space(*device, bmcpu, bmspace);
184
185class bus_master_ide_controller_device : public ide_controller_device
186{
187public:
188   bus_master_ide_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
189   static void set_bus_master_space(device_t &device, const char *bmcpu, UINT32 bmspace) {bus_master_ide_controller_device &ide = downcast<bus_master_ide_controller_device &>(device); ide.bmcpu = bmcpu; ide.bmspace = bmspace; }
190
191   DECLARE_READ32_MEMBER( ide_bus_master32_r );
192   DECLARE_WRITE32_MEMBER( ide_bus_master32_w );
193};
194
195extern const device_type BUS_MASTER_IDE_CONTROLLER;
196
184197#endif  /* __IDECTRL_H__ */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team