mirror of
https://github.com/jfdelnero/HxCFloppyEmulator.git
synced 2026-07-27 19:56:23 +00:00
208 lines
7.2 KiB
C
208 lines
7.2 KiB
C
/*
|
|
//
|
|
// Copyright (C) 2006-2026 Jean-François DEL NERO
|
|
//
|
|
// This file is part of the HxCFloppyEmulator library
|
|
//
|
|
// HxCFloppyEmulator may be used and distributed without restriction provided
|
|
// that this copyright statement is not removed from the file and that any
|
|
// derivative work contains the original copyright notice and the associated
|
|
// disclaimer.
|
|
//
|
|
// HxCFloppyEmulator is free software; you can redistribute it
|
|
// and/or modify it under the terms of the GNU General Public License
|
|
// as published by the Free Software Foundation; either version 2
|
|
// of the License, or (at your option) any later version.
|
|
//
|
|
// HxCFloppyEmulator is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
// See the GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with HxCFloppyEmulator; if not, write to the Free Software
|
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
//
|
|
*/
|
|
///////////////////////////////////////////////////////////////////////////////////
|
|
//-------------------------------------------------------------------------------//
|
|
//-------------------------------------------------------------------------------//
|
|
//-----------H----H--X----X-----CCCCC----22222----0000-----0000------11----------//
|
|
//----------H----H----X-X-----C--------------2---0----0---0----0--1--1-----------//
|
|
//---------HHHHHH-----X------C----------22222---0----0---0----0-----1------------//
|
|
//--------H----H----X--X----C----------2-------0----0---0----0-----1-------------//
|
|
//-------H----H---X-----X---CCCCC-----222222----0000-----0000----1111------------//
|
|
//-------------------------------------------------------------------------------//
|
|
//----------------------------------------------------- http://hxc2001.free.fr --//
|
|
///////////////////////////////////////////////////////////////////////////////////
|
|
// File : floppy_ifmode.c
|
|
// Contains: Floppy Interface functions
|
|
//
|
|
// Written by: Jean-François DEL NERO
|
|
//
|
|
// Change History (most recent first):
|
|
///////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
#include "types.h"
|
|
|
|
#include "internal_libhxcfe.h"
|
|
#include "libhxcfe.h"
|
|
#include "floppy_loader.h"
|
|
#include "floppy_utils.h"
|
|
|
|
typedef struct interfacemode_
|
|
{
|
|
int32_t ifmodeid;
|
|
const char* ifmodename;
|
|
const char* ifmodedesc;
|
|
}interfacemode;
|
|
|
|
typedef struct trackmode_
|
|
{
|
|
int32_t trackmodeid;
|
|
const char* trackmodename;
|
|
const char* trackmodedesc;
|
|
}trackmode;
|
|
|
|
trackmode trackmodelist[]=
|
|
{
|
|
{ISOIBM_MFM_ENCODING, "ISOIBM_MFM_ENCODING", "" },
|
|
{AMIGA_MFM_ENCODING, "AMIGA_MFM_ENCODING", "" },
|
|
{ISOIBM_FM_ENCODING, "ISOIBM_FM_ENCODING", "" },
|
|
{EMU_FM_ENCODING, "EMU_FM_ENCODING", "" },
|
|
{TYCOM_FM_ENCODING, "TYCOM_FM_ENCODING", "" },
|
|
{MEMBRAIN_MFM_ENCODING, "MEMBRAIN_MFM_ENCODING","" },
|
|
{APPLEII_GCR1_ENCODING, "APPLEII_GCR1_ENCODING","" },
|
|
{APPLEII_GCR2_ENCODING, "APPLEII_GCR2_ENCODING","" },
|
|
{APPLEMAC_GCR_ENCODING, "APPLEMAC_GCR_ENCODING","" },
|
|
{APPLEII_HDDD_A2_GCR1_ENCODING, "APPLEII_HDDD_A2_GCR1_ENCODING","" },
|
|
{APPLEII_HDDD_A2_GCR2_ENCODING, "APPLEII_HDDD_A2_GCR2_ENCODING","" },
|
|
{ARBURGDAT_ENCODING, "ARBURG_DATA_ENCODING","" },
|
|
{ARBURGSYS_ENCODING, "ARBURG_SYSTEM_ENCODING","" },
|
|
{NORTHSTAR_HS_MFM_ENCODING, "NORTHSTAR_HS_MFM_ENCODING", "" },
|
|
{HEATHKIT_HS_FM_ENCODING, "HEATHKIT_HS_FM_ENCODING", "" },
|
|
{DEC_RX02_M2FM_ENCODING, "DEC_RX02_M2FM_ENCODING", "" },
|
|
{QD_MO5_ENCODING, "QD_MO5_ENCODING","" },
|
|
{C64_GCR_ENCODING, "C64_GCR_ENCODING","" },
|
|
{VICTOR9K_GCR_ENCODING, "VICTOR9K_GCR_ENCODING","" },
|
|
{MICRALN_HS_FM_ENCODING, "MICRALN_HS_FM_ENCODING","" },
|
|
{UNKNOWN_ENCODING, "UNKNOWN_ENCODING", "" },
|
|
{-1,"", ""},
|
|
};
|
|
|
|
interfacemode interfacemodelist[]=
|
|
{
|
|
{IBMPC_DD_FLOPPYMODE, "IBMPC_DD_FLOPPYMODE", "PC Interface (720KB/DD Disk)" },
|
|
{IBMPC_HD_FLOPPYMODE, "IBMPC_HD_FLOPPYMODE", "PC Interface (1.44MB/HD Disk)" },
|
|
{ATARIST_DD_FLOPPYMODE, "ATARIST_DD_FLOPPYMODE", "Atari Interface (720KB/DD Disk)" },
|
|
{ATARIST_HD_FLOPPYMODE, "ATARIST_HD_FLOPPYMODE", "Atari Interface (1.44MB/HD Disk)" },
|
|
{AMIGA_DD_FLOPPYMODE, "AMIGA_DD_FLOPPYMODE", "Amiga Interface (880KB/DD)" },
|
|
{AMIGA_HD_FLOPPYMODE, "AMIGA_HD_FLOPPYMODE", "Amiga Interface (1.76MB/HD)" },
|
|
{CPC_DD_FLOPPYMODE, "CPC_DD_FLOPPYMODE", "Amstrad CPC Interface" },
|
|
{GENERIC_SHUGART_DD_FLOPPYMODE, "GENERIC_SHUGART_DD_FLOPPYMODE","Shugart Interface" },
|
|
{IBMPC_ED_FLOPPYMODE, "IBMPC_ED_FLOPPYMODE", "PC Interface (2.88MB/ED Disk)" },
|
|
{MSX2_DD_FLOPPYMODE, "MSX2_DD_FLOPPYMODE", "MSX Interface" },
|
|
{C64_DD_FLOPPYMODE, "C64_DD_FLOPPYMODE", "C64 Interface" },
|
|
{EMU_SHUGART_FLOPPYMODE, "EMU_SHUGART_FLOPPYMODE", "E-mu Interface" },
|
|
{S950_DD_FLOPPYMODE, "S950_DD_FLOPPYMODE", "Akai S900/S950 Interface (800KB/DD Disk)" },
|
|
{S950_HD_FLOPPYMODE, "S950_HD_FLOPPYMODE", "Akai S950 Interface (1.6MB/HD Disk)" },
|
|
{S950_DD_HD_FLOPPYMODE, "S950_DD_HD_FLOPPYMODE", "Akai S950 Interface (Automatic density selection)" },
|
|
{IBMPC_DD_HD_FLOPPYMODE, "IBMPC_DD_HD_FLOPPYMODE", "PC Interface (Automatic density selection)" },
|
|
{QUICKDISK_FLOPPYMODE, "QUICKDISK_FLOPPYMODE", "Quickdisk Interface" },
|
|
{-1,"", ""},
|
|
};
|
|
|
|
int32_t hxcfe_getFloppyInterfaceModeID( HXCFE* floppycontext, char * ifmode )
|
|
{
|
|
int i;
|
|
|
|
if(floppycontext)
|
|
{
|
|
i=0;
|
|
|
|
while( strcmp( interfacemodelist[i].ifmodename , ifmode ) && ( interfacemodelist[i].ifmodeid >= 0 ) )
|
|
{
|
|
i++;
|
|
}
|
|
|
|
return interfacemodelist[i].ifmodeid;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
const char * hxcfe_getFloppyInterfaceModeName( HXCFE* floppycontext, int32_t ifmodeid )
|
|
{
|
|
|
|
int i;
|
|
|
|
if(floppycontext)
|
|
{
|
|
i=0;
|
|
|
|
|
|
while( ( interfacemodelist[i].ifmodeid != ifmodeid ) && ( interfacemodelist[i].ifmodeid >= 0 ) )
|
|
{
|
|
i++;
|
|
}
|
|
|
|
if( interfacemodelist[i].ifmodeid <0 )
|
|
return NULL;
|
|
else
|
|
return interfacemodelist[i].ifmodename;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
const char * hxcfe_getFloppyInterfaceModeDesc( HXCFE* floppycontext, int32_t ifmodeid )
|
|
{
|
|
int i;
|
|
|
|
if(floppycontext)
|
|
{
|
|
|
|
i=0;
|
|
|
|
while( ( interfacemodelist[i].ifmodeid != ifmodeid ) && ( interfacemodelist[i].ifmodeid >= 0 ) )
|
|
{
|
|
i++;
|
|
}
|
|
|
|
if( interfacemodelist[i].ifmodeid <0 )
|
|
return NULL;
|
|
else
|
|
return interfacemodelist[i].ifmodedesc;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
const char * hxcfe_getTrackEncodingName( HXCFE* floppycontext,int32_t trackencodingid )
|
|
{
|
|
|
|
int i;
|
|
|
|
if(floppycontext)
|
|
{
|
|
|
|
i=0;
|
|
|
|
while( ( trackmodelist[i].trackmodeid != trackencodingid ) && ( trackmodelist[i].trackmodeid >= 0 ) )
|
|
{
|
|
i++;
|
|
}
|
|
|
|
if( trackmodelist[i].trackmodeid <0 )
|
|
return NULL;
|
|
else
|
|
return trackmodelist[i].trackmodename;
|
|
}
|
|
|
|
return 0;
|
|
}
|