// File: 16f648a_g.lkr
// Generic linker script for the PIC16F648A processor

#IFDEF _DEBUG
  
  LIBPATH  .
  
  CODEPAGE   NAME=page0     START=0x0      END=0x7FF
  CODEPAGE   NAME=page1     START=0x800    END=0xEFF
  CODEPAGE   NAME=debug     START=0xF00    END=0xFFF    PROTECTED
  CODEPAGE   NAME=.idlocs   START=0x2000   END=0x2003   PROTECTED
  CODEPAGE   NAME=.icd_inst START=0x2004   END=0x2004   PROTECTED
  CODEPAGE   NAME=.devid    START=0x2006   END=0x2006   PROTECTED
  CODEPAGE   NAME=.config   START=0x2007   END=0x2007   PROTECTED
  CODEPAGE   NAME=.oscval   START=0x2008   END=0x2008   PROTECTED
  CODEPAGE   NAME=.test     START=0x2009   END=0x200F   PROTECTED
  CODEPAGE   NAME=eedata    START=0x2100   END=0x21FF   PROTECTED
  
  DATABANK   NAME=sfr0      START=0x0      END=0x1F     PROTECTED
  DATABANK   NAME=sfr1      START=0x80     END=0x9F     PROTECTED
  DATABANK   NAME=sfr2      START=0x100    END=0x11F    PROTECTED
  DATABANK   NAME=sfr3      START=0x180    END=0x19F    PROTECTED
  
  DATABANK   NAME=gpr0      START=0x20     END=0x6F
  DATABANK   NAME=gpr1      START=0xA0     END=0xEF
  DATABANK   NAME=gpr2      START=0x120    END=0x164
  DATABANK   NAME=dbg2      START=0x165    END=0x16F    PROTECTED
  
  SHAREBANK  NAME=dbgnobnk  START=0x70     END=0x70     PROTECTED
  SHAREBANK  NAME=dbgnobnk  START=0xF0     END=0xF0     PROTECTED
  SHAREBANK  NAME=dbgnobnk  START=0x170    END=0x170    PROTECTED
  SHAREBANK  NAME=dbgnobnk  START=0x1F0    END=0x1F0    PROTECTED
  
  SHAREBANK  NAME=gprnobnk  START=0x71     END=0x7F
  SHAREBANK  NAME=gprnobnk  START=0xF1     END=0xFF     PROTECTED
  SHAREBANK  NAME=gprnobnk  START=0x171    END=0x17F    PROTECTED
  SHAREBANK  NAME=gprnobnk  START=0x1F1    END=0x1FF    PROTECTED
  
  SECTION    NAME=PROG1    ROM=page0       // ROM code space
  SECTION    NAME=PROG2    ROM=page1       // ROM code space
  SECTION    NAME=DEBUG    ROM=debug       // ICD debug exec 
  SECTION    NAME=IDLOCS   ROM=.idlocs     // ID locations
  SECTION    NAME=ICD_INST ROM=.icd_inst   // ICD instruction
  SECTION    NAME=DEVID    ROM=.devid      // device id
  SECTION    NAME=OSCVAL   ROM=.oscval     // Oscillator value 
  SECTION    NAME=TEST     ROM=.test       // Test program memory 
  SECTION    NAME=DEEPROM  ROM=eedata      // Data EEPROM
#ELSE
  
  LIBPATH  .
  
  CODEPAGE   NAME=page0     START=0x0      END=0x7FF
  CODEPAGE   NAME=page1     START=0x800    END=0xFFF
  CODEPAGE   NAME=.idlocs   START=0x2000   END=0x2003   PROTECTED
  CODEPAGE   NAME=.devid    START=0x2006   END=0x2006   PROTECTED
  CODEPAGE   NAME=.config   START=0x2007   END=0x2007   PROTECTED
  CODEPAGE   NAME=.oscval   START=0x2008   END=0x2008   PROTECTED
  CODEPAGE   NAME=.test     START=0x2009   END=0x200F   PROTECTED
  CODEPAGE   NAME=eedata    START=0x2100   END=0x21FF   PROTECTED
  
  DATABANK   NAME=sfr0      START=0x0      END=0x1F     PROTECTED
  DATABANK   NAME=sfr1      START=0x80     END=0x9F     PROTECTED
  DATABANK   NAME=sfr2      START=0x100    END=0x11F    PROTECTED
  DATABANK   NAME=sfr3      START=0x180    END=0x19F    PROTECTED
  
  DATABANK   NAME=gpr0      START=0x20     END=0x6F
  DATABANK   NAME=gpr1      START=0xA0     END=0xEF
  DATABANK   NAME=gpr2      START=0x120    END=0x16F
  
  SHAREBANK  NAME=gprnobnk  START=0x70     END=0x7F
  SHAREBANK  NAME=gprnobnk  START=0xF0     END=0xFF     PROTECTED
  SHAREBANK  NAME=gprnobnk  START=0x170    END=0x17F    PROTECTED
  SHAREBANK  NAME=gprnobnk  START=0x1F0    END=0x1FF    PROTECTED
  
  SECTION    NAME=PROG1    ROM=page0       // ROM code space
  SECTION    NAME=PROG2    ROM=page1       // ROM code space
  SECTION    NAME=IDLOCS   ROM=.idlocs     // ID locations
  SECTION    NAME=DEVID    ROM=.devid      // device id
  SECTION    NAME=OSCVAL   ROM=.oscval     // Oscillator value 
  SECTION    NAME=TEST     ROM=.test       // Test program memory 
  SECTION    NAME=DEEPROM  ROM=eedata      // Data EEPROM
#FI