Amiga Floppy Drive Research – Part 4

Well not a whole heap done today as we had a rare glimpse of the sun.  The checksum checking is done & I’ve created a C# struct that represents all the non-Sync parts of a sector:

[StructLayout(LayoutKind.Sequential, Size = 540, Pack = 1)]
private struct AmigaSector
{
	public byte DiskFormat, TrackNumber, SectorNumber, SectorsToWrite;

	[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
	public byte[] SectorLabel;

	public uint HeaderChecksum
	{
		get
		{
			return (uint)(HeaderChecksum4 << 24 | HeaderChecksum3 << 16 | HeaderChecksum2 << 8 | HeaderChecksum1);
		}
	}

	public byte HeaderChecksum4;
	public byte HeaderChecksum3;
	public byte HeaderChecksum2;
	public byte HeaderChecksum1;


	public uint DataChecksum
	{
		get
		{
			return (uint)(DataChecksum4 << 24 | DataChecksum3 << 16 | DataChecksum2 << 8 | DataChecksum1);
		}
	}

	public byte DataChecksum4;
	public byte DataChecksum3;
	public byte DataChecksum2;
	public byte DataChecksum1;

	[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
	public byte[] SectorData;
}

The properties were needed because Amiga longs are stored as Big Endian and they do the conversion for me.

I still need to tidy the code a little but I’ve run the checksum check over the first 14 sectors I am sniffing.  The results look perfect so far:

Sync Marker found
FMT: 255  TRK: 0  SEC: 3  REM: 8
Stored header csum: 0x00000004
Calculated header csum: 0x00000004
Stored data csum: 0x15441114
Calculated data csum: 0x15441114

Sync Marker found
FMT: 255  TRK: 0  SEC: 4  REM: 7
Stored header csum: 0x00000404
Calculated header csum: 0x00000404
Stored data csum: 0x04051114
Calculated data csum: 0x04051114

Sync Marker found
FMT: 255  TRK: 0  SEC: 5  REM: 6
Stored header csum: 0x00000505
Calculated header csum: 0x00000505
Stored data csum: 0x11001410
Calculated data csum: 0x11001410

Sync Marker found
FMT: 255  TRK: 0  SEC: 6  REM: 5
Stored header csum: 0x00000505
Calculated header csum: 0x00000505
Stored data csum: 0x51514551
Calculated data csum: 0x51514551

Sync Marker found
FMT: 255  TRK: 0  SEC: 7  REM: 4
Stored header csum: 0x00000404
Calculated header csum: 0x00000404
Stored data csum: 0x05045155
Calculated data csum: 0x05045155

Sync Marker found
FMT: 255  TRK: 0  SEC: 8  REM: 3
Stored header csum: 0x00000400
Calculated header csum: 0x00000400
Stored data csum: 0x51444054
Calculated data csum: 0x51444054

Sync Marker found
FMT: 255  TRK: 0  SEC: 9  REM: 2
Stored header csum: 0x00000501
Calculated header csum: 0x00000501
Stored data csum: 0x44555051
Calculated data csum: 0x44555051

Sync Marker found
FMT: 255  TRK: 0  SEC: 10  REM: 1
Stored header csum: 0x00000501
Calculated header csum: 0x00000501
Stored data csum: 0x10504040
Calculated data csum: 0x10504040

Sync Marker found
FMT: 255  TRK: 0  SEC: 0  REM: 11
Stored header csum: 0x00000004
Calculated header csum: 0x00000004
Stored data csum: 0x54151100
Calculated data csum: 0x54151100

Sync Marker found
FMT: 255  TRK: 0  SEC: 1  REM: 10
Stored header csum: 0x00000105
Calculated header csum: 0x00000105
Stored data csum: 0x00000000
Calculated data csum: 0x00000000

Sync Marker found
FMT: 255  TRK: 0  SEC: 2  REM: 9
Stored header csum: 0x00000105
Calculated header csum: 0x00000105
Stored data csum: 0x15410001
Calculated data csum: 0x15410001

Sync Marker found
FMT: 255  TRK: 0  SEC: 3  REM: 8
Stored header csum: 0x00000004
Calculated header csum: 0x00000004
Stored data csum: 0x15441114
Calculated data csum: 0x15441114

Sync Marker found
FMT: 255  TRK: 0  SEC: 4  REM: 7
Stored header csum: 0x00000404
Calculated header csum: 0x00000404
Stored data csum: 0x04051114
Calculated data csum: 0x04051114

Sync Marker found
FMT: 255  TRK: 0  SEC: 5  REM: 6
Stored header csum: 0x00000505
Calculated header csum: 0x00000505
Stored data csum: 0x11001410
Calculated data csum: 0x11001410

Leave a Reply

Your email address will not be published. Required fields are marked *