From: <sba...@us...> - 2023-11-04 18:43:09
|
This is an automated email from the git hooks/post-receive-user script. sbaldovi pushed a commit to branch master in repository fuse. View the commit online: https://sourceforge.net/p/fuse-emulator/fuse/ci/edac6086d417189e4fa69a47a47328d0627fefae/ commit edac6086d417189e4fa69a47a47328d0627fefae Author: Gergely Szasz <sz...@hu...> AuthorDate: Sat Nov 4 17:12:38 2023 +0100 Allow to merge disk sides with different bpt (fixes bug #454). --- peripherals/disk/disk.c | 118 ++++++++++++++++++++++++++------------------- peripherals/disk/disk.h | 11 +++-- peripherals/disk/fdd.c | 17 +++---- peripherals/disk/fdd.h | 1 - peripherals/disk/upd_fdc.c | 24 ++++----- peripherals/disk/wd_fdc.c | 16 +++--- 6 files changed, 103 insertions(+), 84 deletions(-) diff --git a/peripherals/disk/disk.c b/peripherals/disk/disk.c index d4774b60..d850bfcc 100644 --- a/peripherals/disk/disk.c +++ b/peripherals/disk/disk.c @@ -150,6 +150,7 @@ position_context_save( const disk_t *d, disk_position_context_t *c ) c->clocks = d->clocks; c->fm = d->fm; c->weak = d->weak; + c->c_bpt = d->c_bpt; c->i = d->i; } @@ -160,6 +161,7 @@ position_context_restore( disk_t *d, const disk_position_context_t *c ) d->clocks = c->clocks; d->fm = c->fm; d->weak = c->weak; + d->c_bpt = c->c_bpt; d->i = c->i; } @@ -168,7 +170,7 @@ id_read( disk_t *d, int *head, int *track, int *sector, int *length ) { int a1mark = 0; - while( d->i < d->bpt ) { + while( d->i < d->c_bpt ) { if( d->track[ d->i ] == 0xa1 && bitmap_test( d->clocks, d->i ) ) { /* 0xa1 with clock */ a1mark = 1; @@ -195,7 +197,7 @@ datamark_read( disk_t *d, int *deleted ) { int a1mark = 0; - while( d->i < d->bpt ) { + while( d->i < d->c_bpt ) { if( d->track[ d->i ] == 0xa1 && bitmap_test( d->clocks, d->i ) ) { /* 0xa1 with clock */ a1mark = 1; @@ -328,14 +330,13 @@ guess_track_geom( disk_t *d, int head, int track, int *sector_base, static void update_tracks_mode( disk_t *d ) { - int i, j, bpt; + int i, j; int mfm, fm, weak; for( i = 0; i < d->cylinders * d->sides; i++ ) { DISK_SET_TRACK_IDX( d, i ); mfm = 0, fm = 0, weak = 0; - bpt = d->track[-3] + 256 * d->track[-2]; - for( j = DISK_CLEN( bpt ) - 1; j >= 0; j-- ) { + for( j = DISK_CLEN( d->c_bpt ) - 1; j >= 0; j-- ) { mfm |= ~d->fm[j]; fm |= d->fm[j]; weak |= d->weak[j]; @@ -417,7 +418,7 @@ static int gap_add( disk_t *d, int gap, int gaptype ) { disk_gap_t *g = &gaps[ gaptype ]; - if( d->i + g->len[gap] >= d->bpt ) /* too many data bytes */ + if( d->i + g->len[gap] >= d->c_bpt ) /* too many data bytes */ return 1; /*-------------------------------- given gap --------------------------------*/ memset( d->track + d->i, g->gap, g->len[gap] ); d->i += g->len[gap]; @@ -440,7 +441,7 @@ static int preindex_add( disk_t *d, int gaptype ) /* preindex gap and index mark */ { disk_gap_t *g = &gaps[ gaptype ]; - if( d->i + preindex_len( d, gaptype ) >= d->bpt ) + if( d->i + preindex_len( d, gaptype ) >= d->c_bpt ) return 1; /*------------------------------ pre-index gap -------------------------------*/ if( gap_add( d, 0, gaptype ) ) @@ -476,7 +477,7 @@ postindex_add( disk_t *d, int gaptype ) /* postindex gap */ static int gap4_add( disk_t *d, int gaptype ) { - int len = d->bpt - d->i; + int len = d->c_bpt - d->i; disk_gap_t *g = &gaps[ gaptype ]; if( len < 0 ) { @@ -484,7 +485,7 @@ gap4_add( disk_t *d, int gaptype ) } /*------------------------------ GAP IV ------------------------------*/ memset( d->track + d->i, g->gap, len ); /* GAP IV fill until end of track */ - d->i = d->bpt; + d->i = d->c_bpt; return 0; } @@ -505,7 +506,7 @@ id_add( disk_t *d, int h, int t, int s, int l, int gaptype, int crc_error ) { libspectrum_word crc = 0xffff; disk_gap_t *g = &gaps[ gaptype ]; - if( d->i + g->sync_len + ( g->mark >= 0 ? 3 : 0 ) + 7 >= d->bpt ) + if( d->i + g->sync_len + ( g->mark >= 0 ? 3 : 0 ) + 7 >= d->c_bpt ) return 1; /*------------------------------ sync ---------------------------*/ memset( d->track + d->i, g->sync, g->sync_len ); d->i += g->sync_len; @@ -547,7 +548,7 @@ static int datamark_add( disk_t *d, int ddam, int gaptype ) { disk_gap_t *g = &gaps[ gaptype ]; - if( d->i + g->len[2] + g->sync_len + ( g->mark >= 0 ? 3 : 0 ) + 1 >= d->bpt ) + if( d->i + g->len[2] + g->sync_len + ( g->mark >= 0 ? 3 : 0 ) + 1 >= d->c_bpt ) return 1; /*------------------------------ sync ---------------------------*/ memset( d->track + d->i, g->sync, g->sync_len ); d->i += g->sync_len; @@ -588,7 +589,7 @@ data_add( disk_t *d, buffer_t *buffer, unsigned char *data, int len, int ddam, crc = crc_fdc( crc, ddam ? 0xf8 : 0xfb ); /* deleted or normal */ if( len < 0 ) goto header_crc_error; /* CRC error */ - if( d->i + len + 2 >= d->bpt ) /* too many data bytes */ + if( d->i + len + 2 >= d->c_bpt ) /* too many data bytes */ return 1; /*------------------------------ data ------------------------------*/ if( start_data != NULL ) *start_data = d->i; /* record data start position */ @@ -755,6 +756,7 @@ disk_alloc( disk_t *d ) d->data = libspectrum_new0( libspectrum_byte, dlen ); + disk_update_tlens( d ); return d->status = DISK_OK; } @@ -780,7 +782,6 @@ disk_new( disk_t *d, int sides, int cylinders, d->wrprot = 0; d->dirty = 1; - disk_update_tlens( d ); return d->status = DISK_OK; } @@ -1732,12 +1733,22 @@ fprintf( stderr, " (%d/%d) %d", seclen, idlen, bpt ); cpc_fix = CPC_ISSUE_NONE; } } -// fix[i] = cpc_fix; buff[0x00] = cpc_fix; /* we use "Track-Info..." T to store "FIX" */ - if( buff[0x00] == CPC_ISSUE_4 ) bpt = 6500;/* Type 1 variant DD+ (e.g. Coin Op Hits) */ + /* bpt := bpt(0) + NxGAP3 */ + if( bpt > 6250 / ( buff[0x13] == 2 ? 1 : 2 ) ) { /* DD first try to align gap3 */ + if( cpc_fix == CPC_ISSUE_NONE && + bpt - buff[ 0x15 ] * gaps[gap].len[3] <= + 6250 / ( buff[0x13] == 2 ? 1 : 2 ) - buff[ 0x15 ] * 8 ) { + buff[0x16] = ( 6250 / ( buff[0x13] == 2 ? 1 : 2 ) + buff[ 0x15 ] * gaps[gap].len[3] - bpt ) / buff[ 0x15 ]; + buff[0x00] |= 0x80; /* we use custom gap3 length */ + } else if( cpc_fix == CPC_ISSUE_NONE ) { + fprintf( stderr, "Warning: unknown sector configuration, cannot build track. BPT too high: %d", bpt ); + } + } + if( buff[0x00] == CPC_ISSUE_4 && seclen > 6144 ) bpt = 6500;/* Type 1 variant DD+ (e.g. Coin Op Hits) */ else if( buff[0x00] != CPC_ISSUE_NONE ) bpt = 6250;/* we assume a standard DD track */ #ifdef CPC_DEBUG -fprintf( stderr, "----spec:%d bpt:%d\n", cpc_fix, bpt ); +fprintf( stderr, "----spec:%d gap3%s:%d bpt:%d\n", cpc_fix, buff[0x00] & 0x80 ? "*" : "", buff[0x16], bpt ); if( cpc_fix ) cpc_fix_fix = cpc_fix; #endif /* extended DSK image uses track size table */ @@ -1783,7 +1794,27 @@ if( cpc_fix_fix ) { if( hdrb[0x10] * d->sides + hdrb[0x11] > i ) /* adjust track No. */ i = hdrb[0x10] * d->sides + hdrb[0x11]; + cpc_fix = hdrb[ 0x00 ]; + if( cpc_fix & 0x80 ) { /* we use custom gap3 value */ + int new_gap; + + new_gap = hdrb[0x13] == 2 ? GAP_CUSTOM_MFM : GAP_CUSTOM_FM; + for( j = 0; j < 3; j++ ) + gaps[ new_gap ].len[ j ] = gaps[ gap ].len[ j ]; + gaps[ new_gap ].len[ 3 ] = hdrb[0x16]; + gap = new_gap; + cpc_fix &= 0x7f; + } + DISK_SET_TRACK_IDX( d, i ); + if( d->c_bpt == 6500 ) { /* DD+ */ + if( cpc_fix != CPC_ISSUE_4 ) { /* only + tracks use 6500 bpt */ + d->track[-3] = 6250 % 256; + d->track[-2] = 6250 / 256; + d->c_bpt = 6250; + DISK_SET_TRACK_IDX( d, i ); /* recalculate */ + } + } d->i = 0; if( preindex) preindex_add( d, gap ); @@ -1804,7 +1835,6 @@ if( cpc_fix_fix ) { hdrb[ 0x1a + 8 * j ], hdrb[ 0x1b + 8 * j ], gap, hdrb[ 0x1c + 8 * j ] & 0x20 && !( hdrb[ 0x1d + 8 * j ] & 0x20 ) ? CRC_ERROR : CRC_OK ); - cpc_fix = hdrb[ 0x00 ]; if( cpc_fix == CPC_ISSUE_1 && j == 0 ) { /* 6144 */ data_add( d, buffer, NULL, seclen, hdrb[ 0x1d + 8 * j ] & 0x40 ? DDAM : NO_DDAM, gap, @@ -1853,7 +1883,7 @@ if( cpc_fix_fix ) { /* idx -> first data byte */ d->i = idx + idlen; /* end of the sector data (CRC) */ for( k = seclen - idlen; k > 0; k-- ) { - if( d->i == d->bpt ) + if( d->i == d->c_bpt ) d->i = 0; /* wrap around */ d->track[ d->i ] = *buff; d->i++; @@ -2280,7 +2310,6 @@ fuse_exiting = 1; } utils_close_file( &buffer.file ); d->dirty = 0; - disk_update_tlens( d ); update_tracks_mode( d ); d->filename = utils_safe_strdup( filename ); #ifdef CPC_DEBUG_EXIT @@ -2296,10 +2325,8 @@ int disk_merge_sides( disk_t *d, disk_t *d1, disk_t *d2, int autofill ) { int i; - int clen; if( d1->sides != 1 || d2->sides != 1 || - d1->bpt != d2->bpt || ( autofill < 0 && d1->cylinders != d2->cylinders ) ) return DISK_GEOM; @@ -2308,36 +2335,35 @@ disk_merge_sides( disk_t *d, disk_t *d1, disk_t *d2, int autofill ) d->sides = 2; d->type = d1->type; d->cylinders = d2->cylinders > d1->cylinders ? d2->cylinders : d1->cylinders; - d->bpt = d1->bpt; + d->bpt = d2->bpt >= d1->bpt ? d2->bpt : d1->bpt; d->density = DISK_DENS_AUTO; if( disk_alloc( d ) != DISK_OK ) return d->status; - clen = DISK_CLEN( d->bpt ); d->track = d->data; d1->track = d1->data; d2->track = d2->data; for( i = 0; i < d->cylinders; i++ ) { if( i < d1->cylinders ) - memcpy( d->track, d1->track, d->tlen ); + memcpy( d->track, d1->track, d1->tlen ); else { - d->track[0] = d->bpt & 0xff; - d->track[1] = ( d->bpt >> 8 ) & 0xff; + d->track[0] = d1->bpt & 0xff; + d->track[1] = ( d1->bpt >> 8 ) & 0xff; d->track[2] = 0x00; - memset( d->track + 3, autofill & 0xff, d->bpt ); /* fill data */ - memset( d->track + 3 + d->bpt, 0x00, 3 * clen ); /* no clock and other marks */ + memset( d->track + 3, autofill & 0xff, d1->bpt ); /* fill data */ + memset( d->track + 3 + d1->bpt, 0x00, 3 * DISK_CLEN( d1->bpt ) ); /* no clock and other marks */ } d->track += d->tlen; d1->track += d1->tlen; if( i < d2->cylinders ) - memcpy( d->track, d2->track, d->tlen ); + memcpy( d->track, d2->track, d2->tlen ); else { - d->track[0] = d->bpt & 0xff; - d->track[1] = ( d->bpt >> 8 ) & 0xff; + d->track[0] = d2->bpt & 0xff; + d->track[1] = ( d2->bpt >> 8 ) & 0xff; d->track[2] = 0x00; - memset( d->track + 1, autofill & 0xff, d->bpt ); /* fill data */ - memset( d->track + 1 + d->bpt, 0x00, 3 * clen ); /* no clock and other marks */ + memset( d->track + 3, autofill & 0xff, d2->bpt ); /* fill data */ + memset( d->track + 3 + d2->bpt, 0x00, 3 * DISK_CLEN( d2->bpt ) ); /* no clock and other marks */ } d->track += d->tlen; d2->track += d2->tlen; @@ -2365,10 +2391,13 @@ disk_open( disk_t *d, const char *filename, int preindex, int merge_disks ) return disk_open2( d, filename, preindex ); filename2 = (char *)filename + ( l - 1 ); - while( l ) { /* [Ss]ide[ _][abAB12][ _.] */ + while( l ) { /* [Ss]ide[ _][abAB12][ _.]*[ _.] */ if( g == 0 && ( *filename2 == '.' || *filename2 == '_' || *filename2 == ' ' ) ) { g++; + } else if( g == 1 && ( *filename2 == '.' || *filename2 == '_' || + *filename2 == ' ' ) ) { + ; } else if( g == 1 && ( *filename2 == '1' || *filename2 == 'a' || *filename2 == 'A' ) ) { g++; @@ -2917,7 +2946,7 @@ write_log( FILE *file, disk_t *d ) if( !( k % 16 ) ) fprintf( file, " | %s\n", str ); d->i++; - if( d->i >= d->bpt ) { + if( d->i >= d->c_bpt ) { d->i = 0; rev++; if( rev == 6 ) @@ -2935,7 +2964,7 @@ write_log( FILE *file, disk_t *d ) fprintf( file, "\n*********\nSide: %d, cylinder: %d type: 0x%02x tlen: %5u\n", i, j, d->track[-1], d->track[-3] + 256 * d->track[-2] ); k = 0; - while( d->i < d->bpt ) { + while( d->i < d->c_bpt ) { if( !( k % 8 ) ) fprintf( file, "0x%08x:", d->i ); fprintf( file, " 0x%04x", d->track[ d->i ] | @@ -2958,8 +2987,7 @@ disk_write( disk_t *d, const char *filename ) FILE *file; const char *ext; size_t namelen; - libspectrum_byte *t, *c, *f, *w; - int idx; + disk_position_context_t context; if( ( file = fopen( filename, "wb" ) ) == NULL ) return d->status = DISK_WRFILE; @@ -3002,11 +3030,7 @@ disk_write( disk_t *d, const char *filename ) } /* Save position of current data */ - t = d->track; - c = d->clocks; - f = d->fm; - w = d->weak; - idx = d->i; + position_context_save( d, &context ); update_tracks_mode( d ); switch( d->type ) { @@ -3045,13 +3069,7 @@ disk_write( disk_t *d, const char *filename ) break; } - /* Restore position of previous data. - FIXME: This is a workaround. Revisit bug #279 and rethink a proper fix */ - d->track = t; - d->clocks = c; - d->fm = f; - d->weak = w; - d->i = idx; + position_context_restore( d, &context ); if( d->status != DISK_OK ) { fclose( file ); diff --git a/peripherals/disk/disk.h b/peripherals/disk/disk.h index ef73912f..1e5f7432 100644 --- a/peripherals/disk/disk.h +++ b/peripherals/disk/disk.h @@ -97,6 +97,7 @@ typedef struct disk_t { libspectrum_byte *data; /* disk data */ /* private part */ int tlen; /* length of a track with clock and other marks (bpt + 3/8bpt) */ + int c_bpt; /* current track bpt value it can be other than allocated bpt */ libspectrum_byte *track; /* current track data bytes */ libspectrum_byte *clocks; /* clock marks bits */ libspectrum_byte *fm; /* FM/MFM marks bits */ @@ -111,7 +112,7 @@ TRACK_LEN TYPE TRACK......DATA CLOCK..MARKS MF..MARKS WEAK..MARKS ^ ^ ^ ^ |__ track |__ clocks |__ mf |__ weak so, track[-1] = TYPE - TLEN = track[-3] + tarck 256 * track[-2] + TLEN = track[-3] + 256 * track[-2] TYPE is Track type as in UDI spec (0x00, 0x01, 0x02, 0x80, 0x81, 0x82) after update_tracks_mode() !!! */ @@ -119,9 +120,10 @@ TRACK_LEN TYPE TRACK......DATA CLOCK..MARKS MF..MARKS WEAK..MARKS #define DISK_SET_TRACK_IDX( d, idx ) \ d->track = d->data + 3 + ( idx ) * d->tlen; \ - d->clocks = d->track + d->bpt; \ - d->fm = d->clocks + DISK_CLEN( d->bpt ); \ - d->weak = d->fm + DISK_CLEN( d->bpt ) + d->c_bpt = d->track[-3] + 256 * d->track[-2]; \ + d->clocks = d->track + d->c_bpt; \ + d->fm = d->clocks + DISK_CLEN( d->c_bpt ); \ + d->weak = d->fm + DISK_CLEN( d->c_bpt ) #define DISK_SET_TRACK( d, head, cyl ) \ DISK_SET_TRACK_IDX( (d), (d)->sides * cyl + head ) @@ -132,6 +134,7 @@ typedef struct disk_position_context_t { libspectrum_byte *fm; /* FM/MFM marks bits */ libspectrum_byte *weak; /* weak marks bits/weak data */ int i; /* index for track and clocks */ + int c_bpt; } disk_position_context_t; const char *disk_strerror( int error ); diff --git a/peripherals/disk/fdd.c b/peripherals/disk/fdd.c index c15c1885..ecc8737c 100644 --- a/peripherals/disk/fdd.c +++ b/peripherals/disk/fdd.c @@ -133,16 +133,15 @@ fdd_set_data( fdd_t *d, int fact ) } DISK_SET_TRACK( &d->disk, head, d->c_cylinder ); - d->c_bpt = d->disk.track[-3] + 256 * d->disk.track[-2]; if( fact > 0 ) { /* this generate a bpt/fact +-10% triangular distribution skip in bytes i know, we should use the higher bits of rand(), but we not keen on _real_ (pseudo)random numbers... ;) */ - d->disk.i += d->c_bpt / fact + d->c_bpt * + d->disk.i += d->disk.c_bpt / fact + d->disk.c_bpt * ( rand() % 10 + rand() % 10 - 9 ) / fact / 100; - while( d->disk.i >= d->c_bpt ) - d->disk.i -= d->c_bpt; + while( d->disk.i >= d->disk.c_bpt ) + d->disk.i -= d->disk.c_bpt; } d->index = d->disk.i ? 0 : 1; } @@ -353,24 +352,24 @@ fdd_read_write_data( fdd_t *d, fdd_write_t write ) { if( !d->selected || !d->ready || !d->loadhead || d->disk.track == NULL ) { if( d->loaded && d->motoron ) { /* spin the disk */ - if( d->disk.i >= d->c_bpt ) { /* next data byte */ + if( d->disk.i >= d->disk.c_bpt ) { /* next data byte */ d->disk.i = 0; } if( !write ) d->data = 0x100; /* no data */ d->disk.i++; - d->index = d->disk.i >= d->c_bpt ? 1 : 0; + d->index = d->disk.i >= d->disk.c_bpt ? 1 : 0; } return d->status = FDD_OK; } - if( d->disk.i >= d->c_bpt ) { /* next data byte */ + if( d->disk.i >= d->disk.c_bpt ) { /* next data byte */ d->disk.i = 0; } if( write ) { if( d->disk.wrprot ) { d->disk.i++; - d->index = d->disk.i >= d->c_bpt ? 1 : 0; + d->index = d->disk.i >= d->disk.c_bpt ? 1 : 0; return d->status = FDD_RDONLY; } d->disk.track[ d->disk.i ] = d->data & 0x00ff; @@ -406,7 +405,7 @@ fdd_read_write_data( fdd_t *d, fdd_write_t write ) } } d->disk.i++; - d->index = d->disk.i >= d->c_bpt ? 1 : 0; + d->index = d->disk.i >= d->disk.c_bpt ? 1 : 0; return d->status = FDD_OK; } diff --git a/peripherals/disk/fdd.h b/peripherals/disk/fdd.h index 8a2e03f0..3cab5655 100644 --- a/peripherals/disk/fdd.h +++ b/peripherals/disk/fdd.h @@ -101,7 +101,6 @@ typedef struct fdd_t { int do_read_weak; int c_head; /* current head (side) */ int c_cylinder; /* current cylinder number (0 -> TR00) */ - int c_bpt; /* current track length in bytes */ int motoron; /* motor on */ int loadhead; /* head loaded */ int index_pulse; /* 'second' index hole, for index status */ diff --git a/peripherals/disk/upd_fdc.c b/peripherals/disk/upd_fdc.c index 64d9974c..73756e73 100644 --- a/peripherals/disk/upd_fdc.c +++ b/peripherals/disk/upd_fdc.c @@ -542,12 +542,12 @@ start_read_id( upd_fdc *f ) f->read_id = 1; } if( f->rev ) { - i = f->current_drive->disk.i >= f->current_drive->disk.bpt ? + i = f->current_drive->disk.i >= f->current_drive->disk.c_bpt ? 0 : f->current_drive->disk.i; /* start position */ if( read_id( f ) != 2 ) f->rev = 0; - i = f->current_drive->disk.bpt ? - ( f->current_drive->disk.i - i ) * 200 / f->current_drive->disk.bpt : 200; + i = f->current_drive->disk.c_bpt ? + ( f->current_drive->disk.i - i ) * 200 / f->current_drive->disk.c_bpt : 200; if( i > 0 ) { event_add_with_data( tstates + i * /* i * 1/20 revolution */ machine_current->timings.processor_speed / 1000, @@ -580,12 +580,12 @@ start_read_diag( upd_fdc *f ) f->read_id = 1; } if( f->rev ) { - i = f->current_drive->disk.i >= f->current_drive->disk.bpt ? + i = f->current_drive->disk.i >= f->current_drive->disk.c_bpt ? 0 : f->current_drive->disk.i; /* start position */ if( read_id( f ) != 2 ) f->rev = 0; - i = f->current_drive->disk.bpt ? - ( f->current_drive->disk.i - i ) * 200 / f->current_drive->disk.bpt : 200; + i = f->current_drive->disk.c_bpt ? + ( f->current_drive->disk.i - i ) * 200 / f->current_drive->disk.c_bpt : 200; if( i > 0 ) { event_add_with_data( tstates + i * /* i * 1/20 revolution */ machine_current->timings.processor_speed / 1000, @@ -648,14 +648,14 @@ multi_track_next: f->read_id = 1; } while( f->rev ) { - i = f->current_drive->disk.i >= f->current_drive->disk.bpt ? + i = f->current_drive->disk.i >= f->current_drive->disk.c_bpt ? 0 : f->current_drive->disk.i; /* start position */ if( seek_id( f ) == 0 ) f->rev = 0; else f->id_mark = UPD_FDC_AM_NONE; - i = f->current_drive->disk.bpt ? - ( f->current_drive->disk.i - i ) * 200 / f->current_drive->disk.bpt : 200; + i = f->current_drive->disk.c_bpt ? + ( f->current_drive->disk.i - i ) * 200 / f->current_drive->disk.c_bpt : 200; if( i > 0 ) { event_add_with_data( tstates + i * /* i * 1/20 revolution */ machine_current->timings.processor_speed / 1000, @@ -743,14 +743,14 @@ multi_track_next: f->read_id = 1; } while( f->rev ) { - i = f->current_drive->disk.i >= f->current_drive->disk.bpt ? + i = f->current_drive->disk.i >= f->current_drive->disk.c_bpt ? 0 : f->current_drive->disk.i; /* start position */ if( seek_id( f ) == 0 ) f->rev = 0; else f->id_mark = UPD_FDC_AM_NONE; - i = f->current_drive->disk.bpt ? - ( f->current_drive->disk.i - i ) * 200 / f->current_drive->disk.bpt : 200; + i = f->current_drive->disk.c_bpt ? + ( f->current_drive->disk.i - i ) * 200 / f->current_drive->disk.c_bpt : 200; if( i > 0 ) { event_add_with_data( tstates + i * /* i * 1/20 revolution */ machine_current->timings.processor_speed / 1000, diff --git a/peripherals/disk/wd_fdc.c b/peripherals/disk/wd_fdc.c index 909d9618..ef84b3aa 100644 --- a/peripherals/disk/wd_fdc.c +++ b/peripherals/disk/wd_fdc.c @@ -404,14 +404,14 @@ wd_fdc_seek_verify_read_id( wd_fdc *f ) event_remove_type( fdc_event ); if( f->id_mark == WD_FDC_AM_NONE ) { while( f->rev ) { - i = d->disk.i >= d->disk.bpt ? 0 : d->disk.i; /* start position */ + i = d->disk.i >= d->disk.c_bpt ? 0 : d->disk.i; /* start position */ if( !read_id( f ) ) { if( f->id_track != f->track_register ) { f->status_register |= WD_FDC_SR_RNF; } } else f->id_mark = WD_FDC_AM_NONE; - i = d->disk.bpt ? ( d->disk.i - i ) * 200 / d->disk.bpt : 200; + i = d->disk.c_bpt ? ( d->disk.i - i ) * 200 / d->disk.c_bpt : 200; if( i > 0 ) { event_add_with_data( tstates + i * /* i * 1/20 revolution */ machine_current->timings.processor_speed / 1000, @@ -561,7 +561,7 @@ wd_fdc_type_ii_seek( wd_fdc *f ) if( f->id_mark == WD_FDC_AM_NONE ) { f->read_id = 1; while( f->rev ) { - i = d->disk.i >= d->disk.bpt ? 0 : d->disk.i; /* start position */ + i = d->disk.i >= d->disk.c_bpt ? 0 : d->disk.i; /* start position */ if( !read_id( f ) ) { if( ( f->data_check_head != -1 && f->data_check_head != !!( f->id_head ) ) || ( f->id_track != f->track_register || f->id_sector != f->sector_register ) ) { @@ -570,8 +570,8 @@ wd_fdc_type_ii_seek( wd_fdc *f ) } else { f->id_mark = WD_FDC_AM_NONE; } - i = d->disk.bpt ? - ( d->disk.i - i ) * 200 / d->disk.bpt : 200; + i = d->disk.c_bpt ? + ( d->disk.i - i ) * 200 / d->disk.c_bpt : 200; if( i > 0 ) { event_add_with_data( tstates + i * /* i * 1/20 revolution */ machine_current->timings.processor_speed / 1000, @@ -723,10 +723,10 @@ wd_fdc_type_iii( wd_fdc *f ) } if( f->id_mark == WD_FDC_AM_NONE ) { while( f->rev ) { - i = d->disk.i >= d->disk.bpt ? 0 : d->disk.i; /* start position */ + i = d->disk.i >= d->disk.c_bpt ? 0 : d->disk.i; /* start position */ read_id( f ); - i = d->disk.bpt ? - ( d->disk.i - i ) * 200 / d->disk.bpt : 200; + i = d->disk.c_bpt ? + ( d->disk.i - i ) * 200 / d->disk.c_bpt : 200; if( i > 0 ) { event_add_with_data( tstates + i * /* i * 1/20 revolution */ machine_current->timings.processor_speed / 1000, |