Previous 15994 Revisions Next

r12924 Friday 23rd September, 2011 at 09:57:51 UTC by Miodrag Milanović
Added interleave and skew as parameters and did calculation (no whatsnew)
[src/lib/formats]flopimg.c flopimg.h

src/lib/formats/flopimg.c
r12923r12924
11611161      }
11621162}
11631163
1164int floppy_image_format_t::calc_sector_index(int num, int interleave, int skew, int total_sectors, int track_head)
1165{
1166   int i = 0;
1167   int sec = 0;
1168   // use interleave
1169   while (i != num)
1170   {
1171      i++;
1172      i += interleave;
1173      i %= total_sectors;
1174      sec++;
1175   }
1176   // use skew param
1177   sec -= track_head * skew;
1178   sec %= total_sectors;   
1179   if (sec < 0) sec += total_sectors;
1180   return sec;
1181}
1182
11641183void floppy_image_format_t::generate_track(const desc_e *desc, UINT8 track, UINT8 head, const desc_s *sect, int sect_count, int track_size, floppy_image *image)
11651184{
11661185   UINT8 *buffer = global_alloc_array_clear(UINT8, (track_size+7)/8);
r12923r12924
11721191   int index = 0;
11731192   int sector_loop_start = 0;
11741193   int sector_idx = 0;
1194   int sector_cnt = 0;
11751195   int sector_limit = 0;
1176
1196   int sector_interleave = 0;
1197   int sector_skew = 0;
1198   
11771199   while(desc[index].type != END) {
11781200      //      printf("%d.%d.%d (%d) - %d %d\n", desc[index].type, desc[index].p1, desc[index].p2, index, offset, offset/8);
11791201      switch(desc[index].type) {
r12923r12924
12431265         fixup_crcs(buffer, crcs);
12441266         sector_loop_start = index;
12451267         sector_idx = desc[index].p1;
1268         sector_cnt = sector_idx;
12461269         sector_limit = desc[index].p2;
1270         sector_idx = calc_sector_index(sector_cnt,sector_interleave,sector_skew,sector_limit+1,track*2 + head);
12471271         break;
12481272
12491273      case SECTOR_LOOP_END:
12501274         fixup_crcs(buffer, crcs);
1251         if(sector_idx < sector_limit) {
1252            sector_idx++;
1275         if(sector_cnt < sector_limit) {
1276            sector_cnt++;
1277            sector_idx = calc_sector_index(sector_cnt,sector_interleave,sector_skew,sector_limit+1,track*2 + head);
12531278            index = sector_loop_start;
12541279         }
12551280         break;
12561281
1282      case SECTOR_INTERLEAVE_SKEW:
1283         sector_interleave = desc[index].p1;
1284         sector_skew = desc[index].p2;
1285         break;
1286         
12571287      case CRC_AMIGA_START:
12581288      case CRC_CCITT_START:
12591289         crcs[desc[index].p1].start = offset;
r12923r12924
16221652};
16231653
16241654
1625const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_0[] = {
1626   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1627   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1628   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1629   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1630   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1631   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1632   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1633   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1634   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1635   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1636   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1637   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1638   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1639   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1640   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1641   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1642   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1643   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1644   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1645   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1646   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1647   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1655const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11[] = {
1656   { MFM, 0x4e, 1 },
1657   { SECTOR_INTERLEAVE_SKEW, 1, 1},
1658   { SECTOR_LOOP_START,  0,  10 }, { MFM, 0x4e, 2 }, { MFM, 0x00, 2 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
16481659   { MFM, 0x4e, 23 },
16491660   { END },
16501661};
16511662
1652const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_1[] = {
1653   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1654   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1655   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1656   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1657   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1658   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1659   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1660   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1661   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1662   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1663   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1664   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1665   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1666   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1667   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1668   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1669   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1670   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1671   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1672   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1673   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1674   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1675   { MFM, 0x4e, 23 },
1676   { END },
1677};
1678
1679const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_2[] = {
1680   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1681   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1682   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1683   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1684   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1685   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1686   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1687   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1688   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1689   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1690   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1691   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1692   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1693   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1694   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1695   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1696   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1697   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1698   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1699   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1700   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1701   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1702   { MFM, 0x4e, 23 },
1703   { END },
1704};
1705
1706const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_3[] = {
1707   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1708   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1709   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1710   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1711   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1712   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1713   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1714   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1715   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1716   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1717   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1718   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1719   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1720   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1721   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1722   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1723   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1724   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1725   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1726   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1727   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1728   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1729   { MFM, 0x4e, 23 },
1730   { END },
1731};
1732
1733const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_4[] = {
1734   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1735   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1736   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1737   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1738   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1739   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1740   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1741   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1742   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1743   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1744   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1745   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1746   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1747   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1748   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1749   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1750   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1751   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1752   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1753   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1754   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1755   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1756   { MFM, 0x4e, 23 },
1757   { END },
1758};
1759
1760const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_5[] = {
1761   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1762   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1763   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1764   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1765   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1766   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1767   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1768   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1769   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1770   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1771   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1772   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1773   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1774   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1775   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1776   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1777   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1778   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1779   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1780   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1781   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1782   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1783   { MFM, 0x4e, 23 },
1784   { END },
1785};
1786
1787const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_6[] = {
1788   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1789   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1790   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1791   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1792   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1793   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1794   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1795   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1796   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1797   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1798   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1799   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1800   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1801   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1802   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1803   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1804   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1805   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1806   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1807   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1808   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1809   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1810   { MFM, 0x4e, 23 },
1811   { END },
1812};
1813
1814const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_7[] = {
1815   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1816   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1817   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1818   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1819   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1820   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1821   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1822   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1823   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1824   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1825   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1826   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1827   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1828   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1829   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1830   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1831   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1832   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1833   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1834   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1835   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1836   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1837   { MFM, 0x4e, 23 },
1838   { END },
1839};
1840
1841const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_8[] = {
1842   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1843   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1844   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1845   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1846   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1847   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1848   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1849   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1850   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1851   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1852   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1853   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1854   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1855   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1856   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1857   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1858   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1859   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1860   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1861   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1862   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1863   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1864   { MFM, 0x4e, 23 },
1865   { END },
1866};
1867
1868const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_9[] = {
1869   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1870   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1871   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1872   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1873   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1874   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1875   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1876   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1877   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1878   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1879   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1880   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1881   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1882   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1883   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1884   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1885   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1886   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1887   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1888   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1889   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1890   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1891   { MFM, 0x4e, 23 },
1892   { END },
1893};
1894
1895const floppy_image_format_t::desc_e floppy_image_format_t::atari_st_fcp_11_10[] = {
1896   { MFM, 0x4e, 3 }, { MFM, 0x00, 2 },
1897   { SECTOR_LOOP_START,  1,  1 }, NORMAL_SECTOR( 5), { SECTOR_LOOP_END },
1898   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1899   { SECTOR_LOOP_START,  7,  7 }, NORMAL_SECTOR( 7), { SECTOR_LOOP_END },
1900   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1901   { SECTOR_LOOP_START,  2,  2 }, NORMAL_SECTOR( 9), { SECTOR_LOOP_END },
1902   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1903   { SECTOR_LOOP_START,  8,  8 }, NORMAL_SECTOR(11), { SECTOR_LOOP_END },
1904   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1905   { SECTOR_LOOP_START,  3,  3 }, NORMAL_SECTOR(13), { SECTOR_LOOP_END },
1906   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1907   { SECTOR_LOOP_START,  9,  9 }, NORMAL_SECTOR(15), { SECTOR_LOOP_END },
1908   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1909   { SECTOR_LOOP_START,  4,  4 }, NORMAL_SECTOR(17), { SECTOR_LOOP_END },
1910   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1911   { SECTOR_LOOP_START, 10, 10 }, NORMAL_SECTOR(19), { SECTOR_LOOP_END },
1912   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1913   { SECTOR_LOOP_START,  5,  5 }, NORMAL_SECTOR(21), { SECTOR_LOOP_END },
1914   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1915   { SECTOR_LOOP_START,  0,  0 }, NORMAL_SECTOR( 1), { SECTOR_LOOP_END },
1916   { MFM, 0x4e, 2 }, { MFM, 0x00, 2 },
1917   { SECTOR_LOOP_START,  6,  6 }, NORMAL_SECTOR( 3), { SECTOR_LOOP_END },
1918   { MFM, 0x4e, 23 },
1919   { END },
1920};
1921
1922
1923const floppy_image_format_t::desc_e *const floppy_image_format_t::atari_st_fcp_11[11] = {
1924   atari_st_fcp_11_0,
1925   atari_st_fcp_11_1,
1926   atari_st_fcp_11_2,
1927   atari_st_fcp_11_3,
1928   atari_st_fcp_11_4,
1929   atari_st_fcp_11_5,
1930   atari_st_fcp_11_6,
1931   atari_st_fcp_11_7,
1932   atari_st_fcp_11_8,
1933   atari_st_fcp_11_9,
1934   atari_st_fcp_11_10,
1935};
1936
19371663#undef SECTOR_42_HEADER
19381664#undef NORMAL_SECTOR
19391665
r12923r12924
19451671   case 10:
19461672      return atari_st_fcp_10[(track*head_count + head) % 10];
19471673   case 11:
1948      return atari_st_fcp_11[(track*head_count + head) % 11];
1674      return atari_st_fcp_11;
19491675   }
19501676   return 0;
19511677}
src/lib/formats/flopimg.h
r12923r12924
276276
277277      SECTOR_LOOP_START, // Start of the per-sector loop, sector number goes from p1 to p2 inclusive
278278      SECTOR_LOOP_END,   // End of the per-sector loop
279      SECTOR_INTERLEAVE_SKEW, // Defines interleave and skew for sector counting
279280   };
280281
281282   // Sector data description
r12923r12924
313314   //   faster verify and skew/interleave where appropriate
314315   static const desc_e atari_st_fcp_9[];
315316   static const desc_e *const atari_st_fcp_10[10];
316   static const desc_e *const atari_st_fcp_11[11];
317   static const desc_e atari_st_fcp_11[];
317318
318319   static const desc_e atari_st_fcp_10_0[], atari_st_fcp_10_1[], atari_st_fcp_10_2[], atari_st_fcp_10_3[];
319320   static const desc_e atari_st_fcp_10_4[], atari_st_fcp_10_5[], atari_st_fcp_10_6[], atari_st_fcp_10_7[];
320321   static const desc_e atari_st_fcp_10_8[], atari_st_fcp_10_9[];
321322
322   static const desc_e atari_st_fcp_11_0[], atari_st_fcp_11_1[], atari_st_fcp_11_2[], atari_st_fcp_11_3[];
323   static const desc_e atari_st_fcp_11_4[], atari_st_fcp_11_5[], atari_st_fcp_11_6[], atari_st_fcp_11_7[];
324   static const desc_e atari_st_fcp_11_8[], atari_st_fcp_11_9[], atari_st_fcp_11_10[];
325
326323   static const desc_e *atari_st_fcp_get_desc(UINT8 track, UINT8 head, UINT8 head_count, UINT8 sect_count);
327324
328325   // Amiga formats (100K cells)
r12923r12924
420417   int sbit_r(const UINT8 *bitstream, int pos);
421418   int sbit_rp(const UINT8 *bitstream, int &pos, int track_size);
422419   UINT8 sbyte_mfm_r(const UINT8 *bitstream, int &pos, int track_size);
420   
421   int calc_sector_index(int num, int interleave, int skew, int total_sectors, int track_head);   
423422};
424423
425424// a device_type is simply a pointer to its alloc function

Previous 15994 Revisions Next


© 1998-2018 The MESS Team