Previous 199869 Revisions Next

r23643 Tuesday 11th June, 2013 at 21:58:07 UTC by smf
moved the buffer from the ide controller to the device (nw)
[src/emu/machine]idectrl.c idectrl.h idehd.c idehd.h

trunk/src/emu/machine/idehd.c
r23642r23643
247247   save_item(NAME(cur_head_reg));
248248
249249   save_item(NAME(cur_lba));
250
251   save_item(NAME(buffer));
252   save_item(NAME(buffer_offset));
250253}
251254
252255//-------------------------------------------------
trunk/src/emu/machine/idehd.h
r23642r23643
2828   UINT8           cur_head_reg;
2929   UINT32          cur_lba;
3030
31   UINT8           buffer[IDE_DISK_SECTOR_SIZE];
32   UINT16          buffer_offset;
33
3134protected:
3235   UINT8           m_features[IDE_DISK_SECTOR_SIZE];
3336   UINT16          m_num_cylinders;
trunk/src/emu/machine/idectrl.c
r23642r23643
268268
269269void ide_controller_device::read_buffer_empty()
270270{
271   ide_device_interface *dev = slot[cur_drive]->dev();
272
271273   /* reset the totals */
272   buffer_offset = 0;
274   dev->buffer_offset = 0;
273275
274276   /* clear the buffer ready and busy flag */
275277   status &= ~IDE_STATUS_BUFFER_READY;
r23642r23643
305307      status &= ~IDE_STATUS_BUSY;
306308      return;
307309   }
310
308311   /* now do the read */
309   count = dev->read_sector(lba, buffer);
312   count = dev->read_sector(lba, dev->buffer);
310313
311314   /* by default, mark the buffer ready and the seek complete */
312315   if (!verify_only)
r23642r23643
413416
414417void ide_controller_device::continue_write()
415418{
419   ide_device_interface *dev = slot[cur_drive]->dev();
420
416421   /* reset the totals */
417   buffer_offset = 0;
422   dev->buffer_offset = 0;
418423
419424   /* clear the buffer ready flag */
420425   status &= ~IDE_STATUS_BUFFER_READY;
r23642r23643
448453   set_dmarq(0);
449454   if (command == IDE_COMMAND_SECURITY_UNLOCK)
450455   {
451      if (user_password_enable && memcmp(buffer, user_password, 2 + 32) == 0)
456      if (user_password_enable && memcmp(dev->buffer, user_password, 2 + 32) == 0)
452457      {
453458         LOGPRINT(("IDE Unlocked user password\n"));
454459         user_password_enable = 0;
455460      }
456      if (master_password_enable && memcmp(buffer, master_password, 2 + 32) == 0)
461      if (master_password_enable && memcmp(dev->buffer, master_password, 2 + 32) == 0)
457462      {
458463         LOGPRINT(("IDE Unlocked master password\n"));
459464         master_password_enable = 0;
r23642r23643
467472            if (i % 8 == 2)
468473               mame_printf_debug("\n");
469474
470            mame_printf_debug("0x%02x, 0x%02x, ", buffer[i], buffer[i + 1]);
471            //mame_printf_debug("0x%02x%02x, ", buffer[i], buffer[i + 1]);
475            mame_printf_debug("0x%02x, 0x%02x, ", dev->buffer[i], dev->buffer[i + 1]);
476            //mame_printf_debug("0x%02x%02x, ", dev->buffer[i], dev->buffer[i + 1]);
472477         }
473478         mame_printf_debug("\n");
474479      }
r23642r23643
490495      dev->read_key(key);
491496
492497      for (i=0; !bad && i<512; i++)
493         bad = ((i < 2 || i >= 7) && buffer[i]) || ((i >= 2 && i < 7) && buffer[i] != key[i-2]);
498         bad = ((i < 2 || i >= 7) && dev->buffer[i]) || ((i >= 2 && i < 7) && dev->buffer[i] != key[i-2]);
494499
495500      status &= ~IDE_STATUS_BUSY;
496501      status &= ~IDE_STATUS_BUFFER_READY;
r23642r23643
514519   int lba = dev->lba_address(), count = 0;
515520
516521   /* now do the write */
517   count = dev->write_sector(lba, buffer);
522   count = dev->write_sector(lba, dev->buffer);
518523
519524   /* by default, mark the buffer ready and the seek complete */
520525   status |= IDE_STATUS_BUFFER_READY;
r23642r23643
592597            dev->cur_cylinder, dev->cur_head, dev->cur_sector, dev->lba_address(), sector_count));
593598
594599         /* reset the buffer */
595         buffer_offset = 0;
600         dev->buffer_offset = 0;
596601         sectors_until_int = 1;
597602         dma_active = 0;
598603         verify_only = 0;
r23642r23643
606611            dev->cur_cylinder, dev->cur_head, dev->cur_sector, dev->lba_address(), sector_count));
607612
608613         /* reset the buffer */
609         buffer_offset = 0;
614         dev->buffer_offset = 0;
610615         sectors_until_int = 1;
611616         dma_active = 0;
612617         verify_only = 0;
r23642r23643
621626            dev->cur_cylinder, dev->cur_head, dev->cur_sector, dev->lba_address(), sector_count));
622627
623628         /* reset the buffer */
624         buffer_offset = 0;
629         dev->buffer_offset = 0;
625630         sectors_until_int = 1;
626631         dma_active = 0;
627632         verify_only = 1;
r23642r23643
635640            dev->cur_cylinder, dev->cur_head, dev->cur_sector, dev->lba_address(), sector_count));
636641
637642         /* reset the buffer */
638         buffer_offset = 0;
643         dev->buffer_offset = 0;
639644         sectors_until_int = sector_count;
640645         dma_active = 1;
641646         verify_only = 0;
r23642r23643
650655            dev->cur_cylinder, dev->cur_head, dev->cur_sector, dev->lba_address(), sector_count));
651656
652657         /* reset the buffer */
653         buffer_offset = 0;
658         dev->buffer_offset = 0;
654659         sectors_until_int = 1;
655660         dma_active = 0;
656661
r23642r23643
663668            dev->cur_cylinder, dev->cur_head, dev->cur_sector, dev->lba_address(), sector_count));
664669
665670         /* reset the buffer */
666         buffer_offset = 0;
671         dev->buffer_offset = 0;
667672         sectors_until_int = 1;
668673         dma_active = 0;
669674
r23642r23643
676681            dev->cur_cylinder, dev->cur_head, dev->cur_sector, dev->lba_address(), sector_count));
677682
678683         /* reset the buffer */
679         buffer_offset = 0;
684         dev->buffer_offset = 0;
680685         sectors_until_int = sector_count;
681686         dma_active = 1;
682687
r23642r23643
688693         LOGPRINT(("IDE Security Unlock\n"));
689694
690695         /* reset the buffer */
691         buffer_offset = 0;
696         dev->buffer_offset = 0;
692697         sectors_until_int = 0;
693698         dma_active = 0;
694699
r23642r23643
701706         LOGPRINT(("IDE Read features\n"));
702707
703708         /* reset the buffer */
704         buffer_offset = 0;
709         dev->buffer_offset = 0;
705710         sector_count = 1;
706711
707712         /* build the features page */
708         memcpy(buffer, slot[cur_drive]->dev()->get_features(), sizeof(buffer));
713         memcpy(dev->buffer, slot[cur_drive]->dev()->get_features(), sizeof(dev->buffer));
709714
710715         /* indicate everything is ready */
711716         status |= IDE_STATUS_BUFFER_READY;
r23642r23643
796801         LOGPRINT(("IDE GNET Unlock 2\n"));
797802
798803         /* reset the buffer */
799         buffer_offset = 0;
804         dev->buffer_offset = 0;
800805         sectors_until_int = 0;
801806         dma_active = 0;
802807
r23642r23643
909914   if (dev == NULL)
910915      return 0;
911916
912   UINT16 result = buffer[buffer_offset++];
913   result |= buffer[buffer_offset++] << 8;
917   UINT16 result = dev->buffer[dev->buffer_offset++];
918   result |= dev->buffer[dev->buffer_offset++] << 8;
914919
915   if (buffer_offset >= IDE_DISK_SECTOR_SIZE)
920   if (dev->buffer_offset >= IDE_DISK_SECTOR_SIZE)
916921   {
917922      LOG(("%s:IDE completed DMA read\n", machine().describe_context()));
918923      read_buffer_empty();
r23642r23643
950955         if (status & IDE_STATUS_BUFFER_READY)
951956         {
952957            /* fetch the correct amount of data */
953            result = buffer[buffer_offset++];
958            result = dev->buffer[dev->buffer_offset++];
954959            if (mem_mask == 0xffff)
955               result |= buffer[buffer_offset++] << 8;
960               result |= dev->buffer[dev->buffer_offset++] << 8;
956961
957962            /* if we're at the end of the buffer, handle it */
958            if (buffer_offset >= IDE_DISK_SECTOR_SIZE)
963            if (dev->buffer_offset >= IDE_DISK_SECTOR_SIZE)
959964            {
960965               LOG(("%s:IDE completed PIO read\n", machine().describe_context()));
961966               read_buffer_empty();
r23642r23643
11251130
11261131void ide_controller_device::write_dma( UINT16 data )
11271132{
1128   buffer[buffer_offset++] = data;
1129   buffer[buffer_offset++] = data >> 8;
1133   ide_device_interface *dev = slot[cur_drive]->dev();
11301134
1135   dev->buffer[dev->buffer_offset++] = data;
1136   dev->buffer[dev->buffer_offset++] = data >> 8;
1137
11311138   /* if we're at the end of the buffer, handle it */
1132   if (buffer_offset >= IDE_DISK_SECTOR_SIZE)
1139   if (dev->buffer_offset >= IDE_DISK_SECTOR_SIZE)
11331140   {
11341141      LOG(("%s:IDE completed DMA write\n", machine().describe_context()));
11351142      write_buffer_full();
r23642r23643
11621169         if (status & IDE_STATUS_BUFFER_READY)
11631170         {
11641171            /* store the correct amount of data */
1165            buffer[buffer_offset++] = data;
1172            dev->buffer[dev->buffer_offset++] = data;
11661173            if (mem_mask == 0xffff)
1167               buffer[buffer_offset++] = data >> 8;
1174               dev->buffer[dev->buffer_offset++] = data >> 8;
11681175
11691176            /* if we're at the end of the buffer, handle it */
1170            if (buffer_offset >= IDE_DISK_SECTOR_SIZE)
1177            if (dev->buffer_offset >= IDE_DISK_SECTOR_SIZE)
11711178            {
11721179               LOG(("%s:IDE completed PIO write\n", machine().describe_context()));
11731180               write_buffer_full();
r23642r23643
12641271   command(0),
12651272   interrupt_pending(0),
12661273   precomp_offset(0),
1267   buffer_offset(0),
12681274   sector_count(0),
12691275   block_count(0),
12701276   sectors_until_int(0),
r23642r23643
12911297   command(0),
12921298   interrupt_pending(0),
12931299   precomp_offset(0),
1294   buffer_offset(0),
12951300   sector_count(0),
12961301   block_count(0),
12971302   sectors_until_int(0),
r23642r23643
13321337   save_item(NAME(interrupt_pending));
13331338   save_item(NAME(precomp_offset));
13341339
1335   save_item(NAME(buffer));
1336   save_item(NAME(buffer_offset));
13371340   save_item(NAME(sector_count));
13381341
13391342   save_item(NAME(block_count));
r23642r23643
13571360
13581361void ide_controller_device::device_reset()
13591362{
1363   ide_device_interface *dev = slot[cur_drive]->dev();
1364
13601365   LOG(("IDE controller reset performed\n"));
13611366   /* reset the drive state */
13621367   cur_drive = 0;
13631368   status = IDE_STATUS_DRIVE_READY | IDE_STATUS_SEEK_COMPLETE;
13641369   error = IDE_ERROR_DEFAULT;
1365   buffer_offset = 0;
1370   dev->buffer_offset = 0;
13661371   gnetreadlock = 0;
13671372   master_password_enable = (master_password != NULL);
13681373   user_password_enable = (user_password != NULL);
trunk/src/emu/machine/idectrl.h
r23642r23643
134134   UINT8           interrupt_pending;
135135   UINT8           precomp_offset;
136136
137   UINT8           buffer[IDE_DISK_SECTOR_SIZE];
138   UINT16          buffer_offset;
139137   UINT16          sector_count;
140138
141139   UINT16          block_count;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team