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); }
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); }