Previous 199869 Revisions Next

r23739 Sunday 16th June, 2013 at 22:45:51 UTC by smf
Fixed head incrementing when using CHS with 16 heads (nw)
[src/emu/machine]idehd.c

trunk/src/emu/machine/idehd.c
r23738r23739
160160
161161   /* standard CHS */
162162   else
163      return (((((m_cylinder_high << 8 ) | m_cylinder_low) * m_num_heads) + (m_device_head & IDE_DEVICE_HEAD_HS)) * m_num_sectors) + m_sector_number - 1;
163      return (((((m_cylinder_high << 8) | m_cylinder_low) * m_num_heads) + (m_device_head & IDE_DEVICE_HEAD_HS)) * m_num_sectors) + m_sector_number - 1;
164164}
165165
166166
r23738r23739
457457
458458void ide_mass_storage_device::next_sector()
459459{
460   UINT8 cur_head = m_device_head & IDE_DEVICE_HEAD_HS;
461
460462   /* LBA direct? */
461463   if (m_device_head & IDE_DEVICE_HEAD_L)
462464   {
r23738r23739
467469         if (m_cylinder_low == 0)
468470         {
469471            m_cylinder_high++;
470            if( m_cylinder_high == 0)
471               m_device_head = (m_device_head & ~IDE_DEVICE_HEAD_HS) | ((m_device_head + 1) & IDE_DEVICE_HEAD_HS);
472            if (m_cylinder_high == 0)
473               cur_head++;
472474         }
473475      }
474476   }
r23738r23739
482484      {
483485         /* heads are 0 based */
484486         m_sector_number = 1;
485         m_device_head = (m_device_head & ~IDE_DEVICE_HEAD_HS) | ((m_device_head + 1) & IDE_DEVICE_HEAD_HS);
486         if ((m_device_head & IDE_DEVICE_HEAD_HS) >= m_num_heads)
487         cur_head++;
488         if (cur_head >= m_num_heads)
487489         {
488            m_device_head &= ~IDE_DEVICE_HEAD_HS;
490            cur_head = 0;
489491            m_cylinder_low++;
490492            if (m_cylinder_low == 0)
491493               m_cylinder_high++;
r23738r23739
493495      }
494496   }
495497
498   m_device_head = (m_device_head & ~IDE_DEVICE_HEAD_HS) | cur_head;
499
496500   m_cur_lba = lba_address();
497501}
498502

Previous 199869 Revisions Next


© 1997-2024 The MAME Team