mirror of
https://github.com/jfdelnero/HxCFloppyEmulator.git
synced 2026-09-11 09:02:45 +00:00
IDAM mask support.
This commit is contained in:
@@ -439,6 +439,10 @@ set BATCHCONVERT_KEEP_SOURCE_FILE_NAME_EXTENSION 1
|
||||
# Default sectors size ID mask
|
||||
set SECTOR_SIZE_FIELD_MASK 0x7
|
||||
|
||||
# 0xFF mask in normal operation. 0xFC mask to extract sectors with 0xFC IDAM
|
||||
set MFM_IDAM_FIELD_MASK 0xFF
|
||||
set FM_IDAM_FIELD_MASK 0xFF
|
||||
|
||||
#
|
||||
# Default User interface "last state" variables
|
||||
#
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
//
|
||||
// File: init.script
|
||||
//
|
||||
// Original size: 14999 Bytes
|
||||
// Packed size: 7045 Bytes
|
||||
// Original size: 15135 Bytes
|
||||
// Packed size: 7123 Bytes
|
||||
//
|
||||
|
||||
#ifndef DATATYPEDEF
|
||||
@@ -456,19 +456,24 @@ static unsigned char data__init_script[] =
|
||||
0x42,0x52,0xda,0x03,0x15,0x02,0x45,0x07,0x8f,0x36,0x75,0x1c,0xe4,0x20,0x35,0x12,
|
||||
0x76,0xc2,0x3a,0xce,0x24,0x6b,0x05,0x8a,0x60,0x68,0x51,0x6c,0x48,0xbd,0x13,0xd0,
|
||||
0x20,0xf2,0x95,0xad,0x0a,0x2d,0xa9,0xf8,0x52,0xd0,0xf3,0x1f,0x2e,0x4b,0xe8,0xad,
|
||||
0xba,0xa9,0x45,0xf3,0x80,0x67,0x22,0x6f,0x03,0x3e,0xd3,0x40,0xaf,0xa0,0x74,0x04,
|
||||
0x46,0x67,0x53,0x81,0xc5,0x42,0x90,0x18,0x93,0x63,0x8c,0x42,0x3b,0x40,0x55,0x4f,
|
||||
0x89,0x13,0x14,0xb3,0x01,0x03,0x9b,0xa9,0x69,0x51,0x61,0x7d,0x9c,0xe2,0x16,0xe4,
|
||||
0x54,0x20,0x01,0x12,0x4a,0x68,0x81,0xc7,0x39,0x1e,0x23,0xdc,0x54,0xb3,0x36,0x99,
|
||||
0xb5,0x92,0xee,0x6d,0xa3,0xe5,0x02,0x99,0xcf,0xa0,0x60,0x84,0x20,0x11,0x25,0xbe,
|
||||
0x76,0x69,0xa4,0x9d,0xb2,0x03,0x27,0x70,0x4b,0x99,0xdd,0x35,0x40,0x7c,0xa8,0x76,
|
||||
0x6e,0x10,0x12,0x67,0x81,0x3c,0x28,0x4c,0xcf,0x12,0x74,0xd3,0xc6,0x4d,0x5c,0xee,
|
||||
0x55,0xef,0x3c,0xa9,0x86,0xbd,0x64,0xd3,0xf1,0x8b,0x02,0x94,0x63,0x4f,0x9b,0x3c,
|
||||
0x39,0xda,0xcf,0x4e,0x6f,0x24,0xb3,0x22,0x64,0xf6,0x80,0xa9,0x3d,0xc9,0xef,0x16,
|
||||
0xfc,0x00,0x01,0x00,0x00
|
||||
0xba,0xa8,0xfa,0xae,0x17,0x36,0xc1,0x4a,0xd2,0x36,0xd3,0xf1,0x07,0x87,0x28,0xeb,
|
||||
0x8f,0xcf,0x3d,0xd1,0x85,0x00,0xf0,0x04,0x60,0x9b,0x4e,0x20,0xc9,0xa1,0x54,0x0a,
|
||||
0x1c,0x7a,0xcf,0x04,0x6f,0x49,0x76,0x09,0xa1,0xc0,0x01,0x36,0x62,0xd8,0xf2,0x09,
|
||||
0x0c,0xf1,0xd9,0xd6,0xbb,0xd4,0x09,0x33,0x8e,0x48,0x29,0x8a,0xa7,0x3c,0xde,0x82,
|
||||
0x43,0x1e,0xf0,0x82,0xd3,0xb1,0x9c,0x6c,0x92,0xe7,0x6b,0x39,0x19,0xcf,0x81,0x19,
|
||||
0x45,0xf3,0x80,0x67,0x22,0x6f,0x03,0x3e,0xd3,0x40,0xaf,0xa0,0x74,0x04,0x46,0x67,
|
||||
0x53,0x81,0xc5,0x42,0x90,0x18,0x93,0x63,0x8c,0x42,0x3b,0x40,0x55,0x4f,0x89,0x13,
|
||||
0x14,0xb3,0x01,0x03,0x9b,0xa9,0x69,0x51,0x61,0x7d,0x9e,0x62,0x16,0xe4,0x54,0x20,
|
||||
0x01,0x12,0x4a,0x68,0x81,0xc7,0x39,0x1e,0x23,0xdc,0x54,0xb3,0x36,0x99,0xb5,0x92,
|
||||
0xee,0x6d,0xa3,0xe5,0x02,0x99,0xcf,0xa0,0x60,0x84,0x20,0x11,0x25,0xbe,0x7c,0x69,
|
||||
0xa4,0x9f,0x32,0x03,0x27,0xd0,0x4b,0x99,0xf5,0x35,0x40,0x7c,0xa8,0x76,0x6e,0x10,
|
||||
0x12,0x67,0xe1,0x3f,0x28,0x4c,0xcf,0xd2,0x7a,0xd3,0xf6,0x4d,0x5c,0xfa,0x55,0xef,
|
||||
0x3f,0xa9,0x86,0xbd,0x64,0xd3,0xf1,0x8b,0x02,0x94,0x63,0x4f,0x9b,0x3f,0x39,0xf2,
|
||||
0xd0,0x0e,0x6f,0x24,0xb3,0x22,0x65,0x02,0x80,0xa9,0x40,0xca,0x07,0x16,0xfc,0x00,
|
||||
0x01,0x00,0x00
|
||||
};
|
||||
|
||||
static datatype data_init_script[]=
|
||||
{
|
||||
{ 255, 14999, 7045, data__init_script, 0 }
|
||||
{ 255, 15135, 7123, data__init_script, 0 }
|
||||
};
|
||||
|
||||
@@ -81,7 +81,8 @@ int get_next_FM_sector(HXCFE* floppycontext,HXCFE_SIDE * track,HXCFE_SECTCFG * s
|
||||
int sector_extractor_sm;
|
||||
int k,i;
|
||||
unsigned char crctable[32];
|
||||
uint8_t mask;
|
||||
uint8_t sector_size_mask;
|
||||
uint8_t idam_mask;
|
||||
|
||||
// C D C D C D C D
|
||||
//0xF8 - 00010100 01000100 // 0x1444
|
||||
@@ -92,6 +93,18 @@ int get_next_FM_sector(HXCFE* floppycontext,HXCFE_SIDE * track,HXCFE_SECTCFG * s
|
||||
//0xFD - 00010101 01000101 // 0x1545
|
||||
unsigned short datamark[6]={0x1444,0x1445,0x1454,0x1455,0x1544,0x1545};
|
||||
|
||||
sector_size_mask = hxcfe_getEnvVarValue( floppycontext, "SECTOR_SIZE_FIELD_MASK" );
|
||||
if( sector_size_mask <= 0 )
|
||||
{
|
||||
sector_size_mask = 0x7;
|
||||
}
|
||||
|
||||
idam_mask = hxcfe_getEnvVarValue( floppycontext, "FM_IDAM_FIELD_MASK" );
|
||||
if( idam_mask <= 0 )
|
||||
{
|
||||
idam_mask = 0xFF;
|
||||
}
|
||||
|
||||
bit_offset=track_offset;
|
||||
memset(sector,0,sizeof(HXCFE_SECTCFG));
|
||||
|
||||
@@ -122,7 +135,7 @@ int get_next_FM_sector(HXCFE* floppycontext,HXCFE_SIDE * track,HXCFE_SECTCFG * s
|
||||
|
||||
case LOOKFOR_ADDM:
|
||||
sector->endsectorindex = fmtobin(track->databuffer,NULL,track->tracklen,tmp_buffer,7,bit_offset,0);
|
||||
if(tmp_buffer[0]==0xFE)
|
||||
if( ( tmp_buffer[0] & idam_mask ) == ( 0xFE & idam_mask ) )
|
||||
{
|
||||
sector->startsectorindex = bit_offset;
|
||||
sector->startdataindex = sector->endsectorindex;
|
||||
@@ -137,13 +150,7 @@ int get_next_FM_sector(HXCFE* floppycontext,HXCFE_SIDE * track,HXCFE_SECTCFG * s
|
||||
sector->head = tmp_buffer[2];
|
||||
sector->sector = tmp_buffer[3];
|
||||
|
||||
mask = hxcfe_getEnvVarValue( floppycontext, "SECTOR_SIZE_FIELD_MASK" );
|
||||
if( mask <= 0 )
|
||||
{
|
||||
mask = 0x7;
|
||||
}
|
||||
|
||||
sector->sectorsize = sectorsize[tmp_buffer[4] & mask];
|
||||
sector->sectorsize = sectorsize[tmp_buffer[4] & sector_size_mask];
|
||||
sector->alternate_sector_size_id = tmp_buffer[4];
|
||||
sector->trackencoding = ISOFORMAT_SD;
|
||||
|
||||
@@ -169,7 +176,7 @@ int get_next_FM_sector(HXCFE* floppycontext,HXCFE_SIDE * track,HXCFE_SECTCFG * s
|
||||
|
||||
bit_offset = chgbitptr(track->tracklen,bit_offset,7 * 8);
|
||||
|
||||
floppycontext->hxc_printf(MSG_DEBUG,"Valid FM sector header found - Cyl:%d Side:%d Sect:%d Size:%d",tmp_buffer[1],tmp_buffer[2],tmp_buffer[3],sectorsize[tmp_buffer[4] & mask]);
|
||||
floppycontext->hxc_printf(MSG_DEBUG,"Valid FM sector header found - Cyl:%d Side:%d Sect:%d Size:%d",tmp_buffer[1],tmp_buffer[2],tmp_buffer[3],sectorsize[tmp_buffer[4] & sector_size_mask]);
|
||||
old_bit_offset=bit_offset;
|
||||
|
||||
sector_size = sector->sectorsize;
|
||||
|
||||
@@ -81,7 +81,20 @@ int get_next_MFM_sector(HXCFE* floppycontext,HXCFE_SIDE * track,HXCFE_SECTCFG *
|
||||
int sector_extractor_sm;
|
||||
int k;
|
||||
unsigned char crctable[32];
|
||||
uint8_t mask;
|
||||
uint8_t sector_size_mask;
|
||||
uint8_t idam_mask;
|
||||
|
||||
sector_size_mask = hxcfe_getEnvVarValue( floppycontext, "SECTOR_SIZE_FIELD_MASK" );
|
||||
if( sector_size_mask <= 0 )
|
||||
{
|
||||
sector_size_mask = 0x7;
|
||||
}
|
||||
|
||||
idam_mask = hxcfe_getEnvVarValue( floppycontext, "MFM_IDAM_FIELD_MASK" );
|
||||
if( idam_mask <= 0 )
|
||||
{
|
||||
idam_mask = 0xFF;
|
||||
}
|
||||
|
||||
memset(sector,0,sizeof(HXCFE_SECTCFG));
|
||||
|
||||
@@ -117,7 +130,7 @@ int get_next_MFM_sector(HXCFE* floppycontext,HXCFE_SIDE * track,HXCFE_SECTCFG *
|
||||
|
||||
case LOOKFOR_ADDM:
|
||||
tmp_bit_offset = mfmtobin(track->databuffer,NULL,track->tracklen,tmp_buffer,3+7,bit_offset,0);
|
||||
if(tmp_buffer[3]==0xFE)
|
||||
if( (tmp_buffer[3] & idam_mask) == (0xFE & idam_mask) ) // Masked 0xFE
|
||||
{
|
||||
#define SECT_HEADER_SIZE (3+7)
|
||||
|
||||
@@ -131,13 +144,7 @@ int get_next_MFM_sector(HXCFE* floppycontext,HXCFE_SIDE * track,HXCFE_SECTCFG *
|
||||
sector->head = tmp_buffer[5];
|
||||
sector->sector = tmp_buffer[6];
|
||||
|
||||
mask = hxcfe_getEnvVarValue( floppycontext, "SECTOR_SIZE_FIELD_MASK" );
|
||||
if( mask <= 0 )
|
||||
{
|
||||
mask = 0x7;
|
||||
}
|
||||
|
||||
sector->sectorsize = sectorsize[tmp_buffer[7] & mask];
|
||||
sector->sectorsize = sectorsize[tmp_buffer[7] & sector_size_mask];
|
||||
sector->alternate_sector_size_id = tmp_buffer[7];
|
||||
sector->trackencoding = ISOFORMAT_DD;
|
||||
sector->alternate_datamark = 0x00;
|
||||
@@ -197,7 +204,7 @@ int get_next_MFM_sector(HXCFE* floppycontext,HXCFE_SIDE * track,HXCFE_SECTCFG *
|
||||
sector->startdataindex = bit_offset;
|
||||
sector->endsectorindex = mfmtobin(track->databuffer,tmp_sector_index,track->tracklen,tmp_sector,3+1+sector_size+2,bit_offset,0);
|
||||
|
||||
if(tmp_sector[3] != 0xFE)
|
||||
if( (tmp_sector[3] & idam_mask) != (0xFE & idam_mask) )
|
||||
{
|
||||
sector->alternate_datamark = tmp_sector[3];
|
||||
sector->use_alternate_datamark = 0xFF;
|
||||
@@ -270,7 +277,7 @@ int get_next_MFM_sector(HXCFE* floppycontext,HXCFE_SIDE * track,HXCFE_SECTCFG *
|
||||
// "Empty" sector detection
|
||||
checkEmptySector(sector);
|
||||
|
||||
if(sector->alternate_datamark!=0xFE)
|
||||
if( (sector->alternate_datamark & idam_mask) != (0xFE & idam_mask) )
|
||||
bit_offset = chgbitptr( track->tracklen, bit_offset, 1 );
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user