summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/c4040_dsk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/c4040_dsk.cpp')
0 files changed, 0 insertions, 0 deletions
ef='#n50'>50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert

// Creation of unformatted floppy images

#include "fs_unformatted.h"

namespace fs {

const unformatted_image UNFORMATTED;

const char *unformatted_image::name() const
{
	return "unformatted";
}

const char *unformatted_image::description() const
{
	return "Unformatted floppy image";
}

void unformatted_image::enumerate_f(floppy_enumerator &fe) const
{
	u32 form_factor = fe.form_factor();
	const std::vector<u32> &variants = fe.variants();

	bool all = form_factor == floppy_image::FF_UNKNOWN;
	u32 best_8 =
		form_factor == floppy_image::FF_8 ?
		has_variant(variants, floppy_image::DSDD) ? FSI_8_DSDD :
		has_variant(variants, floppy_image::DSSD) ? FSI_8_DSSD : FSI_8_SSSD
		: FSI_NONE;

	u32 best_525 =
		form_factor == floppy_image::FF_525 ?
		has_variant(variants, floppy_image::DSHD) ? FSI_525_DSHD :
		has_variant(variants, floppy_image::DSQD) ? FSI_525_DSQD :
		has_variant(variants, floppy_image::DSDD) ? FSI_525_DSDD :
		has_variant(variants, floppy_image::SSQD) ? FSI_525_SSQD :
		has_variant(variants, floppy_image::SSDD) ? FSI_525_SSDD : FSI_525_SSSD
		: FSI_NONE;

	u32 best_35 =
		form_factor == floppy_image::FF_35 ?
		has_variant(variants, floppy_image::DSDD) ? FSI_35_DSDD : FSI_35_SSDD
		: FSI_NONE;

	u32 best_3 =
		form_factor == floppy_image::FF_3 ?
		has_variant(variants, floppy_image::DSDD) ? FSI_3_DSDD : FSI_3_SSDD
		: FSI_NONE;

	if(all || best_8 == FSI_8_DSDD)
		fe.add_raw("u8dsdd", FSI_8_DSDD, "Unformatted 8\" double-sided double-density");
	if(all || best_8 == FSI_8_DSSD)
		fe.add_raw("u8dssd", FSI_8_DSSD, "Unformatted 8\" double-sided single-density");
	if(all || best_8 == FSI_8_SSSD)
		fe.add_raw("u8sssd", FSI_8_SSSD, "Unformatted 8\" single-sided single-density");

	if(all || best_525 == FSI_525_DSHD)
		fe.add_raw("u525dshd", FSI_525_DSHD, "Unformatted 5\"25 double-sided high-density");
	if(all || best_525 == FSI_525_DSQD)
		fe.add_raw("u525dsqd", FSI_525_DSQD, "Unformatted 5\"25 double-sided quad-density");
	if(all || best_525 == FSI_525_DSDD)
		fe.add_raw("u525dsdd", FSI_525_DSDD, "Unformatted 5\"25 double-sided double-density");
	if(all)
		fe.add_raw("u525dssd", FSI_525_DSSD, "Unformatted 5\"25 double-sided single-density");
	if(all || best_525 == FSI_525_SSQD)
		fe.add_raw("u525ssqd", FSI_525_SSQD, "Unformatted 5\"25 single-sided quad-density");
	if(all || best_525 == FSI_525_SSDD)
		fe.add_raw("u525ssdd", FSI_525_SSDD, "Unformatted 5\"25 single-sided double-density");
	if(all || best_525 == FSI_525_SSSD)
		fe.add_raw("u525sssd", FSI_525_SSSD, "Unformatted 5\"25 single-sided single-density");

	if(all || has_variant(variants, floppy_image::DSED))
		fe.add_raw("u35dsed", FSI_35_DSED, "Unformatted 3\"5 double-sided extra-density");
	if(all || has_variant(variants, floppy_image::DSHD))
		fe.add_raw("u35dshd", FSI_35_DSHD, "Unformatted 3\"5 double-sided high-density");
	if(all || best_35 == FSI_35_DSDD)
		fe.add_raw("u35dsdd", FSI_35_DSDD, "Unformatted 3\"5 double-sided double-density");
	if(all || best_35 == FSI_35_SSDD)
		fe.add_raw("u35ssdd", FSI_35_SSDD, "Unformatted 3\"5 single-sided double-density");

	if(all || best_3 == FSI_3_DSDD)
		fe.add_raw("u3dsdd", FSI_35_DSDD, "Unformatted 3\" double-sided double-density");
	if(all || best_3 == FSI_3_SSDD)
		fe.add_raw("u3ssdd", FSI_35_SSDD, "Unformatted 3\" single-sided double-density");
}

void unformatted_image::format(u32 key, floppy_image *image)
{
	switch(key) {
	case FSI_8_DSDD: image->set_form_variant(floppy_image::FF_8, floppy_image::DSDD); break;
	case FSI_8_DSSD: image->set_form_variant(floppy_image::FF_8, floppy_image::DSSD); break;
	case FSI_8_SSSD: image->set_form_variant(floppy_image::FF_8, floppy_image::SSSD); break;

	case FSI_525_DSHD: image->set_form_variant(floppy_image::FF_525, floppy_image::DSHD); break;
	case FSI_525_DSQD: image->set_form_variant(floppy_image::FF_525, floppy_image::DSQD); break;
	case FSI_525_DSDD: image->set_form_variant(floppy_image::FF_525, floppy_image::DSDD); break;
	case FSI_525_DSSD: image->set_form_variant(floppy_image::FF_525, floppy_image::DSSD); break;
	case FSI_525_SSQD: image->set_form_variant(floppy_image::FF_525, floppy_image::SSQD); break;
	case FSI_525_SSDD: image->set_form_variant(floppy_image::FF_525, floppy_image::SSDD); break;
	case FSI_525_SSSD: image->set_form_variant(floppy_image::FF_525, floppy_image::SSSD); break;

	case FSI_35_DSED: image->set_form_variant(floppy_image::FF_35, floppy_image::DSED); break;
	case FSI_35_DSHD: image->set_form_variant(floppy_image::FF_35, floppy_image::DSHD); break;
	case FSI_35_DSDD: image->set_form_variant(floppy_image::FF_35, floppy_image::DSDD); break;
	case FSI_35_SSDD: image->set_form_variant(floppy_image::FF_35, floppy_image::SSDD); break;

	case FSI_3_DSDD: image->set_form_variant(floppy_image::FF_3, floppy_image::DSDD); break;
	case FSI_3_SSDD: image->set_form_variant(floppy_image::FF_3, floppy_image::SSDD); break;
	}
}

std::unique_ptr<filesystem_t> unformatted_image::mount(fsblk_t &blockdev) const
{
	return nullptr;
}

bool unformatted_image::can_format() const
{
	return false;
}

bool unformatted_image::can_read() const
{
	return false;
}

bool unformatted_image::can_write() const
{
	return false;
}

bool unformatted_image::has_rsrc() const
{
	return false;
}

} // namespace fs