private int sectorsPerCluster16() throws IOException {
        if (this.reservedSectors != 1) throw new IllegalStateException(
                "number of reserved sectors must be 1");

        if (this.fatCount != 2) throw new IllegalStateException(
                "number of FATs must be 2");

        final long sectors = device.getSize() / device.getSectorSize();
        
        if (sectors <= 8400) throw new IllegalArgumentException(
                "disk too small for FAT16 (" + sectors + ")");

        if (sectors > 4194304) throw new IllegalArgumentException(
                "disk too large for FAT16");

        return
                sectors > 2097152 ? 64 :
                sectors > 1048576 ? 32 :
                sectors >  524288 ? 16 :
                sectors >  262144 ?  8 :
                sectors >   32680 ?  4 : 2;
    }