diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/formats/all.cpp | 1351 | ||||
-rw-r--r-- | src/lib/formats/all.h | 25 | ||||
-rw-r--r-- | src/lib/formats/concept_dsk.cpp | 2 | ||||
-rw-r--r-- | src/lib/formats/ibmxdf_dsk.cpp | 2 | ||||
-rw-r--r-- | src/lib/formats/img_dsk.cpp | 2 | ||||
-rw-r--r-- | src/lib/formats/kaypro_dsk.cpp | 4 | ||||
-rw-r--r-- | src/lib/formats/rx50_dsk.cpp | 2 | ||||
-rw-r--r-- | src/lib/formats/ti99_dsk.cpp | 2 | ||||
-rw-r--r-- | src/tools/floptool.cpp | 164 |
9 files changed, 1434 insertions, 120 deletions
diff --git a/src/lib/formats/all.cpp b/src/lib/formats/all.cpp new file mode 100644 index 00000000000..247abd18e50 --- /dev/null +++ b/src/lib/formats/all.cpp @@ -0,0 +1,1351 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert + +// Enumerate all the compiled-in formats + +#include "emu.h" +#include "all.h" + +#include "has_formats.h" // Generated by genie + +#include "cqm_dsk.h" +#include "dsk_dsk.h" +#include "td0_dsk.h" +#include "hxchfe_dsk.h" +#include "hxcmfm_dsk.h" +#include "mfi_dsk.h" +#include "imd_dsk.h" +#include "upd765_dsk.h" +#include "pc_dsk.h" +#include "d88_dsk.h" +#include "dfi_dsk.h" + +#ifdef HAS_FORMATS_2D_DSK +#include "2d_dsk.h" +#endif + +#ifdef HAS_FORMATS_A26_CAS +#include "a26_cas.h" +#endif + +#ifdef HAS_FORMATS_A5105_DSK +#include "a5105_dsk.h" +#endif + +#ifdef HAS_FORMATS_ABC800_DSK +#include "abc800_dsk.h" +#endif + +#ifdef HAS_FORMATS_ABCFD2_DSK +#include "abcfd2_dsk.h" +#endif + +#ifdef HAS_FORMATS_ACE_TAP +#include "ace_tap.h" +#endif + +#ifdef HAS_FORMATS_ACORN_DSK +#include "acorn_dsk.h" +#endif + +#ifdef HAS_FORMATS_ADAM_CAS +#include "adam_cas.h" +#endif + +#ifdef HAS_FORMATS_ADAM_DSK +#include "adam_dsk.h" +#endif + +#ifdef HAS_FORMATS_AFS_DSK +#include "afs_dsk.h" +#endif + +#ifdef HAS_FORMATS_AIM_DSK +#include "aim_dsk.h" +#endif + +#ifdef HAS_FORMATS_AMI_DSK +#include "ami_dsk.h" +#endif + +#ifdef HAS_FORMATS_AP2_DSK +#include "ap2_dsk.h" +#endif + +#ifdef HAS_FORMATS_APD_DSK +#include "apd_dsk.h" +#endif + +#ifdef HAS_FORMATS_APF_APT +#include "apf_apt.h" +#endif + +#ifdef HAS_FORMATS_APOLLO_DSK +#include "apollo_dsk.h" +#endif + +#ifdef HAS_FORMATS_APPLIX_DSK +#include "applix_dsk.h" +#endif + +#ifdef HAS_FORMATS_APRIDISK +#include "apridisk.h" +#endif + +#ifdef HAS_FORMATS_AP_DSK35 +#include "ap_dsk35.h" +#endif + +#ifdef HAS_FORMATS_AQUARIUS_CAQ +#include "aquarius_caq.h" +#endif + +#ifdef HAS_FORMATS_ASST128_DSK +#include "asst128_dsk.h" +#endif + +#ifdef HAS_FORMATS_ATARI_DSK +#include "atari_dsk.h" +#endif + +#ifdef HAS_FORMATS_ATOM_DSK +#include "atom_dsk.h" +#endif + +#ifdef HAS_FORMATS_ATOM_TAP +#include "atom_tap.h" +#endif + +#ifdef HAS_FORMATS_BW12_DSK +#include "bw12_dsk.h" +#endif + +#ifdef HAS_FORMATS_BW2_DSK +#include "bw2_dsk.h" +#endif + +#ifdef HAS_FORMATS_C3040_DSK +#include "c3040_dsk.h" +#endif + +#ifdef HAS_FORMATS_C4040_DSK +#include "c4040_dsk.h" +#endif + +#ifdef HAS_FORMATS_C8280_DSK +#include "c8280_dsk.h" +#endif + +#ifdef HAS_FORMATS_CAMPLYNX_CAS +#include "camplynx_cas.h" +#endif + +#ifdef HAS_FORMATS_CAMPLYNX_DSK +#include "camplynx_dsk.h" +#endif + +#ifdef HAS_FORMATS_CBM_CRT +#include "cbm_crt.h" +#endif + +#ifdef HAS_FORMATS_CBM_TAP +#include "cbm_tap.h" +#endif + +#ifdef HAS_FORMATS_CCVF_DSK +#include "ccvf_dsk.h" +#endif + +#ifdef HAS_FORMATS_CGENIE_DSK +#include "cgenie_dsk.h" +#endif + +#ifdef HAS_FORMATS_CGEN_CAS +#include "cgen_cas.h" +#endif + +#ifdef HAS_FORMATS_COCO_CAS +#include "coco_cas.h" +#endif + +#ifdef HAS_FORMATS_COMX35_DSK +#include "comx35_dsk.h" +#endif + +#ifdef HAS_FORMATS_CONCEPT_DSK +#include "concept_dsk.h" +#endif + +#ifdef HAS_FORMATS_COUPEDSK +#include "coupedsk.h" +#endif + +#ifdef HAS_FORMATS_CPIS_DSK +#include "cpis_dsk.h" +#endif + +#ifdef HAS_FORMATS_CSW_CAS +#include "csw_cas.h" +#endif + +#ifdef HAS_FORMATS_D64_DSK +#include "d64_dsk.h" +#endif + +#ifdef HAS_FORMATS_D71_DSK +#include "d71_dsk.h" +#endif + +#ifdef HAS_FORMATS_D80_DSK +#include "d80_dsk.h" +#endif + +#ifdef HAS_FORMATS_D81_DSK +#include "d81_dsk.h" +#endif + +#ifdef HAS_FORMATS_D82_DSK +#include "d82_dsk.h" +#endif + +#ifdef HAS_FORMATS_DCP_DSK +#include "dcp_dsk.h" +#endif + +#ifdef HAS_FORMATS_DIM_DSK +#include "dim_dsk.h" +#endif + +#ifdef HAS_FORMATS_DIP_DSK +#include "dip_dsk.h" +#endif + +#ifdef HAS_FORMATS_DMK_DSK +#include "dmk_dsk.h" +#endif + +#ifdef HAS_FORMATS_DS9_DSK +#include "ds9_dsk.h" +#endif + +#ifdef HAS_FORMATS_SDF_DSK +#include "sdf_dsk.h" +#endif + +#ifdef HAS_FORMATS_EP64_DSK +#include "ep64_dsk.h" +#endif + +#ifdef HAS_FORMATS_DMV_DSK +#include "dmv_dsk.h" +#endif + +#ifdef HAS_FORMATS_DVK_MX_DSK +#include "dvk_mx_dsk.h" +#endif + +#ifdef HAS_FORMATS_ESQ16_DSK +#include "esq16_dsk.h" +#endif + +#ifdef HAS_FORMATS_ESQ8_DSK +#include "esq8_dsk.h" +#endif + +#ifdef HAS_FORMATS_EXCALI64_DSK +#include "excali64_dsk.h" +#endif + +#ifdef HAS_FORMATS_FC100_CAS +#include "fc100_cas.h" +#endif + +#ifdef HAS_FORMATS_FDD_DSK +#include "fdd_dsk.h" +#endif + +#ifdef HAS_FORMATS_FL1_DSK +#include "fl1_dsk.h" +#endif + +#ifdef HAS_FORMATS_FLEX_DSK +#include "flex_dsk.h" +#endif + +#ifdef HAS_FORMATS_UNIFLEX_DSK +#include "uniflex_dsk.h" +#endif + +#ifdef HAS_FORMATS_FM7_CAS +#include "fm7_cas.h" +#endif + +#ifdef HAS_FORMATS_FMSX_CAS +#include "fmsx_cas.h" +#endif + +#ifdef HAS_FORMATS_FMTOWNS_DSK +#include "fmtowns_dsk.h" +#endif + +#ifdef HAS_FORMATS_FSD_DSK +#include "fsd_dsk.h" +#endif + +#ifdef HAS_FORMATS_G64_DSK +#include "g64_dsk.h" +#endif + +#ifdef HAS_FORMATS_GTP_CAS +#include "gtp_cas.h" +#endif + +#ifdef HAS_FORMATS_GUAB_DSK +#include "guab_dsk.h" +#endif + +#ifdef HAS_FORMATS_H8_CAS +#include "h8_cas.h" +#endif + +#ifdef HAS_FORMATS_HECTOR_MINIDISC +#include "hector_minidisc.h" +#endif + +#ifdef HAS_FORMATS_HECT_DSK +#include "hect_dsk.h" +#endif + +#ifdef HAS_FORMATS_HECT_TAP +#include "hect_tap.h" +#endif + +#ifdef HAS_FORMATS_HTI_TAP +#include "hti_tape.h" +#endif + +#ifdef HAS_FORMATS_HPI_DSK +#include "hpi_dsk.h" +#endif + +#ifdef HAS_FORMATS_HP_IPC_DSK +#include "hp_ipc_dsk.h" +#endif + +#ifdef HAS_FORMATS_IMG_DSK +#include "img_dsk.h" +#endif + +#ifdef HAS_FORMATS_IQ151_DSK +#include "iq151_dsk.h" +#endif + +#ifdef HAS_FORMATS_ITT3030_DSK +#include "itt3030_dsk.h" +#endif + +#ifdef HAS_FORMATS_JUKU_DSK +#include "juku_dsk.h" +#endif + +#ifdef HAS_FORMATS_JVC_DSK +#include "jvc_dsk.h" +#endif + +#ifdef HAS_FORMATS_OS9_DSK +#include "os9_dsk.h" +#endif + +#ifdef HAS_FORMATS_JFD_DSK +#include "jfd_dsk.h" +#endif + +#ifdef HAS_FORMATS_KAYPRO_DSK +#include "kaypro_dsk.h" +#endif + +#ifdef HAS_FORMATS_KC85_DSK +#include "kc85_dsk.h" +#endif + +#ifdef HAS_FORMATS_KC_CAS +#include "kc_cas.h" +#endif + +#ifdef HAS_FORMATS_KIM1_CAS +#include "kim1_cas.h" +#endif + +#ifdef HAS_FORMATS_LVIV_LVT +#include "lviv_lvt.h" +#endif + +#ifdef HAS_FORMATS_M20_DSK +#include "m20_dsk.h" +#endif + +#ifdef HAS_FORMATS_M5_DSK +#include "m5_dsk.h" +#endif + +#ifdef HAS_FORMATS_MBEE_CAS +#include "mbee_cas.h" +#endif + +#ifdef HAS_FORMATS_MDOS_DSK +#include "mdos_dsk.h" +#endif + +#ifdef HAS_FORMATS_MFM_HD +#include "mfm_hd.h" +#endif + +#ifdef HAS_FORMATS_MM_DSK +#include "mm_dsk.h" +#endif + +#ifdef HAS_FORMATS_MS0515_DSK +#include "ms0515_dsk.h" +#endif + +#ifdef HAS_FORMATS_MSX_DSK +#include "msx_dsk.h" +#endif + +#ifdef HAS_FORMATS_MTX_DSK +#include "mtx_dsk.h" +#endif + +#ifdef HAS_FORMATS_MZ_CAS +#include "mz_cas.h" +#endif + +#ifdef HAS_FORMATS_NANOS_DSK +#include "nanos_dsk.h" +#endif + +#ifdef HAS_FORMATS_NASCOM_DSK +#include "nascom_dsk.h" +#endif + +#ifdef HAS_FORMATS_NASLITE_DSK +#include "naslite_dsk.h" +#endif + +#ifdef HAS_FORMATS_NES_DSK +#include "nes_dsk.h" +#endif + +#ifdef HAS_FORMATS_NFD_DSK +#include "nfd_dsk.h" +#endif + +#ifdef HAS_FORMATS_OPD_DSK +#include "opd_dsk.h" +#endif + +#ifdef HAS_FORMATS_ORAO_CAS +#include "orao_cas.h" +#endif + +#ifdef HAS_FORMATS_ORIC_DSK +#include "oric_dsk.h" +#endif + +#ifdef HAS_FORMATS_ORIC_TAP +#include "oric_tap.h" +#endif + +#ifdef HAS_FORMATS_IBMXDF_DSK +#include "ibmxdf_dsk.h" +#endif + +#ifdef HAS_FORMATS_P2000T_CAS +#include "p2000t_cas.h" +#endif + +#ifdef HAS_FORMATS_P6001_CAS +#include "p6001_cas.h" +#endif + +#ifdef HAS_FORMATS_PASTI_DSK +#include "pasti_dsk.h" +#endif + +#ifdef HAS_FORMATS_PC98FDI_DSK +#include "pc98fdi_dsk.h" +#endif + +#ifdef HAS_FORMATS_PC98_DSK +#include "pc98_dsk.h" +#endif + +#ifdef HAS_FORMATS_IPF_DSK +#include "ipf_dsk.h" +#endif + +#ifdef HAS_FORMATS_PHC25_CAS +#include "phc25_cas.h" +#endif + +#ifdef HAS_FORMATS_PK8020_DSK +#include "pk8020_dsk.h" +#endif + +#ifdef HAS_FORMATS_PMD_CAS +#include "pmd_cas.h" +#endif + +#ifdef HAS_FORMATS_POLY_DSK +#include "poly_dsk.h" +#endif + +#ifdef HAS_FORMATS_PPG_DSK +#include "ppg_dsk.h" +#endif + +#ifdef HAS_FORMATS_PRIMOPTP +#include "primoptp.h" +#endif + +#ifdef HAS_FORMATS_PYLDIN_DSK +#include "pyldin_dsk.h" +#endif + +#ifdef HAS_FORMATS_QL_DSK +#include "ql_dsk.h" +#endif + +#ifdef HAS_FORMATS_RK_CAS +#include "rk_cas.h" +#endif + +#ifdef HAS_FORMATS_RX50_DSK +#include "rx50_dsk.h" +#endif + +#ifdef HAS_FORMATS_SC3000_BIT +#include "sc3000_bit.h" +#endif + +#ifdef HAS_FORMATS_SDD_DSK +#include "sdd_dsk.h" +#endif + +#ifdef HAS_FORMATS_SF7000_DSK +#include "sf7000_dsk.h" +#endif + +#ifdef HAS_FORMATS_SMX_DSK +#include "smx_dsk.h" +#endif + +#ifdef HAS_FORMATS_SOL_CAS +#include "sol_cas.h" +#endif + +#ifdef HAS_FORMATS_SORC_CAS +#include "sorc_cas.h" +#endif + +#ifdef HAS_FORMATS_SORC_DSK +#include "sorc_dsk.h" +#endif + +#ifdef HAS_FORMATS_SORD_CAS +#include "sord_cas.h" +#endif + +#ifdef HAS_FORMATS_SPC1000_CAS +#include "spc1000_cas.h" +#endif + +#ifdef HAS_FORMATS_ST_DSK +#include "st_dsk.h" +#endif + +#ifdef HAS_FORMATS_SVI_CAS +#include "svi_cas.h" +#endif + +#ifdef HAS_FORMATS_SVI_DSK +#include "svi_dsk.h" +#endif + +#ifdef HAS_FORMATS_SWD_DSK +#include "swd_dsk.h" +#endif + +#ifdef HAS_FORMATS_TANDY2K_DSK +#include "tandy2k_dsk.h" +#endif + +#ifdef HAS_FORMATS_THOM_CAS +#include "thom_cas.h" +#endif + +#ifdef HAS_FORMATS_TI99_DSK +#include "ti99_dsk.h" +#endif + +#ifdef HAS_FORMATS_TIKI100_DSK +#include "tiki100_dsk.h" +#endif + +#ifdef HAS_FORMATS_TRD_DSK +#include "trd_dsk.h" +#endif + +#ifdef HAS_FORMATS_TRS80_DSK +#include "trs80_dsk.h" +#endif + +#ifdef HAS_FORMATS_TRS_CAS +#include "trs_cas.h" +#endif + +#ifdef HAS_FORMATS_TVC_CAS +#include "tvc_cas.h" +#endif + +#ifdef HAS_FORMATS_TVC_DSK +#include "tvc_dsk.h" +#endif + +#ifdef HAS_FORMATS_TZX_CAS +#include "tzx_cas.h" +#endif + +#ifdef HAS_FORMATS_UEF_CAS +#include "uef_cas.h" +#endif + +#ifdef HAS_FORMATS_VDK_DSK +#include "vdk_dsk.h" +#endif + +#ifdef HAS_FORMATS_VECTOR06_DSK +#include "vector06_dsk.h" +#endif + +#ifdef HAS_FORMATS_VG5K_CAS +#include "vg5k_cas.h" +#endif + +#ifdef HAS_FORMATS_VICTOR9K_DSK +#include "victor9k_dsk.h" +#endif + +#ifdef HAS_FORMATS_VT_CAS +#include "vt_cas.h" +#endif + +#ifdef HAS_FORMATS_WD177X_DSK +#include "wd177x_dsk.h" +#endif + +#ifdef HAS_FORMATS_X07_CAS +#include "x07_cas.h" +#endif + +#ifdef HAS_FORMATS_X1_TAP +#include "x1_tap.h" +#endif + +#ifdef HAS_FORMATS_XDF_DSK +#include "xdf_dsk.h" +#endif + +#ifdef HAS_FORMATS_ZX81_P +#include "zx81_p.h" +#endif + +void mame_formats_full_list(mame_formats_enumerator &en) +{ + en.category("Generic"); + en.add(cassette_default_formats); +#ifdef HAS_FORMATS_UEF_CAS + en.add(uef_cassette_formats); // uef_cas.h +#endif + en.add(FLOPPY_MFI_FORMAT); // mfi_dsk.h + en.add(FLOPPY_DFI_FORMAT); // dfi_dsk.h + + en.category("Container FM/MFM"); + en.add(FLOPPY_HFE_FORMAT); // hxchfe_dsk.h + en.add(FLOPPY_MFM_FORMAT); // hxcmfm_dsk.h + en.add(FLOPPY_TD0_FORMAT); // td0_dsk.h + en.add(FLOPPY_IMD_FORMAT); // imd_dsk.h + + en.category("Container MFM"); + en.add(FLOPPY_D88_FORMAT); // d88_dsk.h + en.add(FLOPPY_CQM_FORMAT); // cqm_dsk.h + en.add(FLOPPY_DSK_FORMAT); // dsk_dsk.h +#ifdef HAS_FORMATS_DMK_DSK + en.add(FLOPPY_DMK_FORMAT); // dmk_dsk.h +#endif + + en.category("Apple"); +#ifdef HAS_FORMATS_AP2_DSK + en.add(FLOPPY_A216S_FORMAT); // ap2_dsk.h + en.add(FLOPPY_RWTS18_FORMAT); // ap2_dsk.h + en.add(FLOPPY_EDD_FORMAT); // ap2_dsk.h + en.add(FLOPPY_WOZ_FORMAT); // ap2_dsk.h + en.add(FLOPPY_NIB_FORMAT); // ap2_dsk.h +#endif +#ifdef HAS_FORMATS_AIM_DSK + en.add(FLOPPY_AIM_FORMAT); // aim_dsk.h +#endif +#ifdef HAS_FORMATS_DS9_DSK + en.add(FLOPPY_DS9_FORMAT); // ds9_dsk.h +#endif +#ifdef HAS_FORMATS_AP_DSK35 + en.add(FLOPPY_DC42_FORMAT); // ap_dsk35.h + en.add(FLOPPY_APPLE_GCR_FORMAT); // ap_dsk35.h + en.add(FLOPPY_APPLE_2MG_FORMAT); // ap_dsk35.h +#endif + + en.category("PC"); + en.add(FLOPPY_PC_FORMAT); // pc_dsk.h +#ifdef HAS_FORMATS_IBMXDF_DSK + en.add(FLOPPY_IBMXDF_FORMAT); // ibmxdf_dsk.h +#endif +#ifdef HAS_FORMATS_NASLITE_DSK + en.add(FLOPPY_NASLITE_FORMAT); // naslite_dsk.h +#endif + + en.category("Sharp"); +#ifdef HAS_FORMATS_MZ_CAS + en.add(mz700_cassette_formats); // mz_cas.h +#endif +#ifdef HAS_FORMATS_X1_TAP + en.add(x1_cassette_formats); // x1_tap.h +#endif +#ifdef HAS_FORMATS_2D_DSK + en.add(FLOPPY_2D_FORMAT); // 2d_dsk.h +#endif + + en.category("Robotron"); +#ifdef HAS_FORMATS_A5105_DSK + en.add(FLOPPY_A5105_FORMAT); // a5105_dsk.h +#endif + + en.category("Luxor ABC"); +#ifdef HAS_FORMATS_ABC800_DSK + en.add(FLOPPY_ABC800_FORMAT); // abc800_dsk.h +#endif +#ifdef HAS_FORMATS_ABCFD2_DSK + en.add(FLOPPY_ABC_FD2_FORMAT); // abcfd2_dsk.h +#endif + + en.category("Acorn"); +#ifdef HAS_FORMATS_ATOM_TAP + en.add(atom_cassette_formats); // atom_tap.h +#endif +#ifdef HAS_FORMATS_CSW_CAS + en.add(csw_cassette_formats); // csw_cas.h + en.add(bbc_cassette_formats); // csw_cas.h +#endif +#ifdef HAS_FORMATS_ACORN_DSK + en.add(FLOPPY_ACORN_SSD_FORMAT); // acorn_dsk.h + en.add(FLOPPY_ACORN_DSD_FORMAT); // acorn_dsk.h + en.add(FLOPPY_ACORN_DOS_FORMAT); // acorn_dsk.h + en.add(FLOPPY_ACORN_ADFS_OLD_FORMAT); // acorn_dsk.h + en.add(FLOPPY_ACORN_ADFS_NEW_FORMAT); // acorn_dsk.h + en.add(FLOPPY_OPUS_DDOS_FORMAT); // acorn_dsk.h + en.add(FLOPPY_OPUS_DDCPM_FORMAT); // acorn_dsk.h +#endif +#ifdef HAS_FORMATS_FSD_DSK + en.add(FLOPPY_FSD_FORMAT); // fsd_dsk.h +#endif +#ifdef HAS_FORMATS_AFS_DSK + en.add(FLOPPY_AFS_FORMAT); // afs_dsk.h +#endif +#ifdef HAS_FORMATS_ATOM_DSK + en.add(FLOPPY_ATOM_FORMAT); // atom_dsk.h +#endif +#ifdef HAS_FORMATS_JFD_DSK + en.add(FLOPPY_JFD_FORMAT); // jfd_dsk.h +#endif + + en.category("Coleco"); +#ifdef HAS_FORMATS_ADAM_CAS + en.add(coleco_adam_cassette_formats); // adam_cas.h +#endif +#ifdef HAS_FORMATS_ADAM_DSK + en.add(FLOPPY_ADAM_FORMAT); // adam_dsk.h +#endif + + en.category("Amiga"); +#ifdef HAS_FORMATS_AMI_DSK + en.add(FLOPPY_ADF_FORMAT); // ami_dsk.h +#endif +#ifdef HAS_FORMATS_IPF_DSK + en.add(FLOPPY_IPF_FORMAT); // ipf_dsk.h +#endif + + en.category("Archimedes"); +#ifdef HAS_FORMATS_APD_DSK + en.add(FLOPPY_APD_FORMAT); // apd_dsk.h +#endif + + en.category("HP"); +#ifdef HAS_FORMATS_APOLLO_DSK + en.add(FLOPPY_APOLLO_FORMAT); // apollo_dsk.h +#endif +#ifdef HAS_FORMATS_HP_IPC_DSK + en.add(FLOPPY_HP_IPC_FORMAT); // hp_ipc_dsk.h +#endif +#ifdef HAS_FORMATS_HPI_DSK + en.add(FLOPPY_HPI_FORMAT); // hpi_dsk.h +#endif + + en.category("Applix"); +#ifdef HAS_FORMATS_APPLIX_DSK + en.add(FLOPPY_APPLIX_FORMAT); // applix_dsk.h +#endif + + en.category("Apricot"); +#ifdef HAS_FORMATS_APRIDISK + en.add(FLOPPY_APRIDISK_FORMAT); // apridisk.h +#endif + + en.category("Assistent"); +#ifdef HAS_FORMATS_ASST128_DSK + en.add(FLOPPY_ASST128_FORMAT); // asst128_dsk.h +#endif + + en.category("Bondwell"); +#ifdef HAS_FORMATS_BW12_DSK + en.add(FLOPPY_BW12_FORMAT); // bw12_dsk.h +#endif +#ifdef HAS_FORMATS_BW2_DSK + en.add(FLOPPY_BW2_FORMAT); // bw2_dsk.h +#endif + + en.category("Commodore"); +#ifdef HAS_FORMATS_CBM_TAP + en.add(cbm_cassette_formats); // cbm_tap.h +#endif +#ifdef HAS_FORMATS_C3040_DSK + en.add(FLOPPY_C3040_FORMAT); // c3040_dsk.h +#endif +#ifdef HAS_FORMATS_C4040_DSK + en.add(FLOPPY_C4040_FORMAT); // c4040_dsk.h +#endif +#ifdef HAS_FORMATS_C8280_DSK + en.add(FLOPPY_C8280_FORMAT); // c8280_dsk.h +#endif +#ifdef HAS_FORMATS_D64_DSK + en.add(FLOPPY_D64_FORMAT); // d64_dsk.h +#endif +#ifdef HAS_FORMATS_D71_DSK + en.add(FLOPPY_D71_FORMAT); // d71_dsk.h +#endif +#ifdef HAS_FORMATS_D80_DSK + en.add(FLOPPY_D80_FORMAT); // d80_dsk.h +#endif +#ifdef HAS_FORMATS_D81_DSK + en.add(FLOPPY_D81_FORMAT); // d81_dsk.h +#endif +#ifdef HAS_FORMATS_D82_DSK + en.add(FLOPPY_D82_FORMAT); // d82_dsk.h +#endif +#ifdef HAS_FORMATS_G64_DSK + en.add(FLOPPY_G64_FORMAT); // g64_dsk.h +#endif + + en.category("Camputers"); +#ifdef HAS_FORMATS_CAMPLYNX_CAS + en.add(lynx48k_cassette_formats); // camplynx_cas.h + en.add(lynx128k_cassette_formats); // camplynx_cas.h +#endif +#ifdef HAS_FORMATS_CAMPLYNX_DSK + en.add(FLOPPY_CAMPLYNX_FORMAT); // camplynx_dsk.h +#endif + + en.category("Compucolor"); +#ifdef HAS_FORMATS_CCVF_DSK + en.add(FLOPPY_CCVF_FORMAT); // ccvf_dsk.h +#endif + + en.category("Colour Genie"); +#ifdef HAS_FORMATS_CGEN_CAS + en.add(cgenie_cassette_formats); // cgen_cas.h +#endif +#ifdef HAS_FORMATS_CGENIE_DSK + en.add(FLOPPY_CGENIE_FORMAT); // cgenie_dsk.h +#endif + + en.category("Comx"); +#ifdef HAS_FORMATS_COMX35_DSK + en.add(FLOPPY_COMX35_FORMAT); // comx35_dsk.h +#endif + + en.category("Concept"); +#ifdef HAS_FORMATS_CONCEPT_DSK + en.add(FLOPPY_CONCEPT_525DSDD_FORMAT); // concept_dsk.h +#endif + + en.category("Compis"); +#ifdef HAS_FORMATS_CPIS_DSK + en.add(FLOPPY_CPIS_FORMAT); // cpis_dsk.h +#endif + + en.category("PC98"); +#ifdef HAS_FORMATS_DCP_DSK + en.add(FLOPPY_DCP_FORMAT); // dcp_dsk.h +#endif +#ifdef HAS_FORMATS_DIP_DSK + en.add(FLOPPY_DIP_FORMAT); // dip_dsk.h +#endif +#ifdef HAS_FORMATS_FDD_DSK + en.add(FLOPPY_FDD_FORMAT); // fdd_dsk.h +#endif +#ifdef HAS_FORMATS_NFD_DSK + en.add(FLOPPY_NFD_FORMAT); // nfd_dsk.h +#endif +#ifdef HAS_FORMATS_PC98_DSK + en.add(FLOPPY_PC98_FORMAT); // pc98_dsk.h +#endif +#ifdef HAS_FORMATS_PC98FDI_DSK + en.add(FLOPPY_PC98FDI_FORMAT); // pc98fdi_dsk.h +#endif + + en.category("X68k"); +#ifdef HAS_FORMATS_DIM_DSK + en.add(FLOPPY_DIM_FORMAT); // dim_dsk.h +#endif +#ifdef HAS_FORMATS_XDF_DSK + en.add(FLOPPY_XDF_FORMAT); // xdf_dsk.h +#endif + + en.category("NCR Decision Mate V"); +#ifdef HAS_FORMATS_DMV_DSK + en.add(FLOPPY_DMV_FORMAT); // dmv_dsk.h +#endif + + en.category("DVK MX"); +#ifdef HAS_FORMATS_DVK_MX_DSK + en.add(FLOPPY_DVK_MX_FORMAT); // dvk_mx_dsk.h +#endif + + en.category("Enterprise"); +#ifdef HAS_FORMATS_EP64_DSK + en.add(FLOPPY_EP64_FORMAT); // ep64_dsk.h +#endif + + en.category("Ensoniq"); +#ifdef HAS_FORMATS_ESQ16_DSK + en.add(FLOPPY_ESQIMG_FORMAT); // esq16_dsk.h +#endif +#ifdef HAS_FORMATS_ESQ8_DSK + en.add(FLOPPY_ESQ8IMG_FORMAT); // esq8_dsk.h +#endif + + en.category("Excalibur 64"); +#ifdef HAS_FORMATS_EXCALI64_DSK + en.add(FLOPPY_EXCALI64_FORMAT); // excali64_dsk.h +#endif + + en.category("Sinclair"); +#ifdef HAS_FORMATS_ZX81_P + en.add(zx81_p_format); // zx81_p.h + en.add(zx81_cassette_formats); // zx81_p.h + en.add(zx80_o_format); // zx81_p.h +#endif +#ifdef HAS_FORMATS_TZX_CAS + en.add(tzx_cassette_formats); // tzx_cas.h + en.add(cdt_cassette_formats); // tzx_cas.h +#endif +#ifdef HAS_FORMATS_FL1_DSK + en.add(FLOPPY_FL1_FORMAT); // fl1_dsk.h +#endif +#ifdef HAS_FORMATS_TRD_DSK + en.add(FLOPPY_TRD_FORMAT); // trd_dsk.h +#endif +#ifdef HAS_FORMATS_COUPEDSK + en.add(FLOPPY_MGT_FORMAT); // coupedsk.h +#endif +#ifdef HAS_FORMATS_OPD_DSK + en.add(FLOPPY_OPD_FORMAT); // opd_dsk.h +#endif +#ifdef HAS_FORMATS_SWD_DSK + en.add(FLOPPY_SWD_FORMAT); // swd_dsk.h +#endif +#ifdef HAS_FORMATS_SDD_DSK + en.add(FLOPPY_SDD_FORMAT); // sdd_dsk.h +#endif +#ifdef HAS_FORMATS_QL_DSK + en.add(FLOPPY_QL_FORMAT); // ql_dsk.h +#endif + + en.category("Flex"); +#ifdef HAS_FORMATS_FLEX_DSK + en.add(FLOPPY_FLEX_FORMAT); // flex_dsk.h +#endif + + en.category("FM Towns"); +#ifdef HAS_FORMATS_FMTOWNS_DSK + en.add(FLOPPY_FMTOWNS_FORMAT); // fmtowns_dsk.h +#endif + + en.category("JPM"); +#ifdef HAS_FORMATS_GUAB_DSK + en.add(FLOPPY_GUAB_FORMAT); // guab_dsk.h +#endif + + en.category("Hector"); +#ifdef HAS_FORMATS_HECT_TAP + en.add(hector_cassette_formats); // hect_tap.h +#endif +#ifdef HAS_FORMATS_HECTOR_MINIDISC + en.add(FLOPPY_HMD_FORMAT); // hector_minidisc.h +#endif + + en.category("Intel"); +#ifdef HAS_FORMATS_IMG_DSK + en.add(FLOPPY_IMG_FORMAT); // img_dsk.h +#endif + + en.category("IQ151"); +#ifdef HAS_FORMATS_IQ151_DSK + en.add(FLOPPY_IQ151_FORMAT); // iq151_dsk.h +#endif + + en.category("ITT3030"); +#ifdef HAS_FORMATS_ITT3030_DSK + en.add(FLOPPY_ITT3030_FORMAT); // itt3030_dsk.h +#endif + + en.category("Juku"); +#ifdef HAS_FORMATS_JUKU_DSK + en.add(FLOPPY_JUKU_FORMAT); // juku_dsk.h +#endif + + en.category("CoCo"); +#ifdef HAS_FORMATS_COCO_CAS + en.add(coco_cassette_formats); // coco_cas.h + en.add(alice32_cassette_formats); // coco_cas.h +#endif +#ifdef HAS_FORMATS_JVC_DSK + en.add(FLOPPY_JVC_FORMAT); // jvc_dsk.h +#endif +#ifdef HAS_FORMATS_OS9_DSK + en.add(FLOPPY_OS9_FORMAT); // os9_dsk.h +#endif +#ifdef HAS_FORMATS_VDK_DSK + en.add(FLOPPY_VDK_FORMAT); // vdk_dsk.h +#endif +#ifdef HAS_FORMATS_SDF_DSK + en.add(FLOPPY_SDF_FORMAT); // sdf_dsk.h +#endif +#ifdef HAS_FORMATS_TRS80_DSK + en.add(FLOPPY_TRS80_FORMAT); // trs80_dsk.h +#endif + + en.category("Kaypro"); +#ifdef HAS_FORMATS_KAYPRO_DSK + en.add(FLOPPY_KAYPROII_FORMAT); // kaypro_dsk.h + en.add(FLOPPY_KAYPRO2X_FORMAT); // kaypro_dsk.h +#endif + + en.category("KC85"); +#ifdef HAS_FORMATS_KC85_DSK + en.add(FLOPPY_KC85_FORMAT); // kc85_dsk.h +#endif + + en.category("Olivetti"); +#ifdef HAS_FORMATS_M20_DSK + en.add(FLOPPY_M20_FORMAT); // m20_dsk.h +#endif + + en.category("Sord M5"); +#ifdef HAS_FORMATS_SORD_CAS + en.add(sordm5_cassette_formats); // sord_cas.h +#endif +#ifdef HAS_FORMATS_M5_DSK + en.add(FLOPPY_M5_FORMAT); // m5_dsk.h +#endif + + en.category("Motorola MDOS"); +#ifdef HAS_FORMATS_MDOS_DSK + en.add(FLOPPY_MDOS_FORMAT); // mdos_dsk.h +#endif + + en.category("MikroMikko"); +#ifdef HAS_FORMATS_MM_DSK + en.add(FLOPPY_MM1_FORMAT); // mm_dsk.h + en.add(FLOPPY_MM2_FORMAT); // mm_dsk.h +#endif + + en.category("Elektronika"); +#ifdef HAS_FORMATS_MS0515_DSK + en.add(FLOPPY_MS0515_FORMAT); // ms0515_dsk.h +#endif + + en.category("MSX"); +#ifdef HAS_FORMATS_FMSX_CAS + en.add(fmsx_cassette_formats); // fmsx_cas.h +#endif +#ifdef HAS_FORMATS_MSX_DSK + en.add(FLOPPY_MSX_FORMAT); // msx_dsk.h +#endif + + en.category("MTX"); +#ifdef HAS_FORMATS_MTX_DSK + en.add(FLOPPY_MTX_FORMAT); // mtx_dsk.h +#endif + + en.category("Nanos"); +#ifdef HAS_FORMATS_NANOS_DSK + en.add(FLOPPY_NANOS_FORMAT); // nanos_dsk.h +#endif + + en.category("Nascom"); +#ifdef HAS_FORMATS_NASCOM_DSK + en.add(FLOPPY_NASCOM_FORMAT); // nascom_dsk.h +#endif + + en.category("Oric"); +#ifdef HAS_FORMATS_ORIC_TAP + en.add(oric_cassette_formats); // oric_tap.h +#endif +#ifdef HAS_FORMATS_ORIC_DSK + en.add(FLOPPY_ORIC_DSK_FORMAT); // oric_dsk.h +#endif + + en.category("Atari"); +#ifdef HAS_FORMATS_A26_CAS + en.add(a26_cassette_formats); // a26_cas.h +#endif +#ifdef HAS_FORMATS_ST_DSK + en.add(FLOPPY_ST_FORMAT); // st_dsk.h + en.add(FLOPPY_MSA_FORMAT); // st_dsk.h +#endif +#ifdef HAS_FORMATS_PASTI_DSK + en.add(FLOPPY_PASTI_FORMAT); // pasti_dsk.h +#endif + + en.category("PK 8020"); +#ifdef HAS_FORMATS_PK8020_DSK + en.add(FLOPPY_PK8020_FORMAT); // pk8020_dsk.h +#endif + + en.category("Poly"); +#ifdef HAS_FORMATS_POLY_DSK + en.add(FLOPPY_POLY_CPM_FORMAT); // poly_dsk.h +#endif + + en.category("Eltek Eurocom"); +#ifdef HAS_FORMATS_PPG_DSK + en.add(FLOPPY_PPG_FORMAT); // ppg_dsk.h +#endif + + en.category("Pyldin"); +#ifdef HAS_FORMATS_PYLDIN_DSK + en.add(FLOPPY_PYLDIN_FORMAT); // pyldin_dsk.h +#endif + + en.category("DEC"); +#ifdef HAS_FORMATS_RX50_DSK + en.add(FLOPPY_RX50IMG_FORMAT); // rx50_dsk.h +#endif + + en.category("Sega"); +#ifdef HAS_FORMATS_SF7000_DSK + en.add(FLOPPY_SF7000_FORMAT); // sf7000_dsk.h +#endif + + en.category("Specialist"); +#ifdef HAS_FORMATS_SMX_DSK + en.add(FLOPPY_SMX_FORMAT); // smx_dsk.h +#endif + + en.category("Spectravideo"); +#ifdef HAS_FORMATS_SVI_CAS + en.add(svi_cassette_formats); // svi_cas.h +#endif +#ifdef HAS_FORMATS_SVI_DSK + en.add(FLOPPY_SVI_FORMAT); // svi_dsk.h +#endif + + en.category("Tandy"); +#ifdef HAS_FORMATS_TRS_CAS + en.add(trs80l2_cassette_formats); // trs_cas.h +#endif +#ifdef HAS_FORMATS_TANDY2K_DSK + en.add(FLOPPY_TANDY_2000_FORMAT); // tandy2k_dsk.h +#endif + + en.category("Thomson"); +#ifdef HAS_FORMATS_THOM_CAS + en.add(to7_cassette_formats); // thom_cas.h + en.add(mo5_cassette_formats); // thom_cas.h +#endif + + en.category("Texas Instruments"); +#ifdef HAS_FORMATS_TI99_DSK + en.add(FLOPPY_TI99_SDF_FORMAT); // ti99_dsk.h + en.add(FLOPPY_TI99_TDF_FORMAT); // ti99_dsk.h +#endif + + en.category("Tiki 100"); +#ifdef HAS_FORMATS_TIKI100_DSK + en.add(FLOPPY_TIKI100_FORMAT); // tiki100_dsk.h +#endif + + en.category("Videoton"); +#ifdef HAS_FORMATS_TVC_CAS + en.add(tvc64_cassette_formats); // tvc_cas.h +#endif +#ifdef HAS_FORMATS_TVC_DSK + en.add(FLOPPY_TVC_FORMAT); // tvc_dsk.h +#endif + + en.category("SWTPC"); +#ifdef HAS_FORMATS_UNIFLEX_DSK + en.add(FLOPPY_UNIFLEX_FORMAT); // uniflex_dsk.h +#endif + + en.category("Vector 06"); +#ifdef HAS_FORMATS_VECTOR06_DSK + en.add(FLOPPY_VECTOR06_FORMAT); // vector06_dsk.h +#endif + + en.category("Victor"); +#ifdef HAS_FORMATS_VICTOR9K_DSK + en.add(FLOPPY_VICTOR_9000_FORMAT); // victor9k_dsk.h +#endif + + en.category("Jupiter ACE"); +#ifdef HAS_FORMATS_ACE_TAP + en.add(ace_cassette_formats); // ace_tap.h +#endif + + en.category("APF"); +#ifdef HAS_FORMATS_APF_APT + en.add(apf_cassette_formats); // apf_apt.h +#endif + + en.category("Mattel"); +#ifdef HAS_FORMATS_AQUARIUS_CAQ + en.add(aquarius_cassette_formats); // aquarius_caq.h +#endif + + en.category("Goldstar"); +#ifdef HAS_FORMATS_FC100_CAS + en.add(fc100_cassette_formats); // fc100_cas.h +#endif + + en.category("Fujitsu"); +#ifdef HAS_FORMATS_FM7_CAS + en.add(fm7_cassette_formats); // fm7_cas.h +#endif + + en.category("Galaksija"); +#ifdef HAS_FORMATS_GTP_CAS + en.add(gtp_cassette_formats); // gtp_cas.h +#endif + + en.category("Heathkit"); +#ifdef HAS_FORMATS_H8_CAS + en.add(h8_cassette_formats); // h8_cas.h +#endif + + en.category("KC 85"); +#ifdef HAS_FORMATS_KC_CAS + en.add(kc_cassette_formats); // kc_cas.h +#endif + + en.category("KIM 1"); +#ifdef HAS_FORMATS_KIM1_CAS + en.add(kim1_cassette_formats); // kim1_cas.h +#endif + + en.category("Lviv"); +#ifdef HAS_FORMATS_LVIV_LVT + en.add(lviv_lvt_format); // lviv_lvt.h +#endif + + en.category("Microbee"); +#ifdef HAS_FORMATS_MBEE_CAS + en.add(mbee_cassette_formats); // mbee_cas.h +#endif + + en.category("Orao"); +#ifdef HAS_FORMATS_ORAO_CAS + en.add(orao_cassette_formats); // orao_cas.h +#endif + + en.category("Philips"); +#ifdef HAS_FORMATS_VG5K_CAS + en.add(vg5k_cassette_formats); // vg5k_cas.h +#endif +#ifdef HAS_FORMATS_P2000T_CAS + en.add(p2000t_cassette_formats); // p2000t_cas.h +#endif + + en.category("NEC"); +#ifdef HAS_FORMATS_P6001_CAS + en.add(pc6001_cassette_formats); // p6001_cas.h +#endif + + en.category("Sanyo"); +#ifdef HAS_FORMATS_PHC25_CAS + en.add(phc25_cassette_formats); // phc25_cas.h +#endif + + en.category("Tesla"); +#ifdef HAS_FORMATS_PMD_CAS + en.add(pmd85_cassette_formats); // pmd_cas.h +#endif + + en.category("Microkey"); +#ifdef HAS_FORMATS_PRIMOPTP + en.add(primo_ptp_format); // primoptp.h +#endif + + en.category("UT 88"); +#ifdef HAS_FORMATS_RK_CAS + en.add(rku_cassette_formats); // rk_cas.h + en.add(rk8_cassette_formats); // rk_cas.h + en.add(rks_cassette_formats); // rk_cas.h + en.add(rko_cassette_formats); // rk_cas.h + en.add(rkr_cassette_formats); // rk_cas.h + en.add(rka_cassette_formats); // rk_cas.h + en.add(rkm_cassette_formats); // rk_cas.h + en.add(rkp_cassette_formats); // rk_cas.h + en.add(gam_cassette_formats); // rk_cas.h +#endif + + en.category("SG 1000"); +#ifdef HAS_FORMATS_SC3000_BIT + en.add(sc3000_cassette_formats); // sc3000_bit.h +#endif + + en.category("Sol 20"); +#ifdef HAS_FORMATS_SOL_CAS + en.add(sol20_cassette_formats); // sol_cas.h +#endif + + en.category("Exidy"); +#ifdef HAS_FORMATS_SORC_CAS + en.add(sorcerer_cassette_formats); // sorc_cas.h +#endif + + en.category("Samsung"); +#ifdef HAS_FORMATS_SPC1000_CAS + en.add(spc1000_cassette_formats); // spc1000_cas.h +#endif + + en.category("Video Technology"); +#ifdef HAS_FORMATS_VT_CAS + en.add(vtech1_cassette_formats); // vt_cas.h + en.add(vtech2_cassette_formats); // vt_cas.h +#endif + + en.category("Canon"); +#ifdef HAS_FORMATS_X07_CAS + en.add(x07_cassette_formats); // x07_cas.h +#endif +} diff --git a/src/lib/formats/all.h b/src/lib/formats/all.h new file mode 100644 index 00000000000..3c869336d1b --- /dev/null +++ b/src/lib/formats/all.h @@ -0,0 +1,25 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert + +// Enumerate all the compiled-in formats + +#ifndef MAME_FORMATS_ALL_H +#define MAME_FORMATS_ALL_H + +#pragma once + +#include "cassimg.h" +#include "flopimg.h" + +struct mame_formats_enumerator { + virtual ~mame_formats_enumerator() = default; + + virtual void category(const char *name) = 0; + virtual void add(const cassette_image::Format *const *formats) = 0; + virtual void add(floppy_format_type format) = 0; +}; + +void mame_formats_full_list(mame_formats_enumerator &en); + +#endif + diff --git a/src/lib/formats/concept_dsk.cpp b/src/lib/formats/concept_dsk.cpp index 36531ac8d7f..67c8562e1c3 100644 --- a/src/lib/formats/concept_dsk.cpp +++ b/src/lib/formats/concept_dsk.cpp @@ -54,7 +54,7 @@ cc525dsdd_format::cc525dsdd_format() const char *cc525dsdd_format::name() const { - return "img"; + return "concept"; } const char *cc525dsdd_format::description() const diff --git a/src/lib/formats/ibmxdf_dsk.cpp b/src/lib/formats/ibmxdf_dsk.cpp index 06265ff581a..3682541fd1f 100644 --- a/src/lib/formats/ibmxdf_dsk.cpp +++ b/src/lib/formats/ibmxdf_dsk.cpp @@ -39,7 +39,7 @@ ibmxdf_format::ibmxdf_format() : wd177x_format(formats) const char *ibmxdf_format::name() const { - return "xdf"; + return "ibmxdf"; } const char *ibmxdf_format::description() const diff --git a/src/lib/formats/img_dsk.cpp b/src/lib/formats/img_dsk.cpp index 4de5e199751..757f695d923 100644 --- a/src/lib/formats/img_dsk.cpp +++ b/src/lib/formats/img_dsk.cpp @@ -115,7 +115,7 @@ bool img_format::save(io_generic *io, const std::vector<uint32_t> &variants, flo const char *img_format::name() const { - return "img"; + return "mds2"; } const char *img_format::description() const diff --git a/src/lib/formats/kaypro_dsk.cpp b/src/lib/formats/kaypro_dsk.cpp index 6b3996d842c..be1d6130e0a 100644 --- a/src/lib/formats/kaypro_dsk.cpp +++ b/src/lib/formats/kaypro_dsk.cpp @@ -26,7 +26,7 @@ kayproii_format::kayproii_format() : upd765_format(formats) const char *kayproii_format::name() const { - return "kaypro"; + return "kaypro2"; } const char *kayproii_format::description() const @@ -53,7 +53,7 @@ kaypro2x_format::kaypro2x_format() : upd765_format(formats) const char *kaypro2x_format::name() const { - return "kaypro"; + return "kaypro2x"; } const char *kaypro2x_format::description() const diff --git a/src/lib/formats/rx50_dsk.cpp b/src/lib/formats/rx50_dsk.cpp index 6e076f1a5bd..d0d8f270c56 100644 --- a/src/lib/formats/rx50_dsk.cpp +++ b/src/lib/formats/rx50_dsk.cpp @@ -77,7 +77,7 @@ rx50img_format::rx50img_format() const char *rx50img_format::name() const { - return "img"; + return "rx50"; } const char *rx50img_format::description() const diff --git a/src/lib/formats/ti99_dsk.cpp b/src/lib/formats/ti99_dsk.cpp index 723bd218b81..d20904e10f4 100644 --- a/src/lib/formats/ti99_dsk.cpp +++ b/src/lib/formats/ti99_dsk.cpp @@ -903,7 +903,7 @@ uint8_t ti99_floppy_format::get_data_from_encoding(uint16_t raw) */ const char *ti99_sdf_format::name() const { - return "sdf"; + return "ti99"; } const char *ti99_sdf_format::description() const diff --git a/src/tools/floptool.cpp b/src/tools/floptool.cpp index 4f1e0172444..021ee80390b 100644 --- a/src/tools/floptool.cpp +++ b/src/tools/floptool.cpp @@ -17,110 +17,44 @@ #include <ctime> #include <cstdarg> #include <cassert> +#include <map> #include "corestr.h" #include "osdcomm.h" -#include "formats/mfi_dsk.h" -#include "formats/dfi_dsk.h" -#include "formats/ipf_dsk.h" +#include "formats/all.h" -#include "formats/hxcmfm_dsk.h" -#include "formats/ami_dsk.h" +std::map<std::string, std::vector<floppy_image_format_t *>> formats_by_category; +std::map<std::string, floppy_image_format_t *> formats_by_key; -#include "formats/st_dsk.h" -#include "formats/pasti_dsk.h" +struct enumerator : public mame_formats_enumerator { + virtual ~enumerator() = default; + virtual void add(const cassette_image::Format *const *formats) {} -#include "formats/dsk_dsk.h" - -#include "formats/d88_dsk.h" -#include "formats/imd_dsk.h" -#include "formats/td0_dsk.h" -#include "formats/cqm_dsk.h" -#include "formats/pc_dsk.h" -#include "formats/naslite_dsk.h" -#include "formats/ibmxdf_dsk.h" - -#include "formats/ap_dsk35.h" -#include "formats/ap2_dsk.h" - -#include "formats/atom_dsk.h" -#include "formats/acorn_dsk.h" - -#include "formats/oric_dsk.h" - -#include "formats/applix_dsk.h" - -#include "formats/hpi_dsk.h" -#include "formats/img_dsk.h" - -#include "formats/dvk_mx_dsk.h" -#include "formats/aim_dsk.h" -#include "formats/m20_dsk.h" - -#include "formats/os9_dsk.h" - -#include "formats/flex_dsk.h" -#include "formats/uniflex_dsk.h" - -#include "formats/mdos_dsk.h" - - -static floppy_format_type floppy_formats[] = { - FLOPPY_MFI_FORMAT, - FLOPPY_DFI_FORMAT, - FLOPPY_IPF_FORMAT, - - FLOPPY_MFM_FORMAT, - FLOPPY_ADF_FORMAT, - - FLOPPY_ST_FORMAT, - FLOPPY_MSA_FORMAT, - FLOPPY_PASTI_FORMAT, - - FLOPPY_DSK_FORMAT, - - FLOPPY_D88_FORMAT, - FLOPPY_IMD_FORMAT, - FLOPPY_TD0_FORMAT, - FLOPPY_CQM_FORMAT, - FLOPPY_PC_FORMAT, - FLOPPY_NASLITE_FORMAT, - FLOPPY_IBMXDF_FORMAT, - - FLOPPY_DC42_FORMAT, - FLOPPY_APPLE_GCR_FORMAT, - FLOPPY_APPLE_2MG_FORMAT, - FLOPPY_A216S_FORMAT, - FLOPPY_RWTS18_FORMAT, - FLOPPY_EDD_FORMAT, - FLOPPY_WOZ_FORMAT, - FLOPPY_NIB_FORMAT, - - FLOPPY_ATOM_FORMAT, - FLOPPY_ACORN_SSD_FORMAT, - FLOPPY_ACORN_DSD_FORMAT, - FLOPPY_ACORN_DOS_FORMAT, - FLOPPY_ACORN_ADFS_OLD_FORMAT, - FLOPPY_ACORN_ADFS_NEW_FORMAT, - - FLOPPY_ORIC_DSK_FORMAT, - - FLOPPY_APPLIX_FORMAT, - - FLOPPY_HPI_FORMAT, - FLOPPY_IMG_FORMAT, - - FLOPPY_DVK_MX_FORMAT, - FLOPPY_AIM_FORMAT, - FLOPPY_M20_FORMAT, - - FLOPPY_OS9_FORMAT, - - FLOPPY_FLEX_FORMAT, - FLOPPY_UNIFLEX_FORMAT, + std::vector<floppy_image_format_t *> *cf = nullptr; + virtual void category(const char *name) { + auto i = formats_by_category.find(name); + if(i != formats_by_category.end()) { + fprintf(stderr, "Collision on category name %s\n", name); + exit(1); + } + cf = &formats_by_category[name]; + } - FLOPPY_MDOS_FORMAT + virtual void add(floppy_format_type format) { + auto f = format(); + std::string key = f->name(); + auto i = formats_by_key.find(key); + if(i != formats_by_key.end()) { + fprintf(stderr, "Collision on key %s between \"%s\" and \"%s\".\n", + key.c_str(), + i->second->description(), + f->description()); + exit(1); + } + cf->push_back(f); + formats_by_key[key] = f; + } }; void CLIB_DECL ATTR_PRINTF(1,2) logerror(const char *format, ...) @@ -131,24 +65,20 @@ void CLIB_DECL ATTR_PRINTF(1,2) logerror(const char *format, ...) va_end(arg); } -static constexpr size_t FORMAT_COUNT = std::size(floppy_formats); - -static floppy_image_format_t *formats[FORMAT_COUNT]; static std::vector<uint32_t> variants; - static void init_formats() { - for(int i=0; i != FORMAT_COUNT; i++) - formats[i] = floppy_formats[i](); + enumerator en; + mame_formats_full_list(en); } static floppy_image_format_t *find_format_by_name(const char *name) { - for(int i=0; i != FORMAT_COUNT; i++) - if(!core_stricmp(name, formats[i]->name())) - return formats[i]; - return nullptr; + auto i = formats_by_key.find(name); + if(i == formats_by_key.end()) + return nullptr; + return i->second; } static floppy_image_format_t *find_format_by_identify(io_generic *image) @@ -156,8 +86,8 @@ static floppy_image_format_t *find_format_by_identify(io_generic *image) int best = 0; floppy_image_format_t *best_fif = nullptr; - for(int i = 0; i != FORMAT_COUNT; i++) { - floppy_image_format_t *fif = formats[i]; + for(const auto &e : formats_by_key) { + floppy_image_format_t *fif = e.second; int score = fif->identify(image, floppy_image::FF_UNKNOWN, variants); if(score > best) { best = score; @@ -176,12 +106,20 @@ static void display_usage() static void display_formats() { - fprintf(stderr, "Supported formats:\n\n"); - for(int i = 0; i != FORMAT_COUNT; i++) - { - floppy_image_format_t *fif = formats[i]; - fprintf(stderr, "%15s - %s [%s]\n", fif->name(), fif->description(), fif->extensions()); + int sk = 0; + for(const auto &e : formats_by_key) { + int sz = e.first.size(); + if(sz > sk) + sk = sz; } + + fprintf(stderr, "Supported formats:\n\n"); + for(const auto &e : formats_by_category) + if(!e.second.empty()) { + fprintf(stderr, "%s:\n", e.first.c_str()); + for(floppy_image_format_t *fif : e.second) + fprintf(stderr, " %-*s - %s [%s]\n", sk, fif->name(), fif->description(), fif->extensions()); + } } static void display_full_usage() |