Exemple #1
0
static
int pri_encode (pri_img_t **img, const char *type, const char *fname)
{
	psi_img_t *simg;
	pri_img_t *dimg;

	if ((simg = psi_load (fname, PSI_FORMAT_NONE)) == NULL) {
		return (1);
	}

	if (strcmp (type, "gcr") == 0) {
		dimg = pri_encode_gcr (simg);
	}
	else if (strcmp (type, "mfm") == 0) {
		dimg = pri_encode_mfm (simg, &par_mfm);
	}
	else if (strcmp (type, "mfm-dd-300") == 0) {
		par_mfm.clock = 500000;
		par_mfm.track_size = 500000 / 5;
		dimg = pri_encode_mfm (simg, &par_mfm);
	}
	else if (strcmp (type, "mfm-hd-300") == 0) {
		par_mfm.clock = 1000000;
		par_mfm.track_size = 1000000 / 5;
		dimg = pri_encode_mfm (simg, &par_mfm);
	}
	else if (strcmp (type, "mfm-hd-360") == 0) {
		par_mfm.clock = 1000000;
		par_mfm.track_size = 1000000 / 6;
		dimg = pri_encode_mfm (simg, &par_mfm);
	}
	else {
		dimg = NULL;
	}

	if ((dimg != NULL) && (simg->comment_size > 0)) {
		pri_img_set_comment (dimg, simg->comment, simg->comment_size);
	}

	psi_img_del (simg);

	if (dimg == NULL) {
		return (1);
	}

	pri_img_del (*img);

	*img = dimg;

	return (0);
}
Exemple #2
0
static
pri_img_t *st_fdc_load_disk (st_fdc_t *fdc, unsigned drive)
{
	disk_t        *dsk;
	disk_psi_t    *dskpsi;
	psi_img_t     *img, *del;
	pri_img_t     *ret;
	pri_enc_mfm_t par;

	dsk = dsks_get_disk (fdc->dsks, fdc->diskid[drive]);

	if (dsk == NULL) {
		return (NULL);
	}

	if (dsk_get_type (dsk) == PCE_DISK_PSI) {
		dskpsi = dsk->ext;
		img = dskpsi->img;
		del = NULL;
	}
	else {
		img = st_fdc_load_block (fdc, drive, dsk);
		del = img;
	}

	if (img == NULL) {
		return (NULL);
	}

	pri_encode_mfm_init (&par, 500000, 300);

	par.enable_iam = 0;
	par.auto_gap3 = 1;
	par.gap4a = 96;
	par.gap1 = 0;
	par.gap3 = 80;

	ret = pri_encode_mfm (img, &par);

	psi_img_del (del);

	return (ret);
}