////////////////////////////////////////////////////////////
//
//  FUNCTION: U8 ReadFlashC (U32 RFLaddr);
//
//  read a byte from flash
//
//  ROUTINE MUST BE EXPANDED IF USED FROM ANY ISR

U8 ReadFlashC (U32 RFLaddr)
{
U16 RFLoffs;
U8  RFLpage;
U8  RFLsvSfpg; 
U8  RFLsvIE;

U32 RFLmomma; 
  
  RFLmomma = RFLaddr ;
  
  RFLoffs = (U16) (RFLaddr & 0xFFFF);
  RFLpage = (U8)  ((RFLaddr >> 16) & 0xFF);
  SF_P4       &= 0xe0;                
  SF_P4       |= RFLpage;
  RFLsvIE     = SG_IE;
  SBG_IE_EA   = FALSE;
  RFLsvSfpg = SG_SFRPAGE;                
  SG_SFRPAGE  = 0x00;                
  S0_EMI0CF   = 0x3c; // select external memory
  RFLsvSfpg   = *(U8 xdata*) RFLoffs;
  S0_EMI0CF   = 0x30; // select internal memory
  SG_SFRPAGE  = RFLsvSfpg;                
  SG_IE       = RFLsvIE;
  return  (RFLsvSfpg);
} // end ReadFlashC