Esempio n. 1
0
floperr_t basicdsk_construct(floppy_image *floppy, const struct basicdsk_geometry *geometry)
{
	struct basicdsk_tag *tag;
	struct FloppyCallbacks *format;

	assert(geometry->heads);
	assert(geometry->tracks);
	assert(geometry->sectors);

	tag = (struct basicdsk_tag *) floppy_create_tag(floppy, BASICDSK_TAG, sizeof(struct basicdsk_tag));
	if (!tag)
		return FLOPPY_ERROR_OUTOFMEMORY;
	tag->geometry = *geometry;

	/* set up format callbacks */
	format = floppy_callbacks(floppy);
	format->read_sector = basicdsk_read_sector;
	format->write_sector = basicdsk_write_sector;
	format->read_indexed_sector = basicdsk_read_indexed_sector;
	format->write_indexed_sector = basicdsk_write_indexed_sector;
	format->get_sector_length = basicdsk_get_sector_length;
	format->get_heads_per_disk = basicdsk_get_heads_per_disk;
	format->get_tracks_per_disk = basicdsk_get_tracks_per_disk;
	format->get_indexed_sector_info = basicdsk_get_indexed_sector_info;
	format->format_track = basicdsk_format_track;

	return FLOPPY_ERROR_SUCCESS;
}
Esempio n. 2
0
static FLOPPY_CONSTRUCT(oric_dsk_construct)
{
	struct FloppyCallbacks *callbacks;
	struct oricdsk_tag *tag;
	UINT8 header[mfm_disk_header_size];

	floppy_image_read(floppy, header, 0, mfm_disk_header_size);

	tag = (struct oricdsk_tag *) floppy_create_tag(floppy, sizeof(struct oricdsk_tag));
	if (!tag)
		return FLOPPY_ERROR_OUTOFMEMORY;

	tag->heads   = pick_integer_le(header, 8, 4);
	tag->tracks  = pick_integer_le(header, 12, 4);
	tag->geometry = pick_integer_le(header, 16, 4);
	tag->tracksize = TRACK_SIZE_MFM;
	memset(tag->sector_data,0,sizeof(tag->sector_data));

	callbacks = floppy_callbacks(floppy);
	callbacks->read_sector = oric_read_sector;
	callbacks->write_sector = oric_write_sector;
	callbacks->read_indexed_sector = oric_read_indexed_sector;
	callbacks->write_indexed_sector = oric_write_indexed_sector;
	callbacks->get_sector_length = oric_get_sector_length;
	callbacks->get_heads_per_disk = oric_get_heads_per_disk;
	callbacks->get_tracks_per_disk = oric_get_tracks_per_disk;
	callbacks->get_indexed_sector_info = oric_get_indexed_sector_info;
	return FLOPPY_ERROR_SUCCESS;
}