Skip to content

Latest commit

 

History

History
64 lines (49 loc) · 2.7 KB

disk-macintosh.md

File metadata and controls

64 lines (49 loc) · 2.7 KB

Disk: Macintosh

Macintosh disks come in two varieties: the newer 1440kB ones, which are perfectly ordinary PC disks you should use fe-readibm to read, and the older 800kB disks (and 400kB for the single sides ones). They have 80 tracks and up to 12 sectors per track.

They are also completely insane.

It's not just the weird, custom GCR encoding. It's not just the utterly bizarre additional encoding/checksum built on top of that where every byte is mutated according to the previous bytes in the sector. It's not just the odd way in which disks think they have four sides, two on one side and two on the other, so that the track byte stores only the bottom 6 bits of the track number. It's not just the way that Macintosh sectors are 524 bytes long. No, it's the way the Macintosh drive changes speed depending on which track it's looking at, so that each track contains a different amount of data.

The reason for this is actually quite sensible: the tracks towards the centre of the disk are obviously moving more slowly, so you can't pack the bits in quite as closely (due to limitations in the magnetic media). You can use a higher bitrate at the edge of the disk than in the middle. Many platforms, for example the Commodore 64 1541 drive, changed bitrate this way.

But Macintosh disks used a constant bitrate and changed the speed that the disk spun instead to achieve the same effect...

Anyway: FluxEngine will read them fine on a conventional drive. Because it's clever.

Reading discs

Just do:

.obj/fe-readmac

You should end up with an mac.img which is 1001888 bytes long (for a normal DD disk). If you want the single-sided variety, use -s :s=0.

Big warning! The image may not work in an emulator. Mac disk images are complicated due to the way the tracks are different sizes and the odd sector size. FluxEngine chooses to store them in a simple 524 x 12 x 2 x 80 layout, with holes where missing sectors should be. This was easiest. If anyone can suggest a better way, please get in touch.

Useful references