/*
    CaPriCe Forever - Amstrad CPC 464/664/6128 emulator
    Copyright (C) 2015-2019 by Frédéric Coste

    This program 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 3 of the License, or
    (at your option) any later version.

    This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
*/


#include "..\Native_CPC.h"


/*
** Make sure we can call this stuff from C++.
*/
#ifdef __cplusplus
extern "C" {
#endif


//===================
// PATCH begin
#ifdef _PATCH_ENABLE

#endif /* _PATCH_ENABLE */
// PATCH end
//===================


extern tUShort CalcCRC_DATA(tSector* SectorP);


tVoid Native_DiskUpdateSectorInfo(tDiskOperation* DiskOperationP, tSector* SectorP)
/***********************************************************************
 *
 *  Native_DiskUpdateSectorInfo
 *
 ***********************************************************************/
{
tTrack* TrackP;
tUChar* dataP;
tULong Loop;
tUShort computed_crc;
tUChar Cylinder;
tUChar Head;

  Cylinder = SectorP->CHRN[0];
  Head = SectorP->CHRN[1];

  if (    (Cylinder < (tUChar)DiskOperationP->Drive->tracks)
       && (Head < (tUChar)(DiskOperationP->Drive->sides+1)) )
  {
    TrackP = &DiskOperationP->Drive->track[Cylinder][Head];

    // sector is empty ?
    dataP = SectorP->new_data ? SectorP->new_data :SectorP->data;
    for (Loop=0; Loop < SectorP->data_size; Loop++)
    {
      if (*dataP++ != (tUChar)TrackP->filler)
        break;
    }
    SectorP->empty = (Loop < SectorP->data_size) ? 0 : 1;

    // update data CRC
    computed_crc = CalcCRC_DATA(SectorP);
    SectorP->data_crc[SECTOR_CRC_MSB] = (computed_crc >> 8) & 0xff;
    SectorP->data_crc[SECTOR_CRC_LSB] = computed_crc & 0xff;
  }
}
/*----------------------------------------------------------------------------*/

#ifdef __cplusplus
}  /* End of the 'extern "C"' block */
#endif


