summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/formats/all.cpp1351
-rw-r--r--src/lib/formats/all.h25
-rw-r--r--src/lib/formats/concept_dsk.cpp2
-rw-r--r--src/lib/formats/ibmxdf_dsk.cpp2
-rw-r--r--src/lib/formats/img_dsk.cpp2
-rw-r--r--src/lib/formats/kaypro_dsk.cpp4
-rw-r--r--src/lib/formats/rx50_dsk.cpp2
-rw-r--r--src/lib/formats/ti99_dsk.cpp2
-rw-r--r--src/tools/floptool.cpp164
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()